Protokol stratum je trenutno najpogosteje uporabljen TCP komunikacijski protokol med rudarji in rudarskimi bazeni. Na kratko razložimo omrežno arhitekturo rudarjenja.
1. Omrežna arhitektura rudarjenja
Bitcoin je decentralizirana omrežna arhitektura, ki posreduje nove transakcije in blokira z nameščanjem vozlišč z Bitcoin demoni. Rudarski stroji in rudarski bazeni tvorijo tudi drugo omrežje, ki ga imenujemo rudarsko omrežje.
Rudarsko omrežje je razdeljeno na več glavnih delov, kot so rudarske naprave, rudarski bazeni, denarnice itd., včasih pa je programska oprema rudarskega bazena nameščena skupaj z denarnico, ki jo lahko skupaj imenujemo rudarski bazen.
Komunikacijski protokol med rudarsko napravo in programsko opremo rudarskega bazena je stratum, medtem ko je komunikacija med programsko opremo rudarskega bazena in denarnico vmesnik bitcoinrpc.
Stratum je JSON podatkovni format, specifičen protokol pa je naslednji:
2. Dogovor o sloju
1. Naročnina na naloge
Ko se rudarski stroj zažene, se najprej poveže z rudarskim bazenom z metodo mining.subscribe, da se naroči na delo.
Bazen vrne naročniško številko ExtraNonce1 in ExtraNonce2_size v rudarjenju.notify.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Med njimi:
ae6812eb4cd7735a302a8a9dd9cf71f je naročniška številka;
08000002 je ExtraNonce1, ki se uporablja za gradnjo transakcij na bazi;
ExtraNonce2_size je 4, število bajtov rudarskega števca ExtraNonce2.
2. Dodeljevanje nalog
Ta ukaz rudarju občasno pošlje rudarski bazen, in ko se rudarski stroj registrira z metodo mining.subscribe, mora rudarski bazen takoj vrniti nalogo kot mining.notify.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Med njimi:
Številka naloge: "bf";
Prejšnji blok HASH:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e000000000"; Coinbase, del I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase, 2. del:
"072f736c7573682f0000000000100f2052a0100000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed988ac000000000"; Seznam ID transakcij:
["c5bd77249e27c2d3a3602dd35c33664a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"]; Številka različice bloka: "00000002";
nBit:”1c2ac4af”;
Trenutni čas: "504e86b9";
Čistilna opravila: Če je to res, rudar prekine vse naloge in takoj začne novo. Če ni res, počakaj, da trenutna naloga konča, preden začneš novo nalogo.
3. Prijava rudarskega stroja
Rudar uporablja metodo mining.authorize za prijavo v rudarski sklad z določenim računom in geslom, geslo je lahko prazno, rudarski bazen pa se vrne true in uspešno prijavi. To metodo je treba izvesti takoj po inicializaciji povezave, sicer rudar ne bo dobil naloge skupine.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Predložite rezultate
Ko rudar najde legitimen delež, pošlje nalogo v sklad z uporabo metode "mining.submit". Če pool vrne true, je commit uspešen, in če ne uspe, obstaja poseben razlog za napako.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Med njimi:
Uporabniško ime: "miner1";
Številka naloge: "bf";
ExtraNonce2:"00000001";
Trenutni čas: "504e86ed";
nonce:”b2957c02″;
5. Prilagajanje težavnosti
Prilagoditev težavnosti rudarski bazen izda rudarskemu stroju, da prilagodi težavnost na mining.set_difficulty način, vrednost težavnosti pa je v parametrih.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Rudarje bo novo težavnost uporabil za naslednjo nalogo, skupina pa bo včasih takoj dodelila novo nalogo in nastavila čiščenje na true, da lahko rudar takoj začne z novo težavnostjo.
3. Splošni komunikacijski proces
Splošni komunikacijski proces med rudarskim strojem in rudarskim bazenom je naslednji:
|