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 L1MessageQueue
ya 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.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; -
Üç
depositETH
fonksiyonunun tümüL1ETHGateway
i çağırır.L1ETHGateway
, depozitoyuL1ScrollMessenger
kontratına gönderilen bir mesaja kodlar. -
Yatırılan tutarın ETH’i
L1ScrollMessenger
sözleşmesinde kilitlenir.L1ScrollMessenger
, mesajıL1MessageQueue
sö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.relayMessage
işlevini çağırır. ETH yatırma durumunda,relayMessage
fonksiyonu, ETH’yi L2’deki alıcı hesabına aktarmak içinL2ETHGateway.finalizeDepositETH
i çağırır. -
Kullanıcı L1’de
depositETHAndCall
çağırırsa,L2ETHGateway
sö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 StandartERC20Gateway
i 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.depositERC20
veL1GatewayRouter.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,
L1GatewayRouter
ilgili ağ geçidini çağırır:L1StandardERC20Gateway
,L1CustomERC20Gateway
veyaL1WETHGateway
. 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:
L1StandardERC20Gateway
sözleşmesi, ERC20 tokenlerini göndericiden kendisine aktararak kilitler.- 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 zatentokenMapping
de kayıtlıysa,L1StandardERC20Gateway
eş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.relayMessage
fonksiyonunu çağırır. Standart ERC20 token yatırma durumunda ise işlem daha sonraL2StandardERC20Gateway.finalizeDepositERC20
yi çağırır. - 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çinScrollStandardERC20Factory
yi çağıracaktır. L2StandardERC20Gateway
, ilgili L2 ERC20 token sözleşmesindeki mint fonksiyonunu çağırır.- 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:
- ‘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 L1GatewayRouter
a 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 birlikteL1ScrollMessenger
sözleşmesine gönderilir.L1WETHGateway
, token yatırma mesajını kodlar ve bunuL1ScrollMessenger
a iletir.- İ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şlemL2WETHGateway.finalizeDepositERC20
yi ç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,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 L2ERC1155Gateway
dir. Bunlar L2’deki para yatırma işlemlerini tamamlamak için kullanılır.