从其他合同中调用函数的可靠性

时间:2017-04-24 04:55:14

标签: function external blockchain contract solidity

我正在尝试从Maker合约创建Taker合约的新实例,并向其发送一些价值。

之后我想从Taker合同中将价值发回Maker合约

maker.change.value(5)(y);

然而,它找不到名为“change”的函数并抛出错误。我能想到的唯一可能的解释是它们需要异步执行但是同时编译。

Untitled:27:3: Error: Member "change" not found or not visible after argument-dependent lookup in address
    maker.change.value(5)(y);
    ^----------^

(这是在浏览器Solidity,Ethereum Studio和Truffle中测试的 - 都有相同的错误信息)

以下是完整代码。

我非常感谢有关如何解决这个问题的建议(和/或参考文献)。

谢谢!

pragma solidity ^0.4.2;

contract Maker {
uint x;

function Maker() {
    x = 5;
    Taker take = new Taker(this, 2);
    bool a = take.call.gas(200000).value(10)();
}

function change(uint val) external payable {
    x = val;
}
}

contract Taker {
uint y;
address maker;

function Taker(address makerAddr, uint val) {
    y = val;
    maker = makerAddr;
}

function sendChange() {
    maker.change.value(5)(y);
}
}

1 个答案:

答案 0 :(得分:1)

此代码在浏览器合法性中与我合作

pragma solidity ^0.4.2;
contract Maker {
uint x;

function Maker() {
   x = 5;
   Taker take = new Taker(this, 2);
   bool a = take.call.gas(200000).value(10)();
}

function change(uint val) external {
   x = val;
}
}

contract Taker {
   uint y;
   Maker maker;

   function Taker(address makerAddr, uint val) {
      y = val;
      maker = Maker(makerAddr);
 }

 function sendChange() {
    maker.change(5);
 }
 }