Skip to content

Commit

Permalink
fix: hardcode max vm cycles in keeper (#1807)
Browse files Browse the repository at this point in the history
<!-- please provide a detailed description of the changes made in this
pull request. -->
This hardcodes the maximum VM cycles in the keeper to ten million, the
same that is currently being used from genesis. It doesn't seem like
there is a reason why we should want people to be able to adjust this.
<details><summary>Contributors' checklist...</summary>

- [x] Added new tests, or not needed, or not feasible
- [x] Provided an example (e.g. screenshot) to aid review or the PR is
self-explanatory
- [x] Updated the official documentation or not needed
- [x] No breaking changes were made, or a `BREAKING CHANGE: xxx` message
was included in the description
- [x] Added references to related issues and PRs
- [x] Provided any useful hints for running manual tests
- [x] Added new benchmarks to [generated
graphs](https://gnoland.github.io/benchmarks), if any. More info
[here](https://github.com/gnolang/gno/blob/master/.benchmarks/README.md).
</details>
  • Loading branch information
deelawn authored Mar 30, 2024
1 parent d79930c commit 6760265
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 25 deletions.
7 changes: 3 additions & 4 deletions contribs/gnodev/pkg/dev/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -410,9 +410,8 @@ func newNodeConfig(tmc *tmcfg.Config, chainid string, appstate gnoland.GnoGenesi
}

return &gnoland.InMemoryNodeConfig{
PrivValidator: pv,
TMConfig: tmc,
Genesis: genesis,
GenesisMaxVMCycles: 10_000_000,
PrivValidator: pv,
TMConfig: tmc,
Genesis: genesis,
}
}
10 changes: 1 addition & 9 deletions gno.land/cmd/gnoland/start.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,6 @@ type startCfg struct {
chainID string
genesisRemote string
dataDir string
genesisMaxVMCycles int64
config string

txEventStoreType string
Expand Down Expand Up @@ -125,13 +124,6 @@ func (c *startCfg) RegisterFlags(fs *flag.FlagSet) {
"replacement for '%%REMOTE%%' in genesis",
)

fs.Int64Var(
&c.genesisMaxVMCycles,
"genesis-max-vm-cycles",
10_000_000,
"set maximum allowed vm cycles per operation. Zero means no limit.",
)

fs.StringVar(
&c.config,
flagConfigFlag,
Expand Down Expand Up @@ -254,7 +246,7 @@ func execStart(c *startCfg, io commands.IO) error {
cfg.TxEventStore = txEventStoreCfg

// Create application and node.
gnoApp, err := gnoland.NewApp(dataDir, c.skipFailingGenesisTxs, logger, c.genesisMaxVMCycles)
gnoApp, err := gnoland.NewApp(dataDir, c.skipFailingGenesisTxs, logger)
if err != nil {
return fmt.Errorf("error in creating new app: %w", err)
}
Expand Down
5 changes: 2 additions & 3 deletions gno.land/pkg/gnoland/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@ type AppOptions struct {
GnoRootDir string
SkipFailingGenesisTxs bool
Logger *slog.Logger
MaxCycles int64
}

func NewAppOptions() *AppOptions {
Expand Down Expand Up @@ -78,7 +77,7 @@ func NewAppWithOptions(cfg *AppOptions) (abci.Application, error) {

// XXX: Embed this ?
stdlibsDir := filepath.Join(cfg.GnoRootDir, "gnovm", "stdlibs")
vmKpr := vm.NewVMKeeper(baseKey, mainKey, acctKpr, bankKpr, stdlibsDir, cfg.MaxCycles)
vmKpr := vm.NewVMKeeper(baseKey, mainKey, acctKpr, bankKpr, stdlibsDir)

// Set InitChainer
baseApp.SetInitChainer(InitChainer(baseApp, acctKpr, bankKpr, cfg.SkipFailingGenesisTxs))
Expand Down Expand Up @@ -123,7 +122,7 @@ func NewAppWithOptions(cfg *AppOptions) (abci.Application, error) {
}

// NewApp creates the GnoLand application.
func NewApp(dataRootDir string, skipFailingGenesisTxs bool, logger *slog.Logger, maxCycles int64) (abci.Application, error) {
func NewApp(dataRootDir string, skipFailingGenesisTxs bool, logger *slog.Logger) (abci.Application, error) {
var err error

cfg := NewAppOptions()
Expand Down
9 changes: 3 additions & 6 deletions gno.land/pkg/gnoland/node_inmemory.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ type InMemoryNodeConfig struct {
Genesis *bft.GenesisDoc
TMConfig *tmcfg.Config
SkipFailingGenesisTxs bool
GenesisMaxVMCycles int64
}

// NewMockedPrivValidator generate a new key
Expand Down Expand Up @@ -79,10 +78,9 @@ func NewDefaultInMemoryNodeConfig(rootdir string) *InMemoryNodeConfig {
}

return &InMemoryNodeConfig{
PrivValidator: pv,
TMConfig: tm,
Genesis: genesis,
GenesisMaxVMCycles: 10_000_000,
PrivValidator: pv,
TMConfig: tm,
Genesis: genesis,
}
}

Expand Down Expand Up @@ -115,7 +113,6 @@ func NewInMemoryNode(logger *slog.Logger, cfg *InMemoryNodeConfig) (*node.Node,
Logger: logger,
GnoRootDir: cfg.TMConfig.RootDir,
SkipFailingGenesisTxs: cfg.SkipFailingGenesisTxs,
MaxCycles: cfg.GenesisMaxVMCycles,
DB: memdb.NewMemDB(),
})
if err != nil {
Expand Down
2 changes: 1 addition & 1 deletion gno.land/pkg/sdk/vm/common_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ func setupTestEnv() testEnv {
acck := authm.NewAccountKeeper(iavlCapKey, std.ProtoBaseAccount)
bank := bankm.NewBankKeeper(acck)
stdlibsDir := filepath.Join("..", "..", "..", "..", "gnovm", "stdlibs")
vmk := NewVMKeeper(baseCapKey, iavlCapKey, acck, bank, stdlibsDir, 10_000_000)
vmk := NewVMKeeper(baseCapKey, iavlCapKey, acck, bank, stdlibsDir)

vmk.Initialize(ms.MultiCacheWrap())

Expand Down
8 changes: 6 additions & 2 deletions gno.land/pkg/sdk/vm/keeper.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@ import (
const (
maxAllocTx = 500 * 1000 * 1000
maxAllocQuery = 1500 * 1000 * 1000 // higher limit for queries

// maxVMCycles is the maximum number of cycles allowed while executing a single VM
// message. Ideally this should not be needed, as execution should halt when out of
// gas. The worst case scenario is that this value is used as a fallback.
maxVMCycles = 10_000_000
)

// vm.VMKeeperI defines a module interface that supports Gno
Expand Down Expand Up @@ -55,7 +60,6 @@ func NewVMKeeper(
acck auth.AccountKeeper,
bank bank.BankKeeper,
stdlibsDir string,
maxCycles int64,
) *VMKeeper {
// TODO: create an Options struct to avoid too many constructor parameters
vmk := &VMKeeper{
Expand All @@ -64,7 +68,7 @@ func NewVMKeeper(
acck: acck,
bank: bank,
stdlibsDir: stdlibsDir,
maxCycles: maxCycles,
maxCycles: maxVMCycles,
}
return vmk
}
Expand Down

0 comments on commit 6760265

Please sign in to comment.