我有一个smarcontract函数,将其中的几个值作为字符串返回
我正在尝试使用web3将此数字转换为UTF,但无法正常工作。 如果我在调用智能合约的remix上尝试使用它,效果很好...但是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)的字符串
答案 0 :(得分:1)
合同将存储二进制数据,因此以十六进制形式返回数据是查看此数据的更有效方法。
您始终可以使用web3库中的实用程序功能将十六进制解码为utf-8。
注意:根据您的Web3版本,此方法可能有所不同,请参见here作为const exp = "x == 3";
const x = 3;
if (eval(exp)) {
console.log("True");
} else {
console.log("False");
}
的替代方法。
示例:
web3.utils.hexToUtf8
在web3版本上进行了测试: $ web3.toUtf8("0x68656c6c6f20776f726c640000000000000000000000000000000000000000")
$ "hello world"