Skip to content

Commit

Permalink
Add GetBalance examples for the P-chain and X-chain wallets (ava-labs…
Browse files Browse the repository at this point in the history
  • Loading branch information
StephenButtolph committed Jun 1, 2023
1 parent 4debc0e commit 277d223
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 8 deletions.
11 changes: 4 additions & 7 deletions wallet/chain/x/backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,16 +33,12 @@ type Backend interface {
type backend struct {
Context
ChainUTXOs

chainID ids.ID
}

func NewBackend(ctx Context, chainID ids.ID, utxos ChainUTXOs) Backend {
func NewBackend(ctx Context, utxos ChainUTXOs) Backend {
return &backend{
Context: ctx,
ChainUTXOs: utxos,

chainID: chainID,
}
}

Expand All @@ -56,19 +52,20 @@ func (b *backend) AcceptTx(ctx stdcontext.Context, tx *txs.Tx) error {
return err
}

chainID := b.Context.BlockchainID()
inputUTXOs := tx.Unsigned.InputUTXOs()
for _, utxoID := range inputUTXOs {
if utxoID.Symbol {
continue
}
if err := b.RemoveUTXO(ctx, b.chainID, utxoID.InputID()); err != nil {
if err := b.RemoveUTXO(ctx, chainID, utxoID.InputID()); err != nil {
return err
}
}

outputUTXOs := tx.UTXOs()
for _, utxo := range outputUTXOs {
if err := b.AddUTXO(ctx, b.chainID, utxo); err != nil {
if err := b.AddUTXO(ctx, chainID, utxo); err != nil {
return err
}
}
Expand Down
53 changes: 53 additions & 0 deletions wallet/subnet/primary/examples/get-p-chain-balance/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Copyright (C) 2019-2023, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.

package main

import (
"context"
"log"
"time"

"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/utils/constants"
"github.com/ava-labs/avalanchego/utils/formatting/address"
"github.com/ava-labs/avalanchego/utils/set"
"github.com/ava-labs/avalanchego/vms/platformvm/txs"
"github.com/ava-labs/avalanchego/wallet/chain/p"
"github.com/ava-labs/avalanchego/wallet/subnet/primary"
)

func main() {
uri := primary.LocalAPIURI
addrStr := "P-local18jma8ppw3nhx5r4ap8clazz0dps7rv5u00z96u"

addr, err := address.ParseToID(addrStr)
if err != nil {
log.Fatalf("failed to parse address: %s\n", err)
}

addresses := set.Set[ids.ShortID]{}
addresses.Add(addr)

ctx := context.Background()

fetchStartTime := time.Now()
pCtx, _, utxos, err := primary.FetchState(ctx, uri, addresses)
if err != nil {
log.Fatalf("failed to fetch state: %s\n", err)
}
log.Printf("fetched state of %s in %s\n", addrStr, time.Since(fetchStartTime))

pUTXOs := primary.NewChainUTXOs(constants.PlatformChainID, utxos)
pBackend := p.NewBackend(pCtx, pUTXOs, make(map[ids.ID]*txs.Tx))
pBuilder := p.NewBuilder(addresses, pBackend)

currentBalances, err := pBuilder.GetBalance()
if err != nil {
log.Fatalf("failed to get the balance: %s\n", err)
}

avaxID := pCtx.AVAXAssetID()
avaxBalance := currentBalances[avaxID]
log.Printf("current AVAX balance of %s is %d nAVAX\n", addrStr, avaxBalance)
}
53 changes: 53 additions & 0 deletions wallet/subnet/primary/examples/get-x-chain-balance/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
// Copyright (C) 2019-2023, Ava Labs, Inc. All rights reserved.
// See the file LICENSE for licensing terms.

package main

import (
"context"
"log"
"time"

"github.com/ava-labs/avalanchego/ids"
"github.com/ava-labs/avalanchego/utils/formatting/address"
"github.com/ava-labs/avalanchego/utils/set"
"github.com/ava-labs/avalanchego/wallet/chain/x"
"github.com/ava-labs/avalanchego/wallet/subnet/primary"
)

func main() {
uri := primary.LocalAPIURI
addrStr := "X-local18jma8ppw3nhx5r4ap8clazz0dps7rv5u00z96u"

addr, err := address.ParseToID(addrStr)
if err != nil {
log.Fatalf("failed to parse address: %s\n", err)
}

addresses := set.Set[ids.ShortID]{}
addresses.Add(addr)

ctx := context.Background()

fetchStartTime := time.Now()
_, xCtx, utxos, err := primary.FetchState(ctx, uri, addresses)
if err != nil {
log.Fatalf("failed to fetch state: %s\n", err)
}
log.Printf("fetched state of %s in %s\n", addrStr, time.Since(fetchStartTime))

xChainID := xCtx.BlockchainID()

xUTXOs := primary.NewChainUTXOs(xChainID, utxos)
xBackend := x.NewBackend(xCtx, xUTXOs)
xBuilder := x.NewBuilder(addresses, xBackend)

currentBalances, err := xBuilder.GetFTBalance()
if err != nil {
log.Fatalf("failed to get the balance: %s\n", err)
}

avaxID := xCtx.AVAXAssetID()
avaxBalance := currentBalances[avaxID]
log.Printf("current AVAX balance of %s is %d nAVAX\n", addrStr, avaxBalance)
}
2 changes: 1 addition & 1 deletion wallet/subnet/primary/wallet.go
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ func NewWalletWithTxsAndState(

xChainID := xCTX.BlockchainID()
xUTXOs := NewChainUTXOs(xChainID, utxos)
xBackend := x.NewBackend(xCTX, xChainID, xUTXOs)
xBackend := x.NewBackend(xCTX, xUTXOs)
xBuilder := x.NewBuilder(addrs, xBackend)
xSigner := x.NewSigner(kc, xBackend)
xClient := avm.NewClient(uri, "X")
Expand Down

0 comments on commit 277d223

Please sign in to comment.