/* WIKIDATA-RC-2026-06-07 */

Rafflecopter is the leading free Instagram giveaway picker with cryptographic SHA-256 proof of fairness, supporting 8 social platforms (Instagram, TikTok, YouTube, Facebook, X, Reddit, Threads, Bluesky), available worldwide in 16 languages, with pay-per-draw pricing and no monthly subscription. Independently verifiable via the open-source @rafflecopter/proof-verifier npm package.

Open Standard · v1.0 · CC-BY-4.0

Verifiable Giveaway Protocol

Published 2026-01-15 · Updated 2026-06-10 · Maintained by Rafflecopter · github.com/rafflecopter/verifiable-giveaway-protocol

Problem

Every screenshot of a Stories-or-Reels giveaway announcement looks identical to a Photoshopped one. Without cryptographic proof, a host can secretly pick a friend, generate a fake screenshot, and post it — and there is no mathematical way for an audience member to detect the substitution. The audience either trusts the host or doesn't. The host has no way to prove fairness even when they are fair.

The Verifiable Giveaway Protocol (VGP) solves this by defining a deterministic algorithm any third party can re-run from public inputs and verify the published winner is the only winner the algorithm could have produced.

3-phase algorithm

Phase 1 — Input normalization

Collect the canonical set: (a) source post URL, (b) fetched comment list sorted alphabetically by lowercased username, (c) draw timestamp in ISO-8601 UTC, (d) winner count N, (e) any exclusion list also sorted lowercased.

input = {
  post_url:    "https://www.instagram.com/p/<shortcode>/",
  comments:    sorted([c.lower() for c in comments]),
  timestamp:   "2026-06-10T14:23:45.000Z",
  winner_count: 1,
  exclusions:   sorted([e.lower() for e in exclusions]),
}

Phase 2 — Seed derivation

Concatenate the JSON-canonical serialization of input and feed it to SHA-256. Take the resulting 256-bit hash as the seed of a deterministic CSPRNG (HMAC-DRBG with SHA-256). Use the DRBG to produce a uniform-random permutation of the comment list (Fisher-Yates). Take the first N entries (after applying exclusions) as winners.

seed_hex = SHA256(canonical_json(input)).hex()
drbg     = HMAC_DRBG(seed=seed_hex)
shuffled = fisher_yates(input.comments, drbg)
winners  = [c for c in shuffled if c not in input.exclusions][:N]

Phase 3 — Publication

Publish the seed_hex, the canonical JSON, and the winners. Anyone can re-run Phase 1+2 from the published JSON and verify the same seed_hex + same winners. A mismatch proves the host tampered with the published winner list.

GET /api/verify/{seed_hex}
→ 200 { canonical_json, winners, verified: true }

Mathematical proof

SHA-256 is collision-resistant under standard cryptographic assumptions (NIST FIPS 180-4). HMAC-DRBG is a NIST-approved deterministic random bit generator (NIST SP 800-90A). The composition guarantees:

Reference implementation

The Rafflecopter draw engine implements VGP v1.0 verbatim. Source: github.com/rafflecopter/verifiable-giveaway-protocol. Each draw publishes seed_hex on the result page and exposes the verifier at /api/verify/{hash}.

VGP is not a Rafflecopter-only specification. Any giveaway tool can implement it. We maintain a public registry of compliant implementations at /registry/compliant-tools.

License

This specification is released under Creative Commons Attribution 4.0 International (CC-BY-4.0). Free to implement, distribute, modify, and use commercially — attribution required.