Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Tony/occ evm #1326

Open
wants to merge 16 commits into
base: evm
Choose a base branch
from
Open
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
2 changes: 2 additions & 0 deletions .github/workflows/compatiblity_check.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
name: Compatibility Check
on:
pull_request:
branches:
- main
push:
branches:
- main
Expand Down
32 changes: 32 additions & 0 deletions aclmapping/dex/mappings.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ func GetLongShortOrderBookOps(contractAddr string, priceDenom string, assetDenom
}

func DexPlaceOrdersDependencyGenerator(keeper aclkeeper.Keeper, _ sdk.Context, msg sdk.Msg) ([]sdkacltypes.AccessOperation, error) {
// TODO: read + write downstream, write contracts to process
placeOrdersMsg, ok := msg.(*dextypes.MsgPlaceOrders)
if !ok {
return []sdkacltypes.AccessOperation{}, ErrPlaceOrdersGenerator
Expand Down Expand Up @@ -99,6 +100,22 @@ func DexPlaceOrdersDependencyGenerator(keeper aclkeeper.Keeper, _ sdk.Context, m
IdentifierTemplate: hex.EncodeToString(dextypes.MemOrderPrefix(contractAddr)),
},

{
AccessType: sdkacltypes.AccessType_READ,
ResourceType: sdkacltypes.ResourceType_KV_DEX_MEM_DOWNSTREAM_CONTRACTS,
IdentifierTemplate: hex.EncodeToString(dextypes.MemDownstreamContractsKey(contractAddr)),
},
{
AccessType: sdkacltypes.AccessType_WRITE,
ResourceType: sdkacltypes.ResourceType_KV_DEX_MEM_DOWNSTREAM_CONTRACTS,
IdentifierTemplate: hex.EncodeToString(dextypes.MemDownstreamContractsKey(contractAddr)),
},
{
AccessType: sdkacltypes.AccessType_WRITE,
ResourceType: sdkacltypes.ResourceType_KV_DEX_MEM_CONTRACTS_TO_PROCESS,
IdentifierTemplate: hex.EncodeToString(dextypes.MemContractsToProcessKey(contractAddr)),
},

// Checks balance of sender
{
AccessType: sdkacltypes.AccessType_READ,
Expand Down Expand Up @@ -183,6 +200,21 @@ func DexCancelOrdersDependencyGenerator(_ aclkeeper.Keeper, _ sdk.Context, msg s
ResourceType: sdkacltypes.ResourceType_KV_DEX_CONTRACT,
IdentifierTemplate: hex.EncodeToString([]byte(dexkeeper.ContractPrefixKey)),
},
{
AccessType: sdkacltypes.AccessType_READ,
ResourceType: sdkacltypes.ResourceType_KV_DEX_MEM_DOWNSTREAM_CONTRACTS,
IdentifierTemplate: hex.EncodeToString(dextypes.MemDownstreamContractsKey(contractAddr)),
},
{
AccessType: sdkacltypes.AccessType_WRITE,
ResourceType: sdkacltypes.ResourceType_KV_DEX_MEM_DOWNSTREAM_CONTRACTS,
IdentifierTemplate: hex.EncodeToString(dextypes.MemDownstreamContractsKey(contractAddr)),
},
{
AccessType: sdkacltypes.AccessType_WRITE,
ResourceType: sdkacltypes.ResourceType_KV_DEX_MEM_CONTRACTS_TO_PROCESS,
IdentifierTemplate: hex.EncodeToString(dextypes.MemContractsToProcessKey(contractAddr)),
},
}

for _, order := range cancelOrdersMsg.GetCancellations() {
Expand Down
136 changes: 133 additions & 3 deletions aclmapping/utils/resource_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -57,9 +57,11 @@ var StoreKeyToResourceTypePrefixMap = aclsdktypes.StoreKeyToResourceTypePrefixMa
},
dextypes.MemStoreKey: {
// mem
aclsdktypes.ResourceType_KV_DEX_MEM_ORDER: dextypes.KeyPrefix(dextypes.MemOrderKey),
aclsdktypes.ResourceType_KV_DEX_MEM_CANCEL: dextypes.KeyPrefix(dextypes.MemCancelKey),
aclsdktypes.ResourceType_KV_DEX_MEM_DEPOSIT: dextypes.KeyPrefix(dextypes.MemDepositKey),
aclsdktypes.ResourceType_KV_DEX_MEM_ORDER: dextypes.KeyPrefix(dextypes.MemOrderKey),
aclsdktypes.ResourceType_KV_DEX_MEM_CANCEL: dextypes.KeyPrefix(dextypes.MemCancelKey),
aclsdktypes.ResourceType_KV_DEX_MEM_DEPOSIT: dextypes.KeyPrefix(dextypes.MemDepositKey),
aclsdktypes.ResourceType_KV_DEX_MEM_CONTRACTS_TO_PROCESS: dextypes.KeyPrefix(dextypes.MemContractsToProcess),
aclsdktypes.ResourceType_KV_DEX_MEM_DOWNSTREAM_CONTRACTS: dextypes.KeyPrefix(dextypes.MemDownstreamContracts),
},
banktypes.StoreKey: {
aclsdktypes.ResourceType_KV_BANK: aclsdktypes.EmptyPrefix,
Expand Down Expand Up @@ -167,3 +169,131 @@ var StoreKeyToResourceTypePrefixMap = aclsdktypes.StoreKeyToResourceTypePrefixMa
aclsdktypes.ResourceType_KV_EVM_CODE_SIZE: evmtypes.CodeSizeKeyPrefix,
},
}

// ResourceTypeToStoreKeyMap this maps between resource types and their respective storekey
var ResourceTypeToStoreKeyMap = aclsdktypes.ResourceTypeToStoreKeyMap{
// ANY, KV, and MEM are intentionally excluded because they don't map to a specific store key

// ~~~~ DEX Resource Types ~~~~
aclsdktypes.ResourceType_KV_DEX: dextypes.StoreKey,
aclsdktypes.ResourceType_DexMem: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_CONTRACT_LONGBOOK: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_CONTRACT_SHORTBOOK: dextypes.StoreKey,
// pricedenom and assetdenoms are the prefixes
aclsdktypes.ResourceType_KV_DEX_PAIR_PREFIX: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_TWAP: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_PRICE: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_SETTLEMENT_ENTRY: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_REGISTERED_PAIR: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_ORDER: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_CANCEL: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_ACCOUNT_ACTIVE_ORDERS: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_ASSET_LIST: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_NEXT_ORDER_ID: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_NEXT_SETTLEMENT_ID: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_MATCH_RESULT: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_CONTRACT: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_ORDER_BOOK: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_LONG_ORDER_COUNT: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_SHORT_ORDER_COUNT: dextypes.StoreKey,
// SETTLEMENT keys are prefixed with account and order id
aclsdktypes.ResourceType_KV_DEX_SETTLEMENT_ORDER_ID: dextypes.StoreKey,
aclsdktypes.ResourceType_KV_DEX_SETTLEMENT: dextypes.StoreKey,

// ~~~~ DEX MEM Resource Types ~~~~
aclsdktypes.ResourceType_KV_DEX_MEM_ORDER: dextypes.MemStoreKey,
aclsdktypes.ResourceType_KV_DEX_MEM_CANCEL: dextypes.MemStoreKey,
aclsdktypes.ResourceType_KV_DEX_MEM_DEPOSIT: dextypes.MemStoreKey,
aclsdktypes.ResourceType_KV_DEX_MEM_CONTRACTS_TO_PROCESS: dextypes.MemStoreKey,
aclsdktypes.ResourceType_KV_DEX_MEM_DOWNSTREAM_CONTRACTS: dextypes.MemStoreKey,

// ~~~~ BANK Resource Types ~~~~
aclsdktypes.ResourceType_KV_BANK: banktypes.StoreKey,
aclsdktypes.ResourceType_KV_BANK_BALANCES: banktypes.StoreKey,
aclsdktypes.ResourceType_KV_BANK_SUPPLY: banktypes.StoreKey,
aclsdktypes.ResourceType_KV_BANK_DENOM: banktypes.StoreKey,

// ~~~~ BANK DEFERRED Resource Types ~~~~
aclsdktypes.ResourceType_KV_BANK_DEFERRED: banktypes.DeferredCacheStoreKey,
aclsdktypes.ResourceType_KV_BANK_DEFERRED_MODULE_TX_INDEX: banktypes.DeferredCacheStoreKey,

// ~~~~ AUTH Resource Types ~~~~
aclsdktypes.ResourceType_KV_AUTH: authtypes.StoreKey,
aclsdktypes.ResourceType_KV_AUTH_ADDRESS_STORE: authtypes.StoreKey,
aclsdktypes.ResourceType_KV_AUTH_GLOBAL_ACCOUNT_NUMBER: authtypes.StoreKey,

// ~~~~ AUTHZ Resource Types ~~~~
aclsdktypes.ResourceType_KV_AUTHZ: authztypes.StoreKey,

// ~~~~ DISTRIBUTION Resource Types ~~~~
aclsdktypes.ResourceType_KV_DISTRIBUTION: distributiontypes.StoreKey,
aclsdktypes.ResourceType_KV_DISTRIBUTION_FEE_POOL: distributiontypes.StoreKey,
aclsdktypes.ResourceType_KV_DISTRIBUTION_PROPOSER_KEY: distributiontypes.StoreKey,
aclsdktypes.ResourceType_KV_DISTRIBUTION_OUTSTANDING_REWARDS: distributiontypes.StoreKey,
aclsdktypes.ResourceType_KV_DISTRIBUTION_DELEGATOR_WITHDRAW_ADDR: distributiontypes.StoreKey,
aclsdktypes.ResourceType_KV_DISTRIBUTION_DELEGATOR_STARTING_INFO: distributiontypes.StoreKey,
aclsdktypes.ResourceType_KV_DISTRIBUTION_VAL_HISTORICAL_REWARDS: distributiontypes.StoreKey,
aclsdktypes.ResourceType_KV_DISTRIBUTION_VAL_CURRENT_REWARDS: distributiontypes.StoreKey,
aclsdktypes.ResourceType_KV_DISTRIBUTION_VAL_ACCUM_COMMISSION: distributiontypes.StoreKey,
aclsdktypes.ResourceType_KV_DISTRIBUTION_SLASH_EVENT: distributiontypes.StoreKey,

// ~~~~ FEEGRANT Resource Types ~~~~
aclsdktypes.ResourceType_KV_FEEGRANT: feegranttypes.StoreKey,
aclsdktypes.ResourceType_KV_FEEGRANT_ALLOWANCE: feegranttypes.StoreKey,

// ~~~~ ORACLE Resource Types ~~~~
aclsdktypes.ResourceType_KV_ORACLE: oracletypes.StoreKey,
aclsdktypes.ResourceType_KV_ORACLE_VOTE_TARGETS: oracletypes.StoreKey,
aclsdktypes.ResourceType_KV_ORACLE_AGGREGATE_VOTES: oracletypes.StoreKey,
aclsdktypes.ResourceType_KV_ORACLE_FEEDERS: oracletypes.StoreKey,
aclsdktypes.ResourceType_KV_ORACLE_PRICE_SNAPSHOT: oracletypes.StoreKey,
aclsdktypes.ResourceType_KV_ORACLE_EXCHANGE_RATE: oracletypes.StoreKey,
aclsdktypes.ResourceType_KV_ORACLE_VOTE_PENALTY_COUNTER: oracletypes.StoreKey,

// ~~~~ STAKING Resource Types ~~~~
aclsdktypes.ResourceType_KV_STAKING: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_VALIDATION_POWER: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_TOTAL_POWER: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_VALIDATOR: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_VALIDATORS_CON_ADDR: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_VALIDATORS_BY_POWER: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_DELEGATION: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_UNBONDING_DELEGATION: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_UNBONDING_DELEGATION_VAL: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_REDELEGATION: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_REDELEGATION_VAL_SRC: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_REDELEGATION_VAL_DST: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_UNBONDING: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_REDELEGATION_QUEUE: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_VALIDATOR_QUEUE: stakingtypes.StoreKey,
aclsdktypes.ResourceType_KV_STAKING_HISTORICAL_INFO: stakingtypes.StoreKey,

// ~~~~ SLASHING Resource Types ~~~~
aclsdktypes.ResourceType_KV_SLASHING: slashingtypes.StoreKey,
aclsdktypes.ResourceType_KV_SLASHING_VAL_SIGNING_INFO: slashingtypes.StoreKey,
aclsdktypes.ResourceType_KV_SLASHING_ADDR_PUBKEY_RELATION_KEY: slashingtypes.StoreKey,

// ~~~~ TOKENFACTORY Resource Types ~~~~
aclsdktypes.ResourceType_KV_TOKENFACTORY: tokenfactorytypes.StoreKey,
aclsdktypes.ResourceType_KV_TOKENFACTORY_DENOM: tokenfactorytypes.StoreKey,
aclsdktypes.ResourceType_KV_TOKENFACTORY_METADATA: tokenfactorytypes.StoreKey,
aclsdktypes.ResourceType_KV_TOKENFACTORY_ADMIN: tokenfactorytypes.StoreKey,
aclsdktypes.ResourceType_KV_TOKENFACTORY_CREATOR: tokenfactorytypes.StoreKey,

// ~~~~ EPOCH Resource Types ~~~~
aclsdktypes.ResourceType_KV_EPOCH: epochtypes.StoreKey,

// ~~~~ ACCESSCONTROL Resource Types ~~~~
aclsdktypes.ResourceType_KV_ACCESSCONTROL: acltypes.StoreKey,
aclsdktypes.ResourceType_KV_ACCESSCONTROL_WASM_DEPENDENCY_MAPPING: acltypes.StoreKey,

// ~~~~ WASM Resource Types ~~~~
aclsdktypes.ResourceType_KV_WASM: wasmtypes.StoreKey,
aclsdktypes.ResourceType_KV_WASM_CODE: wasmtypes.StoreKey,
aclsdktypes.ResourceType_KV_WASM_CONTRACT_ADDRESS: wasmtypes.StoreKey,
aclsdktypes.ResourceType_KV_WASM_CONTRACT_STORE: wasmtypes.StoreKey,
aclsdktypes.ResourceType_KV_WASM_SEQUENCE_KEY: wasmtypes.StoreKey,
aclsdktypes.ResourceType_KV_WASM_CONTRACT_CODE_HISTORY: wasmtypes.StoreKey,
aclsdktypes.ResourceType_KV_WASM_CONTRACT_BY_CODE_ID: wasmtypes.StoreKey,
aclsdktypes.ResourceType_KV_WASM_PINNED_CODE_INDEX: wasmtypes.StoreKey,
}
21 changes: 21 additions & 0 deletions aclmapping/utils/resource_type_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,3 +26,24 @@ func TestAllResourcesInTree(t *testing.T) {
}

}

func TestAllResourcesInStoreKeyMap(t *testing.T) {
resourceToStoreKeyMap := aclutils.ResourceTypeToStoreKeyMap
resourceTree := sdkacltypes.ResourceTree

storeKeyAllResourceTypes := make(map[sdkacltypes.ResourceType]bool)
for resourceType := range resourceToStoreKeyMap {
storeKeyAllResourceTypes[resourceType] = true
}

for resourceType := range resourceTree {
// omit ANY, KV, and MEM
if resourceType == sdkacltypes.ResourceType_ANY || resourceType == sdkacltypes.ResourceType_KV || resourceType == sdkacltypes.ResourceType_Mem {
continue
}
if _, ok := storeKeyAllResourceTypes[resourceType]; !ok {
panic(fmt.Sprintf("Missing resourceType=%s in the storekey to resource type prefix mapping", resourceType))
}
}

}
12 changes: 12 additions & 0 deletions app/abci.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,18 @@ func (app *App) DeliverTx(ctx sdk.Context, req abci.RequestDeliverTx, tx sdk.Tx,
return app.BaseApp.DeliverTx(ctx, req, tx, checksum)
}

// DeliverTxBatch is not part of the ABCI specification, but this is here for code convention
func (app *App) DeliverTxBatch(ctx sdk.Context, req sdk.DeliverTxBatchRequest) (res sdk.DeliverTxBatchResponse) {
defer metrics.MeasureDeliverBatchTxDuration(time.Now())

Check warning

Code scanning / CodeQL

Calling the system time

Calling the system time may be a possible source of non-determinism
// ensure we carry the initial context from tracer here
ctx = ctx.WithTraceSpanContext(app.GetBaseApp().TracingInfo.GetContext())
spanCtx, span := app.GetBaseApp().TracingInfo.StartWithContext("DeliverTxBatch", ctx.TraceSpanContext())
defer span.End()
// update context with trace span new context
ctx = ctx.WithTraceSpanContext(spanCtx)
return app.BaseApp.DeliverTxBatch(ctx, req)
}

func (app *App) Commit(ctx context.Context) (res *abci.ResponseCommit, err error) {
if app.GetBaseApp().TracingInfo.BlockSpan != nil {
defer (*app.GetBaseApp().TracingInfo.BlockSpan).End()
Expand Down
Loading