github.com/ava-labs/subnet-evm@v0.6.4/tests/utils/tmpnet.go (about) 1 // Copyright (C) 2023, Ava Labs, Inc. All rights reserved. 2 // See the file LICENSE for licensing terms. 3 4 package utils 5 6 import ( 7 "encoding/json" 8 "os" 9 10 "github.com/ava-labs/avalanchego/config" 11 "github.com/ava-labs/avalanchego/ids" 12 "github.com/ava-labs/avalanchego/tests/fixture/tmpnet" 13 14 "github.com/ava-labs/subnet-evm/plugin/evm" 15 ) 16 17 var DefaultChainConfig = tmpnet.FlagsMap{ 18 "log-level": "debug", 19 "warp-api-enabled": true, 20 "local-txs-enabled": true, 21 } 22 23 func NewTmpnetNodes(count int) []*tmpnet.Node { 24 nodes := make([]*tmpnet.Node, count) 25 for i := range nodes { 26 node := tmpnet.NewNode("") 27 node.EnsureKeys() 28 nodes[i] = node 29 } 30 return nodes 31 } 32 33 func NewTmpnetNetwork(owner string, nodes []*tmpnet.Node, flags tmpnet.FlagsMap, subnets ...*tmpnet.Subnet) *tmpnet.Network { 34 defaultFlags := tmpnet.FlagsMap{} 35 defaultFlags.SetDefaults(flags) 36 defaultFlags.SetDefaults(tmpnet.FlagsMap{ 37 config.ProposerVMUseCurrentHeightKey: true, 38 }) 39 return &tmpnet.Network{ 40 Owner: owner, 41 DefaultFlags: defaultFlags, 42 Nodes: nodes, 43 Subnets: subnets, 44 } 45 } 46 47 // Create the configuration that will enable creation and access to a 48 // subnet created on a temporary network. 49 func NewTmpnetSubnet(name string, genesisPath string, chainConfig tmpnet.FlagsMap, nodes ...*tmpnet.Node) *tmpnet.Subnet { 50 if len(nodes) == 0 { 51 panic("a subnet must be validated by at least one node") 52 } 53 54 validatorIDs := make([]ids.NodeID, len(nodes)) 55 for i, node := range nodes { 56 validatorIDs[i] = node.NodeID 57 } 58 59 genesisBytes, err := os.ReadFile(genesisPath) 60 if err != nil { 61 panic(err) 62 } 63 64 chainConfigBytes, err := json.Marshal(chainConfig) 65 if err != nil { 66 panic(err) 67 } 68 69 return &tmpnet.Subnet{ 70 Name: name, 71 Chains: []*tmpnet.Chain{ 72 { 73 VMID: evm.ID, 74 Genesis: genesisBytes, 75 Config: string(chainConfigBytes), 76 PreFundedKey: tmpnet.HardhatKey, 77 }, 78 }, 79 ValidatorIDs: validatorIDs, 80 } 81 }