Skip to content

Signatures and Replay Protection

Document Control Value
Document ID TP-SPEC-003
Status Approved for Devnet MVP
Purpose Explain the current message-binding and anti-replay model without exposing sensitive operations

The protocol relies on signed messages for oracle pulse publication and on state-based guards for idempotency and replay resistance.

1. Current replay protection layers

Layer Current role
Program ID binding Prevents signatures from being meaningfully reused against a different deployment context
Round binding Ties pulse acceptance and ticket actions to one round
User / nonce binding Prevents one commitment from being reused as if it belonged to a different ticket
State flags Prevent repeated execution after pulse, reveal, claim, or refund has already occurred
Timing windows Reject signatures or actions outside valid commit / reveal / refund windows

2. What is verified today

Flow Verification approach
Pulse publication The transaction must include a valid Ed25519 verification instruction that matches the expected message and oracle pubkey
Reveal The program recomputes the commitment hash from revealed inputs and compares it with the ticket state
Claim / refund Ticket and round state must show the operation is eligible and not already consumed

3. Practical meaning for reviewers

Question Current answer
Can a pulse be replayed into the wrong round? Not if the signed message and round binding are checked correctly
Can a winner claim twice? No, claim is state-guarded
Can a user reveal a different guess than the committed one? No, the recomputed commitment must match the stored commitment
Can a timeout refund coexist with a valid pulse? It should not, because refund eligibility depends on the absence of a valid pulse

4. Scope note

This page intentionally avoids publishing byte-level message templates or operational signing procedures that would be more appropriate in private implementation documentation.