Zrozumieć mining

Mining w Bitcoinie należy do najważniejszych, a jednocześnie najmniej zrozumiałych procesów. Jakie skomplikowane problemy matematyczne rozwiązują minerzy? Dlaczego pożera to tyle energii elektrycznej? Jaki jest tego cel i sens? To częste pytania, jakie pojawiają się, gdy rozmawia się o Bitcoinie. Odpowiedzi są często zupełnie niezrozumiałe dla początkujących. Bo co to oznacza, że miner potwierdza transakcje czy zabezpiecza sieć? W tym artykule postaram się odpowiedzieć na te pytania jak najprostszym językiem.

Pieniądz zdecentralizowany

Bitcoin nie był pierwszą na świecie cyfrową walutą. Pierwsze zaczęły powstawać już w 1996 roku. Stawały się mniej lub bardziej popularne, ale posiadały słaby punkt. Stały za nimi firmy lub organizacje, które zapewniały ich trwanie – były scentralizowane. Większość tego typu walut upadło, ponieważ ich założyciele zostali oskarżeni o działanie bez licencji, pranie brudnych pieniędzy itp. Bitcoin miał nie mieć tego słabego punktu.

Decentralizacja pieniądza niesie jednak problemy, których nie mają waluty kontrolowane centralnie.

Problem 1: jak sprawić, żeby użytkownicy nie mogli kopiować swoich cyfrowych pieniędzy?

Rozwiązanie: wprowadzenie rejestru wszystkich transakcji, którego kopię ma każdy użytkownik sieci

Problem 2: opóźnienia w sieci powodują ryzyko podwójnego wydawania tych samych monet zanim reszta użytkowników zaktualizuje swoją kopię rejestru i dostrzeże oszustwo.

Rozwiązanie: transakcje nie mogą być natychmiastowe. Sieć musi mieć czas na aktualizację rejestru i potwierdzenie jej prawidłowości. W przypadku rozbieżności obowiązującą wersję rejestru będzie stanowić ta, której jest w sieci najwięcej.

Problem 3: ryzyko, że ktoś dokona zmian w swojej kopii, a potem połączy swój węzeł do tysięcy adresów IP (tzw. Sybil attack) i sieć uzna, że to jego kopia jest właściwa ponieważ jest jej najwięcej.

Rozwiązanie: Komputer w sieci może pokazać, że dysponuje mocą obliczeniową. Tego nie da się skopiować. Jednocześnie jest ona cenna. Można za to wynagrodzić poprzez płacenie nowymi jednostkami waluty. Nagroda powinna oczywiście być proporcjonalna do mocy obliczeniowej, jaką reprezentuje użytkownik sieci. Można dać komputerom zadania obliczeniowe o zmiennej trudności przez co kontrolować czas ich rozwiązania i szybkość emisji nowej waluty.

Blockchain

Rejestr transakcji musiał być przede wszystkim odporny na manipulacje. Powiązując wszystkie pomysły razem powstała idea blockchaina. Składać się on miał z łańcucha bloków, zawierających transakcje. Każda najdrobniejsza zmiana w bloku powoduje zmianę jego identyfikatora (hasha). Zależność kolejnych bloków od poprzednich powoduje, że zmiana w jednym bloku jest widoczna we wszystkich kolejnych.

Tworzenie nowego bloku

Minerzy zbierają transakcje z całej sieci i grupują je w bloki. Teraz każdy z nich walczy o prawo dodania swojego bloku do blockchaina. Musi on spełniać wymagania stawiane przez protokół, z których najważniejszym dla minera jest jego hash.

Hash bloku zależy m.in. od transakcji, jakie są w nim zawarte, od hasha poprzedniego bloku i od liczby (nonce), którą miner wstawia do obliczeń.

Miner próbuje różnych wartości nonce (losowo lub kolejno), aż jego hash będzie miał bardzo małą wartość, mniejszą od targetu. Target zaś wyliczany jest na podstawie trudności (difficulty)- jest tym mniejszy im większa trudność. To tak jakby rzucać dwoma kostkami do gry. Zawsze wyrzucimy sumę 12 lub mniej, dość często trafimy 7 lub mniej, ale już prawdopodobieństwo 3 oczek (lub mniej) to tylko 1/12. Szansa na uzyskanie odpowiedniego hasha zależy od użytej mocy obliczeniowej (szybciej trafisz wymaganą sumę oczek, jeśli szybciej rzucasz kostką 😉 ). Miner po wyliczeniu poprawnego hasha publikuje nowy blok, jego hash i nonce, dla jakiego udało mu się wyliczyć właściwą wartość. Reszta węzłów błyskawicznie może sprawdzić czy dla podanego nonce blok rzeczywiście ma odpowiedni hash. Opublikowanie nowego bloku oznacza potwierdzenie przez minera wszystkich transakcji, które się w nim znajdują, a także potwierdzenie transakcji z wszystkich poprzednich bloków.

Wyliczenie hasha wymaga czasochłonnych obliczeń. Średnio miner musi spróbować (przy obecnej trudności) 1,89*10^21 (prawie 2 tryliardy) wartości nonce aby móc opublikować blok. Jest to ogromna liczba, odpowiadająca w przybliżeniu liczbie ziarenek piasku na Ziemi. Każda najdrobniejsza zmiana w prawidłowym bloku powoduje, że jego hash i hashe wszystkich kolejnych bloków zupełnie się zmieniają. Aby sieć mogła je uznać trzeba ponownie wykonać żmudne obliczenia. Problem w tym, że nie ma na to czasu, bo wszyscy inni pracują już nad dodawaniem kolejnych bloków, a węzły uznają tylko najdłuższą wersję łańcucha. Nasze zmanipulowane bloki zostaną odrzucone. Tak właśnie minerzy zabezpieczają sieć – ich moc obliczeniowa nie pozwala na to, aby ktoś manipulował historią transakcji.

Trudność sieci Bitcoin jest tak dobierana, aby nowy blok pojawiał się średnio co 10 minut. Jeśli moc w sieci będzie rosnąć to trudność będzie podnoszona, aby bitcoiny nie były „drukowane” zbyt szybko. Czas 10 minut ma też tę zaletę, że rzadko dochodzi do sytuacji, gdzie dwóch minerów wykopuje nowy blok jednocześnie. Dzięki temu już 1 potwierdzenie jest z reguły wystarczające (choć dla wyższych kwot transakcji powinniśmy zaczekać na więcej). W altcoinach, gdzie czas generacji bloków jest szybszy, częściej dochodzi do sytuacji, że kilku minerów dodaje do sieci prawidłowe, ale różniące się od siebie, bloki w podobnym czasie. Sieć wtedy potrzebuje więcej czasu na ustalenie, które bloki ostatecznie znajdą się w blockchainie (nie można ufać niskiej ilości potwierdzeń).

Atak 51%

Dysponując większością mocy obliczeniowej, miner mógłby teoretycznie spróbować manipulować blockchainem. Jego bloki powstawałyby najczęściej, a więc mógłby nawet zignorować innych minerów i kopać tylko swój łańcuch. Cóż zyskałby miner wykorzystując swoją przewagę? Mógłby na przykład spróbować wydawać podwójnie swe bitcoiny, poprzez opublikowanie bloku z transakcją, a następnie ponowną publikację tego samego bloku, ale już bez tej transakcji. Ktoś akceptując taką płatność zauważyłby ze zdziwieniem, że mimo początkowego jej potwierdzenia, nie ma jej już w bloku. Mógłby również cenzurować niektóre transakcje – nigdy nie dołączać ich do swoich bloków. Mając zdecydowaną przewagę, miner mógłby zacząć ponownie obliczać starsze bloki i wyrzucać z nich niepasujące mu transakcje. Efektem byłby na pewno spadek zaufania do takiej kryptowaluty i drastyczna obniżka ceny. Dochody minera znacząco by spadły, a deweloperzy podjęliby zdecydowane kroki, aby wyrzucić oszusta z biznesu. Ratunkowa poprawka w protokole sprawiłaby, że sieć kompletnie ignorowałaby bloki atakującego. Minerzy nie mogą pozwolić sobie na takie ryzyko. Szczególnie w Bitcoinie, gdzie w mining zainwestowane są ogromne pieniądze.

Centralizacja miningu

Na samym początku minerem był każdy, kto zainstalował oficjalnego klienta Bitcoin. Bitcoiny kopało się raczej dla zabawy na domowych komputerach.

W maju 2010 roku Laszlo Hanecz wykorzystał swoją kartę graficzną do kopania bitcoinów. Wcześniej na swym CPU udawało mu się wykopać jeden blok dziennie. Przy pomocy GPU wykopywał 1-2 bloki na godzinę. Laszlo poinformował o tym Satoshiego Nakamoto w emailu. Satoshi odpisał:

„Nie chciałbym zabrzmieć jak socjalista, nie martwi mnie koncentracja bogactwa, ale obecnie bardziej się rozwiniemy dając pieniądze 100% ludzi, a nie tylko 20%”

Jednocześnie Satoshi uświadomił sobie, że jeśli ludzie, którym zależy na sukcesie Bitcoina zwiększają moc obliczeniową sieci to rośnie jej siła i odporność na atak 51%. Jako ciekawostkę dodam, że to właśnie Laszlo Hanecz kupił 2 pizze za 10 000 bitcoinów (był wtedy posiadaczem 70 000 BTC). W kolejnych tygodniach miał zresztą więcej ofert i wydał prawie wszystkie bitcoiny zajadając się pizzami. Nie istniała jeszcze wtedy żadna giełda, więc cenę bitcoina ustalano w przybliżeniu na podstawie kosztu prądu elektrycznego potrzebnego do jego wykopania.

Bardzo szybko kopanie kartami graficznymi stało się tak popularne, że mining poprzez CPU stracił sens ekonomiczny. Obecnie najszybszy na świecie superkomputer (Sunway TaihuLight) miałby szansę na wykopanie jednego bloku raz na 10 lat. Indywidualni minerzy mieli coraz mniejsze szanse na wykopanie bloków dlatego powstały poole. Wspólnymi siłami udawało się dodawać bloki częściej, a pool potem sprawiedliwie rozdzielał nagrody. Mining zaczął się centralizować.

W 2013 roku pojawiły się pierwsze wyspecjalizowane do kopania bitcoinów układy ASIC. Wartość Bitcoina rosła, mining stał się żyłą złota, powstały kopalnie, które zainwestowały w sprzęt miliony dolarów. Dzięki temu, że cena Bitcoina stoi na dużo wyższym poziomie niż kilka lat temu, minerom opłaca się wydawać pieniądze na inwestycje w sprzęt i płacić astronomiczne rachunki za energię. Wykopywane bitcoiny starczają na ich pokrycie i na przyzwoite zyski. Gdyby cena Bitcoina była na poziomie jednego dolara za monetę to oczywiście mining nie byłby tak rozbudowany jak obecnie. Jeśli więc ktoś pyta dlaczego wymaga on tyle energii elektrycznej to odpowiedź jest prosta – wynika to z rachunku ekonomicznego. Jeśli wartość wykopanych bitcoinów jest większa niż koszty ich wykopania to miner osiąga zysk i tylko tyle się dla niego liczy. Opłacalność miningu zależy przede wszystkim od cen energii elektrycznej, dlatego największe kopalnie są zlokalizowane w Chinach, gdzie jej ceny są 2-5 razy niższe niż w Europie.