4

Nervos x Gitcoin bounty 任务2: 在 Polyjuice 上部署一个简易的以太坊智能合约

 3 years ago
source link: https://learnblockchain.cn/article/2943
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.
neoserver,ios ssh client

Nervos x Gitcoin bounty 任务2: 在 Polyjuice 上部署一个简易的以太坊智能合约

在 Nervos 的 EVM兼容的 Layer2 上编译和部署智能合约的过程,与以太坊上的过程有很多相似之处。我们只需要做一些小小的改变即可。

Polyjuice 的最终目标是提供与所有基于 EVM 的 dApp 和 EVM 工具的 100% 兼容性。然而,开发工作仍在进行中。这个目标还没有完全实现,但它正在日益接近。

在 Nervos 的 EVM兼容的 Layer2 上编译和部署智能合约的过程,与以太坊上的过程有很多相似之处。我们只需要做一些小小的改变即可。

Polyjuice 的最终目标是提供与所有基于 EVM 的 dApp 和 EVM 工具的 100% 兼容性。然而,开发工作仍在进行中。这个目标还没有完全实现,但它正在日益接近。

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

在本次的任务中,您将使用以太坊的 solidity 编写一个非常基本的智能合约,将其编译为 EVM bytecode 的形式,并将其部署到 Nervos 的 Layer2 - Polyjuice 上。

我们将在此步骤中使用的代码将用来编译并部署智能合约。它使用了以太坊的 Web3.js 和 Truffle 的原始版本,唯一的区别是在此我们使用了自定义的 Web3.js 提供者。

以下的任务说明会提供一个你可以使用的最基本的智能合约,但你可以自由使用你选择的任何智能合约。但是,我们建议只使用具有读写基本值功能的基本智能合约,以确保您能够完成这个任务和往后的任务。

开始本任务的先决条件

在开始这个任务之前,您必须完成前面的任务,也就是在 Nervos 的 EVM Layer 2 测试网上创建一个 Godwoken 帐户。您还需要前一个任务中的私钥和测试网地址才能继续。如果您还没有完成,请现在先去完成哦。

1. 准备你的以太坊私钥

在前面的任务中,您导出了Nervos CKB 的帐户私钥。接下来,我们需要为你的以太坊兼容层的账户提取私钥。在这里我们将使用此私钥做为工具在 Layer2 上部署智能合约。我们不建议将 Layer1 私钥回收来做为 Layer2 的私钥,这可能会导致之后的过程产生失败。

注意:对于这些我们在 Gitcoin 上布置的任务,永远不要使用与真实帐户相关联的私钥。下面的步骤将向您展示如何从 MetaMask 导出您的私钥,但请您永远不要使用用于实际资产的 MetaMask 钱包来这样做,因为这可能会泄露信息,从而危及您的帐户里的资产。

如过你需要些说明来告诉你如何从 Metamask 导出私钥,可以看这篇教学文

2.克隆并设置一个 Gitcoin Task Instruction 仓库

在这一步骤中,您将克隆 Gitcoin Task Instructions 的范例仓库。他包含了此任务和未来任务所需的各种范例代码。

如果不存在~/project 目录的话,创建一个。

Linux/MacOS 命令行语句:

mkdir -p ~/projects

Windows (PowerShell) 命令行语句:

New-Item -ItemType Directory -Force -Path ~/projects

进入~/project 目录然后克隆仓库。

cd ~/projects
git clone <https://github.com/kuzirashi/gw-gitcoin-instruction>
cd gw-gitcoin-instruction

再来我们会安装所有的依赖

yarn run install-all

3.编译智能合约并且复制物件

在部署智能合约之前,需要对其进行编译。这可以通过几种方式实现,这次我们的指令将使用 Truffle 编译器来编译它。如果你有自己喜欢的替代方法,当然也可以随意使用。

使用 Truffle 编译器

下方提供的是一个你可以拿来使用的简易智能合约范例,但是你可以在这个任务中使用任何你想使用的智能合约 。下面的 solidity 智能合约示例是 SimpleStorage.sol ,它位于src/examples/2-deploy-contract/contracts 这个目录中。

pragma solidity >=0.8.0;

contract SimpleStorage {
  uint storedData;

  constructor() payable {
    storedData = 123;
  }

  function set(uint x) public payable {
    storedData = x;
  }

  function get() public view returns (uint) {
    return storedData;
  }
}

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

cd ~/projects/gw-gitcoin-instruction/src/examples/2-deploy-contract/
yarn compile

在这些命令完成了以后,你将会在 build/contracts 的目录下找到编译好的文件夹。举个例,他可能长得像这样src/examples/2-deploy-contract/build/contracts/SimpleStorage.json

替代方案:使用 Remix 编译器

如果出于某些原因,Truffle 编译器不能工作,你可以使用基于网页端的 Remix 编译器作为替代,但我们不会提供使用 Remix 的详细说明。只有当您已经熟悉这个工具,或者您在使用 Truffle 编译器时遇到困难时,才建议您使用这个工具。

在上传和编译你的 Solidity 代码后,你会收到一个 JSON 文件,并且可以在 Remix 的 “artifacts” 目录中找到。之后请您将这个文件的内容放在src/examples/2-deploy-contract/build/contracts目录中。

4.用 Web3.js 部署一个智能合约

[gw-gitcoin-instruction/src/examples/2-deploy-contract/](<https://github.com/Kuzirashi/gw-gitcoin-instruction/blob/master/src/examples/2-deploy-contract>) 目录中,您将发现部署智能合约到 Nervos Layer 2 所需的脚本。

首先,更新文件 gw-gitcoin-instruction/src/examples/2-deploy-contract/index.js 中的以太坊私钥。用你的以太坊私钥替换< YOUR_ETHEREUM_PRIVATE_KEY> 。这应该是与之前你充值的以太坊账户对应的私钥。这将用于在 Layer2 部署智能合约。

透过控制台使用以下命令来运行 [gw-gitcoin-instruction/src/examples/2-deploy-contract/index.js](<https://github.com/Kuzirashi/gw-gitcoin-instruction/blob/master/src/examples/2-deploy-contract/index.js>) 脚本

cd ~/projects/gw-gitcoin-instruction/src/examples/2-deploy-contract/
node index.js SimpleStorage.json

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

输出示例:

➜ node index.js SimpleStorage.json
Deploying contract...
Transaction hash: 0x266c4887b8ad47456cc12e135858d8cd96b4795f8a93036b18d917df970781ec
Deployed contract address: 0xC46e27169824290EcaEf6E14503C1a6DE72d41B0

为了完成这项任务,你需要提交以下材料:

  1. 成功部署智能合约后,控制台输出的屏幕截图。
  2. 合约成功部署的交易哈希( text 格式)。
  3. 合约部署后的合约地址( text 格式)。

本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK