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/<addr_test1>/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/<addr_test1>/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/<addr_gui>/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.