Stratum-protokollen er for tiden den mest brukte TCP-kommunikasjonsprotokollen mellom minere og mining-pooler. La oss kort forklare nettverksarkitekturen til mining.
1. Nettverksarkitektur for gruvedrift
Bitcoin er en desentralisert nettverksarkitektur som videresender nye transaksjoner og blokker ved å installere noder med Bitcoin-demoner. Miningmaskiner og mining-pooler utgjør også et annet nettverk, som vi kaller miner-nettverket.
Minernettverket er delt inn i flere hoveddeler, som mining-maskiner, mining-pooler, lommebøker osv., og noen ganger installeres mining pool-programvaren sammen med lommeboken, som samlet kan kalles en mining-pool.
Kommunikasjonsprotokollen mellom miningmaskinen og mining pool-programvaren er stratum, mens kommunikasjonen mellom mining pool-programvaren og lommeboken er bitcoinrpc-grensesnittet.
stratum er JSON-dataformat, og den spesifikke protokollen er som følger:
2. Stratum-avtale
1. Oppgaveabonnement
Når mining-maskinen starter, kobler den først til mining-poolen ved å bruke mining.subscribe-metoden for å abonnere på arbeidet.
Poolen returnerer abonnementsnummeret, ExtraNonce1, og ExtraNonce2_size i mining.notify.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Blant dem:
AE6812EB4CD7735A302A8a9DD95CF71f er abonnementsnummeret;
08000002 er ExtraNonce1, som brukes til å bygge coibase-transaksjoner;
ExtraNonce2_size er 4, antall bytes til minerens ExtraNonce2-teller.
2. Oppgavefordeling
Denne kommandoen sendes periodisk til mineren av mining-poolen, og når mining-maskinen registrerer seg med mining.subscribe-metoden, skal mining-poolen umiddelbart returnere oppgaven som mining.notify.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Blant dem:
Oppgavenummer: "bf";
Forrige blokk HASH:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000"; Coinbase Del I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase Del 2:
"072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed988ac00000000"; Transaksjons-ID-liste:
["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961e52ae75527df9e80043fd2f12"]; Blokkversjonsnummer: "00000002";
nBit:”1c2ac4af”;
Nåværende tid: "504e86b9";
Rengjøringsoppgaver: Hvis det stemmer, avbryter gruvearbeideren alle oppgaver og starter en ny oppgave umiddelbart. Hvis det er feil, vent til den nåværende oppgaven er ferdig før du starter en ny oppgave.
3. Innlogging til miningmaskin
Mineren bruker mining.authorize-metoden for å logge inn i miningpoolen med en bestemt konto og passord, passordet kan være tomt, og miningpoolen returnerer true for å logge inn med suksess. Denne metoden må utføres umiddelbart etter at tilkoblingen er initiert, ellers vil ikke mineren få pool-oppgaven.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Send inn resultatene
Når en miner finner en legitim andel, sender den inn en oppgave til poolen ved å bruke metoden "mining.submit". Hvis poolen returnerer sann, lykkes commiten, og hvis den mislykkes, finnes det en spesifikk grunn til feilen.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Blant dem:
Brukernavn: "miner1";
Oppgavenummer: "bf";
ExtraNonce2: "00000001";
Nåværende tid: "504e86ed";
nonce:”b2957c02″;
5. Vanskelighetsjustering
Vanskelighetsjusteringen utstedes av gruvepoolen til gruvemaskinen for å justere vanskelighetsgraden på mining.set_difficulty måte, og vanskelighetsverdien er i parameterne.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Mineren vil anvende den nye vanskelighetsgraden på neste oppgave, og poolen vil noen ganger umiddelbart utstede en ny oppgave og sette oppryddingsoppgaven til true slik at mineren kan jobbe med den nye vanskelighetsgraden umiddelbart.
3. Generell kommunikasjonsprosess
Den generelle kommunikasjonsprosessen mellom gruvemaskinen og gruvepoolen er som følger:
|