Solidity函数不会向W3返回哈希数组

问题描述 投票:0回答:1

我有一个solidity方法,它从我的契约中获取一个字符串列表,散列每个字符串并返回一个哈希数组。我在Remix测试了这个,效果很好。

在开发中我从nodejs调用这个函数,但由于某种原因得到了不包含哈希数组的[object Object]

我应该补充一点,我的web3提供商不是Ethereum但是Quorum7nodes example.

这是solidity函数:

function getHashs(string id) public view returns (bytes32[]) {
    bytes32[] memory stringsToHash = getStrings(id);
    bytes32[] memory hashes = new bytes32[](5);

    for(uint i=0; i<=stringsToHash.length-1; i++) {
        bytes32 str = seeds[i];
        bytes32 hash = sha256(abi.encodePacked(seed));
        hashes[i] = hash;
    }

    return hashes;
}

这是w3代码:

function getHashes(id, contract, fromAccount, privateForNode) {

   return new Promise(function(resolve, reject) {

       contract.methods.getHashs(id).send({from: fromAccount, gas: 150000000, privateFor: [privateForNode]})
       .then(hashes => {
           console.log("got hashes from node === ");
           console.log(hashes[0]); // this is 'undefined'
          resolve(hashes);
       },
       (error) => {
           reject(error);
       }).catch((err) => {
            reject(err);
       });

   })
   .catch((err) => {
      reject(err);
   });
}
node.js ethereum solidity web3 quorum
1个回答
1
投票

而不是.send(...),你想要.call(...)。前者向网络广播事务,结果是事务哈希,并且最终(一旦交易已被挖掘)交易收据。交易没有来自智能合约的回报价值。

.call(...)用于view功能。它在本地(仅在您连接的节点上)计算函数调用的结果而不发送事务,并将结果返回给您。区块链中没有状态变化,因为没有广播事务。 calls不需要气体。

© www.soinside.com 2019 - 2024. All rights reserved.