Innehållsförteckning:
Video: ESP8266 Bitcoin Miner: 3 steg
2024 Författare: John Day | [email protected]. Senast ändrad: 2024-01-30 12:46
Med priset på Bitcoin fortsätter att klättra och med ett par ESP8266 alltid anslutna men inte riktigt gör mycket tänkte jag varför inte försöka implementera en Solo Bitcoin Miner. Efter lite experimenterande fick jag ESP8266 upp till ~ 1200 hashar/sek och i december 2017 utförde Bitcoin -nätverket cirka 12 000 000 tera -hashar per sekund (du kan kolla blockchaininfo för de senaste siffrorna).
Så baserat på dessa siffror skulle vi ha en 1 i 1e16 chans att lyckas bryta ett block var tionde minut där ett block för närvarande är värt $ 212 000. Visst är det ungefär som att köpa en lotto, bara med en mycket mycket mindre chans att vinna, men du vet det gamla ordspråket, någon måste vinna det. Med både Gate Mate och Super Squirter ESP8266 -projekt brukar de inte göra något arbete, de är bara inkopplade och väntar på förfrågningar eller ingångar, så varför inte lägga dem till det och kanske vinna lite mynt. Det första steget var att försöka ta reda på om det ens var möjligt att utföra en dubbel SHA256 på Blockheader på en ESP8266. I Bitcoin -världen är "hash" faktiskt en dubbel SHA256, men vi kommer bara att referera till det som hash. Hur som helst efter lite googling hittade jag dessa två sidor som gav all information som behövs för att få hash.
1. Blockera hash -algoritm
2. Bitcoin Mining den hårda vägen: algoritmerna, protokollen och byte
Det är värt att notera att getwork -protokollet, som beskrivs i ovanstående länkar, har utfasats. Det har ersatts med getblocktemplate -protokollet som gör det lite mer komplicerat att bygga ett blockhuvud, specifikt måste du bygga din egen merkle -root. För alla nitty gritty kolla in getblocktemplate wiki.
Steg 1: Algoritmen
Låt oss hoppa direkt in, ESP8266 -koden finns på ESP8266BitcoinMiner GitHub -repo. Jag tänker inte repetera all information från ovanstående länkar utan snarare bara markera huvudpunkterna.
char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0fbfc892b0cbfcfbfbfcfbfcfbfcfbfcfbfbfcfdfbfbfbfbfcfdfbfbfcfdcfdcfdcfdcfdcfdcfdfbfcfcfdcfdcfcfdcfcfcfdcf.
char header_hex är blockhuvudet och är byggt från sex fält, Version, hashPrevBlock, hashMerkleRoot, Time, Bits och Nonce alla sammanfogade tillsammans som små endianvärden i hexnotering. Det kopierades precis från länken ovan, men i en verklig fullfjädrad gruvarbetare skulle du få var och en av dessa fält i ett json -objekt och sedan behöva reda ut slutligheten och sätta ihop den i farten var 10: e minut.
uint8_t *hex_decode (const char *in, size_t len, uint8_t *out) {
osignerad int i, mg, ng, rg; för (mg = 0, i = 0; i '9'? i - 'a' + 10: i - '0'; rg = i [i + 1]> '9'? i [i+1] - 'a'+10: in [i+1] - '0'; ut [mg] = (ng << 4) | rg;} gå ut;}
hex_decode tar header_hex -strängen, som innehåller hexadecimala ascii -tecken, och fyller i uint8_t hashbytes [80] med sina respektive bytevärden redo för SHA256 -hasharen.
ogiltig hash () {
hex_decode (header_hex, strlen (header_hex), hashbytes); osignerad långstart = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); byte hash [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); byte hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); osignerad lång slut = micros (); osignerat långt delta = slutat - start; Serial.println (delta); Serial.print ("Big Endian:"); för (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:"); för (byte i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}
hash hashar helt enkelt hashbytes två gånger (dubbel SHA256), skriver ut de sekunder det tog och skriver ut den resulterande hashen som en stor endian och liten endian. Om hasharna var kapslade i endast en SHA256 -hasher skulle det förmodligen vara lite snabbare men i alla fall med ovanstående kod tar det 832 sekunder att utföra dubbel hash och du kan se från skärmdumpen att vi får rätt hash.
Steg 2: Slå en vägg och ett riktigt stort block
Så om det tar 832 usekunder att göra en hash kan vi utföra 1 /0,000834 = 1201 hash /sek.
För att vara tydlig tog vi informationen från block #125552 där vi kände till nonce, den har redan bryts och använde den informationen som ett testfall för att se till att vi kunde få samma hash med ESP8266. Så en gång en vinst med en fullt utarbetad gruvarbetare skulle du slumpmässigt gissa på nonce, hash blockhead med den och sedan jämföra resultatet med svårigheten för det blocket. Om haschen möter svårigheten skickas den sedan till nätverket för verifiering.
Ok så det är bra att vi kan utföra haschen, visst är takten hemsk, men när man ser det som ett lotteri är en gissning en gissning. Här är det, men vid närmare granskning blir det snart klart att du måste köra en fullständig nod för att kunna kommunicera med nätverket, typ uppenbart när du stannar upp och tänker på vad gruvdrift egentligen är.
Så om du tittar på diagrammet kan du se att bitcoin -demonen som är en del av bitcoin -kärnan tar hand om kommunikationen mellan nätverket och gruvarbetaren. Vad detta verkligen betyder är att du måste köra Bitcoin -kärnan på en server så att ESP8266 kan få ett nytt blockhead varje 10 minuter och sedan kunna skicka tillbaka till nätverket.
Jag har inte provat det men det ser ut som om du skulle behöva synkronisera hela blockchain på cirka 130 spelningar innan det skulle kommunicera korrekt med nätverket, i wiki nämner de att vissa steg måste slutföras innan all funktionalitet är tillgänglig, så ganska säker det är vad de menar.
Så det drog mig upp dit, ur en forskningssynpunkt var det hela väldigt intressant och det var ganska häftigt att se den lilla ESP8266 framgångsrikt hasha testfallet men praktiskt taget ser jag inte att många laddar ner kärnan och synkroniserar hela blockchain, hålla allt uppdaterat, hålla koll på säkerhetsfrågor allt för en 1 i 1e16 chans att vinna blocket. En bro för långt för mig.
Från början så visste jag att hashhastigheten skulle vara fruktansvärd men nyfikenheten fick över mig och jag var tvungen att prova. I stället för solo mining kan det finnas en gruvpool där ute som kan anslutas direkt från ESP8266 utan en monumental ansträngning eller så kan det finnas en annan kryptovaluta som är mer lämplig. Hör av dig om du hittar något.
Steg 3: Referenser
1. ESP8266 Bitcoin Miner GitHub -förvar
2. ESP8266 Crypto GitHub -förvar
3. Bitcoin bryter det hårda sättet: algoritmerna, protokollen och byte
4. Blockera hash -algoritm
5. Block 125552
Rekommenderad:
FÅ BITCOIN LIVE PRIS TTGO ESP32: 10 steg
FÅ BITCOIN LIVE PRIS TTGO ESP32: I denna handledning lär vi oss hur man får ett aktuellt Bitcoin -pris i USD och EUR med hjälp av en TTGO ESP32 och Visuino. Se videon. (Ny uppdaterad fil för nedladdning nedan!)
Bitcoin -kort med graf: 8 steg
Bitcoin Ticker With Graph: Jag gjorde detta baserat på ett projekt för en BTC -pristicker, som hämtar prisinformation från coinmarketcap.com ursprungligen skrivet av Brian Lough. Han använde ESP8266, som är ett Arduino -kompatibelt kort som levereras med inbyggd WiFi. Som han beskriver
Bitcoin-liknande krypto som körs på Raspberry Pi: 5 steg
Bitcoin-liknande Crypto Running på Raspberry Pi: Instruktioner för att köra en nod. OS-OS-operativsystemet är tillverkat av raspbian som kör paketet us-cryptoplatform. Du behöver inte be om tillstånd för att gå med. Följ bara dessa enkla instruktioner och köra en nod som tjänar kryptovaluta varje minut
Visualisera din Bitcoin -vinst och förlust med Arduino & Python: 6 steg
Visualisera din Bitcoin -vinst och förlust med Arduino & Python: Grundidé Personligen är jag en kryptovalutainvesterare. Men jag har också en stor belastning på jobbet. Så jag kan inte fortsätta spåra bitcoinpriset tio gånger i minuten. Men jag vill fortfarande veta om jag tjänar eller förlorar pengar. Således,
Rekt-O-Matic Turbo S: Single Board Bitcoin Ticker: 12 steg
Rekt-O-Matic Turbo S: Single Board Bitcoin Ticker: Missade du den stigande Bitcoin-priset över natten från $ 7500 till $ 10300 den 25 oktober 2019? Jag gjorde det. Den här typen av saker händer i kryptovärlden. Vad du behöver folk ärRekt-O-Matic Turbo S Detta är en Bitcoin pristicker med en fin OLED