Stratumi protokoll on praegu kõige sagedamini kasutatav TCP suhtlusprotokoll kaevandajate ja kaevandusbasseinide vahel. Selgitame lühidalt kaevandamise võrguarhitektuuri.
1. Kaevandamise võrguarhitektuur
Bitcoin on detsentraliseeritud võrguarhitektuur, mis edastab uusi tehinguid ja plokke, paigaldades Bitcoini deemonitega sõlmi. Kaevandusmasinad ja kaevandusbasseinid moodustavad samuti teise võrgu, mida nimetame kaevandajate võrguks.
Kaevandajate võrk on jagatud mitmeks peamiseks osaks, nagu kaevandusmasinad, kaevandusbasseinid, rahakotid jne, ning mõnikord paigaldatakse kaevandusbasseini tarkvara koos rahakotiga, mida võib ühiselt nimetada kaevandusbasseiniks.
Kaevandusmasina ja kaevandusbasseini tarkvara vaheline suhtlusprotokoll on stratum, samas kui kaevandusbasseini tarkvara ja rahakoti vaheline suhtlus on bitcoinrpc liides.
stratum on JSON-andmeformaat ning konkreetne protokoll on järgmine:
2. Stratumi kokkulepe
1. Ülesannete tellimus
Kui kaevandusmasin käivitub, ühendub see esmalt kaevandusbasseiniga, kasutades mining.subscribe meetodit, et tellimust teha.
Bassein tagastab tellimusnumbri ExtraNonce1 ja ExtraNonce2_size mining.notify lehel.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Nende hulgas:
ae6812eb4cd7735a302a8a9dd95cf71f on tellimuse number;
08000002 on ExtraNonce1, mida kasutatakse coibase tehingute loomiseks;
ExtraNonce2_size on 4, mis on kaevandaja ExtraNonce2 loenduri baitide arv.
2. Ülesannete jaotus
See käsk saadab kaevandajale perioodiliselt kaevandaja poolt, ja kui kaevandusmasin registreerub mining.subscribe meetodiga, peaks kaevandamisbassein kohe tagastama ülesande kui mining.notify.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Nende hulgas:
Ülesande number: "bf";
Eelmine ploki HASH:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000"; Coinbase I osa:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase 2. osa:
"072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed98ac00000000"; Tehingu ID nimekiri:
["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"]; Ploki versiooninumber: "00000002";
nBit:”1c2ac4af”;
Praegune aeg: "504e86b9";
Puhastusülesanded: Kui see on tõsi, katkestab kaevur kõik ülesanded ja alustab kohe uut ülesannet. Kui see on vale, oota, kuni praegune ülesanne lõpeb, enne kui alustad uut ülesannet.
3. Kaevandusmasina sisselogimine
Kaevandaja kasutab mining.authorize meetodit, et logida kaevandusbasseini sisse kindla konto ja parooliga, parool võib olla tühi ning kaevandamisbassein tagastab edukalt sisselogimiseks. See meetod tuleb teha kohe pärast ühenduse algatamist, vastasel juhul ei saa kaevandaja basseini ülesannet.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Esita tulemused
Kui kaevandaja leiab legitiimse osa, esitab ta ülesande basseinile meetodi "mining.submit" abil. Kui bassein tagastab tõe, on kinnitamine edukas, ja kui ebaõnnestub, on vea konkreetne põhjus.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Nende hulgas:
Kasutajanimi: "miner1";
Ülesande number: "bf";
ExtraNonce2:"00000001";
Praegune aeg: "504e86ed";
nonce:”b2957c02″;
5. Raskusastme reguleerimine
Raskusastme reguleerimise annab kaevandusmasin kaevandusmasinale, et raskusastet mining.set_difficulty viisil reguleerida, ning raskusaste on parameetrites.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Kaevandaja rakendab uue raskusastme järgmisele ülesandele ning bassein võib mõnikord kohe uue ülesande välja anda ja seada koristusülesande tõeliseks, et kaevandaja saaks kohe uue raskusastmega tegeleda.
3. Üldine suhtlusprotsess
Üldine suhtlusprotsess kaevandusmasina ja kaevandusbasseini vahel on järgmine:
|