调用带参数的函数时如何获取返回值

时间:2016-04-23 07:00:31

标签: ethereum solidity

我正在写下简单的合同,其中存储了每个ID的所有问卷调查结果。

contract answer{
  mapping(address => mapping(string => bool)) voters;

  struct qList {
    uint count; //The number of respondents
    mapping(address => mapping(uint => uint)) answer;
  }

  mapping(string => qList) questionnaires;

  function vote(string ID, uint qNum, uint ans) returns (bool) {
    if(voters[msg.sender][ID]) throw;
    voters[msg.sender][ID] = true;
    questionnaires[ID].count += 1;
    questionnaires[ID].answer[msg.sender][qNum] = ans;
    return true;
  }

  function getNumResult(string ID) constant returns (uint res) {
    return questionnaires[ID].count;
  }
}

功能"投票"包括参数可以成功调用和挖掘,但是我无法通过状态消息获得返回值"等待事务被挖掘......"在我打电话给" getNumResult"已通过功能"投票"注册的ID。

如果有人会建议解决这个问题的原因并通过参数获取函数的返回值,那就感激不尽。

1 个答案:

答案 0 :(得分:2)

以太坊Stack Exchange上的作者also asked,这是一个答案。

使用非常量函数vote,您只能立即获取事务哈希,因为事务可能永远不会被挖掘。或者它可能需要几个块,如“等待交易被挖掘......”所示。

建议检查:https://ethereum.stackexchange.com/questions/765/what-is-the-difference-between-a-transaction-and-a-call

活动

获取vote的“返回值”需要事件。

如何添加和触发event

的示例
contract answer{
  // ...
  event VoteEvent(string ID, bool returnValue);

  function vote(string ID, uint qNum, uint ans) returns (bool) {
    // ...
    VoteEvent(ID, true);
    return true;
  }
}

有关使用web3.js查看和获取事件数据的不同方法,请参阅Contract Events