github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/app/test_helpers.go (about)

     1  package app
     2  
     3  import (
     4  	"github.com/spf13/viper"
     5  
     6  	"github.com/fibonacci-chain/fbc/libs/cosmos-sdk/codec"
     7  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     8  	abci "github.com/fibonacci-chain/fbc/libs/tendermint/abci/types"
     9  	"github.com/fibonacci-chain/fbc/libs/tendermint/libs/log"
    10  	"github.com/fibonacci-chain/fbc/libs/tendermint/types"
    11  	dbm "github.com/fibonacci-chain/fbc/libs/tm-db"
    12  )
    13  
    14  type Option func(option *SetupOption)
    15  
    16  type SetupOption struct {
    17  	chainId string
    18  }
    19  
    20  func WithChainId(chainId string) Option {
    21  	return func(option *SetupOption) {
    22  		option.chainId = chainId
    23  	}
    24  }
    25  
    26  // Setup initializes a new FBChainApp. A Nop logger is set in FBChainApp.
    27  func Setup(isCheckTx bool, options ...Option) *FBChainApp {
    28  	viper.Set(sdk.FlagDBBackend, string(dbm.MemDBBackend))
    29  	types.DBBackend = string(dbm.MemDBBackend)
    30  	db := dbm.NewMemDB()
    31  	app := NewFBChainApp(log.NewNopLogger(), db, nil, true, map[int64]bool{}, 0)
    32  
    33  	if !isCheckTx {
    34  		setupOption := &SetupOption{chainId: ""}
    35  		for _, opt := range options {
    36  			opt(setupOption)
    37  		}
    38  		// init chain must be called to stop deliverState from being nil
    39  		genesisState := NewDefaultGenesisState()
    40  		stateBytes, err := codec.MarshalJSONIndent(app.Codec(), genesisState)
    41  		if err != nil {
    42  			panic(err)
    43  		}
    44  
    45  		// Initialize the chain
    46  		app.InitChain(
    47  			abci.RequestInitChain{
    48  				Validators:    []abci.ValidatorUpdate{},
    49  				AppStateBytes: stateBytes,
    50  				ChainId:       setupOption.chainId,
    51  			},
    52  		)
    53  	}
    54  
    55  	return app
    56  }