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  }