Contract-Development

為什麼我的智能合約函式總是返回 0?

  • October 3, 2019

我是乙太坊的新手。我正在嘗試在我的私有區塊鏈中部署我的第一個智能合約,但我的函式總是返回 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.newobject.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函式呼叫。

引用自:https://ethereum.stackexchange.com/questions/76458