Что такое Taproot и чем он полезен для Биткоина?

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

Данная статья не является инвестиционным советом и автор не несёт никакой ответсвенности за возможные потери любой природы. Делайте свое исследование, вникайте во всё сами. Не доверяйте, а проверяйте.

Taproot является самым ожидаемым обновлением протокола Биткоина. В записи будет объяснено в чем заключается это обновление и из-за чего оно так важно.

tarpoot update

Тапрут привнесет две важных особенности в протокол Биткоина:

  • MAST
  • Shnorr signature scheme

Каждое из этих особенностей является крайне заметной для протокола Биткоина, а вместе они серьезнейшим образом улучшают конфиденциальность Биткоина и добавляют возможность умных контрактов (привед, любидели эфира-бутирата и прочие одепты «крипты» 2++ поколения).

Что такое MAST?

MAST является аббревиатурой от Merkelized Abstract Syntax Tree, или Меркилизованное дерево абстрактного синтаксиса, прежде чем объяснить, что же такое MAST, необходимо объяснить как в данный момент Биткоин оперирует умными контактами.

P2SH

Умные контракты создаются с рядом условий (скриптов) которые должны быть выполнены для того, чтобы контракт был исполнен.

Для примера, первым условием умного контракта может быть что сатошики могут быть переданы только черз 1 день, вторым условием может быть то что Иван может перевести сатошики моментально. Как минимум, одно из условий должно быть выполнено чтобы сатошики(напомню, 100 миллионов сатоши составляет 1 биткоин) переместились.

Эти условия внутри умного контракта спрятаны от публики и только создатель контракта знает их. Эти условия скрыты с помощью т.н. хэша* (условие — секретный ключ, хэш — публичный). Это также известно как P2SH(pay to script hash), или оплата по хэшу скрипта. Когда сатошики перемешаются, тогда условие и его хэш становятся публичными. Позже любой может проверить условие и хэш передающего скрипта.

*хэш — это случайная псевдо-последовательность цифр и букв, на манер адреса Биткоина. Для получения хэша(или также используется слово дайджест «сообщения»). Для получения хэша используется однонаправленная функция (некоторый аналог производной в математическом анализе, но с дополнительными свойствами), с помощью которой всегда можно из сообщения X получить хэш Y, но наоборот, из Y получить X практический невозможно(в этом основное отличие от производной, в случае которой разыскание первообразной функции хоть и представлет собой занчительно более сложныую задачу, но зачастую при должном навыке решаемую за разумное время). В данном случае Y получается публичным ключом, а Х — секретным(или приватным) ключом.

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

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

Зачем MAST вместо P2SH?

Меркилизованное дерево абстрактного синтаксиса является способом решения задач конфиденциальности и объема данных при использовании умных контрактов в системе Биткоина.

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

MAST, с дургой стороны, позволяет хэшировать каждое из условий индивидуально, и только после того как каждое условие было индивидуально хэшировано, они потому хешируются ещё раз в единый «мастер» хэш, также известный как корень Меркла. Это влечет за собой необходимость раскрытия только одного из условий после подтверждения перевода, в то время как все прочие условия остаются спрятанными, т.е. кониденциальными.

Что есть Schnorr?

(SDSS) Schnorr Digital Signature Scheme или цифровая подпись по схеме Шнорра — это грядушее изменение текущей схемы подписания транзакций с системе Биткоина, известной как ECDSA или алгоритм цифровой подписи построенный не на конечном поле простых чисел, а на группе точек принадлежащей некотрой эллептической кривой(в случае Биткоина используется кривая известная как secp256k1, или y^2 = x ^3 + 7).

Может выглядеть странно, но Шнорр-подписи были созданы раньше ECDSA, но не использовались в сети Биткоина в силу того, что Клаус Шнорр запатентовал их. Патент истек в 2008 году, и Сатоши вероятно предпочел ECDSA из-за того, что они были открытыми, более понятными и более широко известными.

Что есть подпись?

Все транзакции в сети Биткоина, которые сохраняются в цепи блоков, должны быть подписаны прежде чем разосланы всем остальным участникам сети. Каждая транзакция требует либо единичной подписи (обычные кошельки) либо множественные подписи (мульти-подписные кошельки). Обычные кошельки прекрасно подходят для персонального использования, и прививают пользователям ответсвенность за собственные фонды, в то же время мульти-подписные кошельки требуют нескольких подписей (например 2 из 3, 3 из 5, и т.п.) и могут быть использованы некоторым коллективом физических\юридических лиц.

Что есть мульти-подписанная транзакция?

Мульти-подписанная транзакция должна быть подписана несколькю конфиденциальными ключами. Для примера, такая транзакция должна быть подписана минимум 4 из 5 конфиденциальных ключей прежде чем она будет разослана по сети.

Зачем Шнорр вместо ECDSA?

По умолчанию, Биткоин не поддерживает мульти-подпись (можете проверить например поставив Bitcoin core 0.20.x), и использует некоторые ободные пути, чтобы поддержать мульти-подпись (не буду вдаваться в детали, но можете поставить Electrum и там будет возможность создать мульти-подписной кошелёк). В реальности это увеличивает размер транзакции и напрямую влияет на плату за транзакцию(больше байт, больше сатошиков тратится), поскольку используется больше одного конфиданциального ключа. А теперь прадставим себе мультиподпись в которой 10000 участников, так недолго и за пределы блока выйти.

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

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

Все мульти-подписанные транзакции объединяются в одну «большую» транзакцию и снова хешируются. Это решает сразу две задачи — улучшается конфиденциальность и уменьшается объем затраченных данных.