226 / 736XNONCE

Extranonce

채굴자가 새로운 시도를 계속하는 방법

알레나는 새 블록이 어떻게 만들어지는지 배우고 있습니다. 채굴자는 입력 데이터를 바꾸고, 그 짧은 지문에 해당하는 해시를 계산합니다. 해시의 숫자 값은 네트워크가 요구하는 조건을 만족해야 합니다. 그런데 변경할 수 있는 한 필드의 값을 모두 시험해도 성공하지 못하면 어떻게 할까요? Extranonce를 사용하면 새로운 입력 변형을 마련해 탐색을 이어 갈 수 있습니다. Bitcoin의 규칙을 완화하거나 보상을 약속하는 기능은 아닙니다. 기계가 똑같은 시도를 반복하지 않도록 돕는 장치입니다.

Extranonce는 채굴 소프트웨어가 보통 coinbase에 넣는 추가 가변 데이터입니다. Coinbase는 채굴 보상을 배정하는 블록의 특별한 첫 거래입니다. 이 데이터를 바꾸면 블록 헤더에 담기는 거래 전체의 지문이 달라져 새로운 탐색 입력을 만들 수 있습니다. 헤더에 따로 있는 nonce 필드가 커지는 것은 아닙니다.

헤더는 블록 데이터를 간략하게 정리한 부분입니다. 비트는 영 또는 일을 나타내며, 여덟 비트가 한 바이트를 이룹니다. 헤더에는 32비트 nonce 필드가 있으며, 나머지 데이터가 고정되어 있을 때 2^32개의 값을 사용할 수 있습니다. 같은 헤더와 같은 nonce를 다시 계산하면 해시도 결과도 같습니다. Extranonce는 이 필드를 늘리는 대신 다른 데이터를 변경해 새 헤더를 만듭니다. 알레나는 카운터를 다시 돌려 볼 수 있는 새로운 과제를 받았다고 생각하면 됩니다. 실제로는 규칙이 허용하는 범위에서 헤더의 다른 부분도 바꿀 수 있습니다. [1] [5]

여기서 coinbase는 거래소가 아니라 각 블록의 첫 거래를 뜻합니다. 소프트웨어가 그 extranonce를 바꾸면 거래의 인코딩된 데이터와, 이 데이터에서 계산한 식별자인 TXID가 달라집니다. 지문을 단계적으로 합치는 트리 구조를 거쳐 헤더에 저장되는 거래 전체의 지문인 Merkle root로 이어집니다. 소프트웨어는 영향을 받은 가지를 다시 계산해야 합니다. 다른 거래는 그대로 두어도 되지만 이전 루트를 그대로 사용할 수는 없습니다. 이런 계산의 연결을 통해 새 헤더에 다른 채굴 입력이 생깁니다. [1]

간단한 모델로 나머지를 고정하고 extranonce의 두 바이트를 완전히 자유롭게 바꾼다고 합시다. 2^16개의 변형을 만들 수 있고, 32비트 nonce와 결합하면 2^48개의 입력 조합이 됩니다. 이는 가능한 시도의 수이지 발견한 블록의 수가 아닙니다. 알레나에게 더 쉬운 조건이나 이 범위 안에서 반드시 성공한다는 보장이 주어지지 않습니다. 실질적인 이점은 계속 찾아볼 공간이 생긴다는 것입니다. 여유 공간을 늘린다고 실제 계산을 수행하는 기계 자체가 빨라지는 것도 아닙니다. [1]

Extranonce 공간은 아무 규칙도 없는 빈 양식이 아닙니다. Bitcoin의 구체적인 규칙인 BIP 34는 coinbase 입력의 데이터 필드인 scriptSig 맨 앞에 올바르게 인코딩된 블록 높이, 즉 체인에서의 위치를 넣도록 요구합니다. 100바이트 제한은 extranonce만이 아니라 coinbase scriptSig 전체에 적용됩니다. 소프트웨어는 필수 데이터의 자리를 남기고 유효한 형식을 지켜야 합니다. 알레나가 이를 덮어쓰면 이후 계산은 유효하지 않은 블록의 해답을 찾는 작업이 됩니다. [3] [4]

풀에서 함께 채굴할 때는 기계마다 서로 다른 변형을 찾는 편이 좋습니다. 채굴 과제를 배분하는 프로토콜 Stratum V2는 이를 위해 extranonce도 나누어 사용합니다. 상위 서버인 upstream이 데이터의 앞부분인 고정된 extranonce_prefix를 배정하면, 중간 소프트웨어는 자기 클라이언트를 위한 부분을 따로 확보하고 나머지를 하위인 downstream으로 넘길 수 있습니다. 이 방향은 개별 연결을 기준으로 합니다. 배정받은 접두부가 곧 최종 채굴자가 자유롭게 바꿀 수 있는 영역은 아닙니다. 이를 고정하면 참여자들의 작업을 서로 구분하는 데 도움이 됩니다. [2]

Stratum V2의 확장 채널에서 SubmitSharesExtended는 결과와 함께 변경한 바이트를 보냅니다. Coinbase는 coinbase_tx_prefix, extranonce_prefix, extranonce, coinbase_tx_suffix 순서로 조립됩니다. 이 이름들은 채굴 프로그램이 주고받는 데이터의 각 부분을 가리킵니다. extranonce 필드는 합의된 길이를 지켜야 합니다. 짧은 표기가 같은 숫자처럼 보여도 바이트열이 다르면 다른 거래가 될 수 있습니다. 컴퓨터는 사람의 대략적인 해석이 아니라 정확한 데이터를 비교합니다. [2]

Stratum V2의 Standard Job은 Merkle root가 고정된 과제입니다. 최종 장치는 헤더의 버전, 카운터, 시각을 나타내는 version, nonce, nTime에서 허용된 부분만 변경할 수 있습니다. 따라서 확장 채널처럼 자신의 extranonce를 제출하지 않습니다. 상위 소프트웨어가 새 coinbase와 루트를 준비해 다른 과제를 줄 수 있습니다. 알레나의 장치에 extranonce 설정이 보이지 않아도 전체 시스템에서는 이 방법을 사용하고 있을 수 있습니다. [2]

이전 작업의 결과를 처리하는 중에 새 접두부가 도착했다고 합시다. Stratum V2의 SetExtranoncePrefix는 해당 메시지 이후 같은 채널, 즉 해당 채굴 세션으로 전송된 과제에 적용됩니다. 결과는 올바른 과제 식별자 job_id와 그 과제에 배정된 공간에 계속 연결되어 있어야 합니다. 모든 곳에 최신 접두부를 대입하면 이전 결과의 바탕이 된 데이터가 바뀔 수 있습니다. Extranonce의 목적은 서로 다른 시도를 만들고 관계를 추적하는 것이지, 나중에 과제를 다시 쓰는 것이 아닙니다. [2]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Nonce, Merkle Tree, Mining Share, Block Template, Bitcoin. 다음 항목에서도 이 글을 참조합니다 ASIC Miner, Stratum V1, Stratum V2, Block Template.

DOC · 001Bitcoin Developer Guide — Mining and nonce space문서 DOC · 002Stratum V2 — Extended extranonce and jobs명세 DOC · 003BIP 34 — Height in coinbase명세 DOC · 004Bitcoin Developer Reference — Coinbase input문서 DOC · 005NIST — Binary data units문서
개정일: 1차 출처 우선 · 투자 조언이 아닙니다