是否可以使用web3.js从Solidity获取uint256值

时间:2018-06-15 14:27:39

标签: javascript solidity web3js

所以问题很简单。我正在调用返回uint256值的合约方法。是否有可能在JavaScript中获得该值?据我所知,JavaScript无法使用大数字,解决方案是制作以字符串形式返回数据的新合同?现在我得到的价值只是削减了很多零:)

1 个答案:

答案 0 :(得分:0)

Web3将原始数据类型(包括uint)作为字符串返回。如果您尝试使用类似parseInt的内容将其解析为javascript本机号码,则会失败。

要处理通过web3收到的大数字,你必须使用可以处理它们的库。一个这样的库是BigNumber.JS https://github.com/MikeMcl/bignumber.js/

所以你可以这样使用它:

let result = BigNumber(await bigNumber.methods.getNum1().call());

并使用BigNumber.js实现的数学运算

result = result.plus("99999999999999999999999999999999999999");

请注意,如果您只是尝试使用结果值本身

console.log(result);

你会得到这样的结果

  BigNumber {
    s: 1,
    e: 38,
    c: [ 10000000213, 12312312312312, 45465777775431 ] }

因此,您可能希望将其转换为最后的字符串

console.log(result.toString());

以可读的形式获得结果,例如:

1.00000002131231231231231245465777775431e+38