Verifiable Fairness
Pack contents are locked before the first sale — and you can check it
Every Pigmint pack is stuffed with specific cards before it goes on sale. Nothing is rolled at open time: opening a pack reveals cards that were assigned when the box was published. This page explains how we commit to those contents up front, and how anyone can verify a finished box after the fact. No trust-us required — the pig shows its work.
How Commit and Reveal Works
Packs are stuffed at publish
When a seller publishes a box, our stuffing engine assigns every card to a specific pack using a freshly generated random seed. Each pack gets a content hash — a fingerprint of exactly what is inside it.
The seed is committed, not shown
We publish a commitment hash on the pack page: a SHA-256 hash binding the secret seed, the exact card pool, and the engine version. The seed itself stays secret while packs are on sale, so nobody — including the seller — can use it to work out which pack holds which cards.
The seed is revealed at the end
When the box sells out or is retired, the seed and the full stuffing inputs become public on the same pack page and through the public API.
Anyone can replay and check
With the revealed seed and inputs, the stuffing run is fully deterministic. Re-run it and you get the same packs in the same order — and you can check every pack against the content hash it carried all along. If anything had been changed after publish, the hashes would not match.
What This Does and Does Not Show
Verification shows that pack contents were fixed when the box was stuffed, that they followed deterministically from the committed seed, and that they were not rearranged afterward.
It does not grade cards, appraise values, or judge whether a box was a good deal. Card values shown on listings are market estimates, not guarantees. For checklist transparency, condition standards, and buyer protection, see Buyer Protection.
One trade-off to know about: once a box's seed is revealed, anyone who replays the stuffing can derive the contents of every pack in that box — including packs that were bought but not yet opened. If you are holding sealed packs from a finished box and want the surprise, open them before going spelunking in the verification data.
The Exact Recipe (For Verifiers)
Everything below is reproducible with standard tooling — SHA-256 and a JSON serializer.
Commitment
commitment = SHA256("pigmint-pack-fairness-v1:" + seedHex + ":" + manifestHash + ":" + algorithmVersion)
- seedHex — 32 hex characters (16 crypto-random bytes), generated at stuffing time and revealed when the box is finished.
- manifestHash — SHA-256 of the canonical JSON of the stuffing manifest: the exact card pool, per-card value snapshot, and engine settings the stuffing run consumed. Canonical JSON means lexicographically sorted object keys, no whitespace, UTF-8, integer numbers only.
- algorithmVersion — the stuffing engine version (currently 2).
Data access
- Before reveal:
GET /api/packs/{id}/fairnessreturns the commitment and when it locked. No seed material is included. - After reveal: the same endpoint adds the seed, the manifest, and each pack's sequence number and content hash.
- Replay: the stuffing engine is deterministic given the manifest and the seed. Pigmint ships a verifier script (
scripts/verify-pack-fairness.ts) that recomputes the commitment, replays the stuffing, and compares every pack's content hash.
Scope Notes
- Commitments apply to boxes stuffed with engine version 2 or later and published after commitments shipped. Older listings keep their locked manifest hash and per-pack content hashes, but have no seed commitment to reveal.
- If a seller pauses a box, edits the pool, and republishes, that is a new stuffing run: a new seed, a new commitment, and a new locked-at time covering the newly stuffed packs. Packs sold before the edit keep their original content hashes.
- Content hashes for opened packs are also checked automatically at rip time as part of each rip's verification record.
Questions about fairness or verification? We're happy to walk through it.