Сокращенный перевод статьи Питера Вулле и Эндрю Поэльстра в блоге Blockstream на Medium.
В биткоине всегда был механизм, позволяющий тратить монеты более сложным (не только через один ключ) методом: система скриптов (Script). И хотя скрипты сегодня в первую очередь используется в платежах с одним ключом, они также являются основой для кошельков с мультиподписью, атомарных свопов и Lightning Network.
Однако это еще не всё. Скрипт может использоваться для представления сложных условий, необходимых для совершения транзакции: например, "два из A, B, C" и "D или (E и F)", где каждый A-F представляет уникальный ключ.
Одна из причин, по которой мы не слишком близки к использованию всего потенциала скриптов, заключается в том, что создание скриптов для нетривиальных задач является обременительным: сложно проверить их правильность и безопасность, а еще труднее найти самый оптимальный метод их применения.
И это лишь часть проблемы: даже когда у вас есть безопасный скрипт, разработка приложений и протоколов для согласования и построения транзакций с их использованием требует много отдельной разработки каждый раз, когда создается новая конструкция. Любой изменение часто требует сопоставления совместимых скриптов, и каждое добавление требует больше ресурсов для анализа и обеспечения их безопасной работы.
Но что, если вместо этого биткоин мог бы работать с любым скриптом, а не только с несколькими? Мы бы не были ограничены использованием одноразовых проектов и могли бы приступить к разработке приложений, которые создают и используют созданные на лету скрипты на основе определенных пользователем требований. Разработчики кошельков могут также ввести больше вариантов на основе скриптов, сохраняя при этом совместимость с другими кошельками.
Miniscript — это язык для представления биткоин-скриптов в структурированном виде, обеспечивающий эффективный анализ, сопоставление, общие подписи и многое другое. Создание скриптов, удобных для восприятия человеком (или разработчиком...), является лишь одной из особенностей Miniscript. Его основная цель — включить автоматическую логику над Script.
Одним из возможных вариантов примерения Miniscript может стать поиск оптимального скрипта, который реализует заданный набор условий расходования. В биткоин-скрипте есть много разных способов требовать подписи. Даже для опытного разработчика правильный выбор может зависеть от относительной вероятности выполнения различных условий, и его будет сложно рассчитать. Наш онлайн-компилятор может мгновенно найти оптимальный Miniscript, соответствующий определенному способу расходования.
Как только эффективный скрипт найден, общим препятствием является отсутствие взаимодействия между различными механизмами расходования. Пользователи, которые хотят реализовать, например, долгосрочную временную блокировку или сложные требования к мультиподписи, могут опасаться, что их контрагенты не имеют (или не будут иметь) программное обеспечение для распознавания и расходования монет определенным способом.
Miniscript, благодаря непосредственному представлению условий расходования, позволяет выражать произвольные политики таким образом, чтобы каждый мог:
- вычислить связанный адрес со скриптом;
- определить, какие подписчики являются необходимыми или достаточными для подписания в определенное время;
- произвести действительную транзакцию, учитывая достаточный набор подписей.
Пользователям не нужно беспокоиться о том, что все участники используют совместимое программное обеспечение или что такое программное обеспечение будет продолжать существовать к тому времени, когда потребуются такая временная блокировка.
С проблемой подписания связана проблема доказательства резервов - процесс, посредством которого компания доказывает, что она может потратить определенную сумму биткоинов, фактически не тратя их. Несмотря на то, что для этого уже существуют инструменты, такие как Proof of Reserves от Blockstream, в индустрии пока нет единого стандарта. Без Miniscript, вероятно, не было возможности достичь стандарта, который мог бы охватить все многообразие кастодиальных решений, используемых сегодня.
Давайте рассмотрим конкретный случай, когда компания хранит большое количество биткоинов и желает, чтобы эти монеты можно было тратить только с согласия большинства её директоров. Однако некоторые отдельные директора хотят использовать собственное программное и аппаратное обеспечение кошелька со сложными настройками подписи (включающими несколько ключей в разных местах), и не хотят участвовать в процессе, который требует один ключ, предоставленный приложением.
Без Miniscript создание скрипта, отвечающего всем требованиям подписавшихся, при одновременном заверении всех подписчиков в том, что скрипт будет надежным и полным и что программное обеспечение их кошелька было совместимо с результатом, представляло бы непреодолимую проблему.
Используя Miniscript, эти директора могут просто составить свою политику в своем собственном программном обеспечении кошелька, создав единую политику, которая описывает пороговое требование, а затем скомпилировать её в Miniscript. Они могут прямо проверить, что выходные данные компилятора соответствуют исходной политике и что исходная политика соответствует всем требованиям. Затем они могут использовать любое совместимое с Miniscript программное обеспечение для генерации адресов, по которым можно получать монеты или собирать подписи во время расходования.