Перейти к содержимому
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))), а это политика, которую человек может проверить, а компилятор может превратить в скрипт.

Каждый фрагмент несет тип и набор свойств, и именно система типов заставляет всю конструкцию работать. Композиция допускается только там, где свойства совпадают, поэтому политика, которая дала бы скрипт, который никто не сможет удовлетворить, или скрипт, который третья сторона могла бы изменить по пути, не компилируется, вместо того чтобы отказать в сети с вашими деньгами внутри.

Поскольку структура известна, три вопроса получают точные ответы до того, как вы пополните что-либо. Каков размер свидетеля в худшем случае, в единицах веса. Какие сочетания ключей, прообразов и прошедшего времени действительно могут потратить этот скрипт. Помещается ли скрипт в пределы, то есть 10 000 байт по консенсусу и более жесткий стандартный потолок в 3600 байт для скрипта свидетеля P2WSH, от которого зависит, будут ли узлы вообще передавать вашу трату.

Последняя часть представляет собой удовлетворение. Имея скрипт и материал, которым располагает подписывающий, реализация Miniscript может сама построить самый дешевый действительный свидетель. Именно поэтому кошелек может поддерживать произвольные политики, не поставляя отдельный код подписи для каждой из них.

Где это встречается

Miniscript незаметен, пока вам не понадобится кошелек, который делает что-то помимо одного ключа и одной подписи.

Bitcoin Core пришел к нему поэтапно: версия 24.0 разбирала Miniscript внутри дескрипторов P2WSH для наблюдения, а версия 25.0 добавила возможность подписывать для них, и именно этот выпуск сделал кошельки с политиками пригодными к использованию из эталонного клиента. Приложение Bitcoin от Ledger регистрирует политики через формат политики кошелька, определенный в BIP-388, поэтому аппаратное устройство может показать и одобрить скрипт, которого оно никогда раньше не видело.

Самым наглядным потребительским продуктом является Liana, кошелек, вся основа которого есть политика Miniscript: тратить сегодня своим обычным ключом или через заданное число блоков ключом восстановления, который хранит кто-то другой. Планирование наследования и счета компаний с поэтапным путем одобрения имеют ту же форму.

Если у вас кошелек с одной подписью, ничего из этого вас не касается. Это начинает иметь значение, когда вам нужен резервный путь, не зависящий от того, продолжит ли компания работать, и важнее всего в тот момент, когда самодельный скрипт иначе был бы единственным вариантом.

Miniscript vs выходной дескриптор

Дескриптор говорит, какие ключи и какой тип скрипта; Miniscript говорит, что скрипт делает внутри. Это слои, а не альтернативы, и они вкладываются друг в друга: wsh(or_d(pk(A),and_v(v:pk(B),older(52560)))) есть дескриптор, внутреннее выражение которого является Miniscript.

До Miniscript дескрипторы могли называть только фиксированный набор шаблонов, таких как wpkh, sortedmulti и tr. Все, что выходило за пределы этого набора, означало написанный вручную hex и кошелек, который мог наблюдать адрес, но никогда не мог тратить с него. Miniscript открывает внутреннюю позицию для произвольных политик, сохраняя контрольную сумму дескриптора, происхождение ключей и пути деривации точно такими, какими они были, и поэтому резервная копия Miniscript остается одной строкой текста, которую можно напечатать.

Не путать с

Часто задаваемые вопросы

Нужен ли Miniscript для обычного кошелька?

Нет. Кошелек с одной подписью и стандартный кворум мультиподписи уже покрыты обычными шаблонами дескрипторов. Miniscript оправдывает себя, когда вам нужен путь восстановления с блокировкой по времени или политика, которую не описывает ни один шаблон.

Сложнее ли сделать резервную копию кошелька Miniscript?

Ненамного. Резервная копия по-прежнему состоит из сид-фраз плюс одной строки текста дескриптора, содержащей политику, и эта строка не является секретной. Потеря текста политики так же серьезна, как потеря дескриптора мультиподписи.

Читайте далее

Связанные термины

Еще в разделе «Протокол и обновления»

Читать эту страницу на английском