Skip to content

Commit

Permalink
feat: add filtering function in StargateMsg of wasm
Browse files Browse the repository at this point in the history
Signed-off-by: zemyblue <zemyblue@gmail.com>
  • Loading branch information
zemyblue committed May 3, 2024
1 parent 78f9d87 commit 87017b8
Show file tree
Hide file tree
Showing 3 changed files with 641 additions and 0 deletions.
3 changes: 3 additions & 0 deletions app/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,9 @@ func NewLinkApp(
panic("error while reading wasm config: " + err.Error())
}

// change wasm's StargateMsgEncoder to filtered encoder
wasmOpts = append(wasmOpts, wasmkeeper.WithMessageEncoders(filteredStargateMsgEncoders(appCodec)))

// The last arguments can contain custom message handlers, and custom query handlers,
// if we want to allow any custom callbacks
availableCapabilities := "iterator,staking,stargate,cosmwasm_1_1"
Expand Down
35 changes: 35 additions & 0 deletions app/wasm_filter.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package app

import (
"strings"

"github.com/Finschia/finschia-sdk/codec"
codectypes "github.com/Finschia/finschia-sdk/codec/types"
sdk "github.com/Finschia/finschia-sdk/types"
sdkerrors "github.com/Finschia/finschia-sdk/types/errors"
wasmkeeper "github.com/Finschia/wasmd/x/wasm/keeper"
wasmtypes "github.com/Finschia/wasmd/x/wasm/types"
wasmvmtypes "github.com/Finschia/wasmvm/types"
)

// deniedModulesInStargateMsg is deny list in StargateMsg of wasm
var deniedModulesInStargateMsg = []string{"/lbm.fswap.v1", "/lbm.fbridge.v1"}

func filteredStargateMsgEncoders(cdc codec.Codec) *wasmkeeper.MessageEncoders {
return &wasmkeeper.MessageEncoders{
Stargate: wasmFilteredEncodeStargateMsg(cdc),
}
}

func wasmFilteredEncodeStargateMsg(unpakcer codectypes.AnyUnpacker) wasmkeeper.StargateEncoder {
stargateMsgEncoder := wasmkeeper.EncodeStargateMsg(unpakcer)
return func(sender sdk.AccAddress, msg *wasmvmtypes.StargateMsg) ([]sdk.Msg, error) {
for _, moduleName := range deniedModulesInStargateMsg {
if strings.HasPrefix(msg.TypeURL, moduleName) {
return nil, sdkerrors.Wrap(wasmtypes.ErrUnsupportedForContract, moduleName+" not supported by Stargate")
}
}

return stargateMsgEncoder(sender, msg)
}
}
Loading

0 comments on commit 87017b8

Please sign in to comment.