Daftar Isi:

ESP8266 Penambang Bitcoin: 3 Langkah
ESP8266 Penambang Bitcoin: 3 Langkah

Video: ESP8266 Penambang Bitcoin: 3 Langkah

Video: ESP8266 Penambang Bitcoin: 3 Langkah
Video: Bikin Penambang Koin Kripto Mini dengan NodeMCU ESP8266 2024, November
Anonim
ESP8266 Penambang Bitcoin
ESP8266 Penambang Bitcoin

Dengan harga Bitcoin yang terus naik dan dengan beberapa ESP8266 yang selalu terpasang tetapi tidak terlalu banyak, saya pikir mengapa tidak mencoba dan menerapkan Solo Bitcoin Miner. Setelah sedikit bereksperimen, saya mendapatkan ESP8266 hingga ~1200 hash/dtk dan pada Desember 2017 jaringan Bitcoin berkinerja sekitar 12.000, 000 tera hash per detik (Anda dapat memeriksa blockchaininfo untuk angka terbaru).

Jadi berdasarkan angka-angka itu, kita akan memiliki peluang 1 banding 116 untuk berhasil menambang satu blok setiap sepuluh menit di mana satu blok saat ini bernilai $ 212.000. Tentu ini sangat mirip dengan membeli tiket lotre, hanya dengan peluang menang yang jauh lebih kecil, tetapi Anda tahu pepatah lama, seseorang harus memenangkannya. Dengan proyek Gate Mate dan Super Squirter ESP8266 sebagian besar waktu mereka tidak melakukan pekerjaan apa pun, mereka hanya terhubung dan menunggu permintaan atau masukan, jadi mengapa tidak memasukkannya ke dalamnya dan mungkin memenangkan beberapa koin. Langkah pertama adalah mencoba dan mencari tahu apakah mungkin untuk melakukan SHA256 ganda pada Blockheader pada ESP8266. Di dunia Bitcoin, 'hash' sebenarnya adalah SHA256 ganda, tetapi kami hanya akan menyebutnya sebagai hash. Bagaimanapun setelah sedikit googling, saya menemukan dua halaman ini yang menyediakan semua info yang diperlukan untuk mendapatkan hashing.

1. Blok Algoritma Hashing

2. Penambangan Bitcoin dengan cara yang sulit: algoritme, protokol, dan byte

Perlu dicatat bahwa protokol getwork, seperti yang dijelaskan dalam tautan di atas, telah ditinggalkan. Itu telah diganti dengan protokol getblocktemplate yang membuatnya sedikit lebih rumit untuk membangun header blok, khususnya Anda harus membangun root merkle Anda sendiri. Untuk semua seluk beluk periksa wiki getblocktemplate.

Langkah 1: Algoritma

Algoritma
Algoritma

Langsung saja, kode ESP8266 ada di repo GitHub ESP8266BitcoinMiner. Saya tidak akan mengulangi semua informasi dari tautan di atas tetapi hanya menyoroti poin-poin utama.

char header_hex= 0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a30800000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f427fc51224b

char header_hex adalah header blok dan dibangun dari enam bidang, Version, hashPrevBlock, hashMerkleRoot, Time, Bits, dan Nonce semuanya digabungkan sebagai nilai endian kecil dalam notasi hex. Itu baru saja disalin dari tautan di atas tetapi dalam penambang yang benar-benar matang, Anda akan menerima masing-masing bidang itu dalam objek json dan kemudian harus memilah-milah endianness dan menyatukannya dengan cepat setiap 10 menit.

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

unsigned 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; } kembali; }

hex_decode mengambil string header_hex, yang berisi karakter ascii heksadesimal, dan mengisi hashbytes uint8_t[80] dengan nilai byte masing-masing yang siap untuk hasher SHA256.

batalkan hash(){

hex_decode(header_hex, strlen(header_hex), hashbytes); unsigned long 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 panjang berakhir = mikro(); delta panjang yang tidak ditandatangani = berakhir - mulai; Serial.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 (byte i=0; i < SHA256_SIZE; i++){ if (hash2<0x10) { Serial.print('0'); } Serial.print(hash2, HEX); } }

hash hanya melakukan hash pada hashbytes dua kali (double SHA256), mencetak udetik yang diperlukan dan mencetak hash yang dihasilkan sebagai big endian dan little endian. Jika hash disarangkan hanya dalam satu hash SHA256, itu mungkin akan sedikit lebih cepat tetapi bagaimanapun dengan kode di atas dibutuhkan 832 udetik untuk melakukan hash ganda dan Anda dapat melihat dari tangkapan layar kami mendapatkan hash yang benar.

Langkah 2: Menabrak Tembok dan Balok yang Sangat Besar

Menabrak Tembok dan Balok yang Sangat Besar
Menabrak Tembok dan Balok yang Sangat Besar

Jadi jika dibutuhkan 832 udetik untuk melakukan satu hash, kita dapat melakukan 1/0,000834 = 1201 hash /detik.

Untuk memperjelas, kami mengambil informasi dari blok #125552 tempat kami mengetahui nonce, itu sudah ditambang dan menggunakan informasi itu sebagai kasus uji untuk memastikan kami bisa mendapatkan hash yang sama dengan ESP8266. Jadi begitu mendapatkan keuntungan dengan penambang yang sepenuhnya sempurna, Anda akan secara acak menebak nonce, hash blockheader dengannya dan kemudian membandingkan hasilnya dengan kesulitan untuk blok itu. Jika hash memenuhi kesulitan, kemudian dikirimkan ke jaringan untuk verifikasi.

Ok jadi itu bagus kita bisa melakukan hash, tentu saja ratenya buruk tapi ketika melihatnya sebagai lotere, tebakan adalah tebakan. Inilah tapi, setelah pemeriksaan lebih dekat segera menjadi jelas Anda harus menjalankan node penuh untuk dapat berkomunikasi dengan jaringan, agak jelas ketika Anda berhenti dan berpikir tentang apa sebenarnya pertambangan.

Jadi jika Anda melihat diagram, Anda dapat melihat bahwa daemon bitcoin yang merupakan bagian dari inti bitcoin menangani komunikasi antara jaringan dan penambang. Apa artinya ini sebenarnya adalah Anda harus menjalankan inti Bitcoin di server sehingga ESP8266 bisa mendapatkan blockheader baru setiap 10 menit dan kemudian dapat mengirimkan kembali ke jaringan.

Saya belum mencobanya tetapi sepertinya Anda harus menyinkronkan seluruh blockchain di sekitar 130 Gigs sebelum berkomunikasi dengan jaringan dengan benar, di wiki mereka menyebutkan langkah-langkah tertentu harus diselesaikan sebelum semua fungsionalitas tersedia, jadi cukup yakin itu yang mereka maksud.

Jadi itu menarik saya ke sana, dari sudut pandang penelitian, semuanya sangat menarik dan cukup keren untuk melihat ESP8266 kecil berhasil melakukan hash pada kasus uji tetapi secara praktis saya tidak melihat banyak orang mengunduh inti, menyinkronkan keseluruhan blockchain, menjaga semuanya tetap mutakhir, mengikuti masalah keamanan semua untuk peluang 1 banding 116 untuk memenangkan blok. Sebuah jembatan yang jauh bagi saya.

Sejak awal saya tahu tingkat hash akan mengerikan tetapi rasa ingin tahu menguasai saya dan saya harus mencobanya. Daripada menambang solo, mungkin ada kumpulan penambangan di luar sana yang dapat terhubung langsung dari ESP8266 tanpa upaya yang besar atau mungkin ada mata uang kripto lain yang lebih cocok. Jika Anda menemukan keduanya, beri tahu saya.

Langkah 3: Referensi

1. Repositori GitHub Penambang Bitcoin ESP8266

2. Repositori Crypto GitHub ESP8266

3. Menambang Bitcoin dengan cara yang sulit: algoritme, protokol, dan byte

4. Blok Algoritma Hashing

5. Blok 125552

Direkomendasikan: