github.com/ava-labs/avalanchego@v1.11.11/vms/proposervm/state/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 state
     5  
     6  import (
     7  	"github.com/prometheus/client_golang/prometheus"
     8  
     9  	"github.com/ava-labs/avalanchego/database/prefixdb"
    10  	"github.com/ava-labs/avalanchego/database/versiondb"
    11  )
    12  
    13  var (
    14  	chainStatePrefix  = []byte("chain")
    15  	blockStatePrefix  = []byte("block")
    16  	heightIndexPrefix = []byte("height")
    17  )
    18  
    19  type State interface {
    20  	ChainState
    21  	BlockState
    22  	HeightIndex
    23  }
    24  
    25  type state struct {
    26  	ChainState
    27  	BlockState
    28  	HeightIndex
    29  }
    30  
    31  func New(db *versiondb.Database) State {
    32  	chainDB := prefixdb.New(chainStatePrefix, db)
    33  	blockDB := prefixdb.New(blockStatePrefix, db)
    34  	heightDB := prefixdb.New(heightIndexPrefix, db)
    35  
    36  	return &state{
    37  		ChainState:  NewChainState(chainDB),
    38  		BlockState:  NewBlockState(blockDB),
    39  		HeightIndex: NewHeightIndex(heightDB, db),
    40  	}
    41  }
    42  
    43  func NewMetered(db *versiondb.Database, namespace string, metrics prometheus.Registerer) (State, error) {
    44  	chainDB := prefixdb.New(chainStatePrefix, db)
    45  	blockDB := prefixdb.New(blockStatePrefix, db)
    46  	heightDB := prefixdb.New(heightIndexPrefix, db)
    47  
    48  	blockState, err := NewMeteredBlockState(blockDB, namespace, metrics)
    49  	if err != nil {
    50  		return nil, err
    51  	}
    52  
    53  	return &state{
    54  		ChainState:  NewChainState(chainDB),
    55  		BlockState:  blockState,
    56  		HeightIndex: NewHeightIndex(heightDB, db),
    57  	}, nil
    58  }