Автор: Никцяо, Фауст и Шью Ван, компьютерщик web3

Консультант: Исследовательская группа Bitlayer

Краткое содержание:

Недавно компания Delphi Digital опубликовала исследовательский отчет о технологиях, связанных со вторым уровнем биткойнов, под названием «Рассвет программируемости биткойнов: прокладывая путь для накопительных пакетов», в котором систематически разбираются основные концепции, связанные с накопительными пакетами биткойнов, такие как BitVM Family Bucket, OP_CAT и Ограничения Ковенанта, экологический уровень DA Биткойна, мост и четыре основных вторых уровня Биткойна, использующих BitVM, включая Bitlayer, Citrea, Yona и Bob.

Хотя исследовательский отчет в целом показывает общую картину технологии второго уровня Биткойна, он, как правило, относительно общий и не имеет подробного описания, что затрудняет его понимание. Geek web3 провел обширные углубленные раскопки на основе исследовательских отчетов Delphi, пытаясь дать возможность большему количеству людей систематически понимать BitVM и другие технологии.

Мы совместно запустим серию колонок под названием «Приближение к BTC» совместно с исследовательской группой Bitlayer и китайским сообществом BitVM, чтобы провести долгосрочную популяризацию науки по таким ключевым темам, как BitVM, OP_CAT и межцепочные мосты Биткойн, и стремимся разочаровать Биткойн для большего числа людей. Технологии, связанные с монетами второго уровня, открывают путь для большего числа энтузиастов.

текст:

Несколько месяцев назад Робин Линус, глава ZeroSync, опубликовал статью под названием «BitVM: вычислить что-либо на биткойне», официально предлагая концепцию BitVM и продвигая прогресс технологии второго уровня биткойна. Можно сказать, что это одна из самых революционных инноваций в экосистеме Биткойн. Она взорвала всю экосистему второго уровня Биткойна, привлекла к участию такие звездные проекты, как Bitlayer, Citrea, BOB и т. д., и придала ей жизнеспособность. весь рынок.

После этого больше исследователей участвовали в улучшении BitVM и последовательно запускали различные итеративные версии, такие как BitVM1, BitVM2, BitVMX и BitSNARK. Общая ситуация следующая:

  1. Технический документ по реализации BitVM, впервые предложенный Робином Линусом в прошлом году, представляет собой реализацию BitVM, основанную на вымышленных схемах логических вентилей, называемых BitVM0;

  2. В нескольких последующих выступлениях и интервью Робин Линус неофициально представил решение BitVM (называемое BitVM1), основанное на вымышленном процессоре, которое похоже на систему защиты от мошенничества Optimism Cannon. Оно может использовать сценарии Биткойн для имитации эффекта автономного процессора общего назначения. .

  3. Робин Линус также предложил BitVM2, не требующий разрешения одношаговый неинтерактивный протокол защиты от мошенничества.

  4. Члены Rootstock Labs и Fairgate Labs выпустили технический документ BitVMX. Подобно BitVM1, они надеются смоделировать эффект процессора общего назначения (оффчейн) с помощью биткойн-скриптов.

В настоящее время построение экосистемы разработчиков, связанных с BitVM, становится все более понятным, а итеративное совершенствование периферийных инструментов также видно невооруженным глазом. По сравнению с прошлым годом сегодняшняя экосистема BitVM стала «смутно видна» из первоначального «замка». в воздухе», что также привлекает все больше и больше людей. Все больше разработчиков и венчурных капиталистов устремляются в экосистему Биткойн.

Но большинству людей нелегко понять технические термины, связанные с BitVM и Bitcoin Layer 2, поскольку сначала необходимо иметь систематическое понимание основных знаний, связанных с ним, особенно таких базовых знаний, как сценарии Биткойн и знания Taproot. Справочные материалы, доступные сейчас в Интернете, либо слишком длинные и полны ерунды, либо объяснения недостаточно полны, из-за чего люди кажутся понимающими, но не понимающими. Мы стремимся решить вышеуказанные проблемы и стремимся использовать максимально ясный язык, чтобы помочь большему количеству людей понять окружающие знания о втором уровне Биткойна и обеспечить систематическое понимание системы BitVM.

MATT и приверженность: основная идея BitVM

Прежде всего, мы хотим подчеркнуть, что основная идея BitVM — это MATT, что означает Merkleize All The Things. В основном это относится к использованию древовидной структуры хранения данных, такой как Merkle Tree, для отображения сложного процесса выполнения программы. попытайтесь сделать проверку Bitcoin Native доказательством мошенничества.

Хотя MATT может выражать сложную программу и отслеживать ее обработку данных, он не будет публиковать эти данные напрямую в цепочке BTC, поскольку общий масштаб этих данных очень велик. Решение, использующее MATT, хранит данные только в дереве Меркла вне цепочки и публикует в цепочке только верхнюю сводку (корень Меркла) дерева Меркла. Это дерево Меркла в основном содержит три основных содержания:

  • Код сценария смарт-контракта

  • Данные, необходимые по договору

  • Следы, оставленные во время выполнения контракта (записи изменений в памяти и регистрах ЦП при выполнении смарт-контрактов на виртуальных машинах, таких как EVM)

В соответствии со схемой MATT в цепочке хранится только очень маленький корень Меркла, а полный набор данных, содержащийся в дереве Меркла, хранится вне цепочки. При этом используется идея, называемая «обязательством». Вот объяснение того, что такое «Обязательство».

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

В какой-то момент хэш данных может использоваться в качестве «обязательства» для самих данных. Другие схемы обязательств включают обязательство KZG или дерево Меркла. В обычном протоколе защиты от мошенничества уровня 2 издатель данных публикует полный набор данных вне цепочки и обязуется опубликовать набор данных в цепочке. Если кто-то обнаружит неверные данные в наборе данных вне сети, обязательство по передаче данных в сети будет оспорено.

Благодаря Commitment второй уровень может сжимать большие объемы данных и публиковать только свои «обязательства» в цепочке Биткойн. Конечно, также необходимо обеспечить, чтобы весь набор данных, выпущенный вне цепочки, мог быть доступен внешнему миру.

В настоящее время несколько основных решений BitVM, таких как BitVM0, BitVM1, BitVM2 и BitVMX, в основном используют схожие абстрактные структуры:

1. Декомпозиция и фиксация программы: сначала разложить сложную программу на большое количество кодов основных операций (компиляция), а затем записать трассировки, генерируемые этими кодами операций во время конкретного выполнения (грубо говоря, программа выполняется на ЦП). и «Когда в памяти» записываются все изменения состояния, называемые «Трассировка»). После этого мы организуем все данные, включая трассировки и коды операций, в набор данных, а затем генерируем коммит для этого набора данных.

Конкретные схемы обязательств могут принимать разные формы, например: деревья Меркла, PIOP (различные алгоритмы ZK), хэш-функции.

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

3. Публикация данных и обязательств: издатель данных публикует обязательство в цепочке, полный набор данных публикуется вне цепочки, а верификатор извлекает набор данных и проверяет наличие каких-либо ошибок. Каждая часть набора данных вне сети коррелирует с обязательствами в сети.

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

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

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

Что такое биткойн-скрипт?

Знания, связанные с биткойнами, сложнее понять, чем Ethereum. Даже самое базовое поведение при передаче включает в себя ряд концепций, включая UTXO (вывод неизрасходованных транзакций), сценарий блокировки (также известный как ScriptPubKey) и сценарий разблокировки (также известный как ScriptSig). Давайте сначала объясним эти основные понятия.

(Пример кода сценария Биткойн, состоящего из кодов операций более низкого уровня, чем язык высокого уровня)

Способ выражения активов в Ethereum больше похож на Alipay или WeChat. Каждый перевод просто добавляет и вычитает балансы разных учетных записей. Этот метод ориентирован на учетную запись, и баланс активов представляет собой просто число под именем учетной записи; Выражение больше похоже на золото. Каждый кусок золота (UTXO) будет отмечен своим владельцем. Передача фактически уничтожает старый UTXO и генерирует новый UTXO (владелец изменится).

Bitcoin UTXO содержит два ключевых поля:

Сумма в «сатоши» (сто миллионов сатоши — это один BTC);

Скрипт блокировки, также известный как «ScriptPubKey», определяет условия разблокировки UTXO.

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

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

(Скрипт разблокировки должен совпадать со скриптом блокировки)

С точки зрения выражения, каждая транзакция в цепочке Биткойн соответствует множеству входов и выходов. Каждый вход должен объявить определенный UTXO, который он хочет разблокировать, и отправить сценарий разблокировки для разблокировки и уничтожения UTXO. Выходные данные. Вновь сгенерированная информация UTXO; будет отображаться, и содержимое сценария блокировки будет опубликовано.

Например, при вводе транзакции вы доказываете, что вы Сэм, разблокируете несколько UTXO, предоставленных вам другими, уничтожаете их единообразно, генерируете несколько новых UTXO и заявляете, что xxx разблокирует их в будущем.

В частности, во входных данных транзакции вы должны объявить, какие UTXO вы хотите разблокировать, и указать «место хранения» этих данных UTXO. Здесь следует отметить, что Биткойн и Эфириум совершенно разные. Эфириум предоставляет два типа учетных записей: контрактные учетные записи и учетные записи EOA для хранения данных. Баланс активов записывается в виде числа под именем контрактной учетной записи или учетной записи EOA. размещаются в едином файле под названием «Мир». В базе данных «Мировое государство» при переводе денег конкретные счета могут быть изменены непосредственно из «Мирового государства», чтобы облегчить поиск места хранения данных;

Биткойн не имеет структуры мирового состояния, а данные активов разбросаны и хранятся в прошлых блоках (то есть разблокированные данные UTXO хранятся отдельно в OutPut каждой транзакции).

Если вы хотите разблокировать UTXO, вы должны указать, на выходе какой транзакции информация UTXO существовала в прошлом, показать идентификатор транзакции (который является ее хешем) и позволить узлу Биткойн искать ее в записях истории. Если вы хотите запросить биткойн-баланс определенного адреса, вам необходимо пройти все блоки с самого начала, чтобы найти разблокированный UTXO, связанный с адресом xx.

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

(Когда вы создаете отчет о транзакции, чтобы передать свой UTXO другим, вам необходимо отметить позицию UTXO в истории Биткойна на основе хэша/идентификатора транзакции, которому принадлежат эти UTXO)

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

Кроме того, сценарий блокировки UTXO (скрипт блокировки) можно настроить. Вы можете настроить UTXO как «разблокируемый владельцем определенного биткойн-адреса». Владелец адреса должен предоставить цифровую подпись и открытый ключ (P2PKH). . В типе транзакции Pay-to-Script-Hash (P2SH) вы можете добавить хэш сценария в сценарий блокировки UTXO. Кто может отправить исходное изображение сценария, соответствующее этому хэшу, и выполнить заданные условия в исходном изображении сценария? вы можете разблокировать UTXO. Сценарий Taproot, на который опирается BitVM, использует функции, аналогичные P2SH.

Как запустить биткойн-скрипт

Здесь мы сначала используем P2PKH в качестве примера, чтобы представить метод запуска сценария Биткойн. Только поняв его метод запуска, мы сможем понять более сложные Taproot и BitVM. Полное имя P2PKH — «Оплата по хешу открытого ключа». Согласно этой схеме, хеш открытого ключа будет установлен в сценарии блокировки UTXO, и при разблокировке необходимо предоставить открытый ключ, соответствующий хешу. то же, что и традиционная идея перевода биткойнов.

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

Кроме того, согласно схеме P2PKH, после того, как узел Биткойн получит транзакцию, он объединит сценарий разблокировки ScriptSig, предоставленный пользователем, со сценарием блокировки ScriptPubkey разблокируемого UTXO и выполнит его в среде выполнения сценария BTC. На следующем рисунке показаны результаты сращивания перед выполнением:

Возможно, читатели не знают среду выполнения скриптов BTC, поэтому здесь мы кратко ее представим. Во-первых, скрипт BTC содержит два элемента:

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

Если взять приведенное выше изображение в качестве примера, то слева показан загруженный кем-то скрипт разблокировки ScriptSig, который содержит его цифровую подпись и открытый ключ, а скрипт блокировки ScriptPubkey с правой стороны содержит код операции и данные, установленные создателем UTXO при генерации UTXO (здесь нам не нужно понимать значение каждого кода операции, достаточно приблизительного понимания).

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

Однако есть проблема. Содержимое скрипта блокировки UTXO на самом деле является общедоступным в цепочке. Любой может просмотреть содержащийся в нем хэш открытого ключа и ложно заявить, что это он. назначается императором». «Люди. Следовательно, после проверки открытого ключа и хэша открытого ключа необходимо также проверить, действительно ли инициатор транзакции является фактическим контроллером открытого ключа, что требует проверки цифровой подписи. Код операции CHECKSIG в сценарии блокировки отвечает за проверку цифровой подписи.

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

(Это изображение динамичное: принципиальная схема сценария разблокировки биткойнов по схеме P2PKH.

Источник: https://learnmeabitcoin.com/technical/script)

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

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

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

Здесь следует отметить, что цепочка (блок) Биткойна не записывает напрямую, какие UTXO связаны с какими адресами. Она только записывает, какой хэш открытого ключа/хэш какого сценария может быть разблокирован, но мы основываемся на хеше открытого ключа/. скрипт Hash может быстро вычислить соответствующий адрес (раздел, отображаемый в интерфейсе кошелька, выглядит как искаженные символы).

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

Отдельный свидетель и свидетель

После того, как мы поняли идею P2SH, мы стали на один шаг ближе к Taproot, на который опирается BitVM. Но перед этим нам нужно понять важную концепцию: свидетель и отдельный свидетель.

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

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

Недостаток этого подхода заключается в том, что если вы планируете инициировать несколько транзакций подряд и существуют последовательные зависимости (например, транзакция 3 ссылается на выходные данные транзакции 2, а транзакция 2 ссылается на выходные данные транзакции 1), то последующие транзакции Должен быть указан идентификатор (хеш) предыдущей транзакции. Любой посредник, такой как майнинговый пул или узел Биткойн, может точно настроить содержимое сценария разблокировки, чтобы хеш после загрузки транзакции не соответствовал тому, что вы ожидали. несколько транзакций, которые вы создали заранее, имеют Последовательно связанные транзакции, станут недействительными.

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

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

Более позднее обновление Segregated Witness/SegWit фактически полностью отделяет идентификатор транзакции и сценарий разблокировки. Нет необходимости включать данные сценария разблокировки при вычислении хеша транзакции. Сценарий блокировки UTXO, который следует за обновлением SegWit, по умолчанию сначала устанавливает код операции с именем «OP_0», который служит меткой, а соответствующий сценарий разблокировки был переименован из SigScript в Witness;

После соблюдения правил SegWit проблема масштабируемости транзакций будет решена должным образом, и вам не нужно беспокоиться о точной настройке данных транзакций, отправляемых на узел Биткойн. Конечно, нам не нужно думать слишком сложно. Функция P2WSH по существу не отличается от упомянутой ранее P2SH. Вы можете предварительно задать хэш сценария в сценарии блокировки UTXO и дождаться отправки сценария разблокировки. содержимое сценария, соответствующее хешу, в цепочку и выполняется.

Но если содержимое скрипта, который вы хотите реализовать, очень велико и содержит много кода, полный скрипт невозможно отправить в цепочку Биткойн обычными методами (каждый блок имеет ограничение на размер). Что делать? Это требует использования Taproot для оптимизации содержимого скриптов в цепочке, а BitVM — это сложное решение, созданное на основе Taproot.