Функция солидности не возвращает массив хэшей в W3 - PullRequest
0 голосов
/ 02 сентября 2018

У меня есть метод solidity, который получает список строк из моего контракта, хэширует каждую строку и возвращает массив хэшей. Я проверил это в Remix, и оно работает хорошо.

В процессе разработки я вызываю эту функцию из nodejs, но по какой-то причине получаю обратно [object Object], который не содержит массив хэшей.

Я должен добавить, что мой web3 провайдер не Ethereum, а Quorum s 7nodes 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);
   });
}

1 Ответ

0 голосов
/ 02 сентября 2018

Вместо .send(...), вы хотите .call(...). Первый транслирует транзакцию в сеть, и в результате получается хэш транзакции и, в конечном итоге (после того, как транзакция была добыта), квитанция транзакции. Транзакции не возвращают значение из смарт-контракта.

.call(...) используется для view функций. Он вычисляет результат вызова функции локально (только на узле, к которому вы подключены) без отправки транзакции и возвращает результат вам. В блокчейне не происходит никаких изменений состояния, поскольку транзакция не транслировалась. call s не требует газа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...