Zasady wyłaniania zwycięzców na podstawie wartości hash sieci blockchain TON

2024-10-29 02:11

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.

Zarejestruj się teraz – uzyskaj do 100 USDT rabatu na opłaty handlowe (dla zweryfikowanych użytkowników)