打字猴:1.70387916e+09
1703879160
1703879161 这样,Migrations合约中就存储了最后部署的应用脚本的序号,truffle将不会再次运行这些脚本。另外,应用未来可能需要部署修改过的或新的合约。为此,需要创建一个新的脚本,其序号表示需要进行的步骤。待再次运行之后,它们将不会再次运行。
1703879162
1703879163 2.编写移植文件
1703879164
1703879165 在移植文件的起始部分,用artifacts.require()方法告诉truffle想和哪个合约交互。该方法类似于节点的require方法,但是在这里,它专门返回一个可以在部署脚本的其他部分使用的合约抽象。
1703879166
1703879167 所有移植必须通过module.exports导出函数。每个移植导出的函数都应当用deployer对象作为第一个参数。该对象从两方面帮助部署:一是提供清晰的API部署智能合约,二是执行一些单调枯燥的任务,例如在artifacts文件中保存已部署的artifacts供今后使用、接入库等。deployer对象是分阶段部署任务的主要界面。
1703879168
1703879169 deployer对象的方法如下。所有方法都是同步的:
1703879170
1703879171 ·deployer.deploy(contractAbstraction,args…,options)。部署合约抽象对象指明的特定合约,采用可选constructor实参。这对于单一合约很有用,这样你的DApp合约中只有一个实例存在。这将在部署之后设置合约地址(即artifacts文件地址属性等同于新部署的地址),且将重写任何此前存储的地址。可以选择性地传送一个合约数组,或者多个数组中的一个,以加快多个合约的部署进程。此外,最后一个实参是一个可选对象,其中包含单一密钥overwrite。如果overwrite设为false,则deployer不部署合约(如果已经部署了一个合约)。该方法返回一个承诺。
1703879172
1703879173 ·deployer.link(library,destinations)。将一个已经部署的库接入一个或者多个合约。destinations实参可以是一个或者多个合约抽象的数组。如果目的地(destination)里的任何合约都不依赖于接入的库,deployer就会忽略该合约。该方法返回一个承诺。
1703879174
1703879175 ·deployer.then(function(){})。用于运行任意部署步骤。在移植中,用该方法调用特定合约函数,添加、修改和重新组织合约数据。在回调函数中,使用合约抽象API部署和接入合约。
1703879176
1703879177 根据被部署网络的情况,可以有条件地分步骤部署。这样就要编写移植,以接收第二个参数network。许多热门的库已经被部署到主网络中,因此在使用这些网络时,我们不会再次部署库,而只是接入它们。示例如下:
1703879178
1703879179
1703879180
1703879181
1703879182 在项目中,有两个移植文件,即1_initial_migration.js和2_deploy_contracts.js。不要修改第一个文件,但可以对第二个文件进行修改。2_deploy_contracts.js文件的代码如下:
1703879183
1703879184
1703879185
1703879186
1703879187 这里,首先为CovertLib库和MetaCoin合约创建抽象。无论使用哪个网络,先部署ConvertLib库,然后把库接入MetaCoin网络,最后部署MetaCoin网络。
1703879188
1703879189 为了运行移植文件,即部署该合约,运行如下命令:
1703879190
1703879191
1703879192
1703879193
1703879194 上述代码表明truffle在开发网络上运行移植。如果不提供—network选项,则默认使用名为development的网络。
1703879195
1703879196 在运行前面的命令之后,会发现truffle将在artifacts文件中自动更新ConvertLib库和MetaCoin合约地址,并更新链接。
1703879197
1703879198 下面是可以提供给migrate子命令的一些其他重要选项:
1703879199
1703879200 ·—reset。从最初开始运行所有移植(而非从上一个移植结束之后开始运行)。
1703879201
1703879202 ·-f number。从一个特定移植运行合约。
1703879203
1703879204
1703879205 可以使用truffle networks命令实时在不同的网络中发现项目的合约地址和库。
1703879206
1703879207
1703879208
1703879209
[ 上一页 ]  [ :1.70387916e+09 ]  [ 下一页 ]