Stratum protokolü şu anda madenciler ile madencilik havuzları arasında en yaygın kullanılan TCP iletişim protokolüdür. Madenciliğin ağ mimarisini kısaca açıklayalım.
1. Madenciliğin ağ mimarisi
Bitcoin, Bitcoin daemonlarıyla düğümler kurarak yeni işlemleri ve blokları ileten merkeziyetsiz bir ağ mimaridir. Madencilik makineleri ve madencilik havuzları ayrıca başka bir ağ oluşturur ve buna madenci ağı diyoruz.
Madenci ağı, madencilik makineleri, madencilik havuzları, cüzdanlar gibi birkaç ana bölüme ayrılmıştır ve bazen madencilik havuzu yazılımı cüzdanla birlikte kurulur ve bu topluca madencilik havuzu olarak adlandırılabilir.
Madencilik makinesi ile madencilik havuzu yazılımı arasındaki iletişim protokolü stratumdur, madencilik havuzu yazılımı ile cüzdan arasındaki iletişim ise bitcoinrpc arayüzüdür.
stratum JSON veri formatıdır ve özel protokol şu şekildedir:
2. Stratum anlaşması
1. Görev aboneliği
Madencilik makinesi başladığında, önce mining.subscribe yöntemiyle madencilik havuzuna bağlanarak çalışmaya abone olur.
Havuz, mining.notify'da abonelik numarası olan ExtraNonce1 ve ExtraNonce2_size'yi geri getirir.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Bunlar arasında:
ae6812eb4cd7735a302a8a9dd95cf71f abonelik numarasıdır;
08000002, coibase işlemleri oluşturmak için kullanılan ExtraNonce1'dir;
ExtraNonce2_size, madenci ExtraNonce2 sayacının bayt sayısı olan 4'tür.
2. Görev dağılımı
Bu komut, madencilik havuzu tarafından periyodik olarak madenciye gönderilir ve madencilik makinesi mining.subscribe yöntemiyle kayıt olduğunda, madencilik havuzu görevi hemen mining.notify olarak döndürmelidir.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Bunlar arasında:
Görev numarası: "bf";
Önceki blok HASH:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000"; Coinbase Bölüm I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase Bölüm 2:
"072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed98ac00000000"; İşlem Kimliği Listesi:
["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"]; Blok versiyon numarası: "00000002";
nBit:”1c2ac4af”;
Güncel zaman: "504e86b9";
Temizlik görevleri: Eğer doğruysa, madenci tüm görevleri iptal eder ve hemen yeni bir göreve başlar. Yanlışsa, yeni bir göreve başlamadan önce mevcut görev bitene kadar bekleyin.
3. Madencilik makinesi girişi
Madenci, madencilik havuzuna belirli bir hesap ve şifreyle giriş yapmak için mining.authorize yöntemini kullanır, şifre boş olabilir ve madencilik havuzu başarılı bir şekilde giriş yapmak için doğru döner. Bu yöntem, bağlantı başlatıldıktan hemen sonra yapılmalıdır, aksi takdirde madenci havuz görevini alamaz.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Sonuçları gönderin
Bir madenci gerçek bir pay bulduğunda, "mining.submit" yöntemiyle havuza bir görev gönderir. Havuz doğru dönerse, commit başarılı olur ve başarısız olursa hatanın özel bir nedeni vardır.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Bunlar arasında:
Kullanıcı adı: "miner1";
Görev numarası: "bf";
ExtraNonce2:"00000001";
Güncel zaman: "504e86ed";
nonce:”b2957c02″;
5. Zorluk ayarı
Zorluk ayarı, madencilik havuzu tarafından madencilik makinesine zorluğu mining.set_difficulty şekilde ayarlamak için verilir ve zorluk değeri parametrelerde bulunur.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Madenci yeni zorluk seviyesini bir sonraki göreve uygular ve havuz bazen hemen yeni bir görev verir, temizlik görevini true olarak ayarlar, böylece madenci yeni zorluk üzerinde hemen çalışabilir.
3. Genel iletişim süreci
Madencilik makinesi ile madencilik havuzu arasındaki genel iletişim süreci şu şekildedir:
|