github.com/KiraCore/sekai@v0.3.43/app/posthandler/exec.go (about) 1 package posthandler 2 3 import ( 4 kiratypes "github.com/KiraCore/sekai/types" 5 feeprocessingkeeper "github.com/KiraCore/sekai/x/feeprocessing/keeper" 6 customgovkeeper "github.com/KiraCore/sekai/x/gov/keeper" 7 sdk "github.com/cosmos/cosmos-sdk/types" 8 sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" 9 ) 10 11 // ExecutionDecorator stores execution status 12 type ExecutionDecorator struct { 13 customGovKeeper customgovkeeper.Keeper 14 feeprocessingKeeper feeprocessingkeeper.Keeper 15 } 16 17 func NewExecutionDecorator( 18 customGovKeeper customgovkeeper.Keeper, 19 feeprocessingKeeper feeprocessingkeeper.Keeper, 20 ) sdk.PostDecorator { 21 return &ExecutionDecorator{ 22 customGovKeeper: customGovKeeper, 23 feeprocessingKeeper: feeprocessingKeeper, 24 } 25 } 26 27 func (d ExecutionDecorator) PostHandle(ctx sdk.Context, tx sdk.Tx, simulate, success bool, next sdk.PostHandler) (sdk.Context, error) { 28 feeTx, ok := tx.(sdk.FeeTx) 29 if !ok { 30 return ctx, sdkerrors.Wrap(sdkerrors.ErrTxDecode, "Tx must be a FeeTx") 31 } 32 33 // execution fee should be prepaid 34 for _, msg := range feeTx.GetMsgs() { 35 fee := d.customGovKeeper.GetExecutionFee(ctx, kiratypes.MsgType(msg)) 36 if fee == nil { 37 return next(ctx, tx, simulate, success) 38 } 39 40 d.feeprocessingKeeper.SetExecutionStatusSuccess(ctx, msg) 41 } 42 43 return next(ctx, tx, simulate, success) 44 }