Skip to content

--genesis-txs-file flag causes double package additions in gnoland start --lazy #5140

@zivkovicmilos

Description

@zivkovicmilos

Description

When running the gnoland start command with --lazy, and a custom --genesis-txs-file (attached below), the package gno.land/p/nt/ufmt seems to be loaded twice (there are 2 deploy transactions that end up in the genesis.json), causing the node to fail when initializing the genesis block.

Your environment

  • Go version: 1.23
  • OS and CPU architecture: macOS 26.3
  • Gno commit hash causing the issue: 76a6a79822d00ff3d8b8cdbcbb8117746bba1e42 (master)

Steps to reproduce

Download the genesis_txs.txt file I attached and rename it to .jsonl (GitHub doesn't allow uploading jsonl files for some reason).
genesis_txs.txt

Run:

gnoland start --lazy --skip-genesis-sig-verification --chainid test11 --genesis-txs-file ~/Desktop/test11/genesis_txs.jsonl

Expected behavior

The genesis.json should not have 2 deploy transactions for the same package.
Notice that they have different deployers as well, indicating it's probably an issue with --lazy.

Actual behavior

The gno.land/p/nt/ufmt package is deployed twice in the genesis, causing the node to halt on boot.

Logs

Unable to deliver genesis tx	{"log": "msg:0,success:false,log:--= Error =--\nData: vm.PkgExistError{abciError:vm.abciError{}}\nMsg Traces:\n    0  gno/gno.land/pkg/sdk/vm/errors.go:48 - package already exists: gno.land/p/nt/ufmt\nStack Trace:\n    0  gno/tm2/pkg/errors/errors.go:93\n    1  gno/gno.land/pkg/sdk/vm/errors.go:48\n    2  gno/gno.land/pkg/sdk/vm/keeper.go:481\n    3  gno/gno.land/pkg/sdk/vm/handler.go:42\n    4  gno/gno.land/pkg/sdk/vm/handler.go:29\n    5  gno/tm2/pkg/sdk/baseapp.go:671\n    6  gno/tm2/pkg/sdk/baseapp.go:862\n    7  gno/tm2/pkg/sdk/helpers.go:35\n    8  gno/gno.land/pkg/gnoland/app.go:419\n    9  gno/gno.land/pkg/gnoland/app.go:316\n   10  gno/tm2/pkg/sdk/baseapp.go:346\n   11  gno/tm2/pkg/bft/abci/client/local_client.go:196\n   12  gno/tm2/pkg/bft/appconn/app_conn.go:66\n   13  gno/tm2/pkg/bft/consensus/replay.go:305\n   14  gno/tm2/pkg/bft/consensus/replay.go:263\n   15  gno/tm2/pkg/bft/node/node.go:247\n   16  gno/tm2/pkg/bft/node/node.go:404\n   17  gno/tm2/pkg/bft/node/node.go:133\n   18  gno/gno.land/cmd/gnoland/start.go:265\n   19  gno/gno.land/cmd/gnoland/start.go:74\n   20  gno/tm2/pkg/commands/command.go:265\n   21  gno/tm2/pkg/commands/command.go:269\n   22  gno/tm2/pkg/commands/command.go:150\n   23  gno/tm2/pkg/commands/command.go:127\n   24  gno/gno.land/cmd/gnoland/root.go:24\n   25  /opt/homebrew/Cellar/go/1.25.7_1/libexec/src/runtime/proc.go:285\n   26  /opt/homebrew/Cellar/go/1.25.7_1/libexec/src/runtime/asm_arm64.s:1268\n--= /Error =--\n,events:[]", "error": "package already exists", "gas-used": 447088}
github.com/gnolang/gno/gno.land/pkg/gnoland.InitChainerConfig.loadAppState
	/Users/zmilos/work/gno/gno.land/pkg/gnoland/app.go:421
github.com/gnolang/gno/gno.land/pkg/gnoland.InitChainerConfig.InitChainer
	/Users/zmilos/work/gno/gno.land/pkg/gnoland/app.go:316
github.com/gnolang/gno/tm2/pkg/sdk.(*BaseApp).InitChain
	/Users/zmilos/work/gno/tm2/pkg/sdk/baseapp.go:346
github.com/gnolang/gno/tm2/pkg/bft/abci/client.(*localClient).InitChainSync
	/Users/zmilos/work/gno/tm2/pkg/bft/abci/client/local_client.go:196
github.com/gnolang/gno/tm2/pkg/bft/appconn.(*consensus).InitChainSync
	/Users/zmilos/work/gno/tm2/pkg/bft/appconn/app_conn.go:66
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*Handshaker).ReplayBlocks
	/Users/zmilos/work/gno/tm2/pkg/bft/consensus/replay.go:305
github.com/gnolang/gno/tm2/pkg/bft/consensus.(*Handshaker).Handshake
	/Users/zmilos/work/gno/tm2/pkg/bft/consensus/replay.go:263
github.com/gnolang/gno/tm2/pkg/bft/node.doHandshake
	/Users/zmilos/work/gno/tm2/pkg/bft/node/node.go:247
github.com/gnolang/gno/tm2/pkg/bft/node.NewNode
	/Users/zmilos/work/gno/tm2/pkg/bft/node/node.go:404
github.com/gnolang/gno/tm2/pkg/bft/node.DefaultNewNode
	/Users/zmilos/work/gno/tm2/pkg/bft/node/node.go:133
main.execStart
	/Users/zmilos/work/gno/gno.land/cmd/gnoland/start.go:265
main.newStartCmd.func1
	/Users/zmilos/work/gno/gno.land/cmd/gnoland/start.go:74
github.com/gnolang/gno/tm2/pkg/commands.(*Command).Run
	/Users/zmilos/work/gno/tm2/pkg/commands/command.go:265
github.com/gnolang/gno/tm2/pkg/commands.(*Command).Run
	/Users/zmilos/work/gno/tm2/pkg/commands/command.go:269
github.com/gnolang/gno/tm2/pkg/commands.(*Command).ParseAndRun
	/Users/zmilos/work/gno/tm2/pkg/commands/command.go:150
github.com/gnolang/gno/tm2/pkg/commands.(*Command).Execute
	/Users/zmilos/work/gno/tm2/pkg/commands/command.go:127
main.main
	/Users/zmilos/work/gno/gno.land/cmd/gnoland/root.go:24
runtime.main
	/opt/homebrew/Cellar/go/1.25.7_1/libexec/src/runtime/proc.go:285
panic: msg:0,success:false,log:--= Error =--
	Data: vm.PkgExistError{abciError:vm.abciError{}}
	Msg Traces:
	    0  gno/gno.land/pkg/sdk/vm/errors.go:48 - package already exists: gno.land/p/nt/ufmt
	Stack Trace:
	    0  gno/tm2/pkg/errors/errors.go:93
	    1  gno/gno.land/pkg/sdk/vm/errors.go:48
	    2  gno/gno.land/pkg/sdk/vm/keeper.go:481
	    3  gno/gno.land/pkg/sdk/vm/handler.go:42
	    4  gno/gno.land/pkg/sdk/vm/handler.go:29
	    5  gno/tm2/pkg/sdk/baseapp.go:671
	    6  gno/tm2/pkg/sdk/baseapp.go:862
	    7  gno/tm2/pkg/sdk/helpers.go:35
	    8  gno/gno.land/pkg/gnoland/app.go:419
	    9  gno/gno.land/pkg/gnoland/app.go:316
	   10  gno/tm2/pkg/sdk/baseapp.go:346
	   11  gno/tm2/pkg/bft/abci/client/local_client.go:196
	   12  gno/tm2/pkg/bft/appconn/app_conn.go:66
	   13  gno/tm2/pkg/bft/consensus/replay.go:305
	   14  gno/tm2/pkg/bft/consensus/replay.go:263
	   15  gno/tm2/pkg/bft/node/node.go:247
	   16  gno/tm2/pkg/bft/node/node.go:404
	   17  gno/tm2/pkg/bft/node/node.go:133
	   18  gno/gno.land/cmd/gnoland/start.go:265
	   19  gno/gno.land/cmd/gnoland/start.go:74
	   20  gno/tm2/pkg/commands/command.go:265
	   21  gno/tm2/pkg/commands/command.go:269
	   22  gno/tm2/pkg/commands/command.go:150
	   23  gno/tm2/pkg/commands/command.go:127
	   24  gno/gno.land/cmd/gnoland/root.go:24
	   25  /opt/homebrew/Cellar/go/1.25.7_1/libexec/src/runtime/proc.go:285
	   26  /opt/homebrew/Cellar/go/1.25.7_1/libexec/src/runtime/asm_arm64.s:1268
	--= /Error =--
	,events:[]

Proposed solution

Probably an issue with --lazy, and how we treat the --genesis-txs-file flag.

Metadata

Metadata

Assignees

No one assigned

    Labels

    🐞 bugSomething isn't working

    Type

    Projects

    Status

    Triage

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions