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.