github.com/MetalBlockchain/metalgo@v1.11.9/utils/constants/network_ids.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package constants
     5  
     6  import (
     7  	"errors"
     8  	"fmt"
     9  	"strconv"
    10  	"strings"
    11  
    12  	"github.com/MetalBlockchain/metalgo/ids"
    13  	"github.com/MetalBlockchain/metalgo/utils/set"
    14  )
    15  
    16  // Const variables to be exported
    17  const (
    18  	MainnetID  uint32 = 1
    19  	TahoeID    uint32 = 5
    20  	UnitTestID uint32 = 10
    21  	LocalID    uint32 = 12345
    22  
    23  	MainnetName  = "mainnet"
    24  	TahoeName    = "tahoe"
    25  	UnitTestName = "testing"
    26  	LocalName    = "local"
    27  
    28  	MainnetHRP  = "metal"
    29  	TahoeHRP    = "tahoe"
    30  	UnitTestHRP = "testing"
    31  	LocalHRP    = "local"
    32  	FallbackHRP = "custom"
    33  )
    34  
    35  // Variables to be exported
    36  var (
    37  	PrimaryNetworkID = ids.Empty
    38  	PlatformChainID  = ids.Empty
    39  
    40  	NetworkIDToNetworkName = map[uint32]string{
    41  		MainnetID:  MainnetName,
    42  		TahoeID:    TahoeName,
    43  		UnitTestID: UnitTestName,
    44  		LocalID:    LocalName,
    45  	}
    46  	NetworkNameToNetworkID = map[string]uint32{
    47  		MainnetName:  MainnetID,
    48  		TahoeName:    TahoeID,
    49  		UnitTestName: UnitTestID,
    50  		LocalName:    LocalID,
    51  	}
    52  
    53  	NetworkIDToHRP = map[uint32]string{
    54  		MainnetID:  MainnetHRP,
    55  		TahoeID:    TahoeHRP,
    56  		UnitTestID: UnitTestHRP,
    57  		LocalID:    LocalHRP,
    58  	}
    59  	NetworkHRPToNetworkID = map[string]uint32{
    60  		MainnetHRP:  MainnetID,
    61  		TahoeHRP:    TahoeID,
    62  		UnitTestHRP: UnitTestID,
    63  		LocalHRP:    LocalID,
    64  	}
    65  	ProductionNetworkIDs = set.Of(MainnetID, TahoeID)
    66  
    67  	ValidNetworkPrefix = "network-"
    68  
    69  	ErrParseNetworkName = errors.New("failed to parse network name")
    70  )
    71  
    72  // GetHRP returns the Human-Readable-Part of bech32 addresses for a networkID
    73  func GetHRP(networkID uint32) string {
    74  	if hrp, ok := NetworkIDToHRP[networkID]; ok {
    75  		return hrp
    76  	}
    77  	return FallbackHRP
    78  }
    79  
    80  // NetworkName returns a human readable name for the network with
    81  // ID [networkID]
    82  func NetworkName(networkID uint32) string {
    83  	if name, exists := NetworkIDToNetworkName[networkID]; exists {
    84  		return name
    85  	}
    86  	return fmt.Sprintf("network-%d", networkID)
    87  }
    88  
    89  // NetworkID returns the ID of the network with name [networkName]
    90  func NetworkID(networkName string) (uint32, error) {
    91  	networkName = strings.ToLower(networkName)
    92  	if id, exists := NetworkNameToNetworkID[networkName]; exists {
    93  		return id, nil
    94  	}
    95  
    96  	idStr := networkName
    97  	if strings.HasPrefix(networkName, ValidNetworkPrefix) {
    98  		idStr = networkName[len(ValidNetworkPrefix):]
    99  	}
   100  	id, err := strconv.ParseUint(idStr, 10, 32)
   101  	if err != nil {
   102  		return 0, fmt.Errorf("%w: %q", ErrParseNetworkName, networkName)
   103  	}
   104  	return uint32(id), nil
   105  }