Skip to content
This repository was archived by the owner on Jan 20, 2026. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions baseapp/baseapp.go
Original file line number Diff line number Diff line change
Expand Up @@ -803,6 +803,7 @@ func (app *BaseApp) runMsgs(ctx sdk.Context, msgs []sdk.Msg, mode runTxMode) (*s
)

if handler := app.msgServiceRouter.Handler(msg); handler != nil {
ctx = ctx.WithMessageIndex(i)
// ADR 031 request type routing
msgResult, err = handler(ctx, msg)
eventMsgName = sdk.MsgTypeURL(msg)
Expand Down
3 changes: 1 addition & 2 deletions proto/cosmos/accesscontrol/accesscontrol.proto
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,7 @@ package cosmos.accesscontrol.v1beta1;
import "gogoproto/gogo.proto";
import "cosmos/accesscontrol/constants.proto";

option go_package = "github.com/cosmos/cosmos-sdk/x/accesscontrol/types";

option go_package = "github.com/cosmos/cosmos-sdk/types/accesscontrol";

message AccessOperation {
AccessType access_type = 1;
Expand Down
2 changes: 1 addition & 1 deletion proto/cosmos/accesscontrol/constants.proto
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
syntax = "proto3";
package cosmos.accesscontrol.v1beta1;

option go_package = "github.com/cosmos/cosmos-sdk/x/accesscontrol/types";
option go_package = "github.com/cosmos/cosmos-sdk/types/accesscontrol";

enum AccessType {
UNKNOWN = 0;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
syntax = "proto3";
package cosmos.accesscontrol.v1beta1;
package cosmos.accesscontrol_genesis.v1beta1;

import "gogoproto/gogo.proto";
import "cosmos/accesscontrol/constants.proto";
import "cosmos/accesscontrol/accesscontrol.proto";

option go_package = "github.com/cosmos/cosmos-sdk/x/accesscontrol/types";
Expand All @@ -11,7 +10,7 @@ message GenesisState {
Params params = 1 [(gogoproto.nullable) = false];

// mapping between every message type and its predetermined resource read/write sequence
repeated MessageDependencyMapping message_dependency_mapping = 2 [
repeated cosmos.accesscontrol.v1beta1.MessageDependencyMapping message_dependency_mapping = 2 [
(gogoproto.nullable) = false,
(gogoproto.moretags) = "yaml:\"message_dependency_mapping\""
];
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package types
package accesscontrol

import (
fmt "fmt"
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

32 changes: 32 additions & 0 deletions types/context.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (

"github.com/cosmos/cosmos-sdk/store/gaskv"
stypes "github.com/cosmos/cosmos-sdk/store/types"
acltypes "github.com/cosmos/cosmos-sdk/types/accesscontrol"
)

/*
Expand Down Expand Up @@ -39,8 +40,18 @@ type Context struct {
consParams *tmproto.ConsensusParams
eventManager *EventManager
priority int64 // The tx priority, only relevant in CheckTx

txBlockingChannels MessageAccessOpsChannelMapping
txCompletionChannels MessageAccessOpsChannelMapping
messageIndex int // Used to track current message being processed
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are we tracking message index instead of txindex? in the other places for dependency mapping, we're indexing by the tx index, this distinction is relevant since each tx can have multiple messages as part of it.

}

// Alias for Map of MessageIndex -> AccessOperation -> Channel
type MessageAccessOpsChannelMapping = map[int]AccessOpsChannelMapping
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should map by tx index


// Alias for Map of AccessOperation -> Channel
type AccessOpsChannelMapping = map[*acltypes.AccessOperation][]chan interface{}

// Proposed rename, not done to avoid API breakage
type Request = Context

Expand All @@ -60,6 +71,9 @@ func (c Context) IsReCheckTx() bool { return c.recheckTx }
func (c Context) MinGasPrices() DecCoins { return c.minGasPrice }
func (c Context) EventManager() *EventManager { return c.eventManager }
func (c Context) Priority() int64 { return c.priority }
func (c Context) TxCompletionChannels() MessageAccessOpsChannelMapping { return c.txCompletionChannels }
func (c Context) TxBlockingChannels() MessageAccessOpsChannelMapping { return c.txBlockingChannels }
func (c Context) MessageIndex() int { return c.messageIndex }

// clone the header before returning
func (c Context) BlockHeader() tmproto.Header {
Expand Down Expand Up @@ -222,6 +236,24 @@ func (c Context) WithEventManager(em *EventManager) Context {
return c
}

// WithTxCompletionChannels returns a Context with an updated list of completion channel
func (c Context) WithTxCompletionChannels(completionChannels MessageAccessOpsChannelMapping) Context {
c.txCompletionChannels = completionChannels
return c
}

// WithTxBlockingChannels returns a Context with an updated list of blocking channels for completion signals
func (c Context) WithTxBlockingChannels(blockingChannels MessageAccessOpsChannelMapping) Context {
c.txBlockingChannels = blockingChannels
return c
}

// WithMessageIndex returns a Context with the current message index that's being processed
func (c Context) WithMessageIndex(messageIndex int) Context {
c.messageIndex = messageIndex
return c
}

// TODO: remove???
func (c Context) IsZero() bool {
return c.ms == nil
Expand Down
2 changes: 1 addition & 1 deletion types/tx_msg.go
Original file line number Diff line number Diff line change
Expand Up @@ -78,4 +78,4 @@ type TxEncoder func(tx Tx) ([]byte, error)
// MsgTypeURL returns the TypeURL of a `sdk.Msg`.
func MsgTypeURL(msg Msg) string {
return "/" + proto.MessageName(msg)
}
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

nit: newline

6 changes: 3 additions & 3 deletions x/accesscontrol/keeper/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package keeper

import (
sdk "github.com/cosmos/cosmos-sdk/types"

acltypes "github.com/cosmos/cosmos-sdk/types/accesscontrol"
"github.com/cosmos/cosmos-sdk/x/accesscontrol/types"
)

Expand All @@ -14,8 +14,8 @@ func (k Keeper) InitGenesis(ctx sdk.Context, genState types.GenesisState) {
}

func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState {
resourceDepedencyMappings := []types.MessageDependencyMapping{}
k.IterateResourceKeys(ctx, func(dependencyMapping types.MessageDependencyMapping) (stop bool) {
resourceDepedencyMappings := []acltypes.MessageDependencyMapping{}
k.IterateResourceKeys(ctx, func(dependencyMapping acltypes.MessageDependencyMapping) (stop bool) {
resourceDepedencyMappings = append(resourceDepedencyMappings, dependencyMapping)
return false
})
Expand Down
12 changes: 6 additions & 6 deletions x/accesscontrol/keeper/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@ import (
"github.com/cosmos/cosmos-sdk/codec"
sdk "github.com/cosmos/cosmos-sdk/types"

acltypes "github.com/cosmos/cosmos-sdk/types/accesscontrol"
"github.com/cosmos/cosmos-sdk/x/accesscontrol/types"

paramtypes "github.com/cosmos/cosmos-sdk/x/params/types"
)

Expand Down Expand Up @@ -41,17 +41,17 @@ func (k Keeper) Logger(ctx sdk.Context) log.Logger {
return ctx.Logger().With("module", fmt.Sprintf("x/%s", types.ModuleName))
}

func (k Keeper) GetResourceDependencyMapping(ctx sdk.Context, messageKey string) types.MessageDependencyMapping {
func (k Keeper) GetResourceDependencyMapping(ctx sdk.Context, messageKey string) acltypes.MessageDependencyMapping {
store := ctx.KVStore(k.storeKey)
b := store.Get(types.GetResourceDependencyKey(messageKey))
dependencyMapping := types.MessageDependencyMapping{}
dependencyMapping := acltypes.MessageDependencyMapping{}
k.cdc.MustUnmarshal(b, &dependencyMapping)
return dependencyMapping
}

func (k Keeper) SetResourceDependencyMapping(
ctx sdk.Context,
dependencyMapping types.MessageDependencyMapping,
dependencyMapping acltypes.MessageDependencyMapping,
) error {
err := types.ValidateMessageDependencyMapping(dependencyMapping)
if err != nil {
Expand All @@ -64,12 +64,12 @@ func (k Keeper) SetResourceDependencyMapping(
return nil
}

func (k Keeper) IterateResourceKeys(ctx sdk.Context, handler func(dependencyMapping types.MessageDependencyMapping) (stop bool)) {
func (k Keeper) IterateResourceKeys(ctx sdk.Context, handler func(dependencyMapping acltypes.MessageDependencyMapping) (stop bool)) {
store := ctx.KVStore(k.storeKey)
iter := sdk.KVStorePrefixIterator(store, types.GetResourceDependencyMappingKey())
defer iter.Close()
for ; iter.Valid(); iter.Next() {
dependencyMapping := types.MessageDependencyMapping{}
dependencyMapping := acltypes.MessageDependencyMapping{}
k.cdc.MustUnmarshal(iter.Value(), &dependencyMapping)
if handler(dependencyMapping) {
break
Expand Down
13 changes: 7 additions & 6 deletions x/accesscontrol/types/genesis.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,22 +4,23 @@ import (
"encoding/json"

"github.com/cosmos/cosmos-sdk/codec"
acltypes "github.com/cosmos/cosmos-sdk/types/accesscontrol"
)

func DefaultMessageDependencyMapping() []MessageDependencyMapping {
return []MessageDependencyMapping{
func DefaultMessageDependencyMapping() []acltypes.MessageDependencyMapping {
return []acltypes.MessageDependencyMapping{
{
MessageKey: "",
AccessOps: []AccessOperation{
{AccessType: AccessType_UNKNOWN, ResourceType: ResourceType_ANY, IdentifierTemplate: "*"},
{AccessType: AccessType_COMMIT, ResourceType: ResourceType_ANY, IdentifierTemplate: "*"},
AccessOps: []acltypes.AccessOperation{
{AccessType: acltypes.AccessType_UNKNOWN, ResourceType: acltypes.ResourceType_ANY, IdentifierTemplate: "*"},
{AccessType: acltypes.AccessType_COMMIT, ResourceType: acltypes.ResourceType_ANY, IdentifierTemplate: "*"},
},
},
}
}

// NewGenesisState creates a new GenesisState object
func NewGenesisState(params Params, messageDependencyMapping []MessageDependencyMapping) *GenesisState {
func NewGenesisState(params Params, messageDependencyMapping []acltypes.MessageDependencyMapping) *GenesisState {
return &GenesisState{
Params: params,
MessageDependencyMapping: messageDependencyMapping,
Expand Down
Loading