$FLIP commit-reveal client seeds · verify panel 1:1 with SOL
- $FLIP matches are now commit-reveal fair. Before this release, token-currency outcomes were derived from
vrf[0] % 2with no player seed contribution — provable-fair against the oracle but asymmetric vs. SOL'sSHA256(vrf ‖ seedA ‖ seedB) % 2. The fix: each player's SPL deposit tx now bundles an SPL Memo v2 ix carryingflipseed:<sha256(seed)>, committing the seed on-chain BEFORE the Switchboard oracle reveals. The worker validates each memo against the plaintext seed the client POSTs, persists both seeds on the match snapshot, and the cranker derives the outcome via the exact same SHA256 formula SOL uses. Asymmetric seeding (one player committed, the other didn't) is rejected with409 seed_commitment_asymmetryso the seeded side can't stall until after the oracle to bias their pick. - Verify panel reworked for currency parity. The arena's Provably-fair panel + the /verify/:id replay page both branch on currency. New FLIP matches show the full five-field audit trail (Final entropy, Client Seed A, Client Seed B, Switchboard account, formula) identical to SOL — plus two FLIP-only rows surfacing the creator + acceptor wallets with their picks / winner badge, and Solscan-linked rows for each deposit sig so anyone can walk deposit → cranker escrow → settle-split → winner + multisig end-to-end. The
/verify/:idIndependent-replay section now emits a runnable 4-step SHA256 verifier with the match's actual values inlined, so a reader can paste it into a Node REPL and confirm the outcome without touching our code. Legacy pre-commit-reveal FLIP matches fall back to the VRF-only layout + copy. - Stopped lying about missing data. Prior releases showed
matchIdin place of client seeds on settled FLIP matches (defensive fallback from pre-FLIP days), which looked like verification data even though it was filler. The panel now leaves those fields empty for legacy rows, and the "verified" green-shield gate distinguishes genuine commit-reveal matches from the older VRF-only shape. - FLIP snapshot telemetry. New
flip_entropy_mixtiming mark fires once per settle when both seeds are mixed into the final entropy — payload carries a short prefix of the raw VRF + the mixed sha256 so operators can correlate the deposit memo commitments to the settled snapshot without reading the DO directly. Legacy pure-VRF settles skip the mark. - Backward-compat.Old clients (deposits without the memo ix) still settle via the legacy pure- VRF path — worker's
verifyFlipDeposit.expectedClientSeedHexis optional, and the cranker derivation falls back when both snapshot seeds are null. Safe to roll forward incrementally as users refresh their cached JS bundle.