BIP141은 서명 같은 데이터를 거래 머클 트리 밖의 witness로 옮기고, 블록 크기 제한을 기본 크기×3+전체 크기 ≤ 4,000,000의 무게로 바꿉니다. witness의 존재는 코인베이스 거래의 출력 하나에 기록됩니다. 이 글은 2026-10-27에 연 BIP141 원문(상태 Deployed)으로 확인한 범위만 다룹니다.
확인 기준일 2026-10-27 · 다음 확인 예정 2026-11-26
txid와 wtxid는 무엇이 다를까?
txid의 정의는 그대로이고 wtxid가 새로 생깁니다. witness 프로그램을 쓰는 입력이 하나도 없으면 두 값은 같습니다. 코인베이스의 wtxid는 0x00이 32바이트 이어진 값으로 간주합니다. 서명 데이터가 txid에 들어가지 않으므로 서명 방식이 바뀌어도 거래 식별이 흔들리지 않는다는 점이 원문이 꼽은 첫 동기입니다.
| 항목 | 원문 값 |
|---|---|
| txid | [nVersion][txins][txouts][nLockTime]의 이중 SHA256(witness 제외) |
| wtxid | marker 0x00, flag 0x01과 witness를 넣은 직렬화의 이중 SHA256 |
| 블록 무게 | 기본 크기×3+전체 크기, 4,000,000 이하 |
| 가상 크기 | 거래 무게÷4, 올림 |
| sigops 한도 | 기존 20,000의 4배인 80,000 |
| 커밋먼트 머리말 | 0x6a24aa21a9ed(OP_RETURN, 36바이트 푸시, aa21a9ed) |
블록 무게는 왜 하나의 식일까?
원문은 기본 데이터 1MB와 witness 3MB처럼 한도를 둘로 나누면 채굴자의 거래 선택과 지갑의 수수료 추정이 사실상 어려워진다고 적습니다. 그래서 무게 하나로 묶습니다. 기본 크기는 witness를 뺀 직렬화, 전체 크기는 witness를 포함한 직렬화입니다. 상한은 4,000,000입니다.
witness 커밋먼트는 어디에 들어갈까?
모든 wtxid를 잎으로 한 witness root hash를 만들고, 이를 witness reserved value와 이어 이중 SHA256한 값을 코인베이스 scriptPubKey에 둡니다. 출력은 38바이트 이상이며 39번째 바이트부터는 합의상 의미 없는 선택 데이터입니다. 조건에 맞는 출력이 여럿이면 출력 번호가 가장 큰 것을 씁니다. 코인베이스 입력의 witness는 32바이트 하나로 이뤄집니다.
witness 프로그램은 어떻게 알아볼까?
scriptPubKey가 OP_0 또는 OP_1~OP_16 하나와 2~40바이트 푸시로 이뤄지면 버전 바이트와 프로그램으로 해석합니다. 버전 0에서 20바이트는 P2WPKH, 32바이트는 P2WSH이며 그 밖의 길이는 실패합니다. 주소 접두사와의 관계는 비트코인 주소 접두사 글에, 서명 대상이 따로 정의되는 점은 SIGHASH 유형 글에 이어집니다.
자주 묻는 질문
가상 크기는 어떻게 계산하나요?
원문은 거래 무게를 4로 나누어 정수로 올린 값이라고 정의합니다. 무게는 witness를 뺀 크기×3에 전체 크기를 더한 값입니다.
버전 1~16 witness 프로그램은 무엇인가요?
원문은 이 버전들에 추가 해석이 없고 witness 스택 크기 제한도 없이 장래 확장용으로 예약되어 있다고 적습니다.
witness가 없는 블록도 커밋먼트가 있어야 하나요?
모든 거래에 witness 데이터가 없으면 커밋먼트는 선택입니다.



