Skip to content

test(net): integration test for the /net multi-device signing flow#2

Merged
danielgorgonha merged 3 commits into
mainfrom
test/net-flow-integration
Jul 25, 2026
Merged

test(net): integration test for the /net multi-device signing flow#2
danielgorgonha merged 3 commits into
mainfrom
test/net-flow-integration

Conversation

@danielgorgonha

Copy link
Copy Markdown
Member

Closes the automated-test gap for the live /net ceremony (flagged in the slice-2 merge review). Drives the exact WASM API the NetVault screen calls, in one process: a real 3-party DKG (2-of-3) → signing ceremony over the real Orchard sighash /net now signs → every device derives the same group key and the aggregate verifies (coordinator + independent verifyRedpallas). Also asserts describeOutputs surfaces the recipient + value shown before signing.

Only the relay transport and React rendering stay uncovered; the cryptography is end-to-end. 29 UI tests green.

Closes the automated-test gap flagged when /net moved to signing a real Orchard
sighash. Drives the exact WASM API NetVault calls, in one process: a real 3-party
DKG (2-of-3), then a signing ceremony over the real sighash, asserting every device
derives the same group key and the aggregate verifies (coordinator + independent
verifyRedpallas). Also asserts describeOutputs surfaces the recipient + value the UI
shows before signing. Only the relay transport and React rendering remain uncovered;
the cryptography is end-to-end.
@vercel

vercel Bot commented Jul 16, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
konclave-demo Ready Ready Preview, Comment Jul 16, 2026 5:51pm

Request Review

The multi-device ceremony could only sign under a commitment-derived seed, which cannot
express an Orchard spend's randomizer — the alpha is fixed by the transaction (read from
the PCZT via pczt_bridge::extract_randomizers). Add the real-transaction signing path:

- ceremony::participant_round2_with_randomizer / coordinator_aggregate_with_randomizer /
  verify_with_randomizer — sign and verify under an explicit alpha (frost-rerandomized's
  Randomizer + RandomizedParams::from_randomizer).
- JS surface: participantRound2WithRandomizer + Coordinator.aggregateWithRandomizer /
  verifyWithRandomizer.
- Native test: a 2-of-3 signs under the real mainnet alpha (aab00f90…) and verifies under
  ak+alpha; a mismatched alpha fails.

This is the crypto unblock for a real browser broadcast: a signature produced this way
verifies exactly as an Orchard spend does on-chain, so it can be injected (inject_sigs)
and broadcast. Adds frost-rerandomized as a direct dep (pinned to reddsa 0.5.2's version).
Ship the randomizer signing surface in the wasm-pkg the browser loads, and extend the
/net integration test: a 2-of-3 DKG-born vault signs the real sighash under the PCZT
Orchard alpha (participantRound2WithRandomizer + aggregateWithRandomizer) and verifies
under ak+alpha; a mismatched alpha fails. Refactor the shared DKG into a helper.
@danielgorgonha
danielgorgonha merged commit be8fd4f into main Jul 25, 2026
6 checks passed
@danielgorgonha
danielgorgonha deleted the test/net-flow-integration branch July 25, 2026 19:29
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.

1 participant