Contract-Invocation
合約函式返回地址?
學習乙太坊,我希望這是一個簡單的。我寫了一個簡單的測試合約
contract Mini{ uint balance; // constructor // runs once upon creation function Mini(){ balance = 1000; } function deposit(uint _value) returns(uint _newValue){ balance += _value; return balance; } function benchmark() returns(uint _newValue){ return 4545; }}
當我呼叫“基準”時
var result = myContractInstance.benchmark(function(err,res){ console.log(res); });
響應是一個地址(例如 0xd1d618bcb179db8b020358710138d1a008f4f39e)。我可以在 etherscan 中看到交易。問題,我如何查看響應值?
benchmark 不是一個常量函式,因此它會為您返回一個事務 id。
如果您需要返回一個值或從塊鏈中讀取一個值,您可以使用常量函式
function benchmark() public constant returns(uint _newValue){ return 4545; }}
我讓它工作。我錯過了“常量”和“視圖”。這是最終的契約:
contract Mini{ uint balance; // constructor function Mini(){ balance = 1000; } function deposit(uint _value) public returns(uint _newValue){ balance += _value; return balance; } function withdraw(uint _value) view returns(uint _newValue){ balance -= _value; return balance; } function benchmark() public constant returns(uint _newValue){ return 4545; } function getBalance() public constant returns(uint _newValue){ return balance; } }
然後我可以按如下方式呼叫函式:
var MyContract = web3.eth.contract(abi); var myContractInstance = MyContract.at('YourContractAddress'); myContractInstance.benchmark(function(err,res){ console.log(res); }); myContractInstance.deposit(200,function(err,res){ console.log(res); }); myContractInstance.withdraw(50,function(err,res){ console.log(res); }); myContractInstance.getBalance(function(err,res){ console.log(res); });