227 / 736BTPL

Block Template

채굴 전에 준비하는 블록 초안

채굴 기계가 성공하는 결과를 찾기 전에는 어떤 블록을 위해 계산할지 알아야 합니다. 소프트웨어는 먼저 자료를 준비합니다. 어느 블록 뒤에 이을지, 어떤 거래를 넣을지, 보상을 얼마나 배정할지 정합니다. 이 초안을 Block Template이라고 부릅니다. 출판을 앞둔 원고처럼 내용은 있지만, 공동의 역사에 들어가기 위한 단계는 아직 남아 있습니다. 템플릿만으로는 어떤 거래도 확정되지 않습니다.

Block Template은 Bitcoin 네트워크에서 새 블록 후보를 조립하는 데 필요한 정보입니다. 그 뒤에야 채굴자는 블록 데이터를 간략하게 정리한 헤더를 대상으로 유효한 작업 증명을 찾습니다. 템플릿은 선택한 거래, 보상, 구성 규칙을 연결합니다. 이를 받았다고 블록을 채굴했거나 네트워크가 받아들였다는 뜻은 아닙니다.

새 블록은 특정한 이전 블록 위에 만들어집니다. 템플릿은 그 고유한 지문을 previousblockhash로 지정하고, 후보 블록의 체인 내 위치를 height로 나타냅니다. 그 밖에 헤더 버전인 version, 채굴 결과가 만족해야 할 목표값의 간결한 표현인 bits, 시간 정보 등이 있습니다. 이는 특정 블록을 구성하기 위한 자료이지 독립적인 결제 목록이 아닙니다. 거래가 같아도 다른 이전 블록에 연결하면 이미 다른 과제가 됩니다. [1]

안나가 비트코인을 받고 이어서 그 돈으로 결제한다고 합시다. 두 이체가 같은 블록에 들어가려면 자금을 안나에게 배정한 거래가 먼저, 그 자금을 쓰는 거래가 나중에 와야 합니다. 템플릿 형식을 설명하는 기술 문서 BIP 22는 이런 관계를 depends 필드로 나타내며, transactions 목록에서 앞선 항목을 하나부터 시작하는 번호로 참조합니다. 이 목록에는 채굴 보상을 배정하는 특별한 첫 거래인 coinbase가 들어가지 않습니다. depends가 없으면 의존 관계를 모른다는 뜻이지, 없다고 확인된 것이 아닙니다. 소프트웨어는 빠진 정보를 빈 목록으로 간주해서는 안 됩니다. [1]

보상에는 해당 높이의 규칙에 따라 새로 발행되는 비트코인과 실제로 포함된 거래의 수수료가 들어갑니다. 여기서 참조한 Bitcoin Core v29.0도 이렇게 계산합니다. 이 소프트웨어는 블록과 거래를 검증하고 채굴용 템플릿도 준비할 수 있습니다. 자체 예시에서 거래들이 총 10000 sats의 수수료를 제공한다고 합시다. 수수료가 3000 sats인 독립 거래를 빼면 남는 수수료는 7000 sats입니다. Sats는 비트코인의 작은 단위입니다. coinbasevalue 필드는 원래 거래 구성에서 채굴자가 받을 수 있는 최대 보상을 나타냅니다. 거래 구성을 바꾸면 이 금액도 다시 계산해야 합니다. 예전 내용의 합계가 아니라 실제 수수료를 기준으로 계산해야 합니다. [4] [1]

블록에는 데이터를 확인할 수 있는 암호학적 지문도 있습니다. BIP 141은 지출 권한을 증명하는 서명 등이 들어 있는 witness 데이터를 묶어 확인하는 witness commitment를 정의합니다. 이는 해당 데이터를 포함하는 wtxid 식별자에서 계산됩니다. Bitcoin Core 29는 변경되지 않은 템플릿에 대해 default_witness_commitment를 제공합니다. 관련 거래나 순서가 바뀌면 이 값을 확인하거나 다시 계산해야 합니다. 헤더에 있는 거래 전체의 지문인 Merkle root도 수정된 coinbase의 식별자를 포함한 최종 TXID 식별자들로 계산해야 합니다. 내용을 바꾼 문서에 예전 봉인을 그대로 쓸 수는 없습니다. [5] [3]

블록 공간은 제한되어 있고 채굴자는 내용을 선택합니다. Bitcoin Core v29.0은 연결된 거래 묶음, 데이터 부하를 계산하는 무게, 블록 한도에 포함해 세는 서명 검증 연산인 sigops를 고려합니다. blockmaxweight와 blockmintxfee는 조립할 블록의 크기와 요구하는 수수료율에 영향을 주는 설정입니다. 이는 선택 정책입니다. 이 때문에 빠진 결제가 반드시 네트워크 규칙에도 어긋나는 것은 아닙니다. 채굴자의 자체 설정으로 다른 노드들이 검사하는 네트워크 한도를 높일 수도 없습니다. [4] [3]

BIP 23의 mutable에는 시간 조정이나 거래 추가처럼 서버가 허용하는 변경이 나열됩니다. 이는 특정 템플릿을 다루는 약속입니다. 다른 참여자가 독립적으로 검사하는 유효성 규칙, 즉 합의를 무시해도 된다는 뜻은 아닙니다. 이전 블록, 시간, 난이도, 거래는 여전히 올바라야 합니다. 템플릿에 접근할 수 있다고 모든 연결된 채굴 장치가 내용을 자유롭게 바꿀 수 있는 것도 아닙니다. 시스템 구성과 전달받은 과제에 따라 달라집니다. [2]

계산하는 동안 다른 채굴자가 체인을 연장할 수 있습니다. 새로 받아들인 최신 블록 뒤에 이어질 블록을 만들려면 기존 템플릿의 이전 블록 지문만 바꾸어서는 안 됩니다. 일부 거래는 이미 확정되었을 수 있고, 높이와 다른 조건도 바뀝니다. BIP 23은 expires를 작업의 유효 시간 제한으로, prevblock을 다른 이전 블록과 함께 작업을 사용할 수 있는 허가로 설명합니다. 이런 허가가 있어도 거래, 보상, 새로운 상황 전체를 다시 검토해야 합니다. [2]

초안의 실수는 오랜 탐색을 시작하기 전에 발견하는 편이 좋습니다. BIP 23의 proposal 모드는 유효한 Proof of Work, 즉 필요한 계산 작업을 입증하는 결과를 아직 찾지 않았더라도 초안을 검사받을 수 있게 합니다. 긍정적인 평가는 블록이 발견되거나 전파되었다는 뜻도, 체인에 영구히 남는다는 보장도 아닙니다. 해당 사전 검사를 통과했다는 뜻입니다. 완성된 블록은 제출할 때 작업 증명을 포함한 필요한 검증을 다시 받아야 합니다. [2]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Mining Pool, Block Header, Extranonce, Merkle Tree, Bitcoin, Bitcoin Core. 다음 항목에서도 이 글을 참조합니다 코인베이스 트랜잭션, ASIC Miner, Mining Pool, Nonce.

DOC · 001BIP 22 — Block template structure명세 DOC · 002BIP 23 — Mutations and proposals명세 DOC · 003Bitcoin Core 29 — getblocktemplate RPC문서 DOC · 004Bitcoin Core v29.0 — Block assembler1차 출처 DOC · 005BIP 141 — Witness commitment명세
개정일: 1차 출처 우선 · 투자 조언이 아닙니다