这篇文章上次修改于 294 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

Arbitrum Nitro 的 stake token 是 ETH,如何换成 ERC-20 token 呢?

第一反应还是看下配置文件是否支持,很遗憾,不支持。

部署界面也不支持更换 stake token,无论是 Rollup 还是 AnyTrust 模式,所以我们只能自行开发了。

不过 nitro-contracts 已经有了与 stake ERC-20 token 相关的合约:ERC20RollupUserLogic ,所以我们只需要将其部署好,并修改节点代码即可。

修改 Nitro

将 Nitro 中与 RollupUserLogic 合约交互的地方都替换为与 ERC20RollupUserLogic 合约交互,主要位于 nitro/staker 下的 rullup_watcher.go 和 staker.go 中

部署链

合约 repo:nitro-contracts

部署 RollupCreator 合约

执行部署 RollupCreator 合约的脚本:nitro-contracts/scripts/deployment.ts,只需要执行一次,后续创建链的时候只需要调用 RollupCreator 的 createRollup() 方法即可。

注意,需要将 131 行的 const rollupUser = await deployContract('RollupUserLogic', signer) 替换为 const rollupUser = await deployContract('ERC20RollupUserLogic', signer)

部署链所需的合约

执行该脚本: nitro-contracts/scripts/createERC20Rollup.ts,调用 RollupCreator 的 createRollup() 部署所有合约。

得到合约地址后,替换部署界面生成的配置文件中,将配置文件放到 orbit-setup-script/config 下,然后在 orbit-setup-script 运行部署链的脚本即可 PRIVATE_KEY="0xYourPrivateKey" L2_RPC_URL="<https://goerli-rollup.arbitrum.io/rpc>" L3_RPC_URL="<[http://localhost:8449](http://localhost:8449/)>" yarn run setup

注意,为了避免不必要的报错,尽量使用付费节点,申请地址:https://dashboard.quicknode.com

结果

启动节点后,大约一小时后可以看到 staker 使用 ERC-20 token 进行了质押:https://sepolia.arbiscan.io/address/0xb91dE3190cD9b0136A05215ea5422cbB1d768926,method 为 0xd29a4e27 即为 ERC20RollupUserLogic 合约的 newStakeOnNewNode() 方法
2.png
可以对比下之前使用 ETH 质押的结果:https://sepolia.arbiscan.io/address/0x319Fa54e7fA8dB12def2534c69874e81Bb8e78FA
1.png