Ta strona: Bloki stwierdziło, że wydobywanie ma w rzeczywistości na celu rozwiązanie problemu matematycznego, ale czytanie algorytmu haszowania bloków nie daje wiele pomocy. Próbowałem też czytanie kodu źródłowego bitcoind, ale czytanie kodu zajmuje znacznie więcej czasu niż czytanie dokumentacji 🙂
I napisałem prostego klienta json-rpc, który wywołuje metodę getwork () w celu pobrania danych, ale co powinno Mam zrobić obok tych „danych”?
Czy ktoś mógłby wyjaśnić proces wydobywania w widoku programisty?
Komentarze
Odpowiedź
Algorytm wyszukiwania wygląda następująco:
-
Krok 0 – Pobierz z sieci hash poprzedniego bloku.
-
Krok 1 – Zbierz listę potencjalnych transakcji zwaną „blokiem”. Ta lista transakcji pochodzi z sieci bitcoin peer-to-peer.
- Krok 2 – Oblicz hash dla bloku potencjalnych transakcji wraz z liczbą losową.
- Krok 3 – Jeśli hasz jest większy niż obecnie ustawiony poziom trudności, oznacza to, że wydobyłeś ten blok. Jeśli nie, zacznij od początku od kroku 1. Wszelkie dodatki do listy transakcji z kroku 1 wraz ze zmianą liczby losowej z kroku 2 oznaczają, że istnieje szansa, że kryterium zostanie spełnione w następnym kroku.
Z punktu widzenia programisty pseudokod może wyglądać mniej więcej tak:
P := The hash of the previously mined block B := A block of transactions H := A hash function D := Difficulty Level 0 Retreive P 1 Construct/Modify B 2 IF H(P, B, Some Random Number) > D END 3 GOTO 1
Powinienem cię ostrzec, że są kilka nieścisłości w tym opisie, ale w większości to powinno wystarczyć. A oto kilka przydatnych wyjaśnień:
What „sa hash?
Hash to funkcja, która konwertuje dane na liczbę z określonego zakresu. Hash ma tę właściwość, że wiedząc, że jego wynik jest w zasadzie nieprzewidywalny (w podanym zakresie). Specyficzna funkcja skrótu używana do wydobywania bitcoinów to SHA256 zastosowana dwukrotnie.
Jak działa poziom trudności?
Ta nieprzewidywalna natura funkcji skrótu oznacza, że wprowadzenie danych losowych (transakcja + liczba losowa) w zasadzie da losową liczbę z określonego zakresu. Dalsze ograniczanie zakresu żądanego wyniku wpływa na prawdopodobieństwo znalezienia go w jednej rundzie. Tworzy to sposób na probabilistyczne określenie, jak często będzie można znaleźć rozwiązanie na podstawie tego, ile razy algorytm można uruchomić w sieci. W szczególności, kiedy słyszysz termin „gigahasze” lub „terahasze”, oznacza to, ile razy można wykonać krok 3. Wraz ze wzrostem liczby skrótów na sekundę w całej sieci, sieć automatycznie zwiększa trudność, tak że rozwiązanie zostanie znalezione w ciągu około 10 minut.
Co się dzieje, gdy blok jest wydobywany?
Kiedy blok jest wydobywany, górnik wysyła go do wszystkich innych kopaczy w sieci jako dowód, że znalazłem to. Ten blok zawiera listę transakcji, znaleziony skrót, określoną liczbę losową i odniesienie do poprzedniego skrótu. Gdy każdy górnik otrzymuje nowo wydobyty blok, usuwa wszystkie transakcje, które obecnie eksploatuje, które istnieją w bloku (ponieważ zostały już potwierdzone w łańcuchu bloków) i rozgłasza blok do innych górników, którzy robią to samo. propagacja następuje dość szybko.
Uwaga: pierwotny górnik bloku otrzymuje „opłatę górniczą”, która jest nagrodą składającą się z wszelkich niewydanych monet z transakcji oprócz nagrody w postaci „bazy monet”. Nagroda za bazę monet zaczynała się od 50 bitcoinów i zmniejszała się o połowę po każdych 210 000 blokach (mniej więcej raz na 4 lata). Nagroda w bazie monet będzie w końcu tak mała, że będzie znikoma w porównaniu z opłatami górników.
Komentarze
- Nagroda jest zmniejszana o połowę co 210000 bloków .- > Właśnie to widziałem i myślę, że jest fajne: bitcoinclock.com
- Och , a Trudność jest dostosowywana co 2016 bloków, zakładając, że sieć będzie nadal działać ze średnią szybkością mieszania wspomnianych ostatnich bloków z 2016 r. i ustawiając nową trudność w taki sposób, że ta hashrate spowoduje około 10-minutowy cykl blokowy. >
- Mogę się mylić, ale uważam, że blok zawiera również hash z ostatniego bloku. I w ten sposób bloki są łączone wstecz, co prowadzi do terminu blockchain.
- @Murch, trudność jest właściwie dostosowywana dla każdego bloku w zależności od tego, ile czasu zajęło znalezienie poprzedniego bloku, a na tym etapie Trudność może tylko wzrosnąć. W każdym bloku 2016 poziom trudności jest dostosowywany w stosunku do ostatnich bloków z 2016 roku i można go zwiększyć lub zmniejszyć. Pomaga to chronić się przed nagłymi spadkami mocy obliczeniowej, które w przeciwnym razie spowodowałyby wydłużenie czasu znajdowania bloku do ponad 10 minut.
- @ Tarandeep-Gill, że ' s poprawne! Hash poprzedniego bloku jest mieszany wraz z listą transakcji. To faktycznie sprawia, że myślę, że moje wyjaśnienie haszowania jest nieco niekompletne – specyficzna funkcja skrótu nie jest zastosowana dwukrotnie, jak podano, SHA256, ale raczej ta funkcja stosowana do różnych części bloku (w tym transakcji i skrótu poprzedniego bloku) na różne sposoby. To jedna z tych ” nieścisłości „, przed którymi Cię ostrzegałem. Zastanawiam się, czy możesz znaleźć inne …
Odpowiedź
Cel rozwiązania „układanki” polega na (a) opóźnieniu wydobycia bloku do średnio 10 minut i (b) poniesieniu rzeczywistych kosztów wydobycia bloku (wydatkowanie mocy procesora, a tym samym energii). Koszty są po to, aby zapobiec atakowi Sybil (uruchomienie wielu maszyn górniczych w celu wykonania ataku 51%).
Opóźnienie zostało wprowadzone, aby umożliwić rozprzestrzenienie się dobrego bloku na całym świecie do wszystkich innych górników , bez dawania górnikowi, który właśnie wybił nowy blok, przewagi na starcie. W tym celu czas blokowania (10 minut) musi być o rząd wielkości większy niż opóźnienie propagacji (kilka sekund).
Więc rodzaj puzzli jest w pewnym sensie nieistotny, równie dobrze może to być gigantyczne Sudoku.
Odpowiedź
Każdy hash jest prawidłowym hashem. Pytanie brzmi, czy „czy hasz spełnia nasze kryteria”. To, co haszujesz, to tak naprawdę kilka rzeczy (wrócimy do tego), które razem tworzą ciąg będący ciągiem o określonej długości. Następnie haszujesz cały ciąg. Potraktuj wynikowy skrót jako liczbę. Chcemy, aby wynikowa liczba była mniejsza niż liczba docelowa. To tak, jakby rzucić miliardową kostką i wymyślić liczbę poniżej docelowej. Ta docelowa liczba jest uważana za „trudność”. Im więcej osób rzuca kostką, tym zmniejszamy wartość docelową, aby zmniejszyć prawdopodobieństwo każdy rzut kostką trafi.
Co jest ważne, niektóre z tych rzeczy, które ustawiamy w ciągu, które haszujemy, są rzeczami, które możemy dostosować. Haszowanie nie jest dokładnie takie samo, jak rzucanie kostką, ponieważ jeśli mamy ciągle to samo, otrzymujemy ten sam wynik w kółko. Jednak nawet niewielka korekta tego, co mamy, może mieć duży wpływ na to, jaki jest wynikowy hasz. Podstawowy element, którym możemy manipulować, nazywa się „nonce”. Zasadniczo wybieramy numer nonce do użycia w ciągu, haszujemy cały ciąg i widzimy, co otrzymamy. Jeśli hash nie jest trafiony, modyfikujemy wartość nonce i próbujemy ponownie . Sama wartość jednorazowa nie jest zbyt duża, więc istnieje ograniczona liczba jej odmian, które można wypróbować. Następną pozycją, którą możemy zmienić, jest znacznik czasu. Możemy również poruszać sygnaturą czasową. Każde przesunięcie znacznika czasowego pozwala nam od nowa przejść przez cały zestaw możliwych wartości jednorazowych. Powtarzamy ten proces wyczerpywania możliwości jednorazowych, a następnie w kółko poruszamy sygnaturą czasową, aż powstały skrót jest niższa niż docelowa liczba trudności.
Kiedy tak się stanie, ogłaszamy światu, że ten znacznik czasu plus ten numer jednorazowy działają w celu rozwiązania bloku. Inni potwierdzają, że jest prawdziwy i jest dodawany do łańcuch bloków. Blok jest uważany za „zatwierdzony”, gdy znajduje się „głęboko” w łańcuchu bloków, co oznacza, że jest blokiem historycznym w porównaniu z blokiem bieżącym. Walidacja jest tutaj trochę myląca, ponieważ nie jest tak, że blok nie jest już znany jako poprawny. To, co potwierdzamy, jest dowodem pracy, co oznacza, że gdy ten historyczny blok zostanie zakopany wystarczająco daleko, wysiłek włożony w stworzenie tej historii jest nie do pokonania, aby ktoś inny próbował stworzyć inną odmianę historii. Musieliby stworzyć własną wersję tego bloku (jedynym powodem jest zapisanie we własnej wersji transakcji, tjukraść monety), a następnie rozwiąż go samodzielnie, a następnie rozwiąż następny blok, następny i tak dalej i „dogonić” innych. Oznacza to, że musieliby wyprzedzić świat w grze w kości. Może kiedyś w historii wszechświata ktoś miałby szczęście bez przerwy, mając dwie lub trzy przecznice od tyłu do siebie, ale ze 120 blokami, których obecnie wymaga większość kopalni i giełd? To się nigdy nie wydarzy.
but what should I do next to this "data"?
Tutaj ' jest krótką implementacją referencyjną. github.com/jgarzik/pyminer/blob/master/pyminer.pyexplain the mining process in programmer's view
to dość szerokie pytanie. Jaki konkretny problem próbujesz rozwiązać?