以太坊系节点余额精度处理

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("

以上是关于以太坊系节点余额精度处理的主要内容,如果未能解决你的问题,请参考以下文章

以太坊系节点交易金额有效性判断

从零开发区块链应用--以太坊余额查询

一文拥有以太坊系链的rpc公用节点和水龙头信息,还有MetaMask的配置方式

如何获取以太坊账户的余额?

以太坊系节点数据清洗组件--Ethereum ETL

ERC20 代币余额如何存储在以太坊区块链上