Bitcoin - tworzenie bloków

Z Wikipedii, wolnej encyklopedii

Przechowywanie danych[edytuj | edytuj kod]

Przechowywanie dużej ilości informacji np. danych transakcyjnych dotyczących Bitcoin musi odznaczać się odpornością na zmiany przez co musi mieć możliwość szybkiego wykrywania zmian w prosty sposób.

Łańcuch danych powiązanych zwanych również listą powiązaną powstaje gdy każdy element danych zawiera referencję  do innego elementu danych. Strukturę taką możemy nazwać łańcuchem bloków. Pierwszy element nazwany został Genesis Block[1]. Każdy kolejny blok danych został zbudowany w taki sposób iż zawiera wygenerowaną wartość hash sha256 z bloku poprzedniego[2], dzięki czemu posiadamy referencję do istniejącego bloku poprzedniego i gwarancję, że cały łańcuch jest spójny.

Mechanizm działania[edytuj | edytuj kod]

Omówiona wyżej struktura powoduje że dane są wrażliwe na zmiany ponieważ są połączone referencjami. Referencja zostaje zerwana gdy dane do których się odnoszą zostaną zmienione po ich utworzeniu. Zaobserwowanie zerwania referencji w strukturze jest dowodem na to że dane zostały naruszone. Możemy wówczas uznać, że cała integralność danych bloków została zmieniona.

Podatność na zmiany[edytuj | edytuj kod]

Moc obliczeniowa współczesnych komputerów nieustannie rośnie. Powoduje to że obliczanie wartości hash jest niemalże natychmiastowe. Spowodowało to konieczność wprowadzenia czasochłonności obliczeń przez wprowadzenie warunków koniecznych do utworzenia nowego bloku danych w łańcuchu. Stałe zwiększanie czasochłonności obliczeń skrótów hash powoduje, że cały łańcuch bloków jest odporny na wzrost mocy obliczeniowej.

Założenia dla poszukiwaczy[edytuj | edytuj kod]

Założenia dla poszukiwaczy wartości skrótu dla kolejnych bloków są następujące:

  • Dane, które nie mogą być zmieniane
  • Występują wartości zmienne oznaczone jako nonce
  • Funkcja skrótu którą należy zastosować – musi posiadać wartość skrótu poprzedniego bloku
  • Funkcja skrótu musi zawierać wartość skrótu bloku root mercle[3]
  • Wyznaczone warunki dla skrótu – zwane poziomem trudności nBits[4]

Bardzo ważnym faktem jest że poszukiwaną wartość możemy stworzyć tylko i wyłącznie poprzez poszukiwanie odpowiedniego skrótu zgodnego z postawionymi warunkami. Poza wartością nonce która jest zmienną wartością którą podstawiamy pozostałe wartości są stałe. W chwili uruchomienia algorytmu poszukiwania skrótu rozpoczynamy “kopanie” czyli poszukiwanie wartości skrótu.

Jest to swego rodzaju zagadka kryptograficzna, która często nazywana jest dowodami pracy, bo ich rozwiązanie udowadnia że ktoś wykonał pracę niezbędną aby tego dokonać[5].

Nagłówek bloku[edytuj | edytuj kod]

Nagłówek bloku ma długość 80 bajtów składa się z następujących elementów.

Nagłówek bloku
Długość w bajtach Nazwa Typ danych Informacja
4 wersja int32_t Numer wersji – oznacza które reguły walidacyjne zostały zastosowane
32 hash poprzedniego bloku char[32] Wartość wygenerowanego poprzedniego skrótu hash
32 merkle root char[32] Wartość skrótu korzenia danych tzw. mercle root
4 stempel czasowy uint32_t Wartość liczbowa reprezentująca czas w formacie Unix
4 nBits uint32_t Wartość określająca poziom trudności poszukiwanego skrótu.  Wartość podstawiana jest do wzoru[6]
4 nonce uint32_t Wartość zmiennej którą należy podstawić aby odnaleźć odpowiedni skrót

Przypisy[edytuj | edytuj kod]

  1. Thomas H. Cormen, Wprowadzenie do algorytmów, PWN, 2018, ISBN 978-83-01-16911-4, OCLC 1027063150 [dostęp 2020-05-22].
  2. Genesis block – Bitcoin Wiki [online], en.bitcoin.it [dostęp 2020-05-22].
  3. Bitcoin Developer Reference – Bitcoin [online], bitcoin.org [dostęp 2020-05-22] (ang.).
  4. Bitcoin Developer Reference – Bitcoin [online], bitcoin.org [dostęp 2020-05-22] (ang.).
  5. Daniel Drescher, Blockchain : podstawy technologii łańcucha bloków w 25 krokach, Helion, 2019, ISBN 978-83-283-4769-4, OCLC 1080931793 [dostęp 2020-05-22].
  6. Bitcoin Developer Reference – Bitcoin [online], bitcoin.org [dostęp 2020-05-22] (ang.).

Linki zewnętrzne[edytuj | edytuj kod]