Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: yihuang <huang@crypto.com> Co-authored-by: mmsqe <mavis@crypto.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: dependabot[bot] <dependabot[bot]@users.noreply.github.com> Co-authored-by: Alex | Interchain Labs <alex@interchainlabs.io> Co-authored-by: Tyler <48813565+technicallyty@users.noreply.github.com> Co-authored-by: FT <140458077+zeevick10@users.noreply.github.com> Co-authored-by: VolodymyrBg <aqdrgg19@gmail.com> Co-authored-by: GarmashAlex <garmasholeksii@gmail.com> Co-authored-by: kilavvy <140459108+kilavvy@users.noreply.github.com> Co-authored-by: Maxim Evtush <154841002+maximevtush@users.noreply.github.com> Co-authored-by: fuder.eth <139509124+vtjl10@users.noreply.github.com> Co-authored-by: leopardracer <136604165+leopardracer@users.noreply.github.com> Co-authored-by: MozirDmitriy <dmitriymozir@gmail.com> Co-authored-by: Avory <avorycorelli@gmail.com> Co-authored-by: mmsqe <tqd0800210105@gmail.com> Co-authored-by: julienrbrt <julien@rbrt.fr> Co-authored-by: Aaron <aaronc@users.noreply.github.com> Co-authored-by: Vlad J <vladjdk@gmail.com> Co-authored-by: Thomas Nguy <thomas.nguy@crypto.com>
86 lines
3.2 KiB
Go
86 lines
3.2 KiB
Go
package baseapp
|
|
|
|
import (
|
|
cmtproto "github.com/cometbft/cometbft/proto/tendermint/types"
|
|
|
|
errorsmod "cosmossdk.io/errors"
|
|
|
|
sdk "github.com/cosmos/cosmos-sdk/types"
|
|
sdkerrors "github.com/cosmos/cosmos-sdk/types/errors"
|
|
)
|
|
|
|
// SimCheck defines a CheckTx helper function that used in tests and simulations.
|
|
func (app *BaseApp) SimCheck(txEncoder sdk.TxEncoder, tx sdk.Tx) (sdk.GasInfo, *sdk.Result, error) {
|
|
// runTx expects tx bytes as argument, so we encode the tx argument into
|
|
// bytes. Note that runTx will actually decode those bytes again. But since
|
|
// this helper is only used in tests/simulation, it's fine.
|
|
bz, err := txEncoder(tx)
|
|
if err != nil {
|
|
return sdk.GasInfo{}, nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "%s", err)
|
|
}
|
|
|
|
gasInfo, result, _, err := app.RunTx(execModeCheck, bz, tx, -1, nil, nil)
|
|
return gasInfo, result, err
|
|
}
|
|
|
|
// Simulate executes a tx in simulate mode to get result and gas info.
|
|
func (app *BaseApp) Simulate(txBytes []byte) (sdk.GasInfo, *sdk.Result, error) {
|
|
gasInfo, result, _, err := app.RunTx(execModeSimulate, txBytes, nil, -1, nil, nil)
|
|
return gasInfo, result, err
|
|
}
|
|
|
|
func (app *BaseApp) SimDeliver(txEncoder sdk.TxEncoder, tx sdk.Tx) (sdk.GasInfo, *sdk.Result, error) {
|
|
// See comment for Check().
|
|
bz, err := txEncoder(tx)
|
|
if err != nil {
|
|
return sdk.GasInfo{}, nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "%s", err)
|
|
}
|
|
|
|
gasInfo, result, _, err := app.RunTx(execModeFinalize, bz, tx, -1, nil, nil)
|
|
return gasInfo, result, err
|
|
}
|
|
|
|
func (app *BaseApp) SimTxFinalizeBlock(txEncoder sdk.TxEncoder, tx sdk.Tx) (sdk.GasInfo, *sdk.Result, error) {
|
|
// See comment for Check().
|
|
bz, err := txEncoder(tx)
|
|
if err != nil {
|
|
return sdk.GasInfo{}, nil, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "%s", err)
|
|
}
|
|
|
|
gasInfo, result, _, err := app.RunTx(execModeFinalize, bz, tx, -1, nil, nil)
|
|
return gasInfo, result, err
|
|
}
|
|
|
|
// SimWriteState is an entrypoint for simulations only. They are not executed during the normal ABCI finalize
|
|
// block step but later. Therefore, an extra call to the root multi-store (app.cms) is required to write the changes.
|
|
func (app *BaseApp) SimWriteState() {
|
|
app.stateManager.GetState(execModeFinalize).MultiStore.Write()
|
|
}
|
|
|
|
// NewContextLegacy returns a new sdk.Context with the provided header
|
|
func (app *BaseApp) NewContextLegacy(isCheckTx bool, header cmtproto.Header) sdk.Context {
|
|
if isCheckTx {
|
|
return sdk.NewContext(app.stateManager.GetState(execModeCheck).MultiStore, header, true, app.logger).
|
|
WithMinGasPrices(app.gasConfig.MinGasPrices)
|
|
}
|
|
|
|
return sdk.NewContext(app.stateManager.GetState(execModeFinalize).MultiStore, header, false, app.logger)
|
|
}
|
|
|
|
// NewContext returns a new sdk.Context with a empty header
|
|
func (app *BaseApp) NewContext(isCheckTx bool) sdk.Context {
|
|
return app.NewContextLegacy(isCheckTx, cmtproto.Header{})
|
|
}
|
|
|
|
func (app *BaseApp) NewUncachedContext(isCheckTx bool, header cmtproto.Header) sdk.Context {
|
|
return sdk.NewContext(app.cms, header, isCheckTx, app.logger)
|
|
}
|
|
|
|
func (app *BaseApp) GetContextForFinalizeBlock(txBytes []byte) sdk.Context {
|
|
return app.getContextForTx(execModeFinalize, txBytes, -1)
|
|
}
|
|
|
|
func (app *BaseApp) GetContextForCheckTx(txBytes []byte) sdk.Context {
|
|
return app.getContextForTx(execModeCheck, txBytes, -1)
|
|
}
|