Proof of Work – wszystko, co powinieneś wiedzieć o tym, jak górnicy wydobywają bitcoiny
Proof of Work, model konsensusu zdecentralizowanej sieci Bitcoin, wywołuje ostatnio wiele kontrowersji, pytań oraz niedopowiedzeń. Warto wziąć się z tematem za przysłowiowe „bary” i raz na zawsze wyjaśnić kwestię tego, w jaki sposób „górnicy” „wydobywają” bitcoiny.
Artykuł jest tłumaczeniem popularnego opracowania pod tytułem „Bitcoin Proof of Work — The Only Article You Will Ever Have to Read”, który został opublikowany w serwisie Medium 20 maja bieżącego roku.
Dowód pracy (Proof of Work) w górnictwie
Mining to metoda wykorzystywana w łańcuchu bloków do grupowania transakcji w blok, dołączania tego bloku do łańcucha bloków i rozgłaszania nowego bloku do sieci. Wydobywanie zapewnia utrzymanie mechanizmu konsensusu i decentralizację łańcucha bloków.
W tym artykule przeanalizujemy szczegółowo, jak działa mining. To będzie jedyny artykuł, jaki będziesz musiał przeczytać o dowodzie konsensusu w pracy. Naprawdę. Wszystko, co potrzebujesz wiedzieć, znajduje się właśnie tutaj.
Algorytmy górnicze
Łańcuchy bloków typu Proof of Work mają algorytmy wyszukiwania lub kryptograficzne funkcje skrótu, które pobierają blok jako dane wejściowe i tworzą niewielki wynik (output). Funkcja haszowania została zaprojektowana tak, aby górnik musiał przechowywać bloki haszujące, dopóki nie osiągnie pożądanego wyniku. Czytaj dalej, a pokażę Ci, jak to się dzieje. Aby wykonać to zadanie, górnik musi wykonać to samo zadanie miliony lub miliardy razy, co wymaga sprzętu, energii elektrycznej i czasu.
W przypadku Bitcoina, górnicza funkcja skrótu to SHA256, a Bitcoin stosuje mechanizm podwójnego procesowania SHA256 w celu zwiększenia bezpieczeństwa. Ethereum używa Ethash lub Dagger-Hashimoto Keccak. Różne łańcuchy bloków typu „proof of work” wykorzystują różne algorytmy, ale najbardziej znane to:
- SHA256 – 256-bitowy „Secure Hashing Algorithm” może być wydobywany przez procesory ogólnego przeznaczenia i jest używany przez kryptowaluty, takie jak Bitcoin, Bytecoin, Peercoin, Namecoin i kilka innych. SHA256 to bardzo prosta operacja logiczna. Proste funkcje, takie jak ta, można zaimplementować w logice cyfrowej w układach ASIC, tworząc bardzo wydajny sprzęt do kopania.
- Ethash — Ethash jest algorytmem wyszukiwania dowodu pracy Ethereum. Ponieważ wymaga większej ilości pamięci, bardziej wydajną szybkość mieszania oferują procesory graficzne. Koparki ASIC zostały również opracowane do wydobywania Ethash. Niektóre blockchainy wykorzystujące ten algorytm, to Etehreum i Ethereum Classic.
- X11 — programiści Dash stworzyli algorytm X11 i jest on uważany za jeden z najbezpieczniejszych. Koparki ASIC zostały również opracowane dla wydobycia X11. Niektóre z kryptowalut, które go używają, to Dash, Karmacoin i MonetaryUnit.
- Scrypt — Scrypt jest również jednym z powszechnie stosowanych algorytmów miningowych. Jest szybszy niż SHA256, a wiodącymi blockchainami, które go używają, są Dogecoin 🐶, Litecoin, Potcoin, MidasCoin i Gulden. Mówiąc o Scrypt, zrobiłem pierwszy w historii kurs Dogecoin. Sprawdź to!
- Cryptonight — to kolejny algorytm proof of work o fajnej nazwie. Został zaprojektowany tak, aby był bardziej wydajny podczas wydobywania CPU. Wykorzystujące go kryptowaluty to między innymi Monero, Dashcoin, DigitalNote, Bytecoin.
Mining CPU, Mining GPU i mining ASIC
Wydobywanie CPU, GPU i ASIC reaguje na różne sposoby na różne algorytmy blockchain. Niektóre algorytmy są łatwiejsze do wydobycia (tj. mają lepszą szybkość hashowania) z procesorem — bardziej ogólnym — GPU — bardziej zasobożernym dla prostych obliczeń i lepszym dla algorytmów intensywnie korzystających z pamięci — lub ASIC — zaprojektowanych do określonych celów. Koparki ASIC, choć bardzo wydajne, mają też pewne wady. Niektórzy programiści blockchain próbowali aktualizować protokoły, aby uczynić je odpornymi na ASIC, tj. niemożliwymi do kopania za pomocą urządzeń ASIC. Kiedy tak się dzieje, koparki ASIC stają się bezużyteczne, ponieważ zostały zaprojektowane z myślą o określonym algorytmie i nie mogą wykonywać żadnego innego zadania. Niektórzy programiści blockchain uważają, że urządzenia ASIC mogą zwiększyć centralizację.
Pamiętaj, że dotyczy to tylko łańcuchów bloków proof of work, a nie proof of stake […].
Proof of Work
Zacznijmy od przyjrzenia się proof of work, mechanizmowi konsensusu Bitcoina i większości blockchainów pierwszej generacji. Dowód pracy to mechanizm konsensusu oparty na liderach. BTW, jeśli chcesz zdekodować transakcję coinbase bloku genesis Bitcoina, zapoznaj się z tym artykułem.
Górnicy muszą obliczyć trudny problem matematyczny w łańcuchu bloków Bitcoin lub w innych łańcuchach bloków, korzystając z mechanizmu konsensusu opartego na dowodzie pracy. To trochę jak próba odgadnięcia numeru losu wygrywającego na loterii 🎲. Gdy węzeł rozstrzygnie loterię, przekazuje wynik do innych węzłów, a do łańcucha blokowego dołączany jest nowy blok.
Trudność loterii jest dostosowywana tak, aby cała moc obliczeniowa górnika generowała średnio jeden blok Bitcoina co 10 minut. Załóżmy, że liczba górników lub moc obliczeniowa w sieci wzrośnie, trudność obliczenia problemu matematycznego wzrośnie, aby zapewnić przewidywalność dystrybucji/dostaw monet i produkcji bloków. W takim przypadku dowód trudności w pracy jest korygowany, gdy więcej osób dołącza lub opuszcza sieć.
W innych łańcuchach bloków, takich jak Ethereum, bloki mogą być dodawane z różną częstotliwością. Na przykład w Ethereum, nowy blok dodawany jest co 15 sekund.
Dowód pracy może zostać dostrzeżony jako ciąg danych, który jest trudny do wygenerowania (jest czasochłonny i zasobożerny), ale kiedy rozwiązanie zostanie ostatecznie ujawnione, inni użytkownicy sieci mogą go łatwo zweryfikować.
Jednym z powodów, dla których dodanie nowego bloku do łańcucha bloków wymaga trochę pracy, jest zwiększenie jego bezpieczeństwa. Każdy górnik musi rozwiązać zagadkę kryptograficzną, aby dodać nowy blok, ale gdyby było to zbyt łatwe, każdy haker mógłby z łatwością spróbować dodać nowe bloki lub zmienić blockchain na swoją korzyść. Konsensus dowodu pracy sprawia, że Bitcoin jest najbezpieczniejszą siecią publiczną, jaką kiedykolwiek stworzono w historii ludzkości.
Problem matematyczny to nic innego jak zgadywanie nonce, długiego ciągu liczb w toku milionów lub miliardów prób i błędów. Chodzi o brute-forcing wyniku. Górnik musi odgadnąć nonce, dodać go do hasha bieżącego nagłówka, ponownie zhashować wartość i porównać wynik z hashem docelowym.
Jestem pewien, że słyszałeś również o trudności wydobycia (mining difficulty). Trudność wydobycia jest głównie miarą tego, jak trudno jest znaleźć nowy blok w łańcuchu bloków lub, innymi słowy, jak rzadkie jest nonce […].
Zawsze myślałem, że to całkiem zabawne, gdy ludzie mówią, że górnicy „rozwiązują bardzo złożony problem matematyczny”, podczas gdy tak naprawdę próbują odgadnąć liczbę „na loterii”. Górnicy to nie Einstein! Nie próbują znaleźć matematycznych cudów wszechświata.
W większości publicznych blockchainów górnicy otrzymają nagrodę blokową za swoją pracę. Ta nagroda prawdopodobnie pokryje ich wydatki związane ze sprzętem i elektrycznością i jest zachętą do dalszego udziału w utrzymywaniu sieci. W 2021 r. nagroda za blok Bitcoina wynosi 6,25 BTC i będzie nadal wynosić 6,25 do 2024 r., kiedy dojdzie do kolejnego halvingu (zmniejszenia nagrody za wydobycie bloku o połowę, które ma miejsce mniej więcej co 4 lata lub, mówiąc dokładniej, co 210 000 bloków). Tak więc w 2024 r. nagroda za blok Bitcoina wyniesie 3,125 BTC. W 2028 będzie to 1,5625 BTC i tak dalej. Maksymalna podaż bitcoinów jest ograniczona do 21 milionów bitcoinów, a ostatni BTC zostanie wydobyty w 2140 roku.
Dowód pracy jest używany głównie przez łańcuchy bloków typu permissionless, w których każda osoba może dodać węzeł do łańcucha bloków, a tożsamość węzłów w łańcuchu bloków nie jest znana. Dlatego konieczne jest istnienie mechanizmu konsensusu, który pozwala węzłom współpracować w sposób pozbawiony zaufania.
Proof of Work stanowi 90% całkowitej kapitalizacji rynkowej istniejących kryptowalut. Wymaga pracy od węzłów, które uczestniczą w walidacji bloków, aby, no cóż, wykonać trudną pracę. Górnicy potrzebują pewnej zachęty do wykonywania tej pracy. Zobaczymy również, że wydobycie jednego bloku w sieci Bitcoin wymaga wielu biliardów obliczeń. Dlatego we wszystkich blockchainach typu proof of work górnicy otrzymują premię za nagrodę blokową, opłaty transakcyjne lub jedno i drugie.
Bodziec ekonomiczny stojący za dowodem pracy jest doskonałym przykładem tego, jak utrzymać konsensus w całkowicie zdecentralizowanej sieci. Bycie węzłem/górnikiem w blockchainie wymaga zasobów sprzętowych, energii elektrycznej i czasu, ale jeśli węzły działają zgodnie z regułami, tj. zgodnie z mechanizmem konsensusu, otrzymują nagrodę. Jeśli węzły będą próbowały zaatakować blockchain, manipulować danymi lub dokonywać podwójnego wydatkowania, nie dostaną nagrody i będą po prostu marnować zasoby.
W 2020 r. górnicy otrzymali około 7 miliardów dolarów w bitcoinach jako nagrodę blokową i około 800 milionów dolarów w opłatach transakcyjnych uiszczanych przez użytkowników. Nieźle, co? Bycie górnikiem to jednak ciężka praca.
Plusy proof of work:
- Skalowalność sieci (pod względem liczby węzłów)
- Bezpieczeństwo wzrasta wraz z liczbą węzłów, tj. im większa społeczność górnicza, tym sieć jest bezpieczniejsza
- Górnicy otrzymują zachętę w zamian za wkład mocy obliczeniowej do sieci
- bardzo bezpieczne w większości przypadków
Wady proof of work:
- Podatny na atak 51% ataków (w małych łańcuchach bloków typu PoW)
- Trudność wydobycia zwykle staje się coraz większa, a sprzęt wydobywczy szybko się dezaktualizuje (rentowność może spaść do zera tylko w ciągu 3 lat)
- Wydobywanie jest kosztowne i zwykle wymaga specjalistycznego sprzętu, aby było opłacalne
- Wymaga ogromnych ilości energii elektrycznej
- Łańcuchy bloków typu Proof of Work mają na ogół niską przepustowość (badania pokazują, że blockchainy typu Proof of Work mogą osiągnąć do 60 transakcji na sekundę bez narażania bezpieczeństwa)
- Weryfikacja transakcji w blockchain wymaga czasu, w zależności od używanego protokołu blockchain — dlatego zaleca się odczekanie 10 do 20 minut, aż transakcja zostanie zweryfikowana/zatwierdzona w sieci Bitcoin (1 lub 2 bloki) lub 5 minut w blockchainie Ethereum (około 20 bloków). Z drugiej strony bloki Dogecoin są wydobywane co 1 minutę.
Hash rate
Hash rate to liczba skrótów obliczeniowych, które może wykonać sprzęt do miningu. Każdy sprzęt ma różne współczynniki hashowania. Od procesorów po GPU lub układy ASIC — układy scalone specyficzne dla aplikacji — górnicy starają się mieć najbardziej wydajny sprzęt, aby uzyskać najlepszy możliwy hash rate, co zwiększy prawdopodobieństwo wydobycia bloku w łańcuchu bloków i otrzymania za to nagrody .
Trudność
Trudność oznacza, jak ciężko jest znaleźć hash potrzebny do wydobycia nowego bloku w blockchainie opartym na proof of work. Trudność reprezentuje liczbę możliwości/kombinacji dla górników, aby odgadnąć hash. Większa trudność, więcej pracy, którą muszą wykonać górnicy, aby odgadnąć hash i stworzyć nowy blok. Trudność jest dostosowywana w łańcuchu bloków Bitcoin, tak aby nowe bloki były tworzone średnio co 10 minut. Jeśli więcej górników dołączy do sieci Bitcoin, przyczyniając się w ten sposób do zwiększenia hash rate, trudność wzrośnie i dostosuje się tak, aby górnicy odkrywali hash średnio co 10 minut.
Trudność wydobycia jest dostosowywana co 2016 bloków, co koło dwóch tygodni, biorąc pod uwagę średnio 10 minut na blok. Algorytm Bitcoin zapewnia tę regulację bardzo łatwo. Jeśli odnalezienie poprzednich 2016 bloków zajęło więcej lub mniej niż dwa tygodnie, trudność zwiększa się lub zmniejsza proporcjonalnie do różnicy czasu do dwóch tygodni.
Jak działa proces wydobywania bitcoinów w oparciu o proof of work?
Wydobywanie bitcoinów jest trudniejsze niż wydobycie złota. Wyobraź sobie, że musisz powtarzać hashe biliardy razy do czasu, aż znajdziesz właściwy!
Różne łańcuchy bloków mogą mieć różne mechanizmy, ale spójrzmy na przykład na nasz podstawowy blockchain, Bitcoin.
W wydobywaniu bitcoin górnicy muszą wymyślić hash blokowy, który spełnia określone wymagania. Aby wymyślić ten skrót, muszą zmienić część danych w bloku i muszą to robić DUŻO razy. Proces podobny jest do loterii. Brzmi skomplikowanie? Bez obaw, uprośćmy to.
Ile hashów średnio wykonują górnicy bitcoinów na całym świecie, aby wydobyć jeden blok? Cóż, jak mówiłem, wiele razy:
Dzielimy aktualny hashrate sieci na sekundę przez 6,25 (nagroda za blok BTC na 10 minut) i otrzymujemy BARDZO dużą liczbę.
Górnicy muszą obliczyć średnio 13,44 biliardów haszy, aby wygenerować jeden bitcoin (stan na styczeń 2021) r. Jeśli pomnożymy to przez 6,25, wydobycie jednego bloku zajmuje 84 biliardy haszy! Górnicy muszą powtórzyć obliczenia na powyższym rysunku dosłownie biliardy razy, aż blok zostanie wydobyty. Właśnie dlatego wydobycie bitcoin zużywa tak dużo energii elektrycznej, ale z drugiej strony daje nam najbezpieczniejszy blockchain w historii.
Wyobraź sobie hipotetycznie, że sam próbujesz znaleźć ten blok Bitcoina i że wszystko, co masz, to najlepszy procesor na rynku, AMD Ryzen 9 3900X 12-rdzeniowy procesor. Wydobycie jednego bloku Bitcoin przy obecnym poziomie trudności zajęłoby ci 225 730 lat.
Niestety, kopanie Bitcoina na zwykłym komputerze jest całkiem bezsensowne. Było to możliwe w 2009 i 2010 roku, kiedy moc mieszania w sieci była wciąż niska, ale obecnie tylko bardzo wydajny sprzęt, taki jak wyspecjalizowane koparki ASIC, może wykonać tę pracę. W tamtych czasach niewiele osób było zainteresowanych wydobyciem Bitcoina, a cena BTC wynosiła tylko kilka centów.
Pierwsi wyznawcy Bitcoina, którzy wydobywali go na samym początku, sąw stanie kupić Lambo 🚗.
Ale… dlaczego wydobycie Bitcoina jest takie trudne? A jak przebiega proces wydobycia?
Jak widzieliśmy wcześniej, trudność proof of work wzrasta, gdy do sieci dodaje się więcej mocy haszującej. Pole trudności i bitów bloku reprezentuje liczbę zer, które ma docelowy skrót. Ta liczba zer na początku hasza to warunek, który muszą spełnić górnicy. Aby wygenerować hash, który odpowiada temu warunkowi, górnicy będą musieli postępować zgodnie z poniższym procesem, próbując różnych nonce, aż stworzą potrzebny hash.
Aby utworzyć hash blokowy (czyli wydobyć blok), trzeba spełnić określone warunki. W zależności od zastosowanego algorytmu mogą obowiązywać pewne małe rozbieżności, ale warunkiem jest zwykle znalezienie skrótu, którego wartość jest określona pewnymi wymaganiami. Innymi słowy, skrót musi zaczynać się od pewnej liczby zer.
Proces jest dość prosty, ale bardzo powtarzalny (górnicy powtarzają go miliardy lub biliardy razy, jak widzieliśmy).
Schemat, który zrobiłem, jest bardzo przejrzysty. Zgodnie ze schematem, aby wykonać pracę niezbędną do wydobycia bloku i uzyskać hash bloku, górnik wykona zadanie. W tym momencie do gry wchodzi nonce, jedno z pól w nagłówku bloku. Jednorazowa liczba to liczba 32-bitowa, a górnik będzie musiał zgadywać, aby utworzyć skrót zgodny z celem.
- Górnik utworzy nagłówek bloku, przekonwertuje go na ciąg danych
- Górnik dodaje jednorazową liczbę do danych i przesyła ją do algorytmu haszującego (nonce jest jedyną częścią bloku, którą górnik może dowolnie zmieniać)
- Uzyskaj wynikowy hasz
- Uruchom test, aby sprawdzić, czy warunek, tj. docelowy skrót, jest spełniony
- Jeśli warunek jest spełniony, oznacza to, że górnik znalazł nonce, który generuje hash zgodnie z celem
- Jeśli warunek nie został spełniony (najprawdopodobniej), górnik spróbuje innego nonce, tj. cofa się do punktu 2, próbując nowego nonce, aż uzyska hash spełniający cel
Górnicy najprawdopodobniej będą musieli wykonać te obliczenia biliardy razy, zanim uzyskają prawidłową wartość.
Gdy górnik znajdzie właściwy skrót, wyśle blok do sieci, a pozostali górnicy mogą łatwo zweryfikować, że ten nonce generuje skrót zgodny z celem. Górnik, który wydobył blok, uwzględni również w bloku transakcję coinbase. Ta transakcja odpowiada nagrodzie za blok, którą otrzyma.
Kości, bity i cel
W miningu bitcoina górnicy starają się znaleźć wartości skrótu niższe niż wartość docelowa (jest to pole w każdym bloku blockchain). Wartość skrótu musi być mniejsza niż wartość reprezentowana przez pole bitów w nagłówku bloku. Oznacza to również, że hash docelowy będzie musiał zaczynać się od pewnej liczby zer. Ta liczba zer będzie wzrastać wraz z trudnością. Im większa trudność, tym trudniej wydobyć blok, ponieważ trudniej jest znaleźć hash spełniający wymagany cel.
Dlaczego te „zera” w hashu tak bardzo wpływają na trudność? Myślisz, że prawdopodobieństwo hashowania bloku z, powiedzmy, 20 prostymi zerami, jest bardzo niskie? To jak próba znalezienia zwycięskiego losu w gąszczu biliardów losów na loterię, które zaczynają się od 20 zer. Lub to samo, co rzucanie kostką i uzyskanie tej samej liczby 15 razy z rzędu. To bardzo, bardzo małe prawdopodobieństwo i dlatego jest to takie trudne.
Aby zilustrować prawdopodobieństwa i jak trudno jest uzyskać hash z dużą liczbą zer, aby był niższy niż hash docelowy, wyobraźmy sobie, że bawimy się kostkami. Jakie jest prawdopodobieństwo rzucenia 15 kostkami i uzyskania ich wszystkich o tej samej wartości?
P = pⁿ = (1/s)ⁿ
Zakładając, że nasze kości są sześciościenne:
1 kostka: (1/6)¹ = 0,16 (prawdopodobieństwo 16%)
2 kości: (1/6)² = 0,02(7) (2,77%)
4 kości: (1/6)⁴ = 0,000771160493827 (0,077160493827%)
6 kostek: (1/6)⁶ = 0,00002143347050 (0,002143347050%)
15 kostek: (1/6)¹⁵ = 0,0000000000212682249 (0,000000000212682249%)
To oznacza, że musiałbyś rzucić 15 kostkami średnio 470 184 984 737 razy, aby wszystkie miały tę samą wartość. To 470 miliardów razy!
Widzisz teraz, jak trudniej jest uzyskać wszystkie kości o tej samej wartości lub hash z tyloma „zerami”.
Teraz, gdy rozumiemy tę koncepcję, spójrzmy na nią za pomocą rzeczywistych formuł i zobaczmy, jak górnicy znajdują hash zgodnie z trudnością.
Trudność = MAX_TARGET / current_target
Tak więc MAX_TARGET to trudność, która została ustawiona dla pierwszego bloku i jest to w zasadzie poziom trudności = 1, i jest zapisany jako wartość szesnastkowa 1d00ffff.
Jeśli przekonwertujemy wartość bitów naszego bloku 386 867 735 na szesnastkową, otrzymamy wartość 0x170f2217. Ta wartość jest podzielona na cztery bajty. Pierwszy to indeks, po którym następują 3 bajty. W tym przypadku bity to indeks 0x17 i współczynnik 0x0f2217. W omawianym przypadku 0x oznacza, że mówimy o liczbie szesnastkowej, znanej również jako hex, systemie numerycznym używanym w obliczeniach.
Docelowy próg to 256-bitowa liczba całkowita, która musi być równa lub niższa, aby skrót był zgodny z docelowym. To jest docelowy hash, do którego odnosiliśmy się w procesie wydobycia.
Możemy również porównać tę wartość docelową z wartością hash, stosując proste równanie:
Cel = współczynnik * 2 ^(8 * (indeks — 3))
Najpierw musimy przekonwertować naszą wartość bitów na szesnastkową:
386 867 735 do 0x170f2217
Następnie podstawiamy do działania nasze wartości,
0x0f2217 * 2^(0x08 * (0x17–0x03))
Aby pomóc sobie w konwersji z wartości dziesiętnych na szesnastkowe i szesnastkowe na dziesiętne, możesz użyć kalkulatora Pythona:
Konwersja z szesnastkowego na dziesiętny, otrzymujemy,
991767 x 2 ^ (8 x (23–3)) = 144946909435075759478113895488529861555105250349678592
Który w hex-ie to
0x0000 0000 0000 0000 00f221700000000000000000000000000000000000000000000
porównując z hashem bloku, widzimy, że nasz hash bloku jest niższy:
0x0000 0000 0000 0000 00092f5f21cd6db1d374252d6e343bd7a0fcac448ef01a5
Łatwe, prawda?
Możemy również użyć kalkulatora, aby przejść od razu do sedna i sprawdzić, czy hash jest niższy niż docelowy.
Obliczmy cel za pomocą równania:
Cel = współczynnik * 2 ^(8 * (indeks -3))
Jak widać, otrzymujemy dokładnie ten sam wynik, czyli wartość docelową.
Możemy również sprawdzić, czy hash bloku jest niższy niż docelowy:
Ta ostatnia funkcja pokazuje, że integer (liczba całkowita) hasha bloku jest mniejsza niż liczba docelowa, co oznacza, że hash spełnia cel, tj. warunek jest prawdziwy. TAK! 🤯🤠🦄🚀
źródło: tutaj