github.com/MetalBlockchain/metalgo@v1.11.9/wallet/subnet/primary/examples/get-x-chain-balance/main.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package main
     5  
     6  import (
     7  	"context"
     8  	"log"
     9  	"time"
    10  
    11  	"github.com/MetalBlockchain/metalgo/utils/formatting/address"
    12  	"github.com/MetalBlockchain/metalgo/utils/set"
    13  	"github.com/MetalBlockchain/metalgo/wallet/chain/x"
    14  	"github.com/MetalBlockchain/metalgo/wallet/chain/x/builder"
    15  	"github.com/MetalBlockchain/metalgo/wallet/subnet/primary"
    16  	"github.com/MetalBlockchain/metalgo/wallet/subnet/primary/common"
    17  )
    18  
    19  func main() {
    20  	uri := primary.LocalAPIURI
    21  	addrStr := "X-local18jma8ppw3nhx5r4ap8clazz0dps7rv5u00z96u"
    22  
    23  	addr, err := address.ParseToID(addrStr)
    24  	if err != nil {
    25  		log.Fatalf("failed to parse address: %s\n", err)
    26  	}
    27  
    28  	addresses := set.Of(addr)
    29  
    30  	ctx := context.Background()
    31  
    32  	fetchStartTime := time.Now()
    33  	state, err := primary.FetchState(ctx, uri, addresses)
    34  	if err != nil {
    35  		log.Fatalf("failed to fetch state: %s\n", err)
    36  	}
    37  	log.Printf("fetched state of %s in %s\n", addrStr, time.Since(fetchStartTime))
    38  
    39  	xChainID := state.XCTX.BlockchainID
    40  
    41  	xUTXOs := common.NewChainUTXOs(xChainID, state.UTXOs)
    42  	xBackend := x.NewBackend(state.XCTX, xUTXOs)
    43  	xBuilder := builder.New(addresses, state.XCTX, xBackend)
    44  
    45  	currentBalances, err := xBuilder.GetFTBalance()
    46  	if err != nil {
    47  		log.Fatalf("failed to get the balance: %s\n", err)
    48  	}
    49  
    50  	avaxID := state.XCTX.AVAXAssetID
    51  	avaxBalance := currentBalances[avaxID]
    52  	log.Printf("current AVAX balance of %s is %d nAVAX\n", addrStr, avaxBalance)
    53  }