Isi kandungan:

ESP8266 Bitcoin Miner: 3 Langkah
ESP8266 Bitcoin Miner: 3 Langkah

Video: ESP8266 Bitcoin Miner: 3 Langkah

Video: ESP8266 Bitcoin Miner: 3 Langkah
Video: Сроки окупаемости Arduino в майнинге #mining 2024, November
Anonim
Penambang Bitcoin ESP8266
Penambang Bitcoin ESP8266

Dengan harga Bitcoin terus naik dan dengan beberapa ESP8266 selalu terpasang tetapi tidak melakukan banyak perkara, saya fikir mengapa tidak mencuba dan melaksanakan Solo Bitcoin Miner. Setelah sedikit bereksperimen, saya mendapat ESP8266 hingga ~ 1200 hash / saat dan pada bulan Disember 2017 rangkaian Bitcoin berprestasi sekitar 12, 000, 000 tera hash sesaat (anda boleh menyemak blockchaininfo untuk nombor terkini).

Oleh itu berdasarkan nombor tersebut, kita mempunyai peluang 1 dalam 1e16 untuk berjaya melombong satu blok setiap sepuluh minit di mana satu blok bernilai $ 212, 000 pada masa ini. Sudah tentu seperti membeli tiket lotto, hanya dengan peluang menang jauh lebih kecil, tetapi anda tahu pepatah lama, seseorang harus memenangkannya. Dengan kedua-dua projek Gate Mate dan Super Squirter ESP8266 mereka tidak melakukan apa-apa kerja, mereka hanya memasang dan menunggu permintaan atau input, jadi mengapa tidak meletakkannya dan mungkin memenangkan sejumlah wang. Langkah pertama adalah mencuba dan mengetahui sama ada kemungkinan melakukan SHA256 berganda di Blockheader pada ESP8266. Di dunia Bitcoin, 'hash' sebenarnya adalah SHA256 berganda, tetapi kita hanya akan menyebutnya sebagai hash. Bagaimanapun, setelah sedikit googling, saya menjumpai dua halaman ini yang memberikan semua maklumat yang diperlukan untuk mendapatkan hashing.

1. Algoritma Blok Hashing

2. Bitcoin Mining dengan cara yang sukar: algoritma, protokol dan bait

Perlu diperhatikan bahawa protokol kerja, seperti yang diperincikan dalam pautan di atas, sudah tidak digunakan lagi. Ia digantikan dengan protokol getblocktemplate yang menjadikannya lebih rumit untuk membina header blok, khususnya anda harus membina root merkle anda sendiri. Untuk semua yang baik, lihat wiki getblocktemplate.

Langkah 1: Algoritma

Algoritma
Algoritma

Mari kita masuk, kod ESP8266 ada di repo ESP8266BitcoinMiner GitHub. Saya tidak akan mengulang kaji semua maklumat dari pautan di atas melainkan hanya mengetengahkan perkara utama.

char header_hex = 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b4fb9bbbbbbbbbbbbbbbbbbffbff3f3f3f3f3fcfcfcfcbbbbbbbbbbbbbfcfcfcfcbcbbbbbbbbbbcfcfcbbbbbbbbbbbcbbbbbbbbbodfbfbabbbbbbbbbbbbbbbb پاران پارانbbb پاران پارانعزات کی شطبیات کی شطوں کے کے لئے کیٹ کے لئے

char header_hex adalah header blok dan dibina dari enam bidang, Versi, hashPrevBlock, hashMerkleRoot, Time, Bits dan the Nonce semua bergabung bersama sebagai nilai endian kecil dalam notasi hex. Itu hanya disalin dari pautan di atas tetapi dalam pelombong yang benar-benar lengkap, anda akan menerima setiap medan tersebut dalam objek json dan kemudian harus menyusun kekhususan dan menyatukannya setiap 10 minit.

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

int i, mg, ng, rg yang tidak ditandatangani; untuk (mg = 0, i = 0; i '9'? in - 'a' + 10: in - '0'; rg = in [i + 1]> '9'? in [i + 1] - 'a' + 10: dalam [i + 1] - '0'; keluar [mg] = (ng << 4) | rg;} kembali;}

hex_decode mengambil rentetan header_hex, yang mengandungi watak heksadesimal ascii, dan mengisi hashbytes uint8_t [80] dengan nilai bait masing-masing yang siap untuk hash SHA256.

batal hash () {

hex_decode (header_hex, strlen (header_hex), hashbytes); permulaan panjang yang tidak ditandatangani = mikro (); hasher.doUpdate (hashbytes, sizeof (hashbytes)); bait hash [SHA256_SIZE]; hasher.doFinal (hash); hashagain.doUpdate (hash, sizeof (hash)); bait hash2 [SHA256_SIZE]; hashagain.doFinal (hash2); lama tidak ditandatangani = mikro (); delta panjang yang tidak ditandatangani = berakhir - mula; Serial.println (delta); Serial.print ("Big Endian:"); untuk (byte i = 32; i> 0; i -) {if (hash2 [i-1] <0x10) {Serial.print ('0'); } Serial.print (hash2 [i-1], HEX); } Bersiri.println (); Serial.print ("Little Endian:"); untuk (byte i = 0; i <SHA256_SIZE; i ++) {if (hash2 <0x10) {Serial.print ('0'); } Serial.print (hash2 , HEX); }}

hash hanya mencuci hashbytes dua kali (double SHA256), mencetak detik-detik yang diperlukan dan mencetak hash yang dihasilkan sebagai endian besar dan endian kecil. Sekiranya hash bersarang hanya dalam satu hash SHA256, ia mungkin akan menjadi lebih cepat tetapi bagaimanapun dengan kod di atas memerlukan 832 saat untuk melakukan hash berganda dan anda dapat melihat dari tangkapan skrin kami mendapat hash yang betul.

Langkah 2: Memukul Tembok dan Blok Yang Sangat Besar

Memukul Tembok dan Blok Yang Sangat Besar
Memukul Tembok dan Blok Yang Sangat Besar

Oleh itu, jika memerlukan 832 saat untuk melakukan satu hash, kita boleh melakukan 1 / 0,000834 = 1201 hash / saat.

Untuk menjadi jelas, kami mengambil maklumat dari blok # 125552 di mana kami mengetahui yang sebenarnya, maklumat itu sudah dilombong dan menggunakan maklumat tersebut sebagai kes ujian untuk memastikan kami dapat memperoleh hash yang sama dengan ESP8266. Oleh itu, setelah mendapat keuntungan dengan pelombong yang lengkap, anda akan meneka secara acak di nonce, mencantumkan ketua blok dengan itu dan kemudian membandingkan hasilnya dengan kesukaran untuk blok itu. Sekiranya hash memenuhi kesukaran, ia kemudian dihantar ke rangkaian untuk pengesahan.

Ok, itu bagus kita boleh melakukan hash, pasti kadarnya mengerikan tetapi apabila melihatnya sebagai loteri, tekaan adalah tekaan. Inilah tetapi, setelah diperiksa dengan lebih dekat, anda perlu menjalankan simpul penuh untuk dapat berkomunikasi dengan rangkaian, jelas apabila anda berhenti dan memikirkan apa sebenarnya perlombongan.

Oleh itu, jika anda melihat rajah, anda dapat melihat bahawa daemon bitcoin yang merupakan sebahagian daripada teras bitcoin mengurus komunikasi antara rangkaian dan pelombong. Yang sebenarnya ini bermaksud anda perlu menjalankan inti Bitcoin pada pelayan supaya ESP8266 dapat memperoleh blockheader baru setiap 10 minit dan kemudian dapat menghantar kembali ke rangkaian.

Saya belum mencubanya tetapi nampaknya anda perlu menyegerakkan keseluruhan blockchain pada sekitar 130 Gigs sebelum berkomunikasi dengan rangkaian dengan betul, di wiki mereka menyebut langkah-langkah tertentu harus diselesaikan sebelum semua fungsi tersedia, jadi cukup yakin itulah maksudnya.

Jadi yang menarik saya ke sana, dari sudut penyelidikan semuanya sangat menarik dan sangat menarik untuk melihat ESP8266 kecil berjaya mencuba kes ujian tetapi secara praktiknya saya tidak melihat banyak orang memuat turun inti, menyelaraskan keseluruhan blockchain, memastikan segala-galanya terkini, mengikuti semua masalah keselamatan untuk peluang 1 dalam 1e16 memenangi blok tersebut. Jambatan yang jauh untuk saya.

Dari awal saya tahu kadar hash akan mengerikan tetapi rasa ingin tahu menjadi lebih baik daripada saya dan saya harus mencubanya. Daripada perlombongan solo, mungkin ada kolam penambangan di luar sana yang dapat dihubungkan terus dari ESP8266 tanpa usaha yang besar atau mungkin ada cryptocurrency lain yang lebih sesuai. Sekiranya ada, sila beritahu saya.

Langkah 3: Rujukan

1. Repositori ESP8266 Bitcoin Miner GitHub

2. ESP8266 Crypto GitHub Repositori

3. Bitcoin melombong dengan cara yang sukar: algoritma, protokol, dan bait

4. Algoritma Blok Hashing

5. Blok 125552

Disyorkan: