From 9f181d1e82534593cd3e2af11eb2c7936f941b74 Mon Sep 17 00:00:00 2001
From: piux2 <90544084+piux2@users.noreply.github.com>
Date: Mon, 16 Dec 2024 17:03:49 -0800
Subject: [PATCH] feat: cpu and store gas updates (#3054)
## Summary:
This PR updates the CPU and Store gas based on results from the
benchmarking tool:https://github.com/gnolang/gno/pull/2241
For CPU gas, the measurement is in nanoseconds per opcode execution.
For storage gas, the measurement is in nanoseconds per byte for each
type of Gno store access.
## Changes:
We moved the gas meter from the underlying store to the upper Gno store
to capture accurate resource consumption for VM transactions. At the
same time, we retain the original gas store and gas meter for the Auth
Keeper to handle regular blockchain transactions that do not necessarily
involve the VM.
We also updated the gas-wanted in the integration test to reflect actual
gas usage. This can serve as a flag to alert us to future changes that
might increase gas assumptions.
Additional reasons for these changes include:
- The Gno VM store processes additional complex encoding and decoding of
data structures, rather than simply reading and writing bytes to disk.
- For the above reason, we benchmarked gas for store access at the Gno
store level.
- We want to avoid consuming gas at two points for a single store access
during a VM transaction.
Here are the diagrams to explain the store access gas before and after
changes
#### Before:
![image](https://github.com/user-attachments/assets/7f1f7361-623d-4bdf-ba28-9b337da649fc)
#### After:
![image](https://github.com/user-attachments/assets/c5ce6e36-e2f7-4f10-bebf-4278f9d16e47)
Contributors' checklist...
- [x] Added new tests
- [ ] Provided an example (e.g. screenshot) to aid review or the PR is
self-explanatory
- [ ] Updated the official documentation or not needed
- [ ] No breaking changes were made, or a `BREAKING CHANGE: xxx` message
was included in the description
- [x] Added references to related issues and PRs
- [ ] Provided any useful hints for running manual tests
---
.../gnoland/testdata/addpkg_namespace.txtar | 26 ++-
gno.land/cmd/gnoland/testdata/append.txtar | 34 +--
.../gnoland/testdata/assertorigincall.txtar | 36 +--
gno.land/cmd/gnoland/testdata/ghverify.txtar | 21 +-
.../testdata/grc20_invalid_address.txtar | 7 +-
.../cmd/gnoland/testdata/grc20_registry.txtar | 8 +-
.../cmd/gnoland/testdata/grc721_emit.txtar | 10 +-
.../cmd/gnoland/testdata/issue_1167.txtar | 12 +-
.../cmd/gnoland/testdata/issue_1786.txtar | 10 +-
gno.land/cmd/gnoland/testdata/prevrealm.txtar | 26 +--
.../testdata/restart_missing_type.txtar | 6 +-
.../cmd/gnoland/testdata/simulate_gas.txtar | 4 +-
.../cmd/gnoland/testdata/time_simple.txtar | 2 +-
gno.land/cmd/gnoland/testdata/wugnot.txtar | 18 +-
gno.land/pkg/gnoclient/integration_test.go | 16 +-
.../testdata/loadpkg_example.txtar | 4 +-
.../pkg/integration/testdata/restart.txtar | 5 +-
gno.land/pkg/keyscli/addpkg.go | 6 +
gno.land/pkg/sdk/vm/gas_test.go | 26 +--
gno.land/pkg/sdk/vm/keeper.go | 3 +-
gnovm/pkg/gnolang/machine.go | 205 +++++++++---------
gnovm/pkg/gnolang/preprocess.go | 4 +-
gnovm/pkg/gnolang/store.go | 80 ++++++-
gnovm/pkg/gnolang/store_test.go | 4 +-
gnovm/pkg/test/filetest.go | 4 +-
gnovm/pkg/test/test.go | 2 +-
tm2/pkg/sdk/auth/keeper.go | 10 +-
tm2/pkg/sdk/baseapp_test.go | 2 +-
tm2/pkg/sdk/context.go | 6 +-
29 files changed, 346 insertions(+), 251 deletions(-)
diff --git a/gno.land/cmd/gnoland/testdata/addpkg_namespace.txtar b/gno.land/cmd/gnoland/testdata/addpkg_namespace.txtar
index d207289e0ff..89da8a51820 100644
--- a/gno.land/cmd/gnoland/testdata/addpkg_namespace.txtar
+++ b/gno.land/cmd/gnoland/testdata/addpkg_namespace.txtar
@@ -14,70 +14,72 @@ gnoland start
# Check if sys/users is disabled
# gui call -> sys/users.IsEnable
-gnokey maketx call -pkgpath gno.land/r/sys/users -func IsEnabled -gas-fee 100000ugnot -gas-wanted 2000000 -broadcast -chainid tendermint_test gui
+gnokey maketx call -pkgpath gno.land/r/sys/users -func IsEnabled -gas-fee 100000ugnot -gas-wanted 200000 -broadcast -chainid tendermint_test gui
stdout 'OK!'
stdout 'false'
# Gui should be able to addpkg on test1 addr
# gui addpkg -> gno.land/r//mysuperpkg
-gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/$USER_ADDR_test1/mysuperpkg -gas-fee 1000000ugnot -gas-wanted 100000000 -broadcast -chainid=tendermint_test gui
+gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/$USER_ADDR_test1/mysuperpkg -gas-fee 1000000ugnot -gas-wanted 400000 -broadcast -chainid=tendermint_test gui
stdout 'OK!'
# Gui should be able to addpkg on random name
# gui addpkg -> gno.land/r/randomname/mysuperpkg
-gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/randomname/mysuperpkg -gas-fee 1000000ugnot -gas-wanted 100000000 -broadcast -chainid=tendermint_test gui
+gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/randomname/mysuperpkg -gas-fee 1000000ugnot -gas-wanted 350000 -broadcast -chainid=tendermint_test gui
stdout 'OK!'
## When `sys/users` is enabled
# Enable `sys/users`
# admin call -> sys/users.AdminEnable
-gnokey maketx call -pkgpath gno.land/r/sys/users -func AdminEnable -gas-fee 100000ugnot -gas-wanted 2000000 -broadcast -chainid tendermint_test admin
+gnokey maketx call -pkgpath gno.land/r/sys/users -func AdminEnable -gas-fee 100000ugnot -gas-wanted 1000000 -broadcast -chainid tendermint_test admin
stdout 'OK!'
# Check that `sys/users` has been enabled
# gui call -> sys/users.IsEnable
-gnokey maketx call -pkgpath gno.land/r/sys/users -func IsEnabled -gas-fee 100000ugnot -gas-wanted 2000000 -broadcast -chainid tendermint_test gui
+gnokey maketx call -pkgpath gno.land/r/sys/users -func IsEnabled -gas-fee 100000ugnot -gas-wanted 200000 -broadcast -chainid tendermint_test gui
stdout 'OK!'
stdout 'true'
# Try to add a pkg an with unregistered user
# gui addpkg -> gno.land/r//one
-! gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/$USER_ADDR_test1/one -gas-fee 1000000ugnot -gas-wanted 100000000 -broadcast -chainid=tendermint_test gui
+! gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/$USER_ADDR_test1/one -gas-fee 1000000ugnot -gas-wanted 1000000 -broadcast -chainid=tendermint_test gui
stderr 'unauthorized user'
# Try to add a pkg with an unregistered user, on their own address as namespace
# gui addpkg -> gno.land/r//one
-gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/$USER_ADDR_gui/one -gas-fee 1000000ugnot -gas-wanted 100000000 -broadcast -chainid=tendermint_test gui
+gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/$USER_ADDR_gui/one -gas-fee 1000000ugnot -gas-wanted 1000000 -broadcast -chainid=tendermint_test gui
stdout 'OK!'
## Test unregistered namespace
# Call addpkg with admin user on gui namespace
# admin addpkg -> gno.land/r/guiland/one
-! gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/guiland/one -gas-fee 1000000ugnot -gas-wanted 100000000 -broadcast -chainid=tendermint_test admin
+# This is expected to fail at the transaction simulation stage, which is why we set gas-wanted to 1.
+! gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/guiland/one -gas-fee 1000000ugnot -gas-wanted 1 -broadcast -chainid=tendermint_test admin
stderr 'unauthorized user'
## Test registered namespace
# Test admin invites gui
# admin call -> demo/users.Invite
-gnokey maketx call -pkgpath gno.land/r/demo/users -func Invite -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test -args $USER_ADDR_gui admin
+gnokey maketx call -pkgpath gno.land/r/demo/users -func Invite -gas-fee 1000000ugnot -gas-wanted 2500000 -broadcast -chainid=tendermint_test -args $USER_ADDR_gui admin
stdout 'OK!'
# test gui register namespace
# gui call -> demo/users.Register
-gnokey maketx call -pkgpath gno.land/r/demo/users -func Register -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test -args $USER_ADDR_admin -args 'guiland' -args 'im gui' gui
+gnokey maketx call -pkgpath gno.land/r/demo/users -func Register -gas-fee 1000000ugnot -gas-wanted 2500000 -broadcast -chainid=tendermint_test -args $USER_ADDR_admin -args 'guiland' -args 'im gui' gui
stdout 'OK!'
# Test gui publishing on guiland/one
# gui addpkg -> gno.land/r/guiland/one
-gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/guiland/one -gas-fee 1000000ugnot -gas-wanted 100000000 -broadcast -chainid=tendermint_test gui
+gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/guiland/one -gas-fee 1000000ugnot -gas-wanted 1700000 -broadcast -chainid=tendermint_test gui
stdout 'OK!'
# Test admin publishing on guiland/two
# admin addpkg -> gno.land/r/guiland/two
-! gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/guiland/two -gas-fee 1000000ugnot -gas-wanted 100000000 -broadcast -chainid=tendermint_test admin
+# This is expected to fail at the transaction simulation stage, which is why we set gas-wanted to 1.
+! gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/guiland/two -gas-fee 1000000ugnot -gas-wanted 1 -broadcast -chainid=tendermint_test admin
stderr 'unauthorized user'
-- one.gno --
diff --git a/gno.land/cmd/gnoland/testdata/append.txtar b/gno.land/cmd/gnoland/testdata/append.txtar
index 3450b3e9b32..c5c5272d3be 100644
--- a/gno.land/cmd/gnoland/testdata/append.txtar
+++ b/gno.land/cmd/gnoland/testdata/append.txtar
@@ -3,69 +3,69 @@ loadpkg gno.land/p/demo/ufmt
# start a new node
gnoland start
-gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/append -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/append -gas-fee 1000000ugnot -gas-wanted 9000000 -broadcast -chainid=tendermint_test test1
stdout OK!
# Call Append 1
-gnokey maketx call -pkgpath gno.land/r/append -func Append -gas-fee 1000000ugnot -gas-wanted 4000000 -args '1' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Append -gas-fee 1000000ugnot -gas-wanted 300000 -args '1' -broadcast -chainid=tendermint_test test1
stdout OK!
-gnokey maketx call -pkgpath gno.land/r/append -func AppendNil -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func AppendNil -gas-fee 1000000ugnot -gas-wanted 300000 -broadcast -chainid=tendermint_test test1
stdout OK!
# Call Append 2
-gnokey maketx call -pkgpath gno.land/r/append -func Append -gas-fee 1000000ugnot -gas-wanted 4000000 -args '2' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Append -gas-fee 1000000ugnot -gas-wanted 300000 -args '2' -broadcast -chainid=tendermint_test test1
stdout OK!
# Call Append 3
-gnokey maketx call -pkgpath gno.land/r/append -func Append -gas-fee 1000000ugnot -gas-wanted 4000000 -args '3' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Append -gas-fee 1000000ugnot -gas-wanted 300000 -args '3' -broadcast -chainid=tendermint_test test1
stdout OK!
# Call render
-gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 4000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 1500000 -args '' -broadcast -chainid=tendermint_test test1
stdout '("1-2-3-" string)'
stdout OK!
# Call Pop
-gnokey maketx call -pkgpath gno.land/r/append -func Pop -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Pop -gas-fee 1000000ugnot -gas-wanted 300000 -broadcast -chainid=tendermint_test test1
stdout OK!
# Call render
-gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 4000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 1500000 -args '' -broadcast -chainid=tendermint_test test1
stdout '("2-3-" string)'
stdout OK!
# Call Append 42
-gnokey maketx call -pkgpath gno.land/r/append -func Append -gas-fee 1000000ugnot -gas-wanted 4000000 -args '42' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Append -gas-fee 1000000ugnot -gas-wanted 300000 -args '42' -broadcast -chainid=tendermint_test test1
stdout OK!
# Call render
-gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 4000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 1500000 -args '' -broadcast -chainid=tendermint_test test1
stdout '("2-3-42-" string)'
stdout OK!
-gnokey maketx call -pkgpath gno.land/r/append -func CopyAppend -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func CopyAppend -gas-fee 1000000ugnot -gas-wanted 300000 -broadcast -chainid=tendermint_test test1
stdout OK!
-gnokey maketx call -pkgpath gno.land/r/append -func PopB -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func PopB -gas-fee 1000000ugnot -gas-wanted 350000 -broadcast -chainid=tendermint_test test1
stdout OK!
# Call render
-gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 4000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 1500000 -args '' -broadcast -chainid=tendermint_test test1
stdout '("2-3-42-" string)'
stdout OK!
-gnokey maketx call -pkgpath gno.land/r/append -func AppendMoreAndC -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func AppendMoreAndC -gas-fee 1000000ugnot -gas-wanted 350000 -broadcast -chainid=tendermint_test test1
stdout OK!
-gnokey maketx call -pkgpath gno.land/r/append -func ReassignC -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func ReassignC -gas-fee 1000000ugnot -gas-wanted 350000 -broadcast -chainid=tendermint_test test1
stdout OK!
-gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 4000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 1500000 -args '' -broadcast -chainid=tendermint_test test1
stdout '("2-3-42-70-100-" string)'
stdout OK!
-gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 4000000 -args 'd' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/append -func Render -gas-fee 1000000ugnot -gas-wanted 1500000 -args 'd' -broadcast -chainid=tendermint_test test1
stdout '("1-" string)'
stdout OK!
diff --git a/gno.land/cmd/gnoland/testdata/assertorigincall.txtar b/gno.land/cmd/gnoland/testdata/assertorigincall.txtar
index 1a5664d6bef..2c4a27f9d06 100644
--- a/gno.land/cmd/gnoland/testdata/assertorigincall.txtar
+++ b/gno.land/cmd/gnoland/testdata/assertorigincall.txtar
@@ -31,29 +31,31 @@ loadpkg gno.land/r/foo $WORK/r/foo
loadpkg gno.land/p/demo/bar $WORK/p/demo/bar
gnoland start
+# The PANIC is expected to fail at the transaction simulation stage, which is why we set gas-wanted to 1.
+
# Test cases
## 1. MsgCall -> myrlm.A: PANIC
-! gnokey maketx call -pkgpath gno.land/r/myrlm -func A -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+! gnokey maketx call -pkgpath gno.land/r/myrlm -func A -gas-fee 100000ugnot -gas-wanted 1 -broadcast -chainid tendermint_test test1
stderr 'invalid non-origin call'
## 2. MsgCall -> myrlm.B: PASS
-gnokey maketx call -pkgpath gno.land/r/myrlm -func B -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/myrlm -func B -gas-fee 100000ugnot -gas-wanted 150000 -broadcast -chainid tendermint_test test1
stdout 'OK!'
## 3. MsgCall -> myrlm.C: PASS
-gnokey maketx call -pkgpath gno.land/r/myrlm -func C -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/myrlm -func C -gas-fee 100000ugnot -gas-wanted 700000 -broadcast -chainid tendermint_test test1
stdout 'OK!'
## 4. MsgCall -> r/foo.A -> myrlm.A: PANIC
-! gnokey maketx call -pkgpath gno.land/r/foo -func A -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+! gnokey maketx call -pkgpath gno.land/r/foo -func A -gas-fee 100000ugnot -gas-wanted 1 -broadcast -chainid tendermint_test test1
stderr 'invalid non-origin call'
## 5. MsgCall -> r/foo.B -> myrlm.B: PASS
-gnokey maketx call -pkgpath gno.land/r/foo -func B -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/foo -func B -gas-fee 100000ugnot -gas-wanted 200000 -broadcast -chainid tendermint_test test1
stdout 'OK!'
## 6. MsgCall -> r/foo.C -> myrlm.C: PANIC
-! gnokey maketx call -pkgpath gno.land/r/foo -func C -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+! gnokey maketx call -pkgpath gno.land/r/foo -func C -gas-fee 100000ugnot -gas-wanted 10000000 -broadcast -chainid tendermint_test test1
stderr 'invalid non-origin call'
## remove due to update to maketx call can only call realm (case 7,8,9)
@@ -70,48 +72,48 @@ stderr 'invalid non-origin call'
## stderr 'invalid non-origin call'
## 10. MsgRun -> run.main -> myrlm.A: PANIC
-! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmA.gno
+! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5500000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmA.gno
stderr 'invalid non-origin call'
## 11. MsgRun -> run.main -> myrlm.B: PASS
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmB.gno
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 10000000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmB.gno
stdout 'OK!'
## 12. MsgRun -> run.main -> myrlm.C: PANIC
-! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmC.gno
+! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5500000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmC.gno
stderr 'invalid non-origin call'
## 13. MsgRun -> run.main -> foo.A: PANIC
-! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/fooA.gno
+! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5500000 -broadcast -chainid tendermint_test test1 $WORK/run/fooA.gno
stderr 'invalid non-origin call'
## 14. MsgRun -> run.main -> foo.B: PASS
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/fooB.gno
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 10000000 -broadcast -chainid tendermint_test test1 $WORK/run/fooB.gno
stdout 'OK!'
## 15. MsgRun -> run.main -> foo.C: PANIC
-! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/fooC.gno
+! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5500000 -broadcast -chainid tendermint_test test1 $WORK/run/fooC.gno
stderr 'invalid non-origin call'
## 16. MsgRun -> run.main -> bar.A: PANIC
-! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/barA.gno
+! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5500000 -broadcast -chainid tendermint_test test1 $WORK/run/barA.gno
stderr 'invalid non-origin call'
## 17. MsgRun -> run.main -> bar.B: PASS
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/barB.gno
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 10000000 -broadcast -chainid tendermint_test test1 $WORK/run/barB.gno
stdout 'OK!'
## 18. MsgRun -> run.main -> bar.C: PANIC
-! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/barC.gno
+! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5500000 -broadcast -chainid tendermint_test test1 $WORK/run/barC.gno
stderr 'invalid non-origin call'
## remove testcase 19 due to maketx call forced to call a realm
## 19. MsgCall -> std.AssertOriginCall: pass
-## gnokey maketx call -pkgpath std -func AssertOriginCall -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+## gnokey maketx call -pkgpath std -func AssertOriginCall -gas-fee 100000ugnot -gas-wanted 10000000 -broadcast -chainid tendermint_test test1
## stdout 'OK!'
## 20. MsgRun -> std.AssertOriginCall: PANIC
-! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/baz.gno
+! gnokey maketx run -gas-fee 100000ugnot -gas-wanted 10000000 -broadcast -chainid tendermint_test test1 $WORK/run/baz.gno
stderr 'invalid non-origin call'
diff --git a/gno.land/cmd/gnoland/testdata/ghverify.txtar b/gno.land/cmd/gnoland/testdata/ghverify.txtar
index f8cd05c762f..b53849e85b5 100644
--- a/gno.land/cmd/gnoland/testdata/ghverify.txtar
+++ b/gno.land/cmd/gnoland/testdata/ghverify.txtar
@@ -4,36 +4,37 @@ loadpkg gno.land/r/gnoland/ghverify
gnoland start
# make a verification request
-gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func RequestVerification -args 'deelawn' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func RequestVerification -args 'deelawn' -gas-fee 1000000ugnot -gas-wanted 3500000 -broadcast -chainid=tendermint_test test1
stdout OK!
# request tasks to complete (this is done by the agent)
-gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GnorkleEntrypoint -args 'request' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GnorkleEntrypoint -args 'request' -gas-fee 1000000ugnot -gas-wanted 6000000 -broadcast -chainid=tendermint_test test1
stdout '\("\[\{\\"id\\":\\"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5\\",\\"type\\":\\"0\\",\\"value_type\\":\\"string\\",\\"tasks\\":\[\{\\"gno_address\\":\\"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5\\",\\"github_handle\\":\\"deelawn\\"\}\]\}\]" string\)'
# a verification request was made but there should be no verified address
-gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GetHandleByAddress -args 'g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GetHandleByAddress -args 'g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5' -gas-fee 1000000ugnot -gas-wanted 700000 -broadcast -chainid=tendermint_test test1
stdout ""
# a verification request was made but there should be no verified handle
-gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GetAddressByHandle -args 'deelawn' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GetAddressByHandle -args 'deelawn' -gas-fee 1000000ugnot -gas-wanted 700000 -broadcast -chainid=tendermint_test test1
stdout ""
# fail on ingestion with a bad task ID
-! gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GnorkleEntrypoint -args 'ingest,a' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+# This is expected to fail at the transaction simulation stage, which is why we set gas-wanted to 1.
+! gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GnorkleEntrypoint -args 'ingest,a' -gas-fee 1000000ugnot -gas-wanted 1 -broadcast -chainid=tendermint_test test1
stderr 'invalid ingest id: a'
# the agent publishes their response to the task and the verification is complete
-gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GnorkleEntrypoint -args 'ingest,g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5,OK' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GnorkleEntrypoint -args 'ingest,g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5,OK' -gas-fee 1000000ugnot -gas-wanted 5000000 -broadcast -chainid=tendermint_test test1
stdout OK!
# get verified github handle by gno address
-gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GetHandleByAddress -args 'g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GetHandleByAddress -args 'g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5' -gas-fee 1000000ugnot -gas-wanted 700000 -broadcast -chainid=tendermint_test test1
stdout "deelawn"
# get verified gno address by github handle
-gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GetAddressByHandle -args 'deelawn' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func GetAddressByHandle -args 'deelawn' -gas-fee 1000000ugnot -gas-wanted 700000 -broadcast -chainid=tendermint_test test1
stdout "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5"
-gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func Render -args '' -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
-stdout '\("\{\\"deelawn\\": \\"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5\\"\}" string\)'
\ No newline at end of file
+gnokey maketx call -pkgpath gno.land/r/gnoland/ghverify -func Render -args '' -gas-fee 1000000ugnot -gas-wanted 700000 -broadcast -chainid=tendermint_test test1
+stdout '\("\{\\"deelawn\\": \\"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5\\"\}" string\)'
diff --git a/gno.land/cmd/gnoland/testdata/grc20_invalid_address.txtar b/gno.land/cmd/gnoland/testdata/grc20_invalid_address.txtar
index da903315333..d3dcc86725c 100644
--- a/gno.land/cmd/gnoland/testdata/grc20_invalid_address.txtar
+++ b/gno.land/cmd/gnoland/testdata/grc20_invalid_address.txtar
@@ -4,9 +4,10 @@ loadpkg gno.land/r/demo/foo20
gnoland start
# execute Faucet
-gnokey maketx call -pkgpath gno.land/r/demo/foo20 -func Faucet -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/foo20 -func Faucet -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
stdout 'OK!'
# execute Transfer for invalid address
-! gnokey maketx call -pkgpath gno.land/r/demo/foo20 -func Transfer -args g1ubwj0apf60hd90txhnh855fkac34rxlsvua0aa -args 1 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
-stderr '"gnokey" error: --= Error =--\nData: invalid address'
\ No newline at end of file
+# This is expected to fail at the transaction simulation stage, which is why we set gas-wanted to 1.
+! gnokey maketx call -pkgpath gno.land/r/demo/foo20 -func Transfer -args g1ubwj0apf60hd90txhnh855fkac34rxlsvua0aa -args 1 -gas-fee 1000000ugnot -gas-wanted 1 -broadcast -chainid=tendermint_test test1
+stderr '"gnokey" error: --= Error =--\nData: invalid address'
diff --git a/gno.land/cmd/gnoland/testdata/grc20_registry.txtar b/gno.land/cmd/gnoland/testdata/grc20_registry.txtar
index 417ab04539d..df11e92f8db 100644
--- a/gno.land/cmd/gnoland/testdata/grc20_registry.txtar
+++ b/gno.land/cmd/gnoland/testdata/grc20_registry.txtar
@@ -6,15 +6,15 @@ loadpkg gno.land/r/registry $WORK/registry
gnoland start
# we call Transfer with foo20, before it's registered
-gnokey maketx call -pkgpath gno.land/r/registry -func TransferByName -args 'foo20' -args 'g123456789' -args '42' -gas-fee 1000000ugnot -gas-wanted 5000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/registry -func TransferByName -args 'foo20' -args 'g123456789' -args '42' -gas-fee 1000000ugnot -gas-wanted 150000 -broadcast -chainid=tendermint_test test1
stdout 'not found'
# add foo20, and foo20wrapper
-gnokey maketx addpkg -pkgdir $WORK/foo20 -pkgpath gno.land/r/foo20 -gas-fee 1000000ugnot -gas-wanted 5000000 -broadcast -chainid=tendermint_test test1
-gnokey maketx addpkg -pkgdir $WORK/foo20wrapper -pkgpath gno.land/r/foo20wrapper -gas-fee 1000000ugnot -gas-wanted 5000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx addpkg -pkgdir $WORK/foo20 -pkgpath gno.land/r/foo20 -gas-fee 1000000ugnot -gas-wanted 10000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx addpkg -pkgdir $WORK/foo20wrapper -pkgpath gno.land/r/foo20wrapper -gas-fee 1000000ugnot -gas-wanted 10000000 -broadcast -chainid=tendermint_test test1
# we call Transfer with foo20, after it's registered
-gnokey maketx call -pkgpath gno.land/r/registry -func TransferByName -args 'foo20' -args 'g123456789' -args '42' -gas-fee 1000000ugnot -gas-wanted 5000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/registry -func TransferByName -args 'foo20' -args 'g123456789' -args '42' -gas-fee 1000000ugnot -gas-wanted 800000 -broadcast -chainid=tendermint_test test1
stdout 'same address, success!'
-- registry/registry.gno --
diff --git a/gno.land/cmd/gnoland/testdata/grc721_emit.txtar b/gno.land/cmd/gnoland/testdata/grc721_emit.txtar
index 9836e81a9be..6b4770e37c6 100644
--- a/gno.land/cmd/gnoland/testdata/grc721_emit.txtar
+++ b/gno.land/cmd/gnoland/testdata/grc721_emit.txtar
@@ -6,23 +6,23 @@ loadpkg gno.land/r/foo721 $WORK/foo721
gnoland start
# Mint
-gnokey maketx call -pkgpath gno.land/r/foo721 -func Mint -args g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5 -args 1 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/foo721 -func Mint -args g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5 -args 1 -gas-fee 1000000ugnot -gas-wanted 3500000 -broadcast -chainid=tendermint_test test1
stdout '\[{\"type\":\"Mint\",\"attrs\":\[{\"key\":\"to\",\"value\":\"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5\"},{\"key\":\"tokenId\",\"value\":\"1\"}],\"pkg_path\":\"gno.land\/r\/foo721\",\"func\":\"mint\"}\]'
# Approve
-gnokey maketx call -pkgpath gno.land/r/foo721 -func Approve -args g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj -args 1 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/foo721 -func Approve -args g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj -args 1 -gas-fee 1000000ugnot -gas-wanted 3500000 -broadcast -chainid=tendermint_test test1
stdout '\[{\"type\":\"Approval\",\"attrs\":\[{\"key\":\"owner\",\"value\":\"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5\"},{\"key\":\"to\",\"value\":\"g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj\"},{\"key\":\"tokenId\",\"value\":\"1\"}],\"pkg_path\":\"gno.land\/r\/foo721\",\"func\":\"Approve\"}\]'
# SetApprovalForAll
-gnokey maketx call -pkgpath gno.land/r/foo721 -func SetApprovalForAll -args g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj -args false -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/foo721 -func SetApprovalForAll -args g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj -args false -gas-fee 1000000ugnot -gas-wanted 3500000 -broadcast -chainid=tendermint_test test1
stdout '\[{\"type\":\"ApprovalForAll\",\"attrs\":\[{\"key\":\"owner\",\"value\":\"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5\"},{\"key\":\"to\",\"value\":\"g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj\"},{\"key\":\"approved\",\"value\":\"false\"}],\"pkg_path\":\"gno\.land/r/foo721\",\"func\":\"setApprovalForAll\"}\]'
# TransferFrom
-gnokey maketx call -pkgpath gno.land/r/foo721 -func TransferFrom -args g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5 -args g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj -args 1 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/foo721 -func TransferFrom -args g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5 -args g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj -args 1 -gas-fee 1000000ugnot -gas-wanted 3500000 -broadcast -chainid=tendermint_test test1
stdout '\[{\"type\":\"Transfer\",\"attrs\":\[{\"key\":\"from\",\"value\":\"g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5\"},{\"key\":\"to\",\"value\":\"g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj\"},{\"key\":\"tokenId\",\"value\":\"1\"}],\"pkg_path\":\"gno\.land/r/foo721\",\"func\":\"transfer\"}\]'
# Burn
-gnokey maketx call -pkgpath gno.land/r/foo721 -func Burn -args 1 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/foo721 -func Burn -args 1 -gas-fee 1000000ugnot -gas-wanted 3500000 -broadcast -chainid=tendermint_test test1
stdout '\[{\"type\":\"Burn\",\"attrs\":\[{\"key\":\"from\",\"value\":\"g1us8428u2a5satrlxzagqqa5m6vmuze025anjlj\"},{\"key\":\"tokenId\",\"value\":\"1\"}],\"pkg_path\":\"gno\.land/r/foo721\",\"func\":\"Burn\"}\]'
diff --git a/gno.land/cmd/gnoland/testdata/issue_1167.txtar b/gno.land/cmd/gnoland/testdata/issue_1167.txtar
index 73febb0235a..7e33d61e9cd 100644
--- a/gno.land/cmd/gnoland/testdata/issue_1167.txtar
+++ b/gno.land/cmd/gnoland/testdata/issue_1167.txtar
@@ -4,30 +4,30 @@ loadpkg gno.land/p/demo/avl
gnoland start
# add contract
-gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/demo/xx -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/demo/xx -gas-fee 1000000ugnot -gas-wanted 8000000 -broadcast -chainid=tendermint_test test1
stdout OK!
# execute New
-gnokey maketx call -pkgpath gno.land/r/demo/xx -func New -args X -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/xx -func New -args X -gas-fee 1000000ugnot -gas-wanted 700000 -broadcast -chainid=tendermint_test test1
stdout OK!
# execute Delta for the first time
-gnokey maketx call -pkgpath gno.land/r/demo/xx -func Delta -args X -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/xx -func Delta -args X -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
stdout OK!
stdout '"1,1,1;" string'
# execute Delta for the second time
-gnokey maketx call -pkgpath gno.land/r/demo/xx -func Delta -args X -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/xx -func Delta -args X -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
stdout OK!
stdout '1,1,1;2,2,2;" string'
# execute Delta for the third time
-gnokey maketx call -pkgpath gno.land/r/demo/xx -func Delta -args X -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/xx -func Delta -args X -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
stdout OK!
stdout '1,1,1;2,2,2;3,3,3;" string'
# execute Render
-gnokey maketx call -pkgpath gno.land/r/demo/xx -func Render -args X -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/xx -func Render -args X -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
stdout OK!
stdout '1,1,1;2,2,2;3,3,3;" string'
diff --git a/gno.land/cmd/gnoland/testdata/issue_1786.txtar b/gno.land/cmd/gnoland/testdata/issue_1786.txtar
index 7c92e81dfb6..0e66a882a6d 100644
--- a/gno.land/cmd/gnoland/testdata/issue_1786.txtar
+++ b/gno.land/cmd/gnoland/testdata/issue_1786.txtar
@@ -5,24 +5,24 @@ loadpkg gno.land/r/demo/wugnot
gnoland start
# add contract
-gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/demo/proxywugnot -gas-fee 1000000ugnot -gas-wanted 6000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/demo/proxywugnot -gas-fee 1000000ugnot -gas-wanted 16000000 -broadcast -chainid=tendermint_test test1
stdout OK!
# approve wugnot to `proxywugnot ≈ g1fndyg0we60rdfchyy5dwxzkfmhl5u34j932rg3`
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Approve -args "g1fndyg0we60rdfchyy5dwxzkfmhl5u34j932rg3" -args 10000 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Approve -args "g1fndyg0we60rdfchyy5dwxzkfmhl5u34j932rg3" -args 10000 -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
stdout OK!
# send 10000ugnot to `proxywugnot` to wrap it
-gnokey maketx call -pkgpath gno.land/r/demo/proxywugnot --send "10000ugnot" -func ProxyWrap -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/proxywugnot --send "10000ugnot" -func ProxyWrap -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
stdout OK!
# check user's wugnot balance
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func BalanceOf -args "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5" -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func BalanceOf -args "g1jg8mtutu9khhfwc4nxmuhcpftf0pajdhfvsqf5" -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
stdout OK!
stdout '10000 uint64'
# unwrap 500 wugnot
-gnokey maketx call -pkgpath gno.land/r/demo/proxywugnot -func ProxyUnwrap -args 500 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/proxywugnot -func ProxyUnwrap -args 500 -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
# XXX without patching anything it will panic
# panic msg: insufficient coins error
diff --git a/gno.land/cmd/gnoland/testdata/prevrealm.txtar b/gno.land/cmd/gnoland/testdata/prevrealm.txtar
index 58b0cdce1d6..20317d87345 100644
--- a/gno.land/cmd/gnoland/testdata/prevrealm.txtar
+++ b/gno.land/cmd/gnoland/testdata/prevrealm.txtar
@@ -34,19 +34,19 @@ env RFOO_ADDR=g1evezrh92xaucffmtgsaa3rvmz5s8kedffsg469
# Test cases
## 1. MsgCall -> myrlm.A: user address
-gnokey maketx call -pkgpath gno.land/r/myrlm -func A -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/myrlm -func A -gas-fee 100000ugnot -gas-wanted 700000 -broadcast -chainid tendermint_test test1
stdout ${USER_ADDR_test1}
## 2. MsgCall -> myrealm.B -> myrlm.A: user address
-gnokey maketx call -pkgpath gno.land/r/myrlm -func B -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/myrlm -func B -gas-fee 100000ugnot -gas-wanted 800000 -broadcast -chainid tendermint_test test1
stdout ${USER_ADDR_test1}
## 3. MsgCall -> r/foo.A -> myrlm.A: r/foo
-gnokey maketx call -pkgpath gno.land/r/foo -func A -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/foo -func A -gas-fee 100000ugnot -gas-wanted 800000 -broadcast -chainid tendermint_test test1
stdout ${RFOO_ADDR}
## 4. MsgCall -> r/foo.B -> myrlm.B -> r/foo.A: r/foo
-gnokey maketx call -pkgpath gno.land/r/foo -func B -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/foo -func B -gas-fee 100000ugnot -gas-wanted 800000 -broadcast -chainid tendermint_test test1
stdout ${RFOO_ADDR}
## remove due to update to maketx call can only call realm (case 5, 6, 13)
@@ -59,27 +59,27 @@ stdout ${RFOO_ADDR}
## stdout ${USER_ADDR_test1}
## 7. MsgRun -> myrlm.A: user address
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmA.gno
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 12000000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmA.gno
stdout ${USER_ADDR_test1}
## 8. MsgRun -> myrealm.B -> myrlm.A: user address
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmB.gno
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 12000000 -broadcast -chainid tendermint_test test1 $WORK/run/myrlmB.gno
stdout ${USER_ADDR_test1}
## 9. MsgRun -> r/foo.A -> myrlm.A: r/foo
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/fooA.gno
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 12000000 -broadcast -chainid tendermint_test test1 $WORK/run/fooA.gno
stdout ${RFOO_ADDR}
## 10. MsgRun -> r/foo.B -> myrlm.B -> r/foo.A: r/foo
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/fooB.gno
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 12000000 -broadcast -chainid tendermint_test test1 $WORK/run/fooB.gno
stdout ${RFOO_ADDR}
-## 11. MsgRun -> p/demo/bar.A: user address
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/barA.gno
+## 11. MsgRun -> p/demo/bar.A -> myrlm.A: user address
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 12000000 -broadcast -chainid tendermint_test test1 $WORK/run/barA.gno
stdout ${USER_ADDR_test1}
-## 12. MsgRun -> p/demo/bar.B: user address
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/barB.gno
+## 12. MsgRun -> p/demo/bar.B -> myrlm.B -> r/foo.A: user address
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 12000000 -broadcast -chainid tendermint_test test1 $WORK/run/barB.gno
stdout ${USER_ADDR_test1}
## 13. MsgCall -> std.PrevRealm(): user address
@@ -87,7 +87,7 @@ stdout ${USER_ADDR_test1}
## stdout ${USER_ADDR_test1}
## 14. MsgRun -> std.PrevRealm(): user address
-gnokey maketx run -gas-fee 100000ugnot -gas-wanted 5000000 -broadcast -chainid tendermint_test test1 $WORK/run/baz.gno
+gnokey maketx run -gas-fee 100000ugnot -gas-wanted 12000000 -broadcast -chainid tendermint_test test1 $WORK/run/baz.gno
stdout ${USER_ADDR_test1}
-- r/myrlm/myrlm.gno --
diff --git a/gno.land/cmd/gnoland/testdata/restart_missing_type.txtar b/gno.land/cmd/gnoland/testdata/restart_missing_type.txtar
index c492f1c6646..b02acc16d96 100644
--- a/gno.land/cmd/gnoland/testdata/restart_missing_type.txtar
+++ b/gno.land/cmd/gnoland/testdata/restart_missing_type.txtar
@@ -87,7 +87,7 @@ gnoland restart
}
],
"fee": {
- "gas_wanted": "1000000",
+ "gas_wanted": "30000000",
"gas_fee": "1000000ugnot"
},
"signatures": [],
@@ -162,7 +162,7 @@ gnoland restart
}
],
"fee": {
- "gas_wanted": "20000000",
+ "gas_wanted": "35000000",
"gas_fee": "1000000ugnot"
},
"signatures": [],
@@ -193,7 +193,7 @@ gnoland restart
}
],
"fee": {
- "gas_wanted": "16000000",
+ "gas_wanted": "30000000",
"gas_fee": "1000000ugnot"
},
"signatures": [],
diff --git a/gno.land/cmd/gnoland/testdata/simulate_gas.txtar b/gno.land/cmd/gnoland/testdata/simulate_gas.txtar
index 9d3c8abe69f..8550419f205 100644
--- a/gno.land/cmd/gnoland/testdata/simulate_gas.txtar
+++ b/gno.land/cmd/gnoland/testdata/simulate_gas.txtar
@@ -6,11 +6,11 @@ gnoland start
# simulate only
gnokey maketx call -pkgpath gno.land/r/simulate -func Hello -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test -simulate only test1
-stdout 'GAS USED: 51299'
+stdout 'GAS USED: 96411'
# simulate skip
gnokey maketx call -pkgpath gno.land/r/simulate -func Hello -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test -simulate skip test1
-stdout 'GAS USED: 51299' # same as simulate only
+stdout 'GAS USED: 96411' # same as simulate only
-- package/package.gno --
diff --git a/gno.land/cmd/gnoland/testdata/time_simple.txtar b/gno.land/cmd/gnoland/testdata/time_simple.txtar
index 932a5721695..ace34fa00a5 100644
--- a/gno.land/cmd/gnoland/testdata/time_simple.txtar
+++ b/gno.land/cmd/gnoland/testdata/time_simple.txtar
@@ -3,7 +3,7 @@
gnoland start
-gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/time_simple -gas-fee 1ugnot -gas-wanted 10000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/time_simple -gas-fee 1ugnot -gas-wanted 15000000 -broadcast -chainid=tendermint_test test1
stdout OK!
-- time_simple.gno --
diff --git a/gno.land/cmd/gnoland/testdata/wugnot.txtar b/gno.land/cmd/gnoland/testdata/wugnot.txtar
index 1640909fdb9..5fa7dab2945 100644
--- a/gno.land/cmd/gnoland/testdata/wugnot.txtar
+++ b/gno.land/cmd/gnoland/testdata/wugnot.txtar
@@ -2,44 +2,44 @@ loadpkg gno.land/r/demo/wugnot
gnoland start
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 2000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 5000000 -args '' -broadcast -chainid=tendermint_test test1
stdout '# wrapped GNOT \(\$wugnot\)'
stdout 'Decimals..: 0'
stdout 'Total supply..: 0'
stdout 'Known accounts..: 0'
stdout 'OK!'
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Deposit -send 12345678ugnot -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Deposit -send 12345678ugnot -gas-fee 1000000ugnot -gas-wanted 5000000 -broadcast -chainid=tendermint_test test1
stdout 'OK!'
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 2000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 5000000 -args '' -broadcast -chainid=tendermint_test test1
stdout 'Total supply..: 12345678'
stdout 'Known accounts..: 1'
stdout 'OK!'
# XXX: use test2 instead (depends on https://github.com/gnolang/gno/issues/1269#issuecomment-1806386069)
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Deposit -send 12345678ugnot -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Deposit -send 12345678ugnot -gas-fee 1000000ugnot -gas-wanted 5000000 -broadcast -chainid=tendermint_test test1
stdout 'OK!'
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 2000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 5000000 -args '' -broadcast -chainid=tendermint_test test1
stdout 'Total supply..: 24691356'
stdout 'Known accounts..: 1' # should be 2 once we can use test2
stdout 'OK!'
# XXX: replace hardcoded address with test3
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Transfer -gas-fee 1000000ugnot -gas-wanted 2000000 -args 'g1u7y667z64x2h7vc6fmpcprgey4ck233jaww9zq' -args '10000000' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Transfer -gas-fee 1000000ugnot -gas-wanted 5000000 -args 'g1u7y667z64x2h7vc6fmpcprgey4ck233jaww9zq' -args '10000000' -broadcast -chainid=tendermint_test test1
stdout 'OK!'
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 2000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 5000000 -args '' -broadcast -chainid=tendermint_test test1
stdout 'Total supply..: 24691356'
stdout 'Known accounts..: 2' # should be 3 once we can use test2
stdout 'OK!'
# XXX: use test3 instead (depends on https://github.com/gnolang/gno/issues/1269#issuecomment-1806386069)
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Withdraw -args 10000000 -gas-fee 1000000ugnot -gas-wanted 2000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Withdraw -args 10000000 -gas-fee 1000000ugnot -gas-wanted 5000000 -broadcast -chainid=tendermint_test test1
stdout 'OK!'
-gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 2000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/wugnot -func Render -gas-fee 1000000ugnot -gas-wanted 5000000 -args '' -broadcast -chainid=tendermint_test test1
stdout 'Total supply..: 14691356'
stdout 'Known accounts..: 2' # should be 3 once we can use test2
stdout 'OK!'
diff --git a/gno.land/pkg/gnoclient/integration_test.go b/gno.land/pkg/gnoclient/integration_test.go
index 945121fbacf..3df6175576f 100644
--- a/gno.land/pkg/gnoclient/integration_test.go
+++ b/gno.land/pkg/gnoclient/integration_test.go
@@ -40,7 +40,7 @@ func TestCallSingle_Integration(t *testing.T) {
// Make Tx config
baseCfg := BaseTxCfg{
GasFee: ugnot.ValueString(10000),
- GasWanted: 9000000,
+ GasWanted: 21000000,
AccountNumber: 0,
SequenceNumber: 0,
Memo: "",
@@ -93,7 +93,7 @@ func TestCallMultiple_Integration(t *testing.T) {
// Make Tx config
baseCfg := BaseTxCfg{
GasFee: ugnot.ValueString(10000),
- GasWanted: 9000000,
+ GasWanted: 21000000,
AccountNumber: 0,
SequenceNumber: 0,
Memo: "",
@@ -155,7 +155,7 @@ func TestSendSingle_Integration(t *testing.T) {
// Make Tx config
baseCfg := BaseTxCfg{
GasFee: ugnot.ValueString(10000),
- GasWanted: 9000000,
+ GasWanted: 21000000,
AccountNumber: 0,
SequenceNumber: 0,
Memo: "",
@@ -219,7 +219,7 @@ func TestSendMultiple_Integration(t *testing.T) {
// Make Tx config
baseCfg := BaseTxCfg{
GasFee: ugnot.ValueString(10000),
- GasWanted: 9000000,
+ GasWanted: 21000000,
AccountNumber: 0,
SequenceNumber: 0,
Memo: "",
@@ -291,7 +291,7 @@ func TestRunSingle_Integration(t *testing.T) {
// Make Tx config
baseCfg := BaseTxCfg{
GasFee: ugnot.ValueString(10000),
- GasWanted: 9000000,
+ GasWanted: 21000000,
AccountNumber: 0,
SequenceNumber: 0,
Memo: "",
@@ -359,7 +359,7 @@ func TestRunMultiple_Integration(t *testing.T) {
// Make Tx config
baseCfg := BaseTxCfg{
GasFee: ugnot.ValueString(10000),
- GasWanted: 13000000,
+ GasWanted: 23000000,
AccountNumber: 0,
SequenceNumber: 0,
Memo: "",
@@ -452,7 +452,7 @@ func TestAddPackageSingle_Integration(t *testing.T) {
// Make Tx config
baseCfg := BaseTxCfg{
GasFee: ugnot.ValueString(10000),
- GasWanted: 9000000,
+ GasWanted: 21000000,
AccountNumber: 0,
SequenceNumber: 0,
Memo: "",
@@ -537,7 +537,7 @@ func TestAddPackageMultiple_Integration(t *testing.T) {
// Make Tx config
baseCfg := BaseTxCfg{
GasFee: ugnot.ValueString(10000),
- GasWanted: 9000000,
+ GasWanted: 21000000,
AccountNumber: 0,
SequenceNumber: 0,
Memo: "",
diff --git a/gno.land/pkg/integration/testdata/loadpkg_example.txtar b/gno.land/pkg/integration/testdata/loadpkg_example.txtar
index 9dccd72c8a6..c05bedfef65 100644
--- a/gno.land/pkg/integration/testdata/loadpkg_example.txtar
+++ b/gno.land/pkg/integration/testdata/loadpkg_example.txtar
@@ -4,11 +4,11 @@ loadpkg gno.land/p/demo/ufmt
## start a new node
gnoland start
-gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/importtest -gas-fee 1000000ugnot -gas-wanted 4000000 -broadcast -chainid=tendermint_test test1
+gnokey maketx addpkg -pkgdir $WORK -pkgpath gno.land/r/importtest -gas-fee 1000000ugnot -gas-wanted 9000000 -broadcast -chainid=tendermint_test test1
stdout OK!
## execute Render
-gnokey maketx call -pkgpath gno.land/r/importtest -func Render -gas-fee 1000000ugnot -gas-wanted 4000000 -args '' -broadcast -chainid=tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/importtest -func Render -gas-fee 1000000ugnot -gas-wanted 9000000 -args '' -broadcast -chainid=tendermint_test test1
stdout '("92054" string)'
stdout OK!
diff --git a/gno.land/pkg/integration/testdata/restart.txtar b/gno.land/pkg/integration/testdata/restart.txtar
index 8d50dd15814..8a63713a214 100644
--- a/gno.land/pkg/integration/testdata/restart.txtar
+++ b/gno.land/pkg/integration/testdata/restart.txtar
@@ -4,12 +4,12 @@
loadpkg gno.land/r/demo/counter $WORK
gnoland start
-gnokey maketx call -pkgpath gno.land/r/demo/counter -func Incr -gas-fee 1000000ugnot -gas-wanted 100000 -broadcast -chainid tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/counter -func Incr -gas-fee 1000000ugnot -gas-wanted 150000 -broadcast -chainid tendermint_test test1
stdout '\(1 int\)'
gnoland restart
-gnokey maketx call -pkgpath gno.land/r/demo/counter -func Incr -gas-fee 1000000ugnot -gas-wanted 100000 -broadcast -chainid tendermint_test test1
+gnokey maketx call -pkgpath gno.land/r/demo/counter -func Incr -gas-fee 1000000ugnot -gas-wanted 150000 -broadcast -chainid tendermint_test test1
stdout '\(2 int\)'
-- counter.gno --
@@ -21,4 +21,3 @@ func Incr() int {
counter++
return counter
}
-
diff --git a/gno.land/pkg/keyscli/addpkg.go b/gno.land/pkg/keyscli/addpkg.go
index eb6e727fedd..5308d9d2ac4 100644
--- a/gno.land/pkg/keyscli/addpkg.go
+++ b/gno.land/pkg/keyscli/addpkg.go
@@ -71,6 +71,12 @@ func execMakeAddPkg(cfg *MakeAddPkgCfg, args []string, io commands.IO) error {
if cfg.PkgDir == "" {
return errors.New("pkgdir not specified")
}
+ if cfg.RootCfg.GasWanted == 0 {
+ return errors.New("gas-wanted not specified")
+ }
+ if cfg.RootCfg.GasFee == "" {
+ return errors.New("gas-fee not specified")
+ }
if len(args) != 1 {
return flag.ErrHelp
diff --git a/gno.land/pkg/sdk/vm/gas_test.go b/gno.land/pkg/sdk/vm/gas_test.go
index 677d86a0331..0001e3acf7c 100644
--- a/gno.land/pkg/sdk/vm/gas_test.go
+++ b/gno.land/pkg/sdk/vm/gas_test.go
@@ -21,8 +21,8 @@ import (
// Insufficient gas for a successful message.
func TestAddPkgDeliverTxInsuffGas(t *testing.T) {
- success := true
- ctx, tx, vmHandler := setupAddPkg(success)
+ isValidTx := true
+ ctx, tx, vmHandler := setupAddPkg(isValidTx)
ctx = ctx.WithMode(sdk.RunTxModeDeliver)
simulate := false
@@ -47,7 +47,7 @@ func TestAddPkgDeliverTxInsuffGas(t *testing.T) {
assert.True(t, abort)
assert.False(t, res.IsOK())
gasCheck := gctx.GasMeter().GasConsumed()
- assert.Equal(t, int64(3231), gasCheck)
+ assert.Equal(t, int64(3462), gasCheck)
} else {
t.Errorf("should panic")
}
@@ -58,8 +58,8 @@ func TestAddPkgDeliverTxInsuffGas(t *testing.T) {
// Enough gas for a successful message.
func TestAddPkgDeliverTx(t *testing.T) {
- success := true
- ctx, tx, vmHandler := setupAddPkg(success)
+ isValidTx := true
+ ctx, tx, vmHandler := setupAddPkg(isValidTx)
var simulate bool
@@ -75,13 +75,13 @@ func TestAddPkgDeliverTx(t *testing.T) {
assert.True(t, res.IsOK())
// NOTE: let's try to keep this bellow 100_000 :)
- assert.Equal(t, int64(93825), gasDeliver)
+ assert.Equal(t, int64(135365), gasDeliver)
}
// Enough gas for a failed transaction.
func TestAddPkgDeliverTxFailed(t *testing.T) {
- success := false
- ctx, tx, vmHandler := setupAddPkg(success)
+ isValidTx := false
+ ctx, tx, vmHandler := setupAddPkg(isValidTx)
var simulate bool
@@ -95,19 +95,19 @@ func TestAddPkgDeliverTxFailed(t *testing.T) {
gasDeliver := gctx.GasMeter().GasConsumed()
assert.False(t, res.IsOK())
- assert.Equal(t, int64(3231), gasDeliver)
+ assert.Equal(t, int64(1231), gasDeliver)
}
// Not enough gas for a failed transaction.
func TestAddPkgDeliverTxFailedNoGas(t *testing.T) {
- success := false
- ctx, tx, vmHandler := setupAddPkg(success)
+ isValidTx := false
+ ctx, tx, vmHandler := setupAddPkg(isValidTx)
var simulate bool
ctx = ctx.WithMode(sdk.RunTxModeDeliver)
simulate = false
- tx.Fee.GasWanted = 2230
+ tx.Fee.GasWanted = 1230
gctx := auth.SetGasMeter(simulate, ctx, tx.Fee.GasWanted)
gctx = vmHandler.vm.MakeGnoTransactionStore(gctx)
@@ -126,7 +126,7 @@ func TestAddPkgDeliverTxFailedNoGas(t *testing.T) {
assert.True(t, abort)
assert.False(t, res.IsOK())
gasCheck := gctx.GasMeter().GasConsumed()
- assert.Equal(t, int64(2231), gasCheck)
+ assert.Equal(t, int64(1231), gasCheck)
} else {
t.Errorf("should panic")
}
diff --git a/gno.land/pkg/sdk/vm/keeper.go b/gno.land/pkg/sdk/vm/keeper.go
index 00a0544cad6..f158524b3df 100644
--- a/gno.land/pkg/sdk/vm/keeper.go
+++ b/gno.land/pkg/sdk/vm/keeper.go
@@ -209,8 +209,9 @@ var gnoStoreContextKey gnoStoreContextKeyType
func (vm *VMKeeper) newGnoTransactionStore(ctx sdk.Context) gno.TransactionStore {
base := ctx.Store(vm.baseKey)
iavl := ctx.Store(vm.iavlKey)
+ gasMeter := ctx.GasMeter()
- return vm.gnoStore.BeginTransaction(base, iavl)
+ return vm.gnoStore.BeginTransaction(base, iavl, gasMeter)
}
func (vm *VMKeeper) MakeGnoTransactionStore(ctx sdk.Context) sdk.Context {
diff --git a/gnovm/pkg/gnolang/machine.go b/gnovm/pkg/gnolang/machine.go
index a497648dbc8..5ceccffda2c 100644
--- a/gnovm/pkg/gnolang/machine.go
+++ b/gnovm/pkg/gnolang/machine.go
@@ -999,127 +999,130 @@ func (m *Machine) incrCPU(cycles int64) {
}
const (
+ // CPU cycles
/* Control operators */
OpCPUInvalid = 1
OpCPUHalt = 1
OpCPUNoop = 1
- OpCPUExec = 1
- OpCPUPrecall = 1
- OpCPUCall = 1
- OpCPUCallNativeBody = 1
- OpCPUReturn = 1
- OpCPUReturnFromBlock = 1
- OpCPUReturnToBlock = 1
- OpCPUDefer = 1
- OpCPUCallDeferNativeBody = 1
- OpCPUGo = 1
- OpCPUSelect = 1
- OpCPUSwitchClause = 1
- OpCPUSwitchClauseCase = 1
- OpCPUTypeSwitch = 1
- OpCPUIfCond = 1
+ OpCPUExec = 25
+ OpCPUPrecall = 207
+ OpCPUCall = 256
+ OpCPUCallNativeBody = 424
+ OpCPUReturn = 38
+ OpCPUReturnFromBlock = 36
+ OpCPUReturnToBlock = 23
+ OpCPUDefer = 64
+ OpCPUCallDeferNativeBody = 33
+ OpCPUGo = 1 // Not yet implemented
+ OpCPUSelect = 1 // Not yet implemented
+ OpCPUSwitchClause = 38
+ OpCPUSwitchClauseCase = 143
+ OpCPUTypeSwitch = 171
+ OpCPUIfCond = 38
OpCPUPopValue = 1
OpCPUPopResults = 1
- OpCPUPopBlock = 1
- OpCPUPopFrameAndReset = 1
- OpCPUPanic1 = 1
- OpCPUPanic2 = 1
+ OpCPUPopBlock = 3
+ OpCPUPopFrameAndReset = 15
+ OpCPUPanic1 = 121
+ OpCPUPanic2 = 21
/* Unary & binary operators */
- OpCPUUpos = 1
- OpCPUUneg = 1
- OpCPUUnot = 1
- OpCPUUxor = 1
- OpCPUUrecv = 1
- OpCPULor = 1
- OpCPULand = 1
- OpCPUEql = 1
- OpCPUNeq = 1
- OpCPULss = 1
- OpCPULeq = 1
- OpCPUGtr = 1
- OpCPUGeq = 1
- OpCPUAdd = 1
- OpCPUSub = 1
- OpCPUBor = 1
- OpCPUXor = 1
- OpCPUMul = 1
- OpCPUQuo = 1
- OpCPURem = 1
- OpCPUShl = 1
- OpCPUShr = 1
- OpCPUBand = 1
- OpCPUBandn = 1
+ OpCPUUpos = 7
+ OpCPUUneg = 25
+ OpCPUUnot = 6
+ OpCPUUxor = 14
+ OpCPUUrecv = 1 // Not yet implemented
+ OpCPULor = 26
+ OpCPULand = 24
+ OpCPUEql = 160
+ OpCPUNeq = 95
+ OpCPULss = 13
+ OpCPULeq = 19
+ OpCPUGtr = 20
+ OpCPUGeq = 26
+ OpCPUAdd = 18
+ OpCPUSub = 6
+ OpCPUBor = 23
+ OpCPUXor = 13
+ OpCPUMul = 19
+ OpCPUQuo = 16
+ OpCPURem = 18
+ OpCPUShl = 22
+ OpCPUShr = 20
+ OpCPUBand = 9
+ OpCPUBandn = 15
/* Other expression operators */
- OpCPUEval = 1
- OpCPUBinary1 = 1
- OpCPUIndex1 = 1
- OpCPUIndex2 = 1
- OpCPUSelector = 1
- OpCPUSlice = 1
- OpCPUStar = 1
- OpCPURef = 1
- OpCPUTypeAssert1 = 1
- OpCPUTypeAssert2 = 1
- OpCPUStaticTypeOf = 1
- OpCPUCompositeLit = 1
- OpCPUArrayLit = 1
- OpCPUSliceLit = 1
- OpCPUSliceLit2 = 1
- OpCPUMapLit = 1
- OpCPUStructLit = 1
- OpCPUFuncLit = 1
- OpCPUConvert = 1
+ OpCPUEval = 29
+ OpCPUBinary1 = 19
+ OpCPUIndex1 = 77
+ OpCPUIndex2 = 195
+ OpCPUSelector = 32
+ OpCPUSlice = 103
+ OpCPUStar = 40
+ OpCPURef = 125
+ OpCPUTypeAssert1 = 30
+ OpCPUTypeAssert2 = 25
+ // TODO: OpCPUStaticTypeOf is an arbitrary number.
+ // A good way to benchmark this is yet to be determined.
+ OpCPUStaticTypeOf = 100
+ OpCPUCompositeLit = 50
+ OpCPUArrayLit = 137
+ OpCPUSliceLit = 183
+ OpCPUSliceLit2 = 467
+ OpCPUMapLit = 475
+ OpCPUStructLit = 179
+ OpCPUFuncLit = 61
+ OpCPUConvert = 16
/* Native operators */
- OpCPUArrayLitGoNative = 1
- OpCPUSliceLitGoNative = 1
- OpCPUStructLitGoNative = 1
- OpCPUCallGoNative = 1
+ OpCPUArrayLitGoNative = 137
+ OpCPUSliceLitGoNative = 183
+ OpCPUStructLitGoNative = 179
+ OpCPUCallGoNative = 256
/* Type operators */
- OpCPUFieldType = 1
- OpCPUArrayType = 1
- OpCPUSliceType = 1
- OpCPUPointerType = 1
- OpCPUInterfaceType = 1
- OpCPUChanType = 1
- OpCPUFuncType = 1
- OpCPUMapType = 1
- OpCPUStructType = 1
- OpCPUMaybeNativeType = 1
+ OpCPUFieldType = 59
+ OpCPUArrayType = 57
+ OpCPUSliceType = 55
+ OpCPUPointerType = 1 // Not yet implemented
+ OpCPUInterfaceType = 75
+ OpCPUChanType = 57
+ OpCPUFuncType = 81
+ OpCPUMapType = 59
+ OpCPUStructType = 174
+ OpCPUMaybeNativeType = 67
/* Statement operators */
- OpCPUAssign = 1
- OpCPUAddAssign = 1
- OpCPUSubAssign = 1
- OpCPUMulAssign = 1
- OpCPUQuoAssign = 1
- OpCPURemAssign = 1
- OpCPUBandAssign = 1
- OpCPUBandnAssign = 1
- OpCPUBorAssign = 1
- OpCPUXorAssign = 1
- OpCPUShlAssign = 1
- OpCPUShrAssign = 1
- OpCPUDefine = 1
- OpCPUInc = 1
- OpCPUDec = 1
+ OpCPUAssign = 79
+ OpCPUAddAssign = 85
+ OpCPUSubAssign = 57
+ OpCPUMulAssign = 55
+ OpCPUQuoAssign = 50
+ OpCPURemAssign = 46
+ OpCPUBandAssign = 54
+ OpCPUBandnAssign = 44
+ OpCPUBorAssign = 55
+ OpCPUXorAssign = 48
+ OpCPUShlAssign = 68
+ OpCPUShrAssign = 76
+ OpCPUDefine = 111
+ OpCPUInc = 76
+ OpCPUDec = 46
/* Decl operators */
- OpCPUValueDecl = 1
- OpCPUTypeDecl = 1
+ OpCPUValueDecl = 113
+ OpCPUTypeDecl = 100
/* Loop (sticky) operators (>= 0xD0) */
- OpCPUSticky = 1
- OpCPUBody = 1
- OpCPUForLoop = 1
- OpCPURangeIter = 1
- OpCPURangeIterString = 1
- OpCPURangeIterMap = 1
- OpCPURangeIterArrayPtr = 1
- OpCPUReturnCallDefers = 1
+ OpCPUSticky = 1 // Not a real op
+ OpCPUBody = 43
+ OpCPUForLoop = 27
+ OpCPURangeIter = 105
+ OpCPURangeIterString = 55
+ OpCPURangeIterMap = 48
+ OpCPURangeIterArrayPtr = 46
+ OpCPUReturnCallDefers = 78
)
//----------------------------------------
diff --git a/gnovm/pkg/gnolang/preprocess.go b/gnovm/pkg/gnolang/preprocess.go
index f110ce89ab1..8951c2c04cf 100644
--- a/gnovm/pkg/gnolang/preprocess.go
+++ b/gnovm/pkg/gnolang/preprocess.go
@@ -3129,7 +3129,7 @@ func evalStaticType(store Store, last BlockNode, x Expr) Type {
// See comment in evalStaticTypeOfRaw.
if store != nil && pn.PkgPath != uversePkgPath {
pv := pn.NewPackage() // temporary
- store = store.BeginTransaction(nil, nil)
+ store = store.BeginTransaction(nil, nil, nil)
store.SetCachePackage(pv)
}
m := NewMachine(pn.PkgPath, store)
@@ -3197,7 +3197,7 @@ func evalStaticTypeOfRaw(store Store, last BlockNode, x Expr) (t Type) {
// yet predefined this time around.
if store != nil && pn.PkgPath != uversePkgPath {
pv := pn.NewPackage() // temporary
- store = store.BeginTransaction(nil, nil)
+ store = store.BeginTransaction(nil, nil, nil)
store.SetCachePackage(pv)
}
m := NewMachine(pn.PkgPath, store)
diff --git a/gnovm/pkg/gnolang/store.go b/gnovm/pkg/gnolang/store.go
index 4cbc2948f43..683f4c923d4 100644
--- a/gnovm/pkg/gnolang/store.go
+++ b/gnovm/pkg/gnolang/store.go
@@ -11,6 +11,7 @@ import (
"github.com/gnolang/gno/gnovm/pkg/gnolang/internal/txlog"
"github.com/gnolang/gno/tm2/pkg/amino"
"github.com/gnolang/gno/tm2/pkg/colors"
+ "github.com/gnolang/gno/tm2/pkg/overflow"
"github.com/gnolang/gno/tm2/pkg/store"
"github.com/gnolang/gno/tm2/pkg/store/utils"
stringz "github.com/gnolang/gno/tm2/pkg/strings"
@@ -33,7 +34,7 @@ type NativeResolver func(pkgName string, name Name) func(m *Machine)
// blockchain, or the file system.
type Store interface {
// STABLE
- BeginTransaction(baseStore, iavlStore store.Store) TransactionStore
+ BeginTransaction(baseStore, iavlStore store.Store, gasMeter store.GasMeter) TransactionStore
SetPackageGetter(PackageGetter)
GetPackage(pkgPath string, isImport bool) *PackageValue
SetCachePackage(*PackageValue)
@@ -50,6 +51,7 @@ type Store interface {
GetBlockNode(Location) BlockNode // to get a PackageNode, use PackageNodeLocation().
GetBlockNodeSafe(Location) BlockNode
SetBlockNode(BlockNode)
+
// UNSTABLE
Go2GnoType(rt reflect.Type) Type
GetAllocator() *Allocator
@@ -81,6 +83,47 @@ type TransactionStore interface {
Write()
}
+// Gas consumption descriptors.
+const (
+ GasGetObjectDesc = "GetObjectPerByte"
+ GasSetObjectDesc = "SetObjectPerByte"
+ GasGetTypeDesc = "GetTypePerByte"
+ GasSetTypeDesc = "SetTypePerByte"
+ GasGetPackageRealmDesc = "GetPackageRealmPerByte"
+ GasSetPackageRealmDesc = "SetPackageRealmPerByte"
+ GasAddMemPackageDesc = "AddMemPackagePerByte"
+ GasGetMemPackageDesc = "GetMemPackagePerByte"
+ GasDeleteObjectDesc = "DeleteObjectFlat"
+)
+
+// GasConfig defines gas cost for each operation on KVStores
+type GasConfig struct {
+ GasGetObject int64
+ GasSetObject int64
+ GasGetType int64
+ GasSetType int64
+ GasGetPackageRealm int64
+ GasSetPackageRealm int64
+ GasAddMemPackage int64
+ GasGetMemPackage int64
+ GasDeleteObject int64
+}
+
+// DefaultGasConfig returns a default gas config for KVStores.
+func DefaultGasConfig() GasConfig {
+ return GasConfig{
+ GasGetObject: 16, // per byte cost
+ GasSetObject: 16, // per byte cost
+ GasGetType: 52, // per byte cost
+ GasSetType: 52, // per byte cost
+ GasGetPackageRealm: 524, // per byte cost
+ GasSetPackageRealm: 524, // per byte cost
+ GasAddMemPackage: 8, // per byte cost
+ GasGetMemPackage: 8, // per byte cost
+ GasDeleteObject: 3715, // flat cost
+ }
+}
+
type defaultStore struct {
// underlying stores used to keep data
baseStore store.Store // for objects, types, nodes
@@ -100,6 +143,10 @@ type defaultStore struct {
// transient
opslog []StoreOp // for debugging and testing.
current []string // for detecting import cycles.
+
+ // gas
+ gasMeter store.GasMeter
+ gasConfig GasConfig
}
func NewStore(alloc *Allocator, baseStore, iavlStore store.Store) *defaultStore {
@@ -117,13 +164,14 @@ func NewStore(alloc *Allocator, baseStore, iavlStore store.Store) *defaultStore
pkgGetter: nil,
cacheNativeTypes: make(map[reflect.Type]Type),
nativeResolver: nil,
+ gasConfig: DefaultGasConfig(),
}
InitStoreCaches(ds)
return ds
}
// If nil baseStore and iavlStore, the baseStores are re-used.
-func (ds *defaultStore) BeginTransaction(baseStore, iavlStore store.Store) TransactionStore {
+func (ds *defaultStore) BeginTransaction(baseStore, iavlStore store.Store, gasMeter store.GasMeter) TransactionStore {
if baseStore == nil {
baseStore = ds.baseStore
}
@@ -146,6 +194,10 @@ func (ds *defaultStore) BeginTransaction(baseStore, iavlStore store.Store) Trans
cacheNativeTypes: ds.cacheNativeTypes,
nativeResolver: ds.nativeResolver,
+ // gas meter
+ gasMeter: gasMeter,
+ gasConfig: ds.gasConfig,
+
// transient
current: nil,
opslog: nil,
@@ -295,6 +347,8 @@ func (ds *defaultStore) GetPackageRealm(pkgPath string) (rlm *Realm) {
if bz == nil {
return nil
}
+ gas := overflow.Mul64p(ds.gasConfig.GasGetPackageRealm, store.Gas(len(bz)))
+ ds.consumeGas(gas, GasGetPackageRealmDesc)
amino.MustUnmarshal(bz, &rlm)
if debug {
if rlm.ID != oid.PkgID {
@@ -310,6 +364,8 @@ func (ds *defaultStore) SetPackageRealm(rlm *Realm) {
oid := ObjectIDFromPkgPath(rlm.Path)
key := backendRealmKey(oid)
bz := amino.MustMarshal(rlm)
+ gas := overflow.Mul64p(ds.gasConfig.GasSetPackageRealm, store.Gas(len(bz)))
+ ds.consumeGas(gas, GasSetPackageRealmDesc)
ds.baseStore.Set([]byte(key), bz)
}
@@ -355,6 +411,8 @@ func (ds *defaultStore) loadObjectSafe(oid ObjectID) Object {
bz := hashbz[HashSize:]
var oo Object
ds.alloc.AllocateAmino(int64(len(bz)))
+ gas := overflow.Mul64p(ds.gasConfig.GasGetObject, store.Gas(len(bz)))
+ ds.consumeGas(gas, GasGetObjectDesc)
amino.MustUnmarshal(bz, &oo)
if debug {
if oo.GetObjectID() != oid {
@@ -378,6 +436,8 @@ func (ds *defaultStore) SetObject(oo Object) {
o2 := copyValueWithRefs(oo)
// marshal to binary.
bz := amino.MustMarshalAny(o2)
+ gas := overflow.Mul64p(ds.gasConfig.GasSetObject, store.Gas(len(bz)))
+ ds.consumeGas(gas, GasSetObjectDesc)
// set hash.
hash := HashBytes(bz) // XXX objectHash(bz)???
if len(hash) != HashSize {
@@ -427,6 +487,7 @@ func (ds *defaultStore) SetObject(oo Object) {
}
func (ds *defaultStore) DelObject(oo Object) {
+ ds.consumeGas(ds.gasConfig.GasDeleteObject, GasDeleteObjectDesc)
oid := oo.GetObjectID()
// delete from cache.
delete(ds.cacheObjects, oid)
@@ -463,6 +524,8 @@ func (ds *defaultStore) GetTypeSafe(tid TypeID) Type {
key := backendTypeKey(tid)
bz := ds.baseStore.Get([]byte(key))
if bz != nil {
+ gas := overflow.Mul64p(ds.gasConfig.GasGetType, store.Gas(len(bz)))
+ ds.consumeGas(gas, GasGetTypeDesc)
var tt Type
amino.MustUnmarshal(bz, &tt)
if debug {
@@ -509,6 +572,8 @@ func (ds *defaultStore) SetType(tt Type) {
key := backendTypeKey(tid)
tcopy := copyTypeWithRefs(tt)
bz := amino.MustMarshalAny(tcopy)
+ gas := overflow.Mul64p(ds.gasConfig.GasSetType, store.Gas(len(bz)))
+ ds.consumeGas(gas, GasSetTypeDesc)
ds.baseStore.Set([]byte(key), bz)
}
// save type to cache.
@@ -602,6 +667,8 @@ func (ds *defaultStore) AddMemPackage(memPkg *gnovm.MemPackage) {
ctr := ds.incGetPackageIndexCounter()
idxkey := []byte(backendPackageIndexKey(ctr))
bz := amino.MustMarshal(memPkg)
+ gas := overflow.Mul64p(ds.gasConfig.GasAddMemPackage, store.Gas(len(bz)))
+ ds.consumeGas(gas, GasAddMemPackageDesc)
ds.baseStore.Set(idxkey, []byte(memPkg.Path))
pathkey := []byte(backendPackagePathKey(memPkg.Path))
ds.iavlStore.Set(pathkey, bz)
@@ -629,6 +696,8 @@ func (ds *defaultStore) getMemPackage(path string, isRetry bool) *gnovm.MemPacka
}
return nil
}
+ gas := overflow.Mul64p(ds.gasConfig.GasGetMemPackage, store.Gas(len(bz)))
+ ds.consumeGas(gas, GasGetMemPackageDesc)
var memPkg *gnovm.MemPackage
amino.MustUnmarshal(bz, &memPkg)
@@ -675,6 +744,13 @@ func (ds *defaultStore) IterMemPackage() <-chan *gnovm.MemPackage {
}
}
+func (ds *defaultStore) consumeGas(gas int64, descriptor string) {
+ // In the tests, the defaultStore may not set the gas meter.
+ if ds.gasMeter != nil {
+ ds.gasMeter.ConsumeGas(gas, descriptor)
+ }
+}
+
// Unstable.
// This function is used to clear the object cache every transaction.
// It also sets a new allocator.
diff --git a/gnovm/pkg/gnolang/store_test.go b/gnovm/pkg/gnolang/store_test.go
index e280032e3d9..c4fc52a9c7c 100644
--- a/gnovm/pkg/gnolang/store_test.go
+++ b/gnovm/pkg/gnolang/store_test.go
@@ -17,7 +17,7 @@ func TestTransactionStore(t *testing.T) {
st := NewStore(nil, tm2Store, tm2Store)
wrappedTm2Store := tm2Store.CacheWrap()
- txSt := st.BeginTransaction(wrappedTm2Store, wrappedTm2Store)
+ txSt := st.BeginTransaction(wrappedTm2Store, wrappedTm2Store, nil)
m := NewMachineWithOptions(MachineOptions{
PkgPath: "hello",
Store: txSt,
@@ -86,7 +86,7 @@ func TestCopyFromCachedStore(t *testing.T) {
d1s := dbadapter.StoreConstructor(d1, storetypes.StoreOptions{})
d2s := dbadapter.StoreConstructor(d2, storetypes.StoreOptions{})
destStore := NewStore(nil, d1s, d2s)
- destStoreTx := destStore.BeginTransaction(nil, nil) // CopyFromCachedStore requires a tx store.
+ destStoreTx := destStore.BeginTransaction(nil, nil, nil) // CopyFromCachedStore requires a tx store.
CopyFromCachedStore(destStoreTx, cachedStore, c1s, c2s)
destStoreTx.Write()
diff --git a/gnovm/pkg/test/filetest.go b/gnovm/pkg/test/filetest.go
index 12bc9ed7f28..da2c7a55797 100644
--- a/gnovm/pkg/test/filetest.go
+++ b/gnovm/pkg/test/filetest.go
@@ -60,7 +60,7 @@ func (opts *TestOptions) runFiletest(filename string, source []byte) (string, er
cw := opts.BaseStore.CacheWrap()
m := gno.NewMachineWithOptions(gno.MachineOptions{
Output: &opts.outWriter,
- Store: opts.TestStore.BeginTransaction(cw, cw),
+ Store: opts.TestStore.BeginTransaction(cw, cw, nil),
Context: ctx,
MaxAllocBytes: maxAlloc,
})
@@ -240,7 +240,7 @@ func (opts *TestOptions) runTest(m *gno.Machine, pkgPath, filename string, conte
},
},
}
- orig, tx := m.Store, m.Store.BeginTransaction(nil, nil)
+ orig, tx := m.Store, m.Store.BeginTransaction(nil, nil, nil)
m.Store = tx
// Run decls and init functions.
m.RunMemPackage(memPkg, true)
diff --git a/gnovm/pkg/test/test.go b/gnovm/pkg/test/test.go
index 3ea3d4bc9bd..077abbe8984 100644
--- a/gnovm/pkg/test/test.go
+++ b/gnovm/pkg/test/test.go
@@ -193,7 +193,7 @@ func Test(memPkg *gnovm.MemPackage, fsDir string, opts *TestOptions) error {
// tests. This allows us to "export" symbols from the pkg tests and
// import them from the `pkg_test` tests.
cw := opts.BaseStore.CacheWrap()
- gs := opts.TestStore.BeginTransaction(cw, cw)
+ gs := opts.TestStore.BeginTransaction(cw, cw, nil)
// Run test files in pkg.
if len(tset.Files) > 0 {
diff --git a/tm2/pkg/sdk/auth/keeper.go b/tm2/pkg/sdk/auth/keeper.go
index 7669b8ace73..c462438e523 100644
--- a/tm2/pkg/sdk/auth/keeper.go
+++ b/tm2/pkg/sdk/auth/keeper.go
@@ -55,7 +55,7 @@ func (ak AccountKeeper) Logger(ctx sdk.Context) *slog.Logger {
// GetAccount returns a specific account in the AccountKeeper.
func (ak AccountKeeper) GetAccount(ctx sdk.Context, addr crypto.Address) std.Account {
- stor := ctx.Store(ak.key)
+ stor := ctx.GasStore(ak.key)
bz := stor.Get(AddressStoreKey(addr))
if bz == nil {
return nil
@@ -78,7 +78,7 @@ func (ak AccountKeeper) GetAllAccounts(ctx sdk.Context) []std.Account {
// SetAccount implements AccountKeeper.
func (ak AccountKeeper) SetAccount(ctx sdk.Context, acc std.Account) {
addr := acc.GetAddress()
- stor := ctx.Store(ak.key)
+ stor := ctx.GasStore(ak.key)
bz, err := amino.MarshalAny(acc)
if err != nil {
panic(err)
@@ -90,13 +90,13 @@ func (ak AccountKeeper) SetAccount(ctx sdk.Context, acc std.Account) {
// NOTE: this will cause supply invariant violation if called
func (ak AccountKeeper) RemoveAccount(ctx sdk.Context, acc std.Account) {
addr := acc.GetAddress()
- stor := ctx.Store(ak.key)
+ stor := ctx.GasStore(ak.key)
stor.Delete(AddressStoreKey(addr))
}
// IterateAccounts implements AccountKeeper.
func (ak AccountKeeper) IterateAccounts(ctx sdk.Context, process func(std.Account) (stop bool)) {
- stor := ctx.Store(ak.key)
+ stor := ctx.GasStore(ak.key)
iter := store.PrefixIterator(stor, []byte(AddressStoreKeyPrefix))
defer iter.Close()
for {
@@ -133,7 +133,7 @@ func (ak AccountKeeper) GetSequence(ctx sdk.Context, addr crypto.Address) (uint6
// GetNextAccountNumber Returns and increments the global account number counter
func (ak AccountKeeper) GetNextAccountNumber(ctx sdk.Context) uint64 {
var accNumber uint64
- stor := ctx.Store(ak.key)
+ stor := ctx.GasStore(ak.key)
bz := stor.Get([]byte(GlobalAccountNumberKey))
if bz == nil {
accNumber = 0 // start with 0.
diff --git a/tm2/pkg/sdk/baseapp_test.go b/tm2/pkg/sdk/baseapp_test.go
index cf944c44f06..52f917ed822 100644
--- a/tm2/pkg/sdk/baseapp_test.go
+++ b/tm2/pkg/sdk/baseapp_test.go
@@ -447,7 +447,7 @@ func anteHandlerTxTest(t *testing.T, capKey store.StoreKey, storeKey []byte) Ant
t.Helper()
return func(ctx Context, tx std.Tx, simulate bool) (newCtx Context, res Result, abort bool) {
- store := ctx.Store(capKey)
+ store := ctx.GasStore(capKey)
if getFailOnAnte(tx) {
res.Error = ABCIError(std.ErrInternal("ante handler failure"))
return newCtx, res, true
diff --git a/tm2/pkg/sdk/context.go b/tm2/pkg/sdk/context.go
index 63c5a50f8eb..f9d9949bfbe 100644
--- a/tm2/pkg/sdk/context.go
+++ b/tm2/pkg/sdk/context.go
@@ -171,10 +171,14 @@ func (c Context) Value(key interface{}) interface{} {
// ----------------------------------------------------------------------------
// Store fetches a Store from the MultiStore, but wrapped for gas calculation.
-func (c Context) Store(key store.StoreKey) store.Store {
+func (c Context) GasStore(key store.StoreKey) store.Store {
return gas.New(c.MultiStore().GetStore(key), c.GasMeter(), store.DefaultGasConfig())
}
+func (c Context) Store(key store.StoreKey) store.Store {
+ return c.MultiStore().GetStore(key)
+}
+
// CacheContext returns a new Context with the multi-store cached and a new
// EventLogger . The cached context is written to the context when writeCache
// is called.