Что такое Merklized Alternative Script Trees?

Oct 19 2020

Я видел, как вокруг плавает аббревиатура МАСТ. Я видел, что это означает Merklized Alternative Script Trees, но что это значит? В каком контексте они появляются и для чего их можно использовать?

Ответы

4 MichaelFolkson Oct 24 2020 at 20:22

Идея Merklized Alternative Script Trees (или ранее Merklized Abstract Syntax Trees) восходит к идее Рассела О'Коннора в 2012 году . Первоначальная идея заключалась в том, что у вас могут быть альтернативные сценарии или фрагменты сценариев, хранящиеся в виде листьев в дереве Меркла, а затем листья дерева, которые не использовались, могут быть обрезаны и не занимают ценное место в блокчейне. Сравните это с P2SH (Pay to Script Hash), где весь скрипт хешируется, а затем отображается в блокчейне во время использования. Это обеспечивает эффективность использования блочного пространства (и, следовательно, более низкую комиссию), а также преимущества конфиденциальности.

Ранее формализованные предложения по MAST были BIP 114 и BIP 116, а самым последним предложением, конечно же, является Taproot ( BIP 341 ). Причина, по которой мы отошли от использования терминологии Merklized Abstract Syntax Tree, заключается в том, что с Taproot (и BIP 114) может быть выполнен только один единственный лист дерева Меркла. Вы не можете разделить один особенно длинный путь сценария на несколько фрагментов сценария, хранящихся на разных листьях дерева, а затем удовлетворить комбинацию этих листьев. По сути, это дерево операций ИЛИ (без И для разных листьев и без IF, ELSE, которые приводят к удовлетворению разных листьев на дереве). У вас могут быть операторы AND и IF ELSE, но они находятся внутри листьев, а не между ними. Удовлетворения одного листа достаточно, чтобы потратить UTXO. Как говорит Джонсон Лау в BIP 114:

Разрешено выполнение только одной ветви, и пользователи должны преобразовать сложное условие в несколько взаимоисключающих ветвей.

Питер Уилле и Рассел О'Коннор обсудили, почему это проектное решение было принято для Taproot на лондонской BitDevs в июле 2020 года. Одна из причин заключалась в том, что вам нужно только логарифмическое количество узлов ветвления Меркла, чтобы добраться до любого данного листа. Комбинаторный взрыв происходит, если есть возможность иметь разные комбинации всех листьев. Другая причина заключалась в том, что на каком-то этапе пространство для проектирования пришлось ограничить, чтобы дать предложению наилучшие шансы получить согласие сообщества и, в конечном итоге, быть активированным.

4 Murch Oct 25 2020 at 21:50

Возможно, вы слышали раньше, что «Биткойн - это программируемые деньги». Биткойн использует простой язык программирования под названием Script для кодирования условий оплаты. В то время как сегодня подавляющее большинство транзакций использует стандартные выходы single-sig (P2PK, P2PKH, P2WPKH) или один из небольшого набора общих сценариев (упакованный segwit, мультиподписи 2-из-3, мультиподписи 2-из-2 с 1-из -2), язык сценариев Биткойн позволит использовать множество других приложений.

Первоначально такие скрипты были закодированы непосредственно в выходном скрипте, зачисляемом транзакцией. Pay to Script Hash (P2SH, BIP16 ) вместо этого ввел привязку средств к хешу полного redeemscript . Настоящим публикуется полный сценарий расходов. Одна из проблем развертывания более сложных условий расходов с помощью P2SH заключается в том, что все возможные результаты должны быть закодированы в один сценарий, что может сделать сценарий длинным и сложным. Поскольку полный сценарий должен быть опубликован после расходования средств, полученные в результате затраты являются дорогостоящими и раскрывают полный контракт. Кроме того, нетривиально определить все возможные результаты даже умеренно сложных смарт-контрактов.

Идея Merklized Alternative Script Trees (MAST) ¹ состоит в том, чтобы перечислить отдельные условия расходов по отдельности и позволить тратить средства путем выполнения любого из сценариев. Каждый сценарий разделен на лист дерева Меркла. При получении средства привязаны к корню дерева Меркла. Расходы требуют раскрытия сценария единственного листа, доказательства Меркла, чтобы показать включение в дерево, и выполнения условий расходов, закодированных в листе. Преимущества такого разделения заключаются в уменьшении длины и сложности каждого листа, в том, что другие условия расходов остаются частными, а также в возможности кодирования множества условий расходов. Обратной стороной является добавленная стоимость доказательства Меркла.

Вариант MAST является частью предложения BIP341 Taproot, которое заменяет два предыдущих предложения MAST. Выходные скрипты Pay to Taproot (P2TR) кодируются одним открытым ключом. Внутри они состоят из внутреннего ключа, настроенного с корнем MAST. Выходные данные P2TR могут быть потрачены либо через ключевой путь путем выдачи подписи, удовлетворяющей открытому ключу, либо через путь сценария с использованием одного из листьев MAST.


¹ Обратите внимание, что MAST изначально был введен как аббревиатура для Merklized Abstract Syntax Trees, но с тех пор был переименован в бэкроним, чтобы лучше соответствовать текущему объему предложения. Также см . Ответы Майкла , в которых более подробно рассказывается об этом.

Prayank Oct 24 2020 at 18:58

MAST упоминается как Merkelized Alternative Script Tree в ссылке на архив списка рассылки, которую я получил от bitcoinops.

MAST [0] - предоставляет альтернативные скрипты, не влияет на сигнатуры

Я думаю, что в наши дни я собираюсь заявить, что «MAST» означает «меркелизированное альтернативное дерево сценариев», поскольку это не «абстрактные синтаксические деревья».

https://lists.linuxfoundation.org/pipermail/bitcoin-dev/2018-November/016500.html

Единственная часть, которую я понял о MAST из среднего сообщения, что это улучшит конфиденциальность:

Taproot использует MAST для включения мерклизированного хеша в качестве открытого ключа, тем самым делая сложную транзакцию сценария неотличимой от стандартной транзакции P2PKH.