func (app *BaseApp) MountStores(keys ...sdk.StoreKey) {
	for _, key := range keys {
		switch key.(type) {
		case *sdk.KVStoreKey:
			if !app.fauxMerkleMode {
				app.MountStore(key, sdk.StoreTypeIAVL)
			} else {
				app.MountStore(key, sdk.StoreTypeDB)
			}
		case *sdk.TransientStoreKey:
			app.MountStore(key, sdk.StoreTypeTransient)
		default:
			panic("Unrecognized store key type " + reflect.TypeOf(key).Name())
		}
	}
}
MountStores mounts all IAVL or DB stores to the provided keys in the BaseApp
multistore.
package baseapp
import (
	"errors"
	"fmt"
	"os"
	"reflect"
	"runtime/debug"
	"strings"
	"github.com/gogo/protobuf/proto"
	abci "github.com/tendermint/tendermint/abci/types"
	"github.com/tendermint/tendermint/crypto/tmhash"
	"github.com/tendermint/tendermint/libs/log"
	dbm "github.com/tendermint/tm-db"
	"github.com/Dipper-Labs/Dipper-Protocol/app/protocol"
	"github.com/Dipper-Labs/Dipper-Protocol/codec"
	"github.com/Dipper-Labs/Dipper-Protocol/store"
	sdk "github.com/Dipper-Labs/Dipper-Protocol/types"
	sdkerrors "github.com/Dipper-Labs/Dipper-Protocol/types/errors"
)
type runTxMode uint8
const (
	runTxModeCheck    runTxMode = iota  
	runTxModeReCheck                    
	runTxModeSimulate                   
	runTxModeDeliver                    
)
var (
	_ abci.Application = (*BaseApp)(nil)
	mainConsensusParamsKey = []byte("consensus_params")
)
type BaseApp struct {
	name   string  
	logger log.Logger
	db     dbm.DB                
	cms    sdk.CommitMultiStore  
	txDecoder sdk.TxDecoder  
	Engine    *protocol.ProtocolEngine
	baseKey *sdk.KVStoreKey  
	addrPeerFilter sdk.PeerFilter  
	idPeerFilter   sdk.PeerFilter  
	fauxMerkleMode bool            
	checkState   *state  
	deliverState *state  
	voteInfos []abci.VoteInfo  
	consensusParams *abci.ConsensusParams
	minGasPrices sdk.DecCoins
	sealed bool
	haltHeight uint64
	appVersion string
	PostEndBlocker sdk.PostEndBlockHandler
}
func NewBaseApp(name string, logger log.Logger, db dbm.DB, options ...func(*BaseApp)) *BaseApp {  
	app := &BaseApp{
		logger:         logger,
		name:           name,
		db:             db,
		cms:            store.NewCommitMultiStore(db),
		fauxMerkleMode: false,
	}
	for _, option := range options {
		option(app)
	}
	return app
}
func (app *BaseApp) WithEngine(engine *protocol.ProtocolEngine) *BaseApp {
	app.Engine = engine
	return app
}
func (app *BaseApp) Name() string {
	return app.name
}
func (app *BaseApp) AppVersion() string {
	return app.appVersion
}
func (app *BaseApp) Logger() log.Logger {
	return app.logger
}