From a209a07a32d328b05679fb44ebdd5aea83cd5de3 Mon Sep 17 00:00:00 2001 From: codchen Date: Wed, 2 Nov 2022 10:48:34 +0800 Subject: [PATCH 1/2] Use dependencies from context in wasmbindings --- wasmbinding/message_plugin.go | 25 +++++++++---------------- wasmbinding/query_plugin.go | 28 ++++++++++++++-------------- 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/wasmbinding/message_plugin.go b/wasmbinding/message_plugin.go index 5ea56529e1..2a0adcd5d8 100644 --- a/wasmbinding/message_plugin.go +++ b/wasmbinding/message_plugin.go @@ -10,7 +10,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/accesscontrol" aclkeeper "github.com/cosmos/cosmos-sdk/x/accesscontrol/keeper" acltypes "github.com/cosmos/cosmos-sdk/x/accesscontrol/types" - "github.com/sei-protocol/sei-chain/utils" ) // forked from wasm @@ -120,27 +119,21 @@ func (decorator SDKMessageDependencyDecorator) DispatchMsg(ctx sdk.Context, cont if err != nil { return nil, nil, err } - // get the dependencies for the contract to validate against - // TODO: we need to carry wasmDependency in ctx instead of loading again here since here has no access to original msg payload - // which is required for populating id correctly. - wasmDependency, err := decorator.aclKeeper.GetWasmDependencyMapping(ctx, contractAddr, []byte{}, false) - // If no mapping exists, or mapping is disabled, this message would behave as blocking for all resources - if err == aclkeeper.ErrWasmDependencyMappingNotFound { + if ctx.TxMsgAccessOps() == nil { + // This would be the case if the current block is executed in synchronous mode, or if the query is + // sent by sudo calls. // no mapping, we can just continue return decorator.wrapped.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg) } - if err != nil { - return nil, nil, err - } - if !wasmDependency.Enabled { - // if not enabled, just move on - // TODO: confirm that this is ok, is there ever a case where we should still verify dependencies for a disabled dependency? IDTS + msgDependency, ok := ctx.TxMsgAccessOps()[ctx.MessageIndex()] + if !ok || msgDependency == nil || len(msgDependency) == 0 { + // There is no known code path that could lead to this case but still adding it here just in + // case we missed something. + // no dependency set for the message, just continue return decorator.wrapped.DispatchMsg(ctx, contractAddr, contractIBCPortID, msg) } // convert wasm dependency to a map of resource access and identifier we can look up in - lookupMap := BuildWasmDependencyLookupMap( - utils.Map(wasmDependency.AccessOps, func(op sdkacltypes.AccessOperationWithSelector) sdkacltypes.AccessOperation { return *op.Operation }), - ) + lookupMap := BuildWasmDependencyLookupMap(msgDependency) // wasm dependency enabled, we need to validate the message dependencies for _, msg := range sdkMsgs { accessOps := decorator.aclKeeper.GetMessageDependencies(ctx, msg) diff --git a/wasmbinding/query_plugin.go b/wasmbinding/query_plugin.go index c2f3d84f48..f81d0afb1e 100644 --- a/wasmbinding/query_plugin.go +++ b/wasmbinding/query_plugin.go @@ -10,7 +10,6 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" acl "github.com/cosmos/cosmos-sdk/x/accesscontrol" aclkeeper "github.com/cosmos/cosmos-sdk/x/accesscontrol/keeper" - "github.com/sei-protocol/sei-chain/utils" ) const ( @@ -51,24 +50,25 @@ type CustomQueryHandler struct { } func (queryHandler CustomQueryHandler) HandleQuery(ctx sdk.Context, caller sdk.AccAddress, request wasmvmtypes.QueryRequest) ([]byte, error) { - // TODO: we need to carry wasmDependency in ctx instead of loading again here since here has no access to original msg payload - // which is required for populating id correctly. - wasmDependency, err := queryHandler.aclKeeper.GetWasmDependencyMapping(ctx, caller, []byte{}, false) // If no mapping exists, or mapping is disabled, this message would behave as blocking for all resources needToCheckDependencies := true - if err == aclkeeper.ErrWasmDependencyMappingNotFound { + msgDependency := []accesscontrol.AccessOperation{} + if ctx.TxMsgAccessOps() == nil { + // This would be the case if the current block is executed in synchronous mode, or if the query is + // sent by sudo calls. // no mapping, we can just continue needToCheckDependencies = false + } else { + if dep, ok := ctx.TxMsgAccessOps()[ctx.MessageIndex()]; !ok || dep == nil || len(dep) == 0 { + // There is no known code path that could lead to this case but still adding it here just in + // case we missed something. + // no dependency set for the message, just continue + needToCheckDependencies = false + } else { + msgDependency = dep + } } - if err != nil { - return nil, err - } - if !wasmDependency.Enabled { - needToCheckDependencies = false - } - lookupMap := BuildWasmDependencyLookupMap( - utils.Map(wasmDependency.AccessOps, func(op accesscontrol.AccessOperationWithSelector) accesscontrol.AccessOperation { return *op.Operation }), - ) + lookupMap := BuildWasmDependencyLookupMap(msgDependency) if request.Bank != nil { // check for BANK resource type accessOp := accesscontrol.AccessOperation{ From d601d9d96042b4e4108e4331b8e28e8e9bd93523 Mon Sep 17 00:00:00 2001 From: codchen Date: Wed, 2 Nov 2022 11:13:54 +0800 Subject: [PATCH 2/2] tests --- wasmbinding/test/message_handler_test.go | 57 ++-- wasmbinding/test/query_test.go | 320 +++++++++-------------- 2 files changed, 143 insertions(+), 234 deletions(-) diff --git a/wasmbinding/test/message_handler_test.go b/wasmbinding/test/message_handler_test.go index d72bc219d9..bbf1d82c35 100644 --- a/wasmbinding/test/message_handler_test.go +++ b/wasmbinding/test/message_handler_test.go @@ -51,18 +51,14 @@ func TestMessageHandlerDependencyDecorator(t *testing.T) { }) // setup the wasm contract's dependency mapping - app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, sdkacltypes.WasmDependencyMapping{ - Enabled: true, - AccessOps: []sdkacltypes.AccessOperationWithSelector{ - { - Operation: &sdkacltypes.AccessOperation{ - AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_ANY, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]sdkacltypes.AccessOperation{ + 0: { + sdkacltypes.AccessOperation{ + AccessType: sdkacltypes.AccessType_WRITE, + ResourceType: sdkacltypes.ResourceType_ANY, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) @@ -87,18 +83,14 @@ func TestMessageHandlerDependencyDecorator(t *testing.T) { }, }, events) - app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, sdkacltypes.WasmDependencyMapping{ - Enabled: true, - AccessOps: []sdkacltypes.AccessOperationWithSelector{ - { - Operation: &sdkacltypes.AccessOperation{ - AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, - IdentifierTemplate: "otherIdentifier", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]sdkacltypes.AccessOperation{ + 0: { + sdkacltypes.AccessOperation{ + AccessType: sdkacltypes.AccessType_WRITE, + ResourceType: sdkacltypes.ResourceType_ANY, + IdentifierTemplate: "otherIdentifier", }, + *acltypes.CommitAccessOp(), }, }) @@ -115,22 +107,19 @@ func TestMessageHandlerDependencyDecorator(t *testing.T) { }, }, }) + // we expect an error now - require.Error(t, accesscontrol.ErrUnexpectedWasmDependency, err) + require.Equal(t, accesscontrol.ErrUnexpectedWasmDependency, err) // reenable wasm mapping that's correct - app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, sdkacltypes.WasmDependencyMapping{ - Enabled: true, - AccessOps: []sdkacltypes.AccessOperationWithSelector{ - { - Operation: &sdkacltypes.AccessOperation{ - AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]sdkacltypes.AccessOperation{ + 0: { + sdkacltypes.AccessOperation{ + AccessType: sdkacltypes.AccessType_WRITE, + ResourceType: sdkacltypes.ResourceType_ANY, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) // lets try with a message that wont decode properly diff --git a/wasmbinding/test/query_test.go b/wasmbinding/test/query_test.go index c51e77991e..d80eef5524 100644 --- a/wasmbinding/test/query_test.go +++ b/wasmbinding/test/query_test.go @@ -262,47 +262,37 @@ func TestQueryHandlerDependencyDecoratorBank(t *testing.T) { testContext := app.NewContext(false, types.Header{}) // setup the wasm contract's dependency mapping - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV_BANK, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_KV_BANK, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Bank: &wasmvmtypes.BankQuery{}, }) require.NoError(t, err) - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_WRITE, - ResourceType: accesscontrol.ResourceType_KV_DEX, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_WRITE, + ResourceType: accesscontrol.ResourceType_KV_DEX, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Bank: &wasmvmtypes.BankQuery{}, }) - require.Error(t, acl.ErrUnexpectedWasmDependency, err) + require.Equal(t, acl.ErrUnexpectedWasmDependency, err) } func TestQueryHandlerDependencyDecoratorIBC(t *testing.T) { @@ -313,47 +303,37 @@ func TestQueryHandlerDependencyDecoratorIBC(t *testing.T) { testContext := app.NewContext(false, types.Header{}) // setup the wasm contract's dependency mapping - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_ANY, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_ANY, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ IBC: &wasmvmtypes.IBCQuery{}, }) require.NoError(t, err) - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_WRITE, - ResourceType: accesscontrol.ResourceType_KV, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_WRITE, + ResourceType: accesscontrol.ResourceType_KV, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ IBC: &wasmvmtypes.IBCQuery{}, }) - require.Error(t, acl.ErrUnexpectedWasmDependency, err) + require.Equal(t, acl.ErrUnexpectedWasmDependency, err) } func TestQueryHandlerDependencyDecoratorStaking(t *testing.T) { @@ -364,47 +344,37 @@ func TestQueryHandlerDependencyDecoratorStaking(t *testing.T) { testContext := app.NewContext(false, types.Header{}) // setup the wasm contract's dependency mapping - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV_STAKING, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_KV_STAKING, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Staking: &wasmvmtypes.StakingQuery{}, }) require.NoError(t, err) - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_WRITE, - ResourceType: accesscontrol.ResourceType_KV_DEX, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_WRITE, + ResourceType: accesscontrol.ResourceType_KV_DEX, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Staking: &wasmvmtypes.StakingQuery{}, }) - require.Error(t, acl.ErrUnexpectedWasmDependency, err) + require.Equal(t, acl.ErrUnexpectedWasmDependency, err) } func TestQueryHandlerDependencyDecoratorStargate(t *testing.T) { @@ -415,47 +385,37 @@ func TestQueryHandlerDependencyDecoratorStargate(t *testing.T) { testContext := app.NewContext(false, types.Header{}) // setup the wasm contract's dependency mapping - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_ANY, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_ANY, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Stargate: &wasmvmtypes.StargateQuery{}, }) require.NoError(t, err) - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_WRITE, - ResourceType: accesscontrol.ResourceType_KV, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_WRITE, + ResourceType: accesscontrol.ResourceType_KV, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Stargate: &wasmvmtypes.StargateQuery{}, }) - require.Error(t, acl.ErrUnexpectedWasmDependency, err) + require.Equal(t, acl.ErrUnexpectedWasmDependency, err) } func TestQueryHandlerDependencyDecoratorWasm(t *testing.T) { @@ -466,47 +426,37 @@ func TestQueryHandlerDependencyDecoratorWasm(t *testing.T) { testContext := app.NewContext(false, types.Header{}) // setup the wasm contract's dependency mapping - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV_WASM, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_KV_WASM, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Wasm: &wasmvmtypes.WasmQuery{}, }) require.NoError(t, err) - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_WRITE, - ResourceType: accesscontrol.ResourceType_KV_DEX, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_WRITE, + ResourceType: accesscontrol.ResourceType_KV_DEX, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Wasm: &wasmvmtypes.WasmQuery{}, }) - require.Error(t, acl.ErrUnexpectedWasmDependency, err) + require.Equal(t, acl.ErrUnexpectedWasmDependency, err) } func TestQueryHandlerDependencyDecoratorDex(t *testing.T) { @@ -517,21 +467,16 @@ func TestQueryHandlerDependencyDecoratorDex(t *testing.T) { testContext := app.NewContext(false, types.Header{}) // setup the wasm contract's dependency mapping - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV_DEX, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_KV_DEX, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) customQuery, err := json.Marshal(wasmbinding.SeiQueryWrapper{ Route: wasmbinding.DexRoute, @@ -542,26 +487,21 @@ func TestQueryHandlerDependencyDecoratorDex(t *testing.T) { }) require.NoError(t, err) - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV_ORACLE, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_KV_ORACLE, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Custom: customQuery, }) - require.Error(t, acl.ErrUnexpectedWasmDependency, err) + require.Equal(t, acl.ErrUnexpectedWasmDependency, err) } func TestQueryHandlerDependencyDecoratorOracle(t *testing.T) { @@ -572,21 +512,16 @@ func TestQueryHandlerDependencyDecoratorOracle(t *testing.T) { testContext := app.NewContext(false, types.Header{}) // setup the wasm contract's dependency mapping - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV_ORACLE, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_KV_ORACLE, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) customQuery, err := json.Marshal(wasmbinding.SeiQueryWrapper{ Route: wasmbinding.OracleRoute, @@ -597,26 +532,21 @@ func TestQueryHandlerDependencyDecoratorOracle(t *testing.T) { }) require.NoError(t, err) - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV_BANK, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_KV_BANK, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Custom: customQuery, }) - require.Error(t, acl.ErrUnexpectedWasmDependency, err) + require.Equal(t, acl.ErrUnexpectedWasmDependency, err) } func TestQueryHandlerDependencyDecoratorEpoch(t *testing.T) { @@ -627,21 +557,16 @@ func TestQueryHandlerDependencyDecoratorEpoch(t *testing.T) { testContext := app.NewContext(false, types.Header{}) // setup the wasm contract's dependency mapping - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV_EPOCH, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_KV_EPOCH, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) customQuery, err := json.Marshal(wasmbinding.SeiQueryWrapper{ Route: wasmbinding.EpochRoute, @@ -652,24 +577,19 @@ func TestQueryHandlerDependencyDecoratorEpoch(t *testing.T) { }) require.NoError(t, err) - err = app.AccessControlKeeper.SetWasmDependencyMapping(testContext, contractAddr, accesscontrol.WasmDependencyMapping{ - Enabled: true, - AccessOps: []accesscontrol.AccessOperationWithSelector{ - { - Operation: &accesscontrol.AccessOperation{ - AccessType: accesscontrol.AccessType_READ, - ResourceType: accesscontrol.ResourceType_KV_BANK, - IdentifierTemplate: "*", - }, - }, { - Operation: acltypes.CommitAccessOp(), + testContext = testContext.WithTxMsgAccessOps(map[int][]accesscontrol.AccessOperation{ + 0: { + accesscontrol.AccessOperation{ + AccessType: accesscontrol.AccessType_READ, + ResourceType: accesscontrol.ResourceType_KV_BANK, + IdentifierTemplate: "*", }, + *acltypes.CommitAccessOp(), }, }) - require.NoError(t, err) _, err = queryDecorator.HandleQuery(testContext, contractAddr, wasmvmtypes.QueryRequest{ Custom: customQuery, }) - require.Error(t, acl.ErrUnexpectedWasmDependency, err) + require.Equal(t, acl.ErrUnexpectedWasmDependency, err) }