17 июня 2021

Taproot – важное обновление в протоколе Bitcoin

Технология Taproot Bitcoin – что это значит

После обновления Segregated Witness (SegWit) в 2017 году в сеть биткоина не вносилось значительных изменений, которые бы существенно влияли на ее работу.

Чтобы улучшить масштабируемость сети, изменить механику скриптов протокола Bitcoin, а также конфиденциальность и безопасность разработчики предложили модификацию скриптов протокола – софтфорк биткоина Taproot. Данное обновление решили объединить с крупным обновлением под названием подписи Шнорра. 

Идею внедрения Taproot (activation) предложил один из разработчиков оригинального биткоин-кошелька Bitcoin Core Грег Максвелл еще в начале 2018 года, но интегрировали его в библиотеку только в октябре 2020 года. Для того чтобы изменения вступили в силу, большинство майнеров должны его принять. По состоянию на июнь 2021 года обновление Taproot поддержало 98% майнеров.

Что такое Taproot биткоина

Taproot – это софтфорк биткоина, направленный на модификацию скриптов протокола для многостороннего улучшения его работы. Выбранное название символично (taproot в переводе с англ. – корень), поскольку отражает суть обновления: некоторые данные транзакций будут храниться метафорически «глубоко в почве». Софтфорк – это обновление сети, которое не требует смены моделей консенсуса и может быть произведено без перезапуска или остановки сети. При этом даже старые клиенты и ноды биткоин протокола будут получать валидные данные – просто часть новых данных будет для них недоступна.

Принципы работы и значение обновления для экосистемы Bitcoin

В текущей реализации биткоина создание транзакции, особенно, если это касается транзакций с несколькими выходами – то есть переводы с одного на несколько адресов –  может быть достаточно сложным. Сюда включают таймлоки (период ожидания), которые могут задавать пользователи, и мультиподписи для повышения защиты транзакций с различными алгоритмами “разрешения” траты выходов.

Любая транзакция в сети Bitcoin активирует скрипты, которые определяют, какие действия пользователи могут совершать с монетами. Чтобы подтвердить право на использование BTC, пользователи подписывают транзакции с помощью приватного ключа (Private Key). Когда монеты потрачены, скрипты попадают в общую сеть и хранятся в блокчейне, из-за чего возникают две проблемы:

  1. Увеличивается размер блокчейна. Каждая копия занимает более 200 Гб и со временем будет только расти. Это приведет к серьезной проблеме хранения данных в будущем.
  2. Возникает угроза анонимности транзакций. Скрипты раскрывают некоторые детали о пользователях, которые потратили монеты.

Это позволяет любому пользователю обнаружить транзакции, в которых были задействованы сложные скрипты. А аналитическим компаниям, таким как Chainalisys, будет проще отслеживать транзакции пользователей.

Taproot BTC позволит скрыть скрипты таким образом, что нельзя будет определить, работали ли скрипты. Например, при мониторинге не получится различить, была ли эта транзакция совершена в канале Lightning Network или через другой смарт-контракт, а также каков был изначальный алгоритм работы и другие варианты для траты. Примером может быть такой простейший контракт, где выход может потратить любой из трех адресов из заранее введенного отправителем списка получателей. Так вот, собственно трата одним из их будет выдавать только его данные – адрес получателя – а два других адреса так и останутся в тайне для всех кроме создателя смартконтракта. Сторонние пользователи смогут подтвердить только факт совершения транзакции.

Taproot в биткоин – в чем смысл обновления сети

Для реализации задуманных обновлений, Taproot решили совместить с долгожданными подписями Шнорра. Идея состоит в том, чтобы объединить подписи транзакций для создания новой подписи, что возможно только в сочетании Taproot и подписей Шнорра.

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

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

Решения P2SH (Pay to Scrypt Hash) для Bitcoin

Первой попыткой взаимодействовать со скриптами был софтфорк Pay to Scrypt Hashкоторый позволял вместо стандартного биткоин-адреса, начинающегося с 1, отправлять транзакции прямо в хэш скрипта, начинающийся с 3. Метод был реализован в BIP16 еще в 2012 году. В P2SH ограничили размер транзакции до 520 байт по сравнению с 10 000 байтов для основной сети и SegWit.

Формат P2SH позволил отправлять монеты на адреса, защищенные различными способами. Например, когда пользователи используют несколько подписей (multisig) или устанавливают пароли для шифрования данных. Это повысило надежность кошельков, но не решило другие проблемы блокчейна Bitcoin.

Факт: первоначально для активации P2SH установили порог 55%. Однако это привело к тому, что оставшиеся 45% майнеров начали производить недействительные блоки. Поэтому приняли решение повысить этот порог до 95%.

Для активации Taproot порог изначально установили на уровне 90%. Прежде чем обновление успешно внедрится в сеть, 90% добытых майнерами блоков должны включать сигнальный бит – уникальную сигнатуру, подтверждающую, что обновление принято. Причем достигнуть порога необходимо было не позднее 11 августа 2021. После нескольких неудачных попыток майнерам удалось достичь консенсуса 12 июня.

Дерево Меркла (или MAST) в Bitcoin

Чтобы уменьшить размер биткоин-транзакций, повысить конфиденциальность и увеличить возможность смарт-контрактов, разработчики биткоина предложили дополнение Merklized Abstract Syntax Trees (MAST) или Мерклезированные абстрактные синтаксические деревья.

MAST сочетает в себе функции Абстрактных синтаксических деревьев (AST) и деревьев Меркла. Вот пример, как работают абстрактные синтаксические деревья.

Функция AST позволяет описать скрипт, разделив его на несколько отдельных частей: это улучшает анализ и оптимизацию сценариев.

Дерево Меркла позволяет проверять, к какому множеству принадлежит отдельный элемент функции не обращаясь к самому множеству.

Благодаря этому пользователи могут писать скрипты, которые работали бы как динамические открытые ключи и сигнатуры. Последнее реализовано в кошельке Bitcoin SPV.

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

Любопытный факт: примечательно, что функция MAST не была описана создателем Сатоши Накамото в оригинальном White Paper биткоина.

Так же как и Taproot, MAST выполняет полезные для экосистемы функции:

  • Уменьшает размер транзакций и, соответственно, их стоимость;
  • Увеличивает конфиденциальность данных;
  • Позволяет создавать более продвинутые смарт-контракты без дополнительного обременения узлов сети Bitcoin.

При каких сценариях MAST будет полезен

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

Реализация подписей Шнорра в протоколе Bitcoin

Сатоши Накамото при создании протокола использовал Elliptic Curve Digital Signature Algorithm (ECDSA) – алгоритм с открытым ключом для создания цифровой подписи. Сатоши решил использовать ECDSA по той причине, что он был распространен и обладал открытым исходным кодом.

Немецкий криптограф и математик Клаусс Шнорр разработал Schnorr signature (SDSS) еще до создания биткоина и запатентовал свой алгоритм, поэтому открыто его использовать было нельзя вплоть до 2008 года, когда истек срок патента.

Подписи Шнорра обладают рядом преимуществ по сравнению с текущим алгоритмом:

  • Их проще реализовать;
  • Они эффективнее при создании коротких подписей;
  • Подписи Шнорра позволяют генерировать одну цифровую подпись из нескольких приватных ключей.

Другими словами, подписи Шнорра генерируют агрегированную сигнатуру (несколько подписей в одной сигнатуре) вместо использования системы мультиподписей в ECDSA, что уменьшает вес сложных транзакций.

Поэтому, разработка обновления с использованием SDSS выведет цифровые подписи в сети Bitcoin на новый уровень. Подписи Шнорра будут интегрированы вместе с обновлением Taproot.

Graftroot или криптографические подписи

Чтобы расширить возможности Taproot, crypto-разработчики решили внедрить модификацию Graftroot. Это обновление будет следующей ступенью эволюции экосистемы Bitcoin, основанной на сочетании функции Taproot и подписей Шнорра. Graftroot сделает создание транзакций и скриптов более гибким, что позволит усложнять условия для их блокировки, сохраняя при этом конфиденциальность и безопасность сети.

Интересный факт: идею Graftroot также предложил создатель улучшения Taproot Грег Максвелл, поэтому биткоин-сообщество быстро поддержало ее. Причем вторую идею Грегори представил спустя всего 13 дней после публикации первой.

Основой разработки Graftroot стало ограничение, с которым столкнулось обновление Taproot: при создании дерева изначально для записи в блокчейн можно представить одну альтернативу. Обновление Graftroot позволяет использовать неограниченное количество альтернатив без необходимости перемещать монеты.

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

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

Обсудить в Discord!