我想编写一个简单的函数来按合同调用方法并获取运行结果,
function _evaluate(uint8[5] _uploads) internal returns (bytes32 resultId){
resultId= keccak256(abi.encodePacked(now, msg.sender));
addressToid[msg.sender] = resultId;
idToResult[resultId] = Result(msg.sender, r);
}
function upload(uint8[5] _inputs) public returns ( bytes32 resultId) {
return _evaluate(_inputs);
}
// DEE is the contract name
return this.DEE.deployed()
.then((instance) => instance.upload(this.inputs, {from: base.accounts[0]}))
.then((r) => {
this.message = "Transaction done"
console.log(r);
})
.catch((e) => {
console.error(e)
this.message = "Transaction failed"
})
但实际上,我发现返回的r是一个**交易明细**,例如
{tx: "0xa543fff3c3bac2268c0c94a21f6cf62faa8cf667defcd9fd8dcdbcf7669a4e58",
接收:{…},记录:Array(0)} 日志 : [] 收据 : {transactionHash:“ 0xa543fff3c3bac2268c0c94a21f6cf62faa8cf667defcd9fd8dcdbcf7669a4e58”, transactionIndex:0,blockHash: “ 0x07d691308724c73025de2f346dc0d6bc4eb7e7de9871e29ea2c4d4e8fb8222bb”, blockNumber:20,gasUsed:56460,…} 发射 : “ 0xa543fff3c3bac2268c0c94a21f6cf62faa8cf667defcd9fd8dcdbcf7669a4e58” 原始 : 对象
没有包含有关应返回的ID的信息。
我做错了吗?
答案 0 :(得分:2)
我想我得到了答案。
当前无法从以下函数返回值: 修改区块链要获得返回值,您可以标记 只读功能为“常量”。
对于非恒定函数,“返回”信息的唯一方法是通过 使用Solidity Events,该事件在以太坊中合并为LOG操作码 虚拟机。
答案 1 :(得分:0)
在函数定义中指定“视图”:
nan