получить значение String не в виде шестнадцатеричного значения из smartcontract - PullRequest
0 голосов
/ 17 июня 2019

я получил функцию smarcontract, возвращающую несколько значений в виде строки

Я пытаюсь преобразовать это число в UTF с web3 и не работает. Если я попробую сделать это на ремиксе, вызывающем смарт-контракт, то он будет работать нормально ... но не от JS

мой текущий код в смарт-контракте

    function getToken(uint256 _tokenId) public view returns (
        string _tokenName,
        string _cryptoCardID,
        uint256 _price,
        uint256 _nextPrice,
        address _owner
    ) {
        _tokenName = doggies[_tokenId].name;
        _cryptoCardID = doggies[_tokenId].cryptoCardID;
        _price = tokenIdToPrice[_tokenId];
        _nextPrice = nextPriceOf(_tokenId);
        _owner = tokenIdToOwner[_tokenId];
    }

from JS


 for ( var i = 0; i < result; i++){

  myfunction.getToken.call(  i ,  function (error, resultGetAll) {
  console.log("Token ID:"+i+ "Data:"+JSON.stringify(resultGetAll)); //here i get _cryptoCardID as hex 0x000000...


   }) // each one

}// for

то, что я ожидал, это строка в читаемой форме (utf8)

1 Ответ

1 голос
/ 18 июня 2019

Контракты будут хранить двоичные данные, поэтому возврат данных в шестнадцатеричной форме является более эффективным способом просмотра этих данных.

Вы всегда можете декодировать шестнадцатеричный код в utf-8 с помощью служебной функции из Интернета3.библиотека.

Примечание: этот метод может отличаться в зависимости от вашей версии web3, см. здесь для web3.utils.hexToUtf8 альтернативы.

Пример:

$ web3.toUtf8("0x68656c6c6f20776f726c640000000000000000000000000000000000000000")
$ "hello world"

протестировано на версии web3: 0.20.3

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