Repository navigation
Add stake-pool bls-registration-certificate to change a pool's BLS key from an existing registration certificate - #1489
Merged
carbolymer merged 2 commits intoOct 29, 2026
Conversation
stake-pool bls-registration-certificate to change a pool's BLS key from an existing registration certificate
carbolymer
force-pushed
the
mgalazyn/feature/bls-registration-certificate
branch
3 times, most recently
from
October 28, 2026 17:58
735c7af to
cee5c76
Compare
carbolymer
marked this pull request as ready for review
October 28, 2026 18:02
carbolymer
requested review from
a team,
Jimbo4350,
disassembler,
kevinhammond and
palas
as code owners
October 28, 2026 18:02
carbolymer
commented
Oct 28, 2026
|
|
||
| - name: Cache and install Cabal dependencies | ||
| uses: input-output-hk/cardano-dev/actions/cabal-cache@cabal-cache-0.0.1.0 | ||
| uses: input-output-hk/cardano-dev/actions/cabal-cache@cabal-cache-0.0.1.1 |
Contributor
Author
There was a problem hiding this comment.
Fix for duplicated entries in GHA cache
Contributor
There was a problem hiding this comment.
🔵 Needs a closer look
Conway and legacy-envelope compatibility relies on cardano-api/ledger decoders absent from this checkout, so the cross-era golden tests must be confirmed against pinned dependencies before approval.
No open issues 🎉
What changed in this PR
Adds dijkstra stake-pool bls-registration-certificate offline so pool operators can register or rotate a BLS key using an existing registration certificate without re-entering unrelated pool parameters. This implements the certificate-file portion of #1479; other parameter sources and signing documentation remain follow-up work.
Changes:
- Adds command parsing and execution, BLS key reporting, same-key warnings, and rejection of non-pool certificates.
- Adds property tests, golden tests, certificate fixtures, and help output covering parameter preservation and compatibility scenarios.
- Documents the feature in the changelog and updates the CI Cabal-cache action.
| File | Description |
|---|---|
cardano-cli/test/cardano-cli-test/Test/Cli/Certificates/StakePoolBlsKey.hs |
Adds a property checking preservation of all non-BLS parameters. |
cardano-cli/test/cardano-cli-golden/Test/Golden/Dijkstra/StakePool/BlsRegistrationCertificate.hs |
Tests rotation, first registration, legacy inputs, warnings, and rejection. |
cardano-cli/test/cardano-cli-golden/files/input/shelley/keys/bls_keys/signing_key_2 |
Supplies a second test key for rotation. |
cardano-cli/test/cardano-cli-golden/files/input/dijkstra/stake_pool/registration_certificate.json |
Supplies a basic Dijkstra registration fixture. |
cardano-cli/test/cardano-cli-golden/files/input/dijkstra/stake_pool/registration_certificate_rich_params.json |
Supplies a fixture with margin, relays, and metadata. |
cardano-cli/test/cardano-cli-golden/files/input/conway/stake_pool/registration_certificate_rich_params.json |
Supplies a Conway compatibility fixture. |
cardano-cli/test/cardano-cli-golden/files/input/conway/stake_address/always_abstain_deleg.cert |
Supplies a non-pool certificate for rejection testing. |
cardano-cli/test/cardano-cli-golden/files/golden/help/dijkstra_stake-pool.cli |
Lists the new stake-pool command. |
cardano-cli/test/cardano-cli-golden/files/golden/help/dijkstra_stake-pool_bls-registration-certificate_offline.cli |
Records offline command options and help. |
cardano-cli/test/cardano-cli-golden/files/golden/help.cli |
Updates aggregate help output. |
cardano-cli/test/cardano-cli-golden/files/golden/dijkstra/stake_pool/bls_registration_certificate.json |
Records the expected rotated certificate. |
cardano-cli/src/Cardano/CLI/Type/Error/StakePoolCmdError.hs |
Adds an error for non-registration certificates. |
cardano-cli/src/Cardano/CLI/EraBased/StakePool/Run.hs |
Reads parameters, replaces the BLS key, reports changes, and writes the certificate. |
cardano-cli/src/Cardano/CLI/EraBased/StakePool/Option.hs |
Adds Dijkstra-only offline command parsing. |
cardano-cli/src/Cardano/CLI/EraBased/StakePool/Command.hs |
Defines command arguments and the certificate parameter source. |
cardano-cli/cardano-cli.cabal |
Registers both new test modules. |
.github/workflows/haskell.yml |
Updates the Cabal-cache action to 0.0.1.1. |
.changes/20261028_bls_registration_certificate.yml |
Documents the new command and supported inputs. |
Review effort: Balanced
carbolymer
force-pushed
the
mgalazyn/feature/bls-registration-certificate
branch
from
October 29, 2026 08:45
cee5c76 to
6202982
Compare
`cardano-cli dijkstra stake-pool bls-registration-certificate offline` reads an existing stake pool registration certificate and writes a new one that changes only the pool's BLS key and its proof of possession, derived from the given BLS signing key. Part of #1479.
…rtificate The command already reads Conway pool registration certificates, including the older CertificateShelley and CertificateConway envelope types, and treats them as having no BLS key. Operators have only such certificates right after the hard fork, so lock this in with tests.
carbolymer
force-pushed
the
mgalazyn/feature/bls-registration-certificate
branch
from
October 29, 2026 09:48
6202982 to
a738654
Compare
3 of 4 tasks
Jimbo4350
reviewed
Oct 29, 2026
Jimbo4350
approved these changes
Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Context
Part of:
This PR does not close the issue: a follow-up PR adds the other two parameter sources, and a developer portal PR documents the signing workflow.
The new
cardano-cli dijkstra stake-pool bls-registration-certificate offlinecommand reads an existing pool registration certificate. It keeps every pool parameter and replaces only the BLS key and its proof of possession. It prints the pool ID and the old and new keys, and warns if they are equal. It accepts Conway-era certificates, including the olderCertificateShelleyandCertificateConwayenvelope types, and treats them as having no BLS key. A pool can therefore register its first BLS key right after the hard fork, when this is the only kind of certificate its operator has.offlineis a subcommand because a follow-up PR adds anonlinesibling, which queries a node by pool ID for the current or pending parameters. That PR also adds a second offline source, the output ofquery pool-state. Both depend on:There are two deliberate differences from the issue text. First, the command takes
--bls-signing-key-file, not a BLS verification key plus a proof of possession. This matchesstake-pool registration-certificatesince the PR below, which removed standalone proof-of-possession files. So checking the key means checking the signing key file, because a proof built from that key is always valid.Second, the "pool parameters file" in the issue will be the
query pool-stateoutput, which arrives in the follow-up PR.The signing workflow (owner and cold-key witnesses, then
transaction assemble) will be documented in the developer portal in a separate PR.How to trust this PR
Golden tests cover these cases:
An end-to-end Hedgehog property generates pool parameters and passes them through the CLI. It checks that only the BLS key changes. The help output has golden files too.
Checklist
.changes/