Мазмұны:

ESP8266 Bitcoin Miner: 3 қадам
ESP8266 Bitcoin Miner: 3 қадам

Бейне: ESP8266 Bitcoin Miner: 3 қадам

Бейне: ESP8266 Bitcoin Miner: 3 қадам
Бейне: Сроки окупаемости Arduino в майнинге #mining 2024, Шілде
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

Биткоиннің бағасы көтерілуде және ESP8266 жұптары үнемі қосылып тұрса да, көп нәрсе істемейді, мен неге соло Bitcoin Miner -ді енгізбеу керек деп ойладым. Кішкене тәжірибеден кейін мен ESP8266 -ды ~ 1200 хэш/сек дейін алдым, ал 2017 жылдың желтоқсанындағы жағдай бойынша Bitcoin желісі секундына 12 000 000 тера хэшті орындады (сіз blockchaininfo -дан соңғы нөмірлерді тексере аласыз).

Осы сандарға сүйене отырып, біз әр он минут сайын блокты табысты табудың 1 -ден 16 -ға дейінгі мүмкіндігіне ие болар едік., бірақ сіз ескі сөзді білесіз, оны біреу жеңуі керек. Gate Mate және Super Squirter ESP8266 жобаларының көпшілігінде олар көп жағдайда жұмыс жасамайды, олар тек қосылады және сұраныстар мен кірістерді күтеді, сондықтан оларды неге қоспасқа, мүмкін тиын ұтып алу керек. Бірінші қадам - ESP8266 құрылғысында блокаторда SHA256 қосарлы орындау мүмкін бе екенін анықтау. Биткоин әлемінде «хэш» - бұл қос SHA256, бірақ біз оны хэш деп атаймыз. Қалай болғанда да, аздап гуглингтен кейін мен хэштеу үшін қажетті барлық ақпаратты беретін осы екі бетті таптым.

1. Хэшинг алгоритмін блоктау

2. Bitcoin Mining қиын жолмен: алгоритмдер, хаттамалар мен байттар

Айта кетейік, жоғарыда келтірілген сілтемелерде егжей -тегжейлі көрсетілген жұмыс протоколы ескірген. Ол getblocktemplate хаттамасымен ауыстырылды, бұл блок тақырыбын құруды күрделендіреді, әсіресе сіз өзіңіздің merkle түбірін құруыңыз керек. Барлық ұсақ -түйек үшін getblocktemplate викиге қараңыз.

1 -қадам: Алгоритм

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

Дәл енейік, ESP8266 коды ESP8266BitcoinMiner GitHub репода. Мен жоғарыдағы сілтемелердегі барлық ақпаратты қайта жинамаймын, тек негізгі ойларды бөліп көрсетемін.

char header_hex = «0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942a772f7f7f7f78779779798979797979797929294294244444444444f4f44f4f44f4

char header_hex - бұл блок тақырыбы және ол алты өрістен құралған, Version, hashPrevBlock, hashMerkleRoot, Time, Bits және Nonce барлығы он алтылық белгісінде ені мәндер ретінде біріктірілген. Бұл жоғарыдағы сілтемеден ғана көшірілген, бірақ толыққанды шахтерде сіз осы өрістердің әрқайсысын json объектісінде алатын боласыз, содан кейін еншілікті реттеп, оны әр 10 минут сайын қосуға тура келеді.

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

белгісіз int i, mg, ng, rg; for (mg = 0, i = 0; i '9'? in - 'a' + 10: - '0' ішінде; rg = in [i + 1]> '9'? in [i+1] - 'a'+10: [i+1] - '0' ішінде; шығыс [mg] = (ng << 4) | rg;} қайту;}

hex_decode он алтылық асции таңбаларынан тұратын header_hex жолын қабылдайды және SHA256 хэшіне дайын байт мәндерімен uint8_t хэшбиттерін [80] толтырады.

жарамсыз хэш () {

hex_decode (header_hex, strlen (header_hex), хэшбайттар); белгісіз ұзақ бастау = micros (); hasher.doUpdate (хэшбайт, өлшемі (хэшбайт)); байттық хэш [SHA256_SIZE]; hasher.doFinal (хэш); hashagain.doUpdate (хэш, sizeof (хэш)); байт хэш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 («Кішкентай Ендиан:»); for (байт i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

хэш жай ғана хэшбайттарды екі рет хэширлейді (қос SHA256), алынған секундтарды басып шығарады және алынған хэшті үлкен ендіан мен кішкентай ендіан түрінде басып шығарады. Егер хэштер тек бір SHA256 хэшеріне кірістірілген болса, бұл сәл жылдамырақ болар еді, бірақ бәрібір жоғарыдағы кодпен қосарланған хэшті орындау үшін 832 секунд қажет, ал сіз скриншоттан көресіз, біз дұрыс хэшті аламыз.

2 -қадам: Қабырғаға соғу және шынымен үлкен блок

Қабырғаға соғу және шынымен де үлкен блок
Қабырғаға соғу және шынымен де үлкен блок

Егер бір хэшті жасау үшін 832 секунд қажет болса, біз 1 /0.000834 = 1201 хэш /сек орындай аламыз.

Түсінікті болу үшін біз ақпаратты 125552 блоктан алдық, онда біз оны білдік, ол қазірдің өзінде өндірілген және бұл ақпаратты ESP8266 -мен бірдей хэшті алуға болатындығына тексеру үшін қолданылған. Толыққанды шахтермен пайда болған кезде, сіз кездейсоқ түрде болжамды қабылдайсыз, онымен блок -бастың хэшін жасайсыз, содан кейін нәтижені осы блоктың қиындықтарымен салыстырасыз. Егер хэш қиындыққа жауап берсе, ол желіге тексеру үшін жіберіледі.

Жақсы, біз хэшті орындай аламыз, бұл жылдамдық өте қорқынышты, бірақ оған лотерея ретінде қараған кезде болжам - бұл болжам. Міне, бірақ жақынырақ тексергенде, сіз тоқтап, тау -кен ісі туралы ойланған кезде, желімен байланысуға болатын толық түйінді іске қосуыңыз керек екені түсінікті болады.

Егер сіз диаграмманы қарасаңыз, биткоин -демонның биткоин ядросының бөлігі желі мен шахтер арасындағы байланысқа қамқорлық жасайтынын көре аласыз. Бұл нені білдіреді, сіз ESP8266 әр 10 минут сайын жаңа блокбастер алып, содан кейін желіге қайта жібере алатындай етіп серверде Bitcoin ядросын іске қосуыңыз керек.

Мен оны сынап көрмедім, бірақ сіз желіде дұрыс байланыс орнатпас бұрын бүкіл блокчейнді шамамен 130 Gigs -те синхрондауыңыз керек сияқты, викиде олар белгілі бір қадамдарды барлық функционалдылық қол жетімді болғанға дейін аяқтау керектігін айтады. олар нені білдіреді.

Бұл мені сол жаққа көтерді, зерттеу тұрғысынан бәрі өте қызықты болды және кішкентай ESP8266 сынақ корпусын сәтті хэштегенін көру өте керемет болды, бірақ іс жүзінде мен ядроны жүктеп алып, бәрін синхрондаған көптеген адамдарды көрмеймін. блокчейн, барлығын жаңартып отыру, қауіпсіздік мәселелерімен айналысу, барлығы 1 -де 16 -да блокты ұтып алу мүмкіндігі. Мен үшін алыс көпір.

Бастапқыда мен хэш мөлшерлемесі қорқынышты болатынын білдім, бірақ қызығушылығым күшейе түсті, мен оны жіберуге мәжбүр болдым. Жеке өндіруден гөрі, ESP8266 -дан монументальды күш жұмсамай -ақ қосылатын тау -кен бассейні болуы мүмкін немесе қолайлы басқа cryptocurrency болуы мүмкін. Егер сіз оны тапсаңыз, маған хабарлаңыз.

3 -қадам: Әдебиеттер

1. ESP8266 Bitcoin Miner GitHub репозиторийі

2. ESP8266 Crypto GitHub репозиторийі

3. Биткоинді өндіру қиын: алгоритмдер, протоколдар және байттар

4. Хэшинг алгоритмін блоктау

5. 125552 блогы

Ұсынылған: