132 / 691MINI

Miniscript

Структурована мова для Bitcoin Script

Miniscript — структуроване типізоване подання обмеженої підмножини Bitcoin Script. Воно дає змогу складати умови витрачання, аналізувати властивості та будувати коректну satisfaction без окремої логіки для кожного script.

Miniscript — не новий opcode, не consensus rule і не універсальна мова програмування. Це проміжний шар між людською spending policy та конкретним Bitcoin Script, зазвичай усередині wsh() або Taproot output descriptor.

Miniscript структурує лише вибрану підмножину Bitcoin Script для підписів, hashlocks, timelocks та їх поєднань. Він не змінює consensus і не додає opcode; монети захищає отриманий Script, а Miniscript є його аналізованим поданням.

Spending policy формулює намір: «A або B після 144 блоків». Compiler обирає конкретний Miniscript, що перекладається в Bitcoin Script. Output Descriptor додатково прив’язує script до ключів, derivation, мережі та checksum, наприклад wsh(...).

pk(), older(), after(), sha256(), and_v(), or_d() і thresh() мають точну семантику. Wrappers на кшталт v: змінюють тип або поведінку. Типи B, V, K і W контролюють stack-інтерфейси, дозволяючи складати лише сумісні вирази.

Satisfaction — witness, що робить гілку істинною; dissatisfaction — канонічне хибне значення для AND, OR і threshold. Загальний signer обирає шлях за доступними підписами, preimages і timelocks. Miniscript не створює private keys і не обходить умови.

after(n) використовує абсолютний nLockTime, older(n) — відносний nSequence за BIP 68. Locks за висотою й часом мають бути сумісними, а поля транзакції правильними; витрату зрештою перевіряє consensus Bitcoin Script, не текст policy.

Статичний аналіз обмежує розмір Script і witness, кількість операцій та signature checks, stack elements і вартість satisfaction шляхів. Результат залежить від P2WSH чи Tapscript і мусить вкладатися в consensus та standardness limits.

Коректність типів гарантує безпечну композицію, а не мудру custody policy. Аналіз malleability питає, чи може третя сторона змінити чинну satisfaction. Гарантії спираються на припущення, як однаковий доступ до hash preimages; повторні ключі можуть заборонятися.

Одна policy може компілюватися в кілька рівнозначних Miniscript із різними Script і witness sizes. Compiler оптимізує cost model; ваги 9@ — підказки ймовірності, не consensus rules. Інша компіляція зазвичай створює інші адреси.

У descriptor wallet Miniscript міститься в wsh() або Taproot script path разом із key origins. PSBT передає транзакцію та derivation до signers, але пристрій має підтримувати descriptor і policy. На дисплеї перевірте ключі, threshold, timelocks і зайві гілки.

Збережіть точний descriptor із checksum, key map, derivation paths, мережу, receive/change, range і scan birthday. Запустіть parser/analyzer, виведіть кілька адрес і протестуйте кожну satisfaction на regtest чи signet. Перевірте watch-only recovery та підпис до внесення коштів. Джерела: BIP 379 — Miniscript; Miniscript Reference — Specification and Analyzer; Bitcoin Core — Output Descriptors; Bitcoin Core 24.0 — Miniscript Support; BIP 388 — Wallet Policies for Descriptor Wallets.

Для повної картини прочитайте також Bitcoin Script, Output Descriptor, Multisig, Andrew Poelstra, Timelock, Bitcoin. На цю статтю також посилаються Output Descriptor, Bitcoin Script opcode, Dead Man’s Switch, Andrew Poelstra.

DOC · 001BIP 379 — MiniscriptСпецифікація ↗DOC · 002Miniscript Reference — Specification and AnalyzerСпецифікація ↗DOC · 003Bitcoin Core — Output DescriptorsДокументація ↗DOC · 004Bitcoin Core 24.0 — Miniscript SupportДокументація ↗DOC · 005BIP 388 — Wallet Policies for Descriptor WalletsСпецифікація ↗
Перевірено 1 серпня 2026Спочатку джерела · Не інвестиційна порада