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  }