Съдържание:

ESP8266 Bitcoin Miner: 3 стъпки
ESP8266 Bitcoin Miner: 3 стъпки

Видео: ESP8266 Bitcoin Miner: 3 стъпки

Видео: ESP8266 Bitcoin Miner: 3 стъпки
Видео: How To Chia GPU Plotting and Farming Guide for WINDOWS UPDATED - Gigahorse Start to Finish - 2023 2024, Ноември
Anonim
ESP8266 Биткойн миньор
ESP8266 Биткойн миньор

Тъй като цената на биткойн продължава да се покачва и с няколко ESP8266 винаги включени, но всъщност не прави много, си помислих защо да не опитам да внедря Solo Bitcoin Miner. След малко експериментиране получих ESP8266 до ~ 1200 хеша/сек и към декември 2017 г. мрежата на Bitcoin изпълняваше около 12 000 000 тера хеша в секунда (можете да проверите blockchaininfo за най -новите числа).

Така че въз основа на тези числа бихме имали шанс 1 в 1e16 за успешен добив на блок на всеки десет минути, където блок в момента струва 212 000 долара., но знаете старата поговорка, някой трябва да я спечели. И с проектите Gate Mate и Super Squirter ESP8266 през повечето време не вършат никаква работа, те просто са включени и чакат заявки или входове, така че защо да не ги поставите и може би да спечелите малко монети. Първата стъпка беше да се опитаме да разберем дали е възможно дори да се извърши двоен SHA256 на Blockheader на ESP8266. В света на биткойните „хешът“всъщност е двоен SHA256, но ние просто ще го наричаме хеш. Както и да е, след малко гуглене наоколо намерих тези две страници, които предоставиха цялата информация, необходима за хеширане.

1. Алгоритъм за хеширане на блокове

2. Биткойн Майнинг по трудния начин: алгоритмите, протоколите и байтовете

Заслужава да се отбележи, че протоколът getwork, както е описано подробно в горните връзки, е оттеглен. Той е заменен с протокола getblocktemplate, което прави малко по -сложно изграждането на заглавка на блок, по -специално трябва да изградите свой собствен root на merkle. За всички мръсни песъчинки вижте уикито на getblocktemplate.

Стъпка 1: Алгоритъмът

Алгоритъмът
Алгоритъмът

Нека веднага да влезем, кодът ESP8266 е в репото ESP8266BitcoinMiner GitHub. Няма да преразглеждам цялата информация от горните връзки, а просто ще подчертая основните моменти.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7a4f4a4f4aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!

char header_hex е заглавката на блока и е изградена от шест полета, Version, hashPrevBlock, hashMerkleRoot, Time, Bits и Nonce, всички свързани заедно с малки стойности в шестнадесетичната нотация. Това беше току -що копирано от връзката по -горе, но в действителен пълноценен миньор ще получите всяко от тези полета в json обект и след това ще трябва да подредите endianness и да го съберете в движение на всеки 10 минути.

uint8_t *шестнадесетичен код (const char *in, size_t len, uint8_t *out) {

без знак int i, mg, ng, rg; за (mg = 0, i = 0; i '9'? в - 'a' + 10: в - '0'; rg = в [i + 1]> '9'? в [i+1] - 'a'+10: in [i+1] - '0'; out [mg] = (ng << 4) | rg;} връщане навън;}

hex_decode приема низа header_hex, който съдържа шестнадесетични знаци ascii, и попълва uint8_t hashbytes [80] със съответните им байтови стойности, готови за хеша SHA256.

void hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); без подпис дълъг старт = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); байтов хеш [SHA256_SIZE]; hasher.doFinal (хеш); hashagain.doUpdate (hash, sizeof (hash)); байт хеш2 [SHA256_SIZE]; hashagain.doFinal (hash2); без подпис дългосрочен = micros (); беззначна дълга делта = приключил - старт; Serial.println (делта); Serial.print ("Big Endian:"); for (байт 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 (байт i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash просто хешира hashbytes два пъти (double SHA256), отпечатва използваните секунди и отпечатва получения хеш като голям и малък endian. Ако хешовете бяха вложени само в един хешер SHA256, вероятно щеше да е малко по -бързо, но така или иначе с горния код са необходими 832 секунди за изпълнение на двойния хеш и можете да видите от екрана, че получаваме правилния хеш.

Стъпка 2: Удряйки стена и наистина голям блок

Удряйки стена и наистина голям блок
Удряйки стена и наистина голям блок

Така че, ако са необходими 832 секунди за изпълнение на един хеш, можем да извършим 1 /0,000834 = 1201 хеша /сек.

За да бъде ясно, взехме информацията от блок #125552, където знаехме nonce, тя вече е извлечена и използвахме тази информация като тест, за да сме сигурни, че можем да получим същия хеш с ESP8266. Така че, след като печалба с напълно преработен миньор, на случаен принцип бихте предположили в един момент, хеширате блокхедера с него и след това сравнявате резултата с трудността за този блок. Ако хешът отговаря на трудността, той се изпраща в мрежата за проверка.

Добре, така че това е чудесно, че можем да извършим хеш, разбира се, че процентът е ужасен, но когато го гледаме като лотария, предположението е предположение. Ето го, но при по -внимателно разглеждане скоро става ясно, че трябва да работите с пълен възел, за да можете да комуникирате с мрежата, нещо очевидно, когато спрете и помислите какво всъщност е копаенето.

Така че, ако погледнете диаграмата, можете да видите, че демонът на биткойн, който е част от ядрото на биткойн, се грижи за комуникацията между мрежата и миньора. Това наистина означава, че трябва да стартирате ядрото на Bitcoin на сървър, така че ESP8266 да може да получава нов блокхедър на всеки 10 минути и след това да може да се изпраща обратно в мрежата.

Не съм го пробвал, но изглежда, че ще трябва да синхронизирате целия блокчейн на около 130 концерта, преди той да комуникира правилно с мрежата, в уикито те споменават, че някои стъпки трябва да бъдат изпълнени, преди да е налична цялата функционалност, така че съм сигурен това имат предвид.

Това ме издърпа там, от гледна точка на изследването, всичко беше много интересно и беше много готино да видя как малкият ESP8266 успешно хешира тестовия случай, но на практика не виждам много хора да изтеглят ядрото, синхронизирайки цялото blockchain, поддържане на всичко актуално, водене в крак с проблемите на сигурността всичко за шанс 1 в 1e16 да спечели блока. Мост към далеч за мен.

От самото начало знаех, че процентът на хеширане ще бъде ужасен, но любопитството надделя над мен и трябваше да го опитам. Вместо самостоятелно копаене, може да има пул за копаене, който може да бъде свързан директно от ESP8266 без огромни усилия, или може да има друга криптовалута, която е по -подходяща. Ако откриете някое, моля, уведомете ме.

Стъпка 3: Препратки

1. ESP8266 Bitcoin Miner GitHub хранилище

2. ESP8266 Crypto GitHub хранилище

3. Извличането на биткойни по трудния начин: алгоритмите, протоколите и байтовете

4. Алгоритъм за хеширане на блокове

5. Блок 125552

Препоръчано: