Protokół stratum jest obecnie najczęściej stosowanym protokołem komunikacji TCP między górnikami a pulami górniczymi. Wyjaśnijmy krótko architekturę sieciową w kopaniu.
1. Architektura sieciowa w wydobyciu
Bitcoin to zdecentralizowana architektura sieci, która przekazuje nowe transakcje i blokuje poprzez instalację węzłów z daemonami Bitcoina. Maszyny górnicze i pule górnicze tworzą także inną sieć, którą nazywamy siecią górników.
Sieć górników podzielona jest na kilka głównych części, takich jak maszyny górnicze, pule górnicze, portfele itp., a czasami oprogramowanie do puli górniczej jest instalowane razem z portfelem, który można zbiorczo nazwać pulą kopalnianą.
Protokół komunikacji między maszyną górniczą a oprogramowaniem puli górniczej to stratum, natomiast komunikacja między oprogramowaniem puli górniczej a portfelem to interfejs bitcoinrpc.
stratum to format danych JSON, a konkretny protokół jest następujący:
2. Umowa warstwowa
1. Subskrypcja zadań
Gdy maszyna górnicza się uruchamia, najpierw łączy się z pulą wydobywczą za pomocą metody mining.subscribe, aby subskrybować dzieło.
Pula zwraca numer subskrypcji, ExtraNonce1, oraz ExtraNonce2_size w mining.notify.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Wśród nich:
ae6812eb4cd7735a302a8a9dd95cf71f to numer subskrypcyjny;
08000002 to ExtraNonce1, który służy do budowy transakcji coibase;
ExtraNonce2_size wynosi 4, czyli liczba bajtów licznika górnika ExtraNonce2.
2. Przydział zadań
To polecenie jest okresowo wysyłane do górnika przez pulę górniczą, a gdy maszyna wydobywcza rejestruje się metodą mining.subscribe, pula górnicza powinna natychmiast zwrócić zadanie jako mining.notify.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Wśród nich:
Numer zadania: "bf";
Poprzedni blok HASH:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e000000000"; Coinbase Część I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase Część 2:
"072f736c7573682f00000000000100f2052a0100000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed98ac000000000"; Lista identyfikatorów transakcji:
["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b4181ed961ee52ae75527df9e80043fd2f12"]; Numer wersji blokowej: "00000002";
nBit:”1c2ac4af”;
Aktualny czas: "504e86b9";
Zadania sprzątania: Jeśli to prawda, górnik przerwie wszystkie zadania i natychmiast rozpocznie nowe. Jeśli nieprawda, poczekaj, aż aktualne zadanie się zakończy, zanim rozpoczniesz nowe.
3. Logowanie do maszyny górniczej
Górnik korzysta z metody mining.authoriz, aby zalogować się do puli górniczej z określonym kontem i hasłem, hasło może być puste, a pula wydobywcza wraca true, aby się pomyślnie zalogować. Metoda ta musi być wykonana natychmiast po inicjalizacji połączenia, w przeciwnym razie górnik nie otrzyma zadania puli.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Przedstaw wyniki
Gdy górnik znajduje legalną udział, przesyła zadanie do puli za pomocą metody "mining.submit". Jeśli pula zwraca true, commit jest udany, a jeśli się nie powiedzie, istnieje konkretny powód błędu.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Wśród nich:
Nazwa użytkownika: "miner1";
Numer zadania: "bf";
ExtraNonce2:"00000001";
Aktualny czas: "504e86ed";
nonce:”b2957c02″;
5. Regulacja trudności
Dostosowanie trudności jest wydawane przez pulę górniczą maszynie górniczej, aby dostosować poziom trudności w mining.set_difficulty sposób, a wartość trudności jest w parametrach.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Górnik nałoży nowy poziom trudności na kolejne zadanie, a pula czasem natychmiast wyda nowe zadanie i ustawi zadanie sprzątania na true, aby górnik mógł od razu zająć się nowym poziomem trudności.
3. Ogólny proces komunikacji
Ogólny proces komunikacji między maszyną górniczą a pulą górniczą wygląda następująco:
|