以太坊系节点余额精度处理
Posted 杰哥的技术杂货铺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了以太坊系节点余额精度处理相关的知识,希望对你有一定的参考价值。
当我们使用json_rpc接口 eth_getBalance
获取以太坊余额时,将得到一个string类型的十六进制数,如:0x1bc10edd0701d9f2
此时我们需要将该值转为big.int类型的整数,转换方法如下:
value := common.HexToBigInt("0x1bc10edd0701d9f2")
fmt.Println(value) //得到big.int类型整数值:1999896051997334002
注:如果我们需要将该整数值再次转为string,方便其它方法调用使用时,则如下转换即可:
balance := common.HexToBigInt(res)
fmt.Println(balance.String())
HexToBigInt 方法如下:
func hexToBigInt(hex string) *big.Int
n := new(big.Int)
n, _ = n.SetString(hex[2:], 16)
return n
得到一个整数值后,我们知道以太坊中的数字是使用尽可能小的单位来处理的,因为它们是定点精度,在ETH中它是wei。要读取ETH值,就必须做计算wei/10^18。因为我们正在处理大数,我们得导入原生的Gomath和math/big包。这是我们要做的转换。同时要使用ToDecimal
方法针对以太坊进行浮点数运算
将wei(整数)转换为小数。 第二个参数是小数位数。
wei := new(big.Int)
wei.SetString("
以上是关于以太坊系节点余额精度处理的主要内容,如果未能解决你的问题,请参考以下文章