Ethereum 从合同中支付的保证金
我有以下代码,这是故障,从另一个合同创建一个应付合同Ethereum 从合同中支付的保证金,ethereum,solidity,smartcontracts,Ethereum,Solidity,Smartcontracts,我有以下代码,这是故障,从另一个合同创建一个应付合同 pragma solidity ^0.4.16; Contract Factory { uint contractCount = 0; mapping(uint => MyContract) public myContracts; function createContract(uint money) external payable { require(msg.value >= mon
pragma solidity ^0.4.16;
Contract Factory {
uint contractCount = 0;
mapping(uint => MyContract) public myContracts;
function createContract(uint money) external payable {
require(msg.value >= money);
contractCount++;
// the following line fails
myContracts[contractCount] = new MyContract(money);
}
}
Contract MyContract {
uint money;
function MyContract(uint _money) {
require(msg.value >= _money);
money = _money;
}
}
我使用的是混音IDE。我可以毫无问题地创建Factory实例,但是,当我尝试createContract(money)时,它无法创建新的MyContract实例。我怀疑这是因为调用new MyContract()
的方法没有传递任何值,因此无法满足MyContract
构造函数中的要求(msg.value>=\u money)
那么,我如何从合同中创建一个付费构造函数的实例呢?首先,您需要让您的构造函数付费才能工作 我怀疑这是因为调用new MyContract()的方法没有传输任何值,因此无法满足MyContract构造函数中的要求(msg.value>=\u money) 你说得对。Solidity这样做的语法有些不同寻常。请看一下文档的一节
child = (new B).value(10)(); //construct a new B with 10 wei
如果构造函数接受参数,它们将放在新表达式的最后一个括号中
在您的示例中,它将如下所示:
myContracts[contractCount] = (new MyContract).value(msg.value)(money);
myContracts[contractCount] = (new MyContract){value: msg.value}(money);
首先,你需要让你的建造商为此支付费用 我怀疑这是因为调用new MyContract()的方法没有传输任何值,因此无法满足MyContract构造函数中的要求(msg.value>=\u money) 你说得对。Solidity这样做的语法有些不同寻常。请看一下文档的一节
child = (new B).value(10)(); //construct a new B with 10 wei
如果构造函数接受参数,它们将放在新表达式的最后一个括号中
在您的示例中,它将如下所示:
myContracts[contractCount] = (new MyContract).value(msg.value)(money);
myContracts[contractCount] = (new MyContract){value: msg.value}(money);
对于那些仍在寻找解决方案的人
.value
已被弃用,使用新语法的示例如下所示:
myContracts[contractCount] = (new MyContract).value(msg.value)(money);
myContracts[contractCount] = (new MyContract){value: msg.value}(money);
对于那些仍在寻找解决方案的人
.value
已被弃用,使用新语法的示例如下所示:
myContracts[contractCount] = (new MyContract).value(msg.value)(money);
myContracts[contractCount] = (new MyContract){value: msg.value}(money);