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 }