용어집 / 주소와 키
P2SH 멀티시그
- P2SH 멀티시그란 무엇입니까?
- P2SH 멀티시그는 m-of-n 상환 스크립트를 3 주소 뒤에 숨기며, 스크립트 크기 상한인 520바이트 때문에 공개 키 15개로 제한됩니다.
BIP-16에 명시되어 있습니다.
2-of-3 상환 스크립트는 105바이트입니다. 2를 위한 옵코드, 푸시 접두사가 붙은 33바이트 압축 키 3개, 3을 위한 옵코드, 그리고 OP_CHECKMULTISIG로 이루어집니다. 입력 1개를 사용하는 데는 대략 297 vbytes가 들며, 이는 네이티브 SegWit 단일 키 입력의 약 3배입니다. 이것은 2012년부터 위트니스 데이터에 할인이 적용되기 전까지 표준 공동 수탁 방식이었습니다.
작동 방식
P2SH 멀티시그 상환 스크립트는 정족수를 직접 나열합니다. 필요한 서명 수, 이어서 참여하는 모든 공개 키, 이어서 전체 키 수, 마지막으로 OP_CHECKMULTISIG가 나옵니다. 코인이 사용되지 않고 남아 있는 동안에는 이를 아무도 볼 수 없습니다. 출력은 20바이트 해시에만 커밋하기 때문입니다.
키 15개라는 상한은 산술에서 나온 것이지 정책이 만들어낸 것이 아닙니다. 푸시 접두사를 포함해 각각 34바이트인 압축 키 15개를 합하면 510바이트가 됩니다. 여기에 개수 옵코드 2개와 OP_CHECKMULTISIG를 더하면 513에 이르며, 이는 스택 요소 1개에 대한 520바이트 한도 안에 들어갑니다. 열여섯 번째 키는 들어가지 않습니다. 비트코인의 합의 규칙은 OP_CHECKMULTISIG에 키를 최대 20개까지 허용하지만, P2SH 상환 스크립트는 물리적으로 그렇게 많은 키를 담을 수 없습니다.
사용 경로에는 오래된 결함이 하나 있습니다. OP_CHECKMULTISIG는 사용하는 것보다 스택에서 항목을 하나 더 꺼냅니다. 이는 원래 구현에서 비롯된 버그로, 하드 포크 없이는 제거할 수 없었습니다. 서명자는 더미 요소를 먼저 푸시하는 방식으로 이를 우회하며, BIP-147은 그 요소가 비어 있어야 한다고 정했고, 이는 블록 481,824에서 SegWit과 함께 활성화되었습니다. 따라서 완성된 입력은 빈 푸시, 서명, 서명, 상환 스크립트 순으로 읽힙니다.
확인할 수 있는 곳
2013년부터 2018년 사이에 구축된 기업 트레저리, 상속 구조, 거래소 콜드 스토리지는 대부분 P2SH 멀티시그입니다. 오래된 개인 간 거래(P2P) 마켓플레이스의 에스크로는 2-of-3을 사용했고 플랫폼이 세 번째 키를 보유했으며, 이렇게 해서 어느 한 거래자도 코인을 완전히 통제하지 않은 채 분쟁을 해결할 수 있었습니다.
백업 요건은 사람들이 자주 놓치는 부분입니다. 각 공동 서명자는 다른 모든 공동 서명자의 확장 공개 키나 이를 기록한 디스크립터가 필요합니다. 상환 스크립트는 시드 문구 1개로 재구성할 수 없기 때문입니다. 3개 중 2개의 개인 키를 보유하고 공개 키는 하나도 없다면 코인을 사용할 수 없게 됩니다. 디스크립터를 시드 백업과 함께 적어 두고, 이 구조에 소중한 자산이 들어가기 전에 복구를 시험해 보십시오.
오늘날 새로운 정족수는 대신 P2WSH나 Taproot로 구축합니다. 같은 정책을 사용하는 데 드는 비용이 훨씬 적고 키 15개 상한도 없기 때문입니다. 기존 P2SH 금고는 이전과 똑같이 작동하며, 강제 이전은 없습니다.
P2SH 멀티시그 vs 멀티시그
멀티시그는 정책이고 P2SH 멀티시그는 그것을 적는 한 가지 방식입니다. 같은 2-of-3 요건은 비트코인의 초기 규칙에 따른 베어 멀티시그 출력에, P2SH 상환 스크립트에, P2WSH 위트니스 스크립트에, 또는 Taproot 아래에서 일반 결제처럼 사용되고 정족수를 전혀 드러내지 않는 단일 집계 키 안에 둘 수 있습니다. P2SH를 선택하는 것은 수수료, 키 15개 상한, 그리고 코인을 처음 옮기는 순간 서명 구조 전체가 공개 지식이 된다는 사실에 관한 결정입니다.