Проверете извлекување сами

Чекор-по-чекор водич за следење и независно тестирање на правичноста на било кој натпревар, на секое ниво на техничка вештина.

Повеќето алатки за извлекување наспроти Pick a Winner

Можете ли сами да го проверите? Типична алатка за извлекување Pick a Winner
Видете кој победил
Повторно извршете го извлекувањето сами од објавено семе
Запис на секое дејство отпорен на манипулации и поврзан со синџир на хешови
Независен Bitcoin временски печат на резултатот
Јавни URL-адреси за верификација — без најава

Повеќето алатки прикажуваат добитник и бараат да им верувате. Pick a Winner објавува сè што ви е потребно за сами да го потврдите резултатот.

Преглед: седум прогресивни проверки

Започнете на Ниво 1; запрете каде што вашиот скептицизам ќе биде задоволен. Секое ниво одговара на различно прашање и почива на различна претпоставка за доверба. Читајќи од врв до дно, потребната доверба во операторот се намалува; до Ниво 5 верувате само на Биткоин блокчејнот, до Ниво 6 верувате само на сопствениот диск.

Ниво Што докажува Потребна доверба Напор
1 Серверскиот сопствен верификатор вели дека извлекувањето е недопрено Доверба во серверот на операторот 10 секунди
2 Објавената семка ги репродуцира објавените победници SHA-256 + вашиот Ruby интерпретер 5 минути
3 Целата историја на настани е видлива за вас Доверба во серверот на операторот 1 минута
4 Аудит-синџирот е внатрешно хеш-конзистентен SHA-256 10 минути
5 Главата на синџирот е запишана во Биткоин блокчејнот Биткоин 20 минути (еднократно CLI поставување)
6 Ниту еден минат настан тивко не се сменил со текот на времето Сопственото складирање на снимки Тековно (cron)
7 Долгорочната распределба на извлекувања е статистички униформна Статистика ~30+ натпревари

Нивоата 2 и 7 бараат натпревари извлечени на или по 2026-05-27, кога слета зацврстувањето на размешувањето со семка (ниедна семка не е запишана пред тој датум). Поранешните натпревари покажуваат значка Извлекување пред зацврстувањето на Ниво 1 и сепак можат да преминат низ Нивоата 3–6 — хеш-синџирот беше пополнет ретроактивно низ сите претходни аудит-настани, па нивната историја останува независно проверлива. Видете Што овој водич не докажува.

Брз пат

Брз пат: Ако имате конкретен натпревар на ум, помошникот за натпревар на https://pickawinner.pro/results/<token>/verify ги собира сите URL-адреси подолу во една автоматски пополнета страница за тој натпревар. Нивоата 1, 2, 3 и 5 може да се завршат оттаму без рачно копирање на било која URL-адреса.

Каде се наоѓа сè

Секоја URL-адреса на оваа страница е јавна, не бара автентикација и нема ограничување на стапка освен обична заштита од злоупотреба. Повеќето се клучирани со токенот на натпреварот (случаен 24-карактерен идентификатор); JSON-от на аудит-дневникот е дополнително достапен на slug-клучиран близнак (/facebook_page_contests/<slug>/audit-log.json), така што верификатор кој ја има само SEO споделбата на операторот може да стигне до аудит-дневникот без претходно да ја отвори страницата за резултати за да го извлече токенот. Двете URL-адреси на аудит-дневникот враќаат бајт-идентичен JSON. За да го пронајдете токенот, отворете било која страница за резултати на натпревар и кликнете Како да проверите сами — URL-адресата на која ќе пристигнете го содржи токенот во патеката.

Страници ширум проектот

Страници по натпревар и машински-читливи крајни точки

Шаблон на URL Враќа Се користи во
/facebook_page_contests/<slug> SEO-прилагодена страница на натпревар (URL-адресата што операторите обично ја споделуваат). Ја прикажува значката за верификација внатре. Ниво 1
/results/<token>/<slug> Канонска страница на натпревар со клуч-токен. Идентична содржина; учествува во HTTP 304 Not Modified. Ниво 1
/results/<token>/verify Помошник за верификација по натпревар: значката, семката, хешот, врската до квалификувани ID-а, врската до аудит-дневник, врската до последниот Биткоин-сидрен доказ — сите автоматски пополнети за еден натпревар. Сите нивоа (брз пат)
/results/<token>/eligible-ids.txt Сортираната канонска листа на внатрешни ID-а на секој коментар што ги поминал сите филтри — точниот влез што го гледало размешувањето со семка. Едно ID по линија, прост текст. Ниво 2
/results/<token>/audit-log.json Целосна хеш-поврзана аудит-историја (секој настан со previous_hash, entry_hash, метаподатоци, временски ознаки) + само-опишувачки verification блок + низа anchors. Испратено со Cache-Control: no-store. Нивоа 3, 4, 5, 6
/facebook_page_contests/<slug>/audit-log.json Истиот JSON како URL-адресата со клуч-токен погоре — бајт-идентичен товар, идентично no-store кеширање. Достапен со додавање на еден сегмент во slug URL-адресата што операторот обично ја споделува, па не треба да ја отворате страницата за резултати прво за да го извлечете токенот. Нивоа 3, 4, 5, 6
/results/<token>/audit-anchors/<id>.ots Сирови OpenTimestamps бајти на доказ за едно сидро (бинарно). Пренесете до ots verify. Ниво 5

Натпреварите пред зацврстувањето (извлечени пред 2026-05-27) немаат запишана семка; eligible-ids.txt враќа 404 за нив. Другите крајни точки сè уште работат — аудит-дневникот за натпревар пред зацврстувањето едноставно прикажува помалку настани.

Ниво 1 — Проверете ја значката (без напор)

Отворете ја јавната страница за резултати на било кој натпревар (URL-адресата изгледа како /results/<token>/<slug> или SEO еквивалентот на /facebook_page_contests/<slug>) и пронајдете ја лентата Независно проверете го ова извлекување. Значката прикажува една од четири состојби, пресметана серверски од живата база при секој целосен одговор. (Кешираните одговори ревалидираат против записот на натпреварот преку HTTP 304, така што свежиот посетител секогаш добива свежа проверка.)

  • Верифицирано — серверскиот верификатор потврдил дека запишаната семка ги репродуцира објавените победници и аудит-синџирот е непрекинат.
  • Повторно извлечено по извлекувањето — оригиналното извлекување сè уште е проверливо, но еден или повеќе победници се заменети преку аудитираниот пат за повторно извлекување. Проверете го аудит-дневникот (Ниво 3) за да видите што се сменило и зошто.
  • Откриена манипулација — запишаната семка не ги репродуцира тековните победници или аудит-синџирот е прекинат. Критичен сигнал — видете Ако проверката не успее подолу.
  • Извлекување пред зацврстувањето — натпревар извлечен пред 2026-05-27. Без запишана семка; не може независно да се верификува. Победниците се реални, но не се ретроактивно повторливи.

Праг на доверба: верувате на серверот на операторот дека искрено ќе го пријави резултатот на сопствениот верификатор. Останатите нивоа прогресивно ја намалуваат таа доверба до нула.

Ниво 2 — Повторно извршете го извлекувањето сами (математичка проверка)

Секој извлечен натпревар го објавува својот целосен RNG транскрипт: 256-битна случајна семка и канонската листа на ID-а на квалификувани коментари. Со тие два влеза и пет линии Ruby, можете сами да го пресметате списокот на победници и да потврдите дека се совпаѓа со она што е на страницата.

Чекори

  • На страницата /results/<token>/verify на натпреварот, кликнете Преземи eligible-ids.txt. Зачувајте ја датотеката.
  • Копирајте го објавената Случајна семка и SHA-256 на сортираните квалификувани ID-а.
  • Отворете Ruby интерпретер (Ruby ≥ 3.0 — претходно инсталиран на macOS и повеќето Linux дистрибуции; на Windows, инсталирајте преку RubyInstaller). Извршете irb.
  • Залепете го фрагментот подолу, заменете го placeholder-от и проверете дали и хешот и победниците се совпаѓаат.
require "digest"
seed = "PASTE_THE_PUBLISHED_SEED_HERE"
ids  = File.read("eligible-ids.txt").split("\n").map(&:to_i).sort

# (1) Sanity check the input: must equal the published SHA-256.
Digest::SHA256.hexdigest(ids.join("\n"))

# (2) Re-run the shuffle. First N items are winners 1..N (in order);
#     the next 3N items are reserves 1..3N.
ids.shuffle(random: Random.new(seed.to_i(16))).first(N_winners + N_reserves)

Ако двете проверки се совпаѓаат, извлекувањето е криптографски потврдено. Ако едната не успее, видете Ако проверката не успее.

Праг на доверба: верувате на сопствениот Ruby интерпретер и стандардните библиотечни имплементации на `SHA-256` и `Array#shuffle`. Никаков далечински сервис не е вклучен по првичното симнување на датотеката. Меѓујазичната репродукција е теоретски можна, но бара пре-имплементирање на Ruby-специфичното семирање на Mersenne Twister и правилата за `rand(n)` отфрлање — MRI Ruby ≥ 3.0 е патот на најмал отпор.

Ниво 3 — Прочитајте го аудит-дневникот преку јавниот API

Секоја административна акција врз натпревар — извлекувања, повторни извлекувања, откажувања, известувања на победници — се запишува во аудит-дневник само за додавање, поврзан со хеш-синџир. Дневникот е читлив на две еквивалентни јавни URL-адреси без автентикација; двете враќаат бајт-идентичен JSON, па изберете која ви е на располагање:

# Token-keyed (canonical):
curl https://pickawinner.pro/results/<token>/audit-log.json | jq

# Slug-keyed (reachable from the SEO results URL the operator typically shares):
curl https://pickawinner.pro/facebook_page_contests/<slug>/audit-log.json | jq

Одговорот ви ги дава:

  • chain_status — или литералната низа "ok" или пораката на исклучок која го именува нарушувачкиот настан (пр. "previous_hash mismatch at event #5...")
  • events — секој аудит-настан по синџирски редослед, секој со акција, метаподатоци, previous_hash, entry_hash, временски ознаки
  • anchors — OpenTimestamps доказите кои ја покриваат секоја глава на синџирот (се користи во Ниво 5)
  • verification — канонската спецификација на алгоритам (за да можете сами да ги пресметате хешевите во Ниво 4)

Крајната точка враќа Cache-Control: no-store — секое барање го пресметува повторно статусот на синџирот. Манипулацијата е видлива во моментот кога ќе го извлече испитувач.

Праг на доверба: ист како Ниво 1 — сè уште верувате на верификаторот на серверот. Но сега можете да ги гледате настаните наместо да ѝ верувате на значката, и можете да го зачувате JSON-от за употреба во Нивоата 4, 5 и 6.

Ниво 4 — Сами повторно ги пресметајте хешевите на синџирот

JSON-от на аудит-дневникот го изложува секое поле кое придонесува за хешот на секој настан. Можете да го обновите канонскиот товар од објавените полиња и да го пресметате синџирот од крај до крај. Ако пресметаните хешеви се совпаѓаат со објавените, синџирот е внатрешно конзистентен без оглед на тоа што тврди полето chain_status на серверот.

require "digest"
require "json"
require "net/http"

token = "PASTE_CONTEST_TOKEN"
url   = URI("https://pickawinner.pro/results/#{token}/audit-log.json")
data  = JSON.parse(Net::HTTP.get(url))

prev = data["verification"]["genesis_hash"]
data["events"].each do |e|
  payload = {
    "previous_hash" => prev,
    "action" => e["action"],
    "facebook_page_contest_id" => e["facebook_page_contest_id"],
    "user_id" => e["user_id"],
    "metadata" => e["metadata"],
    "created_at" => e["created_at"]
  }
  computed = Digest::SHA256.hexdigest(JSON.generate(payload))
  raise "previous_hash mismatch at event #{e["id"]}" unless prev == e["previous_hash"]
  raise "entry_hash mismatch at event #{e["id"]}"    unless computed == e["entry_hash"]
  prev = e["entry_hash"]
end
puts "OK -- #{data["events"].size} events, chain verified."

Праг на доверба: верувате на SHA-256 и сопствениот Ruby. Ова е прагот на кој на крај почиваат повеќето криптографски протоколи. Поминувачка проверка на ова ниво потврдува дека синџирот е математички конзистентен со објавените полиња — но не го исклучува случајот каде некој со пристап до базата ги препишал сите записи И ги пресметал сите низводни хешеви на самоконзистентен начин. [Ниво 5](#level-5) и [Ниво 6](#level-6) ја затвораат таа дупка.

Ниво 5 — Верификувајте го Биткоин сидрото

Нивоата 1–4 ја потврдуваат внатрешната конзистентност. Тие не исклучуваат софистициран нападнувач кој ги препишува сите записи И ги пресметува сите низводни хешеви за да го одржи синџирот внатрешно конзистентен. За да ја фатиме таа класа на напад, ја сидриме главата на синџирот на секој натпревар во Биткоин блокчејнот преку OpenTimestamps. Откако сидрото ќе биде потврдено во Биткоин блок (типично неколку часа по доставувањето, понекогаш до еден ден), главата на синџирот што ја покрива не може да се помести — Биткоин блокчејнот не е под контрола на операторот.

Препорачан пат: една Ruby скрипта

verification блокот на JSON-от на аудит-дневникот ви кажува точно како се конструира влезот на дигестот. Оваа скрипта го повлекува JSON-от, го избира најнеодамнешното Биткоин-потврдено сидро, го обновува дигестот, го симнува доказот и ја печати командата ots verify за извршување:

require "digest"
require "json"
require "net/http"

token = "PASTE_CONTEST_TOKEN"
host  = "https://pickawinner.pro"
data  = JSON.parse(Net::HTTP.get(URI("#{host}/results/#{token}/audit-log.json")))

# Pick the most recent Bitcoin-confirmed (upgraded) anchor.
anchor = data["anchors"].find { |a| a["block_height"] }
abort "No Bitcoin-confirmed anchor yet -- pending anchors typically upgrade within a few hours." unless anchor

# Rebuild the exact digest the system submitted to OpenTimestamps.
namespace = data["verification"]["anchor_digest_namespace"]
payload   = "#{namespace}\n#{data["contest_id"]}\n#{anchor["anchored_entry_hash"]}"
digest    = Digest::SHA256.digest(payload)
File.binwrite("digest.bin", digest)

# Download the raw proof bytes.
File.binwrite("anchor.ots", Net::HTTP.get(URI("#{host}#{anchor["proof_url"]}")))

puts "Saved digest.bin (32 bytes) and anchor.ots."
puts "Block height: #{anchor["block_height"]}"
puts "Now run: ots verify -d digest.bin anchor.ots"

Инсталирајте го OpenTimestamps CLI еднократно: pip install opentimestamps-client (Python) или npm install -g opentimestamps (Node). Потоа извршете ја командата што скриптата ја испечати. Успешна верификација изгледа како:

Success! Bitcoin block 947,182 attests existence as of 2026-05-27 14:12:08 UTC

Shell-само алтернатива

Ако претпочитате сè да го држите во терминалот:

TOKEN="PASTE_CONTEST_TOKEN"
JSON=$(curl -s "https://pickawinner.pro/results/$TOKEN/audit-log.json")

CONTEST_ID=$(echo "$JSON"  | jq -r '.contest_id')
ANCHOR_ID=$(echo "$JSON"   | jq -r '[.anchors[] | select(.block_height)][0].id')
ANCHOR_HASH=$(echo "$JSON" | jq -r --argjson id $ANCHOR_ID '.anchors[] | select(.id == $id) | .anchored_entry_hash')

printf 'pickawinner.audit.v1\n%s\n%s' "$CONTEST_ID" "$ANCHOR_HASH" \
  | shasum -a 256 | awk '{print $1}' | xxd -r -p > digest.bin

curl -s -o anchor.ots "https://pickawinner.pro/results/$TOKEN/audit-anchors/$ANCHOR_ID.ots"
ots verify -d digest.bin anchor.ots

Праг на доверба: верувате на SHA-256 и Биткоин блокчејнот. Ова е најсилното надворешно сидро за доверба во овој водич; за секој настан чие сидро е надградено (block_height присутен), го затвора PostgreSQL-суперкорисник сценариото именувано во [анализата на правичност](/fairness-analysis). Сидрата кои сè уште се во прозорецот на потврдување (типично неколку часа по доставувањето) се појавуваат со `block_height: null` — Биткоин сè уште не потврдил, па довербата целосно се префрла на Биткоин само по надградбата.

Ниво 6 — Следете со текот на времето (откријте ретроактивни препишувања)

Нивоата 4 и 5 фаќаат синџир кој е скршен или сидриран-па-изменет. Тие не фаќаат софистицирано препишување во прозорецот на чекање за сидро од 6 часа, каде некој со пристап до базата ги препишува и настаните И поднесокот до календарот. За да го фатите тоа — и било која друга ретроактивна промена што можеби сакате да ја откриете — потребни ви се сопствени снимки од пред препишувањето.

Шаблонот: повлекувајте го аудит-дневникот по распоред, зачувувајте го секој повлек како временски-означена датотека и споредувајте последователни повлеци. Секоја промена на минат настан (не само додадените нови) е доказ за ретроактивна модификација.

#!/usr/bin/env bash
# Save a snapshot every run; alert if any past event has changed.

TOKEN="PASTE_CONTEST_TOKEN"
URL="https://pickawinner.pro/results/$TOKEN/audit-log.json"
DIR="$HOME/.pickawinner-audit/$TOKEN"
mkdir -p "$DIR"

now=$(date -u +%Y%m%dT%H%M%SZ)
curl -sf "$URL" -o "$DIR/$now.json" || { echo "fetch failed"; exit 2; }

# Compare past events between the latest snapshot and the one before.
prev=$(ls -1 "$DIR" | sort | tail -2 | head -1)
[ "$prev" = "$now.json" ] || ruby -rjson -e '
  a = JSON.parse(File.read(ARGV[0]))["events"].to_h { |e| [e["id"], e] }
  b = JSON.parse(File.read(ARGV[1]))["events"]
  changed = b.select { |e| a[e["id"]] && a[e["id"]] != e }
  if changed.any?
    puts "TAMPER: #{changed.size} past event(s) changed between snapshots"
    changed.each { |e| puts "  event #{e["id"]} action=#{e["action"]}" }
    exit 1
  end
  puts "ok: no past events changed"
' "$DIR/$prev" "$DIR/$now.json"

Извршувајте од cron на секои 15–60 минути по натпревар што ве интересира. Испратете е-пошта или повикајте се на ненулта излез.

Праг на доверба: верувате на сопственото складирање на снимки. Ова е најсилната практично-распоредлива проверка — таа го победува дури и нападнувачот кој има целосна контрола над базата, бидејќи историскиот запис што се обидува да го препише е веќе на вашиот диск.

Ниво 7 — Статистичка проверка на расудувањето низ многу натпревари

За академски ревизори или организации кои набљудуваат оператор со текот на времето, три статистички својства треба да важат за униформно-случајно извлекување:

  • Распределба на семката. Концатенирајте ги вредностите draw_seed од многу натпревари; битовите треба да бидат статистички неразличливи од униформни. Стандардни батерии за тестови на случајност (NIST STS, dieharder) се применуваат.
  • Распределба на позицијата на победникот. Внатре во секој натпревар, позицијата на победникот во сортираната листа на квалификувани ID-а, нормализирана со големината на базенот, треба да биде униформна на [0, 1). Низ многу натпревари, извршете Колмогоров–Смирнов тест против униформната распределба.
  • Без скриена корелација. Најсилниот можен тест: соберете надворешен атрибут за секој победник (возраст на сметката, број на следачи, наклонетост кон бренд) и проверете за ненулта корелација со неговата нормализирана позиција на победник. Значајна корелација во која било насока е сигнал вреден за истражување.

Праг на доверба: верувате на статистиката и сте собрале доволно извлекувања (типично ≥ 30) за тестовите да имаат значајна моќност. Ова е слојот кој открива систематска пристрасност што криптографските проверки не можат — на пример, хипотетички оператор кој ја манипулирал влезната листа пред да ја хешира.

Ако проверката не успее: што да направите

Неуспехот на секое ниво има специфично значење. Табелата подолу мапира што сте виделе во што значи и што да направите следно. За кој било неуспех, најважната работа е да ги зачувате доказите — вашата снимка, вашите пресметани вредности, сировите одговори што сте ги добиле. Криптографските проверки се дизајнирани така што доказите зборуваат сами за себе; не треба да го убедите операторот, само да задржите запис кој тие не можат да го препишат.

Ако сте виделе Што значи Следен чекор
L1 значката вели Откриена манипулација Сопствениот верификатор на серверот не се согласува со објавените победници. Сами повторно извршете го Ниво 2. Ако вашиот хеш се совпаѓа но размешувањето не, објавените победници се изменети.
L2 хешот не се совпаѓа Датотеката со квалификувани ID-а што сте ја симнале не се хешира до објавената вредност — или датотеката или објавениот хеш е изменет. Зачувајте копија од датотеката и хешот. Повторно симнете ги двете од различна мрежа 24 часа подоцна; ако едно се промени, имате запис за промената.
L2 размешувањето не се совпаѓа (хешот е во ред, победниците се погрешни) семката произведува различен список на победници од оној што страницата го прикажува — најсилниот единствен сигнал за модификација по извлекувањето. Зачувајте го семката, датотеката со ID-а и тековниот список на победници. Контактирајте го операторот; ако нема решение, контактирајте ја платформата (Facebook/Instagram) со вашите зачувани докази.
L3 / L4 chain_status"ok" Аудит-синџирот има прекршена хеш-врска — или настан е изменет или еден е вметнат надвор од редот. Пораката chain_status го именува ID-то на нарушувачкиот настан. Зачувајте го целиот одговор audit-log.json. Пораката на исклучок идентификува кој настан го прекинал синџирот и како.
L5 ots verify пријавува неусогласеност на дигестот Главата на синџирот од која сте го пресметале дигестот не се совпаѓа со она што е усидрено во Биткоин. Или синџирот се променил откако сидрото е создадено, или датотеката со доказот е заменета. Повторно симнете го доказот од објавената URL-адреса. Ако сè уште не успее, имате криптографски доказ — Биткоин-потврдениот доказ — дека тековната состојба на синџирот на операторот се разликува од сидрираната историска состојба.
L6 споредбата на снимките покажува дека минат настан е сменет Содржината на аудит-дневникот за настан што сте го снимиле претходно сега е поинаква — настанало ретроактивно препишување. Вашата претходна снимка е доказот. Зачувајте ги обете снимки и излезот од споредбата едно покрај друго.
Страницата за натпревар враќа 404 Записот на натпреварот е избришан. Аудит-настаните и сидрата на синџирот каскадно се отстрануваат со него (видете Анализа на правичност §8.3 и §12.6). Сите претходни снимки што сте ги направиле остануваат валидни докази; Биткоин-потврдените .ots докази што сте ги симнале порано сè уште се верификуваат против блокчејнот без оглед на бришењето.

Што овој водич не докажува

Секоја чесна рамка за верификација ги именува заканите што не ги поразува. Три остануваат по Нивоата 1–7:

  • Натпреварите пред зацврстувањето (извлечени пред 2026-05-27) немаат запишана семка и не можат ретроактивно да се повторат. Ниво 1 враќа „Извлекување пред зацврстувањето"; Нивоата 2 и 7 не се применуваат (без семка, без листа на квалификувани ID-а). Нивоата 3–6 сè уште се применуваат — хеш-синџирот беше пополнет ретроактивно низ сите претходни аудит-настани — така што историјата на синџирот на овие натпревари останува независно проверлива. Победниците се реални но не репродуктивни.
  • Прозорецот за сидро на чекање од ~6 часа. Аудит-настан понов од потврдата во Биткоин е структурно ранлив на решен PostgreSQL суперкорисник кој би можел да го препише и настанот И поднесокот до календарот. Откако Биткоин ќе го потврди (типично неколку часа по доставувањето, повремено до еден ден), овој прозорец се затвора за тој настан. Ниво 6 (следење на снимки) го покрива прозорецот на чекање; Ниво 5 сè по него.
  • Интегритет на изворните податоци. Одговорот на Graph API од Facebook/Instagram не е криптографски потпишан од Meta. Системот може да докаже од што извлекувал (секој бајт оди во датотеката со квалификувани ID-а), но не може независно да докаже дека тој влез се совпаѓал со она што било јавно објавено. Самата објава на Facebook/Instagram останува изворот на вистина за листата на коментари; споредувањето со eligible-ids.txt е практичната проверка и секој учесник може да ја направи.

Видете §12 на Анализата на правичност за формалната рамка за секое ограничување.

Поимник

Поим Значење
Семка (Seed) 256-битен случаен цел број користен за иницијализирање на размешувањето. Запишан еднаш по извлекување; печатен како 64 хексадецимални карактери.
SHA-256 Криптографска хеш функција. Мапира кои било влезни бајти во фиксен 256-битен излез. Стандардизирана од NIST; де-факто индустриски стандарден хеш.
Квалификувани ID-а Внатрешните ID-а во базата на коментари што ги поминале сите филтри и биле разгледани за извлекувањето. Сортирани во растечки редослед за канонизација, потоа хеширани.
Fisher–Yates размешување Стандарден алгоритам (користен од Ruby Array#shuffle) кој произведува униформно случајна пермутација на низа. Детерминистички за фиксен RNG.
Хеш на запис (Entry hash) SHA-256 на канонскиот товар на аудит-настан, вклучително хешот на запис на претходникот. Тоа е она што ги поврзува настаните заедно.
Претходен хеш (Previous hash) Хешот на запис на непосредно претходниот аудит-настан во синџирот на истиот натпревар. Претходниот хеш на првиот настан е генезисниот хеш.
Генезисен хеш (Genesis hash) Фиксна сите-нула 256-битна вредност ("0" * 64) која го сидри почетокот на синџирот на секој натпревар.
Канонски товар (Canonical payload) Бајт-стабилна серијализација на аудит-настан — сортирани JSON клучеви, UTC микросекундни временски ознаки, фиксен редослед на полиња. Потребно за SHA-256 да произведе ист хеш насекаде.
Статус на синџирот (Chain status) Резултатот од шетањето на синџирот и повторно пресметување на секој хеш — или "ok" или специфична порака на исклучок која го именува скршениот настан.
Повторно извлекување (Redraw) Замена на примарен победник со следната резерва, активирана од оператор со напишана причина. Аудитирано; видливо во синџирот; означено со значка „Повторно извлечено".
OpenTimestamps (OTS) Отворен протокол кој сидри произволни 256-битни дигести во Биткоин блокчејнот. Бесплатен за користење, без надоместоци, без сметка. Pick a Winner го користи за сидрување на главата на аудит-синџирот на секој натпревар. Видете opentimestamps.org.
Календарски сервер (Calendar server) Бесплатен јавен OpenTimestamps сервер кој ги собира дигестите на чекање, гради Меркл стебло и го поднесува корнот до Биткоин. Датотеката со доказ .ots што ја објавуваме го вгравира заветот на календарскиот сервер плус (по потврда од Биткоин) патот на Меркл до Биткоин блокот.
Сидро на синџирот (Chain anchor) Ред во нашата табела chain_anchors кој ја поврзува главата на аудит-синџирот на натпреварот со OpenTimestamps доказ. Секое сидро има преземливи бајти на доказот; извршувањето ots verify против нив потврдува дека главата на синџирот постоела во специфично време на Биткоин блок.
Дигест на сидро (Anchor digest) SHA-256 на "pickawinner.audit.v1\n" + contest_id + "\n" + entry_hash. 32-бајтниот влез доставен до OpenTimestamps. Префиксот на простор на име спречува повторно играње на нашите сидра како докази за неповрзана содржина.
Висина на блок (Block height) Позицијата на потврден блок во Биткоин блокчејнот. Полето block_height на сидро се појавува во JSON-от на аудит-дневникот откако доказот ќе биде надграден (Биткоин-потврден). Сидрата на чекање покажуваат null овде.
Прозорец на потврдување (Confirmation window) Интервалот меѓу поднесувањето на сидро до OpenTimestamps и неговата Биткоин потврда. Типично неколку часа, повремено до еден ден. Настаните во овој прозорец сè уште не се Биткоин-сидрени — видете Што овој водич не докажува.
Токен (Token) 24-карактерниот случаен идентификатор во URL-адресата на секој натпревар (/results/<token>/...). Доволен за конструирање на секоја API URL-адреса на оваа страница; eligible-ids.txt и audit-anchors/<id>.ots се само со токен, додека audit-log.json е дополнително поставен под slug-от (видете Каде се наоѓа сè).