Skip to content

Commit 40a30b7

Browse files
authored
Update gas costs to more reasonable numbers for GoS (#3052)
1 parent 663e954 commit 40a30b7

File tree

9 files changed

+31
-45
lines changed

9 files changed

+31
-45
lines changed

PENDING.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ BREAKING CHANGES
1414
- [#128](https://github.com/tendermint/devops/issues/128) Updated CircleCI job to trigger website build on every push to master/develop.
1515
- [\#2994](https://github.com/cosmos/cosmos-sdk/pull/2994) Change wrong-password error message.
1616
- \#3009 Added missing Gaia genesis verification
17+
- [gas] \#3052 Updated gas costs to more reasonable numbers
1718

1819
* SDK
1920
- [auth] \#2952 Signatures are no longer serialized on chain with the account number and sequence number

scripts/multisim.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ sim() {
2222
file="$tmpdir/gaia-simulation-seed-$seed-date-$(date -u +"%Y-%m-%dT%H:%M:%S+00:00").stdout"
2323
echo "Writing stdout to $file..."
2424
go test ./cmd/gaia/app -run $testname -SimulationEnabled=true -SimulationNumBlocks=$blocks \
25-
-SimulationVerbose=true -SimulationCommit=true -SimulationSeed=$seed -v -timeout 24h > $file
25+
-SimulationVerbose=true -SimulationCommit=true -SimulationSeed=$seed -SimulationPeriod=5 -v -timeout 24h > $file
2626
}
2727

2828
i=0

store/gaskvstore.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,6 @@ func (gi *gasIterator) Close() {
179179
func (gi *gasIterator) consumeSeekGas() {
180180
value := gi.Value()
181181

182-
gi.gasMeter.ConsumeGas(gi.gasConfig.ValueCostPerByte*sdk.Gas(len(value)), sdk.GasValuePerByteDesc)
182+
gi.gasMeter.ConsumeGas(gi.gasConfig.ReadCostPerByte*sdk.Gas(len(value)), sdk.GasValuePerByteDesc)
183183
gi.gasMeter.ConsumeGas(gi.gasConfig.IterNextCostFlat, sdk.GasIterNextCostFlatDesc)
184184
}

store/gaskvstore_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,26 +12,26 @@ import (
1212
)
1313

1414
func newGasKVStore() KVStore {
15-
meter := sdk.NewGasMeter(1000)
15+
meter := sdk.NewGasMeter(10000)
1616
mem := dbStoreAdapter{dbm.NewMemDB()}
1717
return NewGasKVStore(meter, sdk.KVGasConfig(), mem)
1818
}
1919

2020
func TestGasKVStoreBasic(t *testing.T) {
2121
mem := dbStoreAdapter{dbm.NewMemDB()}
22-
meter := sdk.NewGasMeter(1000)
22+
meter := sdk.NewGasMeter(10000)
2323
st := NewGasKVStore(meter, sdk.KVGasConfig(), mem)
2424
require.Empty(t, st.Get(keyFmt(1)), "Expected `key1` to be empty")
2525
st.Set(keyFmt(1), valFmt(1))
2626
require.Equal(t, valFmt(1), st.Get(keyFmt(1)))
2727
st.Delete(keyFmt(1))
2828
require.Empty(t, st.Get(keyFmt(1)), "Expected `key1` to be empty")
29-
require.Equal(t, meter.GasConsumed(), sdk.Gas(193))
29+
require.Equal(t, meter.GasConsumed(), sdk.Gas(6429))
3030
}
3131

3232
func TestGasKVStoreIterator(t *testing.T) {
3333
mem := dbStoreAdapter{dbm.NewMemDB()}
34-
meter := sdk.NewGasMeter(1000)
34+
meter := sdk.NewGasMeter(10000)
3535
st := NewGasKVStore(meter, sdk.KVGasConfig(), mem)
3636
require.Empty(t, st.Get(keyFmt(1)), "Expected `key1` to be empty")
3737
require.Empty(t, st.Get(keyFmt(2)), "Expected `key2` to be empty")
@@ -50,7 +50,7 @@ func TestGasKVStoreIterator(t *testing.T) {
5050
iterator.Next()
5151
require.False(t, iterator.Valid())
5252
require.Panics(t, iterator.Next)
53-
require.Equal(t, meter.GasConsumed(), sdk.Gas(384))
53+
require.Equal(t, meter.GasConsumed(), sdk.Gas(6987))
5454
}
5555

5656
func TestGasKVStoreOutOfGasSet(t *testing.T) {
@@ -62,7 +62,7 @@ func TestGasKVStoreOutOfGasSet(t *testing.T) {
6262

6363
func TestGasKVStoreOutOfGasIterator(t *testing.T) {
6464
mem := dbStoreAdapter{dbm.NewMemDB()}
65-
meter := sdk.NewGasMeter(200)
65+
meter := sdk.NewGasMeter(20000)
6666
st := NewGasKVStore(meter, sdk.KVGasConfig(), mem)
6767
st.Set(keyFmt(1), valFmt(1))
6868
iterator := st.Iterator(nil, nil)
@@ -71,7 +71,7 @@ func TestGasKVStoreOutOfGasIterator(t *testing.T) {
7171
}
7272

7373
func testGasKVStoreWrap(t *testing.T, store KVStore) {
74-
meter := sdk.NewGasMeter(10000)
74+
meter := sdk.NewGasMeter(100000)
7575

7676
store = store.Gas(meter, sdk.GasConfig{HasCost: 10})
7777
require.Equal(t, uint64(0), meter.GasConsumed())

types/gas.go

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -140,21 +140,19 @@ type GasConfig struct {
140140
ReadCostPerByte Gas
141141
WriteCostFlat Gas
142142
WriteCostPerByte Gas
143-
ValueCostPerByte Gas
144143
IterNextCostFlat Gas
145144
}
146145

147146
// KVGasConfig returns a default gas config for KVStores.
148147
func KVGasConfig() GasConfig {
149148
return GasConfig{
150-
HasCost: 10,
151-
DeleteCost: 10,
152-
ReadCostFlat: 10,
153-
ReadCostPerByte: 1,
154-
WriteCostFlat: 10,
155-
WriteCostPerByte: 10,
156-
ValueCostPerByte: 1,
157-
IterNextCostFlat: 15,
149+
HasCost: 1000,
150+
DeleteCost: 1000,
151+
ReadCostFlat: 1000,
152+
ReadCostPerByte: 3,
153+
WriteCostFlat: 2000,
154+
WriteCostPerByte: 30,
155+
IterNextCostFlat: 30,
158156
}
159157
}
160158

x/auth/ante.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,13 +12,13 @@ import (
1212
)
1313

1414
const (
15-
memoCostPerByte sdk.Gas = 1
16-
ed25519VerifyCost = 59
17-
secp256k1VerifyCost = 100
18-
maxMemoCharacters = 100
15+
memoCostPerByte sdk.Gas = 3
16+
ed25519VerifyCost = 590
17+
secp256k1VerifyCost = 1000
18+
maxMemoCharacters = 256
1919

2020
// how much gas = 1 atom
21-
gasPerUnitCost = 1000
21+
gasPerUnitCost = 10000
2222

2323
// max total number of sigs per tx
2424
txSigLimit = 7

x/auth/ante_test.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package auth
22

33
import (
44
"fmt"
5+
"strings"
56
"testing"
67

78
codec "github.com/cosmos/cosmos-sdk/codec"
@@ -20,7 +21,7 @@ func newTestMsg(addrs ...sdk.AccAddress) *sdk.TestMsg {
2021
}
2122

2223
func newStdFee() StdFee {
23-
return NewStdFee(5000,
24+
return NewStdFee(50000,
2425
sdk.NewInt64Coin("atom", 150),
2526
)
2627
}
@@ -437,13 +438,13 @@ func TestAnteHandlerMemoGas(t *testing.T) {
437438
checkInvalidTx(t, anteHandler, ctx, tx, false, sdk.CodeOutOfGas)
438439

439440
// memo too large
440-
fee = NewStdFee(2001, sdk.NewInt64Coin("atom", 0))
441-
tx = newTestTxWithMemo(ctx, []sdk.Msg{msg}, privs, accnums, seqs, fee, "abcininasidniandsinasindiansdiansdinaisndiasndiadninsdabcininasidniandsinasindiansdiansdinaisndiasndiadninsdabcininasidniandsinasindiansdiansdinaisndiasndiadninsd")
441+
fee = NewStdFee(9000, sdk.NewInt64Coin("atom", 0))
442+
tx = newTestTxWithMemo(ctx, []sdk.Msg{msg}, privs, accnums, seqs, fee, strings.Repeat("01234567890", 500))
442443
checkInvalidTx(t, anteHandler, ctx, tx, false, sdk.CodeMemoTooLarge)
443444

444445
// tx with memo has enough gas
445-
fee = NewStdFee(1100, sdk.NewInt64Coin("atom", 0))
446-
tx = newTestTxWithMemo(ctx, []sdk.Msg{msg}, privs, accnums, seqs, fee, "abcininasidniandsinasindiansdiansdinaisndiasndiadninsd")
446+
fee = NewStdFee(9000, sdk.NewInt64Coin("atom", 0))
447+
tx = newTestTxWithMemo(ctx, []sdk.Msg{msg}, privs, accnums, seqs, fee, strings.Repeat("0123456789", 10))
447448
checkValidTx(t, anteHandler, ctx, tx, false)
448449
}
449450

@@ -706,8 +707,8 @@ func TestAdjustFeesByGas(t *testing.T) {
706707
args args
707708
want sdk.Coins
708709
}{
709-
{"nil coins", args{sdk.Coins{}, 10000}, sdk.Coins{}},
710-
{"nil coins", args{sdk.Coins{sdk.NewInt64Coin("A", 10), sdk.NewInt64Coin("B", 0)}, 10000}, sdk.Coins{sdk.NewInt64Coin("A", 20), sdk.NewInt64Coin("B", 10)}},
710+
{"nil coins", args{sdk.Coins{}, 100000}, sdk.Coins{}},
711+
{"nil coins", args{sdk.Coins{sdk.NewInt64Coin("A", 10), sdk.NewInt64Coin("B", 0)}, 100000}, sdk.Coins{sdk.NewInt64Coin("A", 20), sdk.NewInt64Coin("B", 10)}},
711712
}
712713
for _, tt := range tests {
713714
t.Run(tt.name, func(t *testing.T) {

x/auth/stdtx_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ func TestStdSignBytes(t *testing.T) {
4747
}{
4848
{
4949
args{"1234", 3, 6, defaultFee, []sdk.Msg{sdk.NewTestMsg(addr)}, "memo"},
50-
fmt.Sprintf("{\"account_number\":\"3\",\"chain_id\":\"1234\",\"fee\":{\"amount\":[{\"amount\":\"150\",\"denom\":\"atom\"}],\"gas\":\"5000\"},\"memo\":\"memo\",\"msgs\":[[\"%s\"]],\"sequence\":\"6\"}", addr),
50+
fmt.Sprintf("{\"account_number\":\"3\",\"chain_id\":\"1234\",\"fee\":{\"amount\":[{\"amount\":\"150\",\"denom\":\"atom\"}],\"gas\":\"50000\"},\"memo\":\"memo\",\"msgs\":[[\"%s\"]],\"sequence\":\"6\"}", addr),
5151
},
5252
}
5353
for i, tc := range tests {

x/bank/keeper.go

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,6 @@ import (
77
"github.com/cosmos/cosmos-sdk/x/auth"
88
)
99

10-
const (
11-
costGetCoins sdk.Gas = 10
12-
costHasCoins sdk.Gas = 10
13-
costSetCoins sdk.Gas = 100
14-
costSubtractCoins sdk.Gas = 10
15-
costAddCoins sdk.Gas = 10
16-
)
17-
1810
//-----------------------------------------------------------------------------
1911
// Keeper
2012

@@ -150,7 +142,6 @@ func (keeper BaseViewKeeper) HasCoins(ctx sdk.Context, addr sdk.AccAddress, amt
150142
//-----------------------------------------------------------------------------
151143

152144
func getCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress) sdk.Coins {
153-
ctx.GasMeter().ConsumeGas(costGetCoins, "getCoins")
154145
acc := am.GetAccount(ctx, addr)
155146
if acc == nil {
156147
return sdk.Coins{}
@@ -159,7 +150,6 @@ func getCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress) sdk.C
159150
}
160151

161152
func setCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress, amt sdk.Coins) sdk.Error {
162-
ctx.GasMeter().ConsumeGas(costSetCoins, "setCoins")
163153
acc := am.GetAccount(ctx, addr)
164154
if acc == nil {
165155
acc = am.NewAccountWithAddress(ctx, addr)
@@ -175,14 +165,11 @@ func setCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress, amt s
175165

176166
// HasCoins returns whether or not an account has at least amt coins.
177167
func hasCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress, amt sdk.Coins) bool {
178-
ctx.GasMeter().ConsumeGas(costHasCoins, "hasCoins")
179168
return getCoins(ctx, am, addr).IsAllGTE(amt)
180169
}
181170

182171
// SubtractCoins subtracts amt from the coins at the addr.
183172
func subtractCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) {
184-
ctx.GasMeter().ConsumeGas(costSubtractCoins, "subtractCoins")
185-
186173
oldCoins := getCoins(ctx, am, addr)
187174
newCoins, hasNeg := oldCoins.SafeMinus(amt)
188175
if hasNeg {
@@ -196,7 +183,6 @@ func subtractCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress,
196183

197184
// AddCoins adds amt to the coins at the addr.
198185
func addCoins(ctx sdk.Context, am auth.AccountKeeper, addr sdk.AccAddress, amt sdk.Coins) (sdk.Coins, sdk.Tags, sdk.Error) {
199-
ctx.GasMeter().ConsumeGas(costAddCoins, "addCoins")
200186
oldCoins := getCoins(ctx, am, addr)
201187
newCoins := oldCoins.Plus(amt)
202188
if !newCoins.IsNotNegative() {

0 commit comments

Comments
 (0)