Bitcoin – Proof of work

W artykule dotyczącym łańcucha bloków pisaliśmy o tym, że każdy blok ma generowany specjalny hash. Operacja ta nazywa się proof of work. Dzięki temu każdy blok zostaje „podpisany” i zmiana jego treści bez zmiany treści innych bloków nie jest możliwa. Przyjrzyjmy się bliżej temu na czym to polega.

Proof of work to nic innego jak szukanie odpowiedniej funkcji skrótu spełniającej określone kryteria. Kryterium tym jest liczba zer na początku haszu. Im większa trudność sieci (większa moc obliczeniowa), tym więcej zer musi być znalezionych na początku haszu, tak aby czas potrzebny na jego znalezienie wynosił około 10 minut. Operacja szukania odpowiedniego hashu to właśnie kopanie BTC (mining).

Hash to potoczne określenie na wynik funkcji skrótu. Każdy pakiet danych ma swój unikatowy hash. Zmiana 1 bitu w tych danych powoduje wygenerowanie zupełnie innego hashu. Dzięki temu wiemy, że jeśli hash danego pakietu danych uległ zmianie, to dokonano modyfikacji tego pakietu danych. Protokół bitcoina wykorzystuje funkcję skrótu SHA-256. Minerzy tworzą kandydata na kolejny blok wypełniony transakcjami. Następnie minerzy liczą hash nagłówka (block header o którym pisaliśmy). Jeśli hash nie będzie miał zadanej liczby zer to wartość w polu Nonce zwiększają o 1 i szukają hasha. Operację powtarzają aż do skutku. Możemy to zobrazować za pomocą prostej funkcji w Pythonie. Naszym celem jest znalezienie hashu z jednym zerem na początku:

import hashlib
text = „Jestem kandydatem na nowy blok”
nonce = 0
hash =”
while hash[0:1] != ‚0’:

input = text + str(nonce)
hash = hashlib.sha256((input).encode(‚utf-8’)).hexdigest()
print(input, ‚=>’, hash)
nonce += 1

Jak widzimy po uruchomieniu pętli potrzeba 37 operacji celem uzyskania satysfakcjonującego hashu:

>>> ================================ RESTART ================================
>>> 
Jestem kandydatem na nowy blok0 => d294cdbfa1e0740db593792b8ce244edc4eb5a30409b2b5724dced4fb7ed993d
Jestem kandydatem na nowy blok1 => 2759a36781ef64675887b0e7a0dd5f65db9e5dcb1a3311541b00de724c48c3a7
Jestem kandydatem na nowy blok2 => f42d33d24638a40e24d7665a0e6c1474bc544e35e9d3824ec6589e6a91ecee75
Jestem kandydatem na nowy blok3 => 1a6f080df567afd29809af6434cbeb0c546c35063f8393e6aded34fb9f8ad946
Jestem kandydatem na nowy blok4 => 1d5056092c3d2b7c83148c107dd414c5330cc58a623f609c9efeb44df2ca088e
Jestem kandydatem na nowy blok5 => d255bf157dfe153495c927e35206f30df30e11b633d46c587e9b84c6580f0a25
Jestem kandydatem na nowy blok6 => 2a20d383212bee07538887d55456b5946773ab35d3bf2b82bbcbb5f6b21556d6
Jestem kandydatem na nowy blok7 => 15abc0f3dbfed770ca1a887b17e4d7296a553c031c1ea07237b5fdb92484ff91
Jestem kandydatem na nowy blok8 => ead586bab6da3d2ad7fc7b5c999da7d125ebae9f275a2ca71682dec4a6a80ec1
Jestem kandydatem na nowy blok9 => b36d1b169729ac417bfd70a005cedc7f8bf09d24109e4fb384d148644d942ea1
Jestem kandydatem na nowy blok10 => 705062bd5605c4552a5a2059e39ecef0f1babbc5be4ed9223b87b658141b7eab
Jestem kandydatem na nowy blok11 => 6ae243aeb6225d76c90523f280cd8eaa01d35c4797aa572f08c1f329d813cf13
Jestem kandydatem na nowy blok12 => 21ba5b91bd3c1cb14acfddfec7b97b024b102ec1ff99bc8fc4f891d375cfd9f5
Jestem kandydatem na nowy blok13 => 9d77e6e8ed6803edc965198631939ba32674a86fcf0e9a53ddd111dd49c4e88c
Jestem kandydatem na nowy blok14 => dd65aed14df422d8d81deea4a3858873f3319a55d5d93c27ce9a0d1c7d86816e
Jestem kandydatem na nowy blok15 => 19b5a470950b34fc5c838d80a91b863116b27ab6a0984dac60d4046e391f04b6
Jestem kandydatem na nowy blok16 => 1098aee5b21c46cd9b51567e8352f427948e056fff28ae1ecca97af5b5904e24
Jestem kandydatem na nowy blok17 => dbe42c23c931dbe99d9a9060d88173cc4f6be0e215170ed6ba156e47b8624b64
Jestem kandydatem na nowy blok18 => 623e656977319cb86eb53c2dabcfba95905a3700448c5f61e949374c80dccef6
Jestem kandydatem na nowy blok19 => 8c384ecf9952c8297f7a8b8f68391b63d166d4466797562dd18fd17cd060e864
Jestem kandydatem na nowy blok20 => 73ce8d3164aac8208c1320ebc82ddcc45e8652b2484c1ddfb69dd9ff47406cd4
Jestem kandydatem na nowy blok21 => 717ff4ba89156e3569cd55f0ef0b3f404775c1db7f389618840dac2efdde6689
Jestem kandydatem na nowy blok22 => 9398410989dc25d2f5f2fec45836521fe5fd558d655b1ed654d8f4b0247c5875
Jestem kandydatem na nowy blok23 => 736129a33a251e1d754c4a20b7879b573985fbd435aae4d86230a4caf6448b4e
Jestem kandydatem na nowy blok24 => 35d44a25e5cea807aff95498e048e739017071873cb4ca273acded3a06b12ec3
Jestem kandydatem na nowy blok25 => 609db5ae703ceeed3f5b971337c9e31ac5b648a0b61e0ad69115f83292910583
Jestem kandydatem na nowy blok26 => 1a0a265c6dbae0452473f3563903d8a9b38005fd3c154ee7769d7ab449071606
Jestem kandydatem na nowy blok27 => fae84a2cdeea63ab41c58a08dec30f68f76ca716953ebff4bda84435ceeb5db5
Jestem kandydatem na nowy blok28 => 190cf79277fa631e938f6521ea6d527a666dded69ba7a070aecaca226bce4c4c
Jestem kandydatem na nowy blok29 => 8f1e1b487a6803d7e666ee5ea47b158359833aa78613358add817a2cd3b0fabb
Jestem kandydatem na nowy blok30 => 69adecf631a572589a9060eb25d73185810c380b5c495430a1a6caecb3511d85
Jestem kandydatem na nowy blok31 => 391da5ebb5b4562af5ab62970c24b938c191b2a71075a78907fbc69c0761e889
Jestem kandydatem na nowy blok32 => c349945afe494b60793ff0ac76432f770fcb4f10f86c7e98936d2cb66e8698fe
Jestem kandydatem na nowy blok33 => 7af0ee58f0757bb76eaa8988265e661a349cb1c51464023f72b17aab380f0e3c
Jestem kandydatem na nowy blok34 => ea887237f4eab4f1be9e733512abf485252edc1afe0130a4d46154c1ccc17907
Jestem kandydatem na nowy blok35 => a8ec5939387110d10f123334c23343ec15d15564d7205a668ca86258e8eaa39a
Jestem kandydatem na nowy blok36 => bd487176fc4baab9e92d44ce5fec25d52f2731533e18fa23efa3a049f566d67a
Jestem kandydatem na nowy blok37 => 09fda629f488b0b73ec77459150ed426dd57672fbf145a9d1238c741c418a7e9
>>>

W praktyce górnicy mają znacznie trudniejszy cel (więcej zer na początku hashu) i muszą wykonać kwadryliony obliczeń. Kod z tej strony pokazuje nam jak działa uproszczony algorytm proof of work w praktyce.

Dzięki temu, że w nagłówku obecnie liczonego bloku znajduje się hash poprzedniego bloku, to bloki łączą się nierozerwalnie ze sobą. Niemożliwym staje się zmiana poprzedniego bloku nie pociągając za sobą zmiany pozostałych. Każda transakcja przechowywana w bloku jest nie do podrobienia i niemożliwym jest dwa razy wydanie tych samych BTC. Technologia łańcucha bloków, wraz ze swoim „podpisem” proof of work jest księgowym narzędziem całkowicie odpornym na fałszerstwo. W opinii wielu jest to wynalazek stawiany na równi z wynalezieniem internetu.

Może Ci się również spodoba

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *