為什麼我的智能合約函式總是返回 0?
我是乙太坊的新手。我正在嘗試在我的私有區塊鏈中部署我的第一個智能合約,但我的函式總是返回 0。我編寫了簡單的智能合約:
pragma solidity^0.5.0; contract helloNumber { int256 internal thisNumber; constructor() public { thisNumber = 4; } function showNumber() external pure returns (int256) { return 4; } }
我用 solc 生成了 Abi 和 BIN
solcjs --bin helloNumber.sol solcjs --bin helloNumber.sol
結果斌
60806040523480156100115760006000fd5b505b600460006000508190909055505b610026565b6090806100346000396000f3fe608060405234801560105760006000fd5b5060043610602c5760003560e01c806376dad22314603257602c565b60006000fd5b6038604e565b6040518082815260200191505060405180910390f35b6000600490506058565b9056fea265627a7a7231582090f812ea4d2db2a047f1e42576b9cd85f3c0bef7e9392797864143a00ce269c664736f6c634300050b0032
結果 ABI:
$$ {“constant”:true,“inputs”:[],“name”:“showNumber”,“outputs”:[{“internalType”:“int256”,“name”:"",“type”:“int256”}],“payable”:false,“stateMutability”:“pure”,“type”:“function”},{“inputs”:[],“payable”:false,“stateMutability”:“nonpayable”,“type”:“constructor”} $$
在我的外殼中連接到我的私有區塊鏈:
var contract = eth.contract(ABI) var bytecode = '0xBIN' var deploy = {from:eth.coinbase, data:bytecode, gas: 2000000} var object= contract .new(deploy) object.address //returns the hashcode of smart contract on private blockchain. object.showNumber() **//returns always 0.**
非常感謝您的幫助,如果這是一個愚蠢的問題,我很抱歉,但我是乙太坊的新手。我究竟做錯了什麼?
您的 Javascript 程式碼應該是非同步的(使用
async
/await
或使用Promise
對象),因為兩者contract.new
都object.showNumber
返回Promise
.例如:
async function run() { var contract = eth.contract(ABI); var bytecode = '0xBIN'; var deploy = {from: eth.coinbase, data: bytecode, gas: 2000000}; var object = await contract.new(deploy); var n = await object.showNumber(); console.log(n); }
然後,您可以
run()
在腳本末尾呼叫,也可以await run()
從其他async
函式呼叫。