스트라텀 프로토콜은 현재 채굴자와 채굴 풀 간에 가장 널리 사용되는 TCP 통신 프로토콜입니다. 채굴의 네트워크 아키텍처에 대해 간단히 설명해 보겠습니다.
1. 채굴의 네트워크 아키텍처
비트코인은 비트코인 데몬이 장착된 노드를 설치하여 새로운 거래와 블록을 전달하는 분산형 네트워크 아키텍처입니다. 채굴 기계와 채굴 풀도 또 다른 네트워크를 형성하는데, 우리는 이를 채굴 네트워크라고 부릅니다.
채굴 네트워크는 채굴 기계, 채굴 풀, 지갑 등 여러 주요 부분으로 나뉘며, 때로는 채굴 풀 소프트웨어가 지갑과 함께 설치되기도 하는데, 이를 통틀어 채굴 풀이라고 부릅니다.
채굴 기계와 채굴 풀 소프트웨어 간의 통신 프로토콜은 스트라텀이며, 채굴 풀 소프트웨어와 지갑 간의 통신은 비트코인RPC 인터페이스입니다.
stratum은 JSON 데이터 형식이며, 구체적인 프로토콜은 다음과 같습니다:
2. 계층 합의
1. 작업 구독
채굴 기계가 시작되면 먼저 mining.subscribe 메서드를 사용하여 채굴 풀에 연결하여 작업을 구독합니다.
풀은 구독 번호, ExtraNonce1, 그리고 mining.notify에서 ExtraNonce2_size을 반환합니다.
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";
이전 블록 해시:
"4d16b6f85af6e2198f44ae2a6de67f78487ae5611b77c6c0440b921e00000000"; 코인베이스 파트 I:
"010000000100000000000000000000000000000000000000000000000 00000000000000000ffffffff20020862062f503253482f04b8864e5008"; 코인베이스 2부:
"072f736c7573682f0000000000100f2052a010000001976a914d23fcdf86f7 e756a64a7a9688ef9903327048ed988ac000000000"; 거래 ID 목록:
["C5bd77249E27C2D3A3602dd35C3364A7983900b64a34644D03B930BFD19C0E5", "049B4E78E2D0B24F7C6A2856AA7B41811ed961ee5277Df9E80043FD2F12"]; 블록 버전 번호: "00000002";
nBit:”1c2ac4af”;
현재 시간: "504e86b9";
청소 작업: 만약 사실이라면, 채굴자는 모든 작업을 중단하고 즉시 새 작업을 시작합니다. 만약 잘못되었다면, 현재 작업이 끝날 때까지 기다렸다가 새 작업을 시작하세요.
3. 채굴기 로그인
채굴자는 mining.authorize 메서드를 사용해 특정 계정과 비밀번호로 채굴 풀에 로그인하며, 비밀번호가 비어 있어도 채굴 풀이 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. 일반 소통 과정
채굴 기계와 채굴 풀 간의 일반적인 통신 과정은 다음과 같습니다:
|