Nervos x Gitcoin bounty 任务5:给已经存到 Layer2 的 sUDT部署一个 ERC20 的代理合约

  • CKB 中文
  • 更新于 2021-09-09 15:55
  • 阅读 3068

为了使用在 Layer1 和 Layer2 之间移动的 SUDT 通证,您需要部署 ERC20 代理合约来与它们交互。这个特殊的 solidity 智能合约是由 Nervos 团队准备的,允许 EVM 与 Nervos 上的 SUDT 通证交互。

为了使用在 Layer1Layer2 之间移动的 SUDT 通证,您需要部署 ERC20 代理合约来与它们交互。这个特殊的 solidity 智能合约是由 Nervos 团队准备的,允许 EVM 与 Nervos 上的 SUDT 通证交互。

ERC20 代理合约是修改后的 ERC20 solidity 合约,其中 token balance 和 transfer 的函数已被修改,好让他能直接与 Polyjuice EVM 兼容层交互。这允许以太坊智能合约使用 ERC20 接口在 Layer2 使用 SUDT 通证。

任务说明

注意:在开始任务之前,建议您检查任务提交部分,这样您就知道您需要提供哪些材料,以审查您的任务提交。

我们将使用一些示例代码,你将需要用你的私钥和以太坊地址等值填充这些代码。更新这些值之后,我们将执行脚本来部署 ERC20 代理合约,然后我们将使用它在 Nervos 的 Layer2 上检查您的 SUDT余额!

注意:你的私钥是用来保护你的账户和账户内的所有资金和资产。重要的是要保证私钥的安全,并且只使用您可以信任的工具。然而,在这些任务中,我们将只使用测试网资金和没有价值的资产。你可以毫不担心地操作,因为这里没有任何风险。

先决条件

要部署 ERC20 代理合约(也称为 SUDT-ERC20 代理合约),首先需要有 Layer2 上的 SUDT ID。这可以通过使用 account-cli 工具将 SUDT 存入 Layer2 来实现,这是在前面的任务中完成的。如果您还没有完成此任务,请在继续本任务之前完成。

该任务需要在任务2 中设置的 Gitcoin Task Instruction Examples repo (gw-gitcoin-instruction)。如果你出于任何原因还没有这个仓库,那请你现在设置它。

1. 编译智能合约并复制工件

在部署智能合约之前,需要对其进行编译。我们的说明将向您展示如何使用 Truffle 编译器快速编译智能合约。

以下 SUDT-ERC20 代理的 solidity 智能合约为 SudtERC20Proxy.sol。它位于 gw-gitcoin-instruction/src/examples/5-erc20-proxy/contracts/SudtERC20Proxy.sol 的文件中。

下面的命令可以使用 Truffle 编译器将 solidity 编译成 EVM 字节码。这个过程我们将使用 Docker。如果您没有安装 Docker,请重新访问任务设置和需求页面。

cd ~/projects/gw-gitcoin-instruction/src/examples/5-erc20-proxy
yarn compile

命令完成后,您将在 build/contracts 目录中找到编译后的文件。例如 src/examples/5-erc20-proxy/build/contracts/SudtERC20Proxy.json

2. 使用 Web3.js 来部署 SUDT-ERC20 代理合约

接下来,我们将使用范例代码来部署智能合约。在选择的编辑器中打开 src/examples/5-erc20-proxy/index.js 文件。你需要更新 index.js 中的值,以匹配你的以太坊私钥和 SUDT ID。

Ethereum私钥 该私钥将用于部署智能合约,并且它应该与之前任务中添加资金的以太坊私钥相同。确保在 Layer2 使用以太坊私钥,而不是 Nervos CKB 的 Layer1 私钥。我们会用这个值替换<YOUR_ETHEREUM_PRIVATE_KEY>。始终确保您私钥的前缀为「0x」

const ACCOUNT_PRIVATE_KEY = '<YOUR_ETHEREUM_PRIVATE_KEY>';

SUDT ID 所部署的合约需要 SUDT ID,以便将其与特定的 SUDT 通证相关联。这在以太坊智能合约和 Layer2 的 SUDT 通证之间创建了 1:1 绑定的关系,一旦部署就不能更改。用前面创建的通证中的 SUDT ID 替换<YOUR_SUDT_ID>。

const SUDT_ID = '&lt;YOUR_SUDT_ID>';

SUDT_NAME, SUDT_SYMBOL, and SUDT_TOTAL_SUPPLY

其他常量 SUDT_NAME、SUDT_SYMBOL 和 SUDT_TOTAL_SUPPLY 可以保持不变。它们是为了与兼容 ERC20 而提供的,但是这些值目前没有任何作用。

运行脚本 替换所有值后,在控制台中使用以下命令执行脚本。

cd ~/projects/gw-gitcoin-instruction/src/examples/5-erc20-proxy
node index.js

运行该命令后,应该部署合约不会出现任何错误。您将看到一个交易哈希和一个以太坊合约地址。交易哈希由 Godwoken 提供,以太坊合约地址由 Polyjuice 提供。请把这些值记录下来,因为它们将在未来的任务中会用到。

成功输出范例

➜ node index.js
Using Ethereum address: 0xD173313A51f8fc37BcF67569b463abd89d81844f
Deploying contract...
Transaction hash: 0xcfa9a2e6d691fd095b4cb2edbea3437bd6de7fedd210e8a55c2ccc5c24b32ad5
Deployed SUDT-ERC20 Proxy contract address: 0xc013772cAAaBf6ca3F584B6D7b98e73a701233b5

3.检查你的 sUDT 余额

一旦为您的 SUDT 部署了 SUDT- erc20 代理智能合约,您就可以检查任何账户的通证余额。这可以通过调用 ERC20ProxyContract.balanceOf 方法来实现。它接受帐户或智能合约地址作为第一个也是唯一一个的参数。但需要记住的一件重要的事情是这是一个 Polyjuice 地址 ,而不是您的以太坊地址。在智能合约调用中处理链上地址时,您几乎会总是想用 Polyjuice 地址的。

你会问 Polyjuice 的地址是什么? Polyjuice地址 是 Nervos 的 Layer2 内部用于记录其背后的以太坊地址的地址。Polyjuice 地址的概念是由于 Nervos 使用的是跨链 Layey2 架构而存在的。所以不能在 Nervos Layer 2 上使用以太坊地址,因为Nervos Layer 2 也被设计为支持许多其他类型的区块链以及区块链账户。来自所有这些不同区块链的地址必须标准化为 Nervos 可以在内部使用的单一格式。

不过不要担心,从以太坊地址变成 Polyjuice 地址非常容易,反之亦然。示例代码包含在examples/5-erc20-proxy/check-sudt-balance.js。您还可以使用 account-cli 工具使用命令行执行一次转换。account-cli 的说明可以在这里找到。

接下来,我们将使用提供的范例代码来检查 SUDT余 额。在编辑器中打开src/examples/5-erc20-proxy/check-sudt-balance.js文件。你需要更新 index.js 中的值,以匹配你的以太坊地址和ERC20 代理合约地址。

Ethereum地址 脚本需要知道我们将检查哪个以太坊地址的余额。将&lt;YOUR_ETHEREUM_ADDRESS>替换为您先前存放SUDT 的以太坊地址。

const ETHEREUM_ADDRESS = '&lt;YOUR_ETHEREUM_ADDRESS>';

ERC20代理合约地址 通过本教程的上一步,您应该已经收到了SUDT-ERC20 代理合约的地址。将&lt;YOUR_SUDT_PROXY_CONTRACT_ADDRESS>替换为部署的ERC20代理合约的地址。

const SUDT_PROXY_CONTRACT_ADDRESS = '&lt;YOUR_SUDT_PROXY_CONTRACT_ADDRESS>';

运行脚本 替换所有值后,在控制台中使用以下命令执行脚本。

cd ~/projects/gw-gitcoin-instruction/src/examples/5-erc20-proxy
node check-sudt-balance.js

范例输出

node check-sudt-balance.js
Using Ethereum address: 0xD173313A51f8fc37BcF67569b463abd89d81844f
Corresponding Polyjuice address: 0xa3cd0b1d997e5281dd574dd34155945febcf73a4
Checking SUDT balance...
80

恭喜你! 你在控制台输出的末尾看到的数字是你的以太坊账户在 Layer2 的 SUDT 通证的余额! (例如上面的 80)

此时你应该会看到一个大于零的值,因为指令表明你应该是使用已经有通证的以太坊账户。如果看到0,则重新检查上面以以太坊地址开始的步骤。

任务提交

为了完成任务,你需要提交以下材料供评委评审:

  1. 部署智能合约后的控制台输出的屏幕截图。
  2. 您部署的 ERC20 代理合约的地址( text 格式)。
  3. 检查完 SUDT余额后,控制台输出的屏幕截图。
  4. 被检查的以太坊地址( 文本格式)。
点赞 1
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
CKB 中文
CKB 中文
首个基于 PoW + UTXO 的 BTC Layer 2