Spisu treści:

ESP8266 Koparka Bitcoin: 3 kroki
ESP8266 Koparka Bitcoin: 3 kroki

Wideo: ESP8266 Koparka Bitcoin: 3 kroki

Wideo: ESP8266 Koparka Bitcoin: 3 kroki
Wideo: I Mined Bitcoin on a Raspberry Pi with an AntMiner USB for 24 Hours 2024, Listopad
Anonim
Koparka bitcoinów ESP8266
Koparka bitcoinów ESP8266

Ponieważ cena Bitcoina wciąż rośnie, a kilka ESP8266 jest zawsze podłączonych, ale tak naprawdę nie robi zbyt wiele, pomyślałem, dlaczego nie spróbować wdrożyć Solo Bitcoin Miner. Po odrobinie eksperymentów uzyskałem ESP8266 do ~1200 hashów/s, a od grudnia 2017 r. sieć Bitcoin wykonywała około 12 000 000 tera hashów na sekundę (możesz sprawdzić informacje o blockchain, aby uzyskać najnowsze liczby).

Tak więc na podstawie tych liczb mielibyśmy szansę 1 do 1e16 na udane wydobycie bloku co dziesięć minut, gdy blok jest obecnie wart 212 000 $. Jasne, to trochę jak kupowanie losu lotto, tylko ze znacznie mniejszą szansą na wygraną, ale znasz stare powiedzenie, ktoś musi je wygrać. Zarówno w projektach Gate Mate, jak i Super Squirter ESP8266 przez większość czasu nie wykonują żadnej pracy, są po prostu podłączone i czekają na żądania lub dane wejściowe, więc dlaczego nie umieścić ich w tym i być może wygrać trochę monet. Pierwszym krokiem było wypróbowanie i ustalenie, czy możliwe było wykonanie podwójnego SHA256 na Blockheader na ESP8266. W świecie Bitcoina „hasz” jest w rzeczywistości podwójnym SHA256, ale będziemy go nazywać haszem. W każdym razie po odrobinie googlowania znalazłem te dwie strony, które zawierały wszystkie informacje potrzebne do haszowania.

1. Blokuj algorytm haszujący

2. Kopanie bitcoinów na własnej skórze: algorytmy, protokoły i bajty

Warto zauważyć, że protokół getwork, opisany w powyższych linkach, został przestarzały. Został on zastąpiony protokołem getblocktemplate, co sprawia, że tworzenie nagłówka bloku jest nieco bardziej skomplikowane, a konkretnie musisz zbudować swój własny merkle root. Dla wszystkich drobiazgów sprawdź wiki getblocktemplate.

Krok 1: Algorytm

Algorytm
Algorytm

Wskoczmy od razu, kod ESP8266 znajduje się w repozytorium ESP8266BitcoinMiner GitHub. Nie zamierzam przerabiać wszystkich informacji z powyższych linków, a raczej tylko podkreślić główne punkty.

char header_hex= 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc94d4a42bc7f59f5;

char header_hex jest nagłówkiem bloku i jest zbudowany z sześciu pól: Version, hashPrevBlock, hashMerkleRoot, Time, Bits i Nonce, które są połączone razem jako wartości little endian w notacji szesnastkowej. To zostało właśnie skopiowane z powyższego linku, ale w prawdziwym, pełnoprawnym górniku otrzymywałbyś każde z tych pól w obiekcie json, a następnie musiałbyś uporządkować endianness i złożyć je w locie co 10 minut.

uint8_t* hex_decode(const char *in, size_t len, uint8_t *out){

unsigned int i, mg, ng, rg; for (mg = 0, i = 0; i '9' ? in - 'a' + 10: in - '0'; rg = in[i+1] > '9' ? in[i+1] - 'a' + 10: in[i+1] - '0'; out[mg] = (ng << 4) | rg; } return out; }

hex_decode pobiera ciąg header_hex, który zawiera szesnastkowe znaki ascii, i wypełnia hashbytes[80] uint8_t odpowiednimi wartościami bajtów gotowymi dla skrótu SHA256.

nieważne hash() {

hex_decode(header_hex, strlen(header_hex), hashbytes); długi start bez znaku = mikro(); hasher.doUpdate(hashbytes, sizeof(hashbytes)); hash bajtów[SHA256_SIZE]; hasher.doFinal(skrót); hashagain.doUpdate(hash, sizeof(hash)); bajt hash2[SHA256_SIZE]; hashagain.doFinal(hash2); unsigned long ended = micros(); unsigned long delta = zakończony - start; Serial.println(delta); Serial.print("Big Endian: "); for (bajt i=32; i > 0; i--){ if (hash2[i-1]<0x10) { Serial.print('0'); } Serial.print(hash2[i-1], HEX); } Serial.println(); Serial.print("Little Endian: "); for (bajt i=0; i < SHA256_SIZE; i++){ if (hash2<0x10) { Serial.print('0'); } Serial.print(hash2, HEX); } }

hash po prostu hashuje hashbytes dwa razy (podwójny SHA256), drukuje zajętą liczbę usekund i wypisuje wynikowy hash jako big endian i little endian. Gdyby hasze były zagnieżdżone tylko w jednym haszerze SHA256, prawdopodobnie byłoby to trochę szybsze, ale tak czy inaczej z powyższym kodem wykonanie podwójnego hasza zajmuje 832 usekund, a na zrzucie ekranu nie widać, że otrzymaliśmy poprawny hash.

Krok 2: Uderzenie w ścianę i naprawdę duży blok

Uderzenie w ścianę i naprawdę duży blok
Uderzenie w ścianę i naprawdę duży blok

Więc jeśli wykonanie jednego hasza zajmuje 832 usekund, możemy wykonać 1/0.000834 = 1201 hashów /sek.

Aby było jasne, wzięliśmy informacje z bloku #125552, w którym wiedzieliśmy, że nic nie jest, zostały już wydobyte i wykorzystaliśmy te informacje jako przypadek testowy, aby upewnić się, że możemy uzyskać ten sam skrót z ESP8266. Tak więc, gdy uzyskasz zysk z w pełni rozwiniętym górnikiem, losowo zgadniesz, mieszając z nim nagłówek bloku, a następnie porównaj wynik z trudnością dla tego bloku. Jeśli hash napotyka trudności, jest następnie przesyłany do sieci w celu weryfikacji.

Ok, więc świetnie, że możemy wykonać hasz, na pewno stawka jest straszna, ale patrząc na to jako na loterię, zgadywanie jest zgadywaniem. Oto, ale po bliższym przyjrzeniu się szybko staje się jasne, że musisz mieć pełny węzeł, aby móc komunikować się z siecią, co jest dość oczywiste, gdy zatrzymasz się i pomyślisz o tym, czym tak naprawdę jest kopanie.

Jeśli więc spojrzysz na diagram, zobaczysz, że demon bitcoin, który jest częścią rdzenia bitcoin, zajmuje się komunikacją między siecią a kopaczem. To naprawdę oznacza, że musisz uruchomić rdzeń Bitcoin na serwerze, aby ESP8266 mógł otrzymywać nowy nagłówek bloku co 10 minut, a następnie móc przesyłać go z powrotem do sieci.

Nie próbowałem tego, ale wygląda na to, że musiałbyś zsynchronizować cały blockchain przy około 130 Gigach, zanim prawidłowo komunikuje się z siecią, na wiki wspominają, że pewne kroki muszą zostać wykonane, zanim wszystkie funkcje będą dostępne, więc całkiem pewne to co mają na myśli.

To mnie tam wciągnęło, z naukowego punktu widzenia wszystko było bardzo interesujące i całkiem fajnie było zobaczyć, jak mały ESP8266 z powodzeniem hashuje przypadek testowy, ale praktycznie rzecz biorąc, nie widzę wielu osób pobierających rdzeń, synchronizujących cały blockchain, utrzymywanie wszystkiego na bieżąco, nadążanie za problemami bezpieczeństwa, a wszystko to dla szansy 1 na 1e16 na wygranie bloku. Most za daleko dla mnie.

Od samego początku wiedziałem, że hash rate będzie straszny, ale ciekawość mnie pokonała i musiałem spróbować. Zamiast kopania w pojedynkę może istnieć pula wydobywcza, którą można podłączyć bezpośrednio z ESP8266 bez monumentalnego wysiłku lub może istnieć inna kryptowaluta, która jest bardziej odpowiednia. Jeśli znajdziesz któreś, daj mi znać.

Krok 3: Referencje

1. Repozytorium GitHub Bitcoin Miner ESP8266

2. Repozytorium ESP8266 Crypto GitHub

3. Kopanie bitcoinów na własnej skórze: algorytmy, protokoły i bajty

4. Blokuj algorytm haszujący

5. Blok 125552

Zalecana: