diff --git a/internal/blockchain/v0/reactor_test.go b/internal/blockchain/v0/reactor_test.go index f1b73ed3d..4add435a3 100644 --- a/internal/blockchain/v0/reactor_test.go +++ b/internal/blockchain/v0/reactor_test.go @@ -103,11 +103,9 @@ func (rts *reactorTestSuite) addNode(t *testing.T, stateStore := sm.NewStore(stateDB) blockStore := store.NewBlockStore(blockDB) - state, err := stateStore.LoadFromDBOrGenesisDoc(genDoc) + state, err := sm.MakeGenesisState(genDoc) require.NoError(t, err) - - db := dbm.NewMemDB() - stateStore = sm.NewStore(db) + require.NoError(t, stateStore.Save(state)) blockExec := sm.NewBlockExecutor( stateStore, @@ -116,7 +114,6 @@ func (rts *reactorTestSuite) addNode(t *testing.T, mock.Mempool{}, sm.EmptyEvidencePool{}, ) - require.NoError(t, stateStore.Save(state)) for blockHeight := int64(1); blockHeight <= maxBlockHeight; blockHeight++ { lastCommit := types.NewCommit(blockHeight-1, 0, types.BlockID{}, nil) diff --git a/internal/blockchain/v2/reactor_test.go b/internal/blockchain/v2/reactor_test.go index b034dab51..3e3755ef5 100644 --- a/internal/blockchain/v2/reactor_test.go +++ b/internal/blockchain/v2/reactor_test.go @@ -151,8 +151,8 @@ type testReactorParams struct { mockA bool } -func newTestReactor(p testReactorParams) *BlockchainReactor { - store, state, _ := newReactorStore(p.genDoc, p.privVals, p.startHeight) +func newTestReactor(t *testing.T, p testReactorParams) *BlockchainReactor { + store, state, _ := newReactorStore(t, p.genDoc, p.privVals, p.startHeight) reporter := behavior.NewMockReporter() var appl blockApplier @@ -164,15 +164,12 @@ func newTestReactor(p testReactorParams) *BlockchainReactor { cc := proxy.NewLocalClientCreator(app) proxyApp := proxy.NewAppConns(cc) err := proxyApp.Start() - if err != nil { - panic(fmt.Errorf("error start app: %w", err)) - } + require.NoError(t, err) db := dbm.NewMemDB() stateStore := sm.NewStore(db) appl = sm.NewBlockExecutor(stateStore, p.logger, proxyApp.Consensus(), mock.Mempool{}, sm.EmptyEvidencePool{}) - if err = stateStore.Save(state); err != nil { - panic(err) - } + err = stateStore.Save(state) + require.NoError(t, err) } r := newReactor(state, store, reporter, appl, true) @@ -400,7 +397,7 @@ func TestReactorHelperMode(t *testing.T) { for _, tt := range tests { tt := tt t.Run(tt.name, func(t *testing.T) { - reactor := newTestReactor(params) + reactor := newTestReactor(t, params) mockSwitch := &mockSwitchIo{switchedToConsensus: false} reactor.io = mockSwitch err := reactor.Start() @@ -457,7 +454,7 @@ func TestReactorSetSwitchNil(t *testing.T) { defer os.RemoveAll(config.RootDir) genDoc, privVals := factory.RandGenesisDoc(config, 1, false, 30) - reactor := newTestReactor(testReactorParams{ + reactor := newTestReactor(t, testReactorParams{ logger: log.TestingLogger(), genDoc: genDoc, privVals: privVals, @@ -487,15 +484,14 @@ type testApp struct { abci.BaseApplication } -// Why are we importing the entire blockExecutor dependency graph here -// when we have the facilities to func newReactorStore( + t *testing.T, genDoc *types.GenesisDoc, privVals []types.PrivValidator, maxBlockHeight int64) (*store.BlockStore, sm.State, *sm.BlockExecutor) { - if len(privVals) != 1 { - panic("only support one validator") - } + t.Helper() + + require.Len(t, privVals, 1) app := &testApp{} cc := proxy.NewLocalClientCreator(app) proxyApp := proxy.NewAppConns(cc) @@ -507,18 +503,13 @@ func newReactorStore( stateDB := dbm.NewMemDB() blockStore := store.NewBlockStore(dbm.NewMemDB()) stateStore := sm.NewStore(stateDB) - state, err := stateStore.LoadFromDBOrGenesisDoc(genDoc) - if err != nil { - panic(fmt.Errorf("error constructing state from genesis file: %w", err)) - } + state, err := sm.MakeGenesisState(genDoc) + require.NoError(t, err) - db := dbm.NewMemDB() - stateStore = sm.NewStore(db) blockExec := sm.NewBlockExecutor(stateStore, log.TestingLogger(), proxyApp.Consensus(), mock.Mempool{}, sm.EmptyEvidencePool{}) - if err = stateStore.Save(state); err != nil { - panic(err) - } + err = stateStore.Save(state) + require.NoError(t, err) // add blocks in for blockHeight := int64(1); blockHeight <= maxBlockHeight; blockHeight++ { @@ -533,9 +524,7 @@ func newReactorStore( lastBlockMeta.BlockID, time.Now(), ) - if err != nil { - panic(err) - } + require.NoError(t, err) lastCommit = types.NewCommit(vote.Height, vote.Round, lastBlockMeta.BlockID, []types.CommitSig{vote.CommitSig()}) } @@ -546,9 +535,7 @@ func newReactorStore( blockID := types.BlockID{Hash: thisBlock.Hash(), PartSetHeader: thisParts.Header()} state, _, err = blockExec.ApplyBlock(state, blockID, thisBlock) - if err != nil { - panic(fmt.Errorf("error apply block: %w", err)) - } + require.NoError(t, err) blockStore.SaveBlock(thisBlock, thisParts, lastCommit) } diff --git a/internal/consensus/byzantine_test.go b/internal/consensus/byzantine_test.go index 5f72527f3..2cabc2eb5 100644 --- a/internal/consensus/byzantine_test.go +++ b/internal/consensus/byzantine_test.go @@ -45,7 +45,9 @@ func TestByzantinePrevoteEquivocation(t *testing.T) { logger := consensusLogger().With("test", "byzantine", "validator", i) stateDB := dbm.NewMemDB() // each state needs its own db stateStore := sm.NewStore(stateDB) - state, _ := stateStore.LoadFromDBOrGenesisDoc(genDoc) + state, err := sm.MakeGenesisState(genDoc) + require.NoError(t, err) + require.NoError(t, stateStore.Save(state)) thisConfig := ResetConfig(fmt.Sprintf("%s_%d", testName, i)) defer os.RemoveAll(thisConfig.RootDir) diff --git a/internal/consensus/common_test.go b/internal/consensus/common_test.go index b2400669d..073b73596 100644 --- a/internal/consensus/common_test.go +++ b/internal/consensus/common_test.go @@ -384,8 +384,8 @@ func newStateWithConfig( pv types.PrivValidator, app abci.Application, ) *State { - blockDB := dbm.NewMemDB() - return newStateWithConfigAndBlockStore(thisConfig, state, pv, app, blockDB) + blockStore := store.NewBlockStore(dbm.NewMemDB()) + return newStateWithConfigAndBlockStore(thisConfig, state, pv, app, blockStore) } func newStateWithConfigAndBlockStore( @@ -393,11 +393,8 @@ func newStateWithConfigAndBlockStore( state sm.State, pv types.PrivValidator, app abci.Application, - blockDB dbm.DB, + blockStore *store.BlockStore, ) *State { - // Get BlockStore - blockStore := store.NewBlockStore(blockDB) - // one for mempool, one for consensus mtx := new(tmsync.RWMutex) proxyAppConnMem := abcicli.NewLocalClient(mtx, app) @@ -693,6 +690,7 @@ func consensusLogger() log.Logger { } func randConsensusState( + t *testing.T, config *cfg.Config, nValidators int, testName string, @@ -710,9 +708,9 @@ func randConsensusState( configRootDirs := make([]string, 0, nValidators) for i := 0; i < nValidators; i++ { - stateDB := dbm.NewMemDB() // each state needs its own db - stateStore := sm.NewStore(stateDB) - state, _ := stateStore.LoadFromDBOrGenesisDoc(genDoc) + blockStore := store.NewBlockStore(dbm.NewMemDB()) // each state needs its own db + state, err := sm.MakeGenesisState(genDoc) + require.NoError(t, err) thisConfig := ResetConfig(fmt.Sprintf("%s_%d", testName, i)) configRootDirs = append(configRootDirs, thisConfig.RootDir) @@ -731,7 +729,7 @@ func randConsensusState( vals := types.TM2PB.ValidatorUpdates(state.Validators) app.InitChain(abci.RequestInitChain{Validators: vals}) - css[i] = newStateWithConfigAndBlockStore(thisConfig, state, privVals[i], app, stateDB) + css[i] = newStateWithConfigAndBlockStore(thisConfig, state, privVals[i], app, blockStore) css[i].SetTimeoutTicker(tickerFunc()) css[i].SetLogger(logger.With("validator", i, "module", "consensus")) } @@ -762,9 +760,7 @@ func randConsensusNetWithPeers( var peer0Config *cfg.Config configRootDirs := make([]string, 0, nPeers) for i := 0; i < nPeers; i++ { - stateDB := dbm.NewMemDB() // each state needs its own db - stateStore := sm.NewStore(stateDB) - state, _ := stateStore.LoadFromDBOrGenesisDoc(genDoc) + state, _ := sm.MakeGenesisState(genDoc) thisConfig := ResetConfig(fmt.Sprintf("%s_%d", testName, i)) configRootDirs = append(configRootDirs, thisConfig.RootDir) ensureDir(filepath.Dir(thisConfig.Consensus.WalFile()), 0700) // dir for wal diff --git a/internal/consensus/invalid_test.go b/internal/consensus/invalid_test.go index 8307ed5cf..fa5bc2ead 100644 --- a/internal/consensus/invalid_test.go +++ b/internal/consensus/invalid_test.go @@ -18,7 +18,7 @@ func TestReactorInvalidPrecommit(t *testing.T) { config := configSetup(t) n := 4 - states, cleanup := randConsensusState(config, n, "consensus_reactor_test", newMockTickerFunc(true), newCounter) + states, cleanup := randConsensusState(t, config, n, "consensus_reactor_test", newMockTickerFunc(true), newCounter) t.Cleanup(cleanup) for i := 0; i < 4; i++ { diff --git a/internal/consensus/mempool_test.go b/internal/consensus/mempool_test.go index 763e87e50..5edec248a 100644 --- a/internal/consensus/mempool_test.go +++ b/internal/consensus/mempool_test.go @@ -17,6 +17,7 @@ import ( abci "github.com/tendermint/tendermint/abci/types" mempl "github.com/tendermint/tendermint/internal/mempool" sm "github.com/tendermint/tendermint/state" + "github.com/tendermint/tendermint/store" "github.com/tendermint/tendermint/types" ) @@ -123,9 +124,9 @@ func TestMempoolTxConcurrentWithCommit(t *testing.T) { config := configSetup(t) state, privVals := randGenesisState(config, 1, false, 10) - blockDB := dbm.NewMemDB() - stateStore := sm.NewStore(blockDB) - cs := newStateWithConfigAndBlockStore(config, state, privVals[0], NewCounterApplication(), blockDB) + stateStore := sm.NewStore(dbm.NewMemDB()) + blockStore := store.NewBlockStore(dbm.NewMemDB()) + cs := newStateWithConfigAndBlockStore(config, state, privVals[0], NewCounterApplication(), blockStore) err := stateStore.Save(state) require.NoError(t, err) newBlockHeaderCh := subscribe(cs.eventBus, types.EventQueryNewBlockHeader) @@ -150,9 +151,9 @@ func TestMempoolRmBadTx(t *testing.T) { state, privVals := randGenesisState(config, 1, false, 10) app := NewCounterApplication() - blockDB := dbm.NewMemDB() - stateStore := sm.NewStore(blockDB) - cs := newStateWithConfigAndBlockStore(config, state, privVals[0], app, blockDB) + stateStore := sm.NewStore(dbm.NewMemDB()) + blockStore := store.NewBlockStore(dbm.NewMemDB()) + cs := newStateWithConfigAndBlockStore(config, state, privVals[0], app, blockStore) err := stateStore.Save(state) require.NoError(t, err) diff --git a/internal/consensus/reactor_test.go b/internal/consensus/reactor_test.go index 7617eb7b5..a83d6aefa 100644 --- a/internal/consensus/reactor_test.go +++ b/internal/consensus/reactor_test.go @@ -257,7 +257,7 @@ func TestReactorBasic(t *testing.T) { config := configSetup(t) n := 4 - states, cleanup := randConsensusState(config, n, "consensus_reactor_test", newMockTickerFunc(true), newCounter) + states, cleanup := randConsensusState(t, config, n, "consensus_reactor_test", newMockTickerFunc(true), newCounter) t.Cleanup(cleanup) rts := setup(t, n, states, 100) // buffer must be large enough to not deadlock @@ -296,7 +296,8 @@ func TestReactorWithEvidence(t *testing.T) { for i := 0; i < n; i++ { stateDB := dbm.NewMemDB() // each state needs its own db stateStore := sm.NewStore(stateDB) - state, _ := stateStore.LoadFromDBOrGenesisDoc(genDoc) + state, err := sm.MakeGenesisState(genDoc) + require.NoError(t, err) thisConfig := ResetConfig(fmt.Sprintf("%s_%d", testName, i)) defer os.RemoveAll(thisConfig.RootDir) @@ -341,7 +342,7 @@ func TestReactorWithEvidence(t *testing.T) { eventBus := types.NewEventBus() eventBus.SetLogger(log.TestingLogger().With("module", "events")) - err := eventBus.Start() + err = eventBus.Start() require.NoError(t, err) cs.SetEventBus(eventBus) @@ -381,6 +382,7 @@ func TestReactorCreatesBlockWhenEmptyBlocksFalse(t *testing.T) { n := 4 states, cleanup := randConsensusState( + t, config, n, "consensus_reactor_test", @@ -429,7 +431,7 @@ func TestReactorRecordsVotesAndBlockParts(t *testing.T) { config := configSetup(t) n := 4 - states, cleanup := randConsensusState(config, n, "consensus_reactor_test", newMockTickerFunc(true), newCounter) + states, cleanup := randConsensusState(t, config, n, "consensus_reactor_test", newMockTickerFunc(true), newCounter) t.Cleanup(cleanup) rts := setup(t, n, states, 100) // buffer must be large enough to not deadlock @@ -487,6 +489,7 @@ func TestReactorVotingPowerChange(t *testing.T) { n := 4 states, cleanup := randConsensusState( + t, config, n, "consensus_voting_power_changes_test", diff --git a/internal/consensus/replay_test.go b/internal/consensus/replay_test.go index e20fb5209..ca4ec7e98 100644 --- a/internal/consensus/replay_test.go +++ b/internal/consensus/replay_test.go @@ -33,6 +33,7 @@ import ( tmproto "github.com/tendermint/tendermint/proto/tendermint/types" "github.com/tendermint/tendermint/proxy" sm "github.com/tendermint/tendermint/state" + "github.com/tendermint/tendermint/store" "github.com/tendermint/tendermint/types" ) @@ -54,21 +55,23 @@ import ( func startNewStateAndWaitForBlock(t *testing.T, consensusReplayConfig *cfg.Config, lastBlockHeight int64, blockDB dbm.DB, stateStore sm.Store) { logger := log.TestingLogger() - state, _ := stateStore.LoadFromDBOrGenesisFile(consensusReplayConfig.GenesisFile()) + state, err := sm.MakeGenesisStateFromFile(consensusReplayConfig.GenesisFile()) + require.NoError(t, err) privValidator := loadPrivValidator(consensusReplayConfig) + blockStore := store.NewBlockStore(dbm.NewMemDB()) cs := newStateWithConfigAndBlockStore( consensusReplayConfig, state, privValidator, kvstore.NewApplication(), - blockDB, + blockStore, ) cs.SetLogger(logger) bytes, _ := ioutil.ReadFile(cs.config.WalFile()) t.Logf("====== WAL: \n\r%X\n", bytes) - err := cs.Start() + err = cs.Start() require.NoError(t, err) defer func() { if err := cs.Stop(); err != nil { @@ -147,6 +150,7 @@ LOOP: blockDB := dbm.NewMemDB() stateDB := dbm.NewMemDB() stateStore := sm.NewStore(stateDB) + blockStore := store.NewBlockStore(blockDB) state, err := sm.MakeGenesisStateFromFile(consensusReplayConfig.GenesisFile()) require.NoError(t, err) privValidator := loadPrivValidator(consensusReplayConfig) @@ -155,7 +159,7 @@ LOOP: state, privValidator, kvstore.NewApplication(), - blockDB, + blockStore, ) cs.SetLogger(logger) diff --git a/node/node.go b/node/node.go index 849204dba..a3795ea14 100644 --- a/node/node.go +++ b/node/node.go @@ -23,7 +23,6 @@ import ( "github.com/tendermint/tendermint/internal/p2p" "github.com/tendermint/tendermint/internal/p2p/pex" "github.com/tendermint/tendermint/internal/statesync" - tmjson "github.com/tendermint/tendermint/libs/json" "github.com/tendermint/tendermint/libs/log" tmnet "github.com/tendermint/tendermint/libs/net" tmpubsub "github.com/tendermint/tendermint/libs/pubsub" @@ -41,7 +40,6 @@ import ( "github.com/tendermint/tendermint/store" "github.com/tendermint/tendermint/types" tmtime "github.com/tendermint/tendermint/types/time" - dbm "github.com/tendermint/tm-db" ) // nodeImpl is the highest level interface to a full Tendermint node. @@ -139,10 +137,19 @@ func makeNode(config *cfg.Config, if err != nil { return nil, err } - stateStore := sm.NewStore(stateDB) - state, genDoc, err := loadStateFromDBOrGenesisDocProvider(stateDB, genesisDocProvider) + genDoc, err := genesisDocProvider() + if err != nil { + return nil, err + } + + err = genDoc.ValidateAndComplete() + if err != nil { + return nil, fmt.Errorf("error in genesis doc: %w", err) + } + + state, err := loadStateFromDBOrGenesisDocProvider(stateStore, genDoc) if err != nil { return nil, err } @@ -1100,71 +1107,34 @@ func defaultMetricsProvider(config *cfg.InstrumentationConfig) metricsProvider { //------------------------------------------------------------------------------ -var ( - genesisDocKey = []byte("genesisDoc") -) - // loadStateFromDBOrGenesisDocProvider attempts to load the state from the // database, or creates one using the given genesisDocProvider. On success this also // returns the genesis doc loaded through the given provider. func loadStateFromDBOrGenesisDocProvider( - stateDB dbm.DB, - genesisDocProvider genesisDocProvider, -) (sm.State, *types.GenesisDoc, error) { - // Get genesis doc - genDoc, err := loadGenesisDoc(stateDB) - if err != nil { - genDoc, err = genesisDocProvider() - if err != nil { - return sm.State{}, nil, err - } + stateStore sm.Store, + genDoc *types.GenesisDoc, +) (sm.State, error) { - err = genDoc.ValidateAndComplete() - if err != nil { - return sm.State{}, nil, fmt.Errorf("error in genesis doc: %w", err) - } - // save genesis doc to prevent a certain class of user errors (e.g. when it - // was changed, accidentally or not). Also good for audit trail. - if err := saveGenesisDoc(stateDB, genDoc); err != nil { - return sm.State{}, nil, err - } - } - stateStore := sm.NewStore(stateDB) - state, err := stateStore.LoadFromDBOrGenesisDoc(genDoc) + // 1. Attempt to load state form the database + state, err := stateStore.Load() if err != nil { - return sm.State{}, nil, err + return sm.State{}, err } - return state, genDoc, nil -} -// panics if failed to unmarshal bytes -func loadGenesisDoc(db dbm.DB) (*types.GenesisDoc, error) { - b, err := db.Get(genesisDocKey) - if err != nil { - panic(err) - } - if len(b) == 0 { - return nil, errors.New("genesis doc not found") - } - var genDoc *types.GenesisDoc - err = tmjson.Unmarshal(b, &genDoc) - if err != nil { - panic(fmt.Sprintf("Failed to load genesis doc due to unmarshaling error: %v (bytes: %X)", err, b)) - } - return genDoc, nil -} + if state.IsEmpty() { + // 2. If it's not there, load it from the genesis doc + state, err = sm.MakeGenesisState(genDoc) + if err != nil { + return sm.State{}, err + } -// panics if failed to marshal the given genesis document -func saveGenesisDoc(db dbm.DB, genDoc *types.GenesisDoc) error { - b, err := tmjson.Marshal(genDoc) - if err != nil { - return fmt.Errorf("failed to save genesis doc due to marshaling error: %w", err) - } - if err := db.SetSync(genesisDocKey, b); err != nil { - return err + // 3. Save the new state to disk + if err := stateStore.Save(state); err != nil { + return sm.State{}, err + } } - return nil + return state, nil } func createAndStartPrivValidatorSocketClient( diff --git a/state/state_test.go b/state/state_test.go index 7c48c58d5..b3f667916 100644 --- a/state/state_test.go +++ b/state/state_test.go @@ -29,10 +29,14 @@ func setupTestCase(t *testing.T) (func(t *testing.T), dbm.DB, sm.State) { config := cfg.ResetTestRoot("state_") dbType := dbm.BackendType(config.DBBackend) stateDB, err := dbm.NewDB("state", dbType, config.DBDir()) + require.NoError(t, err) stateStore := sm.NewStore(stateDB) + state, err := stateStore.Load() require.NoError(t, err) - state, err := stateStore.LoadFromDBOrGenesisFile(config.GenesisFile()) - assert.NoError(t, err, "expected no error on LoadStateFromDBOrGenesisFile") + require.Empty(t, state) + state, err = sm.MakeGenesisStateFromFile(config.GenesisFile()) + assert.NoError(t, err) + assert.NotNil(t, state) err = stateStore.Save(state) require.NoError(t, err) diff --git a/state/store.go b/state/store.go index 15fccbbab..3b67632df 100644 --- a/state/store.go +++ b/state/store.go @@ -75,12 +75,6 @@ func init() { // It is used to retrieve current state and save and load ABCI responses, // validators and consensus parameters type Store interface { - // LoadFromDBOrGenesisFile loads the most recent state. - // If the chain is new it will use the genesis file from the provided genesis file path as the current state. - LoadFromDBOrGenesisFile(string) (State, error) - // LoadFromDBOrGenesisDoc loads the most recent state. - // If the chain is new it will use the genesis doc as the current state. - LoadFromDBOrGenesisDoc(*types.GenesisDoc) (State, error) // Load loads the current state of the blockchain Load() (State, error) // LoadValidators loads the validator set at a given height diff --git a/state/store_test.go b/state/store_test.go index 467ed34c7..5d32040b5 100644 --- a/state/store_test.go +++ b/state/store_test.go @@ -108,7 +108,7 @@ func BenchmarkLoadValidators(b *testing.B) { stateDB, err := dbm.NewDB("state", dbType, config.DBDir()) require.NoError(b, err) stateStore := sm.NewStore(stateDB) - state, err := stateStore.LoadFromDBOrGenesisFile(config.GenesisFile()) + state, err := sm.MakeGenesisStateFromFile(config.GenesisFile()) if err != nil { b.Fatal(err) } @@ -118,6 +118,8 @@ func BenchmarkLoadValidators(b *testing.B) { err = stateStore.Save(state) require.NoError(b, err) + b.ResetTimer() + for i := 10; i < 10000000000; i *= 10 { // 10, 100, 1000, ... i := i err = stateStore.Save(makeRandomStateFromValidatorSet(state.NextValidators, diff --git a/state/tx_filter_test.go b/state/tx_filter_test.go index 7936d94c7..d6236fcbf 100644 --- a/state/tx_filter_test.go +++ b/state/tx_filter_test.go @@ -1,14 +1,11 @@ package state_test import ( - "os" "testing" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" - dbm "github.com/tendermint/tm-db" - tmrand "github.com/tendermint/tendermint/libs/rand" sm "github.com/tendermint/tendermint/state" "github.com/tendermint/tendermint/types" @@ -31,10 +28,7 @@ func TestTxFilter(t *testing.T) { } for i, tc := range testCases { - stateDB, err := dbm.NewDB("state", "memdb", os.TempDir()) - require.NoError(t, err) - stateStore := sm.NewStore(stateDB) - state, err := stateStore.LoadFromDBOrGenesisDoc(genDoc) + state, err := sm.MakeGenesisState(genDoc) require.NoError(t, err) f := sm.TxPreCheck(state) diff --git a/store/store_test.go b/store/store_test.go index 1aea1e5a9..ecc35321b 100644 --- a/store/store_test.go +++ b/store/store_test.go @@ -58,12 +58,8 @@ func makeBlock(height int64, state sm.State, lastCommit *types.Commit) *types.Bl func makeStateAndBlockStore(logger log.Logger) (sm.State, *BlockStore, cleanupFunc) { config := cfg.ResetTestRoot("blockchain_reactor_test") - // blockDB := dbm.NewDebugDB("blockDB", dbm.NewMemDB()) - // stateDB := dbm.NewDebugDB("stateDB", dbm.NewMemDB()) blockDB := dbm.NewMemDB() - stateDB := dbm.NewMemDB() - stateStore := sm.NewStore(stateDB) - state, err := stateStore.LoadFromDBOrGenesisFile(config.GenesisFile()) + state, err := sm.MakeGenesisStateFromFile(config.GenesisFile()) if err != nil { panic(fmt.Errorf("error constructing state from genesis file: %w", err)) } @@ -309,8 +305,7 @@ func TestBlockStoreSaveLoadBlock(t *testing.T) { func TestLoadBaseMeta(t *testing.T) { config := cfg.ResetTestRoot("blockchain_reactor_test") defer os.RemoveAll(config.RootDir) - stateStore := sm.NewStore(dbm.NewMemDB()) - state, err := stateStore.LoadFromDBOrGenesisFile(config.GenesisFile()) + state, err := sm.MakeGenesisStateFromFile(config.GenesisFile()) require.NoError(t, err) bs := NewBlockStore(dbm.NewMemDB()) @@ -366,8 +361,7 @@ func TestLoadBlockPart(t *testing.T) { func TestPruneBlocks(t *testing.T) { config := cfg.ResetTestRoot("blockchain_reactor_test") defer os.RemoveAll(config.RootDir) - stateStore := sm.NewStore(dbm.NewMemDB()) - state, err := stateStore.LoadFromDBOrGenesisFile(config.GenesisFile()) + state, err := sm.MakeGenesisStateFromFile(config.GenesisFile()) require.NoError(t, err) db := dbm.NewMemDB() bs := NewBlockStore(db)