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 }