Ç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 L2ScrollMessenger
a gönderilen bir mesajla kodlanır ve bu mesaj daha sonra L2MessageQueue
ya 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.withdrawETHAndCall
iş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; -
withdrawETHAndCall
işlevleriL2ETHGateway
i çağırır.L2ETHGateway
, çekilme mesajını kodlar ve çekilen ETH ile birlikteL2ScrollMessenger
sözleşmesine gönderir. -
Geri çekilen ETH tekrar
L2ScrollMessenger
sözleşmesine kilitlenir.L2ScrollMessenger
, mesajıL2MessageQueue
sözleşmesindeki mesaj kuyruğuna ekler. -
L1’deki para çekme işlemi, para çekme işlemini tamamlamak için
L1ScrollMessenger.relayMessageWithProof
fonksiyonunu çağırır. ETH’in çekilmesi durumunda,relayMessageWithProof
fonksiyonu, ETH’i L1’deki alıcı hesabına geri göndermek içinL1ETHGateway.finalizeWithdrawETH
i çağırır. -
Kullanıcı L2’de
withdrawETHAndCall
fonksiyonunu çağırırsa,L1ETHGateway
sö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.withdrawERC20
veL2GatewayRouter.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,
L2GatewayRouter
ilgili ağ geçidini,L2StandardERC20Gateway
,L2CustomERC20Gateway
veyaL2WETHGateway
i ç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.
L2StandardERC20Gateway
veyaL2CustomERC20Gateway
sözleşmesi, çekilen ERC20 tokenını yakar, çekilme işlemini bir mesaja kodlar veL2ScrollMessenger
a gönderir.- L1 para çekme işleminin kendisi, L1’deki para çekme işlemlerini tamamlamak için
L1ScrollMessenger.relayMessageWithProof
fonksiyonunu çağırır. Standart veya özel ERC20 tokenının çekilmesi durumunda, işlem sırasıylaL1StandardERC20Gateway
veyaL1CustomERC20Gateway
sözleşmesindefinalizeWithdrawERC20
fonksiyonunu çağırır.L1StandardERC20Gateway
sözleşmesinde, eğer bu bir ERC20 tokenının ilk çekilme işlemiyse,finalizeWithdrawERC20
işlevi, eşlemeyitokenMapping
de 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 L2GatewayRouter
a 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 sonraL2ScrollMessenger
sözleşmesine geri gönderilir.L2WETHGateway
, token çekme mesajını kodlar ve bunuL2ScrollMessenger
a iletir.- L1 para çekme işleminin kendisi, L1’de para çekme işlemini tamamlamak için
L1ScrollMessenger.relayMessageWithProof
fonksiyonunu çağırır. WETH tokenının çekilmesi durumunda, işlemL1WETHGateway.finalizeWithdrawERC20
çağrısını yapar ve ETH cinsinden çekilen tutarıL1WETHGateway
e gönderir. - ‘L1WETHGateway’, çekilen ETH’i tekrar L1 WETH token’a sarar ve L1’deki alıcı adresine aktarır.
- Kullanıcı L2’de
withdrawERC20AndCall
fonksiyonunu çağırırsa,L1WETHGateway
ek 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.