Back to the blog

How PolyTrack ensures fair giveaways

Learn how precommitted seeds, SHA256 hashes, participant IDs, and redraw counters ensure every giveaway is fair and unrigged can be independently verified by anyone.

Our giveaways use a basic Provably Fair system. The goal is simple: once a giveaway has started, the potential winner shouldn't be changeable by us - at all.

How it works for manual guild giveaways

Before the giveaway ends, we generate/choose a seed. We do not publish the seed itself yet. Instead, we will publish its SHA-256 hash in places such as the relevant blog posts, forum posts, and guild shouts.

For this example, our secret seed is:

mrrpmrrpmeow

Its SHA-256 hash is:

73eb662f83d507c5f8129c36f75b08110d065e4e878ce47dc4a8f9d4fcaf2f8a

Only the hash would be published while the giveaway is still running.

This is our commitment to the seed. Since forum posts and guild shouts cannot be edited, we cannot just change our internal seed later when we think "ugh, not that guy!". That means the seed is immutable.

Once the giveaway has closed and the participant list has been finalized, we reveal the original seed. Anyone can then independently verify that:

SHA256(mrrpmrrpmeow) = 73eb662f83d507c5f8129c36f75b08110d065e4e878ce47dc4a8f9d4fcaf2f8a

If the hashes match, you know that the seed we revealed is the same seed we committed to before the giveaway ended.

Now we can actually use that seed to pick a winner.

For this example, imagine that four members are in the Giveaway Entry rank:

  • John Pork, joined on 1 January 2026
  • Willemsmeller, joined on 5 January 2026
  • Emir, joined on 8 January 2026
  • rimE, joined on 12 January 2026

Each participant is assigned a zero-indexed ID based on their join date:

  • 0 = John Pork
  • 1 = Willemsmeller
  • 2 = Emir
  • 3 = rimE
Step 1: Hashing the seed

To generate the first draw, we combine the seed with a counter.

The counter starts at 0:

SHA256(seed + counter)

For our example, that means hashing:

mrrpmrrpmeow0

This gives us:

cacb140141536fc5687cac33064ad8c3f35876df17b19c48d321d79823ed6bc0

SHA-256 is deterministic, so the same input will always produce the same hash - but, even a tiny change to the input produces a totally different looking result.

That means anyone can reproduce this exact hash once the seed has been revealed.

Step 2: Turning the hash into a usable number

The SHA-256 hash is written in hexadecimal. For our giveaway system, we only use the first eight characters, which gives us a 32-bit number.

The first eight characters are:

cacb1401

Converted from hexadecimal to decimal, this becomes:

3402306561

We then convert that into a value between 0 and 1 by dividing it by 2^32:

3402306561 / 2^32 ≈ 0.792161

There are four participants, so we multiply that result by 4 and round down:

floor(0.792161 * 4) = 3

Our result is therefore participant ID 3.

Step 3: Finding the winner

Participant ID 3 belongs to rimE, so rimE is the first person drawn.

But uh-oh! In this completely serious example, rimE is obviously an alt account belonging to Emir. His name is literally Emir backwards, and the account is brand new.

If a drawn account is disqualified under the giveaway rules, we increase the counter and perform another draw.

So instead of:

mrrpmrrpmeow0

we now hash:

mrrpmrrpmeow1

This produces a completely different result.

In our example, the second draw results in participant 1, which maps out to Willemsmeller.

Since Willemsmeller is a genuine participant, they become the winner and take home the prize.

If the second draw had also resulted in an ineligible account, we would increase the counter to 2, then 3, and so on until we get an eligible participant.

Step 4: Publishing the result

Whilst we hope that redraws will be rare, it can always happen. In that case, we will publish it clearly rather than hiding the earlier draw.

For example:

Congrats to the winner, Willemsmeller!

The winner selected was choosen on the 2nd draw (c=1) because the first draw (c=0) resulted in "rimE", which turns out to be Emirs alt.

Because the seed, participant list, counter, and algorithm are known, anyone can independently reproduce each draw and confirm that we did not simply keep generating results until we got someone we wanted.

Later down the line

In the future, we might prepare a built-in tool that lets anyone easily perform provably-fair giveaways in their guild.

What did you think?

Sign in to react.

Page loaded