Çekim Ağ Geçitleri
Bu belge, kullanıcıların ve geliştiricilerin, tokenleri L2’den L1’e çekmek için ağ geçitlerini nasıl kullanabileceğini açıklamaktadır. Aşağıdaki tabloda listelenen, standart tokenler için çeşitli ağ geçitleri ve L2’de bir ağ geçidi yönlendiricisi sağlıyoruz.
| Gateway Kontratı | Açıklama |
|---|---|
L2GatewayRouter | Ağ geçidi yönlendiricisi, ETH ve ERC20 tokenlarının yatırılmasını destekler. |
L2ETHGateway | ETH yatırmak için ağ geçidi. |
L2StandardERC20Gateway | Standart ERC20 token yatırma işlemleri için ağ geçidi. |
L2CustomERC20Gateway | Özel ERC20 token yatırma işlemleri için ağ geçidi. |
L2WETHGateway | Wrapped ETH yatırma işlemleri için ağ geçidi. |
L2ERC721Gateway | ERC-721 token yatırma işlemleri için ağ geçidi. |
L2ERC1155Gateway | ERC-1155 token yatırma işlemleri için ağ geçidi. |
Genel Bakış
Şekilde L2’den L1’e para çekme iş akışı gösterilmektedir. Kullanıcılar token çekme işlemini başlatmak için ağ geçitlerini ararlar. Geri çekme işlemi L2ScrollMessengera gönderilen bir mesajla kodlanır ve bu mesaj daha sonra L2MessageQueueya eklenir. L2MessageQueue bir Withdraw Trie’sini korur ve her yeni mesaj eklendiğinde kökü günceller. Withdraw Trie kökü, L2 durum kökü ile birlikte L1 rollup sözleşmesinde sonlandırılır. Yeni Withdraw Trie kökü L1’de sonlandırıldıktan sonra, kullanıcılar veya üçüncü taraflar Withdraw Trie köküne geçerli bir Merkle Inclusion Kanıtı oluşturabilir ve L1’de çekilmeyi tamamlamak için bir withdraw execution işlemi gönderebilir. L2’den L1’e mesaj aktarma iş akışı hakkında daha fazla ayrıntıyı Alanlar Arası Mesajlaşma bölümünde bulabilirsiniz.
Sonraki bölümlerde farklı tokenlerin nasıl geri çekildiğinin ayrıntıları açıklanmaktadır.
ETH’i Çekme
ETH tokenının çekilmesi şu şekilde çalışır.
-
L2GatewayRouter, ETH’i L2’den L1’e çekmek için üç işlev sağlar.withdrawETHAndCallişlevi, aynı anda ETH’i çekebilir ve bir sözleşme çağrısı gerçekleştirebilir.function withdrawETH(uint256 _amount, uint256 _gasLimit) external payable;function withdrawETH(address _to, uint256 _amount, uint256 _gasLimit) public payable;function withdrawETHAndCall(address _to,uint256 _amount,bytes calldata _data,uint256 _gasLimit) external payable; -
withdrawETHAndCallişlevleriL2ETHGatewayi çağırır.L2ETHGateway, çekilme mesajını kodlar ve çekilen ETH ile birlikteL2ScrollMessengersözleşmesine gönderir. -
Geri çekilen ETH tekrar
L2ScrollMessengersözleşmesine kilitlenir.L2ScrollMessenger, mesajıL2MessageQueuesözleşmesindeki mesaj kuyruğuna ekler. -
L1’deki para çekme işlemi, para çekme işlemini tamamlamak için
L1ScrollMessenger.relayMessageWithProoffonksiyonunu çağırır. ETH’in çekilmesi durumunda,relayMessageWithProoffonksiyonu, ETH’i L1’deki alıcı hesabına geri göndermek içinL1ETHGateway.finalizeWithdrawETHi çağırır. -
Kullanıcı L2’de
withdrawETHAndCallfonksiyonunu çağırırsa,L1ETHGatewaysözleşmesindekifinalizeWithdrawETH, ek verileri hedef L1 sözleşmesine iletecektir.
ERC20 Tokenlarının Çekilmesi
ERC20 tokenlarının geri çekilmesi şu şekilde çalışır.
-
ERC20 tokenlerini L1’den L2’ye çekmek için kullanıcılar aşağıda gösterilen
L2GatewayRouter.withdrawERC20veL2GatewayRouter.withdrawERC20AndCallı kullanabilirler.function withdrawERC20(address _token, uint256 _amount, uint256 _gasLimit) external payable;function withdrawERC20(address _token, address _to, uint256 _amount, uint256 _gasLimit) external payable;function withdrawERC20AndCall(address _token,address _to,uint256 _amount,bytes memory _data,uint256 _gasLimit) public payable; -
ERC20 tokenlerinden ağ geçidine yapılan eşlemeye bağlı olarak,
L2GatewayRouterilgili ağ geçidini,L2StandardERC20Gateway,L2CustomERC20GatewayveyaL2WETHGatewayi çağırır. Adımların geri kalanı ayrı ayrı açıklanacaktır.
Standart ve Özel ERC20 Tokenları
Standart ve özel ERC20 tokenlarının geri çekilmesi aşağıdaki şekilde gerçekleşir.
L2StandardERC20GatewayveyaL2CustomERC20Gatewaysözleşmesi, çekilen ERC20 tokenını yakar, çekilme işlemini bir mesaja kodlar veL2ScrollMessengera gönderir.- L1 para çekme işleminin kendisi, L1’deki para çekme işlemlerini tamamlamak için
L1ScrollMessenger.relayMessageWithProoffonksiyonunu çağırır. Standart veya özel ERC20 tokenının çekilmesi durumunda, işlem sırasıylaL1StandardERC20GatewayveyaL1CustomERC20GatewaysözleşmesindefinalizeWithdrawERC20fonksiyonunu çağırır.L1StandardERC20Gatewaysözleşmesinde, eğer bu bir ERC20 tokenının ilk çekilme işlemiyse,finalizeWithdrawERC20işlevi, eşlemeyitokenMappingde L1 token adresinden L2 token adresine güncelleyecektir.
- L1 ERC20 token ağ geçidi, kilitli ERC20 tokenlarını kendisinden L1’deki alıcı adresine aktararak serbest bırakır.
- Kullanıcı L2’de
withdrawERC20AndCallçağırırsa ağ geçitleri ek verilerle hedef L1 sözleşmesini arayacaktır.
WETH Tokenı
L2’de Wrapped ETH tokenı için özel bir ağ geçidi L2WETHGateway sağlıyoruz ve ağ geçidi adresini L2GatewayRoutera kaydediyoruz. WETH tokenının geri çekilmesi şu şekilde çalışır.
L2WETHGateway, çekilen WETH tokenını kendisine aktarır ve WETH tokenını yerel ETH tokenına dönüştürür. ETH tokenı daha sonraL2ScrollMessengersözleşmesine geri gönderilir.L2WETHGateway, token çekme mesajını kodlar ve bunuL2ScrollMessengera iletir.- L1 para çekme işleminin kendisi, L1’de para çekme işlemini tamamlamak için
L1ScrollMessenger.relayMessageWithProoffonksiyonunu çağırır. WETH tokenının çekilmesi durumunda, işlemL1WETHGateway.finalizeWithdrawERC20çağrısını yapar ve ETH cinsinden çekilen tutarıL1WETHGatewaye gönderir. - ‘L1WETHGateway’, çekilen ETH’i tekrar L1 WETH token’a sarar ve L1’deki alıcı adresine aktarır.
- Kullanıcı L2’de
withdrawERC20AndCallfonksiyonunu çağırırsa,L1WETHGatewayek verilerle birlikte hedef L1 adresini çağıracaktır.
ERC-721/ERC-1155 Tokenlarının Geri Çekilmesi
ERC-721 veya ERC-1155 tokenlarının geri çekilmesi, ERC20 tokenlerine çok benzer şekilde çalışır. ERC-721 /ERC-1155 tokenlerini L2’den çekmek için L2ERC721Gateway veya L2ERC1155Gateway ağ geçidi kullanılabilir.
function withdrawERC721( address _token, uint256 _tokenId, uint256 _gasLimit) external payable;
function withdrawERC721( address _token, address _to, uint256 _tokenId, uint256 _gasLimit) external payable;
function withdrawERC1155( address _token, uint256 _tokenId, uint256 _amount, uint256 _gasLimit) external payable;
function withdrawERC1155( address _token, address _to, uint256 _tokenId, uint256 _amount, uint256 _gasLimit) external payable;Büyük miktarda ERC-721 veya ERC-1155 token çekimini kolaylaştırmak için, aşağıdaki işlevler aracılığıyla L2ERC721Gateway ve L2ERC1155Gateway sözleşmesinde toplu para çekme işlevleri de sağlıyoruz:
function batchWithdrawERC721( address _token, uint256[] calldata _tokenIds, uint256 _gasLimit) external payable;
function batchWithdrawERC721( address _token, address _to, uint256[] calldata _tokenIds, uint256 _gasLimit) external payable;
function batchWithdrawERC1155( address _token, uint256[] calldata _tokenIds, uint256[] calldata _amounts, uint256 _gasLimit) external payable;
function batchWithdrawERC1155( address _token, address _to, uint256[] calldata _tokenIds, uint256[] calldata _amounts, uint256 _gasLimit) external payable;ERC-721 veya ERC-1155 tokenleri için L1 muadil sözleşmeleri, L1’deki para çekme işlemlerini tamamlamak için L1ERC721Gateway ve L1ERC1155Gateway sözleşmeleridir.