通过自定义 Gateway 跨链 ERC20
本指南将介绍如何通过自定义 Gateway 将 Scroll 的跨链桥用于需要自定义功能的 ERC20。
第 1 步: 在 Sepolia 上发布一个代币
首先,我们需要一个代币来桥接。无需特定的 ERC20 实现即可使代币与 L2 兼容。如果您已有代币,请随时跳过此步骤。如果要部署新代币,请使用以下简单的 ERC20 代币合约,该代币合约在启动时向部署者铸造 100 万个代币。
第 2 步: 在 Scroll Sepolia 测试网发布对应代币合约
接下来,您将在 Scroll 上发布此代币的对合约,该代币将代表 Sepolia 上的原始代币。此代币可以实现自定义逻辑以匹配 L1 代币的逻辑,甚至可以添加 L1 代币之外的其他功能。
为此,请执行以下操作:
- 代币必须实现“IScrollStandardERC20”接口才能与跨链桥兼容。
- 合约应有
gateway()
和counterpart()
方法,可以提供 gateway 合约地址和对应的代币地址(我们刚刚发布的 L1 代币)。它还应该允许 L2 gateway在存入和提取代币事调用代币的mint()
和burn()
方法。
以下是与跨链桥兼容的代币的完整示例。对于构造函数,您将传递 Scroll 官方自定义 Gateway 地址 ( 0x058dec71E53079F9ED053F3a0bBca877F6f3eAcf ) 和在 Sepolia 上发布的代币地址。
第 3 步:将代币添加到 Scroll 跨链桥
您需要联系Scroll团队,将代币添加到 Sroll 上的 L2CustomERC20Gateway
合约和 L1 上的 L1CustomERC20Gateway
合约。此外,请按照代币列表 仓库内的说明将您的代币添加到 Scroll 官方跨链桥前端.
第 4 步: 存储代币
一旦您的代币获得Scroll团队的批准,您应该能够从L1存入代币。为此,您必须首先批准 Sepolia 上的 L1CustomGateway
合约地址 ( 0x31C994F2017E71b82fd4D8118F140c81215bbb37
)。然后,通过从 L1CustomGateway
合约调用 depositERC20
方法来存入代币。这可以使用我们的跨链桥UI,Etherscan Sepolia或智能合约来完成。
Step 5: 提取代币
您将按照类似的步骤将代币从 L2 发送回 L1。首先,批准 L2CustomGateway
地址 ( 0x058dec71E53079F9ED053F3a0bBca877F6f3eAcf
),然后从 L2CustomGateway
合约中调用 withdrawERC20
提取代币。
替代方案: 发布并设置自定义的 L1 Gateway 合约
将您的代币添加到Scroll官方跨链桥(如上所述)是将代币与 Scroll 桥接的推荐方法。这种方法将使它们更容易被发现,对持有者来说更安全。但是,这需要Scroll团队的批准。如果您想在没有官方批准流程的情况下发布自定义代币,您可以自己发布自定义 Gateway合约。为此,您需要在 L1 上部署 L1CustomERC20Gateway
合约,在 L2 上部署 L2CustomERC20Gateway
合约。
发布 L1 自定义 Gateway 合约
让我们从在 Sepolia 上发布以下合约开始。
发布 L2 自定义 Gateway 合约
现在让我们在 Scroll 上发布对应合约。
在 Sepolia 上设置 Gateway 合约
部署合约后,调用以下函数初始化合约,并将其绑定到相应的代币和跨链桥另一端的 gateway 合约。
首先,使用以下参数调用 MyL1Gateway
合约上的 initialize
方法:
_counterpart
: 我们刚刚在Scroll上发布的MyL2Gateway
地址。_router
: 将其设置为0x13FBE0D0e5552b8c9c4AE9e2435F38f37355998a
,Sepolia 上的L1GatewayRouter
合约。_messenger
: 将其设置为0x50c7d3e7f7c656493D1D76aaa1a836CedfCBB16A
,Sepolia 上的L1ScrollMessenger
合约。
自定义gateway可以托管多个代币跨链桥。在这种情况下,我们只允许通过使用以下参数调用 MyL1Gateway
合约上的 updateTokenMapping
方案来桥接 L1Token 和 L2Token:
_l1Token
: 我们之前在 Sepolia上 发布的L1Token
合约地址。_l2Token
: 我们之前在 Scroll 上推出的L2Token
合约地址。
在 Scroll 上设置 Gateway 合约
现在让我们切换到Scroll链,按照类似的步骤初始化 MyL2Gateway
合约。
首先,调用 MyL2Gateway
合约的 initialize
方法 :
_counterpart
: 我们刚刚在Sepolia上发布的MyL1Gateway
地址。_router
: 将其设置为0x9aD3c5617eCAa556d6E166787A97081907171230
,Scroll 上的L2GatewayRouter
合约。_messenger
: 将其设置为0xBa50f5340FB9F3Bd074bD638c9BE13eCB36E603d
,Scroll 上的L2ScrollMessenger
合约。
接下来,调用 MyL2Gateway
合约的 updateTokenMapping
方法:
_l2Token
: 我们之前在 Scroll 上发布的L2Token
合约地址_l1Token
: 我们之前在 Sepolia上 发布的L1Token
合约地址。
桥接代币
我们现在可以调用 MyL1Gateway
合约的 depositERC20
,MyL2Gateway
合约的 withdrawERC20
,就像Scroll官方跨链桥一样