저자: 눈척
1. 서론
"미니스크립트"란 무엇인가요?
비트코인 프로토콜에는 항상 강력한 프로그래밍 언어(비트코인 스크립트)가 포함되어 있어 단일 서명만으로 자금을 잠그는 것이 아니라, 여러 공개 키, 시간 잠금, 해시 프리이미지, 그리고 복잡한 논리 분기를 결합할 수 있습니다. 그러나 실제로 비트코인 스크립트는 정확한 코드를 작성하기 어렵고, 오류로 인해 자금이 영구적으로 잠길 수 있으며, 결과 코드를 직접 분석하는 것이 거의 불가능하기 때문에 거의 사용되지 않습니다.
미니스크립트( BIP-379 )는 피터 바일레(Pieter Wuille)와 그의 공동 연구자들이 제안한 "비트코인 스크립트 코드 작성을 위한 구조화된 언어"로, 분석, 구성 및 범용 서명 기능을 제공합니다. 현재 비트코인 규칙과의 완벽한 호환성을 유지하면서도, 기본 비트코인 스크립트의 사용성 및 보안 문제를 해결합니다.
Miniscript는 본질적으로 비트코인 지출 규칙이 담긴 레고 박스와 같습니다. 각 블록은 서명해야 하는 공개 키, 경과해야 하는 기간, 공개해야 하는 비밀 값과 같이 작고 정확하게 정의된 조건을 나타냅니다. 한 블록을 다른 블록으로 교체할 수 있으므로 유연하고 다양한 지출 경로를 설정할 수 있습니다. AND, OR, 임계값과 같은 논리 연산자를 사용하여 블록을 조합하면 필요에 따라 간단하거나 복잡한 지출 조건을 개발할 수 있습니다. 가장 중요한 것은 Miniscript 정책이 분석 가능하다는 것입니다. 지갑은 누가 어떤 조건에서 지출할 수 있는지 미리 확인할 수 있으므로 잘못된 스크립트로 인해 자금이 잠길 리스크 줄일 수 있습니다.
이러한 구조화된 접근 방식을 통해 다음과 같은 지출 조건을 안전하게 표현할 수 있습니다.
- 최소 3명의 이사 중 2명의 서명이 필요합니다. 단, 6개월 연속으로 자금이 이동되지 않은 경우에는 1명의 서명만으로 자금을 이동할 수 있습니다.
- 앨리스와 밥은 자금을 쓰려면 함께 있어야 하고, 찰리는 자금이 1년 동안 휴면 상태에 들어간 후 혼자서 자금을 옮길 수 있습니다.
- 해시 값의 원본 이미지를 공개하거나 블록 높이가 100,0000이 될 때까지 기다립니다(지불).
그게 무슨 의미가 있죠?
Miniscript를 사용하면 지출 조건을 단일 서명 및 다중 서명을 넘어 더욱 다양하게 설정할 수 있습니다. 다음과 같이 규칙을 정의할 수 있습니다.
- "A와 B는 언제든지 자금을 함께 쓸 수 있다. 혹은 C만이 1년 동안 유휴 상태를 유지한 후에 자금을 쓸 수 있다"
- "이제 3개의 공개 키 중 2개가 함께 서명해야 합니다. 자금이 6개월 동안 휴면 상태에 있으면 3개의 공개 키 중 1개만 함께 서명하면 됩니다."
이러한 유연한 조건은 상속 계획, 계층형 기업 재무, 비상 복구와 같은 실용적인 사용 사례에 적합하며, 일반 비트코인 사용자도 고급 보안을 활용할 수 있도록 합니다. 중요한 점은 모든 미니스크립트 조건이 비트코인 블록체인 온체인 직접 적용되므로 비트코인 네트워크 자체 외에 추가적인 신뢰 가정이 필요하지 않다는 것입니다 .
2. Miniscript의 핵심 개념
이제 Miniscript의 핵심 모듈 살펴보겠습니다. 각 요소(Miniscript 스니펫)는 특정 지출 조건을 나타내며, 이 요소들을 결합하면 유연하고 안전한 지출 전략을 구축할 수 있습니다.
2.1 공개 키
공개 키: pk(k)
이는 Miniscript에서 가장 간단한 조건으로, 특정 공개 키의 서명을 요구합니다. 이는 기본적인 "단일 서명" 지출 조건을 나타내며, 더 고급 지출 조건의 기반으로도 사용됩니다.
- 예 : 자금 사용을 위해 서명을 요구함
- 미니 스크립트 :
pk(Alice)
- 미니스크립트 스니펫: 공개 키 -
2.2 다중 서명
다중 서명: multi(k, …)
기존의 다중 서명 지출 조건은 서명을 제공하기 위해 n개의 공개 키 중 k개가 필요합니다. 그 자식 요소는 공개 키만 가능합니다.
- 예 : 사용하려면 3개의 공개 키 중 2개의 서명이 필요합니다.
- 미니 스크립트 :
multi(2, Alice, Bob, Charlie)
- 미니스크립트 스니펫: 다중 서명 -
2.3 시간 잠금
타임락은 잠긴 비트코인이 특정 시점 이전에 사용되지 않도록 방지합니다. 이는 Bitcoin Script의 기본 기능이며 가장 유용한 Miniscript 모듈 중 하나입니다.
시간 잠금은 "자금은 6개월 후에만 이동할 수 있습니다" 및 "이 공개 키는 자금이 입금된 후 30일 동안만 사용할 수 있습니다"와 같은 규칙을 적용합니다. 비트코인 네트워크의 노드는 이 시간 이전에 자금을 사용하려는 거래를 거부합니다. 이 시간이 지나면 자금은 정상적으로 사용될 수 있으며, 활성화된 지출 경로는 다시 잠길 수 없습니다.
비트코인 스크립트에는 절대 시간 잠금과 상대 시간 잠금이라는 두 가지 유형의 시간 잠금이 있습니다.
절대 시간 잠금: after(n)
자금은 네트워크가 특정 블록 높이 또는 시간에 도달할 때까지 잠겨 있습니다. 블록체인이 해당 높이를 초과하면, 이 시간 잠금이 적용된 지출 조건이 활성화되어 영구적으로 사용 가능합니다.
- 예시 : 블록체인이 UNIX 타임스탬프 17 5000 0000(2025년 6월경)에 도달한 후 서명을 통해 지출합니다.
- 미니 스크립트 :
and_v(v:pk(Alice),after(1750000000))
절대 시간 잠금은 고정된 미래 시간을 설정합니다. 절대 시간 잠금이 만료된 후에는 동일한 조건으로 절대 시간 잠금을 설정하더라도 더 이상 구속력이 없습니다.
- 미니 스크립트 스니펫: 절대 시간 잠금 -
상대 시간 잠금: older(n)
일정 기간 동안 자금을 잠금합니다. 이 기간은 블록 또는 달력 시간(날짜, 시간)으로 정의할 수 있습니다. 상대적 시간 잠금은 관련 UTXO가 생성된 순간부터 카운트다운됩니다. 정의된 기간이 지나면 관련 지출 경로가 활성화됩니다.
- 예시 : 자금이 채굴된 후 12960블록(약 90일)이 지나면 이를 사용하려면 서명이 필요합니다.
- 미니 스크립트 :
and_v(v:pk(Alice),older(12960)
각 UTXO의 상대적 시간 잠금은 서로 독립적이며, 모두 동일한 지갑에 있다고 해서 동기화되지 않습니다. UTXO의 상대적 시간 잠금이 만료된 후에는 동일한 시간 잠금 조건을 사용하여 카운트다운을 "새로 고침"할 수 있습니다. 즉, 동일한 지갑의 새 주소로 전송하여 시간 잠금을 재설정할 수 있습니다.
- 미니스크립트 스니펫: 상대 시간 잠금 -
- - -
타임락을 설정할 때, 지갑 소프트웨어 인터페이스에 표시되는 달력 날짜는 추정치일 뿐입니다. 블록 높이를 기준으로 타임락을 설정하는 경우, 네트워크가 해당 높이에 도달하면 타임락이 만료됩니다. 캘린더 시간을 기준으로 타임락을 설정하는 경우, 비트코인 네트워크는 과거 블록 시간의 중간값(특히, 과거 11개 블록의 타임스탬프 중간값)을 사용하여 현재 시간을 결정하는데, 이는 사람이 사용하는 달력 및 시계와 다를 수 있습니다. 따라서 지출 거래가 유효해지는 시간은 비트코인 네트워크 상태에 따라 달라지며, 인터페이스에 표시되는 예상 시간과 정확히 일치하지 않을 수 있습니다.
2.4 해시 잠금
해시 잠금은 해시 값에 대응하는 비밀 값(해시 값의 원상)을 발견해야 합니다. 비밀 값이 공개되지 않으면 잠금이 해제되지 않습니다.
- 예 : SHA256 해시 값 H 뒤에 있는 원본 이미지를 공개해야 하며, 이를 사용하기 전에 서명을 제공해야 합니다.
- 미니 스크립트 :
and_v(v:pk(Alice),sha256(H))
Miniscript의 해시 잠금 유형
-
sha256(H)
- 프리이미지는 H를 생성하기 위해 SHA256되어야 합니다(프리이미지는 64비트 16진수 문자열이어야 함) -
hash256(H)
— 두 개의 연속된 SHA256 작업 후 프리이미지는 H가 되어야 합니다(프리이미지는 64비트 16진수 문자열이어야 함) -
ripemd160(H)
– RIPEMD-160 작업 후 프리이미지는 H가 되어야 합니다(프리이미지는 40자리 16진수 문자열이어야 함) -
hash160(H)
- H를 얻으려면 HASH160이어야 합니다(먼저 SHA256을 실행한 다음 RIPEMD160을 실행). (예상되는 프리이미지는 40자리 16진수 문자열입니다.)
- 미니스크립트 스니펫: 해시 잠금 -
2.5 논리 기본: AND, OR, ANDOR
이 세 가지 논리 연산자는 Miniscript의 기반이 됩니다. 이 연산자들은 서로 다른 조건들을 어떻게 결합할 수 있는지를 설명합니다(일반적으로 타임락을 통해).
AND : 잠금을 해제하려면 두 조건이 모두 참이어야 합니다.
- 예시 : 지출에는 앨리스의 서명이 필요하며, 자금을 받은 후 12960블록(약 90일)이 지나야 합니다.
- 미니 스크립트 :
and_v(v:pk(Alice),older(12960))
- 미니 스크립트 스니펫: AND -
- - -
또는 : 두 조건 중 하나라도 참이면 해당 항목이 잠금 해제됩니다.
- 예 : 지출에는 두 개의 공개 키 중 하나의 서명이 필요합니다.
- 미니 스크립트 :
or_d(pk(Alice),pk(Bob))
- 미니 스크립트 스니펫: 또는 -
ANDOR : 자금은 if/else 규칙을 사용하여 잠깁니다. 첫 번째 조건이 참이면 두 번째 조건도 참이어야 합니다(잠금 해제). 첫 번째 조건이 거짓이면 세 번째 조건도 참이어야 합니다(지출).
- 예 : 앨리스가 서명하면 밥도 서명해야 합니다. 앨리스가 서명하지 않으면 찰리의 서명이 필요합니다.
- 미니 스크립트 :
andor(pk(Alice), pk(Bob), pk(Charlie))
- 미니 스크립트 스니펫: ANDOR -
2.6 임계값
임계값: thresh(k, …)
임계 조건은 다중 서명보다 더 유연합니다. k개의 조건이 참이어야 하지만, 다중 서명과 달리 하위 요소는 공개 키에 국한되지 않으며 논리 표현식, 시간 잠금, 해시 잠금 등이 될 수 있습니다.
- 예 : 앨리스와 밥이 함께 서명(지출). 자금이 90일 동안 휴면 상태로 유지된 후, 두 사람 모두 개별적으로 지출할 수 있습니다.
- 미니 스크립트 :
thresh(2,pk(Alice),s:pk(Bob),sln:older(12960))
- 미니스크립트 스니펫: 임계값 -
2.7 Taproot 스크립트
Taproot를 사용하면 자금에 대해 여러 지출 방식을 설정할 수 있으며, 지출 시에는 실제로 사용하는 방식 하나만 명시하면 됩니다. Taproot는 두 가지 지출 방식을 제공합니다.
- 키 경로 : 통합 공개 키를 사용한 지출. 이 거래는 공개 키가 여러 당사자에 의해 생성되더라도(예: MuSig2 사용) 온체인 일반적인 단일 서명 거래로 표시됩니다.
- 스크립트 경로 : 커밋된 Taproot 스크립트 브랜치 중 하나를 사용하세요. 사용하는 브랜치만 표시되고 나머지는 숨겨집니다.
이러한 구조는 효율성과 개인 정보 보호의 균형을 유지합니다. 일상적인 사용은 주요 경로를 통해 이루어질 수 있으며, 더 복잡한 지출 조건은 필요할 때까지 숨길 수 있습니다.
- 예시 : 일일 지출은 키 경로에서 집계 공개 키(앨리스라고 함)를 사용합니다. 집계 공개 키로 서명할 수 없는 경우 스크립트 경로를 통해 찰리는 서명을 통해 언제든지 지출할 수 있는 반면, 밥은 자금이 생성된 후 90일이 지나야 지출할 수 있습니다.
- 미니 스크립트 :
tr(pk(Alice), {and_v(v:pk(Bob),older(12960)),pk(Charlie)})
- 미니 스크립트 스니펫: Taproot 스크립트 -
2.8 뮤시그2
MuSig2는 여러 참여자가 공동으로 집계 서명을 생성할 수 있도록 하는 Schnorr 기반 다중 서명 방식입니다. 온체인 이 집계 서명은 일반 단일 서명과 거의 차이가 없어 보입니다. 이를 통해 개인 정보 보호와 효율성이 향상되는 동시에 거래 규모와 수수료는 줄어듭니다.
- 예를 들어 , 지출에는 앨리스, 밥, 찰리 중 두 명의 서명이 필요합니다. 이들이 생성하는 서명은 블록체인 온체인 단일 서명으로 표시되므로 다중 당사자 지갑인지 구분할 수 없습니다. 이는 다중 당사자 지갑의 보안성과 효율성을 높여줍니다.
- 미니 스크립트 :
tr(musig(Alice, Charlie), {pk(musig(Alice, Bob)),pk(musig(Bob, Charlie))})
- 미니스크립트 스니펫: MuSig2 -
3. Nunchuk에서 Miniscript 사용하기
3.1 미니스크립트 지갑 생성
Nunchuk을 사용하면 Miniscript를 사용하여 고급 지출 조건을 쉽게 구축할 수 있습니다. 미리 만들어진 템플릿으로 시작하거나 직접 스크립트를 입력할 수 있습니다.
Nunchuk에서 미니스크립트 지갑 만들기: 홈 → 새 지갑 만들기 → 미니스크립트
- 템플릿 : "확장형 멀티시그", "소멸형 멀티시그", "유연한 멀티시그" 등 지출 조건을 선택하세요. 각 템플릿을 사용하면 코드를 작성하지 않고도 공개 키 수 및 시간 지연과 같은 매개변수를 조정할 수 있습니다.
- 템플릿에서 미니스크립트 지갑 만들기 -
- 사용자 지정 스크립트 : 고급 사용자의 경우, 일반 텍스트 Miniscript 지출 조건을 붙여넣거나 파일에서 가져올 수 있습니다. Nunchuk이 자동으로 스크립트를 구문 분석하고 정확성을 확인한 후 지출 조건을 일반 영어로 표시합니다.
- 사용자 정의 스크립트를 사용하여 미니스크립트 지갑 만들기 -
3.2 미니스크립트 그룹 지갑
Nunchuk의 "그룹 지갑" 기능을 사용하면 여러 기기를 사용하는 여러 사람이 종단 간 암호화된 데이터 통신을 통해 비트코인 지갑을 공동으로 관리할 수 있습니다. 각 참여자는 자신의 키를 유지하며, 지출 조건은 수탁 기관의 개입 없이 공동으로 적용됩니다. Miniscript와 결합하면 그룹 지갑은 실제 거버넌스 메커니즘을 반영하는 고급 다자간 조건을 지원합니다. 표준 Miniscript 지갑과 마찬가지로, 기성 템플릿을 사용하거나 직접 스크립트를 만들 수 있습니다.
Nunchuk에서 미니스크립트 그룹 지갑을 만들려면 홈 → 새 지갑 만들기 → 그룹 지갑 → 설정 → 미니스크립트를 클릭하세요.
예: 한 회사의 임원 2명과 이사 4명이 그룹 지갑을 생성합니다. 일상적인 운영에는 두 임원의 서명만 필요합니다. 그러나 다른 지출 경로에서는 네 명의 이사 중 세 명이라도 거래를 승인할 수 있습니다.
3.3 미니스크립트 지갑 복구
미니스크립트 지갑을 복원하려면 개인 키와 프리이미지와 같은 일반적인 자료 외에도 백업된 지갑 구성 파일(출력 설명자 또는 BSMS 파일 형식)이 반드시 필요합니다.
BSMS 형식은 지갑의 첫 번째 주소와 같은 메타데이터를 포함하는 출력 설명자(Output Descriptor)를 캡슐화한 것입니다. 이 메타데이터는 체크섬 역할을 하며 지갑의 위치를 빠르게 파악할 수 있도록 합니다. 지갑 구성 파일은 지갑의 구성 방식을 정의하는 맵 역할을 합니다.
동일한 요구 사항이 Miniscript 그룹 지갑에도 적용됩니다. 지갑 구성 파일이 없으면 모든 구성원의 개인 키가 있더라도 지갑을 재구성할 수 없습니다.
Nunchuk에서 미니스크립트 지갑을 복원하려면 다음을 클릭하세요.
홈 → 새 지갑 만들기 → 기존 지갑 복구 → BSMS/설명자를 사용하여 복구
Nunchuk에서 미니스크립트 그룹 지갑을 복원하려면 다음을 클릭하세요.
홈 → 새 지갑 만들기 → 기존 지갑 복구 → 그룹 지갑 복구
- 미니스크립트 지갑 또는 미니스크립트 그룹 지갑 복원 -
BSMS 1.0tr(xpub661MyMwAqRbcGgLWCDJNFcLYg8KgQimdffZdRobPJ585b93QjtCgqbPCo54DP3kpzwFpaZxoi6Snia3VDSV4oV81H4BxfaUbAzP2EpGHWDr/**,{multi_a(2,[8a0ba421/87'/0'/0']xpub6DWv19xigzHyBJJvE4iMTyTxQrn5TkBAr8k4gUJ8gycB8U7S7s8QRfBTa4Je2on9FE7jiUa3ijxuNyygEcpe8CGQUEz6W2PGtZ8SUJWc8fC/**,[d33f8331/87'/0'/0']xpub6C3RqV6jatGDLEiGpi92fsDLApCLC6SB28bMjwSaU4w3sdxmhWJRmzsxPDr8zv2hkyt1czkd3siMHJ6uAzN4T1gC5W6Vdd75XyJknN9N1Zb/**,[45c72f63/87'/0'/0']xpub6Ci35gULWq49uY6txiEHLJd8R9ESbadyed8zPACMgi6Cu5cd4BLG9p1ZDP3PnGNNaEHbGuy1uzEJDsEdWQck1C75DkaB13P8kX8UZkc7E8i/**),and_v(v:multi_a(1,[1e897bbf/87'/0'/0']xpub6CSCZZo8sDS2wjXUitr4FQUZwenEL1KcZrgYvi2mvSnVbYztYBxVLj5mKYcpNvB6RkLNEQzaaf8SWquzdhC6ncwasXk8STEjKwYRrd1QZcZ/**,[0cd15c3e/87'/0'/0']xpub6C3JCSGe5J2iqZymN7pKrYisD9po9FRqSRNot6561iLrzFjrPMNm8qn5VeYgTdWAtR66Kfr9oZWrjxSDLxB7GQ5dEi7hiUbjHyDxjaQxww6/**,[03c341e8/87'/0'/0']xpub6Bw2SYRUCc3Pcsgk39WkvkewHnxSLSERZmkUPBy91nrzKXehFBNLEzF2uJ2YiBhrS7kqagpGxBqhVziYawzUHePkB7pQGBMAnQmoYAxEAwz/**),after(1758819600))})/0/*,/1/*bc1pzmlufvqn5dpcquqysj4fr9skwxjj60wg7zyrpk4j8ftccz9ck9rs9fmjam
- 미니스크립트 지갑용 BSMS 파일 -
4. 응용 시나리오 및 사례 연구
4.1 응용 프로그램 시나리오
미니스크립트는 기본적인 다중 서명을 넘어 다양한 지출 전략을 가능하게 합니다. 실제 적용 사례는 다음과 같습니다.
- 재산 기획 : 상속인이 정해진 기간 후에 잠금을 해제할 수 있는 금고로, 지갑 소유자가 생애 동안 자금을 완벽하게 통제할 수 있도록 합니다.
- 기업 재무부 : 비상 상황에 대비해 대체 지출 경로를 은폐하면서 재무부에서 자금을 지출하려면 여러 임원의 서명을 요구합니다.
- 보관 및 교환 : 해시 잠금과 시간 잠금을 사용하여 원자 스왑을 실행하고 중개자 없이 보관을 보호합니다.
- 보험 : 보험 제공자는 지급 조건(여러 서명 필요)을 시행할 수 있으며, 시간 제한이 만료되고 검증 가능한 사건 진술이 제공된 후에 자금을 지급할 수 있습니다.
- 대출 : 대출은 비트코인 담보로 보장될 수 있습니다. 비트코인 담보는 임계 조건, 시간 잠금 및 환불 경로를 통해 상환이나 청산을 강제할 수 있으므로 신뢰할 수 있는 중개자의 필요성이 줄어듭니다.
- 긴급 복구 : 일반적으로 잠금 해제에 2/3 다중 서명이 필요한 지갑은 장기간 비활성 상태인 경우 복구 키 또는 복구 키 세트를 통해 자금을 잠금 해제할 수 있는 긴급 복구 지출 조건이 활성화될 수 있습니다.
- 개인 정보 보호 보관 : Taproot와 MuSig2를 사용하면 복잡한 다자간 지출 거래도 단일 서명 거래로 온체인 표시되므로 강력한 보안을 유지하면서 개인 정보를 보호할 수 있습니다.
4.2 사례
A) 시간 잠금을 통한 상속(일회성 복구)
지출 조건의 기본 아이디어 : 현재 2/3 다중 서명을 사용하고 있습니다. 6개월 동안 오프라인 상태가 되면 지정된 대체 키를 사용하여 지갑에서 자금을 인출할 수 있습니다.
중요한 이유 : 다른 사람에게 직접적인 통제권을 주지 않으면서 자금의 영구적 손실 리스크 줄여줍니다.
작동 원리 : 임계값 서명과 시간 잠금이 적용된 복구 경로.
미니스크립트 예시 :
andor( pk(backup_key), older(4224679), multi(2,A,B,C) )
B) 계층형 라이선스를 갖춘 기업 재무
지출 조건의 기본 아이디어 :
- 일일 비용: 재무 이사 2명 + 공동 서명 장비 1대(예: 하드웨어 서명 모듈(HSM)/KMS(키 관리 서버))
- 대규모 지출: 재무이사 2명 + 최고재무책임자(CFO)
- 지연/긴급 방문: 재무 이사 2명이 방문할 수 있습니다.
주요 내용 : 일상의 편리함과 보안.
작동 방식 : 임계값/AND와 OR 분기, 그리고 선택적 시간 잠금. 팀은 사용할 분기를 선택합니다.
미니스크립트 예시 :
and_v( or_c( pk(HSM), or_i( v:pk(CFO), v:older(4195485) ) ), multi(2,LeadA,LeadB,LeadC))
C) OTC 거래에 대한 통제 가능한 보관
지출 조건의 기본 아이디어 : 구매자 + 판매자, 또는 시간 창이 종료된 후에는 당사자 + 중재자
중요한 이유 : 보관인 없음. 명확하고 규칙 기반의 중재 경로.
작동 원리 : 시간 잠금 대체 조건이 있는 OR 논리입니다.
미니스크립트 예시 :
thresh(2, pk(Buyer), s:pk(Seller), sj:and_v( v:pk(Arbiter), n:older(4194472) ) )
D) 온체인 상에서 추적하기 어려운 여러 지갑
지출 조건의 기본 아이디어는 다음과 같습니다 . 세 개의 장치가 공동으로 제어합니다. 단일 집계 공개 키를 사용하여 지출할 수 있으므로 서명자 수가 노출되지 않습니다.
중요한 이유 : 거버넌스 구조를 노출시키지 않고도 팀 보안을 달성할 수 있습니다.
작동 방식 : Taproot와 MuSig2 중에서 선택할 수 있습니다. MuSig2는 여러 서명자를 하나의 공개 키로 통합하는 반면, Taproot는 사용되지 않는 브랜치를 숨깁니다. 스크립트 경로 내에서는 실행된 브랜치만 표시됩니다.
미니스크립트 예시(Taproot) :
tr( musig(A,B), { pk(musig(A,C)), pk(musig(B,C)) } )
5. 결론
비트코인은 항상 풍부한 지출 조건을 사용할 수 있었지만, 저수준 프로그래밍 언어는 대부분의 사용자에게 너무 어렵고 위험했습니다. Miniscript는 지출 조건을 표현하는 구조적이고 안전하며 구성 가능한 언어를 제공함으로써 이러한 문제를 해결합니다.
Miniscript를 사용하면 재산 계획, 기업 재무, 원자 스왑, 개인 정보 보호 보관 등의 고급 활용이 모두 가능합니다.
소프트웨어 지갑인 Nunchuk은 Miniscript를 사용자 친화적인 인터페이스로 구현하여 비트코인 생태계에 강력한 새로운 기준을 제시합니다. 복잡한 계약도 안전하고 분석 가능하며 읽기 쉬운 방식으로 표현할 수 있게 되어 차세대 비트코인 커스터디 및 스마트 계약 설계의 가능성을 열어줍니다.
각주: MiniScript를 지원하는 하드웨어 서명 장치
(최종 업데이트: 2025년 8월 27일)
- 순수 SegWit Miniscript 지원: Tapsigner, Coldcard(EDGE 펌웨어 v6.3.3 이상), Jade(펌웨어 v1.0.30 이상), Jade Plus(펌웨어 v1.0.30 이상), Ledger(펌웨어 v2.1.0 이상), Spectre DIY(펌웨어 v1.5.0 이상)
- Taproot Miniscript 지원: Coldcard(EDGE 펌웨어 v6.3.3 이상), Ledger(펌웨어 v2.2.1 이상), Spectre DIY(펌웨어 v1.9.0 이상)
- MuSig2 지원: 아직 없음(즉, 현재는 소프트웨어 키만 사용 가능)
(위에)