248 lines
6.8 KiB
Go
248 lines
6.8 KiB
Go
package baseapp
|
|
|
|
import (
|
|
"fmt"
|
|
"io"
|
|
|
|
dbm "github.com/tendermint/tm-db"
|
|
|
|
"github.com/cosmos/cosmos-sdk/codec/types"
|
|
"github.com/cosmos/cosmos-sdk/snapshots"
|
|
"github.com/cosmos/cosmos-sdk/store"
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
"github.com/cosmos/cosmos-sdk/types/tx"
|
|
)
|
|
|
|
// File for storing in-package BaseApp optional functions,
|
|
// for options that need access to non-exported fields of the BaseApp
|
|
|
|
// SetPruning sets a pruning option on the multistore associated with the app
|
|
func SetPruning(opts sdk.PruningOptions) func(*BaseApp) {
|
|
return func(bapp *BaseApp) { bapp.cms.SetPruning(opts) }
|
|
}
|
|
|
|
// SetMinGasPrices returns an option that sets the minimum gas prices on the app.
|
|
func SetMinGasPrices(gasPricesStr string) func(*BaseApp) {
|
|
gasPrices, err := sdk.ParseDecCoins(gasPricesStr)
|
|
if err != nil {
|
|
panic(fmt.Sprintf("invalid minimum gas prices: %v", err))
|
|
}
|
|
|
|
return func(bapp *BaseApp) { bapp.setMinGasPrices(gasPrices) }
|
|
}
|
|
|
|
// SetHaltHeight returns a BaseApp option function that sets the halt block height.
|
|
func SetHaltHeight(blockHeight uint64) func(*BaseApp) {
|
|
return func(bapp *BaseApp) { bapp.setHaltHeight(blockHeight) }
|
|
}
|
|
|
|
// SetHaltTime returns a BaseApp option function that sets the halt block time.
|
|
func SetHaltTime(haltTime uint64) func(*BaseApp) {
|
|
return func(bapp *BaseApp) { bapp.setHaltTime(haltTime) }
|
|
}
|
|
|
|
// SetMinRetainBlocks returns a BaseApp option function that sets the minimum
|
|
// block retention height value when determining which heights to prune during
|
|
// ABCI Commit.
|
|
func SetMinRetainBlocks(minRetainBlocks uint64) func(*BaseApp) {
|
|
return func(bapp *BaseApp) { bapp.setMinRetainBlocks(minRetainBlocks) }
|
|
}
|
|
|
|
// SetTrace will turn on or off trace flag
|
|
func SetTrace(trace bool) func(*BaseApp) {
|
|
return func(app *BaseApp) { app.setTrace(trace) }
|
|
}
|
|
|
|
// SetIndexEvents provides a BaseApp option function that sets the events to index.
|
|
func SetIndexEvents(ie []string) func(*BaseApp) {
|
|
return func(app *BaseApp) { app.setIndexEvents(ie) }
|
|
}
|
|
|
|
// SetIAVLCacheSize provides a BaseApp option function that sets the size of IAVL cache.
|
|
func SetIAVLCacheSize(size int) func(*BaseApp) {
|
|
return func(bapp *BaseApp) { bapp.cms.SetIAVLCacheSize(size) }
|
|
}
|
|
|
|
// SetInterBlockCache provides a BaseApp option function that sets the
|
|
// inter-block cache.
|
|
func SetInterBlockCache(cache sdk.MultiStorePersistentCache) func(*BaseApp) {
|
|
return func(app *BaseApp) { app.setInterBlockCache(cache) }
|
|
}
|
|
|
|
// SetSnapshotInterval sets the snapshot interval.
|
|
func SetSnapshotInterval(interval uint64) func(*BaseApp) {
|
|
return func(app *BaseApp) { app.SetSnapshotInterval(interval) }
|
|
}
|
|
|
|
// SetSnapshotKeepRecent sets the recent snapshots to keep.
|
|
func SetSnapshotKeepRecent(keepRecent uint32) func(*BaseApp) {
|
|
return func(app *BaseApp) { app.SetSnapshotKeepRecent(keepRecent) }
|
|
}
|
|
|
|
// SetSnapshotStore sets the snapshot store.
|
|
func SetSnapshotStore(snapshotStore *snapshots.Store) func(*BaseApp) {
|
|
return func(app *BaseApp) { app.SetSnapshotStore(snapshotStore) }
|
|
}
|
|
|
|
func (app *BaseApp) SetName(name string) {
|
|
if app.sealed {
|
|
panic("SetName() on sealed BaseApp")
|
|
}
|
|
|
|
app.name = name
|
|
}
|
|
|
|
// SetParamStore sets a parameter store on the BaseApp.
|
|
func (app *BaseApp) SetParamStore(ps ParamStore) {
|
|
if app.sealed {
|
|
panic("SetParamStore() on sealed BaseApp")
|
|
}
|
|
|
|
app.paramStore = ps
|
|
}
|
|
|
|
// SetVersion sets the application's version string.
|
|
func (app *BaseApp) SetVersion(v string) {
|
|
if app.sealed {
|
|
panic("SetVersion() on sealed BaseApp")
|
|
}
|
|
app.version = v
|
|
}
|
|
|
|
// SetProtocolVersion sets the application's protocol version
|
|
func (app *BaseApp) SetProtocolVersion(v uint64) {
|
|
app.appVersion = v
|
|
}
|
|
|
|
func (app *BaseApp) SetDB(db dbm.DB) {
|
|
if app.sealed {
|
|
panic("SetDB() on sealed BaseApp")
|
|
}
|
|
|
|
app.db = db
|
|
}
|
|
|
|
func (app *BaseApp) SetCMS(cms store.CommitMultiStore) {
|
|
if app.sealed {
|
|
panic("SetEndBlocker() on sealed BaseApp")
|
|
}
|
|
|
|
app.cms = cms
|
|
}
|
|
|
|
func (app *BaseApp) SetInitChainer(initChainer sdk.InitChainer) {
|
|
if app.sealed {
|
|
panic("SetInitChainer() on sealed BaseApp")
|
|
}
|
|
|
|
app.initChainer = initChainer
|
|
}
|
|
|
|
func (app *BaseApp) SetBeginBlocker(beginBlocker sdk.BeginBlocker) {
|
|
if app.sealed {
|
|
panic("SetBeginBlocker() on sealed BaseApp")
|
|
}
|
|
|
|
app.beginBlocker = beginBlocker
|
|
}
|
|
|
|
func (app *BaseApp) SetEndBlocker(endBlocker sdk.EndBlocker) {
|
|
if app.sealed {
|
|
panic("SetEndBlocker() on sealed BaseApp")
|
|
}
|
|
|
|
app.endBlocker = endBlocker
|
|
}
|
|
|
|
func (app *BaseApp) SetTxHandler(txHandler tx.Handler) {
|
|
if app.sealed {
|
|
panic("SetTxHandler() on sealed BaseApp")
|
|
}
|
|
|
|
app.txHandler = txHandler
|
|
}
|
|
|
|
func (app *BaseApp) SetAddrPeerFilter(pf sdk.PeerFilter) {
|
|
if app.sealed {
|
|
panic("SetAddrPeerFilter() on sealed BaseApp")
|
|
}
|
|
|
|
app.addrPeerFilter = pf
|
|
}
|
|
|
|
func (app *BaseApp) SetIDPeerFilter(pf sdk.PeerFilter) {
|
|
if app.sealed {
|
|
panic("SetIDPeerFilter() on sealed BaseApp")
|
|
}
|
|
|
|
app.idPeerFilter = pf
|
|
}
|
|
|
|
func (app *BaseApp) SetFauxMerkleMode() {
|
|
if app.sealed {
|
|
panic("SetFauxMerkleMode() on sealed BaseApp")
|
|
}
|
|
|
|
app.fauxMerkleMode = true
|
|
}
|
|
|
|
// SetCommitMultiStoreTracer sets the store tracer on the BaseApp's underlying
|
|
// CommitMultiStore.
|
|
func (app *BaseApp) SetCommitMultiStoreTracer(w io.Writer) {
|
|
app.cms.SetTracer(w)
|
|
}
|
|
|
|
// SetStoreLoader allows us to customize the rootMultiStore initialization.
|
|
func (app *BaseApp) SetStoreLoader(loader StoreLoader) {
|
|
if app.sealed {
|
|
panic("SetStoreLoader() on sealed BaseApp")
|
|
}
|
|
|
|
app.storeLoader = loader
|
|
}
|
|
|
|
// SetSnapshotStore sets the snapshot store.
|
|
func (app *BaseApp) SetSnapshotStore(snapshotStore *snapshots.Store) {
|
|
if app.sealed {
|
|
panic("SetSnapshotStore() on sealed BaseApp")
|
|
}
|
|
if snapshotStore == nil {
|
|
app.snapshotManager = nil
|
|
return
|
|
}
|
|
app.snapshotManager = snapshots.NewManager(snapshotStore, app.cms)
|
|
}
|
|
|
|
// SetSnapshotInterval sets the snapshot interval.
|
|
func (app *BaseApp) SetSnapshotInterval(snapshotInterval uint64) {
|
|
if app.sealed {
|
|
panic("SetSnapshotInterval() on sealed BaseApp")
|
|
}
|
|
app.snapshotInterval = snapshotInterval
|
|
}
|
|
|
|
// SetSnapshotKeepRecent sets the number of recent snapshots to keep.
|
|
func (app *BaseApp) SetSnapshotKeepRecent(snapshotKeepRecent uint32) {
|
|
if app.sealed {
|
|
panic("SetSnapshotKeepRecent() on sealed BaseApp")
|
|
}
|
|
app.snapshotKeepRecent = snapshotKeepRecent
|
|
}
|
|
|
|
// SetInterfaceRegistry sets the InterfaceRegistry.
|
|
func (app *BaseApp) SetInterfaceRegistry(registry types.InterfaceRegistry) {
|
|
app.interfaceRegistry = registry
|
|
app.grpcQueryRouter.SetInterfaceRegistry(registry)
|
|
}
|
|
|
|
// SetStreamingService is used to set a streaming service into the BaseApp hooks and load the listeners into the multistore
|
|
func (app *BaseApp) SetStreamingService(s StreamingService) {
|
|
// add the listeners for each StoreKey
|
|
for key, lis := range s.Listeners() {
|
|
app.cms.AddListeners(key, lis)
|
|
}
|
|
// register the StreamingService within the BaseApp
|
|
// BaseApp will pass BeginBlock, DeliverTx, and EndBlock requests and responses to the streaming services to update their ABCI context
|
|
app.abciListeners = append(app.abciListeners, s)
|
|
}
|