github.com/ava-labs/avalanchego@v1.11.11/vms/platformvm/state/statetest/state.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package statetest
     5  
     6  import (
     7  	"testing"
     8  	"time"
     9  
    10  	"github.com/prometheus/client_golang/prometheus"
    11  	"github.com/stretchr/testify/require"
    12  
    13  	"github.com/ava-labs/avalanchego/database"
    14  	"github.com/ava-labs/avalanchego/database/memdb"
    15  	"github.com/ava-labs/avalanchego/ids"
    16  	"github.com/ava-labs/avalanchego/snow"
    17  	"github.com/ava-labs/avalanchego/snow/validators"
    18  	"github.com/ava-labs/avalanchego/upgrade"
    19  	"github.com/ava-labs/avalanchego/upgrade/upgradetest"
    20  	"github.com/ava-labs/avalanchego/utils/constants"
    21  	"github.com/ava-labs/avalanchego/utils/logging"
    22  	"github.com/ava-labs/avalanchego/utils/units"
    23  	"github.com/ava-labs/avalanchego/vms/platformvm/config"
    24  	"github.com/ava-labs/avalanchego/vms/platformvm/genesis/genesistest"
    25  	"github.com/ava-labs/avalanchego/vms/platformvm/metrics"
    26  	"github.com/ava-labs/avalanchego/vms/platformvm/reward"
    27  	"github.com/ava-labs/avalanchego/vms/platformvm/state"
    28  )
    29  
    30  var DefaultNodeID = ids.GenerateTestNodeID()
    31  
    32  type Config struct {
    33  	DB              database.Database
    34  	Genesis         []byte
    35  	Registerer      prometheus.Registerer
    36  	Validators      validators.Manager
    37  	Upgrades        upgrade.Config
    38  	ExecutionConfig config.ExecutionConfig
    39  	Context         *snow.Context
    40  	Metrics         metrics.Metrics
    41  	Rewards         reward.Calculator
    42  }
    43  
    44  func New(t testing.TB, c Config) state.State {
    45  	if c.DB == nil {
    46  		c.DB = memdb.New()
    47  	}
    48  	if len(c.Genesis) == 0 {
    49  		c.Genesis = genesistest.NewBytes(t, genesistest.Config{})
    50  	}
    51  	if c.Registerer == nil {
    52  		c.Registerer = prometheus.NewRegistry()
    53  	}
    54  	if c.Validators == nil {
    55  		c.Validators = validators.NewManager()
    56  	}
    57  	if c.Upgrades == (upgrade.Config{}) {
    58  		c.Upgrades = upgradetest.GetConfig(upgradetest.Latest)
    59  	}
    60  	if c.ExecutionConfig == (config.ExecutionConfig{}) {
    61  		c.ExecutionConfig = config.DefaultExecutionConfig
    62  	}
    63  	if c.Context == nil {
    64  		c.Context = &snow.Context{
    65  			NetworkID: constants.UnitTestID,
    66  			NodeID:    DefaultNodeID,
    67  			Log:       logging.NoLog{},
    68  		}
    69  	}
    70  	if c.Metrics == nil {
    71  		c.Metrics = metrics.Noop
    72  	}
    73  	if c.Rewards == nil {
    74  		c.Rewards = reward.NewCalculator(reward.Config{
    75  			MaxConsumptionRate: .12 * reward.PercentDenominator,
    76  			MinConsumptionRate: .1 * reward.PercentDenominator,
    77  			MintingPeriod:      365 * 24 * time.Hour,
    78  			SupplyCap:          720 * units.MegaAvax,
    79  		})
    80  	}
    81  
    82  	s, err := state.New(
    83  		c.DB,
    84  		c.Genesis,
    85  		c.Registerer,
    86  		c.Validators,
    87  		c.Upgrades,
    88  		&c.ExecutionConfig,
    89  		c.Context,
    90  		c.Metrics,
    91  		c.Rewards,
    92  	)
    93  	require.NoError(t, err)
    94  	return s
    95  }