Yatırım Ağ Geçitleri

Bu belge, kullanıcıların ve geliştiricilerin L1’den L2’ye token yatırmak 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 L1’de bir ağ geçidi yönlendiricisi (gateway router) sağlıyoruz.

Gateway KontratıAçıklama
L1GatewayRouterAğ geçidi yönlendiricisi, ETH ve ERC20 tokenlarının yatırılmasını destekler.
L1ETHGatewayETH yatırmak için ağ geçidi.
L1StandardERC20GatewayStandart ERC20 token yatırma işlemleri için ağ geçidi.
L1CustomERC20GatewayÖzel ERC20 token yatırma işlemleri için ağ geçidi.
L1WETHGatewayWrapped ETH yatırma işlemleri için ağ geçidi.
L1ERC721GatewayERC-721 token yatırma işlemleri için ağ geçidi.
L1ERC1155GatewayERC-1155 token yatırma işlemleri için ağ geçidi.

Genel Bakış

Deposit Workflow

Şekilde L1’den L2’ye para yatırma iş akışı gösterilmektedir. Kullanıcılar token yatırma işlemini başlatmak için ağ geçitlerini çağırırlar. Yatırılan değer daha sonra L1ScrollMessenger sözleşmesine gönderilen bir mesaja kodlanır ve karşılık gelen L1 tarafından başlatılan işlem L1MessageQueueya eklenir. L2’deki para yatırma işlemlerini tamamlamak için L2 sıralayıcı, yeni L1 işlem olaylarını toplar ve karşılık gelen işlemleri, oluşturduğu L2 bloklarına dahil eder. Sonraki bölümlerde farklı tokenlerin nasıl yatırıldığına ilişkin ayrıntılar açıklanmaktadır. L1’den L2’ye mesaj aktarma iş akışı hakkında daha fazla ayrıntıyı Alanlar Arası Mesajlaşma bölümünde bulabilirsiniz.

ETH yatırma

Scroll, ETH’i kendi yerel token’ı olarak ele alır. Yerel ETH tokenını basım yapmadan L2 hesaplarına aktarabilmesi için, genesis bloğundaki L2ScrollMessenger sözleşmesine yeterli miktarda ETH’i önceden tahsis ediyoruz. ETH yatırma işlemi şu şekilde çalışır;

  1. L1GatewayRouter, ETH’i L1’den L2’ye yatırmak için üç fonksiyon sağlar. depositETHAndCall fonksiyonu, aynı anda ETH’i aktarabilir ve bir kontrat çağrısı (contract call) gerçekleştirebilir.

    function depositETH(uint256 _amount, uint256 _gasLimit) external payable;
    function depositETH(address _to, uint256 _amount, uint256 _gasLimit) public payable;
    function depositETHAndCall(
    address _to,
    uint256 _amount,
    bytes calldata _data,
    uint256 _gasLimit
    ) external payable;
  2. Üç depositETH fonksiyonunun tümü L1ETHGatewayi çağırır. L1ETHGateway, depozitoyu L1ScrollMessenger kontratına gönderilen bir mesaja kodlar.

  3. Yatırılan tutarın ETH’i L1ScrollMessenger sözleşmesinde kilitlenir. L1ScrollMessenger, mesajı L1MessageQueue sözleşmesindeki mesaj kuyruğuna ekler.

  4. L1’de para yatırma işlemi tamamlandıktan sonra sıralayıcı, yatırmayı tamamlamak ve ETH’i L2’deki alıcı adresine aktarmak için L2 bloğuna karşılık gelen bir L2 işlemini dahil edecektir.

  5. L2 işlemi, aktarılan mesajı yürüten L2ScrollMessenger.relayMessage işlevini çağırır. ETH yatırma durumunda, relayMessage fonksiyonu, ETH’yi L2’deki alıcı hesabına aktarmak için L2ETHGateway.finalizeDepositETHi çağırır.

  6. Kullanıcı L1’de depositETHAndCall çağırırsa, L2ETHGateway sözleşmesindeki finalizeDepositETH, ek verileri hedef L2 sözleşmesine iletecektir.

ERC20 Tokenlarını Yatırma

Standart ERC20 tokenleri, özel ERC20 tokenleri ve Wrapped ETH tokeni gibi farklı ERC20 token türlerini birbirine bağlamak için çeşitli ERC20 ağ geçidi sözleşmeleri sağlanmıştır. L1GatewayRouter, ERC20 tokenlerinin L1’deki karşılık gelen ERC20 ağ geçidine kanonik eşlemesini kaydeder. L1GatewayRouter, özel bir ağ geçidi önceden kurulmadığı sürece yeni ERC20 tokenleri için varsayılan ERC20 ağ geçidi olarak StandartERC20Gatewayi kullanır.

ERC20 tokenlerinin yatırılması aşağıdaki şekilde çalışır.

  1. L1’den L2’ye ERC20 tokenlarını yatırmak için kullanıcılar aşağıda gösterilen L1GatewayRouter.depositERC20 ve L1GatewayRouter.depositERC20AndCallı kullanabilirler.

    function depositERC20(address _token, uint256 _amount, uint256 _gasLimit) external payable;
    function depositERC20(address _token, address _to, uint256 _amount, uint256 _gasLimit) external payable;
    function depositERC20AndCall(
    address _token,
    address _to,
    uint256 _amount,
    bytes memory _data,
    uint256 _gasLimit
    ) public payable;
  2. ERC20 tokenlerinden ağ geçidine yapılan eşlemeyi temel alarak, L1GatewayRouter ilgili ağ geçidini çağırır: L1StandardERC20Gateway, L1CustomERC20Gateway veya L1WETHGateway. Adımların geri kalanı ayrı ayrı açıklanacaktır.

Standart ERC20 Tokenları

Standart ERC20 tokenleri herhangi bir özel mantık gerektirmeyen tokenlardır. Bu tür tokenler için L2 ERC20 token sözleşmeleri L2StandardERC20Gateway tarafından oluşturulur. Standart ERC20 token yatırma işlemi için kalan adımlar şunlardır:

  1. L1StandardERC20Gateway sözleşmesi, ERC20 tokenlerini göndericiden kendisine aktararak kilitler.
  2. Bu ERC20 tokeni daha önce L1StandardERC20Gateway aracılığıyla çekilmemişse, L1StandardERC20Gateway deterministik bir L2 ERC20 token adresi hesaplayacak ve token meta verilerini (sembol, ad ve ondalık sayılar) gelecekte L2’daki potansiyel sözleşme dağıtımı (deployment) için mesaja ekleyecektir. L2 token adresi zaten tokenMappingde kayıtlıysa, L1StandardERC20Gateway eşlemeden L2 token adresini doğrudan yükleyecektir.
  3. ‘L1StandardERC20Gateway’, token yatırma mesajını kodlar ve mesajı göndermek için ‘L1ScrollMessenger’ı çağırır.
  4. İlgili L2 işlemi, L2’deki para yatırma işlemini tamamlamak için L2ScrollMessenger.relayMessage fonksiyonunu çağırır. Standart ERC20 token yatırma durumunda ise işlem daha sonra L2StandardERC20Gateway.finalizeDepositERC20yi çağırır.
  5. Bu ERC20 token sözleşmesi L2’de konuşlandırılmamışsa, L2StandardERC20Gateway mesajdan token metadata’yı çıkaracak ve standart ERC20 tokenını L2’de dağıtmak için ScrollStandardERC20Factoryyi çağıracaktır.
  6. L2StandardERC20Gateway, ilgili L2 ERC20 token sözleşmesindeki mint fonksiyonunu çağırır.
  7. Kullanıcı L1’de depositERC20AndCallı çağırırsa, L2StandardERC20Gateway ek verilerle hedef L2 sözleşmesini çağıracaktır.

Özel ERC20 Tokenları

Standart ERC20 tokenlarıyla karşılaştırıldığında, özel ERC20 tokenlarının L2 sözleşmesi token sahibi tarafından dağıtılır. Özel ERC20 token yatırma işlemi için kalan adımlar şunlardır:

  1. ‘L1CustomERC20Gateway’ sözleşmesi, ERC20 tokenlerini göndericiden kendisine aktararak L1’de kilitler.
  2. ‘L1CustomERC20Gateway’, ‘tokenMapping’de mevcut bir L2 ERC20 token adresini gerektirir. İlgili ERC20 token adresini alır, token yatırma mesajını kodlar ve bunu ‘L1ScrollMessenger’a iletir.
  3. İlgili L2 işlemi, L2’deki para yatırma işlemini tamamlamak için ‘L2ScrollMessenger.relayMessage’ fonksiyonunu çağırır. Özel ERC20 token yatırmaları durumunda, işlem ‘L2CustomERC20Gateway.finalizeDepositERC20’yi çağırır.
  4. ‘L2CustomERC20Gateway’, ilgili L2 ERC20 token sözleşmesindeki mint fonksiyonunu çağırır. L2 ERC20 token sözleşmesinin, ‘L2CustomERC20Gateway’ sözleşmesine mint izinleri vermesi gerekir.
  5. Kullanıcı L1’de ‘depositERC20AndCall’ı çağırırsa, ‘L2CustomERC20Gateway’ ek verilerle hedef L2 sözleşmesini çağıracaktır.

WETH Tokeni

L1’de Wrapped ETH tokeni için özel bir ağ geçidi L1WETHGateway sağlıyoruz ve ağ geçidi adresini L1GatewayRoutera kaydediyoruz. WETH tokeninin yatırılması şu şekilde çalışır.

  1. L1WETHGateway, WETH tokenlarını göndericiden kendisine aktararak ve WETH tokenını yerel ETH tokenine dönüştürerek kilitler. ETH tokenı ve msg.value (geçiş ücretinin ödenmesi için) daha sonra birlikte L1ScrollMessenger sözleşmesine gönderilir.
  2. L1WETHGateway, token yatırma mesajını kodlar ve bunu L1ScrollMessengera iletir.
  3. İlgili L2 işlemi, L2’deki para yatırma işlemini tamamlamak için L2ScrollMessenger.relayMessage işlevini çağırır. WETH tokeni yatırma durumunda, işlem L2WETHGateway.finalizeDepositERC20yi çağırır.
  4. L2WETHGateway, yatırılan ETH’yi tekrar L2 WETH token’a sarar ve L2’deki alıcı adresine aktarır.
  5. Kullanıcı L1’de depositERC20AndCallı çağırırsa, L2WETHGateway ek verilerle hedef L2 sözleşmesini arayacaktır.

ERC-721/ERC-1155 Tokenlarını Yatırma

ERC-721 veya ERC-1155 tokenlarının yatırılması, ERC20 tokenlerine çok benzer şekilde çalışır. L1’den ERC-721 /ERC-1155 tokenlarını yatırmak için L1ERC721Gateway veya L1ERC1155Gateway ağ geçitleri kullanılabilir.

function depositERC721(
address _token,
uint256 _tokenId,
uint256 _gasLimit
) external payable;
function depositERC721(
address _token,
address _to,
uint256 _tokenId,
uint256 _gasLimit
) external payable;
function depositERC1155(
address _token,
uint256 _tokenId,
uint256 _amount,
uint256 _gasLimit
) external payable;
function depositERC1155(
address _token,
address _to,
uint256 _tokenId,
uint256 _amount,
uint256 _gasLimit
) external payable;

Büyük miktarda ERC-721 veya ERC-1155 token yatırma işlemini kolaylaştırmak amaçlı, aşağıdaki işlevler aracılığıyla L1ERC721Gateway ve L1ERC1155Gateway sözleşmesinde toplu para yatırma işlevleri de sağlıyoruz:

function batchDepositERC721(
address _token,
uint256[] calldata _tokenIds,
uint256 _gasLimit
) external payable;
function batchDepositERC721(
address _token,
address _to,
uint256[] calldata _tokenIds,
uint256 _gasLimit
) external payable;
function batchDepositERC1155(
address _token,
uint256[] calldata _tokenIds,
uint256[] calldata _amounts,
uint256 _gasLimit
) external payable;
function batchDepositERC1155(
address _token,
address _to,
uint256[] calldata _tokenIds,
uint256[] calldata _amounts,
uint256 _gasLimit
) external payable;

ERC-721 veya ERC-1155 tokenleri için L2 muadil sözleşmeleri L2ERC721Gateway ve L2ERC1155Gatewaydir. Bunlar L2’deki para yatırma işlemlerini tamamlamak için kullanılır.

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