Block Weight는 Bitcoin이 블록의 용량 사용량을 계산하는 방법입니다. 블록은 공동 기록에 추가하는 거래 묶음이며, 데이터의 각 부분은 서로 다른 비중으로 계산됩니다. 무게에는 고정된 상한이 있지만, 거래 건수나 보내는 비트코인의 가치를 정하는 것은 아닙니다.
안나가 Bitcoin을 보냈는데 다음 블록에 결제가 들어가지 않았습니다. 이것만으로 돈이 사라졌다는 뜻은 아닙니다. 미확인 거래는 개별 노드의 대기 공간인 Mempool에 남아 있을 수 있습니다. 노드는 거래와 블록을 검증하고 네트워크의 다른 참여자와 통신하는 소프트웨어입니다. 채굴자는 제한된 용량에 넣을 거래를 고르며, 더 작은 블록을 만들 수도 있습니다. 수수료는 유인이지 특정 결제를 넣으라는 명령이 아닙니다. Block Weight는 이 선택의 한 가지 제약을 설명할 뿐, 모든 지연 원인을 설명하지는 않습니다. [1] [7]
상한은 4 000 000 WU이며 그 값과 정확히 같은 경우도 허용됩니다. WU는 무게 단위입니다. Full Node는 Bitcoin 규칙을 스스로 검증하고 상한을 넘은 블록을 거부합니다. 수수료가 높아도, 채굴에 필요한 계산 작업 증명인 Proof of Work가 유효해도 소용없습니다. 작업 증명을 찾는 것과 올바른 블록을 구성하는 조건을 함께 만족해야 합니다. 따라서 용량은 채굴자의 희망만으로 정해지지 않습니다. [1] [3] [4]
바이트는 데이터의 양을 나타내는 일반적인 단위입니다. SegWit은 코인을 쓸 권한을 입증하는 데이터 중 서명 등을 분리했습니다. 이 부분을 witness라고 합니다. 기본 데이터의 한 바이트는 4 WU, 완전한 witness 표현에서 추가된 한 바이트는 1 WU로 셉니다. 이 표현의 보조 필드인 marker와 flag도 두 번째 범주에 속합니다. 모든 바이트를 똑같이 세지 않으면서 기본 거래 구조를 유지하고 검증 데이터에 공간을 제공하는 방식입니다. [1] [2]
서명은 보내는 사람이 특정 코인을 쓸 권한이 있음을 입증합니다. 지출 조건은 스크립트라는 짧은 프로그램이 정합니다. witness가 무게에 적게 기여한다고 해서 검증 노드가 필요한 서명이나 스크립트 조건을 무시할 수는 없습니다. 데이터도 완전한 표현에 그대로 남습니다. 이는 용량 계산 규칙이지, 처리 작업이나 전송량, 저장 공간이 같은 비율로 감소한다는 뜻이 아닙니다. [1] [4]
직렬화는 컴퓨터가 주고받을 수 있도록 블록을 정확한 바이트 순서로 쓰는 것입니다. witness를 뺀 크기를 B, 완전한 크기를 T라고 합시다. BIP 141은 W = 3 × B + T를 사용합니다. 기본 데이터는 T에도 포함되므로 총 네 번 계산되고, witness 표현에서 추가된 데이터는 한 번 계산됩니다. 공식은 일반 결제만이 아니라 블록 전체에 적용됩니다. [1] [8]
B = 500000, T = 2500000 바이트라고 가정하면 W = 4000000 WU가 됩니다. 다른 구성에서 B = 750000, T = 1750000 바이트여도 W = 4000000 WU입니다. 이는 계산 예시이며 실제 블록을 측정한 값은 아닙니다. 무게는 같지만 두 번째 블록은 전송하는 바이트가 더 적습니다. 따라서 꽉 찬 블록이 항상 4 MB라는 설명은 틀립니다. 담기는 거래 건수도 고정되어 있지 않습니다. [1]
블록은 사용자 결제를 모아 놓은 것만은 아닙니다. 이전 블록에 대한 참조와 거래 요약 등을 담은 80바이트 헤더가 있습니다. 그 뒤에는 가변 길이 정수 인코딩인 CompactSize로 기록한 거래 수가 나옵니다. 첫 거래는 채굴자 보상을 위한 특수 거래인 Coinbase Transaction이며, 여기서 이름은 거래소를 뜻하지 않습니다. 이 부분들도 모두 포함됩니다. 나머지 거래의 무게만 더해서는 블록 전체 무게가 나오지 않습니다. [5] [7] [8]
지갑은 비트코인을 받고 보내는 앱이나 기기입니다. 보통은 거래의 가상 크기를 vByte 단위로 사용합니다. 거래 전체 무게를 4로 나눈 뒤 올림한 값으로, 차지하는 용량 대비 수수료를 비교하기 좋습니다. 그러나 이렇게 올림한 거래 크기를 더해도 정확한 블록 무게는 아닙니다. 단위가 다르고, 거래마다 따로 올림했으며, 블록 자체 구조가 빠졌기 때문입니다. 큰돈을 보낸다고 반드시 데이터가 큰 거래가 되는 것도 아닙니다. [1] [8]
무게만으로 노드의 모든 작업을 나타낼 수는 없습니다. 해당 규칙에는 서명 검증 연산의 가중 비용을 80 000단위까지로 제한하는 규칙도 있습니다. 이는 블록의 모든 서명을 단순히 센 값이 아닙니다. Taproot와 함께 도입된 스크립트 언어 Tapscript는 입력별로 별도의 예산을 씁니다. 입력은 이전에 받은 코인을 쓰는 거래의 부분입니다. 그 서명 연산은 앞서 말한 기존 블록 단위 한도에 포함되지 않습니다. BIP 342가 이 다른 제약을 설명합니다. 무게 한도를 지켰다고 해서 검증 작업이 아무리 복잡해도 허용되는 것은 아닙니다. [1] [3] [9]
블록 탐색기는 특정 네트워크의 거래와 블록을 조회하는 앱입니다. Bitcoin Core v29.0에서 getblock은 size, strippedsize, weight 등을 반환합니다. 각각 완전한 바이트 크기, witness를 뺀 크기, 무게입니다. 함께 보일 수 있는 chainwork는 체인에 누적된 계산 작업이지 데이터 무게가 아닙니다. 일상적인 사용에서는 용량과 가격을 구분하면 됩니다. Block Weight는 블록 공간을 제한하고, 실제 결제 수수료는 거래 크기와 선택한 요율에 달려 있습니다. 어느 값도 그 자체로 확정 시간을 약속하지 않습니다. [6]
더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 vByte, Witness Data, SegWit, 블록 크기 전쟁, Bitcoin, Full Node. 다음 항목에서도 이 글을 참조합니다 Signet, vByte, Witness Data, Ordinals Inscriptions.