용어집 / 개발자 참고 자료
위트니스 스크립트
- 위트니스 스크립트란 무엇입니까?
- 위트니스 스크립트는 P2WSH 출력의 실제 지출 조건을 담고 있으며, 해당 바이트가 통상 비용의 4분의 1로 계산되는 위트니스 안에서 이동합니다.
BIP-141에 명시되어 있습니다.
SegWit은 스크립트에 트랜잭션 내 별도의 영역을 부여했으며, bc1q 볼트를 지출할 때 그 영역에 들어가는 것이 바로 위트니스 스크립트입니다. 위트니스 안의 모든 바이트는 4개가 아니라 1개의 가중치 단위로 계산되며, 이는 2017년 8월 블록 481,824에서 도입된 75%의 할인입니다. 바로 이 할인 덕분에 멀티시그 수탁이 더 이상 비싸지 않게 되었습니다.
작동 방식
위트니스 스크립트는 출력에 자리한 단순한 SHA-256 해시로 커밋되며, 누군가 지출하는 날까지 비밀로 유지됩니다. 지출자는 조건이 요구하는 인수들을 위트니스 스택에 채운 뒤, 직렬화된 스크립트를 마지막 항목으로 덧붙입니다. 노드는 그 항목을 해시하여 32바이트가 커밋과 일치하는지 확인하고, 방금 검증한 내용을 실행합니다.
합의 규칙은 레거시 지출과 동일한 스크립트 상한을 적용합니다. 스크립트 10,000바이트와 작업 명령 201개입니다. 중계 정책은 그보다 훨씬 낮은 3,600바이트, 스택 항목 최대 100개에서 멈추므로, 그보다 큰 것은 일반적인 브로드캐스트가 아니라 채굴업자와의 직접적인 합의가 필요합니다.
행동을 바꾼 것은 이 산술입니다. 2-of-2 스크립트는 71바이트입니다. 33바이트 공개 키를 두 번 푸시하는 부분, 두 개의 개수 명령과 검증 명령입니다. 위트니스 안에서 이 71바이트는 71 가중치 단위, 즉 18 가상 바이트 미만의 비용이 듭니다. 동일한 71바이트를 서명 스크립트에 담아 예전 방식으로 옮기면 284 가중치 단위, 즉 71 가상 바이트의 비용이 듭니다. 보안은 전혀 달라지지 않았고, 사용 가격만 달라졌습니다.
볼 수 있는 곳
라이트닝 네트워크는 위트니스 스크립트 위에서 작동합니다. 모든 채널은 2-of-2 출력으로 자금이 입금되며, 채널 내부의 커밋 트랜잭션은 BOLT 3에 명시된 취소와 해시 잠금 결제용 스크립트의 작은 라이브러리로 구성되므로, 그 대부분은 체인에 도달하지 않은 채 생성되고 파기됩니다.
서명 하드웨어는 이를 이름이 붙은 필드로 봅니다. PSBT 형식은 입력과 출력 양쪽에 위트니스 스크립트 슬롯을 정의하므로, 코디네이터는 공동 서명자에게 충족되는 정확한 조건을 건넬 수 있고, 기기는 사용자에게 해시가 아니라 자신이 동의하는 대상이 무엇인지 보여줄 수 있습니다.
중첩된 형태도 볼 수 있습니다. 출금 화면을 한 번도 갱신하지 않은 거래소에서 흔한 중첩 P2SH-P2WSH 주소는 위트니스 프로그램을 가리키는 것만이 유일한 역할인 34바이트 리딤 스크립트를 지니며, 실제 작업은 그 아래의 위트니스 스크립트가 수행합니다.
백업에는 키만이 아니라 스크립트 바이트가 필요합니다. 모든 시드와 함께 출력 디스크립터를 보관하십시오. 아무도 기록하지 않은 위트니스 스크립트는 모든 서명이 완료된 정족수를 아무도 옮길 수 없는 코인으로 바꾸기 때문입니다.
위트니스 스크립트 vs Tapscript
위트니스 스크립트는 전부 공개되는 단일 스크립트이고, tapscript 리프는 트리의 한 가지이며 사용하는 가지만 공개됩니다. BIP-341에 따라 출력은 여러 리프에 대한 머클 루트에 커밋하므로, 복구 경로가 다섯 개인 볼트는 지출 시점에 그중 정확히 하나만 보여 주고 나머지 네 개는 영구히 비밀로 유지합니다. Tapscript는 또한 10,000바이트 한도를 없애고, OP_CHECKMULTISIG를 비활성화하는 대신 일괄 처리에 유리한 OP_CHECKSIGADD를 사용하며, 고정된 명령 개수 대신 서명 검증에 가중치 예산을 적용합니다. 지갑이 bc1q를 쓴다면 위트니스 스크립트를 사용하는 것이고, bc1p는 대신 Taproot 설계를 뜻합니다.