Repository navigation
dkg: sign the proposer config at cluster creation - #4835
KaloyanTanev wants to merge 2 commits into
Conversation
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## kalo/proposer-config-runtime #4835 +/- ##
================================================================
+ Coverage 68.23% 68.26% +0.03%
================================================================
Files 262 264 +2
Lines 34310 34597 +287
================================================================
+ Hits 23410 23618 +208
- Misses 10899 10978 +79
Partials 1 1 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
4523730 to
1698608
Compare
|
There was a problem hiding this comment.
🟡 Changes recommended
Adding validators to supported v1.6.0 clusters without a proposer-config file now fails because legacy locks lack builder registrations and need fee-recipient handling that also honors overrides.
1 open issue
What changed in this PR
This PR adds signed proposer configuration to Charon’s cluster-creation flow, establishing agreed fee recipients, gas limits, and builder settings before runtime.
Changes:
- Agree on proposer settings before DKG, then sign and write revision 1 alongside the cluster lock.
- Preserve existing proposer settings when adding validators and sign configurations during local cluster creation.
- Extend CLI flags, tests, generated protocol messages, and documentation.
| File | Description |
|---|---|
testutil/integration/nightly_dkg_test.go |
Supplies default proposer seeds. |
docs/dkg.md |
Documents the signed output file. |
docs/configuration.md |
Clarifies seed flag behavior. |
dkg/protocolsteps_internal_test.go |
Passes the lock-signature message ID. |
dkg/protocol_reshare.go |
Specifies the lock-signature message ID. |
dkg/protocol_replaceoperator.go |
Specifies the lock-signature message ID. |
dkg/protocol_removeoperators.go |
Specifies the lock-signature message ID. |
dkg/protocol_addoperators.go |
Specifies the lock-signature message ID. |
dkg/proposerconfig.go |
Implements agreement, carryover, and signing. |
dkg/proposerconfig_internal_test.go |
Tests agreement and configuration carryover. |
dkg/nodesigs.go |
Supports separate signature exchanges. |
dkg/nodesigs_internal_test.go |
Updates signature-exchange tests. |
dkg/dkgpb/v1/proposerconfig.proto |
Defines configuration broadcast messages. |
dkg/dkgpb/v1/proposerconfig.pb.go |
Adds generated message bindings. |
dkg/dkg.go |
Integrates agreement, signing, and persistence. |
dkg/dkg_test.go |
Tests signed outputs and invalid inputs. |
cmd/testdata/TestCreateCluster_two_partial_deposits_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_two_partial_deposits_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_test_with_fee_recipient_and_withdrawal_addresses_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_test_with_fee_recipient_and_withdrawal_addresses_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_splitkeys_with_cluster_definition_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_splitkeys_with_cluster_definition_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_splitkeys_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_splitkeys_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_solo_flow_definition_from_network_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_solo_flow_definition_from_network_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_solo_flow_definition_from_disk_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_solo_flow_definition_from_disk_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_simnet_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_simnet_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_goerli_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_goerli_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_four_partial_deposits_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_four_partial_deposits_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_custom_testnet_flags_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_custom_testnet_flags_files.golden |
Adds expected configuration directories. |
cmd/testdata/TestCreateCluster_custom_target_gas_limit_output.golden |
Adds proposer config to expected output. |
cmd/testdata/TestCreateCluster_custom_target_gas_limit_files.golden |
Adds expected configuration directories. |
cmd/run.go |
Shares seed flags with command-specific help. |
cmd/edit.go |
Logs proposer configuration replacement guidance. |
cmd/edit_replaceoperator_internal_test.go |
Uses the default-seed test helper. |
cmd/edit_removeoperators_internal_test.go |
Uses the default-seed test helper. |
cmd/edit_addvalidators.go |
Passes configuration and override paths. |
cmd/edit_addvalidators_internal_test.go |
Checks signed configuration after appending. |
cmd/edit_addoperators_internal_test.go |
Uses the default-seed test helper. |
cmd/dkg.go |
Exposes proposer seed flags. |
cmd/createcluster.go |
Signs and writes each node’s configuration. |
cmd/createcluster_internal_test.go |
Tests seed validation and signed outputs. |
cmd/cmd_internal_test.go |
Tests new flags and help text. |
cluster/proposerconfig/proposerconfig.go |
Adds configuration normalization. |
cluster/proposerconfig/delta.go |
Exports canonical configuration comparison. |
app/proposerconfig.go |
Derives initial recipients from registrations and overrides. |
Review effort: Balanced




Creates the first signed revision of the proposer config together with the cluster.
charon dkgmakes all operators agree on the--proposer-config-*seeding flags before key generation, then signs the revision 1 document in the node signatures step and writes it tovc-config/proposer-config.json.charon alpha edit add-validatorscarries the current file's content (or the lock and overrides file when absent) into the new lock's file, andcharon create clustersigns it with every node key.newNodeSigBcasttakes a message ID so the K1 signature exchange runs twice (lock hash and proposer config hash), the content agreement is a new bcast messageMsgProposerConfigContent.category: feature
ticket: #4324