Stratumprotokollet är för närvarande det mest använda TCP-kommunikationsprotokollet mellan gruvarbetare och miningpooler. Låt oss kort förklara nätverksarkitekturen för mining.
1. Nätverksarkitektur för gruvdrift
Bitcoin är en decentraliserad nätverksarkitektur som vidarebefordrar nya transaktioner och block genom att installera noder med Bitcoin-daemoner. Gruvmaskiner och gruvpooler bildar också ett annat nätverk, som vi kallar gruvnätverket.
Minernätverket är uppdelat i flera huvuddelar, såsom miningmaskiner, miningpools, plånböcker med mera, och ibland installeras mining pool-mjukvaran tillsammans med plånboken, som tillsammans kan kallas en mining pool.
Kommunikationsprotokollet mellan miningmaskinen och mining pool-mjukvaran är stratum, medan kommunikationen mellan miningpool-mjukvaran och plånboken är bitcoinrpc-gränssnittet.
stratum är JSON-dataformat, och det specifika protokollet är följande:
2. Stratumöverenskommelse
1. Uppgiftsprenumeration
När miningmaskinen startar ansluter den först till miningpoolen med mining.subscribe-metoden för att prenumerera på arbetet.
Poolen returnerar prenumerationsnumret, ExtraNonce1 och ExtraNonce2_size i mining.notify.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Bland dem:
AE6812EB4CD7735A302A8a9DD95CF71F är prenumerationsnumret;
08000002 är ExtraNonce1, som används för att bygga coibase-transaktioner;
ExtraNonce2_size är 4, antalet bytes för minerns ExtraNonce2-räknare.
2. Uppgiftsfördelning
Detta kommando skickas periodiskt till minern av miningpoolen, och när miningmaskinen registrerar med mining.subscribe-metoden bör miningpoolen omedelbart returnera uppgiften som mining.notify.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Bland dem:
Uppgiftsnummer: "bf";
Föregående block HASH:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000"; Coinbase Del I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase Del 2:
"072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed988ac00000000"; Transaktions-ID-lista:
["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961e52ae75527df9e80043fd2f12"]; Blockversionsnummer: "00000002";
nBit:”1c2ac4af”;
Nuvarande tid: "504e86b9";
Rengöringsuppgifter: Om det stämmer avbryter gruvarbetaren alla uppgifter och startar en ny uppgift omedelbart. Om det är falskt, vänta tills den aktuella uppgiften är slut innan du startar en ny uppgift.
3. Inloggning till gruvmaskinen
Minern använder mining.authorize-metoden för att logga in i miningpoolen med ett visst konto och lösenord, lösenordet kan vara tomt och miningpoolen återvänder true för att logga in framgångsrikt. Denna metod måste göras omedelbart efter att anslutningen initierats, annars får inte minern pool-uppgiften.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Lämna in resultaten
När en gruvarbetare hittar en legitim andel skickar den in en uppgift till poolen med metoden "mining.submit". Om poolen returnerar true är commit framgångsrikt, och om det misslyckas finns det en specifik orsak till felet.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Bland dem:
Användarnamn: "miner1";
Uppgiftsnummer: "bf";
ExtraNonce2:"00000001";
Nuvarande tid: "504e86ed";
nonce:”b2957c02″;
5. Justering av svårighetsgrad
Svårighetsjusteringen ges av gruvpoolen till gruvmaskinen för att justera svårighetsgraden på mining.set_difficulty sätt, och svårighetsvärdet finns i parametrarna.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Gruvarbetaren tillämpar den nya svårighetsgraden på nästa uppgift, och poolen ger ibland en ny uppgift direkt och sätter saneringsuppgiften på sanna så att gruvarbetaren kan arbeta med den nya svårighetsgraden direkt.
3. Allmän kommunikationsprocess
Den allmänna kommunikationsprocessen mellan gruvmaskinen och gruvpoolen är följande:
|