본문으로 건너뛰기
buybitcoinsmart

용어집 / 프로토콜과 업그레이드

Miniscript

Miniscript란 무엇입니까?
Miniscript는 비트코인 스크립트(Bitcoin Script)의 유용한 부분집합을 구조적으로 작성하는 방식으로, 소프트웨어가 지출 정책을 분석하고 그 비용을 계산하며 자동으로 서명할 수 있게 해 줍니다.

일반 비트코인 스크립트(Bitcoin Script)는 작성하기는 쉽지만 추론하기는 거의 불가능합니다. 스크립트가 지출 가능한지, 위트니스가 얼마나 커질지, 어떤 분기가 죽어 있는지를 알려 주는 것이 없습니다. Miniscript는 문법을, 그러한 답을 함께 지니는 조합 가능한 프래그먼트 집합으로 제한합니다. Bitcoin Core는 버전 24.0부터 디스크립터에서 이를 이해했고 버전 25.0부터 이에 대한 서명이 가능했습니다.

작동 방식

Miniscript는 각각 알려진 옵코드 패턴에 대응하는 프래그먼트와, 프래그먼트를 보장을 깨뜨리지 않고 이어 붙이는 조합자로 구성됩니다.

어휘는 작습니다. 프래그먼트는 조건을 나타냅니다. pk(key)는 서명, older(4320)는 상대적 타임락, after(800000)는 절대적 타임락, sha256(h)는 해시 원상입니다. 조합자는 구조를 나타냅니다. and_v, or_d, thresh, andor는 사람들이 만드는 거의 모든 것을 포괄합니다. 복구 지갑은 or_d(pk(daily_key), and_v(v:pk(backup_key), older(52560)))로 읽히는데, 이는 사람이 확인할 수 있고 컴파일러가 스크립트로 바꿀 수 있는 정책입니다.

모든 프래그먼트는 타입과 속성 집합을 지니며, 이 타입 시스템이 전체를 작동하게 만듭니다. 조합은 속성이 맞아떨어지는 곳에서만 허용되므로, 아무도 충족할 수 없는 스크립트를 만들거나 제3자가 전송 중에 변조할 수 있는 스크립트를 만드는 정책은 자금을 안에 둔 채 온체인에서 실패하는 대신 컴파일되지 않습니다.

구조가 알려져 있기 때문에 자금을 넣기 전에 세 가지 질문에 정확한 답이 나옵니다. 최악의 경우 위트니스는 가중치 단위로 얼마나 큰가. 어떤 키, 원상, 경과 시간의 조합이 실제로 이것을 지출할 수 있는가. 스크립트가 한도 안에 드는가, 즉 합의 규칙상 10,000바이트이고, 지출을 노드가 중계할지를 좌우하는 P2WSH 위트니스 스크립트에 대해 더 엄격한 표준성 상한 3,600바이트 안에 드는가.

마지막 조각은 충족입니다. 스크립트와 서명자가 가진 재료가 주어지면 Miniscript 구현이 가장 저렴한 유효 위트니스를 스스로 구성할 수 있습니다. 그래서 지갑이 임의의 정책마다 맞춤 서명 코드를 싣지 않고도 지원할 수 있습니다.

확인할 수 있는 곳

Miniscript는 하나의 키, 하나의 서명 외에 다른 것을 하는 지갑을 원하기 전까지는 보이지 않습니다.

Bitcoin Core는 단계적으로 이를 도입했습니다. 버전 24.0은 관찰용으로 P2WSH 디스크립터 안의 Miniscript를 해석했고, 버전 25.0은 이에 대한 서명 기능을 추가했으며, 이것이 참조 클라이언트에서 정책 지갑을 쓸 수 있게 만든 릴리스입니다. Ledger의 Bitcoin 앱은 BIP-388에 정의된 지갑 정책 형식을 통해 정책을 등록하므로, 하드웨어 장치가 한 번도 본 적 없는 스크립트를 표시하고 승인할 수 있습니다.

가장 분명한 소비자 제품은 Liana로, 전체 전제가 Miniscript 정책인 지갑입니다. 오늘은 평소 키로 지출하거나, 정해진 블록 수가 지난 뒤에는 다른 사람이 보관하는 복구 키로 지출합니다. 상속 계획과 단계적으로 올라가는 승인 경로를 지닌 법인 계좌도 같은 형태입니다.

단일 서명 지갑을 보유하고 있다면 이 모든 것은 여러분과 무관합니다. 회사가 계속 운영되는 데 의존하지 않는 백업 경로를 원할 때 중요해지며, 직접 만든 스크립트가 유일한 선택이 될 수 있는 지점에서 가장 중요합니다.

Miniscript vs 출력 디스크립터

디스크립터는 어떤 키와 어떤 스크립트 타입인지를 말하고, Miniscript는 스크립트가 내부에서 무엇을 하는지를 말합니다. 이들은 대안이 아니라 계층이며 중첩됩니다. wsh(or_d(pk(A), and_v(v:pk(B), older(52560))))는 내부 표현식이 Miniscript인 디스크립터입니다.

Miniscript 이전에 디스크립터는 wpkh, sortedmulti, tr 같은 고정된 템플릿 목록만 지칭할 수 있었습니다. 그 목록 밖의 것은 손으로 쓴 16진수와, 주소는 관찰할 수 있지만 결코 지출할 수 없는 지갑을 뜻했습니다. Miniscript는 내부 자리를 임의의 정책에 열어 주면서 디스크립터의 체크섬, 키 출처, 파생 경로를 그대로 유지하며, 그래서 Miniscript 백업은 여전히 인쇄할 수 있는 한 줄의 텍스트입니다.

혼동하기 쉬운 용어

자주 묻는 질문

일반 지갑에 Miniscript가 필요합니까?

아닙니다. 단일 서명 지갑과 표준 멀티시그 쿼럼은 이미 일반 디스크립터 템플릿으로 처리됩니다. Miniscript는 타임락이 걸린 복구 경로나 어떤 템플릿도 설명하지 못하는 정책을 원할 때 제 역할을 합니다.

Miniscript 지갑은 백업하기가 더 어렵습니까?

그다지 어렵지 않습니다. 백업은 여전히 시드 문구와 정책을 담은 디스크립터 텍스트 한 줄이며, 그 줄은 비밀이 아닙니다. 정책 텍스트를 잃는 것은 멀티시그 디스크립터를 잃는 것만큼 심각합니다.

다음에 읽을 글

관련 용어

프로토콜과 업그레이드 분야의 다른 용어

이 페이지를 영어로 읽기