Протоколът Stratum в момента е най-често използваният TCP комуникационен протокол между миньори и миньорски пулове. Нека накратко обясним мрежовата архитектура на копаенето.
1. Мрежова архитектура на копаенето
Биткойн е децентрализирана мрежова архитектура, която препраща нови транзакции и блокове чрез инсталиране на възли с биткойн демони. Машините за добив и пуловете за добив също формират друга мрежа, която наричаме миньорска мрежа.
Миньорската мрежа е разделена на няколко основни части, като майнинг машини, майнинг пулове, портфейли и др., а понякога софтуерът за мининг пул се инсталира заедно с портфейла, който може да се нарече колективно майнинг пул.
Комуникационният протокол между майнинг машината и софтуера за миннинг пул е stratum, докато комуникацията между софтуера за мининг пул и портфейла е интерфейсът bitcoinrpc.
stratum е формат на JSON данни, а конкретният протокол е следният:
2. Споразумение за стратум
1. Абонамент за задачи
Когато машината за копаене стартира, първо се свързва към mining pool чрез метода mining.subscribe, за да се абонира за работата.
Пулът връща абонаментния номер, ExtraNonce1 и ExtraNonce2_size в mining.notify.
Client:{"id":1,"method":"mining.subscribe","params":[]}
Server:{"id":1,"result":[["mining.notify","ae6812eb4cd7735a302a8a9dd95cf71f"],"08000002",4],"error":null} Сред тях:
ae6812eb4cd7735a302a8a9dd95cf71f е абонаментният номер;
08000002 е ExtraNonce1, който се използва за изграждане на coibase транзакции;
ExtraNonce2_size е 4, броят байтове на брояча на миньора ExtraNonce2.
2. Разпределение на задачи
Тази команда периодично се изпраща към миньора от пула за добив, и когато машината за извличане се регистрира с метода mining.subscribe, пулът трябва незабавно да върне задачата като mining.notify.
Server:{"params":["bf","4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000", "010000000100000000000000000000000000000000000000000000000000000000000000 00ffffffff20020862062f503253482f04b8864e5008", "072f736c7573682f000000000100f2052a010000001976a914d23fcdf86f7e756a64a7a9688ef9903327048ed988ac00000000",["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856aa7b41811ed961ee52ae75527df9e80043fd2f12"], "00000002","1c2ac4af","504e86b9",false],"id":null,"method":"mining.notify"} Сред тях:
Номер на задача: "bf";
Предишен блок HASH:
"4D16b6F85af6E2198F44ae2a6de67F78487ae5611B77C6C0440b921E000000000"; Coinbase Част I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; Coinbase Част 2:
"072f736c7573682f00000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed98ac000000000"; Списък с идентификатори на транзакции:
["c5bd77249e27c2d3a3602dd35c3364a7983900b64a34644d03b930bfdb19c0e5", "049b4e78e2d0b24f7c6a2856a7b41811ed961ee52ae75527df9e80043fd2f12"]; Номер на версия на блока: "00000002";
nBit:”1c2ac4af”;
Текущо време: "504e86b9";
Почистващи задачи: Ако е вярно, миньорът ще прекрати всички задачи и веднага ще започне нова. Ако не е вярно, изчакайте текущата задача да приключи, преди да започнете нова.
3. Вход в минна машина
Миньорът използва метода mining.authorize, за да влезе в mining pool-а с определен акаунт и парола, паролата може да е празна, а mining pool-ът се връща true, за да се влезе успешно. Този метод трябва да се извърши веднага след инициализацията на връзката, иначе миньорът няма да получи задачата за пула.
Client:{"params":["miner1","password"],"id":2,"method":"mining.authorize"}
Server:{"error":null,"id":2,"result":true} 4. Изпратете резултатите
Когато миньор намери легитимен дял, той изпраща задача в пула чрез метода "mining.submit". Ако пулът върне true, коммитът е успешен, а ако се провали, има конкретна причина за грешката.
Client:{"params":["miner1","bf","00000001","504e86ed","b2957c02"],"id":4,"method":"mining.submit"}
Server:{"error":null,"id":4,"result":true} Сред тях:
Потребителско име: "miner1";
Номер на задача: "bf";
ExtraNonce2:"00000001";
Текущо време: "504e86ed";
nonce:”b2957c02″;
5. Корекция на трудността
Корекцията на трудността се налага от пула за добив на миньорската машина, за да се нагласи трудността по mining.set_difficulty начин, а стойността на трудността е в параметрите.
Server:{"id":null,"method":"mining.set_difficulty","params":[2]} Миньорът прилага новата трудност към следващата задача, а пулът понякога веднага издава нова задача и задава задачата за почистване на true, за да може миньорът веднага да работи върху новата трудност.
3. Общ процес на комуникация
Общият процес на комуникация между миньорската машина и миньорския пул е следният:
|