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

Контракты умные и не очень

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

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

Что такой смарт-контракт? Это такой же контракт, сделка, договор между людьми о купле-продаже, о предоставлении залога или различного рода услуг. Такая договоренность обязательно имеет перечень условий, которые обсуждаются партнерами и запечатываются в реестре до окончания срока контракта. Но есть несколько фундаментальных отличий между обычным контрактом и смарт-контрактом:

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

 Во-вторых, смарт-контракты работают на блокчейне, что в сотни раз повышает их эффективность и КПД. Так, у любой из сторон остается минимум шансов провернуть мошенническую схему и оставить партнера «с носом».

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

Смарт — не значит безупречный

Не существует окончательно совершенных и безусловно идеальных технологий. Каждый день разработчики трудятся над обновлениями, патчами, фиксами для программ, игр, прошивок и операционных систем. Инженеры ломают голову над конструкцией нового шасси для автомобиля, математики находят новые формулы и уравнения. Разработчикам Bitcoin Core приходится работать еще больше и упорнее, чтобы не просто поддерживать блокчейн, но и развивать его семимильными шагами.

Сегодня непросто удивить кого-то блокчейном, зато легко озадачить тем, какие возможности он открывает для современного человека. Автоматически выполняемые сделки — это один из уникальных примеров того, какие технологии можно привить к базе распределенного реестра и как это удобно в повседневной жизни.

Смарт-контракт, он же автоматическая сделка, подразумевает создание в блокчейне записи, где прописывается множество условий и согласований между участниками. Другими словами, арендуется комната, в которой Анна и Иван договариваются о сделке, ее условиях и вариантах выхода из нее. В комнате стоит специальное устройство, которое использует договор с условиями как инструкцию для написания программы. Затем устройство выдает им уникальные ключи от комнаты, а также специальный чип (подпись ключа), который подтверждает открытие замка. Главное условие — ключи разные, а чип один. Комната открывается только двумя ключами. Соответственно, лишь при соблюдении всех условий и договоренностей и при обоюдном присутствии Анны и Ивана можно войти в комнату, чтобы подтвердить завершение контракта и получить то, ради чего, собственно, и затевалась игра.

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

Объем и безопасность — главная задача

Мы знаем, что биткоины — это цифровой код, который бесконечно выполняется в рамках скрипта (программы). Пара строк в транзакции, которые записываются в блокчейн, всегда указывают на то, как биткоины поведут себя в следующем цикле. Условия распределений монет в сети требуют обязательной подписи каждой транзакции и ключа к ней, что подтверждает их подлинность, а также принадлежность кому-то.

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

Различные варианты отправки монет могут комбинироваться для организации сложных типов смарт-контрактов. То есть успешность транзакции может зависеть от нескольких условий: монеты отправятся, если Анна и Иван одновременно поставят подписи или Анна подпишет транзакцию через неделю, а Иван оставит подпись только при условии, что у него есть секретная фраза. Таких вариаций могут быть сотни. Это хорошо для гибкости системы, но плохо для оптимизации и безопасности.

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

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

MAST or don’t

Merkelized Abstract Syntax Tree — меркелизированное абстрактное синтаксическое дерево. Непонятно, не правда ли? Заедем с другой стороны.

Древо Меркла — это двоичная система в виде дерева, в кроне которой содержатся хэши данных, а их суммарное значение помещается в корне. То есть все возможные условия отправки монет в блокчейне хэшируются раздельно и включаются в листья дерева Меркла. Затем эта информация переваривается деревом и образует единый хэш: корень Меркла. В нем фактически и находятся монеты транзакции.

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

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

Schnorr

Система подписей Schnorr давно мелькает в списке самых горячих и ожидаемых нововведений блокчейна. Разработчики уже готовят ее к включению в грядущем обновлении. Среди специалистов в сфере криптографии эта «надстройка» считается чуть ли не венцом творения в математике. Если быть точнее, линейной математике.

Schnorr — новый алгоритм подписи транзакций, своеобразный миксер для приватных и публичных ключей. С его помощью можно смешать публичные ключи и подписи мульти-транзакции в единый публичный ключ и единую подпись. Или наоборот. Таким образом легче скрыть информацию о том, какой тип транзакции был использован, сколько подписей и ключей использовалось для ее активации и так далее.

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

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

Taproot — корень добра

Taproot — это следующий этап организации смарт-контрактов в блокчейне. Он включает в себя основные характеристики всех предыдущих алгоритмов и модифицирует их по собственному сценарию. Или, как говорят разработчики, умножает на скрипт.

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

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

Graftroot — вишенка на торте

В данном случае обойдемся без сложных определений, умножений, скриптов и хэширований, а просто рассмотрим пример:

Анна и Иван вновь заключают договор на несколько биткоинов, которые они могут отправлять друг другу без ограничений. Анна хочет отправить деньги Ивану через неделю после открытия контракта. Иван же собирается отправлять монеты только после того, как у него появится секретная фраза. В этом случае они смешивают свои публичные ключи в один общий и переводят средства. Когда подходит срок закрытия контракта, они договариваются о способе его закрытия и создают на основе этого правильную «общую» подпись. Так, по итогу всех манипуляций закрытый смарт-контракт выглядит как обычная транзакция в блокчейне с одним-единственным условием. И не важно, сколько условий ставили Анна и Иван для выполнения контракта. Их могут быть тысячи, но в итоге останется одно.

Главная роль Graftroot в формировании смарт-контрактов — это полное упрощение транзакции на выходе, независимо от того, сколько десятков, сотен или тысяч условий мог содержать договор. Но без минусов и тут не обошлось.

Graftroot подразумевает интерактивное взаимодействие участников контракта. То есть Анна и Иван должны договориться об условиях договора вне блокчейна, а также продумать запасные варианты закрытия контракта. Если это не останавливает участников, то больше никаких минусов у системы нет.

Три в одном — идеальный тандем

Грегори Максвелл считает, что Graftroot, Taproot и Schnorr — это взаимодополняющие технологии, которые не могут существовать по отдельности. Вместе же они совершат революцию в безопасности смарт-контрактов и оптимизации информационных объемов, благодаря хэшированию и упрощению.

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