Solidity 函数无法返回预期数据

3
我有一个带有以下功能的合同:

 function supply () constant returns (uint sup) {
    sup = 100;
    return sup;
  }

运行。
  var token = web3.eth.contract(contractAbi).at(contractAddress);
  token.supply.call()

返回:
{ [String: '0'] s: 1, e: 0, c: [ 0 ] }

这里出了什么问题?我的合约中所有函数都发生了这种情况。谢谢!
1个回答

2
您正在获得“BigNumber”格式,这总是对于uint(256)的情况,因为数字比Javascript实际处理的数字要大。考虑尝试返回值格式。在此处可以找到示例/文档:https://github.com/ethereum/wiki/wiki/JavaScript-API#a-note-on-big-numbers-in-web3js Truffle风格(promise)。
token.supply.call().then(function(returned) {
   console.log(returned.toString(10));
}

回调风格
token.supply.call(function(error, returned) {
  if(!error) {
    console.log(returned.toString(10));
  } else {
    console.error(error);
});

上面的例子可能会失去一些精度。从上面链接的文档中可以看到...建议始终以 wei 为单位保持您的余额,并仅在向用户展示时将其转换为其他单位。希望这能帮到您。
更新:合同在 Remix 中对我有效,所以我会关注您调用函数的方式和等待响应的方式。

enter image description here


谢谢Rob,你看到我没有得到预期的100而是得到了0的任何原因吗? - user3404870
你在使用Geth、Truffle控制台或其他什么工具吗?你正在等待回调吗? - Rob Hitchens
谢谢Rob,这样就清楚了。我正在使用truffle和testrpc,并使用exec来测试事情。现在我已经让一切正常了,我没有在每次新部署时更新合同地址。 - user3404870

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接