github.com/ava-labs/avalanchego@v1.11.11/wallet/chain/c/context.go (about) 1 // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package c 5 6 import ( 7 "context" 8 9 "github.com/ava-labs/avalanchego/api/info" 10 "github.com/ava-labs/avalanchego/ids" 11 "github.com/ava-labs/avalanchego/snow" 12 "github.com/ava-labs/avalanchego/utils/constants" 13 "github.com/ava-labs/avalanchego/utils/logging" 14 "github.com/ava-labs/avalanchego/vms/avm" 15 ) 16 17 const Alias = "C" 18 19 type Context struct { 20 NetworkID uint32 21 BlockchainID ids.ID 22 AVAXAssetID ids.ID 23 } 24 25 func NewContextFromURI(ctx context.Context, uri string) (*Context, error) { 26 infoClient := info.NewClient(uri) 27 xChainClient := avm.NewClient(uri, "X") 28 return NewContextFromClients(ctx, infoClient, xChainClient) 29 } 30 31 func NewContextFromClients( 32 ctx context.Context, 33 infoClient info.Client, 34 xChainClient avm.Client, 35 ) (*Context, error) { 36 networkID, err := infoClient.GetNetworkID(ctx) 37 if err != nil { 38 return nil, err 39 } 40 41 blockchainID, err := infoClient.GetBlockchainID(ctx, Alias) 42 if err != nil { 43 return nil, err 44 } 45 46 avaxAsset, err := xChainClient.GetAssetDescription(ctx, "AVAX") 47 if err != nil { 48 return nil, err 49 } 50 51 return &Context{ 52 NetworkID: networkID, 53 BlockchainID: blockchainID, 54 AVAXAssetID: avaxAsset.AssetID, 55 }, nil 56 } 57 58 func newSnowContext(c *Context) (*snow.Context, error) { 59 lookup := ids.NewAliaser() 60 return &snow.Context{ 61 NetworkID: c.NetworkID, 62 SubnetID: constants.PrimaryNetworkID, 63 ChainID: c.BlockchainID, 64 CChainID: c.BlockchainID, 65 AVAXAssetID: c.AVAXAssetID, 66 Log: logging.NoLog{}, 67 BCLookup: lookup, 68 }, lookup.Alias(c.BlockchainID, Alias) 69 }