From deccdfae3ca712ffdb9c7a95e381857618cc21d9 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 28 Sep 2021 12:10:44 +0530 Subject: [PATCH 01/11] charge gas for key length --- store/gaskv/store.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/store/gaskv/store.go b/store/gaskv/store.go index 6fbc43fcf050..383fc4c52a16 100644 --- a/store/gaskv/store.go +++ b/store/gaskv/store.go @@ -50,6 +50,7 @@ func (gs *Store) Set(key []byte, value []byte) { types.AssertValidValue(value) gs.gasMeter.ConsumeGas(gs.gasConfig.WriteCostFlat, types.GasWriteCostFlatDesc) // TODO overflow-safe math? + gs.gasMeter.ConsumeGas(gs.gasConfig.WriteCostPerByte*types.Gas(len(key)), types.GasWritePerByteDesc) gs.gasMeter.ConsumeGas(gs.gasConfig.WriteCostPerByte*types.Gas(len(value)), types.GasWritePerByteDesc) gs.parent.Set(key, value) } @@ -173,8 +174,10 @@ func (gi *gasIterator) Error() error { // based on the current value's length. func (gi *gasIterator) consumeSeekGas() { if gi.Valid() { + key := gi.Key() value := gi.Value() + gi.gasMeter.ConsumeGas(gi.gasConfig.ReadCostPerByte*types.Gas(len(key)), types.GasValuePerByteDesc) gi.gasMeter.ConsumeGas(gi.gasConfig.ReadCostPerByte*types.Gas(len(value)), types.GasValuePerByteDesc) } gi.gasMeter.ConsumeGas(gi.gasConfig.IterNextCostFlat, types.GasIterNextCostFlatDesc) From d2e1e130cc00eefb96caafb6dae5d869227ff51b Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 28 Sep 2021 12:18:23 +0530 Subject: [PATCH 02/11] fix tests --- store/gaskv/store_test.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/store/gaskv/store_test.go b/store/gaskv/store_test.go index f926c7b7250e..5b91997efb4e 100644 --- a/store/gaskv/store_test.go +++ b/store/gaskv/store_test.go @@ -35,7 +35,7 @@ func TestGasKVStoreBasic(t *testing.T) { require.Equal(t, valFmt(1), st.Get(keyFmt(1))) st.Delete(keyFmt(1)) require.Empty(t, st.Get(keyFmt(1)), "Expected `key1` to be empty") - require.Equal(t, meter.GasConsumed(), types.Gas(6429)) + require.Equal(t, meter.GasConsumed(), types.Gas(6759)) } func TestGasKVStoreIterator(t *testing.T) { @@ -74,16 +74,16 @@ func TestGasKVStoreIterator(t *testing.T) { vb := iterator.Value() require.Equal(t, vb, valFmt(2)) iterator.Next() - require.Equal(t, types.Gas(13377), meter.GasConsumed()) + require.Equal(t, types.Gas(14466), meter.GasConsumed()) kc := iterator.Key() require.Equal(t, kc, keyFmt(3)) vc := iterator.Value() require.Equal(t, vc, valFmt(0)) iterator.Next() - require.Equal(t, types.Gas(13446), meter.GasConsumed()) + require.Equal(t, types.Gas(14568), meter.GasConsumed()) require.False(t, iterator.Valid()) require.Panics(t, iterator.Next) - require.Equal(t, types.Gas(13476), meter.GasConsumed()) + require.Equal(t, types.Gas(14598), meter.GasConsumed()) require.NoError(t, iterator.Error()) reverseIterator := st.ReverseIterator(nil, nil) @@ -101,7 +101,7 @@ func TestGasKVStoreIterator(t *testing.T) { require.False(t, reverseIterator.Valid()) require.Panics(t, reverseIterator.Next) - require.Equal(t, types.Gas(13782), meter.GasConsumed()) + require.Equal(t, types.Gas(15036), meter.GasConsumed()) } func TestGasKVStoreOutOfGasSet(t *testing.T) { From aafdd93f64cb2b827aca2063e831b4498c8547b2 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 28 Sep 2021 12:20:19 +0530 Subject: [PATCH 03/11] add changelog --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index ce410e404a6e..83fefc6de5c7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -121,6 +121,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes +* (store) [#10247](https://github.com/cosmos/cosmos-sdk/pull/10247) Charge gas for the key length in gas meter. * (store) [#10218](https://github.com/cosmos/cosmos-sdk/pull/10218) Charge gas even when there are no entries while seeking. * (x/genutil) [#10104](https://github.com/cosmos/cosmos-sdk/pull/10104) Ensure the `init` command reads the `--home` flag value correctly. * [\#9651](https://github.com/cosmos/cosmos-sdk/pull/9651) Change inconsistent limit of `0` to `MaxUint64` on InfiniteGasMeter and add GasRemaining func to GasMeter. From eb38cd8d87509d9b81d1d6130c6fd558a83961f9 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Tue, 28 Sep 2021 12:59:31 +0530 Subject: [PATCH 04/11] fix failing tests --- x/auth/ante/ante_test.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/x/auth/ante/ante_test.go b/x/auth/ante/ante_test.go index 3ce43a5a17e3..b1a89ba5a02d 100644 --- a/x/auth/ante/ante_test.go +++ b/x/auth/ante/ante_test.go @@ -13,6 +13,7 @@ import ( kmultisig "github.com/cosmos/cosmos-sdk/crypto/keys/multisig" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -592,6 +593,7 @@ func (suite *AnteTestSuite) TestAnteHandlerMemoGas() { func (suite *AnteTestSuite) TestAnteHandlerMultiSigner() { suite.SetupTest(false) // setup + suite.ctx = suite.ctx.WithGasMeter(storetypes.NewGasMeter(150000)) // Same data for every test cases accounts := suite.CreateTestAccounts(3) From f7d4d9a097ac3613b315d847256e1ca9732b4bec Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 29 Sep 2021 11:15:07 +0530 Subject: [PATCH 05/11] fix failing tests --- testutil/testdata/tx.go | 4 ++-- x/auth/ante/ante_test.go | 2 -- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/testutil/testdata/tx.go b/testutil/testdata/tx.go index e12f0467986e..d9b184ade84f 100644 --- a/testutil/testdata/tx.go +++ b/testutil/testdata/tx.go @@ -2,7 +2,6 @@ package testdata import ( "encoding/json" - sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/stretchr/testify/require" @@ -10,6 +9,7 @@ import ( "github.com/cosmos/cosmos-sdk/crypto/keys/secp256r1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" sdk "github.com/cosmos/cosmos-sdk/types" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) // KeyTestPubAddr generates a new secp256k1 keypair. @@ -36,7 +36,7 @@ func NewTestFeeAmount() sdk.Coins { // NewTestGasLimit is a test fee gas limit. func NewTestGasLimit() uint64 { - return 100000 + return 150000 } // NewTestMsg creates a message for testing with the given signers. diff --git a/x/auth/ante/ante_test.go b/x/auth/ante/ante_test.go index b1a89ba5a02d..3ce43a5a17e3 100644 --- a/x/auth/ante/ante_test.go +++ b/x/auth/ante/ante_test.go @@ -13,7 +13,6 @@ import ( kmultisig "github.com/cosmos/cosmos-sdk/crypto/keys/multisig" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" - storetypes "github.com/cosmos/cosmos-sdk/store/types" "github.com/cosmos/cosmos-sdk/testutil/testdata" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -593,7 +592,6 @@ func (suite *AnteTestSuite) TestAnteHandlerMemoGas() { func (suite *AnteTestSuite) TestAnteHandlerMultiSigner() { suite.SetupTest(false) // setup - suite.ctx = suite.ctx.WithGasMeter(storetypes.NewGasMeter(150000)) // Same data for every test cases accounts := suite.CreateTestAccounts(3) From 32b294d7ee48190d9724dba0e383ce6cb9fdc67a Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 29 Sep 2021 14:18:10 +0530 Subject: [PATCH 06/11] charge gas for key length in Get func --- store/gaskv/store.go | 1 + 1 file changed, 1 insertion(+) diff --git a/store/gaskv/store.go b/store/gaskv/store.go index 383fc4c52a16..182b04e07c67 100644 --- a/store/gaskv/store.go +++ b/store/gaskv/store.go @@ -39,6 +39,7 @@ func (gs *Store) Get(key []byte) (value []byte) { value = gs.parent.Get(key) // TODO overflow-safe math? + gs.gasMeter.ConsumeGas(gs.gasConfig.ReadCostPerByte*types.Gas(len(key)), types.GasReadPerByteDesc) gs.gasMeter.ConsumeGas(gs.gasConfig.ReadCostPerByte*types.Gas(len(value)), types.GasReadPerByteDesc) return value From bb8ce7b2944a6e96f7043d79a0a908b82dab4e0a Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 29 Sep 2021 14:28:11 +0530 Subject: [PATCH 07/11] fix tests --- store/gaskv/store_test.go | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/store/gaskv/store_test.go b/store/gaskv/store_test.go index 5b91997efb4e..2401a9805d94 100644 --- a/store/gaskv/store_test.go +++ b/store/gaskv/store_test.go @@ -35,7 +35,7 @@ func TestGasKVStoreBasic(t *testing.T) { require.Equal(t, valFmt(1), st.Get(keyFmt(1))) st.Delete(keyFmt(1)) require.Empty(t, st.Get(keyFmt(1)), "Expected `key1` to be empty") - require.Equal(t, meter.GasConsumed(), types.Gas(6759)) + require.Equal(t, meter.GasConsumed(), types.Gas(6858)) } func TestGasKVStoreIterator(t *testing.T) { @@ -74,16 +74,16 @@ func TestGasKVStoreIterator(t *testing.T) { vb := iterator.Value() require.Equal(t, vb, valFmt(2)) iterator.Next() - require.Equal(t, types.Gas(14466), meter.GasConsumed()) + require.Equal(t, types.Gas(14565), meter.GasConsumed()) kc := iterator.Key() require.Equal(t, kc, keyFmt(3)) vc := iterator.Value() require.Equal(t, vc, valFmt(0)) iterator.Next() - require.Equal(t, types.Gas(14568), meter.GasConsumed()) + require.Equal(t, types.Gas(14667), meter.GasConsumed()) require.False(t, iterator.Valid()) require.Panics(t, iterator.Next) - require.Equal(t, types.Gas(14598), meter.GasConsumed()) + require.Equal(t, types.Gas(14697), meter.GasConsumed()) require.NoError(t, iterator.Error()) reverseIterator := st.ReverseIterator(nil, nil) @@ -100,8 +100,7 @@ func TestGasKVStoreIterator(t *testing.T) { reverseIterator.Next() require.False(t, reverseIterator.Valid()) require.Panics(t, reverseIterator.Next) - - require.Equal(t, types.Gas(15036), meter.GasConsumed()) + require.Equal(t, types.Gas(15135), meter.GasConsumed()) } func TestGasKVStoreOutOfGasSet(t *testing.T) { From 71225ee73a0875afdcee4f14cd52f0fc6868d5c4 Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 29 Sep 2021 14:38:24 +0530 Subject: [PATCH 08/11] fix failed tests --- testutil/testdata/tx.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testutil/testdata/tx.go b/testutil/testdata/tx.go index d9b184ade84f..5d0051f41a6a 100644 --- a/testutil/testdata/tx.go +++ b/testutil/testdata/tx.go @@ -36,7 +36,7 @@ func NewTestFeeAmount() sdk.Coins { // NewTestGasLimit is a test fee gas limit. func NewTestGasLimit() uint64 { - return 150000 + return 200000 } // NewTestMsg creates a message for testing with the given signers. From 33c78639e65f3a2fc75b13e2d22139bfca5514ee Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Wed, 29 Sep 2021 16:28:30 +0530 Subject: [PATCH 09/11] try fix failing tests --- client/flags/flags.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/client/flags/flags.go b/client/flags/flags.go index 49b805534efd..70386a605635 100644 --- a/client/flags/flags.go +++ b/client/flags/flags.go @@ -15,7 +15,7 @@ const ( // failures due to state changes that might occur between the tx simulation // and the actual run. DefaultGasAdjustment = 1.0 - DefaultGasLimit = 200000 + DefaultGasLimit = 250000 GasFlagAuto = "auto" // DefaultKeyringBackend From f7ac1778b85c78e3271f630d6e8994124281b65f Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Thu, 30 Sep 2021 20:07:53 +0530 Subject: [PATCH 10/11] fix changelog --- CHANGELOG.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ba1b860b6b2d..8725be66d41b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -124,9 +124,7 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### Bug Fixes -* (store) [#10247](https://github.com/cosmos/cosmos-sdk/pull/10247) Charge gas for the key length in gas meter. * [#10180](https://github.com/cosmos/cosmos-sdk/issues/10180) Documentation: make references to Cosmos SDK consistent -* (store) [#10218](https://github.com/cosmos/cosmos-sdk/pull/10218) Charge gas even when there are no entries while seeking. * (x/genutil) [#10104](https://github.com/cosmos/cosmos-sdk/pull/10104) Ensure the `init` command reads the `--home` flag value correctly. * [\#9651](https://github.com/cosmos/cosmos-sdk/pull/9651) Change inconsistent limit of `0` to `MaxUint64` on InfiniteGasMeter and add GasRemaining func to GasMeter. * [\#9639](https://github.com/cosmos/cosmos-sdk/pull/9639) Check store keys length before accessing them by making sure that `key` is of length `m+1` (for `key[n:m]`) @@ -148,6 +146,8 @@ Ref: https://keepachangelog.com/en/1.0.0/ ### State Machine Breaking +* (store) [#10247](https://github.com/cosmos/cosmos-sdk/pull/10247) Charge gas for the key length in gas meter. +* (store) [#10218](https://github.com/cosmos/cosmos-sdk/pull/10218) Charge gas even when there are no entries while seeking. * (x/auth)[\#9596](https://github.com/cosmos/cosmos-sdk/pull/9596) Enable creating periodic vesting accounts with a transactions instead of requiring them to be created in genesis. * (x/bank) [\#9611](https://github.com/cosmos/cosmos-sdk/pull/9611) Introduce a new index to act as a reverse index between a denomination and address allowing to query for token holders of a specific denomination. `DenomOwners` is updated to use the new reverse index. From bda58343bb3ca4dd6250013cb419795b557b906b Mon Sep 17 00:00:00 2001 From: likhita-809 Date: Fri, 1 Oct 2021 11:09:09 +0530 Subject: [PATCH 11/11] add gas-limit flag manually --- client/flags/flags.go | 2 +- x/authz/client/testutil/tx.go | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/client/flags/flags.go b/client/flags/flags.go index 70386a605635..49b805534efd 100644 --- a/client/flags/flags.go +++ b/client/flags/flags.go @@ -15,7 +15,7 @@ const ( // failures due to state changes that might occur between the tx simulation // and the actual run. DefaultGasAdjustment = 1.0 - DefaultGasLimit = 250000 + DefaultGasLimit = 200000 GasFlagAuto = "auto" // DefaultKeyringBackend diff --git a/x/authz/client/testutil/tx.go b/x/authz/client/testutil/tx.go index b379533cf71a..dc4f1b00e281 100644 --- a/x/authz/client/testutil/tx.go +++ b/x/authz/client/testutil/tx.go @@ -971,6 +971,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { "valid txn: (undelegate half tokens)", []string{ execMsg.Name(), + fmt.Sprintf("--%s=%s", flags.FlagGas, "250000"), fmt.Sprintf("--%s=%s", flags.FlagFrom, grantee.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), @@ -984,6 +985,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { "valid txn: (undelegate remaining half tokens)", []string{ execMsg.Name(), + fmt.Sprintf("--%s=%s", flags.FlagGas, "250000"), fmt.Sprintf("--%s=%s", flags.FlagFrom, grantee.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), @@ -997,6 +999,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { "failed with error no authorization found", []string{ execMsg.Name(), + fmt.Sprintf("--%s=%s", flags.FlagGas, "250000"), fmt.Sprintf("--%s=%s", flags.FlagFrom, grantee.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), @@ -1061,6 +1064,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { "valid txn", []string{ execMsg.Name(), + fmt.Sprintf("--%s=%s", flags.FlagGas, "250000"), fmt.Sprintf("--%s=%s", flags.FlagFrom, grantee.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()), @@ -1074,6 +1078,7 @@ func (s *IntegrationTestSuite) TestExecUndelegateAuthorization() { "valid txn", []string{ execMsg.Name(), + fmt.Sprintf("--%s=%s", flags.FlagGas, "250000"), fmt.Sprintf("--%s=%s", flags.FlagFrom, grantee.String()), fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastBlock), fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.BondDenom, sdk.NewInt(10))).String()),