Das Stratum-Protokoll ist derzeit das am häufigsten verwendete TCP-Kommunikationsprotokoll zwischen Minern und Mining-Pools. Lassen Sie uns kurz die Netzwerkarchitektur des Minings erklären.
1. Netzwerkarchitektur des Bergbaus
Bitcoin ist eine dezentrale Netzwerkarchitektur, die neue Transaktionen und Blöcke weiterleitet, indem sie Knoten mit Bitcoin-Dämonen installiert. Mining-Maschinen und Mining-Pools bilden ebenfalls ein weiteres Netzwerk, das wir Miner-Netzwerk nennen.
Das Miner-Netzwerk ist in mehrere Hauptteile unterteilt, wie Mining-Maschinen, Mining-Pools, Wallets usw., und manchmal wird die Mining-Pool-Software zusammen mit der Wallet installiert, die zusammen als Mining-Pool bezeichnet werden kann.
Das Kommunikationsprotokoll zwischen der Mining-Maschine und der Mining-Pool-Software ist Stratum, während die Kommunikation zwischen der Mining-Pool-Software und der Wallet die bitcoinrpc-Schnittstelle ist.
stratum ist das JSON-Datenformat, und das spezifische Protokoll ist wie folgt:
2. Schichtübereinstimmung
1. Task-Abonnement
Wenn die Mining-Maschine startet, verbindet sie sich zunächst mit dem Mining-Pool über die Methode mining.subscribe, um das Werk zu abonnieren.
Der Pool gibt die Abonnementnummer, ExtraNonce1 und ExtraNonce2_size in mining.notify zurück.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Unter ihnen:
AE6812EB4CD7735A302A8a9DD95CF71F ist die Abonnementnummer;
08000002 ist ExtraNonce1, das zum Erstellen von CoiBase-Transaktionen verwendet wird;
ExtraNonce2_size ist 4, die Anzahl der Bytes des Miner-ExtraNonce2-Zählers.
2. Aufgabenverteilung
Dieser Befehl wird periodisch vom Mining-Pool an den Miner gesendet, und wenn die Mining-Maschine mit der Methode mining.subscribe registriert wird, sollte der Mining-Pool die Aufgabe sofort als mining.notify zurückgeben.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Unter ihnen:
Aufgabennummer: "bf";
Vorheriger Block HASH:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e000000000"; Coinbase Teil I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase Teil 2:
"072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed9888ac00000000"; Liste der Transaktions-IDs:
["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"]; Blockversionsnummer: "00000002";
nBit:”1c2ac4af”;
Aktuelle Zeit: "504e86b9";
Reinigungsaufgaben: Wenn es zutrifft, wird der Miner alle Aufgaben abbrechen und sofort eine neue Aufgabe starten. Wenn falsch, warte, bis die aktuelle Aufgabe endet, bevor du eine neue Aufgabe startest.
3. Mining-Machine-Login
Der Miner verwendet die Methode mining.authorize, um sich mit einem bestimmten Konto und Passwort in den Mining-Pool einzuloggen; das Passwort kann leer sein, und der Mining-Pool kehrt true zurück, um sich erfolgreich anzumelden. Diese Methode muss unmittelbar nach der Initialisierung der Verbindung durchgeführt werden, sonst erhält der Miner die Pool-Aufgabe nicht.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Die Ergebnisse einreichen
Wenn ein Miner einen legitimen Anteil findet, reicht er eine Aufgabe mit der Methode "mining.submit" in den Pool ein. Wenn der Pool true zurückgibt, ist das Commit erfolgreich, und wenn es fehlschlägt, gibt es einen spezifischen Grund für den Fehler.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Unter ihnen:
Benutzername: "miner1";
Aufgabennummer: "bf";
ExtraNonce2: "00000001";
Aktuelle Zeit: "504e86ed";
nonce:”b2957c02″;
5. Schwierigkeitsanpassung
Die Schwierigkeitsanpassung wird vom Mining-Pool an die Mining-Maschine gegeben, um die Schwierigkeit auf mining.set_difficulty Weise anzupassen, und der Schwierigkeitswert ist in den Params enthalten.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Der Miner wendet die neue Schwierigkeit auf die nächste Aufgabe an, und der Pool gibt manchmal sofort eine neue Aufgabe aus und setzt die Aufräum-Aufgabe auf 'wahr', damit der Miner sofort an der neuen Schwierigkeit arbeiten kann.
3. Allgemeiner Kommunikationsprozess
Der allgemeine Kommunikationsprozess zwischen der Mining-Maschine und dem Mining-Pool ist wie folgt:
|