Kakarot: изучение дороги Starknet, совместимой с EVM

Добавить Автора

TL;DR

  • Виртуальная машина — это компьютерная система, моделируемая программным обеспечением, которая обеспечивает среду выполнения программ. Он может эмулировать различные аппаратные устройства, чтобы программы могли работать в контролируемой и совместимой среде. Виртуальная машина Ethereum (EVM) — это виртуальная машина на основе стека, используемая для выполнения смарт-контрактов Ethereum.
  • zkEVM — это EVM, который интегрирует технологию доказательства с нулевым разглашением/доказательства достоверности. Это позволяет проверить выполнение EVM с использованием доказательств с нулевым разглашением, не требуя от всех верификаторов повторного выполнения EVM. На рынке представлены различные продукты zkEVM, каждый со своим подходом и дизайном.
  • Причиной использования zkEVM является потребность в виртуальной машине, поддерживающей выполнение смарт-контрактов на уровне 2. Кроме того, некоторые проекты предпочитают использовать zkEVM, чтобы воспользоваться широкой пользовательской экосистемой EVM и разработать набор инструкций, более удобный для доказательств с нулевым разглашением.
  • Kakarot — это zkEVM, реализованный в Starknet с использованием языка Cairo. Он имитирует стек, память, выполнение и другие аспекты EVM в форме смарт-контрактов Cairo. Какарот столкнулся с такими проблемами, как совместимость с системой учетных записей Starknet, оптимизация затрат и стабильность, поскольку язык Cairo все еще был экспериментальным.
  • Warp — транслятор кода Solidity в код Cairo, обеспечивающий совместимость на уровне языка высокого уровня. Kakarot, с другой стороны, обеспечивает совместимость на уровне EVM, реализуя коды операций EVM и предварительную компиляцию.

Что такое виртуальная машина?

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

Kakarot: Изучение пути совместимости EVM Starknet

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

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

Нужно подчеркнуть, что язык принципиально не делает различий между компилируемыми и интерпретируемыми типами, но некоторые тенденции в первоначальном дизайне будут. C/C++ компилируется и выполняется в большинстве случаев, но его также можно интерпретировать и выполнять (Cint, Cling). Многие интерпретируемые языки в традиционном понимании сейчас компилируются в промежуточные коды и выполняются на виртуальных машинах (Python, Lua).

Зная процесс выполнения физической машины, давайте теперь поговорим о виртуальной машине.

Виртуальные машины обычно обеспечивают виртуальную компьютерную среду, имитируя различные аппаратные устройства. Аппаратные устройства, которые могут имитироваться разными виртуальными машинами, различаются, но обычно включают ЦП, память, жесткий диск, сетевой интерфейс и т. д.

Возьмем в качестве примера виртуальную машину Ethereum (EVM).EVM — это виртуальная машина на основе стека, которая используется для выполнения смарт-контрактов Ethereum. EVM обеспечивает виртуальную компьютерную среду, имитируя аппаратные устройства, такие как ЦП, память, хранилище и стек.

Kakarot: Изучение пути совместимости EVM Starknet

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

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

Стек, эмулируемый EVM, используется для хранения операндов и результатов инструкций. Большинство инструкций в наборе инструкций EVM основаны на стеке, читая операнды из стека и помещая результаты обратно в стек.

Короче говоря, EVM предоставляет виртуальную компьютерную среду, имитируя аппаратные устройства, такие как ЦП, память, хранилище и стек, которые могут выполнять инструкции смарт-контрактов и сохранять состояние и данные смарт-контрактов. В реальной работе EVM загрузит байт-код смарт-контракта в память и выполнит логику смарт-контракта, выполнив набор инструкций. То, что фактически заменяет EVM, — это часть операционной системы + аппаратное обеспечение, показанное на рисунке выше.

Очевидно, что процесс проектирования EVM идет снизу вверх: сначала дорабатывается смоделированная аппаратная среда (стек, память), а затем в соответствии с соответствующей средой разрабатывается набор ассемблерных инструкций (код операции) и байт-код (байт-код). Хотя набор инструкций по ассемблеру предназначен для чтения, он требует большого количества низкоуровневых знаний, предъявляет высокие требования к разработчикам и сложен в разработке. звонки и предоставить разработчикам лучший опыт. Из-за индивидуального дизайна набора инструкций сборки EVM трудно напрямую использовать традиционные языки высокого уровня и просто воссоздать новый язык высокого уровня для адаптации к виртуальной машине. Сообщество Ethereum разработало два скомпилированных языка высокого уровня — Solidity и Vyper — для повышения эффективности выполнения EVM. Не нужно подчеркивать Solidity, Vyper — это высокоуровневый язык EVM, разработанный Виталиком после исправления некоторых дефектов в Solidity, но он не получил широкого распространения в сообществе, поэтому постепенно сходит со сцены истории.

Что такое zkEVM

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

На рынке много продуктов zkEVM, и трек горячий.Основные игроки включают Starknet, zkSync, Scroll, Taiko, Linea, Polygon zkEVM (ранее Polygon Hermez) и др., которые разделены на 5 категорий (1, 2 , 2.5, 3, 4) Виталик. Конкретный контент можно посмотреть в блоге Виталика.

Зачем нужен zkEVM

Этот вопрос необходимо рассматривать с двух точек зрения.

Первоначальные попытки zk Rollup могут обеспечить только относительно простые функции передачи и транзакций, такие как zkSync Lite, Loopring и т. д. Но когда море стало слишком сложным, люди привыкли использовать Тьюринг-полную EVM на Эфириуме, а когда стало невозможно создавать различные приложения с помощью программирования, люди стали призывать виртуальные машины на L2. Необходимость писать смарт-контракты — одна из них.

Kakarot: Изучение пути совместимости EVM Starknet

Поскольку некоторые проекты в EVM не подходят для создания доказательства/доказательства достоверности с нулевым разглашением, некоторые игроки предпочитают использовать набор инструкций, который подходит для доказательства/доказательства достоверности с нулевым разглашением на нижнем уровне, например Cairo Assembly от Starknet и zkSync. Цинк Инструкция. Но в то же время все не хотят отказываться от огромной пользовательской экологии EVM, поэтому они выбирают совместимость с EVM на верхнем уровне, то есть zkEVM типа 3 и 4. Некоторые игроки по-прежнему настаивают на традиционном коде операции набора инструкций EVM и сосредотачиваются на создании более эффективных доказательств для кода операции, которые представляют собой zkEVM типа 1 и типа 2. Огромная экология EVM делится на две части.

Kakarot: Изучение пути совместимости EVM Starknet

Kakarot: Виртуальная машина на виртуальной машине?

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

Kakarot — это EVM, реализованная на языке Cairo в Starknet, которая использует смарт-контракты Cairo для имитации стека, памяти, выполнения и т. д. в EVM. Условно говоря, внедрить EVM несложно, помимо EVM, написанного на Golang в Go-Ethereum, который имеет самый высокий коэффициент использования, также существуют EVM, написанные на Python, Java, Java и Rust.

Kakarot: Изучение пути совместимости Starknet с EVM

Техническая сложность Kakarot zkEVM заключается в том, что протокол существует как контракт в цепочке Starknet, что приводит к двум ключевым проблемам.

  1. Совместимость Starknet использует совершенно другую систему учетных записей, отличную от Ethereum.Учетные записи в Ethereum делятся на EOA (внешняя учетная запись) и CA (контрактная учетная запись).Однако Starknet поддерживает абстракцию собственной учетной записи, и все учетные записи являются контрактными учетными записями. В то же время из-за разных используемых криптографических алгоритмов пользователи не могут использовать одну и ту же энтропию для генерации того же адреса в Starknet, что и в Ethereum.
  2. Стоимость. Поскольку kakarot zkEVM существует в цепочке в виде контракта, он предъявляет высокие требования к реализации кода и должен быть максимально оптимизирован для газа, чтобы снизить затраты на взаимодействие.
  3. Стабильность В отличие от использования традиционных языков высокого уровня, таких как Golang, Rust, Python и т. д., язык Cairo все еще находится в экспериментальной стадии, от Cairo 0 до Cairo 1 и затем Cairo 2 (или, если хотите, Cairo 1 версия 2), официальная команда по-прежнему Языковые возможности постоянно пересматриваются. В то же время Cairo VM недостаточно протестирована, и нельзя исключать возможность последующих масштабных перезаписей.

Протокол kakarot состоит из пяти основных компонентов (четыре прописаны в документе GitHub, EOA не включен, данная статья скорректирована для удобства читателей):

  • Kakarot (Core): отвечает за выполнение транзакций в форме Ethereum и предоставление соответствующих учетных записей Starknet для пользователей Ethereum.
  • Учетные записи контрактов: CA в смысле Ethereum, отвечающий за хранение байт-кода контракта и состояния переменных в контракте.
  • Внешние учетные записи: EOA в смысле Ethereum, ответственный за пересылку транзакций Ethereum в Kakarot Core.
  • Реестр учетных записей: хранит переписку между учетными записями Ethereum и учетными записями Starknet.
  • Реестр Blockhash: в качестве специального кода операции Blockhash нужны данные прошлых блоков, а Kakarot не может напрямую получить данные в цепочке. Этот компонент хранит отношение отображения block_number -> block_hash, которое записывается администратором и предоставляется Kakarot Core.

Kakarot: Изучение пути совместимости EVM Starknet

Согласно отзывам генерального директора kakarot Элиаса Тазартеса, в последней версии команды от дизайна Account Resister отказались, и вместо этого для сохранения соответствующих отношений использовалось сопоставление 31-байтового адреса Starknet с 20-битным адресом EVM. . В будущем, чтобы улучшить взаимодействие и позволить контрактам Starknet регистрировать свои собственные адреса EVM, дизайн учетной записи может быть повторно использован.

Совместимость с EVM на Starknet: в чем разница между Warp и kakarot

Согласно типу zkEVM, определенному Виталиком, Warp относится к типу 4, а kakarot в настоящее время относится к типу 2.5.

Kakarot: Изучение пути совместимости EVM Starknet

Warp — это транслятор, который преобразует код Solidity в код Cairo Причина, по которой его не называют компилятором, вероятно, заключается в том, что выходной код Cairo по-прежнему является языком высокого уровня. С помощью Warp разработчики Solidity могут поддерживать первоначальный статус разработки без необходимости изучения нового языка Cairo. Для многих участников проекта Warp снижает порог входа в экосистему Starknet и не требует использования Cairo для переписывания большого количества инженерного кода.

Хотя идея перевода проста, совместимость также является худшей.Некоторые коды Solidity не могут быть хорошо переведены в Cairo.Логика кода, включающая систему учетных записей, криптографический алгоритм и т. д., требует изменения исходного кода для завершения миграции. Конкретные неподдерживаемые функции можно увидеть в документации Warp. Например, многие проекты будут различать логику выполнения учетных записей EOA и контрактных учетных записей, но все учетные записи в Starknet являются контрактными учетными записями, и эту часть кода необходимо изменить перед переводом.

Warp совместим на уровне языка высокого уровня, а kakarot совместим на уровне EVM.

Полная переработка EVM и пошаговая реализация Opcode и Pre-compile позволяют kakarot иметь более высокую нативную совместимость. В конце концов, выполнение на одной виртуальной машине (EVM) всегда более совместимо, чем выполнение на другой виртуальной машине (Cairo VM). Реестр учетных записей и реестр Blockhash умело скрывают различия в разных системах и минимизируют трения, связанные с миграцией пользователей.

Kakarot: Изучение пути совместимости Starknet с EVM

Команда Какарот

Kakarot: Изучение пути совместимости Starknet с EVM

Спасибо команде kakarot за ценные комментарии к этой статье, особенно Элиасу Тазартесу. Спасибо, сэр!

Посмотреть Оригинал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Награда
  • комментарий
  • Поделиться
комментарий
0/400
Нет комментариев
  • Закрепить