용어집 / 주소와 키
P2WPKH
별칭은 네이티브 SegWit 주소, Pay-to-Witness-Public-Key-Hash, bc1q 주소입니다.
- P2WPKH란 무엇입니까?
- P2WPKH는 서명과 공개 키를 입력에서 꺼내 위트니스로 옮기며, 위트니스에서는 각 바이트가 4개의 가중치 단위 대신 1개의 가중치 단위로 계산됩니다.
BIP-141에 명시되어 있습니다.
네이티브 SegWit 단일 키 출력은 42자리 bc1q 주소로 작성됩니다. 잠금 스크립트는 22바이트이고, 입력 1개를 사용하는 데는 레거시 방식의 약 148 vbyte에 비해 약 68 vbyte가 소요됩니다. Bitcoin Core는 버전 0.20.0부터 이 형식을 기본으로 제공했고, 대부분의 다른 지갑도 이를 따랐습니다.
작동 방식
P2WPKH 출력은 일반적인 의미의 오피코드를 담지 않습니다. 바이트 0x00으로 위트니스 버전 0을 표시한 뒤, 압축된 공개 키의 20바이트 HASH160을 푸시하는 형태입니다. 총 22바이트이며, 노드는 이를 스크립트로 실행하지 않고 위트니스 프로그램으로 인식합니다. 이를 사용하는 입력은 scriptSig를 완전히 비워 두고 서명과 키 두 항목을 위트니스 필드에 넣습니다.
절감은 블록을 측정하는 방식에서 나옵니다. BIP-141은 블록 가중치를 기본 크기의 3배에 전체 크기를 더한 값으로 정의하며, 상한은 4,000,000 가중치 단위입니다. 이에 따라 위트니스가 아닌 바이트는 각각 4단위, 위트니스 바이트는 각각 1단위의 비용이 됩니다. P2WPKH 입력은 위트니스가 아닌 바이트 41개가 164단위, 위트니스 바이트 약 108개가 108단위로 총 272단위입니다. 이를 4로 나누면 실제로 지불하는 68 vbyte가 됩니다.
두 가지 부수 효과도 할인만큼 중요합니다. BIP-143은 서명 해싱 알고리즘을 바꾸어 서명 작업이 입력 수에 따라 제곱이 아니라 선형으로 늘어나게 했고, 그래서 하드웨어 지갑도 큰 SegWit 트랜잭션을 빠르게 처리합니다. 또한 트랜잭션 식별자가 더 이상 위트니스를 포함하지 않으므로, 제3자가 전송 중인 서명을 변경해 txid를 바꿀 수 없습니다.
확인할 수 있는 곳
최근 몇 년간 출시된 거의 모든 지갑을 열면 수신 화면에 bc1q 문자열이 표시됩니다. 지갑은 BIP-84분기, 경로 m/84'/0'/0'에서 이를 도출하며, SLIP-132는 여기에 zpub 확장 키 접두사를 연결합니다. 따라서 다른 소프트웨어로 복원한 백업도 같은 주소에 도달합니다.
현재는 사실상 모든 가상자산 거래소의 출금 양식이 bc1q를 받습니다. 만약 한 곳이 거부한다면, 그 거래소는 2017년 이전에 작성된 검증 코드를 실행하고 있는 것이며, 실용적인 답은 그 거래소가 받는 형식으로 출금한 뒤 코인을 직접 옮기는 것입니다.
bc1q가 알려 주지 않는 것이 하나 있습니다. 그 출력이 무엇에 지불되는지입니다. 42자리 bc1q 주소는 단일 키이고, 62자리 주소는 스크립트입니다. 둘 다 위트니스 버전 0이고 둘 다 bech32를 사용하므로, 길이가 유일하게 보이는 차이입니다.
P2WPKH vs 중첩 SegWit
P2WPKH와 중첩 SegWit은 같은 키를 사용하고 같은 20바이트 해시를 커밋합니다. 차이는 래퍼입니다. 중첩 SegWit은 그 22바이트 위트니스 프로그램을 P2SH 출력 안에 넣어 주소가 3으로 시작하는 Base58 문자열이 되게 하며, 사용하는 입력의 위트니스가 아닌 추가 바이트 23개는 92단위의 무게가 나갑니다. 이는 91 vbyte와 68 vbyte의 차이와 정확히 같습니다. 보안은 동일합니다. 아주 오래된 소프트웨어도 받아들이는 주소를 얻는 대신, 이용 가능한 수수료 절감의 약 3분의 1을 포기합니다.