Skip to content

Exchange storage key DKG artifacts over Iroh - #2434

Open
huitseeker wants to merge 9 commits into
issue-2426-golden-storage-key-bootstrapfrom
issue-2426-iroh-docs-bulletin-board
Open

Exchange storage key DKG artifacts over Iroh#2434
huitseeker wants to merge 9 commits into
issue-2426-golden-storage-key-bootstrapfrom
issue-2426-iroh-docs-bulletin-board

Conversation

@huitseeker

@huitseeker huitseeker commented Aug 4, 2026

Copy link
Copy Markdown
Contributor

Stacked on #2433.

This replaces manual public file exchange with one shared Iroh document. One operator starts dkg board from the genesis file, threshold, and epoch, then sends the private ticket to each validator through the trusted bootstrap channel. Each operator runs dkg run with that ticket, the genesis file, its signing key, a private work directory, and an output directory.

The runners exchange signed public artifacts, resume after restarts, and write local storage key bundles. Operators compare the shared public output, keep each secret share private, and start validators only after every runner succeeds. An opt-in Compose check runs the full three-validator flow.

Changelog

[[entry]]
scope       = "validator"
impact      = "added"
description = "Adds an Iroh bulletin board for exchanging storage key DKG artifacts."

@huitseeker
huitseeker force-pushed the issue-2426-iroh-docs-bulletin-board branch from 1e1d453 to 4550f53 Compare August 4, 2026 17:48
@huitseeker
huitseeker marked this pull request as ready for review August 4, 2026 18:07
Comment thread bin/validator/src/main.rs Outdated
Comment thread compose/validator.yml Outdated
- --admin.listen=0.0.0.0:50102

services:
golden-dkg-check:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Could you explain what this is doing?

I assume it actually runs the dkg if it wasn't done before? If so, shouldn't this go under bootstrap?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

This always runs a fresh DKG. It is an opt-in Compose integration check for the Iroh exchange, not validator provisioning. PR #2433 owns bootstrap.

Comment on lines +5 to +6
#[tokio::test]
async fn final_confirmation_cannot_be_copied_between_validator_slots() -> anyhow::Result<()> {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Could you add a comment to this test explaining what its guarding against

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Added. It guards against copying one validator’s signed final confirmation into another (the wrong) validator’s slot.

Comment thread bin/validator/src/commands/dkg/tests.rs Outdated
Comment on lines +715 to +716
#[tokio::test]
async fn iroh_board_restarts_a_runner_and_completes_three_validator_ceremony() -> TestResult {

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Could you also add a comment here explaining what this is for?

From the name it sounds like the iroh restarts a runner, and then somehow completes a ceremony. I don't know what a runner is?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Renamed and documented. It stops one validator after saving its identity, then proves all three validators can complete after it restarts.

Comment thread bin/validator/src/commands/dkg/runner.rs Outdated

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I'm finding this quite inscrutable - I don't know the goal; nor the terminology used so its really difficult to follow and hold in my head.

Can this be broken up into a simpler state machine?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

The board is the bounded transport, not the ceremony state machine. A slot is empty, valid with one value, or poisoned by a conflict. runner.rs owns the ceremony order. I added this contract at the module start. iroh-docs also has extensive doc.

Comment on lines +47 to +49
The command writes one board ticket. Send the file to each genesis validator through the authenticated bootstrap
channel. The ticket grants read access and permission to upload bounded ceremony artifacts. Do not publish it. Keep the
board running until every validator reports ceremony completion, then stop it with Ctrl-C.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

Could you explain what a board ticket actually is?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

Documented. It contains the Iroh address, a read-only document capability, and a bearer upload secret. It contains no private DKG share.

The ticket lets validators read shared ceremony artifacts and upload their own. Since this access is shared, we send the ticket only to participating validators through the authenticated bootstrap channel.

@Mirko-von-Leipzig

Copy link
Copy Markdown
Collaborator

I think broadly speaking this would benefit from an explanation/goal and having the code model that.

@huitseeker
huitseeker force-pushed the issue-2426-iroh-docs-bulletin-board branch from 3258fcb to 48e8586 Compare August 5, 2026 13:39
@huitseeker huitseeker changed the title Exchange Golden DKG artifacts over Iroh Exchange storage key DKG artifacts over Iroh Aug 5, 2026
@huitseeker
huitseeker force-pushed the issue-2426-iroh-docs-bulletin-board branch from df7aa83 to 008bd45 Compare August 5, 2026 23:24
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.

2 participants