From e2f2e35794c54bb6f74273ad6de1c8a9e17543c4 Mon Sep 17 00:00:00 2001 From: Eric Zhu Date: Wed, 26 Oct 2022 00:31:48 -0400 Subject: [PATCH 1/4] granularize staking resources --- aclmapping/staking/mappings.go | 28 ++++++++++++++-------------- go.mod | 2 +- go.sum | 4 ++-- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/aclmapping/staking/mappings.go b/aclmapping/staking/mappings.go index 18e8d68223..d69e68d0c5 100644 --- a/aclmapping/staking/mappings.go +++ b/aclmapping/staking/mappings.go @@ -37,13 +37,13 @@ func MsgDelegateDependencyGenerator(keeper aclkeeper.Keeper, ctx sdk.Context, ms // Checks if there is a delegation object that already exists for (delegatorAddr, validatorAddr) { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_DELEGATION, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgDelegate.DelegatorAddress+msgDelegate.ValidatorAddress), }, // Store new delegator for (delegator, validator) { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_DELEGATION, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgDelegate.DelegatorAddress+msgDelegate.ValidatorAddress), }, @@ -72,13 +72,13 @@ func MsgDelegateDependencyGenerator(keeper aclkeeper.Keeper, ctx sdk.Context, ms // Checks if the validators exchange rate is valid { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_VALIDATOR, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgDelegate.ValidatorAddress), }, // Update validator shares and power index { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_VALIDATOR, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgDelegate.ValidatorAddress), }, @@ -105,13 +105,13 @@ func MsgUndelegateDependencyGenerator(keeper aclkeeper.Keeper, ctx sdk.Context, // Get delegation/redelegations and error checking { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_DELEGATION, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgUndelegate.DelegatorAddress+msgUndelegate.ValidatorAddress), }, // Update/delete delegation and update redelegation { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_DELEGATION, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgUndelegate.DelegatorAddress+msgUndelegate.ValidatorAddress), }, @@ -140,13 +140,13 @@ func MsgUndelegateDependencyGenerator(keeper aclkeeper.Keeper, ctx sdk.Context, // Checks if the validators exchange rate is valid { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_VALIDATOR, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgUndelegate.ValidatorAddress), }, // Update validator shares and power index { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_VALIDATOR, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgUndelegate.ValidatorAddress), }, @@ -174,12 +174,12 @@ func MsgBeginRedelegateDependencyGenerator(keeper aclkeeper.Keeper, ctx sdk.Cont // Get dest delegation to see if it already exists { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_DELEGATION, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgBeingRedelegate.DelegatorAddress+msgBeingRedelegate.ValidatorSrcAddress), }, { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_DELEGATION, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgBeingRedelegate.DelegatorAddress+msgBeingRedelegate.ValidatorDstAddress), }, // Update/delete src and destination delegation after tokens have been unbonded @@ -229,22 +229,22 @@ func MsgBeginRedelegateDependencyGenerator(keeper aclkeeper.Keeper, ctx sdk.Cont // Update validators staking shares and power index { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_VALIDATOR, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgBeingRedelegate.ValidatorSrcAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_VALIDATOR, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgBeingRedelegate.ValidatorSrcAddress), }, { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_VALIDATOR, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgBeingRedelegate.ValidatorDstAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_VALIDATOR, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgBeingRedelegate.ValidatorDstAddress), }, diff --git a/go.mod b/go.mod index 9e9cafb4a5..af5c2bddbf 100644 --- a/go.mod +++ b/go.mod @@ -131,7 +131,7 @@ require ( ) replace ( - github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.199 + github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.200 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.59 diff --git a/go.sum b/go.sum index 3ccc2963b8..321f744059 100644 --- a/go.sum +++ b/go.sum @@ -1098,8 +1098,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/sei-protocol/sei-cosmos v0.1.199 h1:p+kqO95BjKycKJcL+nPBib+nrygutYtV9/nimI4cCVs= -github.com/sei-protocol/sei-cosmos v0.1.199/go.mod h1:8ccWQxpBkWbpvBos/T4QO9K9gQxFs0duTqKRnagKo+0= +github.com/sei-protocol/sei-cosmos v0.1.200 h1:EbHDzt0aAASO7fy8Dac04lLzm0xhF1O1ILiA+UD3w98= +github.com/sei-protocol/sei-cosmos v0.1.200/go.mod h1:8ccWQxpBkWbpvBos/T4QO9K9gQxFs0duTqKRnagKo+0= github.com/sei-protocol/sei-tendermint v0.1.59 h1:POGL60PumMQHF4EzAHzvkGfDnodQJLHpl65LuiwSO/Y= github.com/sei-protocol/sei-tendermint v0.1.59/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= From db680e9a91ae1de02453d4f842c2bcb4718177b6 Mon Sep 17 00:00:00 2001 From: Eric Zhu Date: Wed, 26 Oct 2022 00:33:18 -0400 Subject: [PATCH 2/4] change message type --- loadtest/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loadtest/config.json b/loadtest/config.json index fb3ee618b7..bef4443570 100644 --- a/loadtest/config.json +++ b/loadtest/config.json @@ -24,8 +24,8 @@ "begin_redelegate_percentage": "0.25" } }, - "message_type": "none", "run_oracle": true, + "message_type": "staking", "contract_distribution": [ { "contract_address": "sei1yw4xvtc43me9scqfr2jr2gzvcxd3a9y4eq7gaukreugw2yd2f8tsy4qgdm", From b5f01fe20b060775059e42725e5697d4015ec8b3 Mon Sep 17 00:00:00 2001 From: Eric Zhu Date: Wed, 26 Oct 2022 01:56:00 -0400 Subject: [PATCH 3/4] revert to basic --- loadtest/config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/loadtest/config.json b/loadtest/config.json index bef4443570..615ea0b7d6 100644 --- a/loadtest/config.json +++ b/loadtest/config.json @@ -25,7 +25,7 @@ } }, "run_oracle": true, - "message_type": "staking", + "message_type": "basic", "contract_distribution": [ { "contract_address": "sei1yw4xvtc43me9scqfr2jr2gzvcxd3a9y4eq7gaukreugw2yd2f8tsy4qgdm", From 5bdcceb3f7b80577dc7a2d3519550f5e1c301af6 Mon Sep 17 00:00:00 2001 From: Eric Zhu Date: Wed, 26 Oct 2022 13:09:23 -0400 Subject: [PATCH 4/4] add mapping testing --- aclmapping/staking/mappings.go | 32 +++++----- aclmapping/staking/mappings_test.go | 93 +++++++++++++++++++++++++++++ loadtest/config.json | 2 +- 3 files changed, 110 insertions(+), 17 deletions(-) create mode 100644 aclmapping/staking/mappings_test.go diff --git a/aclmapping/staking/mappings.go b/aclmapping/staking/mappings.go index d69e68d0c5..ed3eb9fc8c 100644 --- a/aclmapping/staking/mappings.go +++ b/aclmapping/staking/mappings.go @@ -50,22 +50,22 @@ func MsgDelegateDependencyGenerator(keeper aclkeeper.Keeper, ctx sdk.Context, ms // delegate coins from account validator account { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgDelegate.DelegatorAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgDelegate.DelegatorAddress), }, { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgDelegate.ValidatorAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgDelegate.ValidatorAddress), }, @@ -118,22 +118,22 @@ func MsgUndelegateDependencyGenerator(keeper aclkeeper.Keeper, ctx sdk.Context, // Update the delegator and validator account balances { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgUndelegate.DelegatorAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgUndelegate.DelegatorAddress), }, { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgUndelegate.ValidatorAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgUndelegate.ValidatorAddress), }, @@ -185,44 +185,44 @@ func MsgBeginRedelegateDependencyGenerator(keeper aclkeeper.Keeper, ctx sdk.Cont // Update/delete src and destination delegation after tokens have been unbonded { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_DELEGATION, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgBeingRedelegate.DelegatorAddress+msgBeingRedelegate.ValidatorSrcAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_STAKING_DELEGATION, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.STAKING, msgBeingRedelegate.DelegatorAddress+msgBeingRedelegate.ValidatorDstAddress), }, // Update the delegator, src validator and dest validator account balances { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgBeingRedelegate.DelegatorAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgBeingRedelegate.DelegatorAddress), }, { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgBeingRedelegate.ValidatorSrcAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgBeingRedelegate.ValidatorSrcAddress), }, { AccessType: sdkacltypes.AccessType_READ, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgBeingRedelegate.ValidatorDstAddress), }, { AccessType: sdkacltypes.AccessType_WRITE, - ResourceType: sdkacltypes.ResourceType_KV, + ResourceType: sdkacltypes.ResourceType_KV_BANK, IdentifierTemplate: utils.GetIdentifierTemplatePerModule(utils.BANK, msgBeingRedelegate.ValidatorDstAddress), }, diff --git a/aclmapping/staking/mappings_test.go b/aclmapping/staking/mappings_test.go new file mode 100644 index 0000000000..09efb9dbe9 --- /dev/null +++ b/aclmapping/staking/mappings_test.go @@ -0,0 +1,93 @@ +package aclstakingmapping + +import ( + "testing" + "time" + + "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" + sdk "github.com/cosmos/cosmos-sdk/types" + acltypes "github.com/cosmos/cosmos-sdk/x/accesscontrol/types" + stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" + "github.com/sei-protocol/sei-chain/app" + oracletypes "github.com/sei-protocol/sei-chain/x/oracle/types" + "github.com/stretchr/testify/require" +) + +func TestGeneratorInvalidMessageTypes(t *testing.T) { + tm := time.Now().UTC() + valPub := secp256k1.GenPrivKey().PubKey() + testWrapper := app.NewTestWrapper(t, tm, valPub) + + stakingDelegate := stakingtypes.MsgDelegate{ + DelegatorAddress: "delegator", + ValidatorAddress: "validator", + Amount: sdk.Coin{Denom: "usei", Amount: sdk.NewInt(5)}, + } + oracleVote := oracletypes.MsgAggregateExchangeRateVote{ + ExchangeRates: "1usei", + Feeder: "test", + Validator: "validator", + } + + _, err := MsgDelegateDependencyGenerator(testWrapper.App.AccessControlKeeper, testWrapper.Ctx, &oracleVote) + require.Error(t, err) + _, err = MsgUndelegateDependencyGenerator(testWrapper.App.AccessControlKeeper, testWrapper.Ctx, &stakingDelegate) + require.Error(t, err) + _, err = MsgBeginRedelegateDependencyGenerator(testWrapper.App.AccessControlKeeper, testWrapper.Ctx, &stakingDelegate) + require.Error(t, err) + +} + +func TestMsgDelegateGenerator(t *testing.T) { + tm := time.Now().UTC() + valPub := secp256k1.GenPrivKey().PubKey() + testWrapper := app.NewTestWrapper(t, tm, valPub) + + stakingDelegate := stakingtypes.MsgDelegate{ + DelegatorAddress: "delegator", + ValidatorAddress: "validator", + Amount: sdk.Coin{Denom: "usei", Amount: sdk.NewInt(5)}, + } + + accessOps, err := MsgDelegateDependencyGenerator(testWrapper.App.AccessControlKeeper, testWrapper.Ctx, &stakingDelegate) + require.NoError(t, err) + err = acltypes.ValidateAccessOps(accessOps) + require.NoError(t, err) +} + +func TestMsgUndelegateGenerator(t *testing.T) { + tm := time.Now().UTC() + valPub := secp256k1.GenPrivKey().PubKey() + + testWrapper := app.NewTestWrapper(t, tm, valPub) + + stakingUndelegate := stakingtypes.MsgUndelegate{ + DelegatorAddress: "delegator", + ValidatorAddress: "validator", + Amount: sdk.Coin{Denom: "usei", Amount: sdk.NewInt(5)}, + } + + accessOps, err := MsgUndelegateDependencyGenerator(testWrapper.App.AccessControlKeeper, testWrapper.Ctx, &stakingUndelegate) + require.NoError(t, err) + err = acltypes.ValidateAccessOps(accessOps) + require.NoError(t, err) +} + +func TestMsgBeginRedelegateGenerator(t *testing.T) { + tm := time.Now().UTC() + valPub := secp256k1.GenPrivKey().PubKey() + + testWrapper := app.NewTestWrapper(t, tm, valPub) + + stakingBeginRedelegate := stakingtypes.MsgBeginRedelegate{ + DelegatorAddress: "delegator", + ValidatorSrcAddress: "src_validator", + ValidatorDstAddress: "dst_validator", + Amount: sdk.Coin{Denom: "usei", Amount: sdk.NewInt(5)}, + } + + accessOps, err := MsgBeginRedelegateDependencyGenerator(testWrapper.App.AccessControlKeeper, testWrapper.Ctx, &stakingBeginRedelegate) + require.NoError(t, err) + err = acltypes.ValidateAccessOps(accessOps) + require.NoError(t, err) +} diff --git a/loadtest/config.json b/loadtest/config.json index 615ea0b7d6..2b43ff72a4 100644 --- a/loadtest/config.json +++ b/loadtest/config.json @@ -24,7 +24,7 @@ "begin_redelegate_percentage": "0.25" } }, - "run_oracle": true, + "run_oracle": false, "message_type": "basic", "contract_distribution": [ {