Съдържание:
Видео: ESP8266 Bitcoin Miner: 3 стъпки
2024 Автор: John Day | [email protected]. Последно модифициран: 2024-01-30 07:54
Тъй като цената на биткойн продължава да се покачва и с няколко 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
Препоръчано:
Как да мигате или програмирате ESP8266 AT фърмуер чрез използване на ESP8266 мигач и програмист, IOT Wifi модул: 6 стъпки
Как да мигате или програмирате фърмуера на ESP8266 AT чрез използване на мигач и програмист ESP8266, IOT Wifi модул: Описание: Този модул е USB адаптер /програмист за модули ESP8266 от тип ESP-01 или ESP-01S. Той е удобно оборудван с 2x4P 2,54 мм женска глава за включване на ESP01. Също така, той прекъсва всички щифтове на ESP-01 чрез 2x4P 2,54 мм мъжки h
ESP8266 - Напояване на градината с таймер и дистанционно управление чрез Интернет / ESP8266: 7 стъпки (със снимки)
ESP8266 - Напояване на градини с таймер и дистанционно управление чрез Интернет / ESP8266: ESP8266 - Напояване с дистанционно управление и с време за зеленчукови градини, цветни градини и тревни площи. Той използва веригата ESP-8266 и хидравличен / електрически вентил за захранване с иригатор. Предимства: Ниска цена (~ US $ 30,00) команди за бърз достъп
ESP8266 - Сензори за врати и прозорци - ESP8266. Помощ за възрастни хора (забравяне): 5 стъпки
ESP8266 - Сензори за врати и прозорци - ESP8266. Помощ за възрастни хора (забравяне): ESP8266 - Сензори за врати / прозорци, използващи GPIO 0 и GPIO 2 (IOT). Може да се гледа в мрежата или в локалната мрежа с браузъри. Вижда се и чрез " HelpIdoso Vxapp " приложение. Използва захранване 110/220 VAC за 5Vdc, 1 реле / напрежение
Получаване на време от интернет с помощта на ESP8266 - Проект за NTP часовник с ESP8266 Nodemcu: 5 стъпки
Получаване на време от интернет с помощта на ESP8266 | NTP Clock Project с ESP8266 Nodemcu: В този урок ще видим как да спечелим време, използвайки ESP8266/nodemcu с Arduino IDE. Получаването на време е особено полезно при регистриране на данни за отбелязване на вашите показания. Ако вашият проект ESP8266 има достъп до интернет, можете да получите време, използвайки Network T
Bitcoin Tracker Използване на Raspberry Pi: 14 стъпки (със снимки)
Bitcoin Tracker Използване на Raspberry Pi: Спомняте ли си Bitcoin? …. децентрализираната валута от новата ера, която някога се е търгувала на $ 19K, което е трябвало да направи революция в глобалната платежна система. Е, оказва се, че са останали по -малко от 3 585 825 биткойна до моите. Преди около година аз