在合同上运行方法时如何获得运行结果?

时间:2018-07-19 03:03:30

标签: blockchain ethereum solidity web3 truffle

我想编写一个简单的函数来按合同调用方法并获取运行结果,

这是合同代码

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);
  }

前端js代码

// 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的信息。

我做错了吗?

2 个答案:

答案 0 :(得分:2)

我想我得到了答案。

  

当前无法从以下函数返回值:   修改区块链要获得返回值,您可以标记   只读功能为“常量”。

     

对于非恒定函数,“返回”信息的唯一方法是通过   使用Solidity Events,该事件在以太坊中合并为LOG操作码   虚拟机。

https://ethereum.stackexchange.com/questions/3285/how-to-get-return-values-when-function-with-argument-is-called

答案 1 :(得分:0)

在函数定义中指定“视图”:

nan