feat: add miden-genesis tool for canonical genesis state#1797
feat: add miden-genesis tool for canonical genesis state#1797mmagician merged 14 commits intorelease/v0.14.0-alphafrom
Conversation
|
While reviewing #1774, I came to realize that there is a split between what the I think eventually it might make sense to merge these two so that all account generation happens in a single step. The proposed split:
This way |
Mirko-von-Leipzig
left a comment
There was a problem hiding this comment.
Code looks good; some bikeshedding to resolve.
| - `bridge.mac` - AggLayer bridge account (nonce=1, included in genesis block) | ||
| - `genesis.toml` - Genesis configuration referencing only `bridge.mac` | ||
|
|
||
| When public keys are omitted, the `.mac` files for bridge admin and GER manager include generated secret keys. When public keys are provided, no secret keys are included. |
There was a problem hiding this comment.
If this is intended for internal use only, why do we have two different "modes"?
| @@ -0,0 +1,60 @@ | |||
| # Miden Genesis | |||
|
|
|||
| A tool for generating canonical Miden genesis accounts and configuration. | |||
There was a problem hiding this comment.
If this is intended for internal use only, then I would add that disclaimer here, and repeat it where applicable.
I'm concerned that local node users will attempt to use this.
|
|
||
| The bridge account always uses NoAuth and has no secret keys. | ||
|
|
||
| ## Bootstrapping a node |
There was a problem hiding this comment.
This is going to get outdated pretty often and we'll forget to update this.
It would be better to keep this in our operator docs.
There was a problem hiding this comment.
Could you describe the different deployment flows and where this fits in?
- Local node
- Testnet deploy
- Automated devnet deploy
- ...
Some bikeshedding
Should this be miden-node make-genesis? Bear in mind that we probably want to access this binary somewhere where we can't (or don't want to) compile code. And therefore this should likely be installable and versionable.
Some thought experiments
Maybe we should have a miden-node genesis subcommand?
# This binary
miden-node genesis generate-accounts ...
# miden-node validator bootstrap
miden-node genesis sign
# miden-node store bootstrap
miden-node genesis bootstrap-store
c57f34b to
00218d6
Compare
4463961 to
350a82d
Compare
New binary crate that generates canonical AggLayer genesis accounts (bridge, bridge admin, GER manager) and a genesis.toml config file. Only the bridge account is included in the genesis block; bridge admin and GER manager are generated as local accounts to be deployed later. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add description, keywords, and exclude to match other bin/ crate conventions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GenesisConfig and BlockHeader use u32 timestamps. Cast to u32 using the same pattern as proposed_block.rs. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Decorator stripping was needed in build.rs for deterministic .mac files checked into the repo. The genesis tool generates files at runtime so stripping is unnecessary. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Verifies that the tool generates all expected files with correct properties: bridge has nonce=1, admin/GER manager have nonce=0 with secret keys, and genesis.toml only references bridge.mac. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Validate that either both --bridge-admin-public-key and --ger-manager-public-key are provided, or neither. Add integration tests for both default mode (generated keypairs with secrets) and custom mode (provided public keys without secrets). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace manual match-based validation with clap's requires attribute, so clap handles the error message when only one public key is provided. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Verifies the full round-trip: generate files, parse genesis.toml with GenesisConfig, build genesis state, confirm bridge account is present with nonce=1, and build the actual genesis block. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Both tests now verify the full round-trip through GenesisConfig and genesis block creation via a shared helper, removing redundant checks. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
350a82d to
693ee9c
Compare
Summary
miden-genesisbinary crate that generates canonical AggLayer genesis accounts and agenesis.tomlconfig fileBasicWallets), andAggLayerBridgegenesis.tomlfor the genesis block; bridge admin and GER manager are local accounts (nonce=0) to be deployed later via transactions. But, they are "implicitly" included in the genesis block in that theAggLayerBridgeaccount makes reference to them in its storage.Closes #1788
Operator workflow
🤖 Generated by hand & with Claude Code
I wanted to add this as a separate minimal binary (non-publishable) because I do see this as a separate role from the validator (even though for now they'll be run by the same entity). But it should be trivial to move this in a new command on the validator if desired.