Что такое Taproot?
Что такое Taproot?
Технология Taproot — это предложения по улучшению протокола биткоина BIP-340 и BIP-341. 21 января 2020 года разработчик Питер Велле включил в запрос на принятие изменений для софтфорка.
В 1991 году немецкий криптограф, профессор Франкфуртского университета Клаус-Петер Шнорр предложил схему подписей, впоследствии названную в его честь.
Предложенная Шнорром схема является модификацией схем Эль-Гамаля (1985) и Фиата-Шамира (1986), но имеет меньший размер подписи, а также использует наработки криптографа Дэвида Чаума.
Перед публикацией схемы Шнорр получил на нее ряд патентов, срок действия которых истек в 2008 году, когда Сатоши Накамото представил биткоин. Подписи Шнорра на тот момент уже можно было использовать, но они не были стандартизированы и не получили широкого распространения.
Когда Накамото создавал биткоин, он должен был выбрать одну из существующих схем подписи. Ему был необходим простой в использовании и безопасный алгоритм с открытым исходным кодом. Этим требованиям отвечала ECDSA. Предшественник ECDSA, алгоритм DSA, представлял собой гибрид схемы Шнорра и схемы Эль-Гамаля и был создан для обхода патентов Шнорра.
ECDSA в биткоине стала быстрее и эффективнее благодаря работам Питера Велле и его коллег, которые создали улучшенную эллиптическую кривую, secp256k1.ECDSA имеет отдельные недостатки, и разработчики искали альтернативу. Первые обсуждения возможной реализации подписей Шнорра в сети биткоина состоялись в 2014 году, а спустя несколько лет разработчик Питер Велле опубликовал Schnorr BIP.
Кто и когда изобрел Taproot?
Технологию Taproot спроектировал и предложил разработчик Bitcoin Core и бывший CTO компании Blockstream Грегори Максвелл .
В апреле 2018 года математик Эндрю Поэлстра опубликовал математическое доказательство безопасности (security proof). В июле того же года инженер Xapo и разработчик Bitcoin Core Энтони Таунс предложил решение, позволяющее увеличить объем данных, используемых Taproot.
6 мая 2019 года Питер Велле опубликовал предложения по улучшению протокола биткоина, в котором представил обновления Taproot в связке с подписями Шнорра и MAST. Для имплементации обновлений в кодовую базу биткоина Велле предложил провести софтфорк.
21 января 2020 года Велле включил Taproot в запрос на принятие изменений для очередного софтфорка.
Какие возможности дает Taproot?
Если подписи Шнорра позволяют мультиподписным транзакциям выглядеть как стандартные (Pay-to-Public-Key-Hash) транзакции, то Taproot в сочетании с подписями Шнорра расширяет такие возможности, увеличивая группу типов транзакций, которым можно придавать видимость стандартных:
- использование P2PKH и P2WPKH, т.е., одиночных трат;
- n-из-n траты с MuSig или эквивалентов (аналогичных текущему использованию P2SH и P2WSH 2-из-2 мультиподписей);
- k-из-n (для минимальных значений n) с использованием наиболее распространенного k подписантов;
- закрытия каналов в сети Lightning Network, атомарные свопы и другие протоколы, которые иногда могут приводить к тому, что все стороны согласны с результатом.
Эти четыре категории сценариев использования представляют большинство транзакций биткоина на сегодняшний день. Независимо от сложности контракта, Taproot позволяет придавать совместному результату в блокчейне вид расходов одного ключа.
Остальные скрипты, отображающие другие результаты контракта, не добавляются в блокчейн, благодаря чему в конкретном блоке высвобождается пространство для более сложных транзакций.
Как работает Taproot?
Понимание Taproot требует предварительного понимания решения MAST.
Технологию MAST (абстрактное синтаксическое дерево на базе дерева Меркла) предложил в 2016 году разработчик Джонсон Лау.
MAST предлагает использование новой программы-свидетеля и с помощью дерева Меркла декодирует взаимоисключающие ветви в скрипте.
Дерево Меркла – это структура данных; термин «дерево» описывает структуру его ветвей. Обычно дерево Меркла изображают, как на графике ниже: корень находится вверху, листья – в нижней части графика.
С помощью MAST можно создавать сложные контракты с множеством различных спецификаторов. Открывается только выполняемый скрипт, что экономит пространство в блокчейне и позволяет реализовывать более сложные скрипты/контракты.
Дерево Меркла создается через индивидуальное хеширование каждого скрипта с целью получения короткого уникального идентификатора. Далее каждый идентификатор объединяется с другим идентификатором и снова хешируется, создавая еще один короткий уникальный идентификатор для данной пары.
Этот процесс повторяется и продолжается до тех пор, пока не остается только один идентификатор, именуемый корнем Меркла (Адрес = Хеш (1,2) на графике выше), который уникальным образом идентифицирует весь набор данных в нескольких байтах. Корень Меркла можно рассматривать как «сейф» для монет.
В отличие от Pay-to-Script-Hash (P2SH), MAST позволяет структурировать в дереве Меркла множество условий расходования. При этом раскрываются только выполненные условия: с помощью корня и дерева Меркла подтверждается, что условие находится в дереве Меркла. Остальное дерево остается скрытым.
Например, если у нас есть сложный скрипт, который говорит, что сторона не может потратить свои монеты до истечения срока в месяц (таймлок), или монеты можно потратить посредством 3-из-5 мультиподписной транзакции, то оба условия будут раскрыты, как только монеты окажутся потрачены (такая схема работает сейчас в биткоине).
MAST дает следующую возможность: если любые данные в дереве Меркла раскрываются, то корень Меркла и ряд дополнительных данных (именуемых путем Меркла) можно использовать для подтверждения того, что конкретные данные были включены в дерево Меркла. Остальное дерево (и, соответственно, другие условия) остаются хешированными и скрытыми. Это означает, что при условии согласия всех участников раскрывать необходимо только выполненное условие.
Пользователи сложных контрактов могут создавать транзакции меньшего размера, а выигрыш в эффективности оказывается больше в случае более сложных контрактов с большим числом подскриптов. MAST, в отличие от любых других существующих механизмов, позволяет иметь множество дополнительных ветвей, что позволяет создавать более продвинутые смарт-контракты без дополнительной стоимости, которая обременяла бы ноды биткоина.
На иллюстрации выше Алиса может даже добавить к структуре MAST более длинную цепь бенефициаров, не изменяя количество используемых байтов. Размер комиссий не увеличивается, поскольку она по-прежнему тратит свои биткоины, используя всего лишь 32 байта. На уровне сети блоки смогут обрабатывать большее число сложных транзакций.
Изъян состоит в том, что по умолчанию для сохранения должного уровня приватности каждый вынужден использовать структуру MAST. Верхняя ветвь дерева Меркла всегда видима, и наблюдатели могут понять, что существуют другие условия траты. Кроме того, возрастает нагрузка на большинство транзакций, не нуждающихся в дополнительном скрипте, что приводит к росту их стоимости.
MAST до сих пор не имплементирован в биткоин, так как необходимые для этого изменения слишком сложны и могут привести к последствиям, которые нелегко просчитать. Возможным решением проблемы может стать пакет решений Шнорр/Taproot/Tapscript, поскольку он выступает золотой серединой между простотой и дополнительным функционалом.
Как Taproot улучшает MAST?
Taproot предлагает собственную версию дерева Меркла, именуемую деревом скрипта. Участники могут выбрать расходование с помощью:
- публичного ключа в качества обычной подписи;
- расходование с помощью скрипта.
В первом варианте это путь расходования по умолчанию, где одиночные или мультисторонние публичные ключи неразличимы.
Во втором случае скрытые скрипты не раскрываются до тех пор, пока не произведена трата. Разные скрипты можно организовать в дерево Меркла, и выходы также можно потратить, раскрыв один из спецификаторов.
Если мы расходуем транзакцию с помощью первичного скрипта траты, мы просто приводим доказательство Меркла, которое состоит из первичного скрипта траты и хеша альтернативного скрипта траты – этого достаточно для подтверждения того, что первичный скрипт траты содержится в дереве скрипта.
Taproot использует структуру MAST, чтобы скрыть условия, стоящие за корнем Меркла. Сам корень Меркла в этом сценарии скрывается и позволяет осуществлять посредством ключа прямые траты. В блокчейн отправляется только одиночный ключ – никто не видит, что существуют дополнительные условия.
В комбинации с подписями Шнорра структура MAST скрыта благодаря выходам Taproot. В верхней части дерева Меркла присутствует опция публикации одиночного публичного ключа и подписи. В результате транзакции P2PKH и P2SH выглядят идентично.
Иллюстрацией может служить закрытие Lightning-канала.
Lightning-каналы – это вариации мультиподписи 2-из-2. Вместо того, чтобы закрывать транзакцию с помощью громоздкого скрипта, Шнорр позволяет объединить подписи и представить в виде открытого ключа/подписи Taproot. Когда обе стороны согласны, то результат выглядит так, словно кто-то израсходовал этот выход с помощью обычной подписи, послав на два адреса. Наблюдатель не сможет определить, что это Lightning-канал.
Рассылки ForkLog: держите руку на пульсе биткоин-индустрии!