Stratum-protokolla on tällä hetkellä yleisimmin käytetty TCP-viestintäprotokolla louhijoiden ja louhintapoolien välillä. Selitetäänpä lyhyesti kaivostoiminnan verkkoarkkitehtuuri.
1. Kaivostoiminnan verkkoarkkitehtuuri
Bitcoin on hajautettu verkkoarkkitehtuuri, joka välittää uusia tapahtumia ja lohkoja asentamalla solmuja Bitcoin-daemonien kanssa. Louhintakoneet ja louhintaaltaat muodostavat myös toisen verkon, jota kutsumme louhijaverkoksi.
Louhijaverkko on jaettu useisiin pääosiin, kuten kaivoskoneisiin, louhintapooleihin, lompakoihin jne., ja joskus kaivosallasohjelmisto asennetaan yhdessä lompakon kanssa, jota voidaan yhteisesti kutsua louhintapooliksi.
Kaivoskoneen ja louhintapoolin ohjelmiston välinen viestintäprotokolla on stratum, kun taas louhintapooliohjelmiston ja lompakon välinen viestintä on bitcoinrpc-rajapinta.
stratum on JSON-tietomuoto, ja protokolla on seuraava:
2. Stratum-sopimus
1. Tehtävien tilaus
Kun louhintakone käynnistyy, se yhdistyy ensin louhintapooliin mining.subscribe-menetelmällä tilatakseen työn.
Pooli palauttaa tilausnumeron ExtraNonce1 ja ExtraNonce2_size mining.notify-sivustolla.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Niiden joukossa:
ae6812eb4cd7735a302a8a9dd95cf71f on tilausnumero;
08000002 on ExtraNonce1, jota käytetään coibase-tapahtumien rakentamiseen;
ExtraNonce2_size on 4, louhijan ExtraNonce2-laskurin tavujen määrä.
2. Tehtävien jakaminen
Tämä komento lähetetään louhijalle säännöllisesti louhintapoolin toimesta, ja kun louhintakone rekisteröityy mining.subscribe-menetelmään, louhintapoolin tulee välittömästi palauttaa tehtävä muodossa mining.notify.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Niiden joukossa:
Tehtävänumero: "bf";
Edellinen lohkon HASH:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000"; Coinbase Osa I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase Osa 2:
"072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed98ac00000000"; Transaktio-ID-lista:
["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"]; Lohkoversionumero: "00000002";
nBit:”1c2ac4af”;
Nykyinen aika: "504e86b9";
Siivoustehtävät: Jos se pitää paikkansa, louhija keskeyttää kaikki tehtävät ja aloittaa uuden tehtävän välittömästi. Jos se on väärin, odota nykyisen tehtävän loppuun asti ennen uuden tehtävän aloittamista.
3. Kaivoskoneen kirjautuminen
Louhija käyttää mining.authorize -menetelmää kirjautuakseen louhintapooliin tietyllä tilillä ja salasanalla, salasana voi olla tyhjä, ja louhintapooli palauttaa true kirjautuakseen onnistuneesti. Tämä menetelmä on tehtävä heti yhteyden alustuksen jälkeen, muuten louhija ei saa pool-tehtävää.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Toimita tulokset
Kun louhija löytää laillisen osuuden, se lähettää tehtävän poolille "mining.submit"-menetelmällä. Jos pooli palauttaa tosiarvon, commit onnistuu, ja jos epäonnistuu, virheelle on erityinen syy.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Niiden joukossa:
Käyttäjänimi: "miner1";
Tehtävänumero: "bf";
ExtraNonce2:"00000001";
Nykyinen aika: "504e86ed";
nonce:”b2957c02″;
5. Vaikeustason säätö
Vaikeustason säätö annetaan louhintapoolin toimesta kaivoskoneelle vaikeustason säätämiseksi mining.set_difficulty tavalla, ja vaikeustasoarvo on parametreissa.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Louhija soveltaa uutta vaikeustasoa seuraavaan tehtävään, ja pooli voi joskus antaa uuden tehtävän heti ja asettaa siivoustehtävän true-arvoon, jotta louhija voi työstää uutta vaikeustasoa heti.
3. Yleinen viestintäprosessi
Yleinen viestintäprosessi kaivoskoneen ja kaivospoolin välillä on seuraava:
|