Mündəricat:

ESP8266 Bitcoin Miner: 3 addım
ESP8266 Bitcoin Miner: 3 addım

Video: ESP8266 Bitcoin Miner: 3 addım

Video: ESP8266 Bitcoin Miner: 3 addım
Video: Arduino Bitcoin Miner 2024, Noyabr
Anonim
ESP8266 Bitcoin Miner
ESP8266 Bitcoin Miner

Bitcoin -in qiyməti qalxmağa davam edərkən və bir neçə ESP8266 həmişə qoşulduqda, amma çox şey etmədikdə, niyə Solo Bitcoin Miner -i sınamaq və tətbiq etməməyi düşündüm. Bir az sınaqdan sonra ESP8266 -nı ~ 1200 həş/saniyəyə çatdırdım və 2017 -ci ilin dekabr ayından etibarən Bitcoin şəbəkəsi saniyədə təxminən 12 000 000 tera hashes yerinə yetirirdi (son nömrələr üçün blockchaininfo -nu yoxlaya bilərsiniz).

Bu rəqəmlərə əsaslanaraq, hər on dəqiqədə bir blokun 212 min dollar dəyərində olduğu bir bloku uğurla çıxarmaq şansımız 1 -dən 16 -ya qədər olardı. Əlbəttə ki, lotereya biletini almaq kimi bir şey var, ancaq qazanmaq şansınız çox azdır. amma köhnə deyimi bilirsən, kimsə qazanmalıdır. Həm Gate Mate, həm də Super Squirter ESP8266 layihələrində çox vaxt heç bir iş görmürlər, sadəcə qoşularaq istəkləri və ya girişləri gözləyirlər, buna görə niyə bunları qoymursunuz və bəlkə də bəzi pul qazanacaqsınız. İlk addım, ESP8266 -da Blockheader -də ikiqat SHA256 yerinə yetirməyin mümkün olub olmadığını sınamaq idi. Bitcoin dünyasında 'hash' əslində ikiqat SHA256 -dır, ancaq buna hash olaraq istinad edəcəyik. Hər halda bir az googling etdikdən sonra hashing əldə etmək üçün lazım olan bütün məlumatları verən bu iki səhifəni tapdım.

1. Blok Hashing Alqoritmi

2. Bitcoin Mining çətin şəkildə: alqoritmlər, protokollar və baytlar

Qeyd etmək lazımdır ki, yuxarıda göstərilən bağlantılarda ətraflı göstərildiyi kimi iş protokolu köhnəlmişdir. Getblocktemplate protokolu ilə əvəz olundu, bu da blok başlığı qurmağı bir az daha mürəkkəbləşdirir, xüsusən öz merkle kökünüzü qurmalısınız. Bütün cılızlar üçün getblocktemplate wiki -yə baxın.

Addım 1: Alqoritm

Alqoritm
Alqoritm

Gəlin dərhal atlayaq, ESP8266 kodu ESP8266BitcoinMiner GitHub deposundadır. Yuxarıdakı bağlantılardan bütün məlumatları yenidən təkrarlamayacağam, əksinə yalnız əsas məqamları vurğulayacağam.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a3080000000000e320b6c2fffc8d750423db8b1eb942a772977f8f7f7f4f4f4f4f4f4f4f4f9f9f9f9f9

char header_hex, blok başlığıdır və altı sahədən ibarətdir: Versiya, hashPrevBlock, hashMerkleRoot, Time, Bits və Nonce. Bu yalnız yuxarıdakı linkdən kopyalandı, amma əslində tam hüquqlu bir mədənçidə bu sahələrin hər birini bir json obyektində alacaqsınız, sonra da mövcudluğu həll edib hər 10 dəqiqədə bir yerə yığmalısınız.

uint8_t *hex_dekodu (const char *in, size_t len, uint8_t *out) {

işarəsiz 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: [i+1] - '0' da; çıxdı [mg] = (ng << 4) | rg;} geri dön;}

hex_decode, hexadecimal ascii simvollarını ehtiva edən header_hex simini alır və SHA256 hasher üçün hazır olan müvafiq bayt dəyərləri ilə uint8_t hashbytes [80] doldurur.

boş hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); işarəsiz uzun başlanğıc = micros (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); bayt hash [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); bayt hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); işarəsiz uzun sonlu = micros (); imzasız uzun delta = bitdi - başla; Serial.println (delta); Serial.print ("Big Endian:"); for (bayt i = 32; i> 0; i-) {if (hash2 [i-1] <0x10) {Serial.print ('0'); } Serial.print (hash2 [i-1], HEX); } Serial.println (); Serial.print ("Balaca Endian:"); for (bayt i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash sadəcə hashbytes -i iki dəfə karıştırır (ikiqat SHA256), aldığı saniyələri çap edir və nəticədə yaranan hash -ı böyük endian və kiçik endian kimi çap edir. Qarışıqlar yalnız bir SHA256 haser -də yuvalansaydı, yəqin ki, bir az daha sürətli olardı, amma hər halda yuxarıdakı kodla ikiqat hash -ı yerinə yetirmək üçün 832 saniyə çəkilir və ekran görüntüsündən gördüyünüz kimi, doğru hash -ı alırıq.

Addım 2: Bir divara və həqiqətən də böyük bir bloka vurun

Bir divara və həqiqətən də böyük bir blok vurmaq
Bir divara və həqiqətən də böyük bir blok vurmaq

Beləliklə, bir hash etmək 832 saniyə çəkərsə, 1 /0.000834 = 1201 hash /sn edə bilərik.

Məlumatı, nonce -ni bildiyimiz 125552 nömrəli blokdan götürdüyümüz üçün, artıq hasil edilmiş və ESP8266 ilə eyni hash əldə edə biləcəyimizə əmin olmaq üçün bu məlumatı sınaq işi olaraq istifadə etmişik. Beləliklə, bir dəfə qazılmış bir madenci qazandıqda, təsadüfi olaraq nonce -də bir tahmin götürər, blokbaşını çarmıxa çəkər və nəticəni həmin blokun çətinliyi ilə müqayisə edərdiniz. Həş çətinliyə cavab verərsə, yoxlama üçün şəbəkəyə göndərilir.

Yaxşı ki, hash -ı həyata keçirə biləcəyimiz çox yaxşıdır, əmsalın dəhşətli olduğuna əminəm, amma lotereya olaraq baxdığımızda bir təxmin bir tahmindir. Budur, amma yaxından araşdırıldıqda, şəbəkə ilə ünsiyyət qurmaq üçün tam bir qovşaq işlətməyiniz lazım olduğu aydın olur.

Beləliklə, diaqrama baxsanız, bitcoin nüvəsinin bir hissəsi olan bitcoin daemonunun şəbəkə ilə madenci arasındakı əlaqəyə diqqət yetirdiyini görə bilərsiniz. Bunun əslində nə demək olduğunu bilmək lazımdır ki, ESP8266 -nın hər 10 dəqiqədə yeni bir blok başı əldə etməsi və sonra yenidən şəbəkəyə təqdim edə bilməsi üçün Bitcoin nüvəsini bir serverdə işləməlisiniz.

Mən sınamamışam, amma görünür ki, şəbəkə ilə düzgün ünsiyyət qurmadan əvvəl bütün blockchaini təxminən 130 konsertdə sinxronizasiya etməlisən, vikidə bütün funksiyaların mövcud olmasından əvvəl müəyyən addımların tamamlanması lazım olduğunu qeyd edirlər. nəzərdə tutduqları budur.

Məni ora çəkdi, bir araşdırma nöqteyi -nəzərindən hər şey çox maraqlı idi və kiçik ESP8266 -nın test qutusunu uğurla sındırdığını görmək çox xoş idi, amma praktik olaraq demək olar ki, hamısını sinxronlaşdıraraq nüvəni yükləyən çox adam görmürəm. blokçeyn, hər şeyi güncəl tutmaq, təhlükəsizlik məsələləri ilə ayaqlaşmaq, hamısını 1dən 16 -a qədər blok qazanma şansı üçün. Mənim üçün uzaqlara bir körpü.

Getdikcə hash nisbətinin dəhşətli olacağını bilirdim, amma maraq məndən daha yaxşı oldu və mən də getməliydim. Solo mədənçiliyin əvəzinə, monumental səy göstərmədən birbaşa ESP8266 -dan bağlana biləcək bir mədən hovuzu ola bilər və ya daha uyğun başqa bir kriptovalyuta ola bilər. Əgər tapsanız, mənə bildirin.

Addım 3: İstinadlar

1. ESP8266 Bitcoin Miner GitHub Deposu

2. ESP8266 Kripto GitHub Deposu

3. Bitcoin madenciliyi çətin şəkildə: alqoritmlər, protokollar və baytlar

4. Blok Hashing Alqoritmi

5. Blok 125552

Tövsiyə: