Inhoudsopgave:
Video: ESP8266 Bitcoin-mijnwerker: 3 stappen
2024 Auteur: John Day | [email protected]. Laatst gewijzigd: 2024-01-30 11:19
Met de prijs van Bitcoin die blijft stijgen en met een paar ESP8266's die altijd zijn aangesloten maar niet echt veel doen, dacht ik waarom niet proberen een Solo Bitcoin Miner te implementeren. Na een beetje experimenteren kreeg ik de ESP8266 tot ~1200 hashes/sec en vanaf december 2017 voerde het Bitcoin-netwerk ongeveer 12.000.000 tera hashes per seconde uit (u kunt blockchaininfo raadplegen voor de laatste cijfers).
Dus op basis van die cijfers zouden we een kans van 1 op 1e16 hebben om elke tien minuten met succes een blok te minen, waar een blok momenteel $ 212.000 waard is. Natuurlijk lijkt het veel op het kopen van een lottokaartje, alleen met een veel veel kleinere kans om te winnen, maar je kent het oude gezegde, iemand moet het winnen. Met zowel de Gate Mate- als de Super Squirter ESP8266-projecten doen ze meestal geen werk, ze zijn gewoon aangesloten en wachten op verzoeken of invoer, dus waarom zou je ze er niet voor inzetten en misschien wat munten winnen. De eerste stap was om uit te zoeken of het zelfs mogelijk was om een dubbele SHA256 uit te voeren op de Blockheader op een ESP8266. In de Bitcoin-wereld is de 'hash' eigenlijk een dubbele SHA256, maar we noemen het gewoon de hash. Hoe dan ook, na een beetje googelen vond ik deze twee pagina's die alle informatie gaven die nodig was om hashing te krijgen.
1. Hashing-algoritme blokkeren
2. Bitcoin Mining op de harde manier: de algoritmen, protocollen en bytes
Het is vermeldenswaard dat het getwork-protocol, zoals beschreven in de bovenstaande links, is verouderd. Het is vervangen door het getblocktemplate-protocol, wat het een beetje ingewikkelder maakt om een block-header te bouwen, met name moet je je eigen merkle-root bouwen. Bekijk voor alle details de getblocktemplate-wiki.
Stap 1: Het algoritme
Laten we er meteen in springen, de ESP8266-code bevindt zich in de ESP8266BitcoinMiner GitHub-repo. Ik ga niet alle informatie uit de bovenstaande links herhalen, maar alleen de belangrijkste punten benadrukken.
char header_hex="0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc12274bc7fa"
char header_hex is de blokheader en is opgebouwd uit zes velden, Version, hashPrevBlock, hashMerkleRoot, Time, Bits en de Nonce, allemaal samengevoegd als kleine endian-waarden in hex-notatie. Dat is zojuist gekopieerd van de bovenstaande link, maar in een echte volwaardige mijnwerker zou je elk van die velden in een json-object ontvangen en dan de endianness moeten uitzoeken en elke 10 minuten on-the-fly samenstellen.
uint8_t* hex_decode(const char *in, size_t len, uint8_t *out){
niet ondertekend int i, mg, ng, rg; for (mg = 0, i = 0; i '9' ? in - 'a' + 10: in - '0'; rg = in[i+1] > '9' ? in[i+1] - 'a' + 10: in[i+1] - '0'; out[mg] = (ng << 4) | rg; } return out; }
hex_decode neemt de header_hex-tekenreeks, die hexadecimale ascii-tekens bevat, en vult de uint8_t hashbytes [80] met hun respectievelijke bytewaarden, klaar voor de SHA256-hasher.
ongeldige hash(){
hex_decode(header_hex, strlen(header_hex), hashbytes); niet-ondertekende lange start = 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); unsigned long-end = micros(); unsigned long delta = beëindigd - start; Serieel.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); } Serieel.println(); Serial.print("Little Endian: "); for (byte i=0; i <SHA256_SIZE; i++){ if (hash2<0x10) { Serial.print('0'); } Serial.print(hash2, HEX); } }
hash hasht de hashbytes eenvoudig twee keer (dubbele SHA256), drukt de benodigde useconden af en drukt de resulterende hash af als een big endian en een little endian. Als de hashes in slechts één SHA256-hasher waren genest, zou het waarschijnlijk een beetje sneller zijn, maar hoe dan ook, met de bovenstaande code duurt het 832 useconden om de dubbele hash uit te voeren en je kunt aan de screenshot zien dat we de juiste hash krijgen.
Stap 2: Een muur raken en een heel groot blok
Dus als het 832 useconden kost om één hash uit te voeren, kunnen we 1/0.000834 = 1201 hashes /sec uitvoeren.
Voor de duidelijkheid, we hebben de informatie uit blok #125552 genomen waar we de nonce kenden, het is al gedolven en gebruikten die informatie als een testcase om er zeker van te zijn dat we dezelfde hash konden krijgen met de ESP8266. Dus als je eenmaal winst hebt gemaakt met een volledig uitgewerkte mijnwerker, zou je willekeurig een gok nemen, de blockheader ermee hashen en dan het resultaat vergelijken met de moeilijkheidsgraad voor dat blok. Als de hash aan de moeilijkheid voldoet, wordt deze ter verificatie aan het netwerk voorgelegd.
Oké, dus dat is geweldig, we kunnen de hash uitvoeren, de koers is natuurlijk verschrikkelijk, maar als je het als een loterij bekijkt, is een gok een gok. Dit is de maar, bij nader inzien wordt het al snel duidelijk dat je een volledig knooppunt moet hebben om met het netwerk te kunnen communiceren, een beetje duidelijk als je stopt en nadenkt over wat mijnbouw eigenlijk is.
Dus als je naar het diagram kijkt, kun je zien dat de bitcoin-daemon die deel uitmaakt van de bitcoin-kern, zorgt voor de communicatie tussen het netwerk en de miner. Wat dit echt betekent, is dat je de Bitcoin-kern op een server moet draaien, zodat de ESP8266 elke 10 minuten een nieuwe blockheader kan krijgen en vervolgens weer naar het netwerk kan verzenden.
Ik heb het niet geprobeerd, maar het lijkt erop dat je de hele blockchain op ongeveer 130 Gigs zou moeten synchroniseren voordat het goed zou communiceren met het netwerk, in de wiki vermelden ze dat bepaalde stappen moeten worden voltooid voordat alle functionaliteit beschikbaar is, dus vrij zeker dat is wat ze bedoelen.
Dus dat trok me daarheen, vanuit onderzoeksoogpunt was het allemaal erg interessant en het was best gaaf om te zien hoe de kleine ESP8266 de testcase met succes hasht, maar praktisch gesproken zie ik niet veel mensen de kern downloaden en de hele blockchain, alles up-to-date houden, beveiligingsproblemen bijhouden, allemaal voor een kans van 1 op 1e16 om het blok te winnen. Een brug te ver voor mij.
Vanaf het begin wist ik dat de hash-snelheid verschrikkelijk zou zijn, maar nieuwsgierigheid kreeg de overhand en ik moest het proberen. In plaats van solo-mining is er misschien een mining-pool die direct vanaf de ESP8266 kan worden aangesloten zonder een enorme inspanning of er is misschien een andere cryptocurrency die meer geschikt is. Als je een van beide vindt, laat het me dan weten.
Stap 3: Referenties
1. ESP8266 Bitcoin Miner GitHub-repository
2. ESP8266 Crypto GitHub-repository
3. Bitcoin-mining op de harde manier: de algoritmen, protocollen en bytes
4. Hashing-algoritme blokkeren
5. Blok 125552
Aanbevolen:
Bitcoin-ticker met grafiek: 8 stappen
Bitcoin Ticker With Graph: ik heb dit gemaakt op basis van een project voor een BTC-prijsticker, die prijsinformatie verkrijgt van coinmarketcap.com, oorspronkelijk geschreven door Brian Lough. Hij gebruikte de ESP8266, een Arduino-compatibel bord met ingebouwde WiFi. Zoals hij beschrijft
Bitcoin-achtige crypto die draait op Raspberry Pi: 5 stappen
Bitcoin-achtige Crypto draait op Raspberry Pi: instructies voor het uitvoeren van een node. Het US-OS-besturingssysteem is gemaakt van raspbian met het us-cryptoplatform-pakket. U hoeft geen toestemming te vragen om deel te nemen. Volg gewoon deze eenvoudige instructies en voer elke minuut een knooppunt uit dat cryptocurrency verdient
Bitcoin-mining op uw Raspberry Pi: 6 stappen
Bitcoin-mining op uw Raspberry Pi: Bitcoin is een cryptocurrency, een vorm van elektronisch geld. Het is een gedecentraliseerde digitale valuta zonder centrale bank of enkele beheerder die via het bitcoin-netwerk van gebruiker naar gebruiker kan worden verzonden. Er zijn twee hoofdmethoden om bitcoin te verkrijgen
Eenvoudige Bitcoin-ticker: 6 stappen
Simple Bitcoin Ticker: Dit is een Simple Bitcoin of een andere ALT coin Ticker.Een enkele muntprijs weergeven op 8x 7 segment display.Display is groot, helder en eenvoudig te lezen.Prijscitaat van coinmarketcap.com gratis API wordt elke 5min bijgewerkt. Eenvoudig printen en bouwen.Code id bas
Bitcoin Tracker met behulp van een Raspberry Pi 14 stappen (met afbeeldingen)
Bitcoin-tracker met een Raspberry Pi: herinner je je Bitcoin?… de gedecentraliseerde, new age-valuta, die ooit werd verhandeld voor $ 19K en die een revolutie teweeg zou brengen in het wereldwijde betalingssysteem. Welnu, het blijkt dat er minder dan 3.585.825 Bitcoins over zijn om te minen. Ongeveer een jaar geleden heb ik