용어집 / 개발자 참고 자료
리딤 스크립트
별칭은 Redeem script입니다.
- 리딤 스크립트란 무엇입니까?
- 리딤 스크립트는 pay-to-script-hash 출력 뒤에 숨겨진 전체 지출 계약으로, 지출하는 쪽이 서명 스크립트 끝에 제시하며, 해시를 계산해 일치하는지 확인합니다.
BIP-16에 명시되어 있습니다.
BIP-16은 송신자가 전체 계약 대신 20바이트 해시에 지불할 수 있게 했고, 리딤 스크립트는 그 해시가 대표하는 계약입니다. 이 스크립트는 스택 요소 1개 안에 들어가야 하므로 520바이트가 절대 상한입니다. 이 바이트를 잃으면 개인 키는 아무 가치가 없으므로, 리딤 스크립트는 소프트웨어의 일부가 아니라 백업의 일부입니다.
작동 방식
코인이 움직이지 않는 동안 리딤 스크립트는 보이지 않습니다. 코인을 담은 출력에는 해시와 합의가 인식하는 패턴만 들어 있으며, 이는 2012년 4월 1일 블록 173,805부터 네트워크 전체에서 강제됩니다. 지불하는 사람은 조건에 대해 아무것도 알 수 없고, 블록 탐색기도 마찬가지입니다.
리딤 스크립트는 지출할 때 드러납니다. 서명 스크립트는 계약에 필요한 인수를 스택에 넣고 마지막에 직렬화된 계약 자체를 넣습니다. 검증 노드는 그 마지막 항목을 가져와 해시를 계산하고, 그 결과를 출력의 해시와 비교한 뒤에야 해당 항목을 역직렬화해 나머지 스택에 대해 코드로 실행합니다. 두 단계 모두 통과해야 하며, 이 스크립트를 담는 필드에는 데이터 푸시 외에는 아무것도 들어갈 수 없으므로 스크립트 자체가 검사되기 전에 어떤 동작도 몰래 넣을 수 없습니다.
현존하는 가장 흔한 리딤 스크립트는 계약이 아닙니다. 2017년부터 SegWit의 절감 효과를 누리면서도 구형 소프트웨어가 지불할 수 있기를 원한 지갑들은 위트니스 프로그램을 스크립트 해시로 감쌌으므로, 리딤 스크립트는 22바이트입니다. 버전 바이트 1개와 20바이트 키 해시로, 실행할 것이 없습니다. 3으로 시작하는 수백만 개의 거래소 출금 주소가 바로 그것만 숨기고 있습니다.
확인할 수 있는 곳
Bitcoin Core는 스크립트 주소를 만들 때마다 리딤 스크립트를 제공하며, decodescript 명령은 16진수 문자열을 다시 읽을 수 있는 어셈블리로 바꿉니다. 디스크립터에서는 스크립트를 sh(wpkh(...)) 또는 sh(multi(...))로 명시적으로 작성하며, 이것이 현대적인 기록 방식입니다. 디스크립터 지갑은 Bitcoin Core 0.21.0에서 2021년 1월에 등장해 주소만 가져오던 옛 관행을 구식으로 만들었기 때문입니다.
손실 방식은 현실적이고 구체적입니다. 시드 문구는 키를 재생성합니다. 임의의 스크립트는 재생성하지 못하며, 다른 공동 서명자의 공개 키도 알려줄 수 없습니다. 따라서 모든 참가자가 자기 시드만 보관한 2-of-3 구성은 지출이 불가능합니다. 개인 키 전체를 갖고 있으면서 그 키가 어떤 스크립트로 구성되었는지 기록이 없어 코인을 잃은 사례가 있습니다. 시드 백업마다 디스크립터를 함께 보관하고, 주소에 아끼고 싶은 자산이 들어가기 전에 소액으로 한 번 복원해 보십시오.
또 하나 알아야 할 것은 크기 한도입니다. 압축 공개 키 15개에 각각의 푸시 접두사와 주변 옵코드를 더하면 513바이트가 되어 간신히 들어갑니다. 16번째는 들어가지 않습니다. 멀티시그에 관한 어떤 규칙이 아니라 이 상한이 스크립트 주소를 공동 서명자 15명으로 제한합니다.
리딤 스크립트 vs 위트니스 스크립트
리딤 스크립트와 위트니스 스크립트는 서로 다른 두 시대에 같은 개념적 자리를 차지하며, 차이는 바이트가 어디로 이동하고 무엇으로 고정되는가입니다. 리딤 스크립트는 160비트 해시로 고정되고 서명 스크립트 안에서 바이트당 4 가중치 단위로 이동합니다. 위트니스 스크립트는 256비트 전체 SHA-256으로 고정되고 위트니스 안에서 바이트당 1 가중치 단위로 이동하므로, 같은 정책을 지출하는 비용이 약 4분의 1입니다. 중첩 구성은 둘을 동시에 사용합니다. 리딤 스크립트는 34바이트 위트니스 프로그램이고, 위트니스 스크립트가 실제 계약입니다. 래핑된 SegWit 멀티시그의 백업을 기록한다면 둘 다 적어 두어야 하며, 하나만으로는 부족합니다.