Go语言开发以太坊:帐户余额

读取帐户余额非常简单;调用BalanceAt客户端方法,向其传递帐户地址和可选的程序段号。设置nil为冻结编号将返回最新余额。

account := common.HexToAddress("0x71c7656ec7ab88b098defb751b7401b5f6d8976f")balance, err := client.BalanceAt(context.Background(), account, nil)if err != nil {
  log.Fatal(err)}fmt.Println(balance) // 25893180161173005034

通过块编号,您可以读取该块当时的帐户余额。块号必须为big.Int

blockNumber := big.NewInt(5532993)balance, err := client.BalanceAt(context.Background(), account, blockNumber)if err != nil {
  log.Fatal(err)}fmt.Println(balance) // 25729324269165216042

以太坊中的数字使用尽可能最小的单位进行处理,因为它们是定点精度,在ETH情况下为wei要读取ETH值,您必须进行计算wei / 10^18因为我们要处理大量数据,所以我们必须导入本机的Gomathmath/big包。这是您的转换方式。

fbalance := new(big.Float)fbalance.SetString(balance.String())ethValue := new(big.Float).Quo(fbalance, big.NewFloat(math.Pow10(18)))fmt.Println(ethValue) // 25.729324269165216041

待处理余额

有时,您可能想知道待处理的帐户余额是多少,例如在提交或等待确认交易之后。客户端提供与BalanceAt调用类似的方法,PendingBalanceAt方法接受帐户地址作为参数。

pendingBalance, err := client.PendingBalanceAt(context.Background(), account)fmt.Println(pendingBalance) // 25729324269165216042

完整代码

account_balance.go

package mainimport (    "context"
    "fmt"
    "log"
    "math"
    "math/big"
    "github.com/ethereum/go-ethereum/common"
    "github.com/ethereum/go-ethereum/ethclient")func main() {
    client, err := ethclient.Dial("https://mainnet.infura.io")    if err != nil {
        log.Fatal(err)
    }
    account := common.HexToAddress("0x71c7656ec7ab88b098defb751b7401b5f6d8976f")
    balance, err := client.BalanceAt(context.Background(), account, nil)    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(balance) // 25893180161173005034
    blockNumber := big.NewInt(5532993)
    balanceAt, err := client.BalanceAt(context.Background(), account, blockNumber)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(balanceAt) // 25729324269165216042
    fbalance := new(big.Float)
    fbalance.SetString(balanceAt.String())
    ethValue := new(big.Float).Quo(fbalance, big.NewFloat(math.Pow10(18)))
    fmt.Println(ethValue) // 25.729324269165216041
    pendingBalance, err := client.PendingBalanceAt(context.Background(), account)
    fmt.Println(pendingBalance) // 25729324269165216042}


链客

2019.10.31
3884
收藏

个评论:

发表评论

感谢您的善举,每一次解答会成为新人的灯塔。回答被采纳后获得20算力和相应LK币奖励。

关闭