Fairness Proof Guide
Every FairPicker draw uses SHA-256 cryptographic hashing and Fisher-Yates shuffling. All inputs are publicly disclosed so anyone can independently verify the draw.
Pre-manipulation Impossible
A nanosecond-precision server timestamp is included in the seed at draw time, making it impossible to predict or manipulate the result in advance.
Full Transparency
All inputs (Project ID, Timestamp, Client Seed) and the final hash are disclosed on the certificate.
Independent Verification
Anyone can compute the same SHA-256 hash from the published values to mathematically verify the result.
How the Seed is Formed
The final SHA-256 hash is generated from three combined values.
Project ID
Unique draw identifier
proj_demo_20260226
Server Timestamp
Nanosecond timestamp at draw time
1740534312193847623
Client Seed
Entered by the host
Event-2026ABCD7F3E
Final Hash (예시)
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Draw Algorithm (Pseudocode)
Fisher-Yates Shuffle is performed using the final hash as the seed. The hash is recomputed at every step to maximize unpredictability.
// 1. 시드 생성
seed_string = project_id + "-" + server_timestamp_ns + "-" + client_seed
final_hash = SHA256(seed_string)
// 2. 시드 숫자화 (BigInt)
seed_number = BigInt("0x" + final_hash)
// 3. Fisher-Yates Shuffle
participants = [p1, p2, p3, ..., pN] // 중복 제거 후 정렬
for i from N-1 down to 1:
j = seed_number % (i + 1)
swap(participants[i], participants[j])
seed_number = SHA256(seed_number) // 매 스텝마다 해시 갱신
// 4. 당첨자 선정
winners = participants[0 .. winnerCount-1]* The actual implementation follows this logic. Open-sourcing is under consideration.
What is the Client Seed?
The Client Seed is a string entered directly by the host before the draw. Including it in the seed meansthe server cannot manipulate the result on its own.
FairPicker auto-generates a Client Seed (16 random characters), but hosts can enter any meaningful string they prefer.
Frequently Asked Questions
Can the draw result be changed or re-drawn afterward?
I want to verify the hash myself.
Can't FairPicker manipulate the server timestamp?
Why is Fisher-Yates Shuffle fair?