Le protocole Stratum est actuellement le protocole de communication TCP le plus couramment utilisé entre les mineurs et les pools de minage. Expliquons brièvement l’architecture réseau du secteur minier.
1. Architecture réseau de l’exploitation minière
Bitcoin est une architecture réseau décentralisée qui transmet les nouvelles transactions et les blocs en installant des nœuds avec des démons Bitcoin. Les machines de minage et les pools de minage forment également un autre réseau, que nous appelons le réseau de mineurs.
Le réseau de minage est divisé en plusieurs parties principales, telles que les machines de minage, les pools de minage, les portefeuilles, etc., et parfois le logiciel de pool de minage est installé en même temps que le portefeuille, ce qui peut être collectivement appelé pool de minage.
Le protocole de communication entre la machine de minage et le logiciel du pool de minage est stratum, tandis que la communication entre le logiciel du pool de minage et le portefeuille est l’interface bitcoinrpc.
stratum est le format de données JSON, et le protocole spécifique est le suivant :
2. Accord de strate
1. Abonnement à la tâche
Lorsque la machine de minage démarre, elle se connecte d’abord au pool de minage en utilisant la méthode mining.subscribe pour s’abonner au travail.
Le pool renvoie le numéro d’abonnement, ExtraNonce1, et ExtraNonce2_size dans mining.notify.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Parmi eux :
AE6812eb4cd7735a302a8a9dd95CF71F est le numéro d’abonnement ;
08000002 est ExtraNonce1, qui est utilisé pour construire des transactions coibase ;
ExtraNonce2_size est 4, soit le nombre d’octets du compteur ExtraNonce2 du mineur.
2. Répartition des tâches
Cette commande est périodiquement envoyée au mineur par le pool de minage, et lorsque la machine de minage s’enregistre avec la méthode mining.subscribe, le pool de minage doit immédiatement retourner la tâche comme mining.notify.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Parmi eux :
Numéro de tâche : « copain » ;
Bloc précédent HASH :
« 4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e0000000 » ; Coinbase Partie I :
« 010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008 » ; Coinbase Partie 2 :
« 072f736c7573682f0000000001000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed988ac00000000 » ; Liste des identifiants de transaction :
[« c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5 », « 049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12 »] ; Numéro de version du bloc : « 00000002 » ;
nBit:”1c2ac4af”;
Heure actuelle : « 504e86b9 » ;
Tâches de nettoyage : Si c’est vrai, le mineur annulera toutes les tâches et en commencera une nouvelle immédiatement. En cas de faux, attendez la fin de la tâche en cours avant de commencer une nouvelle tâche.
3. Connexion machine de minage
Le mineur utilise la méthode mining.authorize pour se connecter au pool de minage avec un compte et un mot de passe précis, le mot de passe peut être vide, et le pool de minage revient avec une connexion réussie. Cette méthode doit être réalisée immédiatement après l’initialisation de la connexion, sinon le mineur ne recevra pas la tâche de pool.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Soumettre les résultats
Lorsqu’un mineur trouve une part légitime, il soumet une tâche au pool en utilisant la méthode « mining.submit ». Si le pool revient vrai, le commit est réussi, et s’il échoue, il y a une raison spécifique à l’erreur.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Parmi eux :
Nom d’utilisateur : « miner1 » ;
Numéro de tâche : « copain » ;
ExtraNonce2 : « 00000001 » ;
Heure actuelle : « 504e86ed » ;
nonce:”b2957c02″;
5. Ajustement de la difficulté
L’ajustement de la difficulté est émis par le pool de minage à la machine de minage pour ajuster la difficulté de mining.set_difficulty manière, et la valeur de difficulté se trouve dans les params.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Le mineur applique la nouvelle difficulté à la tâche suivante, et le pool propose parfois une nouvelle tâche immédiatement et règle la tâche de nettoyage en vrai afin que le mineur puisse travailler sur la nouvelle difficulté immédiatement.
3. Processus général de communication
Le processus général de communication entre la machine de minage et le pool de minage est le suivant :
|