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 |
|---|---|
L1GatewayRouter | Ağ geçidi yönlendiricisi, ETH ve ERC20 tokenlarının yatırılmasını destekler. |
L1ETHGateway | ETH yatırmak için ağ geçidi. |
L1StandardERC20Gateway | Standart ERC20 token yatırma işlemleri için ağ geçidi. |
L1CustomERC20Gateway | Özel ERC20 token yatırma işlemleri için ağ geçidi. |
L1WETHGateway | Wrapped ETH yatırma işlemleri için ağ geçidi. |
L1ERC721Gateway | ERC-721 token yatırma işlemleri için ağ geçidi. |
L1ERC1155Gateway | ERC-1155 token yatırma işlemleri için ağ geçidi. |
Genel Bakış
Ş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;
-
L1GatewayRouter, ETH’i L1’den L2’ye yatırmak için üç fonksiyon sağlar.depositETHAndCallfonksiyonu, 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; -
Üç
depositETHfonksiyonunun tümüL1ETHGatewayi çağırır.L1ETHGateway, depozitoyuL1ScrollMessengerkontratına gönderilen bir mesaja kodlar. -
Yatırılan tutarın ETH’i
L1ScrollMessengersözleşmesinde kilitlenir.L1ScrollMessenger, mesajıL1MessageQueuesözleşmesindeki mesaj kuyruğuna ekler. -
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.
-
L2 işlemi, aktarılan mesajı yürüten
L2ScrollMessenger.relayMessageişlevini çağırır. ETH yatırma durumunda,relayMessagefonksiyonu, ETH’yi L2’deki alıcı hesabına aktarmak içinL2ETHGateway.finalizeDepositETHi çağırır. -
Kullanıcı L1’de
depositETHAndCallçağırırsa,L2ETHGatewaysözleşmesindekifinalizeDepositETH, 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.
-
L1’den L2’ye ERC20 tokenlarını yatırmak için kullanıcılar aşağıda gösterilen
L1GatewayRouter.depositERC20veL1GatewayRouter.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; -
ERC20 tokenlerinden ağ geçidine yapılan eşlemeyi temel alarak,
L1GatewayRouterilgili ağ geçidini çağırır:L1StandardERC20Gateway,L1CustomERC20GatewayveyaL1WETHGateway. 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:
L1StandardERC20Gatewaysözleşmesi, ERC20 tokenlerini göndericiden kendisine aktararak kilitler.- Bu ERC20 tokeni daha önce
L1StandardERC20Gatewayaracılığıyla çekilmemişse,L1StandardERC20Gatewaydeterministik 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 zatentokenMappingde kayıtlıysa,L1StandardERC20Gatewayeşlemeden L2 token adresini doğrudan yükleyecektir. - ‘L1StandardERC20Gateway’, token yatırma mesajını kodlar ve mesajı göndermek için ‘L1ScrollMessenger’ı çağırır.
- İlgili L2 işlemi, L2’deki para yatırma işlemini tamamlamak için
L2ScrollMessenger.relayMessagefonksiyonunu çağırır. Standart ERC20 token yatırma durumunda ise işlem daha sonraL2StandardERC20Gateway.finalizeDepositERC20yi çağırır. - Bu ERC20 token sözleşmesi L2’de konuşlandırılmamışsa,
L2StandardERC20Gatewaymesajdan token metadata’yı çıkaracak ve standart ERC20 tokenını L2’de dağıtmak içinScrollStandardERC20Factoryyi çağıracaktır. L2StandardERC20Gateway, ilgili L2 ERC20 token sözleşmesindeki mint fonksiyonunu çağırır.- Kullanıcı L1’de
depositERC20AndCallı çağırırsa,L2StandardERC20Gatewayek 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:
- ‘L1CustomERC20Gateway’ sözleşmesi, ERC20 tokenlerini göndericiden kendisine aktararak L1’de kilitler.
- ‘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.
- İ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.
- ‘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.
- 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.
L1WETHGateway, WETH tokenlarını göndericiden kendisine aktararak ve WETH tokenını yerel ETH tokenine dönüştürerek kilitler. ETH tokenı vemsg.value(geçiş ücretinin ödenmesi için) daha sonra birlikteL1ScrollMessengersözleşmesine gönderilir.L1WETHGateway, token yatırma mesajını kodlar ve bunuL1ScrollMessengera iletir.- İlgili L2 işlemi, L2’deki para yatırma işlemini tamamlamak için
L2ScrollMessenger.relayMessageişlevini çağırır. WETH tokeni yatırma durumunda, işlemL2WETHGateway.finalizeDepositERC20yi çağırır. L2WETHGateway, yatırılan ETH’yi tekrar L2 WETH token’a sarar ve L2’deki alıcı adresine aktarır.- Kullanıcı L1’de
depositERC20AndCallı çağırırsa,L2WETHGatewayek 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.