Skip to content

chore: fast-forward main to v0.40-dev#365

Merged
MuncleUscles merged 13 commits into
mainfrom
v0.40-dev
Jul 8, 2026
Merged

chore: fast-forward main to v0.40-dev#365
MuncleUscles merged 13 commits into
mainfrom
v0.40-dev

Conversation

@MuncleUscles

@MuncleUscles MuncleUscles commented Jul 8, 2026

Copy link
Copy Markdown
Member

Moves main to the current active dev branch state so default-branch tooling sees the latest workflow files.\n\nWhy now:\n- The auto fast-forward workflow cannot push to main because repo rules require PRs.\n- publish.yml prerelease safety needs to exist on the default branch before dispatching v0.40.0-rc1.\n\nThis PR is intended to be a fast-forward alias update; v0.40-dev remains the active development branch.

Summary by CodeRabbit

  • New Features

    • Added custom network management, including adding/removing profiles and using them across CLI commands.
    • Introduced fee profiles for deploy, write, and fee estimation flows.
    • Added vesting commands for listing, delegating, withdrawing, claiming, and validator management.
  • Bug Fixes

    • Improved publishing for prerelease tags and release markers.
    • Extended smoke-test timeouts for more reliable runs.
    • Improved network resolution and account handling for custom aliases.
  • Documentation

    • Expanded CLI and API docs for network, fee, staking, and vesting commands.

MuncleUscles and others added 13 commits June 11, 2026 15:55
* docs: add branching guide

* ci: harden testnet smoke timeout
* feat: support fee profiles in contract commands

* test: make fee profile deploy test portable
* feat: add staking validators discovery

* feat: epoch-aware validator listing with below-min indicator

* fix(staking): account-less client for read-only staking queries

getReadOnlyStakingClient threw 'Account not found' on fresh installs;
listings and other reads don't need a local account.
* feat: add vesting commands

* feat(vesting): validator subcommands — create/join, deposit, exit, claim, operator-transfer, set-identity, list/status

Drives the CON-607 Vesting.sol validator leg through the SDK's named
vestingValidator* actions; list/status enumerate getValidatorWallets
with per-wallet deposited principal.
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Selecting Gemini during `genlayer init` failed with:
  Requested providers '{'geminiai'}' do not match any stored providers.

The selected provider id is forwarded verbatim to
sim_createRandomValidators, but the backend's llm_provider table stores
Gemini as "google". Rename the provider id geminiai -> google so it
matches. Display name ("Gemini") and env var (GEMINI_API_KEY) are
unchanged.

Since "geminiai" never resolved to a valid provider, no working
configuration relied on it.

Fixes #271

Co-authored-by: Edgars Nemše <edgars@genlayerlabs.com>
The sync-docs workflow rsynced the generated category-based
docs/api-references/_meta.json into genlayer-docs and then immediately
overwrote it with a hardcoded heredoc containing the pre-grouping flat
command list (init, up, deploy, ...). Those keys no longer match the
directory layout, so the genlayer-docs sidebar rendered broken entries
on every sync (fixed manually in genlayer-docs#426; this removes the
cause).

Also make the generated root meta complete:
- add "index": "Overview" for the generated index.mdx
- append ungrouped top-level commands (estimate-fees, finalize,
  finalize-batch) so they get explicit nav entries instead of relying
  on Nextra's implicit append

Snapshot under docs/api-references regenerated against current main
(picks up the new estimate-fees command and latest help text).

Co-authored-by: Albert Castellana <albert@genlayer.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Edgars <edgars@entropicsolutions.io>
getSlashingAddress() was removed from the genlayer-js SDK (v0.39+/v2-dev),
causing `genlayer staking validator-history` to crash with
`client.getSlashingAddress is not a function` before any history is fetched.

Resolve the idleness (slashing) contract address dynamically via viem
readContract against consensusMainContract.getIdlenessAddress(), falling
back to the staking contract address if resolution fails so reward events
still display.

Port of #344 (by @ygd58) from the dead v0.39 line to v0.40-dev.
Supersedes #344.

Fixes #341

Co-authored-by: Edgars <edgars@entropicsolutions.io>
)

* feat(network): custom network profiles with deployment-file import

genlayer network add <alias> --base <built-in> [--deployment <json>]
[--rpc <url>] [--consensus-main|--consensus-data|--staking|--fee-manager
|--rounds-storage|--appeals <addr>] [--chain-id <n>] [--deployment-key <path>]

Profiles persist as base + address overrides only; resolveNetwork loads
the base chain fresh from genlayer-js and applies overrides, so ABIs
never go stale. network set/list/info/remove and StakingAction --network
accept custom aliases. The consensus deployments.json shape is parsed by
walking the tree for ContractName->address leaves (ConsensusMain,
ConsensusData, GenStaking/Staking, FeeManager, Rounds/RoundsStorage,
Appeals); flags take precedence over the file. Adds a prepare script so
npm install from a git ref builds dist. Verified: 576 vitest tests, full
manual smoke (add/list/set/info/remove with a deployment file).

* chore(deps): bump genlayer-js to v2-dev tip for vesting actions

The locked v2-dev SHA (28e99fbc) predates the vesting client actions;
vestingValidatorJoin and friends land at 666d1156. Verified live:
vesting validator create succeeds against a #1162-branch consensus
deployment.

* docs(cli): regenerate API references; fix option placeholder regex

The docs generator's option regex only matched <word> placeholders, so
flags with dots or hyphens in the value name (--base <built-in-alias>,
--deployment <path.json>, --deployment-key <dot.path>) were silently
dropped from the options tables. Widen to <[^>]+> and regenerate: adds
the network add/remove pages and the previously undocumented vesting
command section (validator create/deposit/exit/claim, operator-transfer,
set-identity, delegate/undelegate/claim/withdraw/list).

* fix(vesting): resolve validator wallet address in create output

The join receipt does not carry the new wallet address, so the output
printed validatorWallet: undefined. Read getValidatorWallets from the
vesting contract after the join and report the newest entry. Verified
live against a #1162-branch deployment.
* fix: make git install build script self contained

* chore: refresh genlayer-js lockfile

* fix: make keychain dependency optional

* fix: restore git prepare build

* fix: include build dependency for git installs

* chore: keep esbuild as dev dependency
* ci: add clarke cli tarball release

* ci: publish prereleases to npm dist tags
@coderabbitai

coderabbitai Bot commented Jul 8, 2026

Copy link
Copy Markdown

Review Change Stack

Caution

Review failed

The pull request is closed.

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 11469729-3023-4bd1-bdc1-c98d61616b02

📥 Commits

Reviewing files that changed from the base of the PR and between 2100255 and b5dbdb7.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (113)
  • .github/workflows/publish.yml
  • .github/workflows/smoke.yml
  • .github/workflows/sync-docs.yml
  • CHANGELOG.md
  • CONTRIBUTING.md
  • README.md
  • docs/BRANCHING.md
  • docs/api-references/_meta.json
  • docs/api-references/accounts/account/send.mdx
  • docs/api-references/configuration/network.mdx
  • docs/api-references/configuration/network/add.mdx
  • docs/api-references/configuration/network/remove.mdx
  • docs/api-references/contracts/call.mdx
  • docs/api-references/contracts/deploy.mdx
  • docs/api-references/contracts/write.mdx
  • docs/api-references/estimate-fees.mdx
  • docs/api-references/finalize-batch.mdx
  • docs/api-references/finalize.mdx
  • docs/api-references/index.mdx
  • docs/api-references/localnet/localnet/validators/create-random.mdx
  • docs/api-references/staking/staking.mdx
  • docs/api-references/staking/staking/active-validators.mdx
  • docs/api-references/staking/staking/banned-validators.mdx
  • docs/api-references/staking/staking/delegation-info.mdx
  • docs/api-references/staking/staking/delegator-claim.mdx
  • docs/api-references/staking/staking/delegator-exit.mdx
  • docs/api-references/staking/staking/delegator-join.mdx
  • docs/api-references/staking/staking/epoch-info.mdx
  • docs/api-references/staking/staking/prime-all.mdx
  • docs/api-references/staking/staking/quarantined-validators.mdx
  • docs/api-references/staking/staking/set-identity.mdx
  • docs/api-references/staking/staking/set-operator.mdx
  • docs/api-references/staking/staking/validator-claim.mdx
  • docs/api-references/staking/staking/validator-deposit.mdx
  • docs/api-references/staking/staking/validator-exit.mdx
  • docs/api-references/staking/staking/validator-history.mdx
  • docs/api-references/staking/staking/validator-info.mdx
  • docs/api-references/staking/staking/validator-join.mdx
  • docs/api-references/staking/staking/validator-prime.mdx
  • docs/api-references/staking/staking/validators.mdx
  • docs/api-references/transactions/receipt.mdx
  • docs/api-references/vesting.mdx
  • docs/api-references/vesting/claim.mdx
  • docs/api-references/vesting/delegate.mdx
  • docs/api-references/vesting/list.mdx
  • docs/api-references/vesting/undelegate.mdx
  • docs/api-references/vesting/validator.mdx
  • docs/api-references/vesting/validator/claim.mdx
  • docs/api-references/vesting/validator/create.mdx
  • docs/api-references/vesting/validator/deposit.mdx
  • docs/api-references/vesting/validator/exit.mdx
  • docs/api-references/vesting/validator/join.mdx
  • docs/api-references/vesting/validator/list.mdx
  • docs/api-references/vesting/validator/operator-transfer.mdx
  • docs/api-references/vesting/validator/operator-transfer/cancel.mdx
  • docs/api-references/vesting/validator/operator-transfer/complete.mdx
  • docs/api-references/vesting/validator/operator-transfer/initiate.mdx
  • docs/api-references/vesting/validator/set-identity.mdx
  • docs/api-references/vesting/validator/status.mdx
  • docs/api-references/vesting/withdraw.mdx
  • package.json
  • scripts/generate-cli-docs.mjs
  • scripts/run-esbuild.mjs
  • src/commands/account/index.ts
  • src/commands/account/send.ts
  • src/commands/account/show.ts
  • src/commands/contracts/deploy.ts
  • src/commands/contracts/estimateFees.ts
  • src/commands/contracts/fees.ts
  • src/commands/contracts/index.ts
  • src/commands/contracts/write.ts
  • src/commands/network/index.ts
  • src/commands/network/setNetwork.ts
  • src/commands/staking/StakingAction.ts
  • src/commands/staking/index.ts
  • src/commands/staking/validatorHistory.ts
  • src/commands/staking/validators.ts
  • src/commands/staking/wizard.ts
  • src/commands/vesting/VestingAction.ts
  • src/commands/vesting/claim.ts
  • src/commands/vesting/delegate.ts
  • src/commands/vesting/index.ts
  • src/commands/vesting/list.ts
  • src/commands/vesting/undelegate.ts
  • src/commands/vesting/validatorClaim.ts
  • src/commands/vesting/validatorCreate.ts
  • src/commands/vesting/validatorDeposit.ts
  • src/commands/vesting/validatorExit.ts
  • src/commands/vesting/validatorList.ts
  • src/commands/vesting/validatorOperatorTransfer.ts
  • src/commands/vesting/validatorSetIdentity.ts
  • src/commands/vesting/vestingTypes.ts
  • src/commands/vesting/withdraw.ts
  • src/index.ts
  • src/lib/actions/BaseAction.ts
  • src/lib/clients/system.ts
  • src/lib/config/simulator.ts
  • src/lib/networks/customNetworks.ts
  • tests/actions/customNetworkProfiles.test.ts
  • tests/actions/deploy.test.ts
  • tests/actions/estimateFees.test.ts
  • tests/actions/write.test.ts
  • tests/commands/deploy.test.ts
  • tests/commands/estimateFees.test.ts
  • tests/commands/network.test.ts
  • tests/commands/staking.test.ts
  • tests/commands/stakingValidators.test.ts
  • tests/commands/vesting.test.ts
  • tests/commands/write.test.ts
  • tests/index.test.ts
  • tests/libs/system.test.ts
  • tests/services/simulator.test.ts
  • tests/smoke.test.ts

📝 Walkthrough

Walkthrough

This PR adds fee-profile support to deploy/write/estimate-fees commands, introduces custom network profile management (add/remove), adds a staking validators discovery command with explorer enrichment, and implements a full vesting CLI feature (delegator and validator operations). It also updates publish/smoke CI workflows, build scripts, and documentation.

Changes

Fee Profile Support

Layer / File(s) Summary
Fee profile parsing library
src/commands/contracts/fees.ts
Expands ContractFeeCliOptions, adds FeeProfileTarget, message allocation normalization, and exports parseFeeEstimateOptions, toTransactionFees, resolveTransactionFees.
Command wiring
src/commands/contracts/{deploy,write,estimateFees,index}.ts
Wires --fee-profile, --fee-preset, --appeal-rounds flags into deploy/write/estimate-fees and switches to resolveTransactionFees.
Tests and docs
tests/actions/{deploy,write,estimateFees}.test.ts, tests/commands/{deploy,estimateFees,write}.test.ts, README.md, docs/api-references/contracts/*, docs/api-references/estimate-fees.mdx
Adds fee-profile test coverage and documents new CLI options.

Custom Network Profiles

Layer / File(s) Summary
Custom network config library
src/lib/networks/customNetworks.ts, src/lib/actions/BaseAction.ts
Adds types, deployment parsing, profile application, and updates resolveNetwork/getCustomNetworks.
network add/remove and network-aware actions
src/commands/network/*.ts, src/commands/account/*.ts, src/commands/staking/{StakingAction,wizard}.ts
Adds addNetwork/removeNetwork and updates network resolution across actions.
Tests and docs
tests/actions/customNetworkProfiles.test.ts, tests/commands/network.test.ts, docs/api-references/configuration/network/*
Adds custom network tests and add/remove docs pages.

Staking Validators Discovery

Layer / File(s) Summary
ValidatorsAction implementation
src/commands/staking/validators.ts
Implements validator status computation, sorting, explorer enrichment, JSON/table output.
Command wiring and validator history
src/commands/staking/{index,validatorHistory}.ts
Wires ValidatorsAction, updates --network help text, updates slashing address resolution.
Tests and docs
tests/commands/staking*.test.ts, docs/api-references/staking/*
Adds validators command tests and updates staking docs.

Vesting CLI Feature

Layer / File(s) Summary
Types and base action
src/commands/vesting/{vestingTypes,VestingAction}.ts
Defines vesting client types and base action for keystore/client resolution.
Delegator commands
src/commands/vesting/{list,delegate,undelegate,claim,withdraw}.ts
Implements list/delegate/undelegate/claim/withdraw actions.
Validator commands
src/commands/vesting/validator*.ts
Implements validator create/join/deposit/exit/claim/list/operator-transfer/set-identity.
CLI wiring
src/commands/vesting/index.ts, src/index.ts
Registers all vesting subcommands.
Tests and docs
tests/commands/vesting.test.ts, docs/api-references/vesting/*
Adds comprehensive tests and documentation pages.

CI/Publish Workflow, Build Scripts, and Small Fixes

Layer / File(s) Summary
Publish and smoke workflows
.github/workflows/{publish,smoke,sync-docs}.yml
Adds prerelease dist-tag handling, increases smoke timeout, removes generated _meta.json write.
Build scripts
package.json, scripts/run-esbuild.mjs
Replaces cross-env with run-esbuild.mjs, bumps version, moves keytar to optional deps.
System error handling and Gemini rename
src/lib/clients/system.ts, src/lib/config/simulator.ts
Throws explicit errors on command/version failures; renames geminiai to google.
Docs and changelog
CHANGELOG.md, CONTRIBUTING.md, docs/BRANCHING.md
Adds release notes and branching documentation.

Estimated code review effort: 4 (Complex) | ~75 minutes

Sequence Diagram(s)

sequenceDiagram
  participant CLI
  participant ResolveTransactionFees
  participant FeeProfileFile
  participant GenLayerClient
  CLI->>ResolveTransactionFees: deploy/write/estimate-fees(options)
  ResolveTransactionFees->>FeeProfileFile: read fee-profile.json
  FeeProfileFile-->>ResolveTransactionFees: profile entries
  ResolveTransactionFees->>GenLayerClient: estimateTransactionFees(request)
  GenLayerClient-->>ResolveTransactionFees: distribution + feeValue
  ResolveTransactionFees-->>CLI: transaction fees
Loading
sequenceDiagram
  participant CLI
  participant ValidatorsAction
  participant StakingClient
  participant ExplorerAPI
  CLI->>ValidatorsAction: staking validators --explorer-url
  ValidatorsAction->>StakingClient: fetch validator sets + epoch info
  ValidatorsAction->>ExplorerAPI: fetch performance/delegator data
  ExplorerAPI-->>ValidatorsAction: merged performance metrics
  ValidatorsAction-->>CLI: JSON or table output
Loading

Possibly related PRs

Suggested reviewers: cristiam86, danielrc888

✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch v0.40-dev

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 ESLint

If the error stems from missing dependencies, add them to the package.json file. For unrecoverable errors (e.g., due to private dependencies), disable the tool in the CodeRabbit configuration.

scripts/generate-cli-docs.mjs

Parsing error: "parserOptions.project" has been provided for @typescript-eslint/parser.
The file was not found in any of the provided project(s): scripts/generate-cli-docs.mjs

scripts/run-esbuild.mjs

Parsing error: "parserOptions.project" has been provided for @typescript-eslint/parser.
The file was not found in any of the provided project(s): scripts/run-esbuild.mjs


Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@MuncleUscles MuncleUscles merged commit c7ef3ea into main Jul 8, 2026
1 of 4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants