Мазмуну:

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

Video: ESP8266 Bitcoin Miner: 3 кадам

Video: ESP8266 Bitcoin Miner: 3 кадам
Video: Сроки окупаемости Arduino в майнинге #mining 2024, Ноябрь
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

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

Ошентип, бул сандардын негизинде биз ар бир он мүнөттө блокту ийгиликтүү казып алуу мүмкүнчүлүгүнө ээ болобуз, 1e16 бир блок учурда $ 212, 000. Албетте, бул лото билетин сатып алуу сыяктуу, бирок жеңүү мүмкүнчүлүгү азыраак, бирок сиз эски сөздү билесиз, кимдир бирөө аны жеңиши керек. Gate Mate жана Super Squirter ESP8266 долбоорлорунун көбү менен алар эч кандай жумуш жасашпайт, алар жөн эле сайылып, сурамдарды же киргизүүлөрдү күтүп жатышат, андыктан эмне үчүн аларды койбойсуз, балким, кээ бир монеталарды утуп алыңыз. Биринчи кадам - бул ESP8266дагы Blockheaderде кош SHA256 аткаруу мүмкүнбү же жокпу, аракет кылуу. Биткойн дүйнөсүндө "таштанды" чындыгында эки эсе көп SHA256, бирок биз аны жөн эле таштанды деп атайбыз. Кандай болбосун, бир аз гуглингден кийин, мен хэширлөө үчүн зарыл болгон бардык маалыматты камтыган бул эки баракты таптым.

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

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

Белгилей кетсек, жогорудагы шилтемелерде деталдуу түрдө иштөө протоколу колдонулбай калган. Ал getblocktemplate протоколу менен алмаштырылган, бул блоктун башын курууну бир аз татаалдаштырат, тактап айтканда, сиз өзүңүздүн merkle тамырын курушуңуз керек. Бардыгы үчүн getblocktemplate викисин карап көрүңүз.

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

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

Келгиле, дароо секирели, ESP8266 коду ESP8266BitcoinMiner GitHub репоунда. Мен жогорудагы шилтемелердеги бардык маалыматты кайра кайталабайм, тескерисинче негизги ойлорду баса белгилеп кетейин.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae772f7f78f74f4f4f4f4f4f4f8f4f4f4f4f4f4f4ff4

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; үчүн (mg = 0, i = 0; i '9'? in - 'a' + 10: - '0' ичинде; rg = in [i + 1]> '9'? in [i+1] - 'a'+10: [i+1] - '0' ичинде; out [mg] = (ng << 4) | rg;} кайтуу;}

hex_decode, hexadecimal ascii символдорун камтыган header_hex сабын алат жана SHA256 хэшине даяр болгон тиешелүү байт баалуулуктары менен uint8_t хэшбитин [80] толтурат.

бош хэш () {

hex_decode (header_hex, strlen (header_hex), хэшбайттар); белгисиз узак баштоо = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); байт хэш [SHA256_SIZE]; hasher.doFinal (хэш); hashagain.doUpdate (hash, sizeof (hash)); байт hash2 [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); }}

хэш жөн гана хэшбайттарды эки жолу хэштейт (кош SHA256), канча секунд алганын басып чыгарат жана натыйжада келип чыккан хэшти чоң эндиан жана кичине эмиан катары басып чыгарат. Эгерде хэштер бир гана SHA256 хэшерине салынган болсо, анда ал бир аз тезирээк болмок, бирок баары бир жогорудагы код менен кош хэшти аткаруу үчүн 832 секунд керектелет жана сиз скриншоттон көрүп, биз туура таштанды алабыз.

2 -кадам: Дубалга жана чындап чоң блокко урунуу

Дубалга жана чындап чоң блокко урунуу
Дубалга жана чындап чоң блокко урунуу

Демек, бир хэшти жасоо үчүн 832 секунд керектелсе, биз 1 /0.000834 = 1201 хэш /сек аткара алабыз.

Түшүнүктүү болуш үчүн, биз маалыматты #125552 блогунан алдык, биз аны билдик, ал буга чейин казылып алынган жана бул маалыматты ESP8266 менен бирдей таштандыга ээ болушубуз үчүн тест катары колдонулган. Ошентип, толук кандуу шахтер менен киреше тапканыңызда, кокустан nonceге божомол кылып, аны менен блокбастерди таштап, натыйжаны ошол блоктун кыйынчылыгы менен салыштырасыз. Эгерде хэш кыйынчылыкка жооп берсе, анда текшерүү үчүн тармакка тапшырылат.

Макул, биз хэшти аткара алабыз, албетте, чен абдан коркунучтуу, бирок лотерея катары карасак, бул божомол. Мына, бирок жакыныраак текшерүүдөн кийин, тармак менен байланышуу үчүн толук түйүндү иштетүү керек экени түшүнүктүү болот.

Ошентип, диаграмманы карасаңыз, bitcoin ядросунун бир бөлүгү болгон битоин демону тармак менен шахтердун ортосундагы байланышка кам көрөрүн көрө аласыз. Бул эмнени билдирет, сиз Bitcoin өзөгүн серверде иштетишиңиз керек, ошондо ESP8266 ар бир 10 мүнөт сайын жаңы блокпед алып, анан кайра тармакка тапшыра алат.

Мен муну сынап көргөн жокмун, бирок тармак менен туура байланышка чыга электе, бүт блокчейнди болжол менен 130 Gigs менен шайкештештирүү керек окшойт, викиде алар белгилүү бир кадамдарды бардык функциялар жеткиликтүү болгонго чейин бүтүрүү керектигин айтышат, андыктан абдан так бул эмнени билдирет.

Ошентип, мени ошол жакка тартты, изилдөө көз карашынан караганда, баары абдан кызыктуу болду жана кичинекей ESP8266 сыноо корпусун ийгиликтүү таштаганын көрүү абдан сонун болду, бирок иш жүзүндө айтканда, мен ядрону жүктөп алып, баарын синхрондоштурган көп адамдарды көргөн жокмун. blockchain, бардыгын жаңыртып туруу, коопсуздукту камсыз кылуу, блокту утуп алуу мүмкүнчүлүгү 1е16дан 1ге чейин. Мен үчүн алыскы көпүрө.

Баргандан баштап мен таштанды ылдамдыгы коркунучтуу болорун билчүмүн, бирок кызыгуум күч алып, мен аны коё берүүгө аргасыз болдум. Жеке казып алуунун ордуна, ал жерде тоо -кен казып алуу бассейни болушу мүмкүн, аны ESP8266дан монументалдуу күч -аракетсиз туташтырса болот же дагы ылайыктуу башка cryptocurrency болушу мүмкүн. Эгер тапсаңыз, мага кабарлаңыз.

3 -кадам: Шилтемелер

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

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

3. Bitcoin тоо -кен казып алуу кыйын: алгоритмдер, протоколдор жана байттар

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

5. Блок 125552

Сунушталууда: