Components
A gateway response proves nothing by itself. Treat it as unverified until you verify the attestation on your chain or with
molpha-verifier.
Design invariants
- Stateless verification on EVM and Starknet.
verify()holds no feed, round or reward state; everything arrives in calldata. One signed payload is valid on every chain at once. - No
chainIdin the signed message. One signing round serves every chain. - The signature commits to the signer set.
signersBitmapis inside the signed message. - Selection is derivable on-chain. The eligible group comes from
(sourceId, registryVersion, timestamp / 1000), the quorum and the snapshot’s redundancy buffer. Verifiers re-derive it and never take it from the caller. - Registry snapshots fix their key sets. A signature is checked against the snapshot its payload names. A superseded snapshot stays acceptable only for a grace period. See Registry versions.
- Plain-sum aggregation with proof of possession. No delinearization coefficients and no precomputed global key; rogue-key safety comes from proof of possession at registration.
- Replay and freshness belong to the consumer. Verifiers check signatures, not usage. See the consumer checklist.
Next steps
Cryptography
Selection, proof of possession and the verification pipeline.
Solana program
Accounts, instructions, epochs and slashing.
Security model
What verification proves and who you trust.