Ç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
L2GatewayRouterAğ geçidi yönlendiricisi, ETH ve ERC20 tokenlarının yatırılmasını destekler.
L2ETHGatewayETH yatırmak için ağ geçidi.
L2StandardERC20GatewayStandart ERC20 token yatırma işlemleri için ağ geçidi.
L2CustomERC20GatewayÖzel ERC20 token yatırma işlemleri için ağ geçidi.
L2WETHGatewayWrapped ETH yatırma işlemleri için ağ geçidi.
L2ERC721GatewayERC-721 token yatırma işlemleri için ağ geçidi.
L2ERC1155GatewayERC-1155 token yatırma işlemleri için ağ geçidi.

Genel Bakış

Withdraw Workflow

Ş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.

  1. 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;
  2. withdrawETHAndCall işlevleri L2ETHGatewayi çağırır. L2ETHGateway, çekilme mesajını kodlar ve çekilen ETH ile birlikte L2ScrollMessenger sözleşmesine gönderir.

  3. Geri çekilen ETH tekrar L2ScrollMessenger sözleşmesine kilitlenir. L2ScrollMessenger, mesajı L2MessageQueue sözleşmesindeki mesaj kuyruğuna ekler.

  4. 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çin L1ETHGateway.finalizeWithdrawETHi çağırır.

  5. Kullanıcı L2’de withdrawETHAndCall fonksiyonunu çağırırsa, L1ETHGateway sözleşmesindeki finalizeWithdrawETH, ek verileri hedef L1 sözleşmesine iletecektir.

ERC20 Tokenlarının Çekilmesi

ERC20 tokenlarının geri çekilmesi şu şekilde çalışır.

  1. ERC20 tokenlerini L1’den L2’ye çekmek için kullanıcılar aşağıda gösterilen L2GatewayRouter.withdrawERC20 ve L2GatewayRouter.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;
  2. ERC20 tokenlerinden ağ geçidine yapılan eşlemeye bağlı olarak, L2GatewayRouter ilgili ağ geçidini, L2StandardERC20Gateway, L2CustomERC20Gateway veya L2WETHGatewayi ç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.

  1. L2StandardERC20Gateway veya L2CustomERC20Gateway sözleşmesi, çekilen ERC20 tokenını yakar, çekilme işlemini bir mesaja kodlar ve L2ScrollMessengera gönderir.
  2. 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ıyla L1StandardERC20Gateway veya L1CustomERC20Gateway sözleşmesinde finalizeWithdrawERC20 fonksiyonunu çağırır.
    • L1StandardERC20Gateway sözleşmesinde, eğer bu bir ERC20 tokenının ilk çekilme işlemiyse, finalizeWithdrawERC20 işlevi, eşlemeyi tokenMappingde L1 token adresinden L2 token adresine güncelleyecektir.
  3. L1 ERC20 token ağ geçidi, kilitli ERC20 tokenlarını kendisinden L1’deki alıcı adresine aktararak serbest bırakır.
  4. 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.

  1. L2WETHGateway, çekilen WETH tokenını kendisine aktarır ve WETH tokenını yerel ETH tokenına dönüştürür. ETH tokenı daha sonra L2ScrollMessenger sözleşmesine geri gönderilir.
  2. L2WETHGateway, token çekme mesajını kodlar ve bunu L2ScrollMessengera iletir.
  3. 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şlem L1WETHGateway.finalizeWithdrawERC20 çağrısını yapar ve ETH cinsinden çekilen tutarı L1WETHGatewaye gönderir.
  4. ‘L1WETHGateway’, çekilen ETH’i tekrar L1 WETH token’a sarar ve L1’deki alıcı adresine aktarır.
  5. 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.

Sırada ne var?

Scroll Geliştirici haberlerini yakından takip edin
Güncellemeler, online ve yüz yüze etkinlikler, ekosistemdeki fırsatlar ve daha fazlası
Takip ettiğiniz için teşekkür ederiz!

Kaynaklar

Bizi Takip Edin