假设我将这两个契约定义在相同的实体文件中。
contract Coin {
string public name;
constructor(string _name) public {
name = _name;
}
}
contract MetaCoin {
Coin public coin;
constructor(Coin _coin) public {
coin = _coin;
}
}现在,我想编写一个javascript迁移以进行部署,因此我尝试了以下步骤
const coin = artifacts.require("Coin");
const meta = artifacts.require("Metacoin");
module.exports = async function (deployer, network, accounts) {
await deployer.deploy(Coin,"diamond");
const coin = await Coin.deployed();
await deployer.deploy(MetaCoin, coin);
}但是,我的最后一行await deployer.deploy(MetaCoin, coin);会导致一个错误,因为coin不是传递给MetaCoin构造函数的正确内容。
错误粘贴在下面
Error: while migrating Masterchef: invalid address (argument="address", value="[object Object]", code=INVALID_ARGUMENT, version=address/5.0.5) (argument="_Pcake", value="[object Object
]", code=INVALID_ARGUMENT, version=abi/5.0.7)我读过以下问题,但我认为它不适用于我的情况,因为我定义了Coin类型。实体函数可以接受来自JS的对象吗?例如,可以使用加号(**租户tenantObj**)接受租户对象?
发布于 2021-06-25 22:58:48
事实证明,您可以只传递硬币的地址,而不是硬币的抽象。
最后我用了
await deployer.deploy(MetaCoin, coin.address);我不知道为什么这样做会奏效,所以如果有人能解释的话,那会有很大帮助。
https://ethereum.stackexchange.com/questions/102495
复制相似问题