1. 链一财经首页
  2. 资讯

使用NodeJ编译和部署以太坊合约

你每天都读很多关于区块链的文章对吗?请你在这类文章的时候多问问自己以下问题。

它是如何工作的?

区块链如何实际执行业务逻辑?

如何编写在区块链上运行的代码?

如果您一步一步地阅读本文,那么您所有的问题都将得到解答,我相信您一定会非常了解如何编写、编译和部署您的智能合约。

在前一篇文章中,我们了解了如何使用Remix编辑器编译和部署合约。Remix仅限于使用浏览器,所以不能使用Git之类的版本控制来管理源代码。

使用NodeJ编译和部署以太坊合约

无论您想使用Remix或Truffle,还是想编写定制的编译和部署脚本。在核心上,它总是要经历类似的部署过程。

使用NodeJ编译和部署以太坊合约

您可以可靠地编写智能合约,并将其传递给可靠编译器,该编译器将为您生成ABI和合约字节码。

字节码将实际部署在以太坊网络上。ABI或应用程序二进制接口将用于查询和与以太坊网络上部署的交互合约。

使用NodeJ编译和部署以太坊合约

所以,不需要讲太多的细节,让我们开始编写NodeJs代码,它将帮助我们编译和部署在Rinkeby network上的智能合约。这就是我们要做的。

使用NodeJ编译和部署以太坊合约

使用您选择的编辑器并创建以下结构。我之所以使用VSCode,是因为它具有良好的扩展支持和闪电般的速度。

使用NodeJ编译和部署以太坊合约

运行以下命令创建包。json文件。

yarn init

增加了三个重要的依赖项。

1. web3:用于与本地或远程以太坊网络交互。

2. 它使用ethereumjs模拟完整的客户端行为,使开发以太坊应用程序更快、更容易、更安全。

3. solc: Solidity编译器。

yarn add web3 ganache-cli solc

在Inbox.solc文件中添加web3 ganache-cli solcWrite下面的代码。这是一个简单的智能合约,我们将使用它在Rinkeby网络上编译和部署。

使用NodeJ编译和部署以太坊合约

现在我们将在compile.js文件中使用Inbox.solc。您可能认为我们将使用需求(’./contracts/Inbox.solc’)。如果我们需要它,NodeJs将尝试执行它并抛出一个错误脚码,因为它不是一个javascript文件。

相反,我们将从特定的文件夹位置读取文件的内容,并将其传递给可靠的编译器。

使用NodeJ编译和部署以太坊合约

从第1行到第3行,我们需要一些模块,这些模块将有助于从文件系统和健壮编译器中读取文件。

第5行和第6行显示了我们如何为Inbox.solc文件提供路径,并以utf8格式读取其源代码。

在第8行,我们使用solc编译和提取收件箱合约,并导出它,这样我们就可以在其他地方使用编译的合约。在终端中执行以下命令。

node compile.js

如果您在控制台记录第8行并执行上面的命令,您将看到许多不可读的数据,这些数据由汇编代码、字节码、操作码等组成。

我们对接口(ABI)和字节码更感兴趣,它们看起来类似于下面的内容。别担心,你不必在代码中直接使用它。

使用NodeJ编译和部署以太坊合约

字节码是将在以太坊区块链上部署和执行的实际合约源代码。

使用NodeJ编译和部署以太坊合约

生成的接口或ABI将允许使用它来与部署在以太网上的合约进行交互。ABI列出了所有不同的函数,以及返回类型和合约上存在的不同值。

现在,我们已经完成了智能合约的编译,我们可以看看如何将编译的合约部署到Rinkeby网络。部署有点复杂,所以最好了解一下在引擎盖下部署的工作原理。

使用NodeJ编译和部署以太坊合约

别担心,我将带您浏览图中的每一个小框,并告诉您每个令人困惑的框的作用。

Web3:如上所述,我们将使用Web3实例与Rinkeby以太坊网络进行交互。Web3基本上是Javascript代码和以太坊之间的桥梁。

提供者:为了将web3连接到ethereum网络,我们需要一个提供者来告诉web3我们要与哪个网络通信。在我们的例子中,我们将与Rinkeby网络通信。

账户记忆法:它是字母、单词和联想的组合,可以让你轻松记住复杂的信息。当您注册一个新的区块链钱包时,将提供助记密码。我们将在提供商中使用它来连接到Rinkeby网络。

Rinkeby网络:它是运行测试以太坊网络的节点集合。主要用于测试和部署您的智能合约,然后才将其实际部署到主以太坊网络。

Infura API:它提供了可伸缩的以太坊网络,用于测试和实际的智能合约部署。我们将使用Infura API,而不是建立本地以太坊网络,这是非常耗时的,需要很多努力才能使其运行。

Infura.io注册。单击create new project并提供项目名称为Rinkeby API。从可用端点下拉菜单中,选择rinkeby并复制url,该url将在下一个部署步骤中使用。

使用NodeJ编译和部署以太坊合约

在deploy.js文件中写下以下代码。请确保添加您的助记短语和您从上一步复制的Infura rinkeby网络url。我们需要多一个依赖项来创建提供者对象。

yarn add truffle-hdwallet-provider

使用NodeJ编译和部署以太坊合约

哇…有很多代码。放松,我将向您介绍整个代码,以理解为什么我们要写每一行。

在第1行,HDWalletProvider用于指定我们想要解锁的帐户,并将其作为以太币的来源用于部署我们的合约。它还指定要连接到哪个外部API或节点。

在第3行,我们从编译后的文件中提取了接口和字节码,这是部署编译后的合约所需要的唯一两件重要的事情。

从第5行到第8行,从您选择的钱包中传递您的助记忆码,如元掩码和我们从Infura仪表板复制到HDWalletProvider的Rinkeby URL。

Rinkeby URL很重要,因为为了部署,我们必须连接到Rinkeby网络上的一个非常特定的节点。然后我们将这个provider对象传递给Web3并创建Web3实例。

部署函数就是奇迹发生的地方。第15行通过我们使用助记符配置的钱包提供程序获取可用的未锁定帐户。

使用NodeJ编译和部署以太坊合约

未锁定的帐户意味着我们可以在此帐户上自由传输和接收以太币,而不涉及任何隐私和安全问题。记住,我们需要一些以太币帐户部署我们的合同到 Rinkeby 网络。

如前所述,我们需要一些以太币在我们的帐户部署合约。如果您没有元掩码帐户,您可以创建一个并在您的帐户中传输测试以太币。遵循本文的第1点到第9点。

使用NodeJ编译和部署以太坊合约

在第18行,我们将调用web3实例上的Contract方法,并以json格式传递来自编译文件的ABI或接口,但我们需要传递Javascript对象,所以我们使用json .parse。

第19行将为部署准备对象,该对象将接受我们的字节码和我们的合约接受的任何初始消息。

第20行实际上将在网络上发送这个事务。第一个参数指定该事务将从哪个帐户执行。现在,如果你想在区块链上执行任何事情,你需要支付一些GAS,所以将通过100万GAS执行我们的交易。

最后一步,将我们的合同部署到Rinkeby 网络。

node deploy.js 

执行事务需要一些时间,一旦完成,您将获得部署合约的地址。但是如何验证部署了您的合约呢?

你可以访问https://rinkeby.etherscan.io/网站核实。将您部署的合约地址放在搜索栏中,您将获得关于您交易的详细信息。

使用NodeJ编译和部署以太坊合约

我知道部署合约有很多事情要做,但是如果你自己使用上面提到的步骤,你就可以在以太坊网络上部署任何不同的合约。

根据国家《关于防范代币发行融资风险的公告》,大家应警惕代币发行融资与交易的风险隐患。

本文来自LIANYI转载,不代表链一财经立场,转载请联系原作者。

发表评论

登录后才能评论

联系我们

微信:kkyves

邮件:kefu@lianyi.com

时间:7x24,节假日bu休息

QR code