KickGW

How a provably fair Kick giveaway works

KickGW runs your giveaway from your Kick chat and picks the winner in a way anyone can check afterwards. This page explains each step and the exact formula.

1. Entries come straight from Kick chat

When you start a giveaway, KickGW subscribes to your channel's chat through the official Kick API. Every chat message that starts with your command (for example !join) adds that Kick account to the list — once. Anonymous messages and repeated commands are ignored.

2. The secret key is locked in first

The moment the giveaway opens, the server creates a random 256-bit secret key and publishes only its SHA-256 fingerprint. Because the fingerprint is public before the draw, the key cannot be swapped later without everyone noticing.

3. Entries close and the winner is calculated

When you press Pick winner, entries close. Each entrant becomes a short token, the tokens are sorted, and the key decides the winner:

token  = SHA256(giveaway | run | kick_user_id), first 16 characters
tokens = all entrant tokens, sorted
msg    = giveaway | run | draw | token1,token2,...
index  = HMAC_SHA256(key, msg) as a number, modulo the number of entrants
winner = tokens[index]

The host cannot choose the winner: the key was fixed before the entrant list was known, and the entrant list cannot be edited.

4. The key is revealed

Right after the draw, the key is published next to its fingerprint. Anyone can check that SHA256(key) equals the fingerprint and recompute the winner. The verify page does all of this in your browser.

Rerolls and resets

A reroll uses the next key, whose fingerprint was published before the previous draw, and leaves out everyone who already won in this run. A reset starts a new run with an empty list and a new locked-in key. All runs stay in the downloadable proof file.

What we store

Only what the proof needs: the channel, the command, the Kick username and ID of each entrant, and the keys. See the privacy page.

Start a giveaway