Turinys:
- 1 žingsnis: algoritmas
- 2 žingsnis: atsitrenkimas į sieną ir tikrai didelis blokas
- 3 žingsnis: nuorodos
Video: ESP8266 „Bitcoin Miner“: 3 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:48
Kadangi „Bitcoin“kaina ir toliau kilo, o pora ESP8266 visada buvo prijungta, bet iš tikrųjų nedaug, aš pagalvojau, kodėl nepabandžius įgyvendinti „Solo Bitcoin Miner“. Po truputį eksperimentuodamas gavau ESP8266 iki ~ 1200 maišų per sekundę, o 2017 m. Gruodžio mėn. „Bitcoin“tinklas vykdė apie 12 000 000 tera maišų per sekundę (naujausius skaičius galite patikrinti „blockchaininfo“).
Taigi, remiantis šiais skaičiais, turėtume 1 iš 1 16 galimybę sėkmingai kasti bloką kas dešimt minučių, kai bloko vertė šiuo metu yra 212 000 USD. Žinoma, tai daug kas panašu į loterijos bilieto pirkimą, tik su daug mažesne tikimybe laimėti, bet žinote seną posakį, kad kažkas turi jį laimėti. Tiek su „Gate Mate“, tiek su „Super Squirter ESP8266“projektais dažniausiai jie neatlieka jokio darbo, jie tiesiog yra prijungti ir laukia užklausų ar įvesties, tad kodėl gi ne juos įdėjus ir galbūt laimėjus monetų. Pirmasis žingsnis buvo pabandyti išsiaiškinti, ar netgi įmanoma atlikti dvigubą SHA256 „Blockheader“naudojant ESP8266. „Bitcoin“pasaulyje „maiša“iš tikrųjų yra dviguba SHA256, tačiau mes ją vadinsime tik maiša. Bet kokiu atveju, po truputį googlindamas, radau šiuos du puslapius, kuriuose buvo pateikta visa informacija, reikalinga maišai gauti.
1. Bloko maišos algoritmas
2. „Bitcoin Mining“sunkus būdas: algoritmai, protokolai ir baitai
Verta paminėti, kad „getwork“protokolas, kaip aprašyta aukščiau esančiose nuorodose, buvo nebenaudojamas. Jis buvo pakeistas „getblocktemplate“protokolu, todėl blokų antraštės kūrimas tampa šiek tiek sudėtingesnis, ypač jūs turite sukurti savo „Merkle“šaknį. Norėdami sužinoti viską, kas vyksta, apsilankykite „wiki“„getblocktemplate“.
1 žingsnis: algoritmas
Eikime tiesiai, ESP8266 kodas yra ESP8266BitcoinMiner GitHub atpirkimo sandoryje. Aš nesiruošiu pakartoti visos informacijos iš aukščiau pateiktų nuorodų, o tik pabrėžti pagrindinius dalykus.
char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797ffbfbb9b7b07b07b7b7b7f07b7b7a
char header_hex yra bloko antraštė ir sudaryta iš šešių laukų: Versija, hashPrevBlock, hashMerkleRoot, Time, Bits ir Nonce - visi jie yra sujungti kaip mažos endianinės reikšmės šešiakampiu žymėjimu. Tai buvo tiesiog nukopijuota iš aukščiau esančios nuorodos, tačiau tikrame pilnavertiškame kasykloje kiekvieną iš šių laukų gautumėte „json“objekte, o tada turėsite išsiaiškinti galutiškumą ir sudėti jį kas 10 minučių.
uint8_t *hex_decode (const char *in, size_t len, uint8_t *out) {
nepasirašytas int i, mg, ng, rg; (mg = 0, i = 0; i '9'? in - 'a' + 10: in - '0'; rg = in [i + 1]> '9'? in [i+1] - 'a'+10: į [i+1] - '0'; iš [mg] = (ng << 4) | rg;} grįžti;}
hex_decode paima eilutę header_hex, kurioje yra šešioliktainiai ascii simboliai, ir užpildo uint8_t hashbytes [80] atitinkamomis baitų reikšmėmis, paruoštomis SHA256 maišai.
void hash () {
hex_decode (antraštė_hex, strlen (antraštė_hex), maišos); nepasirašyta ilga pradžia = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); baitų maišos [SHA256_SIZE]; hasher.doFinal (maiša); hashagain.doUpdate (maišos, sizeof (maišos)); baitų maišos2 [SHA256_SIZE]; hashagain.doFinal (maiša2); nepasirašytas ilgas galas = micros (); nepasirašyta ilga delta = baigta - pradžia; Serial.println (delta); Serial.print („Big Endian:“); (baitas i = 32; i> 0; i-) {jei (maišos2 [i-1] <0x10) {Serijinis atspaudas ('0'); } Serijinis atspaudas (maiša2 [i-1], HEX); } Serial.println (); Serial.print („Mažasis Endianas:“); (baitas i = 0; i <SHA256_SIZE; i ++) {if (maiša2 <0x10) {Serial.print ('0'); } Serijinis atspaudas (maiša2 , HEX); }}
maiša paprasčiausiai maišo maišos du kartus (dvigubas SHA256), spausdina panaudotas sekundes ir spausdina gautą maišą kaip didelį endianą ir mažą endianą. Jei maišos būtų įdėtos tik į vieną SHA256 maišytuvą, tai tikriausiai būtų šiek tiek greičiau, tačiau bet kokiu atveju, naudojant aukščiau pateiktą kodą, dvigubai maišai atlikti reikia 832 naudojimo sekundžių, o iš ekrano kopijos matote, kad gauname teisingą maišą.
2 žingsnis: atsitrenkimas į sieną ir tikrai didelis blokas
Taigi, jei vienai maišai atlikti reikia 832 naudojimo sekundžių, galime atlikti 1/0 000834 = 1201 maišos per sekundę.
Kad būtų aišku, mes paėmėme informaciją iš bloko #125552, kuriame žinojome nonce, ji jau buvo išgauta ir panaudojo šią informaciją kaip bandomąjį atvejį, kad įsitikintume, jog galime gauti tą pačią maišą su ESP8266. Taigi, gavęs pelną su visiškai išbaigtu kalnakasiu, tu atsitiktinai atspėsi nonce, sumaišyk su juo blokinę antraštę ir tada palygink rezultatą su to bloko sunkumu. Jei maišos problema iškyla, ji pateikiama tinklui patikrinti.
Gerai, todėl puikiai galime atlikti maišą, žinoma, baisiai, bet kai žiūrime į tai kaip į loteriją, spėjimas yra spėjimas. Štai, tačiau, atidžiau apžiūrėjus, netrukus paaiškėja, kad turite turėti pilną mazgą, kad galėtumėte bendrauti su tinklu. Tai savaime aišku, kai sustojate ir pagalvojate, kas iš tikrųjų yra kasyba.
Taigi, jei pažvelgsite į diagramą, pamatysite, kad „Bitcoin“demonas, kuris yra „Bitcoin“branduolio dalis, rūpinasi ryšiu tarp tinklo ir kalnakasio. Tai iš tikrųjų reiškia, kad turite paleisti „Bitcoin“branduolį serveryje, kad ESP8266 kas 10 minučių galėtų gauti naują blokinę antraštę ir tada vėl pateikti ją į tinklą.
Aš to neišbandžiau, bet atrodo, kad turėsite sinchronizuoti visą „blockchain“maždaug 130 koncertų metu, kad jis tinkamai bendrautų su tinklu. „Wiki“jie nurodo, kad tam tikri veiksmai turi būti atlikti, kol bus pasiektos visos funkcijos, todėl gana tikra štai ką jie reiškia.
Taigi tai mane ištraukė iš tyrimo pusės, viskas buvo labai įdomu ir buvo gana šaunu matyti, kaip mažasis ESP8266 sėkmingai sumaišė bandymo atvejį, bet praktiškai nematau daug žmonių, kurie atsisiunčia branduolį, sinchronizuojant visą „blockchain“, nuolat atnaujindami viską, neatsilikdami nuo saugumo problemų, kad gautumėte 1 iš 1e16 galimybę laimėti bloką. Man tiltas į toli.
Nuo pat pradžių žinojau, kad maišos koeficientas bus baisus, tačiau smalsumas mane užvaldė ir turėjau tai išbandyti. Vietoj to, kad būtų kasama atskirai, gali būti kasybos baseinas, prie kurio galima prisijungti tiesiogiai iš ESP8266 be didelių pastangų, arba gali būti kita tinkamesnė kriptovaliuta. Jei radote, praneškite man.
3 žingsnis: nuorodos
1. ESP8266 „Bitcoin Miner GitHub“saugykla
2. ESP8266 „Crypto GitHub“saugykla
3. Bitcoin kasimas sunkiu keliu: algoritmai, protokolai ir baitai
4. Bloko maišos algoritmas
5. Blokas 125552
Rekomenduojamas:
Bitcoin žymeklis su grafiku: 8 žingsniai
„Bitcoin Ticker With Graph“: tai padariau remdamasis BTC kainų žymeklio projektu, kuris informaciją apie kainas gauna iš „coinmarketcap.com“, kurį iš pradžių parašė Brianas Lough. Jis naudojo ESP8266, kuri yra su „Arduino“suderinama plokštė su įmontuotu „WiFi“. Kaip jis apibūdina
Į Bitcoin panašus kriptografinis paleidimas „Raspberry Pi“: 5 žingsniai
„Bitcoin“tipo šifravimas „Raspberry Pi“: mazgo paleidimo instrukcijos. „US-OS“operacinė sistema yra sudaryta iš „raspbian“, kuriame veikia „us-cryptoplatform“paketas. Jums nereikia prašyti leidimo prisijungti. Tiesiog vykdykite šias paprastas instrukcijas ir paleiskite mazgą, uždirbantį kriptovaliutą kiekvieną minutę
Įsivaizduokite savo „Bitcoin“pelną ir praradimą naudodami „Arduino“ir „Python“: 6 žingsniai
Įsivaizduokite savo „Bitcoin“pelną ir nuostolius naudodami „Arduino“ir „Python“: pagrindinė idėja Asmeniškai aš esu kriptovaliutų investuotojas. Bet aš taip pat turiu daug darbo. Taigi aš negaliu sekti „Bitcoin“kainos kaip 10 kartų per minutę. Tačiau vis tiek noriu sužinoti, ar uždirbu, ar prarandu pinigus. Taigi
„Bitcoin“kasyba jūsų „Raspberry Pi“: 6 žingsniai
Bitcoin kasyba jūsų Raspberry Pi: Bitcoin yra kriptovaliuta, elektroninių pinigų forma. Tai decentralizuota skaitmeninė valiuta be centrinio banko ar vieno administratoriaus, kurią galima siųsti iš vartotojo vartotojui per „Bitcoin“tinklą. Yra du pagrindiniai bitkoino gavimo būdai
Paprastas „Bitcoin“žymeklis: 6 žingsniai
Paprastas Bitcoin žymeklis: Tai paprastas Bitcoin ar bet kuris kitas ALT monetos žymeklis. Vienos monetos kaina rodoma 8x 7 segmentų ekrane. Ekranas yra didelis, ryškus ir lengvai skaitomas. Kaina iš coinmarketcap.com nemokamos API atnaujinama kas 5 minutes. Lengvas spausdinimas ir kūrimas. Kodo ID bazė