

Nervos x Gitcoin bounty 任务5:给已经存到 Layer2 的 sUDT部署一个 ERC20 的代理合约
source link: https://learnblockchain.cn/article/2966
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Nervos x Gitcoin bounty 任务5:给已经存到 Layer2 的 sUDT部署一个 ERC20 的代理合约
为了使用在 Layer1 和 Layer2 之间移动的 SUDT 通证,您需要部署 ERC20 代理合约来与它们交互。这个特殊的 solidity 智能合约是由 Nervos 团队准备的,允许 EVM 与 Nervos 上的 SUDT 通证交互。
为了使用在 Layer1 和 Layer2 之间移动的 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 = '<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地址
脚本需要知道我们将检查哪个以太坊地址的余额。将<YOUR_ETHEREUM_ADDRESS>
替换为您先前存放SUDT 的以太坊地址。
const ETHEREUM_ADDRESS = '<YOUR_ETHEREUM_ADDRESS>';
ERC20代理合约地址
通过本教程的上一步,您应该已经收到了SUDT-ERC20 代理合约的地址。将<YOUR_SUDT_PROXY_CONTRACT_ADDRESS>
替换为部署的ERC20代理合约的地址。
const SUDT_PROXY_CONTRACT_ADDRESS = '<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,则重新检查上面以以太坊地址开始的步骤。
任务提交
为了完成任务,你需要提交以下材料供评委评审:
- 部署智能合约后的控制台输出的屏幕截图。
- 您部署的 ERC20 代理合约的地址( text 格式)。
- 检查完 SUDT余额后,控制台输出的屏幕截图。
- 被检查的以太坊地址( 文本格式)。
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。
Recommend
-
8
Nervos x Gitcoin bounty 任务1: 在 EVM 兼容的 Layer2 测试网上创建一个 Godwoken 账户 Nervos...
-
5
Nervos x Gitcoin bounty 任务0: 设置测试网上的 CKB 节点和 CKB 索引器Nervos x Gitcoin bounty 任务0: 设置测试网上的 CKB 节点和 CKB 索引器 ...
-
4
Nervos x Gitcoin bounty 任务2: 在 Polyjuice 上部署一个简易的以太坊智能合约 在 Nervos 的 EVM...
-
8
Nervos x Gitcoin bounty : 任务设置与要求 任务要求...
-
6
Nervos x Gitcoin bounty 任务3:发起一个智能合约呼叫来部署智能合约 在本任务中,我们将学习如何...
-
4
Nervos x Gitcoin bounty 任务4:在 Layer1 发行一个 sUDT token,然后将他存到 Layer2 上面 在本任务中...
-
11
Nervos x Gitcoin bounty 任务7:将一个既有以太坊 dApp 引入 Polyjuice 上Nervos x Gitcoin bounty 任务7:将一个既有以太坊 dApp 引入 Polyjuice 上 ...
-
5
Nervos x Gitcoin bounty 任务6:通过 Force Bridge 将 token 从以太坊存到 PolyjuiceNervos x Gitcoin bounty 任务6:通过 Force Bridge 将 token 从以太坊存到 Polyjuice...
-
5
Nervos x Gitcoin bounty 任务8: 修改移植的 dApp,使之支持透过 Force Bridge 来的以太坊资产 大...
-
5
Nervos x Gitcoin bounty 任务9:从 Layer2 发起取款回 Layer1 使用区块链 Layer2 网络的自然而然...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK