Stratum protokols pašlaik ir visbiežāk izmantotais TCP sakaru protokols starp kalnračiem un kalnrūpniecības baseiniem. Īsumā izskaidrosim kalnrūpniecības tīkla arhitektūru.
1. Ieguves tīkla arhitektūra
Bitcoin ir decentralizēta tīkla arhitektūra, kas pārsūta jaunus darījumus un blokus, instalējot mezglus ar Bitcoin dēmoniem. Kalnrūpniecības mašīnas un kalnrūpniecības baseini veido arī citu tīklu, ko mēs saucam par kalnraču tīklu.
Kalnraču tīkls ir sadalīts vairākās galvenajās daļās, piemēram, kalnrūpniecības mašīnās, kalnrūpniecības baseinos, makos utt., Un dažreiz kalnrūpniecības baseina programmatūra tiek instalēta kopā ar maku, ko kopā var saukt par ieguves baseinu.
Komunikācijas protokols starp kalnrūpniecības mašīnu un ieguves baseina programmatūru ir slānis, savukārt komunikācija starp kalnrūpniecības baseina programmatūru un maku ir bitcoinrpc saskarne.
stratum ir JSON datu formāts, un konkrētais protokols ir šāds:
2. Slāņa vienošanās
1. Uzdevumu abonēšana
Kad kalnrūpniecības mašīna sāk darboties, tā vispirms savienojas ar ieguves baseinu, izmantojot mining.subscribe metodi, lai abonētu darbu.
Baseins atgriež abonementa numuru ExtraNonce1 un ExtraNonce2_size mining.notify.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Starp tiem ir:
ae6812eb4cd7735a302a8a9dd95cf71f ir abonementa numurs;
08000002 ir ExtraNonce1, kas tiek izmantots, lai veidotu coibase darījumus;
ExtraNonce2_size ir 4, kalnraču ExtraNonce2 skaitītāja baitu skaits.
2. Uzdevumu piešķiršana
Šo komandu kalnračam periodiski nosūta kalnrūpniecības baseins, un, kad kalnrūpniecības mašīna reģistrējas ar mining.subscribe metodi, ieguves baseinam nekavējoties jāatgriež uzdevums kā mining.notify.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Starp tiem ir:
Uzdevuma numurs: "bf";
Iepriekšējais bloks HASH:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000"; Coinbase I daļa:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase 2. daļa:
"072f736c7573682f00000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed988ac0000000"; Darījumu ID saraksts:
["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"]; Bloka versijas numurs: "00000002";
nBit:”1c2ac4af”;
Pašreizējais laiks: "504e86b9";
Tīrīšanas uzdevumi: Ja taisnība, kalnračs pārtrauks visus uzdevumus un nekavējoties sāks jaunu uzdevumu. Ja tas ir nepatiess, pirms sākat jaunu uzdevumu, pagaidiet, līdz beidzas pašreizējais uzdevums.
3. Kalnrūpniecības mašīnas pieteikšanās
Kalnračs izmanto mining.authorize metodi, lai pieteiktos kalnrūpniecības baseinā ar noteiktu kontu un paroli, parole var būt tukša, un ieguves baseins atgriežas patiess, lai veiksmīgi pieteiktos. Šī metode jāveic tūlīt pēc savienojuma inicializēšanas, pretējā gadījumā kalnračs nesaņems baseina uzdevumu.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Iesniedziet rezultātus
Kad kalnračs atrod likumīgu akciju, tas iesniedz uzdevumu baseinam, izmantojot metodi "mining.submit". Ja pūls atgriež patiesu, izpilde ir veiksmīga, un, ja tā neizdodas, ir konkrēts kļūdas iemesls.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Starp tiem ir:
Lietotājvārds: "kalnračs1";
Uzdevuma numurs: "bf";
Ekstranonce2:"00000001";
Pašreizējais laiks: "504e86ed";
nonce:”b2957c02″;
5. Grūtību regulēšana
Grūtības korekciju kalnrūpniecības baseins izsniedz kalnrūpniecības mašīnai, lai mining.set_difficulty veidā pielāgotu grūtības, un grūtības vērtība ir parametros.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Kalnračs pielietos jauno grūtību nākamajam uzdevumam, un baseins dažreiz nekavējoties izdos jaunu uzdevumu un iestatīs tīrīšanas uzdevumu uz true, lai kalnračs varētu nekavējoties strādāt pie jaunās grūtības.
3. Vispārējais komunikācijas process
Vispārējais saziņas process starp kalnrūpniecības mašīnu un ieguves baseinu ir šāds:
|