What it does
- Collect signatures. P-256 signatures keyed by
proposal_idcome in from the validator quorum. Invalid signatures, and signatures from unknown validators, are rejected. - Pre-flight checks. Before forwarding to the signing quorum, the aggregator runs multi-RPC consistency checks, per-validator rate limits, an output-address whitelist, and a circuit breaker that pauses forwarding on consistency failures.
- Forward at threshold. At 3-of-4 it forwards to the TEE-enforced signing quorum (Privy) with the three validator signatures as authorization.
- Assemble + broadcast. It assembles the resulting Pearl / Solana transaction, verifies it locally against the validator-attested intent, and broadcasts to the right chain.
- Emit lifecycle events. Each transition fires through
sig_event_publisherand thesqs_publisher→ SQS → NacreScan ingester so the explorer’s intent timeline stays current with the on-chain state.
Crate layout
The aggregator is split into a library plus a binary entry plus two broadcaster impls; the binary composes them at startup via aCompositeBroadcaster that routes on the proposal’s ProposalKind.
| Crate | Role |
|---|---|
nacre-sig-aggregator | Library: signature collection, pre-flight checks, lifecycle event publisher, broadcaster trait. |
nacre-sig-aggregator-bin | Binary entry; wires the library against the concrete broadcasters at boot. |
nacre-pearl-broadcaster | Broadcaster impl for Pearl ProposalKinds — Cold Reserve sweep, redemption broadcast. |
nacre-solana-broadcaster | Broadcaster impl for Solana ProposalKinds — mint_deposit, complete_redemption, claim_cold_reserve_utxo. |