핵심 Mining Protocol은 channel로 jobs와 shares를 전달한다. 선택적 Job Declaration과 Template Distribution은 template 생성과 pool 회계를 분리한다. V2는 Bitcoin 합의나 PPS, FPPS, PPLNS 지급을 바꾸지 않는다.
Stratum V2는 Mining, Job Declaration, Template Distribution Protocol을 포함한다. Mining은 필수이고 나머지는 선택이다. 작업을 조정하지만 ASIC 소유, Bitcoin 유효성 규칙, pool 지급 의무는 정하지 않는다. [Stratum V2 — Protocol Overview] [Stratum V2 — Mining Protocol] [Stratum V2 — Job Declaration Protocol] [Stratum V2 — Template Distribution Protocol]
Braiins는 다른 Bitcoin 개발자들과 2019년 Stratum V2를 공개해 Stratum V1의 text encoding, 약한 연결 보안, overhead, pool의 일방적 job 생성을 다뤘다. 공개 specification과 implementation은 계속 발전한다. [Stratum V2 specification repository] [Braiins — Past and future of mining protocols] [Bitcoin Optech — Stratum V2 topic]
각 message는 extension_type, msg_type, msg_length로 된 6-byte binary header를 가진다. SetupConnection이 protocol, version, flags를 먼저 협상하고 SetupConnection.Success가 확인한다. product label이나 미확인 flag는 협상된 기능이 아니다. [Stratum V2 — Protocol Overview] [Stratum V2 specification repository]
remote link에는 crypto session이 필수이며 optional handshake는 Noise를 쓰고 이후 AEAD가 confidentiality와 integrity를 지킨다. client는 authority public key로 server certificate를 확인한다. 한 hop 보호는 firmware, 회계, pool solvency를 증명하지 않는다. [Stratum V2 — Protocol Security] [Noise Protocol Framework]
OpenStandardMiningChannel은 header-only channel을 열고 OpenExtendedMiningChannel은 proxy가 extranonce와 search space를 downstream에 나누게 한다. Group Channel은 jobs를 공유한다. server는 고유 공간을 배정해 ASIC의 중복 hash를 막아야 한다. [Stratum V2 — Mining Protocol]
NewMiningJob 또는 NewExtendedMiningJob이 작업을 나타내고 SetNewPrevHash가 prevhash, SetTarget이 pool target을 지정한다. SubmitSharesStandard 또는 SubmitSharesExtended는 sequence_number, job_id, nonce, nTime, version을 전달한다. share는 작업 측정이며 block은 Bitcoin network target을 충족해야 한다. [Stratum V2 — Mining Protocol]
proxy는 여러 device를 extended upstream channel에 집계한다. Translation Proxy는 Stratum V1 ASIC을 V2 pool로 연결하지만 downstream은 V1이므로 native V2, end-to-end Noise, 자동 Job Declaration을 얻지 못한다. [Stratum Reference Implementation libraries] [Braiins — Past and future of mining protocols]
Template Distribution은 Template Provider, 보통 Bitcoin Core full node를 pool이나 Job Declarator Client와 연결한다. NewTemplate과 SetNewPrevHash는 getblocktemplate polling 없이 template을 push하고 RequestTransactionData는 transaction, SubmitSolution은 발견 block을 돌려준다. [Stratum V2 — Protocol Overview] [Stratum V2 — Template Distribution Protocol]
Job Declarator Client는 AllocateMiningJobToken으로 token을 받고 DeclareMiningJob과 필요시 ProvideMissingTransactions를 보낸 뒤 SetCustomMiningJob을 전달한다. 이 flow를 받는 pool만 custom template을 허용하며 검사, rate limit, 거절할 수 있다. [Stratum V2 — Protocol Overview] [Stratum V2 — Job Declaration Protocol]
V2 서비스는 정확한 subprotocols, roles, channel types, flags, implementation version을 확인하고 authority key, endpoint, failover, error handling을 따로 검증한다. latency, rejected/stale shares와 logs를 감시한다. V2 label, channel, translator는 transaction 선택을 증명하지 않는다. [Stratum V2 specification repository] [Stratum Reference Implementation libraries] [Galaxy Research — Future of Bitcoin mining protocols]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Bitcoin, 비트코인 채굴, Mining Pool, Braiins, Braiins Pool, ASIC Miner. 다음 항목에서도 이 글을 참조합니다 ASIC Miner, Mining Pool, Nonce, Braiins.