使用Truffle+Ganache部署智能合约时如何传入构造函数参数
Truffle 部署合约时传入构造函数参数的方法
你只需要修改合约对应的迁移部署脚本即可,操作步骤如下:
- 找到项目
migrations目录下对应你业务合约的部署脚本,通常命名格式为数字序号_自定义描述.js,例如2_deploy_crowdfund.js - 在
deployer.deploy()方法中,按照合约构造函数定义的参数顺序,依次把预定义的参数值追加在合约引用之后传入即可
针对你给出的众筹合约构造函数的示例
你的构造函数按顺序接收两个参数:第一个是目标募资额_targetAmount(uint256,单位wei),第二个是募资时长偏移量_setDeadline(uint256,单位秒,会和部署时的区块时间戳相加得到截止时间)。
举个实际配置例子:假设你要设置目标募资额为100ETH,募资周期为30天,部署脚本代码如下:
// 替换为你自己的合约名 const CrowdfundContract = artifacts.require("Crowdfund"); module.exports = function (deployer) { // 预定义参数值 // 100ETH 转wei单位 const targetAmount = web3.utils.toWei("100", "ether"); // 30天换算为秒:30天 * 24小时 * 60分钟 * 60秒 const deadlineDuration = 30 * 24 * 60 * 60; // 按顺序传入参数,顺序必须和构造函数声明顺序完全一致 deployer.deploy(CrowdfundContract, targetAmount, deadlineDuration); };
注意事项
- 参数顺序必须严格匹配构造函数的定义顺序,一旦顺序颠倒,会导致链上参数赋值完全不符合预期
- 所有涉及ETH金额的参数,不要直接传入以ETH为单位的数值,必须通过
web3.utils.toWei()转换为wei单位,否则会出现金额差18个数量级的问题 - 时间参数的单位是秒,不要直接传入天、小时为单位的数值,需要提前换算为秒级数值
- 如果需要自定义部署账户、Gas上限等交易配置,可以在参数列表最后追加配置对象,示例:
deployer.deploy(CrowdfundContract, targetAmount, deadlineDuration, { from: "0x1234567890abcdef1234567890abcdef12345678", // 指定部署账户 gas: 6000000 // 自定义Gas上限 });
- 部署完成后可以在Ganache的交易记录中查看合约创建交易的输入数据,或者调用合约的
totalAmount、deadline方法读取链上存储值,确认参数传入正确。
内容的提问来源于stack exchange,提问作者Tarandeep singh
相关产品推荐
相关产品推荐

