我在下面写简单的合同,它存储了每个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;
}
}
包含参数的函数"vote"可以成功调用和挖掘,我无法获取带有状态消息"正在等待交易被挖掘......"的返回值。当我使用已经通过"投票"功能注册的 ID 调用"getNumResult"时,在 solidity 浏览器屏幕中。
如果有人会建议原因和解决方案以获取带有参数的函数的返回值,我们将不胜感激。
作者还在以太坊堆栈交易所问过,这里有一个答案。
使用非常量函数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 监视和获取事件数据的不同方法,请参阅合约事件。