github.com/MetalBlockchain/metalgo@v1.11.9/genesis/aliases.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package genesis
     5  
     6  import (
     7  	"path"
     8  
     9  	"github.com/MetalBlockchain/metalgo/ids"
    10  	"github.com/MetalBlockchain/metalgo/utils/constants"
    11  	"github.com/MetalBlockchain/metalgo/vms/nftfx"
    12  	"github.com/MetalBlockchain/metalgo/vms/platformvm/genesis"
    13  	"github.com/MetalBlockchain/metalgo/vms/platformvm/txs"
    14  	"github.com/MetalBlockchain/metalgo/vms/propertyfx"
    15  	"github.com/MetalBlockchain/metalgo/vms/secp256k1fx"
    16  )
    17  
    18  var (
    19  	PChainAliases = []string{"P", "platform"}
    20  	XChainAliases = []string{"X", "avm"}
    21  	CChainAliases = []string{"C", "evm"}
    22  	VMAliases     = map[ids.ID][]string{
    23  		constants.PlatformVMID: {"platform"},
    24  		constants.AVMID:        {"avm"},
    25  		constants.EVMID:        {"evm"},
    26  		secp256k1fx.ID:         {"secp256k1fx"},
    27  		nftfx.ID:               {"nftfx"},
    28  		propertyfx.ID:          {"propertyfx"},
    29  	}
    30  )
    31  
    32  // Aliases returns the default aliases based on the network ID
    33  func Aliases(genesisBytes []byte) (map[string][]string, map[ids.ID][]string, error) {
    34  	apiAliases := map[string][]string{
    35  		path.Join(constants.ChainAliasPrefix, constants.PlatformChainID.String()): {
    36  			"P",
    37  			"platform",
    38  			path.Join(constants.ChainAliasPrefix, "P"),
    39  			path.Join(constants.ChainAliasPrefix, "platform"),
    40  		},
    41  	}
    42  	chainAliases := map[ids.ID][]string{
    43  		constants.PlatformChainID: PChainAliases,
    44  	}
    45  
    46  	genesis, err := genesis.Parse(genesisBytes) // TODO let's not re-create genesis to do aliasing
    47  	if err != nil {
    48  		return nil, nil, err
    49  	}
    50  	for _, chain := range genesis.Chains {
    51  		uChain := chain.Unsigned.(*txs.CreateChainTx)
    52  		chainID := chain.ID()
    53  		endpoint := path.Join(constants.ChainAliasPrefix, chainID.String())
    54  		switch uChain.VMID {
    55  		case constants.AVMID:
    56  			apiAliases[endpoint] = []string{
    57  				"X",
    58  				"avm",
    59  				path.Join(constants.ChainAliasPrefix, "X"),
    60  				path.Join(constants.ChainAliasPrefix, "avm"),
    61  			}
    62  			chainAliases[chainID] = XChainAliases
    63  		case constants.EVMID:
    64  			apiAliases[endpoint] = []string{
    65  				"C",
    66  				"evm",
    67  				path.Join(constants.ChainAliasPrefix, "C"),
    68  				path.Join(constants.ChainAliasPrefix, "evm"),
    69  			}
    70  			chainAliases[chainID] = CChainAliases
    71  		}
    72  	}
    73  	return apiAliases, chainAliases, nil
    74  }