2017-04-24 59 views
1

我試圖從Maker合同中創建一個Taker合同的新實例,並向它發送一些值。來自其他合同的調用函數solidity

再後來我想從合同刺輥

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

但是它不能找到所謂的「變化」的功能,並引發錯誤發送的值回製作合同。我能想到的唯一可能的解釋是它們需要異步執行,但是同時編譯。

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

(這在瀏覽器密實度,復仇Studio和松露測試 - 都具有相同的錯誤消息)

以下是完整代碼。

我將非常感謝任何關於如何解決這個(和或參考)的建議。

謝謝!

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

此代碼在瀏覽器和我一起密實度

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); 
} 
}