İçindekiler:

ESP8266 Bitcoin Madenci: 3 Adım
ESP8266 Bitcoin Madenci: 3 Adım

Video: ESP8266 Bitcoin Madenci: 3 Adım

Video: ESP8266 Bitcoin Madenci: 3 Adım
Video: ARDUİNO ESP8266 ile SANAL MADENCİLİK NASIL YAPILIR NASIL .( Duino-coin mining with ESP8266) 2024, Kasım
Anonim
ESP8266 Bitcoin Madenci
ESP8266 Bitcoin Madenci

Bitcoin fiyatının tırmanmaya devam etmesi ve birkaç ESP8266'nın her zaman takılı olması, ancak pek bir şey yapmaması ile neden bir Solo Bitcoin Madencisini denemeye ve uygulamayayım diye düşündüm. Biraz denemeden sonra ESP8266'yı ~1200 hash/sn'ye çıkardım ve Aralık 2017 itibariyle Bitcoin ağı saniyede 12.000.000 tera hash gerçekleştiriyordu (en son sayılar için blockchaininfo'yu kontrol edebilirsiniz).

Dolayısıyla, bu sayılara dayanarak, bir bloğun şu anda 212, 000$ değerinde olduğu bir blokta her on dakikada bir başarılı bir şekilde madencilik yapma şansımız 1e16'da 1 olur. Elbette bu, loto bileti satın almaya çok benzer, ancak kazanma şansı çok daha düşüktür., ama eski deyişi biliyorsun, biri onu kazanmalı. Hem Gate Mate hem de Super Squirter ESP8266 projeleri ile çoğu zaman herhangi bir iş yapmıyorlar, sadece fişe takılılar ve istekler veya girdiler bekliyorlar, öyleyse neden onları bir araya getirip belki biraz para kazanmıyorsunuz. İlk adım, bir ESP8266'da Blockheader'da çift SHA256 gerçekleştirmenin mümkün olup olmadığını denemek ve bulmaktı. Bitcoin dünyasında 'karma' aslında bir çift SHA256'dır, ancak biz buna sadece karma olarak değineceğiz. Her neyse, biraz dolaştıktan sonra, hash almak için gereken tüm bilgileri sağlayan bu iki sayfayı buldum.

1. Blok Hashing Algoritması

2. Bitcoin Madenciliği zor yol: algoritmalar, protokoller ve baytlar

Yukarıdaki bağlantılarda ayrıntılı olarak açıklandığı gibi getwork protokolünün kullanımdan kaldırıldığını belirtmekte fayda var. Bir blok başlığı oluşturmayı biraz daha karmaşık hale getiren getblocktemplate protokolü ile değiştirildi, özellikle kendi merkle kökünüzü oluşturmanız gerekiyor. Tüm önemli ayrıntılar için getblocktemplate wiki'sine göz atın.

Adım 1: Algoritma

Algoritma
Algoritma

Hemen atlayalım, ESP8266 kodu ESP8266BitcoinMiner GitHub deposunda. Yukarıdaki bağlantılardaki tüm bilgileri yeniden yazmayacağım, bunun yerine sadece ana noktaları vurgulayacağım.

char header_hex="0100000081cd02ab7e569e8bcd9317e2fe99f2de44d49ab2b8851ba4a308000000000000e320b6c2fffc8d750423db8b1eb942ae710e951ed797f7affc8892b0f1fc9441a"951ed797f7affc8892b0f1fc9441b;

char header_hex blok başlığıdır ve altı alandan oluşturulmuştur; Version, hashPrevBlock, hashMerkleRoot, Time, Bits ve Nonce, hepsi onaltılık gösterimde küçük endian değerleri olarak birleştirilmiştir. Bu sadece yukarıdaki bağlantıdan kopyalandı, ancak gerçek bir tam teşekküllü madencide, bu alanların her birini bir json nesnesinde alırsınız ve daha sonra endianlığı sıralamanız ve her 10 dakikada bir anında bir araya getirmeniz gerekir.

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

imzasız int i, mg, ng, rg; for (mg = 0, i = 0; ben '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; } çıkış; }

hex_decode, onaltılık ascii karakterlerini içeren header_hex dizesini alır ve uint8_t hashbytes[80]'i, SHA256 hasher için hazır olan ilgili bayt değerleriyle doldurur.

void karma(){

hex_decode(header_hex, strlen(header_hex), hashbytes); imzasız uzun başlangıç = micros(); hasher.doUpdate(hashbytes, sizeof(hashbytes)); bayt karma[SHA256_SIZE]; hasher.doFinal(hash); hashagain.doUpdate(hash, sizeof(hash)); bayt karma2[SHA256_SIZE]; hashagain.doFinal(hash2); imzasız uzun uçlu = micros(); imzasız uzun delta = sona erdi - başlangıç; Seri.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("Küçük Endian: "); for (byte i=0; i < SHA256_SIZE; i++){ if (hash2<0x10) { Serial.print('0'); } Serial.print(hash2, HEX); } }

hash, hashbyte'ları iki kez hash eder (double SHA256), aldığı usaniyeleri yazdırır ve elde edilen hash'i büyük endian ve küçük endian olarak yazdırır. Hash'ler yalnızca bir SHA256 hash'inde yuvalanmış olsaydı, muhtemelen biraz daha hızlı olurdu ama yine de yukarıdaki kodla, double hash'i gerçekleştirmek 832 usaniye sürer ve ekran görüntüsünden doğru hash'i aldığımızı görebilirsiniz.

Adım 2: Bir Duvara Vurmak ve Gerçekten Büyük Bir Blok

Bir Duvara Vurmak ve Gerçekten Büyük Bir Blok
Bir Duvara Vurmak ve Gerçekten Büyük Bir Blok

Yani bir hash yapmak 832 usaniye alıyorsa 1/0.000834 = 1201 hash /sn gerçekleştirebiliriz.

Açık olmak gerekirse, bilgiyi nonce'yi bildiğimiz blok #125552'den aldık, zaten mayınlı ve bu bilgiyi ESP8266 ile aynı hash'i elde edebileceğimizden emin olmak için bir test senaryosu olarak kullandık. Bu yüzden, tam anlamıyla bir madenci ile bir kez bir kazanç elde ettiğinizde, rastgele bir tahminde bulunmazsınız, blok başlığını onunla hash eder ve ardından sonucu o blok için zorlukla karşılaştırırsınız. Karma zorluğu karşılarsa, doğrulama için ağa gönderilir.

Tamam, bu harika, hash işlemini gerçekleştirebiliriz, oranın korkunç olduğundan emin olun, ancak bir piyango olarak bakıldığında bir tahmin bir tahmindir. İşte ama, daha yakından incelendiğinde, ağ ile iletişim kurabilmek için tam bir düğüm çalıştırmanız gerektiği çok geçmeden ortaya çıkıyor, durup madenciliğin gerçekte ne olduğunu düşündüğünüzde biraz açık.

Yani şemaya bakarsanız, bitcoin çekirdeğinin bir parçası olan bitcoin arka plan programının ağ ve madenci arasındaki iletişimi sağladığını görebilirsiniz. Bunun gerçekten anlamı, ESP8266'nın her 10 dakikada bir yeni blok başlığı alabilmesi ve ardından ağa geri gönderebilmesi için Bitcoin çekirdeğini bir sunucuda çalıştırmanız gerektiğidir.

Denemedim ama ağ ile düzgün bir şekilde iletişim kurmadan önce tüm blok zincirini yaklaşık 130 Gig'de senkronize etmeniz gerekecek gibi görünüyor, wiki'de tüm işlevsellik kullanılabilir olmadan önce belirli adımların tamamlanması gerektiğinden bahsediyorlar, bu yüzden oldukça emin demek istedikleri bu.

Bu beni oraya çekti, bir araştırma bakış açısından hepsi çok ilginçti ve küçük ESP8266'nın test durumunu başarılı bir şekilde özetlediğini görmek oldukça güzeldi ama pratik olarak konuşursak, çekirdeği indiren, tümünü senkronize eden pek çok insan görmüyorum. blok zinciri, her şeyi güncel tutmak, güvenlik sorunlarına ayak uydurmak, blok kazanma şansı 1e16'da 1'dir. Bana uzak bir köprü.

En başından beri hash oranının korkunç olacağını biliyordum ama merak beni yendi ve denemek zorunda kaldım. Solo madencilik yerine, muazzam bir çaba sarf etmeden doğrudan ESP8266'dan bağlanabilen bir madencilik havuzu olabilir veya daha uygun başka bir kripto para birimi olabilir. İkisinden birini bulursanız lütfen bana bildirin.

3. Adım: Referanslar

1. ESP8266 Bitcoin Madenci GitHub Deposu

2. ESP8266 Kripto GitHub Deposu

3. Zor yoldan Bitcoin madenciliği: algoritmalar, protokoller ve baytlar

4. Blok Hashing Algoritmasını

5. Blok 125552

Önerilen: