区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

栏目: JavaScript · 发布时间: 4年前

内容简介:以太坊智能合约的发展在2018年呈指数级增长,2019年似乎将遵循这一趋势。有些框架,如Truffle,可以帮助我们快速构建和维护智能合约,如果您想让亲自动手体验的话,我将解释如何编译您的智能合约,并使用自己的脚本将其部署到以太坊网络(Rinkeby、Ropsten或Mainnet)。注意:我将使用简单的智能合约,因为本文的目的只是展示如何编译和部署脚本。

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

以太坊智能合约的发展在2018年呈指数级增长,2019年似乎将遵循这一趋势。有些框架,如Truffle,可以帮助我们快速构建和维护智能合约,如果您想让亲自动手体验的话,我将解释如何编译您的智能合约,并使用自己的脚本将其部署到以太坊网络(Rinkeby、Ropsten或Mainnet)。

注意:我将使用简单的智能合约,因为本文的目的只是展示如何编译和部署脚本。

项目具有以下结构:

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

文件夹合同包含我们的智能合约(您可以根据需要拥有任意多个智能合约)。对于这篇文章,我们将使用两个简单的智能合约:

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

MyContractA.sol

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

MyContractA.sol

如您所见,我们有两个文件,其中一个包含两个智能合约,证明我们可以拥有任意数量的智能合约。

脚本编译

现在,一旦我们有了初始项目结构和智能合约,就可以开始构建编译脚本了。

该脚本的目的是为每个合约生成一个JSON(在这种情况下,我们将使用三个JSON完成编译过程),每个JSON都包含已编译的合同信息。 这些JSON将存储在名为build /的输出路径中

构建脚本的步骤如下:

  1. 创建构建/目录。

  2. 获取我们的合同来源。

  3. 编译合同并将输出写入文件。

第1步 - 创建build/文件夹。

这一步是最简单的,因为我们只需要了解JavaScript的一些基础知识(这里不需要以太坊概念)。

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

现在要将所有文件的来源都放到智能合约文件夹中。 在这一步中,只需要JavaScript就不需要以太坊概念,但还是有点复杂。

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

对于contracts文件夹中的每个文件,我们在sources对象中添加一个新字段(我们将在步骤3中看到这个sources的用途),其中键是文件名,值是.sol文件的内容。

第3步 - 编译并写入输出

现在我们已经有了输出文件夹和智能合约的内容,是时候编译它们了(是的!最后出现了以太坊部分)。

首先,我们必须定义一个对象,该对象将作为Solidity编译器的信息输入。

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

  1. language:我们智能合约的编程语言,目前是使用Solidity,但你也可以选择其他编程语言(Viper)。

  2. sources:我们合同的内容。

  3. settings:此选项告诉编译器我们想要生成哪些输出字段。 对于此示例,我选择sources中的所有文件生成abi和evm.bytecode。 这两条信息是部署阶段所必需的。

一旦我们有了编译器的配置对象,我们就可以执行它了。

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

第一行获取一个包含我们编译的脚本的对象。 两个for循环允许我们在不同的JSON文件中存储单个.sol文件中的智能合约(在我们的例子中就像MyContractA.sol)。

最后一步是把这三部分连接在一起

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

这样我们就完成了编译脚本。如果我们运行它,项目结构应该如下所示:

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

我们已经gitignored build文件夹,因为没有意义在Git下跟踪它。

现在我们已经编辑了我们的智能合约,是时候将它们部署到区块链上了。

脚本部署 

是时候将我们的智能合约部署到以太坊区块链上了(在这种情况下,部署将针对Rinkeby,因此不会使用到主链上,但过程与其他以太坊区块链类似)。

首先,我们需要两件事来将智能合约部署到区块链:

  1. 解锁帐户:由于我们需要使用gas来发送将创建智能合约的交易。

  2. 连接到区块链的节点:我们正在向网络发送交易,因此我们需要连接到链上。

关于第一点,我们将使用HDWalletProvider,这个工具(感谢Truffle :))允许我们使用助记符十二个单词短语解锁帐户并连接到以太坊节点。但是......节点在哪里?好吧,我们可以做两件事,运行我们自己的以太坊节点(这是我不推荐的事情,至少是为hobbie开发dApps)或使用Infura。 Infura是一项服务,它允许我们连接到以太坊网络,而无需运行我们自己的以太坊节点。所以,我们似乎已经涵盖了两点。

解锁帐户并连接到以太坊节点。

要使用Infura,我们需要在其页面中注册。它将生成我们需要使用其服务的API密钥(它是完全免费的)。

我们将使用Web3JS与区块链进行交互。 Web3需要提供程序来连接节点并与节点交互。这个提供程序是HDWalletProvider,我们来配置它和Web3。

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

HDWalletProvider的第一个参数是我们的12个单词助记词。 这个短语允许提供者解锁帐户(它默认解锁多个帐户但我们此时只需要第一个),第二个参数告诉提供者以太网节点在哪里,在这种情况下我们通过Infura连接(如果 你使用自己的节点,它应该看起来像ws:// localhost:4535或你的节点在哪里)。

最后我们在web3中设置了提供者。

通过正确配置web3,我们可以最终部署合同。

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

首先,我们需要我们编译的脚本(我们只需要部署一个脚本,但是其他流程是相同的,或者你可以构建一些逻辑来逐个编译和部署)。

然后,在第8行中,我们使用Web3API创建智能合约,并将智能合约的接口传递给它。接下来,我们需要创建一个包含智能合约信息的部署事务:

  1. data:合同的字节代码。它以0x开头表示它是十六进制的。

  2. arguments:我们的智能合约构造函数的参数(如果构造函数没有参数则不需要)。

创建事务后,我们将其发送到以太坊区块链,以便为节点处理它:

  1. from:签署交易并发送的帐户。在第4行中,我们获得了HDWalletProvider生成和解锁的帐户以及12个单词短语。

  2. gas:我们想要用于发送交易的最大gas量。

第18行的console.log对于获取部署合同的地址很重要,这样我们将来可以将其用于DAPP、用于其他合同等。

脚本的最后一行告诉提供程序结束与以太坊节点的连接。

如果我们执行脚本,一段时间后,我们将获得如下跟踪:

区块链研究实验室 | 使用JavaScript编译和部署以太坊智能合约

现在我们可以访问EtherScan并查看我们在区块链中部署的智能合约。

最后,我们已经部署了智能合约,并且每个人都可以访问。 我希望这篇文章有所帮助。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

细节决定交互设计的成败

细节决定交互设计的成败

张亮 / 2009-3 / 49.00元

《细节决定交互设计的成败》是一本非常实用的有关软件界面的交互设计和可用性设计方面知识的书籍,通过采用一问一答的形式,你将会有针对性地学习到一些能够很快应用在自己软件开发工作中的细节知识和诀窍。例如,如何减轻用户的等待感,如何预防和减少用户的使用错误等。另外,你会发现阅读《细节决定交互设计的成败》时会非常轻松和愉悦;这是由于《细节决定交互设计的成败》写作上的两个特点:第一,采用较多日常生活中的例子来......一起来看看 《细节决定交互设计的成败》 这本书的介绍吧!

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

MD5 加密
MD5 加密

MD5 加密工具

SHA 加密
SHA 加密

SHA 加密工具