용어집 / 프로토콜과 업그레이드
Tapscript
- Tapscript란 무엇입니까?
- Tapscript는 Taproot의 스크립트 경로 지출 안에서 실행되는 비트코인 스크립트의 버전으로, Schnorr 서명을 사용하고, 오피코드 상한이 없으며, 기존의 카운터 대신 서명 예산을 둡니다.
BIP-342에 명시되어 있습니다.
BIP-342에서 이를 정의하며, 리프 버전 바이트 0xc0은 taptree의 한 가지가 나중에 발명된 다른 무언가가 아니라 tapscript임을 표시합니다. 다른 모든 곳에서 사용되는 스크립트 언어와 비교해, 이는 푸시가 아닌 연산 201개의 한도와 10,000바이트라는 스크립트 크기 상한을 없애고, OP_CHECKMULTISIG를 비활성화합니다. 스크립트를 공개하여 Taproot 코인을 지출하는 경우, 이 언어가 바로 그 스크립트가 작성된 언어입니다.
작동 방식
tapscript 지출은 위트니스 스택에 세 가지를 네트워크에 건넵니다: 스크립트가 요구하는 인수, 스크립트 자체, 그리고 해당 스크립트가 주소에 속함을 증명하는 제어 블록입니다.
서명 검사가 먼저 바뀌었습니다. OP_CHECKSIG와 OP_CHECKSIGVERIFY는 이제 32바이트 x-only 공개 키와 64바이트 Schnorr 서명을 기대하며, 기본값이 아닌 sighash 유형이 덧붙여질 때는 65바이트를 기대합니다. OP_CHECKMULTISIG와 OP_CHECKMULTISIGVERIFY는 무조건 실패하며, OP_CHECKSIGADD가 그 자리를 대신합니다.
자원 회계가 두 번째로 바뀌었으며, 이 부분이 실제 결과를 낳는 대목입니다. 기존의 카운터, 즉 스크립트당 201회 연산과 전역 sigop 집계는 사라졌습니다. 대신 각 입력은 자체 위트니스의 크기에 50 가중치 단위를 더한 값에서 시작하는 검증 예산을 받으며, 서명 검사가 성공할 때마다 여기서 50을 뺍니다. 바이트로 검증 작업을 사는 방식이며, 이는 고정된 개수보다 깔끔한 규칙이고 스크립트에 지불할 의사가 있는 만큼의 키를 담을 수 있음을 뜻합니다.
향후 업그레이드를 위해 두 개의 문이 열린 채로 남았습니다. 오피코드 80, 98, 126부터 129까지, 131부터 134까지, 137, 138, 141, 142, 149부터 153까지, 그리고 187부터 254까지는 OP_SUCCESS가 되었습니다: 이 중 어느 것이라도 스크립트 어디에든, 심지어 실행되지 않는 가지에라도 나타나면 스크립트는 즉시 성공합니다. 32바이트가 아닌 길이의 공개 키는 알 수 없는 키 유형으로 취급되어 통과합니다. 두 규칙 모두 이후의 소프트 포크가 하드 포크 없이 실제 동작을 부여할 수 있게 합니다. 변경 없이 남은 것은 단일 스택 요소에 대한 520바이트 상한과 1,000개 스택 요소 한도입니다.
확인할 수 있는 곳
Tapscript는 집계 키로 서명하는 대신 가지를 공개하여 Taproot 출력을 어려운 방식으로 지출할 때마다 나타납니다.
가장 무거운 실제 사용자는 데이터 저장입니다. Ordinals 인스크립션은 tapscript 엔벨로프이며, OP_FALSE OP_IF와 OP_ENDIF 사이에 콘텐츠 조각을 한 번에 520바이트씩 푸시하는 것이고, 바로 그 형태로 존재하는 이유는 tapscript가 10,000바이트 스크립트 한도를 없애고 그 뒤에 위트니스 할인을 두었기 때문입니다. 이 관행을 어떻게 생각하든, 대부분의 사람이 그것을 모른 채 tapscript 지출을 본 이유가 여기에 있습니다.
저축자에게 더 가까운 용도는 더 조용합니다. 시간 잠금 복구 가지, 에스크로 대체 경로, 라이트닝 네트워크의 최신 채널 스크립트는 모두 tapscript 리프로 존재하며, Bitcoin Core는 tr() 디스크립터 안에서 Miniscript를 통해 이를 구성하고 서명할 수 있습니다.
Tapscript vs 비트코인 스크립트
비트코인 스크립트는 계열이고, tapscript는 그중 하나의 구성원입니다. 세 가지 스크립트 버전이 동시에 네트워크에서 활성화되어 있습니다: 레거시 언어, SegWit 버전 0 언어, 그리고 tapscript이며, 노드는 스크립트 자체의 무엇이 아니라 지출되는 출력을 기준으로 이들 사이에서 선택합니다.
이는 튜토리얼에서 스크립트를 복사할 때 중요합니다. OP_CHECKMULTISIG로 작성된 2-of-3은 P2WSH 출력에서는 유효하고 taptree 리프에서는 무효입니다. 4,000바이트를 푸시하는 스크립트는 P2WSH 위트니스 스크립트에서는 합의 한도를 초과하고 tapscript에서는 문제가 없습니다. 페이지 위의 오피코드는 같지만 아래의 규칙집은 다릅니다.