Zastrzeżenie: Produkty i usługi, o których tutaj mowa, mogą nie być dostępne w Twoim regionie.
1. Jak określić zwycięską sekwencję?
Binance wybierze konkretną datę podczas wydarzenia i użyje ostatnich 9 cyfr ostatniego hasha bloku sieci blockchain TON o godz. 23:59 (UTC) danego dnia jako zwycięskiej sekwencji.
Przykładowo:
Jeżeli ostatni hash bloku sieci blockchain TON w dniu obliczania nagrody to: 0hVwGb09xU6rhZhs9JMHU29KuqYATsVwd+96R8X6wF4=
- Binance usunie litery, uzyskując numer: 009692996864
- Następnie wydzielimy ostatnie 9 cyfr jako zwycięską sekwencję: 692996864
2. Jak zastosować hashowanie multiplikatywne na adresie użytkownika?
Binance użyje multiplikatywnej formuły hasha (podobnej do `hashCode()` Java) „h = 31 × h + value[i]”, aby określić adres portfela zwycięskiego użytkownika (użytkowników).
Obliczenie:
1. Przekonwertuj ciąg „0x22eEC85ba6a5cD97eAd4728eA1c69e1D9c6fa778” na małe litery, aby uzyskać „0x22eec85ba6a5cd97ead4728ea1c69e1d9c6fa778”, a następnie oblicz kod hash.
2. Wartość każdego znaku jest określana na podstawie jego kodu ASCII:
- „0” ma wartość 48;
- „x” ma wartość 120;
- „2” ma wartość 50;
- „e” ma wartość 101;
- „c” ma wartość 99;
- „8” ma wartość 56;
- „5” ma wartość 53;
- „b” ma wartość 98;
- „a” ma wartość 97;
- „6” ma wartość 54;
- „d” ma wartość 100;
- „9” ma wartość 57;
- „7” ma wartość 55.
3. Zainicjuj wartość hash: h = 0
4. Przetwórz pierwszy znak „0”:
- h = 31 × h + 48
- h = 31 × 0 + 48
- h = 48
5. Przetwórz drugi znak „x”:
- h = 31 × h + 120
- h = 31 × 48 + 120
- h = 1608
6. Przetwórz trzeci znak „2”:
- h = 31 × h + 50
- h = 31 × 1608 + 50
- h = 49898
7. Przetwórz czwarty znak „2”:
- h = 31 × h + 50
- h = 31 × 49898 + 50
- h = 1546888
8. Przetwórz piąty znak „e”:
- h = 31 × h + 101
- h = 31 × 1546888 + 101
- h = 47953629
9. Przetwórz szósty znak „e”:
- h = 31 × h + 101
- h = 31 × 47953629 + 101
- h = 1486562610
10. Przetwórz siódmy znak „c”:
- h = 31 × h + 99
- h = 31 × 1486562610 + 99
- h = 46083441008
11. Uproszczone przetwarzanie pozostałych znaków
Kontynuuj przetwarzanie pozostałych znaków zgodnie z krokami opisanymi powyżej, aż wszystkie znaki zostaną przetworzone. Końcowa wartość hash, h, będzie liczbą całkowitą.
12. Aby upewnić się, że wartość hasha nie jest ujemna, stosujemy metodę bitową i z „0x7fffffff”: „h & 0x7fffffff”.
13. Korzystając z tego algorytmu, wartość hash adresu TON będzie liczbą z zakresu od 0 do 2147483647.
3. Jak wygenerować sekwencję użytkownika w loterii?
Adres portfela każdego użytkownika jest konwertowany na wartość hash, aby obliczyć jego sekwencję w loterii:
[zwycięska sekwencja – hash adresu] = sekwencja użytkownika w loterii
4. Jak wyłonić zwycięzców?
Binance uszereguje sekwencję każdego użytkownika w loterii w porządku rosnącym i wybierze określoną liczbę sekwencji jako zwycięzców w zależności od zasad kampanii.
W przypadku remisu (np. dwóch lub więcej użytkowników ma taką samą sekwencję w loterii), Binance ustali kolejność w rankingu na podstawie czasu wykonania zadania. Im wcześniej użytkownik wykona zadanie, tym wyższa jego pozycja w rankingu.
- W przypadku adresów z hashem równym lub dłuższym niż 10 cyfr usuwana jest 10. cyfra.
- Jeśli hash jest mniejszy niż 10 cyfr, nie są wprowadzane żadne zmiany.
Następnie obliczana jest bezwzględna różnica między hashem adresu użytkownika a zwycięską sekwencją. Binance uszereguje sekwencję każdego użytkownika w loterii w kolejności rosnącej, przy czym mniejsze sekwencje wygrywają.
Przykładowo:
- Hash adresu użytkownika A składa się z 10 cyfr (1023456780). Po usunięciu 10 cyfry sekwencja w loterii to 102345678.
- Hash adresu użytkownika B składa się z 9 cyfr (201154321). Nie ma konieczności wprowadzania żadnych zmian, aby dostosować jego sekwencję w loterii.
Wyłonienie zwycięzcy:
- Zwycięska sekwencja = 692996864
- Wynik w loterii użytkownika A = |692996864 – 102345678| = 590651186
- Wynik w loterii użytkownika B = |692996864 – 201154321| = 491842543
Ponieważ sekwencja 491842543 jest mniejsza, wygrywa użytkownik B.