Ожидаемый софтфорк для внедрения Segregated Witness должен увеличить потенциал Биткоина сразу в нескольких отношениях. Одной из перспективных разработок, основанных на SegWit, стало решение под названием MAST (аббревиатура от Merkelized Abstract Syntax Trees - Мерклизованные абстрактные синтаксические деревья). Несмотря на то, что это решение было разработано с целью увеличения гибкости смарт-контрактов, его можно с успехом использовать для повышения масштабируемости и конфиденциальности.
Идея MAST принадлежит разработчикам Blockstream и Bitcoin Core Расселу О'Коннору ( Russell O’Connor), Питеру Вюлле (Pieter Wuille) и Петеру Тодду (Peter Todd). Разработчик Bitcoin Core Джонсон Ло (Johnson Lau) взял эту идею за основу очередного предложения по улучшению Биткоина (BIP).
Несмотря на свой огромный потенциал, при более близком рассмотрении решение MAST на удивление простое.
P2SH
Одна из составляющих MAST основывается на P2SH - механизме, который уже несколько лет используется в определенных транзакциях Биткоина.
Все действующие транзакции Биткоина «блокируют биткоины» на выходах, которыми обычно называют адреса Биткоина. Эти биткоины блокируются, чтобы впоследствии быть разблокированными, а затем снова заблокированными в последующих транзакциях; именно так биткоины эффективно перемещаются с одного адреса на другой.
Блокировка выполняется при помощи скрипта – нескольких строчек кода. В случае со стандартными транзакциями скрипт включается в выход и определяет условия траты биткоинов в последующей транзакции.
Большинство нестандартных транзакций Биткоина, например, мультиподписи (multisig) или CheckLockTimeVerify, используют схему посложнее, которая называется “P2SH” (аббревиатура от Pay to Script Hash («оплата по хэшу скрипта»).
При использовании P2SH биткоины тоже блокируются в скрипте. Однако сам скрипт не включается в выход транзакции. Вместо этого скрипт хэшируется; он кодируется и превращается в короткую и с виду случайную цепочку чисел. Эта цепочка чисел не может использоваться для воспроизведения оригинального скрипта. Однако при помощи оригинального скрипта цепочка чисел может быть воспроизведена простым хэшированием. Именно хэш скрипта и включается в выход транзакции.
Для того, чтобы разблокировать выход P2SH в следующей транзакции, недостаточно выполнения сформулированных в скрипте условий. Не стоит забывать, что узлам Биткоина в сети известен только хэш скрипта, а не сам скрипт. Поэтому, узлы не могут подтвердить выполнение описанных в скрипте условий. Они не могут подтвердить транзакцию.
Именно поэтому следующая транзакция, которая расходует биткоины, должна включать в себя весь скрипт, а также условия, сформулированные в данном скрипте: саму блокировку (скрипт), а также ключ (условия) для её разблокировки.
Хэшируя фактический скрипт, узлы Биткоина могут подтвердить, что включённый скрипт подходит к хэшу скрипта, включённому в предыдущий выход. В этом случае узлы знают, что биткоины были действительно заблокированы в конкретный скрипт. В таком случае, они могут подтвердить выполнение указанных в скрипте условий, и транзакция может быть подтверждена.
Деревья Меркла
Другая составляющая MAST - известный криптографический приём под названием Дерево Меркла (Merkle tree). Дерево Меркла представляет собой математическую структуру, хэширующую различные наборы данных в один компактный хэш: корень Меркла. Аналогично любому другому хэшу, корень Меркла не может использоваться для воссоздания данных в дереве Меркла.
Однако, у деревьев Меркла имеется уникальное преимущество. Если какие-то из данных в дереве Меркла известны, корень Меркла можно использовать для подтверждения того, что эти конкретные данные действительно присутствуют где-то в дереве Меркла – даже если они известны не все.
В качестве простого примера представим, что Элис создала дерево Меркла, скомбинировав наборы данных “123” и “456,” и что корнем Меркла этого дерева Меркла является “789.” Затем Элис говорит Бобу, что пакет данных “123” присутствует где-то в этом дереве Меркла. Сейчас, имея только корень Меркла (“789”), Боб может подтвердить, что “123” действительно включено в дерево Меркла, даже если ему неизвестно, что “456” тоже присутствует там. Фактически в дереве Меркла могут существовать тысячи пакетов данных – и он не может расшифровать ни один из них.
MAST: P2SH + Деревья Меркла
По сути, MAST соединяет потенциал P2SH с возможностями, которые несут в себе деревья Меркла. Вместо того, чтобы блокировать биткоины в один скрипт, при использовании MAST те же самые биткоины можно заблокировать в несколько разных скриптов.
Другими словами, те же самые биткоины можно заблокировать, используя несколько разных и взаимоисключающих условий (например, требование криптографической подписи только от Элис, или подписей от Боба и Кэрол, или подписи от одной Кэрол по прошествии определенного количества времени, и так далее).
Какое из этих условий выполняется (подтверждается) в транзакции первым, то и определяет, как будут потрачены биткоины. Если Элис первой подпишет транзакцию, расходующую выход, то подтвердится эта транзакция. Если Боб и Кэрол сделают это быстрее, подтвердится их транзакция. Если по прошествии определённого времени первой транзакцию подпишет Кэрол, то подтвердится транзакция Кэрол.
Так же, как в случае с P2SH, все эти разные скрипты хэшируются. Однако на этот раз они соединяются в дереве Меркла. И в выход транзакции в качестве окончательного блокировщика включается корень Меркла.
Процесс расходования средств также напоминает схему P2SH. Для создания транзакции средства из корня Меркла разблокируются, весь используемый скрипт должен включаться в новую транзакцию вместе с условием разблокировки скрипта (блокировщик и ключ).
Однако следует помнить, что не все потенциальные скрипты (блокировщики) должны включаться в транзакцию. Включается только один, который действительно использовался. Если Элис тратит средства первой, ей не нужно включать скрипт, который позволит потратить средства Бобу и Кэрол. Фактически, Элис даже не нужно знать, что Боб и/или Кэрол тоже могли потратить средства.
Узлы Биткоина могут подтвердить, что включенный скрипт подтверждается при использовании дерева Меркла. Они используют включённый в выход корень Меркла, чтобы проверить, действительно ли используемый скрипт включён в дерево Меркла. Если это так, то узлы знают, что включённый скрипт подтверждается в качестве одной из опций для траты биткоинов и может подтвердить новую транзакцию.
Преимущества MAST
Решение MAST улучшает Биткоин в трёх основных направлениях: увеличивает гибкость смарт-контрактов, улучшает масштабируемость и повышает конфиденциальность.
Предлагаемый MAST вид гибкости смарт-контрактов не является абсолютно новым – существует несколько конструкций “either/or” (или/или), выполнение которых возможно при использовании P2SH (требующие подписи от Элис или подписи от Боба и Кэрол, и так далее). Однако присутствует также применяемое протоколом ограничение размера в отношении различных опций.
MAST увеличивает гибкость смарт контракта, так как он не использует такое ограничение. Неважно, имеется ли два возможных способа потратить биткоины, или их 20 или даже 1000, это не имеет значения для сети, в требуемую транзакцию включается только скрипт. Это также предоставляет новые и сложные возможности, например, 1 из 1000 транзакций мультиподписи, которая сейчас была бы слишком большой. Или длинные списки пользователей, которые могут расходовать биткоины в разное время.
Кроме того, использующие P2SH конструкции “either/ or” могут быть разблокированы только посредством окончательной публикации всех скриптов – а не только одного используемого. Это подходит для крупных транзакций (много данных) или дорогостоящих транзакций (высокие комиссионные). Требуя от пользователей включать только скрипт, который используется в конце, MAST улучшает масштабируемость. Он сокращает количество данных, которые должны отправить, подтвердить или хранить все узлы в сети.
В качестве дополнительного бонуса MAST улучшает конфиденциальность, опять же посредством того, что неиспользуемые скрипты остаются навсегда скрытыми.
Примечание: MAST всё ещё находится в стадии разработки; детали реализации могут отличаться от описанных в данной статье.
Источник