Sadržaj:
Video: ESP8266 Bitcoin rudar: 3 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:37
Budući da je cijena Bitcoina i dalje rasla te da je nekoliko ESP8266 uvijek uključeno, ali ne radi puno, pomislio sam zašto ne bih pokušao implementirati Solo Bitcoin Miner. Nakon malo eksperimentiranja, dobio sam ESP8266 do ~ 1200 raspršivača u sekundi, a od prosinca 2017. Bitcoin mreža je izvodila oko 12 000 000 tera raspršivanja u sekundi (možete provjeriti najnovije brojeve u blockchaininfo -u).
Dakle, na temelju tih brojeva imali bismo 1 u 1e16 šanse za uspješno rudarenje bloka svakih deset minuta gdje blok trenutno vrijedi 212 000 USD., ali znate staru izreku, netko to mora pobijediti. S projektima Gate Mate i Super Squirter ESP8266 većinu vremena ne rade ništa, samo su uključeni i čekaju zahtjeve ili unose, pa zašto ih ne biste stavili na to i možda osvojili nešto novca. Prvi korak bio je pokušati shvatiti je li uopće moguće izvesti dvostruki SHA256 na Blockheaderu na ESP8266. U svijetu bitcoina 'hash' je zapravo dvostruki SHA256, ali mi ćemo ga nazvati samo hash. U svakom slučaju, nakon malo googlanja, pronašao sam ove dvije stranice koje pružaju sve potrebne podatke za raspršivanje.
1. Algoritam blokiranja blokova
2. Bitcoin Rudarstvo na teži način: algoritmi, protokoli i bajtovi
Vrijedi napomenuti da je getwork protokol, kako je detaljno opisano u gornjim vezama, zastario. Zamijenjen je protokolom getblocktemplate koji malo komplicira izradu zaglavlja bloka, posebno morate izgraditi vlastiti korijen merkle. Za sve gluposti provjerite getblocktemplate wiki.
Korak 1: Algoritam
Idemo odmah, kod ESP8266 nalazi se na ESP8266BitcoinMiner GitHub repo. Neću ponavljati sve podatke s gornjih veza, nego samo istaknuti glavne točke.
char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7a42c7b7c7b7c7c7c7c7c8aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa! '
char header_hex je zaglavlje bloka i izgrađeno je od šest polja, Version, hashPrevBlock, hashMerkleRoot, Time, Bits i Nonce koji su međusobno povezani kao male endijanske vrijednosti u heksadecimalnom zapisu. To je upravo kopirano s gornje veze, ali u stvarnom potpuno razvijenom rudaru primili biste svako od tih polja u json objekt, a zatim morali riješiti endianness i sastaviti ga u hodu svakih 10 minuta.
uint8_t *hex_decode (const char *u, size_t len, uint8_t *out) {
bez potpisa int i, mg, ng, rg; za (mg = 0, i = 0; i '9'? u - 'a' + 10: u - '0'; rg = u [i + 1]> '9'? u [i+1] - 'a'+10: in [i+1] - '0'; out [mg] = (ng << 4) | rg;} povratak van;}
hex_decode uzima niz header_hex, koji sadrži heksadecimalne ascii znakove, i popunjava hashbajte uint8_t [80] s njihovim odgovarajućim bajtnim vrijednostima spremnim za raspršivač SHA256.
void hash () {
hex_decode (header_hex, strlen (header_hex), hashbytes); dug potpis bez potpisa = mikro ((); hasher.doUpdate (hashbytes, sizeof (hashbytes)); bajt hash [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); bajt hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); bez potpisa dugotrajno = micros (); bez potpisa duga delta = završeno - početak; Serijski.println (delta); Serial.print ("Big Endian:"); for (byte 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 (bajt i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}
hash jednostavno dvaput raspršuje hashbajte (dvostruki SHA256), ispisuje potrebne sekunde upotrebe i ispisuje rezultirajući hash kao veliki endian i mali endian. Da su raspršivači ugniježđeni samo u jednom hasheru SHA256, to bi vjerojatno bilo malo brže, ali u svakom slučaju s gornjim kodom potrebno je 832 sekunde za izvođenje dvostrukog raspršivanja, a sa snimke zaslona možete vidjeti ispravni raspršivač.
Korak 2: Udar u zid i stvarno veliki blok
Dakle, ako je potrebno 832 sekunde korištenja za jedno raspršivanje, možemo izvesti 1 /0.000834 = 1201 raspršivanje /sek.
Da budemo jasni, uzeli smo podatke iz bloka #125552 gdje smo znali da nema, oni su već minirani i korišteni su ti podaci kao testni slučaj kako bismo bili sigurni da možemo dobiti isti raspršivač s ESP8266. Dakle, jednom kad dobitak dobijete s potpuno iscrtanim rudarom, slučajno ćete u jednom trenutku naslutiti, raspršiti zaglavlje bloka i usporediti rezultat s teškoćom tog bloka. Ako raspršivanje naiđe na poteškoće, tada se šalje na provjeru mreži.
U redu pa super je što možemo izvesti raspršivanje, naravno da je stopa užasna, ali kad se gleda kao lutrija, nagađanje je nagađanje. Evo, ali nakon pomnijeg pregleda uskoro postaje jasno da morate imati puni čvor da biste mogli komunicirati s mrežom, što je očito kad se zaustavite i razmislite o tome što je zapravo rudarstvo.
Dakle, ako pogledate dijagram, možete vidjeti da se bitcoin demon koji je dio jezgre bitcoina brine o komunikaciji između mreže i rudara. To doista znači da morate pokrenuti Bitcoin jezgru na poslužitelju kako bi ESP8266 mogao dobiti novi blokheader svakih 10 minuta, a zatim se moći vratiti na mrežu.
Nisam probao, ali izgleda da biste morali sinkronizirati cijeli blockchain na oko 130 koncerata prije nego što bi ispravno komunicirao s mrežom, na wikiju spominju da se određeni koraci moraju dovršiti prije nego što sve funkcije budu dostupne, tako da sam siguran to oni misle.
Tako da me to povuklo gore, sa istraživačkog stajališta sve je to bilo jako zanimljivo i bilo je jako cool vidjeti kako mali ESP8266 uspješno raspršuje testni slučaj, ali praktički govoreći ne vidim mnogo ljudi koji preuzimaju jezgru, sinkronizirajući cijelu blockchain, ažuriranje svega, praćenje sigurnosnih pitanja za šanse 1 u 1e16 za osvajanje bloka. Za mene je to daleki most.
Od početka sam znao da će stopa raspršivanja biti užasna, ali znatiželja me obuzela i morao sam to pokušati. Umjesto samostalnog rudarstva, vani bi mogao postojati rudarski bazen na koji se može spojiti izravno s ESP8266 bez velikih napora, ili bi mogla postojati druga prikladnija kriptovaluta. Ako nađete bilo koji, javite mi.
Korak 3: Reference
1. ESP8266 Bitcoin Miner GitHub spremište
2. ESP8266 Crypto GitHub spremište
3. Rukovanje bitcoina na teži način: algoritmi, protokoli i bajtovi
4. Algoritam blokiranja blokova
5. Blok 125552
Preporučeni:
DOBITE BITCOIN CIJENA UŽIVO TTGO ESP32: 10 koraka
DOBITE BITCOIN CIJENU UŽIVO TTGO ESP32: U ovom ćemo vodiču naučiti kako dobiti trenutnu cijenu bitcoina u USD i EUR -u pomoću TTGO ESP32 i Visuina. Pogledajte video. (Nova ažurirana datoteka za preuzimanje ispod!)
Bitcoin oznaka s grafikonom: 8 koraka
Bitcoin Ticker With Graph: Ovo sam napravio na temelju projekta za BTC oznaku cijena, koji dobiva podatke o cijeni sa stranice coinmarketcap.com koju je izvorno napisao Brian Lough. Koristio je ESP8266, ploču kompatibilnu s Arduinom koja dolazi s ugrađenim WiFi -jem. Kako opisuje
Kripto nalik na bitcoin koji radi na Raspberry Pi: 5 koraka
Bitcoin-sličan Crypto koji radi na Raspberry Pi: Upute za pokretanje čvora.Operacijski sustav US-OS napravljen je od raspbian-a koji pokreće paket us-cryptoplatform. Ne morate tražiti dopuštenje za pridruživanje. Samo slijedite ove jednostavne upute i pokrenuti čvor koji svake minute zarađuje kriptovalutu
Vizualizirajte svoj Bitcoin dobitak i gubitak s Arduinom i Pythonom: 6 koraka
Vizualizirajte svoje dobitke i gubitke u bitcoinima s Arduinom i Pythonom: osnovna idejaOsobno sam ulagač u kriptovalute. Ali imam i veliki posao koji moram obaviti. Tako da nisam u mogućnosti pratiti cijenu bitcoina 10 puta u minuti. Međutim, još uvijek želim znati zarađujem li ili gubim novac. Tako
Rekt-O-Matic Turbo S: Jednosmjerna oznaka za bitcoin: 12 koraka
Rekt-O-Matic Turbo S: Bitcoin Ticker na jednoj ploči: Jeste li propustili preko noći porast cijene Bitcoina sa 7500 USD na 10300 USD 25. listopada 2019.? Pa jesam. Ovakve stvari se događaju u kripto svijetu. Ono što vam treba ljudi je theRekt-O-Matic Turbo S Ovo je oznaka cijene bitcoina s lijepim OLED-om