部署命令
初次部署: truffle migrate
重新部署:truffle migrate --reset
部署文件
先修改./migrations/2_initial_migration.js
注意,文件名的前缀是数字,后缀是描述。为了记录迁移是否成功运行,需要有编号的前缀。后缀是纯粹为了人类的可读性和理解力。
1.基本配置
artifacts.require()
在迁移开始时,我们通过artifacts.require()方法告诉Truffle我们想与哪些合同进行交互。 这个方法类似于Node的要求,但在我们的例子中,它特别返回了我们可以在其余部署脚本中使用的抽象合约。 指定的名称应与该源文件中的合同定义的名称匹配。 不传递源文件的名称,因为文件可以包含多个合同。举例:
// fileName: ./contracts/Contracts.sol
contract ContractOne { // ... }
contract ContractTwo { // ... }
如果只用合约中的ContractTwo
你的artifacts.require()
这样写:
var ContractTwo = artifacts.require("ContractTwo");
如果两者都要用:
var ContractOne = artifacts.require("ContractOne");
var ContractTwo = artifacts.require("ContractTwo");
module.exports
所有迁移都必须通过module.exports语法导出函数。 每次迁移导出的函数都应接受部署者对象作为其第一个参数。 此对象通过为部署智能合约提供清晰的语法以及执行某些部署更普通的职责(例如保存已部署的工件以供以后使用)来帮助部署。 部署者对象是用于暂存部署任务的主要界面,其API在本页底部描述。
Initial migration
Truffle 框架中必须保留 contracts/Migrations.sol
和 migrations/1_initial_migration.js
这两个文件,
部署的时候,将先部署这个合约。
2.部署器(Deployer)
您的部署文件将使用部署器来完成部署任务。 因此,您可以同步编写部署任务,它们将以正确的顺序执行:
// 先部署A再部署B,两者直接无直接联系
deployer.deploy(A);
deployer.deploy(B);
// 部署A后把A的地址作为参数再部署B
deployer.deploy(A).then(function() {
return deployer.deploy(B, A.address);
});
后面有详细的API文档说明
3.网络配置
可以根据部署到的网络有条件地运行部署步骤。 这是一项高级功能,因此请在继续之前先查看“Networks”部分。
要有条件地暂存部署步骤,请编写迁移,以便它们接受第二个参数,称为Network。 例:
module.exports = function(deployer, network) {
if (network == "live") {
// Do something specific to the network named "live".
} else {
// Perform a different step otherwise.
}
}
4.选择账户
迁移还传递了Ethereum客户端和web3提供商提供给您的帐户列表,供您在部署期间使用。这是从web3.eth.getAccounts()
返回的相同的帐户列表。
module.exports = function(deployer, network