Spis treści
- Zrozumienie Blockchain
- Radzenie sobie z podwójnymi wydatkami
- Dowód pracy i „wydobycie”
Jednym z głównych problemów każdego dewelopera kryptowaluty jest kwestia podwójnego wydatkowania. Odnosi się to do przypadków, w których jednostka wydała saldo tej kryptowaluty więcej niż jeden raz, skutecznie tworząc różnicę między rekordem wydatków a ilością dostępnej kryptowaluty, a także sposobem jej dystrybucji.
Problem podwójnego wydatkowania jest problemem, którego nie ma gotówka; jeśli zapłacisz za kanapkę z rachunkiem w wysokości 10 USD, przekazując ten rachunek twórcy kanapki, nie możesz się odwrócić i wydać tych samych 10 USD w innym miejscu. Transakcja przy użyciu cyfrowej waluty, takiej jak bitcoin, odbywa się jednak całkowicie cyfrowo. Oznacza to, że można skopiować szczegóły transakcji i ponownie je wyemitować, tak aby ten sam BTC mógł zostać wydany wiele razy przez jednego właściciela. Poniżej zbadamy, w jaki sposób programiści kryptowalut zapewnili, że podwójne wydatki nie będą miały miejsca.
Kluczowe dania na wynos
- Problem techniczny, który pojawia się w związku z pojęciem waluty cyfrowej, polega na możliwości duplikowania pieniędzy cyfrowych i wydawania ich jednocześnie w dwóch lub więcej miejscach. Problemowi podwójnych wydatków zapobiega się w przypadku kryptowalut opartych na blockchain, takich jak Bitcoin, przez za pomocą mechanizmu konsensusu znanego jako proof-of-work (PoW). Ten PoW jest przeprowadzany przez zdecentralizowaną sieć „górników”, którzy nie tylko zapewniają wierność wcześniejszych transakcji w księdze blockchain, ale także wykrywają i zapobiegają podwójnym wydatkom.
Zrozumienie Blockchain
Blockchain, który stanowi podstawę cyfrowej waluty, takiej jak bitcoin, nie jest w stanie sam zapobiec podwójnym wydatkom. Zamiast tego wszystkie różne transakcje dotyczące odpowiedniej kryptowaluty są księgowane w blockchain, gdzie są one osobno weryfikowane i chronione przez proces potwierdzania. W przypadku bitcoinów i wielu innych kryptowalut transakcje, które zostały w ten sposób potwierdzone, stają się nieodwracalne; są publikowane publicznie i utrzymywane na zawsze.
Bitcoin był pierwszą dużą walutą cyfrową, która rozwiązała problem podwójnych wydatków. Dokonało tego poprzez wdrożenie tego mechanizmu potwierdzania i utrzymanie wspólnego, uniwersalnego systemu ksiąg rachunkowych. W ten sposób blockchain bitcoinów przechowuje zapisy transakcji opatrzonych znacznikiem czasu, które sięgały czasów założenia kryptowaluty w 2009 roku.
W kategoriach Bitcoin „blok” to plik trwale zarejestrowanych danych. Wszystkie ostatnie transakcje są zapisywane w blokach, podobnie jak księga transakcji giełdowych. Informacje z bloków są dodawane do księgi co kilka minut; wszystkie węzły w sieci przechowują kopię księgi blockchain. Użytkownicy mogą poruszać się po blockchain dla bitcoinów i przeglądać transakcje tylko pod względem ilości. Szczegóły dotyczące tożsamości kupującego i sprzedającego w każdej transakcji są chronione przez szyfrowanie wysokiego poziomu, które chroni również księgę przed manipulacją przez źródła zewnętrzne. Kiedy księga blockchain jest aktualizowana, podobnie jak wszystkie portfele bitcoin.
Radzenie sobie z podwójnymi wydatkami
Wyobraź sobie, że masz 1 BTC i próbujesz wydać go dwukrotnie w dwóch osobnych transakcjach. Możesz spróbować to zrobić, wysyłając ten sam BTC na dwa osobne adresy portfela bitcoin. Obie te transakcje trafią następnie do puli niepotwierdzonych transakcji. Pierwsza transakcja zostanie zatwierdzona za pomocą mechanizmu potwierdzającego, a następnie zweryfikowana w kolejnym bloku. Druga transakcja zostanie jednak uznana za nieważną w procesie potwierdzenia i nie zostanie zweryfikowana. Jeśli obie transakcje zostaną jednocześnie wyciągnięte z puli w celu potwierdzenia, transakcja o największej liczbie potwierdzeń zostanie włączona do łańcucha bloków, a druga zostanie odrzucona.
Chociaż skutecznie rozwiązuje to problem podwójnego wydatkowania, nie jest pozbawiony problemów. Na przykład zamierzony odbiorca drugiej (nieudanej) transakcji nie uczestniczyłby w samej transakcji, która się nie powiedzie, a jednak osoba ta nie otrzyma bitcoinów, których się spodziewała. Wielu akceptantów czeka na co najmniej 6 potwierdzeń transakcji (co oznacza, że 6 kolejnych bloków transakcji zostało dodanych do łańcucha bloków po danej transakcji). W tym momencie akceptant może bezpiecznie założyć, że transakcja jest ważna.
W systemie są jeszcze inne luki w zabezpieczeniach, które mogą umożliwić ataki z podwójnym wydatkiem. Na przykład, jeśli atakujący jest w stanie w jakiś sposób kontrolować co najmniej 51% mocy sieci, może popełnić podwójne wydatki. Jeśli atakujący byłby w stanie jakoś przejąć kontrolę nad tak dużą mocą obliczeniową, mógłby odwrócić transakcje i stworzyć oddzielny, prywatny łańcuch bloków. Jednak szybki wzrost bitcoinów praktycznie zapewnił, że ten rodzaj ataku jest niemożliwy. (Aby uzyskać więcej informacji, zobacz Strzeż się tych pięciu oszustw bitcoinowych)
Wyjaśnienie dowodu pracy i „wydobycia”
Teraz przejdźmy trochę bardziej technicznie. Sposób, w jaki użytkownicy wykrywają manipulację, na przykład próbę podwójnego wydawania pieniędzy w praktyce, to skróty, długie ciągi liczb, które służą jako dowód pracy (PoW). Wprowadź dany zestaw danych za pomocą funkcji skrótu (bitcoin używa SHA-256), a wygeneruje tylko jeden skrót. Jednak ze względu na „efekt lawinowy” nawet niewielka zmiana w dowolnej części oryginalnych danych spowoduje całkowicie nierozpoznawalny skrót. Bez względu na rozmiar oryginalnego zestawu danych, skrót generowany przez daną funkcję będzie miał tę samą długość. Hash jest funkcją jednokierunkową: nie można go użyć do uzyskania oryginalnych danych, a jedynie do sprawdzenia, czy dane, które wygenerowały hash, pasują do danych oryginalnych.
Generowanie dowolnego skrótu dla zestawu transakcji bitcoinami byłoby banalne dla współczesnego komputera, więc aby zmienić proces w „pracę”, sieć bitcoinów określa pewien poziom „trudności”. To ustawienie jest dostosowywane w taki sposób, że nowy blok jest „wydobywany” - dodawany do łańcucha bloków przez generowanie poprawnego skrótu - co około 10 minut. Trudność ustawiania osiąga się poprzez ustanowienie „celu” dla skrótu: im niższy cel, tym mniejszy zestaw prawidłowych skrótów i tym trudniej go wygenerować. W praktyce oznacza to skrót rozpoczynający się długim ciągiem zer: skrót dla bloku # 429818, na przykład, to 000000000000000004dd3426129639082239efd583b5273b1bd75e8d78ff2e8d. Ten blok zawiera 2012 transakcji obejmujących nieco ponad 1000 bitcoinów, a także nagłówek poprzedniego bloku. Jeśli użytkownik zmieni jedną kwotę transakcji o 0, 0001 bitcoin, wynikowy skrót nie będzie rozpoznawany, a sieć odrzuci oszustwo.
Ponieważ dany zestaw danych może wygenerować tylko jeden skrót, w jaki sposób górnicy upewniają się, że generują skrót poniżej celu? Zmieniają dane wejściowe, dodając liczbę całkowitą, zwaną nonce („liczba używana raz”). Po znalezieniu prawidłowego skrótu jest on nadawany do sieci, a blok jest dodawany do łańcucha bloków.
Wydobycie jest procesem konkurencyjnym, ale jest bardziej loterią niż wyścigiem. Średnio ktoś generuje akceptowalny dowód pracy co dziesięć minut, ale kto to będzie, można się domyślić. Górnicy gromadzą się razem, aby zwiększyć swoje szanse na wydobycie bloków, co generuje opłaty transakcyjne i, przez ograniczony czas, nagrodę za nowo utworzone bitcoiny.
Dowód pracy sprawia, że niezwykle trudno jest zmienić dowolny aspekt łańcucha bloków, ponieważ taka zmiana wymagałaby ponownego wydobycia wszystkich kolejnych bloków. Utrudnia to również użytkownikowi lub puli użytkowników zmonopolizowanie mocy obliczeniowej sieci, ponieważ maszyny i moc wymagana do wykonania funkcji skrótu są drogie.
