기금넷 공식사이트 - 복권 조회 - Stratum, 비트코인 광산 협정
Stratum, 비트코인 광산 협정
Getblocktemplate 협정은 20 12 년 중반에 태어났는데, 당시 광석 풀이 이미 출현했다. 광산 풀은 getblocktemplate 프로토콜을 사용하여 노드 클라이언트와 상호 작용하고 stratum 프로토콜을 사용하여 광부와 상호 작용합니다. 이것이 가장 일반적인 광산 풀 구축 모드입니다.
Getblocktemplate 프로토콜의 가장 큰 차이점은 getblocktemplate 프로토콜을 통해 광부들이 자체 블록을 구성할 수 있다는 것입니다. 이런 식으로 노드와 마이닝이 완전히 분리됩니다. 웹의 경우, 블록 체인은 어둡고, 네트워크는 블록 체인에 대해 아무것도 모른다. 그는 데이터 필드의 4 바이트 수정만 알고 있습니다. Getblocktemplate 의 경우 전체 블록 체인이 투명합니다. Getblocktemplate 는 확인할 거래 풀을 포함하여 블록 체인 광업과 관련된 모든 정보를 보유하고 있습니다. Getblocktemplate 는 블록 체인에 포함할 트랜잭션을 직접 선택할 수 있습니다.
채굴 방법에는 두 가지가 있는데, 하나는 1 인 채굴이라고 하고, 하나는 광산 채굴이라고 한다. 앞서 언급했듯이 노드 클라이언트에서 직접 CPU 마이닝을 시작하고 노드 클라이언트를 getwork+cgminer 구동 비디오 카드에 직접 연결하는 것은 SOLO 마이닝입니다. 솔로 비행은 자기가 복권을 사는 것처럼 당첨이 쉽지 않다. 모든 이윤은 자기가 소유한다. 광산에서 채굴하는 것은 복권을 함께 사는 것과 같다. 모두 함께 돈을 내고 복권 한 무더기를 살 수 있다. 당첨 후 수익은 투자 비율에 따라 분배될 것이다. 이론적으로 광산기는 getblocktemplate 프로토콜 링크 노드 클라이언트인 SOLO 를 사용하여 광산을 파낼 수 있지만 실제로는 장기적으로 그렇게 할 수 있는 광산 기회는 없다. (알버트 아인슈타인, Northern Exposure (미국 TV 드라마), 과학명언) 이 문장 을 쓸 때 비트코인 의 계산 능력 은 1, 600p+ 이고, 가장 선진적 인 광기 의 계산 능력 은 대략 10T 이다. 이렇게 단일 광산기가 단독으로 파낼 확률은10.6 만분의 1 도 안 된다. 광부 (사람) 가 진짜 금은에 투자하여 광산기를 사고, 전기료를 내고, 이런 고위험 투자를 하지 않을 것이다. 분명히, 광산에 투자하는 것은 위험을 줄이고 안정적인 수익을 얻는 데 더 적합하다. 따라서, 광산지의 출현은 불가피하고, 제도의 분권 원칙을 파괴하든 말든, 제거할 수 없다.
광산지의 핵심 업무는 광부에게 임무를 분배하고, 업무량을 집계하고, 수입을 분배하는 것이다. 광산지는 네모난 난이도를 많은 난이도가 적은 임무로 나누어 광부에게 계산해 주었다. 광부들은 임무를 완수한 후 업무량을 광산에 제출하는데, 이를 제출 점유율이라고 한다. 전체 메쉬 블록 난이도가 해시 계산 결과 상위 70 위가 모두 0 인 경우, 광산 풀이 광부에게 할당한 임무는 상위 30 위가 모두 0 (광부 계산 능력에 따라 조정) 이고, 광부는 지정된 난이도의 임무를 완료한 후 몫을 제출하며, 광산 풀은 상위 70 위가 모두 0 인지 다시 점검한다.
광산지는 각 광부의 계산 능력에 따라 서로 다른 난이도의 임무를 분배할 것이다. 광산지는 광부의 계산 능력을 어떻게 판단하여 적절한 임무를 분배하기가 어렵습니까? 생각을 조절하는 것은 비트코인 블록처럼 어렵다. 광산은 광부 분할율의 도움이 필요하다. 광산지는 각 광부에게 할당된 임무가 광부가 일정 기간 (예: 1 초) 을 계산하기에 충분하기를 바란다. 광부들이 1 초 안에 몇 가지 임무를 완수하면, 광산이 현재 난이도가 낮고, 개선이 필요하며, 그 반대의 경우도 마찬가지라는 것을 알 수 있다. 이렇게 일정 기간의 조정을 거쳐 광산지는 광부에게 합리적인 난이도를 분배하여 광부의 계산력을 계산할 수 있다.
광산 풀은 getblocktemplate 프로토콜을 통해 네트워크 노드와 상호 작용하여 블록 체인의 최신 정보를 얻고 stratum 프로토콜을 통해 광부와 상호 작용합니다. 또한 이전에 getwork 프로토콜을 사용하여 마이닝한 소프트웨어를 광산풀에 연결하여 마이닝할 수 있도록 광풀은 일반적으로 getwork 프로토콜을 지원하며 계층 마이닝 에이전트 메커니즘을 통해 구현됩니다. 광산지가 처음 등장했을 때, 비디오 카드가 광산을 파는 것이 주력이었고, getwork 는 사용하기에 매우 편리하다는 것을 설명해야 한다. 또한, 초기의 일부 FPGA 광산기는 getwork 로 이루어졌다. Stratum 은 TCP 방식으로 광산 풀과 통신하며 데이터는 JSON 형식으로 캡슐화됩니다.
다음은 getblocktemplate 가 남긴 몇 가지 문제입니다.
광부 구동: getblocktemplate 프로토콜에서 광부들은 여전히 RPC 인터페이스를 적극적으로 호출하여 HTTP 를 통해 노드에 데이터 마이닝을 신청합니다. 이는 광부들이 네트워크의 최신 블록의 변화를 제때에 알 수 없어 컴퓨팅 능력을 상실한다는 것을 의미합니다.
데이터 로드: 위에서 설명한 대로 getblocktemplate 노드에 대한 일반 호출은 약 1.5M 의 데이터를 피드백합니다. 여기서 기본 데이터는 트랜잭션 목록입니다. 광부와 광산지는 자주 데이터를 교환해야 하는데, 매번 작업을 분배할 때마다 광부에게 이렇게 많은 정보를 첨부할 수는 없는 것이 분명하다. 그리고 거대한 메모리 수요는 광산기의 성능에 큰 영향을 미치고 비용을 증가시킬 수 있다.
Stratum 프로토콜은 이러한 문제를 완전히 해결했다.
Stratum 프로토콜은 사전 예방적으로 임무를 할당하는 방식을 채택한다. 즉, 광산은 언제든지 광부에게 새로운 임무를 분배할 수 있다. 광부의 경우, 광산에서 배정된 새로운 임무를 받으면 즉시 무조건적으로 새로운 임무로 전환해야 한다. (윌리엄 셰익스피어, 광부, 광부, 광부, 광부, 광부, 광부) 광부들도 자발적으로 광산지로 새로운 임무를 신청할 수 있다.
지금의 핵심 문제는 광부들이 더 큰 수색공간을 얻을 수 있게 하는 방법이다. Getwork 프로토콜을 참조하여 광부에 대한 nNonce 및 nTime 필드만 변경할 수 있는 경우 상호 작용 데이터의 양은 적지만 검색 공간이 부족할 수 있습니다. 검색 공간을 늘리려면 hashMerkleroot 에서만 힘써야 한다. 광부가 스스로 coinbase 를 구축하면 수색공간 문제가 해결되지만, 블록에 포함된 모든 사무를 광부에게 맡기고, 광부는 사무목록의 Merkleroot 를 구성할 수 있어 광부에 대한 압력이 더 커지고 광산에 대한 대역폭 요구가 더 높다. (알버트 아인슈타인, Northern Exposure (미국 TV 드라마), 광부, 광부, 광부, 광부)
Stratum 프로토콜은 이 문제를 교묘하게 해결했으며, 성공적인 구현은 광부들에게 충분한 검색 공간을 추가할 수 있을 뿐만 아니라 필요한 상호 작용 데이터의 양이 매우 적다는 점도 Stratum 프로토콜의 가장 혁신적인 부분이다. (데이비드 아셀, Northern Exposure (미국 TV 드라마), 성공명언)
블록 헤드의 6 개 필드를 모두 80 바이트로 검토해 보겠습니다. 이것은 매우 중요합니다. NVersion, nBits 및 hashPrevBlock 의 세 필드는 고정되어 있으며 Nonce 및 nTime 의 두 필드는 이제 광부가 변경할 수 있습니다. 검색 공간을 늘리는 것은 hashMerkleroot 에서만 시작할 수 있으며 우회할 수 없습니다. Stratum 프로토콜을 통해 광부들은 자신의 coinbase 트랜잭션을 구성할 수 있습니다. coinbase 의 scriptSig 필드에는 광부들이 자유롭게 채울 수 있는 바이트가 많이 있습니다. coinbase 의 변화는 hashMerkleroot 의 변화를 의미합니다. Coinbase 에서 hashMerkleroot 를 구성하는 데는 모든 트랜잭션이 필요하지 않습니다.
위 그림과 같이 블록에 13 개의 트랜잭션이 포함된 경우 광풀은 먼저 13 개의 트랜잭션을 처리하고 마지막으로 그림의 검정색 점 4 개 (해시 값) 만 광부에게 전달하고 coinbase 를 구성하는 데 필요한 정보를 광부에게 전달합니다.
。 이렇게 하면 블록에 N 개의 트랜잭션이 포함되어 있는 경우 광산 풀이 log2(N) 의 해시 값으로 농축되어 광부에게 전달되어 광산 못이 광부와 상호 작용하는 데이터의 양을 크게 줄일 수 있습니다.
Stratum 프로토콜은 광부들이 광산과 상호 작용하는 인터페이스 데이터 구조와 상호 작용 논리를 다음과 같이 엄격하게 규정하고 있다.
1. 광부 가입 임무
광산기를 가동하고 mining.subscribe 방법을 사용하여 광산을 연결합니다.
데이터를 반환하는 것은 매우 중요합니다. 광부들은 다음과 같은 전체 광산 프로세스에 사용되는 현지 기록이 필요합니다.
Extranonce 1 및 Extranonce2 는 발굴에 매우 중요하며 추가된 검색 공간은 여기에 있습니다. 이제 최소 8 바이트의 검색 공간, 즉 4 바이트의 nNonce 와 4 바이트의 Extranonce2 가 있습니다.
2. 광산 허가
광산지에 계좌를 등록하고 광부를 추가하다. 광산 풀을 사용하면 계정당 원하는 수의 광부를 추가할 수 있으며, 서로 다른 이름을 사용하여 이들을 구분할 수 있습니다. 광부들은 mining.authorize 방법을 사용하여 허가를 신청했고, 광산이 허가한 광부만이 광산지 할당 임무를 받을 수 있었다.
3. 광산 풀 할당 작업
위의 각 필드 정보는 필수입니다. 여기서 각 정보는 다음과 같습니다.
위의 정보와 이전에 얻은 Extranonce 1 및 Extranonce2_size 를 추가하여 발굴할 수 있습니다.
4. 광업
1) coinbase 트랜잭션을 구성합니다.
사용된 정보에는 coinb 1, extranonce 1, extranonce2 _ size 및 Coinb2 가 포함되며 구조는 간단합니다.
왜 그럴까요? 광산은 광부들을 위해 많은 일을 했기 때문에, 광산은 coinbase 트랜잭션을 구축하고, 직렬화한 후 지정된 위치에서 coinb 1 과 coinb2 로 나뉜다. Coinb 1 및 coinb2 에는 블록 높이, coinb2 에는 광부의 소득 주소 및 소득과 같은 지정된 정보가 포함되어 있지만 광부와는 아무런 관련이 없습니다. 광부 채굴. 또한 extrannonce 1 은 광산 풀 쓰기 블록에 지정된 정보입니다. 일반적으로 각 광산 풀은 광산 풀의 이름이나 도메인 이름과 같은 자체 정보를 씁니다. 우리는 이 정보에 근거하여 전 망 각 광조의 계산 능력 비율을 집계했다.
2) Merkleroot 구축
Coinbase 와 merkle_branch 를 사용하면 hashMerkleroot 필드가 위와 같이 구성됩니다.
3) 블록 헤드 구축
나머지 5 개 필드를 채웁니다. 이제 광갱은 언제 어디서나 수색을 하여 채굴할 수 있다. 검색 공간이 충분하지 않은 경우 몇 바이트를 더 추가하면 Extranonce2_size 를 쉽게 해결할 수 있습니다.
광부들은 작업량을 제출합니다.
광부들은 난이도에 맞는 A 주를 찾아 광산에 제출했고, 제출한 정보의 양은 매우 작으며, 필수 필드였다.
광산 풀은 위의 5 개 필드를 받은 후 먼저 작업 번호 ID 를 기준으로 작업을 할당하기 전에 저장된 정보 (주로 구성된 coinbase 트랜잭션 및 트랜잭션 목록 등) 를 찾습니다. ) 그런 다음 블록을 재구성하고 주식의 어려움을 확인하십시오. 난이도 요구 사항을 충족하는 주식의 경우 전체 네트워크의 난이도에 부합하는지 테스트합니다.
광부들은 광산 풀을 조정하기가 어렵습니다.
광산지는 각 광부의 난이도를 기록하고 주식 비율에 따라 끊임없이 조정하여 적절한 난이도를 지정하였다. 광산지는 광업을 통해 언제든지 광부에게 소식을 보낼 수 있다. Set _ difference 메소드인 mining. set _ difference 입니다.
앞서 언급했듯이 Stratum 프로토콜의 핵심 개념은 기본적으로 명확합니다. Getblocktemplate 프로토콜과 Stratum 프로토콜의 협력으로 광산지는 마침내 광부들에게 계산력을 더 맹렬하게 하라고 큰 소리로 말할 수 있게 되었다.