Skip to content

dkg: sign the proposer config at cluster creation - #4835

Open
KaloyanTanev wants to merge 2 commits into
kalo/proposer-config-runtimefrom
kalo/proposer-config-create
Open

KaloyanTanev wants to merge 2 commits into
kalo/proposer-config-runtimefrom
kalo/proposer-config-create

Conversation

@KaloyanTanev

Copy link
Copy Markdown
Collaborator

Creates the first signed revision of the proposer config together with the cluster. charon dkg makes 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 to vc-config/proposer-config.json. charon alpha edit add-validators carries the current file's content (or the lock and overrides file when absent) into the new lock's file, and charon create cluster signs it with every node key.

newNodeSigBcast takes a message ID so the K1 signature exchange runs twice (lock hash and proposer config hash), the content agreement is a new bcast message MsgProposerConfigContent.

category: feature
ticket: #4324

@KaloyanTanev KaloyanTanev self-assigned this Nov 10, 2026
@KaloyanTanev
KaloyanTanev added this pull request to stack #4832 November 10, 2026 15:17
@github-actions github-actions Bot added the branch-invalid PR raised against invalid branch. Not a main or release branch. label Nov 10, 2026
@codecov

codecov Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

Codecov Report

❌ Patch coverage is 64.61039% with 109 lines in your changes missing coverage. Please review.
✅ Project coverage is 68.26%. Comparing base (bb0fc8f) to head (1698608).

Files with missing lines Patch % Lines
dkg/dkgpb/v1/proposerconfig.pb.go 0.00% 43 Missing ⚠️
dkg/proposerconfig.go 85.60% 19 Missing ⚠️
app/proposerconfig.go 0.00% 18 Missing ⚠️
cluster/proposerconfig/proposerconfig.go 0.00% 18 Missing ⚠️
cmd/createcluster.go 82.35% 6 Missing ⚠️
dkg/dkg.go 87.80% 5 Missing ⚠️
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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@KaloyanTanev
KaloyanTanev force-pushed the kalo/proposer-config-create branch from 4523730 to 1698608 Compare November 10, 2026 15:59
@sonarqubecloud

Copy link
Copy Markdown

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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

Comment thread app/proposerconfig.go Resolved
@KaloyanTanev
KaloyanTanev marked this pull request as ready for review November 11, 2026 13:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

branch-invalid PR raised against invalid branch. Not a main or release branch.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants