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 interfaces, позволяя составлять только совместимые выражения.

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.

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

Одна policy может компилироваться в эквивалентные Miniscripts с разными 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 годаСначала источники · Не является инвестиционной рекомендацией