Losowania provably fair
Commit-and-reveal, kotwiczenie w blockchainie EOS i jak zweryfikować wynik.
Każde losowanie Skincash jest przeprowadzane według schematu, który każdy może niezależnie zweryfikować po fakcie. Nikt w Skincash — łącznie z zespołem — nie jest w stanie przewidzieć ani zmanipulować wyniku.
Przed losowaniem: commit
Tworząc losowanie, generujemy losowy 256-bitowy server seed. Nie publikujemy samego seeda — publikujemy tylko jego hash SHA-256. Ten hash to commit i jest zamrażany w bazie danych w chwili, gdy losowanie startuje. Ponieważ SHA-256 jest funkcją jednokierunkową, znajomość hasha nie pozwala nikomu zgadnąć seeda.
Zewnętrzna entropia: blok EOS
W momencie losowania nasz cron worker pobiera z blockchaina EOS najnowszy nieodwracalny blok i zapisuje jego hash. Bloki EOS są produkowane co pół sekundy przez niezależną sieć, więc hash bloku w dowolnym przyszłym momencie jest nieprzewidywalny w chwili commita. Oznacza to, że nawet Skincash nie może wpłynąć na losowanie.
Reveal i losowanie
Zwycięski los obliczany jest jako: winningTicket = (BigInt(sha256(serverSeed + publicSeed + eosBlockId)) mod BigInt(totalTickets)) + 1. Po losowaniu publikujemy server seed wraz z ID bloku, publicznym seedem i liczbą losów, dzięki czemu każdy może odtworzyć hash i potwierdzić zwycięski los.
const crypto = require('crypto');
// Published data (visible on the giveaway card)
const serverSeed = '<revealed after draw>';
const publicSeed = '<published at draw>';
const eosBlockId = '<EOS block hash at draw time>';
const totalTickets = <total sold>;
const hash = crypto
.createHash('sha256')
.update(serverSeed + publicSeed + eosBlockId)
.digest('hex');
const winning =
(BigInt('0x' + hash) % BigInt(totalTickets)) + 1n;
console.log('Winning ticket:', winning.toString());Jak zweryfikować
Na karcie dowolnego zakończonego losowania kliknij Zweryfikuj uczciwość. Modal pokazuje wszystkie cztery wejścia, uruchamia po stronie klienta SHA-256, by udowodnić, że para commit-reveal jest prawidłowa, i udostępnia gotowy do skopiowania snippet, który możesz uruchomić w Node lub w konsoli przeglądarki, aby lokalnie odtworzyć zwycięski los.
Więcej w kategorii Zaufanie i bezpieczeństwo
Potrzebujesz dodatkowej pomocy?
Nasz zespół wsparcia jest online 24/7 i odpowiada w mniej niż 5 minut. Otwórz czat bezpośrednio ze strony, a my zajmiemy się resztą.