Что такое EVM?
EVM, или виртуальная машина Ethereum, — это среда выполнения, которая обрабатывает транзакции и исполняет код смарт-контрактов в сети Ethereum.Она работает как общая виртуальная вычислительная машина, правила которой соблюдают клиенты исполнения Ethereum по всему миру.Когда пользователь переводит токен, обменивает криптовалюту через децентрализованное приложение, создает NFT, предоставляет обеспечение протоколу кредитования или вызывает другой смарт-контракт, EVM рассчитывает результат этого действия.EVM не существует в виде одной физической машины или сервера.Вместо этого каждый узел Ethereum, участвующий в работе сети, независимо применяет одни и те же правила исполнения к одним и тем же упорядоченным транзакциям.Такая архитектура позволяет узлам подтверждать корректность расчетов изменений балансов аккаунтов, хранилища контрактов, владения токенами и других данных блокчейна.В официальной документации по виртуальной машине Ethereum EVM описана как децентрализованная виртуальная среда, которая одинаково исполняет код на узлах Ethereum.
EVM — важная часть уровня исполнения Ethereum, но она не представляет собой всю сеть Ethereum.Ethereum также зависит от консенсуса, одноранговой сети, хранения данных, создания блоков, валидаторов и других компонентов протокола.EVM отвечает именно за вычисления и переходы состояний.Что делает EVM?
EVM считывает инструкции транзакции, исполняет байт-код смарт-контракта, рассчитывает расход газа и определяет, как должно измениться состояние Ethereum.Она может переводить ETH, вызывать функцию контракта, развертывать новый контракт, обновлять хранилище контракта, создавать журналы событий или возвращать запрошенные данные.Перед применением транзакции система исполнения Ethereum проверяет такие требования, как подпись отправителя, nonce, доступный баланс, лимит газа и формат транзакции.Если транзакция вызывает смарт-контракт, EVM исполняет инструкции контракта в порядке, заданном его байт-кодом.В рамках той же транзакции EVM может вызывать и другие контракты.Благодаря этому децентрализованные приложения могут объединять несколько протоколов и систем токенов в одну атомарную операцию.После исполнения EVM либо применяет изменения состояния, либо сообщает об ошибке.Если исполнение откатывается, предполагаемые изменения состояния контракта обычно отменяются, однако отправитель, как правило, все равно оплачивает уже выполненные вычисления.Итог исполнения может включать обновленные балансы, измененное хранилище, созданные журналы, возвращенные данные и квитанцию о транзакции.Почему EVM важна для криптоиндустрии
EVM важна, поскольку превращает Ethereum из простой сети для перевода криптовалюты в программируемую блокчейн-платформу.Без программируемой среды исполнения блокчейн может быть ограничен главным образом записью переводов своего нативного актива.EVM позволяет разработчикам создавать токены, рынки кредитования, децентрализованные торговые протоколы, системы стейблкоинов, блокчейн-игры, инструменты управления, приложения для идентификации и другие ончейн-сервисы.Смарт-контракты в EVM могут хранить активы и применять правила без необходимости получать одобрение традиционного централизованного администратора для каждого действия.Одни и те же правила исполнения доступны всем, кто может отправить действительную транзакцию и оплатить необходимую комиссию.Такая структура без разрешений поддерживает открытые криптоприложения, которые могут взаимодействовать друг с другом.EVM стала важным техническим стандартом и за пределами Ethereum: многие другие блокчейн-сети используют совместимую с EVM или эквивалентную ей среду исполнения.Благодаря более широкому распространению разработчики могут повторно использовать смарт-контракты, кошельки, языки программирования, стандарты токенов и инструменты разработки в нескольких сетях.Является ли EVM блокчейном?
Сама по себе EVM не является блокчейном.Это виртуальная система исполнения, которая рассчитывает последствия блокчейн-транзакций.Ethereum — это блокчейн-сеть, которая записывает блоки, поддерживает консенсус, распространяет данные и использует EVM для обработки программируемых операций.Можно сказать, что Ethereum — это вся сеть, а EVM — вычислительный механизм внутри ее уровня исполнения.Другие блокчейн-сети могут реализовать EVM, не используя историю блокчейна Ethereum, его валидаторов, балансы, бюджет безопасности или нативный актив.Поэтому две сети на базе EVM могут исполнять похожий код смарт-контрактов, оставаясь полностью отдельными сетями.Как EVM обрабатывает транзакцию
Транзакция EVM обычно начинается с того, что пользователь выбирает действие в криптокошельке или децентрализованном приложении.Кошелек создает транзакцию с такими данными, как адрес назначения, переводимая сумма, входные данные, nonce, лимит газа и настройки комиссии.Пользователь подписывает транзакцию приватным ключом.Подпись подтверждает, что транзакция авторизована владельцем отправляющего аккаунта.Подписанная транзакция отправляется узлу Ethereum и может попасть в пул ожидающих транзакций.Производитель блока выбирает транзакции и включает их в упорядоченные данные блока.EVM обрабатывает каждую транзакцию с учетом состояния, созданного всеми предыдущими транзакциями в этом блоке.Порядок имеет значение, поскольку одна транзакция может изменить балансы, цены, разрешения или значения хранилища, используемые другой транзакцией.После обработки всего блока клиенты исполнения рассчитывают итоговое состояние Ethereum.Другие узлы повторяют те же операции, чтобы подтвердить соответствие предлагаемого блока правилам Ethereum.В официальной документации по транзакциям Ethereum объясняется, как подписанные инструкции могут переводить средства, создавать контракты или вызывать существующие контракты.
Переходы состояний EVM
Переход состояния — это изменение одного допустимого состояния Ethereum на другое допустимое состояние Ethereum.Состояние Ethereum включает аккаунты, балансы ETH, код смарт-контрактов, хранилище контрактов и nonce аккаунтов.EVM получает на вход текущее состояние и упорядоченную транзакцию.Затем она применяет правила исполнения Ethereum, чтобы рассчитать следующее состояние.При обычном переводе ETH баланс отправителя уменьшается, а баланс получателя увеличивается.При обмене токенов переход состояния может обновить балансы токенов, лимиты разрешений, резервы пула ликвидности, записи о комиссиях и журналы событий.При кредитной операции могут обновиться объемы обеспечения, балансы задолженности, индексы процентов и показатели риска аккаунта.Все корректно работающие клиенты исполнения должны рассчитывать один и тот же переход состояния при одинаковых исходных условиях.Такое детерминированное поведение принципиально важно: узлы должны согласовывать результат, не доверяя центральному компьютеру.Аккаунты Ethereum и EVM
В Ethereum есть внешние аккаунты, принадлежащие пользователям, и аккаунты контрактов.Внешний аккаунт контролируется с помощью приватного ключа.Аккаунтом контракта управляет код смарт-контракта.Оба типа аккаунтов могут хранить ETH, но работают по-разному.Внешний аккаунт может инициировать транзакцию после того, как его владелец подпишет ее.Аккаунт контракта не подписывает обычную транзакцию приватным ключом самостоятельно.Его код выполняется, когда контракт получает корректный вызов через другую транзакцию или взаимодействие с другим контрактом.В официальной документации по аккаунтам Ethereum объясняется, что аккаунты могут контролироваться пользователями или создаваться как смарт-контракты.
EVM считывает информацию об аккаунтах при проверке транзакций, переводе средств, загрузке кода контракта и обновлении хранилища.Смарт-контракты и EVM
Смарт-контракт — это программа, хранящаяся по адресу Ethereum.EVM исполняет эту программу, когда транзакция или другой контракт вызывает одну из ее функций.Смарт-контракты могут содержать переменные, функции, разрешения, события, ошибки и правила работы с цифровыми активами.Разработчики часто пишут смарт-контракты Ethereum на Solidity или Vyper.Перед развертыванием исходный код компилируется в низкоуровневый байт-код EVM.В официальном руководстве по смарт-контрактам Ethereum объясняется, что для развертывания контрактов и взаимодействия с ними требуются транзакции и газ.
После развертывания исполняемый байт-код хранится как часть аккаунта контракта.EVM считывает и исполняет этот байт-код, а не понимает напрямую исходный код Solidity или Vyper.Это важно, поскольку поведение ончейн-приложения фактически определяется развернутым байт-кодом.Что такое байт-код EVM?
Байт-код EVM — это последовательность машиночитаемых инструкций, исполняемых виртуальной машиной Ethereum.Обычно он отображается как длинное шестнадцатеричное значение.Каждая часть байт-кода представляет собой опкод, значение данных или другую информацию для исполнения.Исходный код смарт-контракта удобнее читать человеку, а байт-код предназначен для обработки EVM.У развернутого контракта обычно есть код создания и исполняемый код.Код создания выполняется один раз при развертывании и возвращает исполняемый код, который остается по адресу контракта.Исполняемый код работает при каждом взаимодействии пользователей или других контрактов с развернутым контрактом.Во введении Solidity в смарт-контракты объясняется, что EVM считывает, интерпретирует и исполняет байты, сохраненные в области кода контракта.
Разработчики часто публикуют и верифицируют исходный код, чтобы пользователи могли сравнить читаемый контракт с развернутым байт-кодом.Что такое опкоды EVM?
Опкоды — это отдельные низкоуровневые инструкции, которые понимает EVM.Каждый опкод выполняет конкретную операцию.Некоторые опкоды выполняют арифметические, сравнительные или побитовые вычисления.Другие считывают данные транзакции, проверяют адрес, загружают память, обращаются к хранилищу контракта, создают журналы или вызывают другой контракт.Примеры: ADD для сложения, SLOAD для чтения хранилища контракта, SSTORE для изменения хранилища, CALL для вызова другого аккаунта и REVERT для остановки исполнения с возвратом ошибки.В официальном справочнике опкодов EVM Ethereum перечислены доступные инструкции и стоимость газа для них.
Опкоды исполняются последовательно, если только инструкция не меняет счетчик команд или не завершает исполнение.Обновления Ethereum могут добавлять инструкции, менять стоимость газа или изменять поведение отдельных операций.Поэтому настройки компилятора должны быть рассчитаны на версию EVM, поддерживаемую целевой сетью.Как работает стек EVM
EVM обычно описывают как виртуальную машину на основе стека.Стек — это временная структура данных, работающая по принципу «последним пришел — первым вышел».Опкоды EVM обычно берут значения с вершины стека и помещают результат туда же.Например, инструкция сложения удаляет из стека два значения, складывает их и возвращает результат в стек.Во многих операциях EVM использует 256-битные слова.Такой размер слова хорошо подходит для криптографических вычислений и значений аккаунтов Ethereum.Глубина стека ограничена, поэтому компиляторам и разработчикам нужно тщательно организовывать сложные вычисления.Ошибка стека может привести к сбою исполнения.Память EVM
Память EVM — это временная область, доступная во время вызова контракта и адресуемая по байтам.В ней могут храниться аргументы функций, возвращаемые данные, временные массивы, закодированные значения и промежуточные результаты вычислений.Память очищается после завершения текущего контекста исполнения.Она не используется для постоянного хранения данных в блокчейне.Стоимость газа за использование памяти может расти при обращении контракта к большим областям памяти.Поэтому эффективное использование памяти может снизить стоимость сложных транзакций.Разработчикам важно различать память и хранилище: эти области отличаются сроком хранения, назначением и стоимостью газа.Хранилище EVM
Хранилище EVM — это область постоянных данных, связанная со смарт-контрактом.Значения в хранилище остаются частью состояния Ethereum и после завершения транзакции.Контракты используют хранилище для балансов токенов, записей о владельцах, настроек протокола, задолженности аккаунтов, голосов в управлении и других долгосрочных данных.Запись в хранилище обычно обходится дороже, чем чтение временной памяти, поскольку каждый проверяющий узел должен сохранить и обработать изменение состояния.Хранилище организовано в виде 256-битных слотов.Solidity распределяет высокоуровневые переменные, массивы, структуры и отображения по этим слотам согласно установленным правилам размещения данных.Небезопасное изменение структуры хранилища обновляемого контракта может повредить имеющиеся данные.Поэтому проектирование хранилища — важная часть безопасности смарт-контрактов и оптимизации газа.Calldata и возвращаемые данные
Calldata — это доступные только для чтения входные данные, передаваемые при внешнем вызове контракта.Обычно они содержат селектор функции и следующие за ним закодированные аргументы.EVM использует эту информацию, чтобы определить, какую функцию запустить и какие значения передать ей.Calldata отличается от памяти тем, что вызываемый контракт не может напрямую изменить эти данные.Контракты также могут возвращать данные вызывающему аккаунту или контракту.Возвращаемые данные могут содержать баланс токена, рассчитанную котировку, результат транзакции или закодированную ошибку.Внешние приложения часто используют вызовы только для чтения, чтобы имитировать выполнение функций контракта и получать данные без создания ончейн-транзакции.Газ и EVM
Газ — это единица измерения вычислительной работы, выполняемой EVM.Для каждого опкода установлена стоимость газа.Обычный перевод ETH обычно требует меньше газа, чем сложная транзакция с несколькими смарт-контрактами и изменениями хранилища.Отправитель указывает лимит газа, задающий максимальное количество газа, которое может израсходовать транзакция.Если до завершения исполнения будет израсходован весь доступный газ, транзакция завершится из-за нехватки газа, а предполагаемые изменения состояния откатятся.Отправитель все равно оплачивает уже выполненные вычисления.В официальной документации Ethereum о газе и комиссиях объясняется, что более сложные транзакции со смарт-контрактами требуют больше вычислений и более высокого лимита газа.
Газ не позволяет программам неограниченно использовать ресурсы сети.Без газа ошибочный или вредоносный код мог бы создавать бесконечную вычислительную нагрузку для каждого клиента исполнения.Лимит газа и цена газа
Лимит газа — это максимальное количество вычислительного газа, которое может использовать транзакция.Цена газа определяет, сколько отправитель готов заплатить за каждую единицу газа в соответствии с действующими правилами комиссий.Высокий лимит газа не означает, что транзакция обязательно израсходует его полностью.Как правило, отправитель платит за фактически использованный газ с учетом действующих правил комиссии за транзакции.Слишком низкий лимит газа может привести к сбою транзакции до завершения исполнения.Слишком низкая настройка комиссии может привести к тому, что транзакция останется ожидающей, если спрос на место в блоке высок.Кошельки обычно рассчитывают оба значения, однако оценки могут измениться, поскольку состояние Ethereum и спрос на сеть могут измениться до включения транзакции в блок.Предварительно скомпилированные контракты
Предварительно скомпилированные контракты — это специальные функции на уровне протокола, доступные по зарезервированным адресам Ethereum.Их можно вызывать так же, как обычный смарт-контракт.Однако их поведение реализовано непосредственно в клиентах исполнения, а не с помощью обычного байт-кода EVM, хранящегося по этому адресу.Предварительно скомпилированные контракты часто используют для криптографических операций, выполнение которых последовательностями обычных опкодов было бы неэффективным.В документации Solidity о предварительно скомпилированных контрактах объясняется, что их поведение и расход газа реализованы внутри среды исполнения EVM.
Обновления Ethereum могут добавлять новые предварительно скомпилированные контракты, если сети требуются эффективные стандартизированные операции.Вызовы сообщений
Вызов сообщения — это взаимодействие в EVM, при котором один аккаунт вызывает другой.Внешний аккаунт может запустить этот процесс, отправив подписанную транзакцию.Во время исполнения смарт-контракт может вызвать другой контракт.Вызов сообщения может переводить ETH, передавать входные данные, выделять газ и запрашивать исполнение кода контракта.Вложенные вызовы позволяют нескольким приложениям взаимодействовать в рамках одной транзакции.Однако они также создают угрозы безопасности, поскольку внешний контракт может вести себя неожиданным или вредоносным образом.Безопасные контракты должны осторожно выполнять внешние вызовы и защищать важное состояние от повторного входа и других рисков взаимодействия.Создание контракта
EVM может создать новый смарт-контракт при обработке транзакции или опкода создания контракта.Развертывание начинается с кода инициализации.Код инициализации может обработать аргументы конструктора, задать начальные значения хранилища и вернуть исполняемый байт-код.Затем исполняемый байт-код сохраняется по новому адресу контракта.Развертывание контракта требует газа, поскольку EVM должна исполнить код создания и добавить в Ethereum постоянный код и состояние.Развертывание более крупных контрактов и контрактов со сложными конструкторами обычно стоит дороже.Развертывание может завершиться ошибкой, если закончится газ, будут нарушены правила исполнения или при инициализации произойдет откат.События и журналы
Во время исполнения EVM смарт-контракты могут создавать журналы.Разработчики обычно предоставляют к этим журналам доступ через события Solidity.События могут фиксировать переводы токенов, обмены, депозиты, голоса в управлении, изменения разрешений и другие действия контракта.Журналы хранятся в квитанциях о транзакциях, и внешние приложения могут индексировать их.Они полезны для кошельков, обозревателей блокчейна, аналитических систем и интерфейсов децентрализованных приложений.Контракты не могут напрямую считывать старые журналы событий так же, как хранилище.Поэтому событие не следует использовать как единственный источник данных, необходимых для будущего исполнения контракта.Откаты и неудачные транзакции EVM
Транзакция EVM может завершиться ошибкой по нескольким причинам.У транзакции может быть недействительная подпись, неверный nonce, недостаточный баланс, нехватка газа или неподдерживаемый формат.Смарт-контракт также может намеренно выполнить откат, если обязательное условие не соблюдено.Например, перевод токенов может быть отменен, если у отправителя недостаточно токенов.Децентрализованный обмен может быть отменен, если полученная сумма окажется ниже установленного пользователем минимума.Проверка разрешений контракта может привести к откату, если вызывающий не имеет необходимых прав.Откат обычно отменяет изменения состояния, выполненные в ходе неудачного пути исполнения.Израсходованный газ, как правило, не возвращается, поскольку клиенты исполнения уже выполнили запрошенную работу.Неудачная транзакция не обязательно означает сбой Ethereum или EVM.Чаще это значит, что конкретная транзакция не смогла соответствовать правилам контракта или протокола при текущем состоянии сети.Атомарное исполнение
Транзакции EVM атомарны: в рамках исполнения транзакции все изменения состояния либо применяются вместе, либо вместе отменяются.Это свойство позволяет сложной транзакции выполнять несколько связанных шагов, не оставляя только часть предполагаемого результата.Например, транзакция в DeFi может занять актив, обменять его, погасить другое обязательство и обновить обеспечение за одно исполнение.Если обязательный шаг не удается выполнить и транзакция откатывается, более ранние изменения состояния в этой транзакции также отменяются.Атомарность снижает некоторые расчетные риски, но не гарантирует финансовую выгоду или безопасность транзакции.Вредоносный контракт все равно может атомарно исполнить транзакцию, которая переводит активы пользователя, выдавшего разрешение.Детерминированное исполнение
EVM детерминирована: одинаковые допустимые входные данные и исходное состояние должны приводить к одинаковому результату на каждом корректно работающем клиенте исполнения.Детерминированность необходима для децентрализованной проверки.Если бы узлы рассчитывали разные результаты для одной транзакции, они не смогли бы согласовать балансы или состояние контрактов.Поэтому во время исполнения EVM смарт-контракты не могут напрямую получать изменяющуюся внешнюю информацию с обычных сайтов или из закрытых баз данных.Внешние данные обычно передаются через оракул или другую ончейн-транзакцию.После этого каждый узел может обработать одно и то же переданное значение в соответствии с одними и теми же правилами контракта.EVM и консенсус
EVM отвечает за исполнение, а система консенсуса Ethereum помогает валидаторам согласовать принимаемый порядок блоков и их финальность.Исполнение определяет, соответствуют ли транзакции и их изменения состояния правилам Ethereum.Консенсус определяет, какую допустимую историю цепочки принимает сеть.После перехода Ethereum на Proof of Stake полному узлу нужны и клиент исполнения, и клиент консенсуса.Клиент исполнения выполняет транзакции и поддерживает состояние исполнения Ethereum.Клиент консенсуса отслеживает действия валидаторов, предложения блоков, аттестации, выбор ветви цепочки и финальность.В официальной документации по узлам и клиентам Ethereum объясняется, как эти компоненты работают вместе.
EVM не может самостоятельно определить, какой из предложенных блоков станет каноническим.Консенсус не может самостоятельно рассчитывать сложные результаты работы смарт-контрактов без уровня исполнения.Клиенты исполнения EVM
Клиент исполнения — это программное обеспечение, реализующее правила исполнения Ethereum.Он проверяет транзакции, обрабатывает байт-код EVM, поддерживает состояние блокчейна, взаимодействует с узлами и предоставляет интерфейсы для приложений.Разные реализации клиентов исполнения могут быть написаны на разных языках программирования, соблюдая при этом одни и те же спецификации протокола.Разнообразие клиентов повышает устойчивость, поскольку Ethereum не зависит полностью от одной кодовой базы.При этом каждый совместимый клиент исполнения должен рассчитывать одинаковый допустимый результат.Спецификации уровня исполнения Ethereum содержат читаемое исполняемое описание поведения исполнения Ethereum и обновлений сети.
Тесты спецификаций исполнения помогают разработчикам убедиться, что разные клиенты одинаково обрабатывают нестандартные условия.EVM и JSON-RPC
Кошельки и децентрализованные приложения обычно взаимодействуют с клиентами исполнения через методы JSON-RPC.Эти методы позволяют считывать балансы аккаунтов, оценивать газ, имитировать вызовы контрактов, получать журналы, проверять блоки и отправлять подписанные транзакции.В спецификации API уровня исполнения Ethereum JSON-RPC описан как основной интерфейс между пользователями, инфраструктурой и клиентами исполнения.
Вызов RPC только для чтения позволяет запросить у клиента исполнения имитацию поведения EVM без добавления транзакции в блокчейн.Метод отправки подписанной транзакции передает ее в сеть; позднее она может быть включена в блок.Провайдеры RPC упрощают работу приложений, но пользователи, обращающиеся к удаленному провайдеру, доверяют ему в вопросах точности и доступности данных.Запуск собственного узла может обеспечить более прямой и независимый доступ к данным исполнения Ethereum.Совместимые с EVM и эквивалентные EVM сети
Сеть, совместимая с EVM, поддерживает смарт-контракты и инструменты, созданные для виртуальной машины Ethereum.Сеть, эквивалентная EVM, обычно стремится точнее воспроизводить поведение исполнения Ethereum.Обе модели позволяют разработчикам использовать Solidity, адреса формата Ethereum, привычные кошельки и распространенные стандарты токенов.Однако в другой сети EVM могут отличаться валидаторы, комиссии, правила финальности, время создания блоков, мосты, системные контракты и предположения о безопасности.Перед развертыванием на другой сети EVM контракт, работающий в Ethereum, все равно может потребовать тестирования.Могут различаться целевая версия компилятора, поддерживаемые опкоды, предварительно скомпилированные контракты, типы транзакций, расчет газа и внешние зависимости.В документации компилятора Solidity предупреждается, что компиляция для неправильной версии EVM может привести к ошибкам или сбоям.
Совместимость с EVM повышает переносимость, но не делает отдельные сети идентичными.Обновления EVM
EVM может меняться в результате обновлений протокола Ethereum.Обновление может добавить опкод, изменить стоимость газа, добавить тип транзакции, изменить поведение аккаунтов или предоставить новый предварительно скомпилированный контракт.Предлагаемые изменения протокола обычно описываются в предложениях по улучшению Ethereum.После рассмотрения, тестирования, координации и принятия сообществом отдельные изменения могут войти в обновление сети.В момент активации новых правил клиенты исполнения должны обновить программное обеспечение, чтобы следовать им.Разработчикам смарт-контрактов следует следить за обновлениями, поскольку новые правила могут повлиять на целевые настройки компиляции, оценки газа, низкоуровневый ассемблер и поведение контрактов.Не следует полагаться на недокументированное поведение EVM, которое может измениться при обновлениях.Риски безопасности EVM
EVM единообразно исполняет корректный байт-код, но не гарантирует, что этот байт-код безопасен или справедлив.В смарт-контракте могут быть ошибки кода, слабые разрешения, небезопасный механизм обновления, экономическая уязвимость или намеренно вредоносная функция.EVM может корректно исполнить такую вредоносную логику, поскольку сами инструкции допустимы.К распространенным рискам смарт-контрактов относятся повторный вход, ошибки контроля доступа, манипулирование оракулами, арифметические ошибки, неправильная обработка подписей, конфликты хранилища и небезопасные внешние вызовы.На развернутый байт-код также могут повлиять ошибки компилятора.Официальный список известных ошибок компилятора Solidity помогает разработчикам выявлять проблемы конкретных версий компилятора, связанные с безопасностью.
Аудиты, тестирование, формальная верификация, анализ кода, ограниченные разрешения и осторожное управление обновлениями могут снизить риски.Ни один аудит не гарантирует, что смарт-контракт EVM никогда не даст сбой и не подвергнется атаке.Риски EVM для пользователей криптовалют
Пользователи криптовалют взаимодействуют с EVM, когда предоставляют разрешения на использование токенов, подписывают транзакции или работают со смарт-контрактом Ethereum.Подпись кошелька может разрешать не только простой перевод.Она может разрешать расходование токенов, вызывать контракт, создавать делегирование или предоставлять другой вид разрешения.Перед подписанием пользователям следует читать запросы транзакций и проверять адрес контракта назначения.Успешное исполнение в EVM лишь подтверждает, что транзакция соответствовала правилам кода и протокола.Оно не подтверждает, что результат соответствовал намерениям пользователя или что приложению можно доверять.Вредоносные децентрализованные приложения могут использовать допустимые вызовы EVM для перевода одобренных активов.Пользователям следует избегать неизвестных ссылок, проверять адреса контрактов, ограничивать разрешения на использование токенов и хранить долгосрочные активы отдельно от кошельков для экспериментальных приложений.Риски EVM для криптотрейдеров
Криптотрейдеры могут столкнуться с рисками EVM при использовании децентрализованных протоколов торговли, кредитования, стейкинга, мостов или ликвидации.Сделка может не пройти, если цена изменится до того, как EVM приступит к исполнению транзакции.При широком допустимом диапазоне проскальзывания результат обмена может оказаться хуже.Порядок транзакции может измениться относительно других транзакций в том же блоке.Такая последовательность может повлиять на цены в пулах, результаты ликвидации и доступность токенов.Высокие комиссии за газ также могут затруднить закрытие или изменение ончейн-позиции во время рыночного стресса.У трейдера может быть достаточно токенов для обеспечения, но не хватать нативного ETH для оплаты исполнения.Поэтому управление рисками ончейн-торговли включает поддержание баланса для оплаты газа и проверку настроек транзакций.EVM и максимальная извлекаемая стоимость
Максимальная извлекаемая стоимость (MEV) — это стоимость, которую можно получить, контролируя или изменяя включение транзакций в блок и их порядок.EVM обрабатывает транзакции в последовательности, заданной блоком.Если две транзакции взаимодействуют с одним пулом ликвидности, первая может изменить результат, который получит вторая.Поисковые системы и системы построения блоков могут использовать это свойство для арбитража, ликвидаций и других стратегий.Некоторые стратегии помогают выравнивать цены, тогда как другие могут ухудшить исполнение для пользователей.При атаке типа sandwich транзакции размещаются до и после обмена пользователя, чтобы получить прибыль от влияния обмена на цену.В официальной документации Ethereum о максимальной извлекаемой стоимости объясняется, как включение, исключение и порядок транзакций могут создавать экономическую ценность.
Пользователи могут снизить часть рисков, используя подходящие лимиты проскальзывания, избегая пулов с низкой ликвидностью и изучая доступные варианты защищенного исполнения.EVM и стандарты токенов
EVM позволяет разработчикам реализовывать общие интерфейсы токенов с помощью смарт-контрактов.ERC-20 определяет стандартный интерфейс для взаимозаменяемых токенов.ERC-721 и ERC-1155 поддерживают распространенные структуры уникальных активов и мульти-токенов.Общие стандарты позволяют кошелькам, торговым интерфейсам, обозревателям блокчейна и децентрализованным приложениям взаимодействовать с множеством токенов посредством привычных функций.В официальной документации по стандартам токенов Ethereum объясняется, как общие интерфейсы повышают совместимость.
Стандарт токена определяет ожидаемые функции и события, но не гарантирует безопасность или добросовестное управление каждым контрактом токена.В контрактах токенов все еще могут быть особые правила перевода, комиссии, черные списки, права на выпуск токенов или разрешения на обновление.EVM и сети Layer 2
Многие сети Ethereum Layer 2 предоставляют среду исполнения, совместимую с EVM или эквивалентную ей.Они обрабатывают транзакции вне основной среды исполнения Ethereum и используют Ethereum для части расчетов, доступности данных или модели безопасности.Это может снизить стоимость транзакций и увеличить пропускную способность.В обзоре Ethereum Layer 2 объясняется, как роллапы обрабатывают операции вне Ethereum Layer 1, используя Ethereum как основу для расчетов.
EVM в сети Layer 2 может выполнять похожий байт-код смарт-контрактов, но использовать другие процессы создания блоков, расчета комиссий, вывода средств и достижения финальности.Пользователям следует изучить секвенсор, мост, систему доказательств, способ публикации данных и механизмы обновления конкретной сети Layer 2.Сходство с EVM не устраняет дополнительные риски инфраструктуры Layer 2.Преимущества EVM
EVM предоставляет стандартизированную среду для программируемых криптоприложений.Она позволяет независимым узлам проверять одинаковые результаты работы смарт-контрактов.Она поддерживает открытое развертывание: разработчикам обычно не нужно получать разрешение центрального оператора для публикации контракта.Она обеспечивает компонуемость, благодаря которой один смарт-контракт может взаимодействовать с другим.Она поддерживает широко используемые стандарты токенов и инструменты разработки.Кроме того, она дает другим блокчейн-сетям общую модель исполнения, что может снизить затраты разработчиков на миграцию.Большое количество инструментов EVM, документации, знаний о тестировании и исследований безопасности может сделать разработку приложений доступнее.Ограничения EVM
Вычисления в EVM обходятся дороже обычных вычислений на централизованном сервере, поскольку результат должны проверять многие узлы.Постоянное хранение данных также обходится дорого, поскольку увеличивает состояние блокчейна, которое поддерживают клиенты исполнения.Пропускная способность блоков Ethereum ограничена, поэтому комиссии за транзакции могут расти, когда многие пользователи конкурируют за исполнение.EVM обрабатывает упорядоченные переходы состояний, что может ограничивать пропускную способность, если множество транзакций обращаются к одним и тем же данным.После развертывания смарт-контракты нельзя легко изменить, если заранее не предусмотрена система обновления.Возможность обновления обеспечивает гибкость, но также создает риски, связанные с администраторами и структурой хранилища.EVM также не может определить достоверность внешней информации без данных, переданных через оракул или другой доверенный процесс.Пример обмена токенов в EVM
Предположим, пользователь хочет обменять один токен ERC-20 на другой через децентрализованный пул ликвидности.Кошелек создает данные транзакции для вызова пула или контракта маршрутизации.Пользователь подписывает транзакцию и отправляет ее в сеть Ethereum.После включения транзакции в блок EVM проверяет разрешение пользователя на использование токенов и вызывает нужные контракты.Контракты рассчитывают текущий результат обмена, применяют комиссии протокола и сравнивают выходную сумму с минимальной суммой, установленной пользователем.Если условия соблюдены, EVM обновляет балансы токенов и хранилище пула ликвидности.Она также создает журналы событий, которые могут считывать внешние приложения.Если выходная сумма меньше пользовательского минимума или нарушается другое условие, транзакция откатывается.Пользователь обычно все равно оплачивает газ, израсходованный до отката.Этот пример показывает, как исполнение EVM связывает подписи кошельков, разрешения на использование токенов, смарт-контракты, газ, изменения состояния и квитанции о транзакциях.Как проверить транзакцию EVM
Сначала убедитесь, в какой сети будет исполнена транзакция.Затем проверьте адрес назначения или смарт-контракт.Далее сверьте переводимый актив и его количество.Проверьте, запрашивает ли транзакция разрешение на использование токенов или другое постоянное разрешение.Оцените расчет газа и настройки максимальной комиссии.При децентрализованной торговле проверьте ожидаемый результат, минимальную сумму получения и срок действия ордера.При необходимости изучите транзакцию с помощью надежного обозревателя блокчейна или инструмента симуляции.Не подписывайте транзакцию, если кошелек не может объяснить действие или неизвестен источник запроса.Храните достаточно ETH для будущих транзакций, включая экстренное закрытие ончейн-позиций.Помните, что подтвержденную транзакцию EVM, как правило, трудно или невозможно отменить.Распространенные заблуждения об EVM
Одно из распространенных заблуждений — считать EVM физическим компьютером, принадлежащим одной организации.На самом деле это общая модель исполнения, реализованная множеством независимых клиентов.Еще одно заблуждение состоит в том, что EVM хранит всю криптовалюту внутри смарт-контрактов.EVM обрабатывает состояние, а владение представлено записями аккаунтов и контрактов в блокчейне.Третье заблуждение — считать EVM и Ethereum одним и тем же.EVM — один из важных компонентов более широкого протокола Ethereum.Четвертое заблуждение — полагать, что корректное исполнение EVM гарантирует безопасность транзакции.EVM может корректно исполнить вредоносную или экономически опасную логику контракта.Пятое заблуждение — считать, что каждая сеть EVM обладает такой же безопасностью, как Ethereum.У других сетей на базе EVM могут быть иные валидаторы, мосты, системы управления и предположения о доверии.Шестое заблуждение — полагать, что неудачная транзакция ничего не стоит.При неудачном исполнении EVM обычно расходуется газ на уже выполненную работу.FAQ
Как расшифровывается EVM?
EVM расшифровывается как Ethereum Virtual Machine — виртуальная машина Ethereum.Что такое EVM простыми словами?
EVM — это виртуальная вычислительная среда, которая исполняет смарт-контракты Ethereum и рассчитывает результаты ончейн-транзакций.Является ли EVM настоящим компьютером?
Нет. Это виртуальная модель исполнения, реализованная клиентами исполнения Ethereum на множестве независимых компьютеров.EVM и Ethereum — это одно и то же?
Нет. EVM — это среда исполнения смарт-контрактов Ethereum, а Ethereum также включает консенсус, сеть, валидаторов, блоки и другие компоненты протокола.Какие языки программирования работают с EVM?
Solidity и Vyper — широко используемые языки для смарт-контрактов, которые компилируются в байт-код EVM.Что такое байт-код EVM?
Байт-код EVM — это низкоуровневая последовательность машиночитаемых инструкций, исполняемых виртуальной машиной Ethereum.Что такое опкоды EVM?
Опкоды — это отдельные инструкции EVM для выполнения таких операций, как арифметические вычисления, доступ к хранилищу, вызовы контрактов и обработка ошибок.Зачем EVM нужен газ?
Газ измеряет вычислительную работу, определяет стоимость ограниченных ресурсов исполнения и не позволяет программам неограниченно использовать вычислительную мощность.Что произойдет, если в транзакции EVM закончится газ?
Предполагаемые изменения состояния будут отменены, но отправитель обычно оплачивает газ, израсходованный до остановки исполнения.Может ли EVM исполнять вредоносные контракты?
Да. EVM исполняет технически корректный байт-код, даже если контракт содержит вредоносную, нечестную или небезопасную логику.Все ли сети EVM связаны между собой?
Нет. Сети EVM могут использовать похожую технологию исполнения, сохраняя отдельные балансы, блоки, валидаторов, контракты и историю транзакций.Работает ли один и тот же адрес кошелька во всех сетях EVM?
Один приватный ключ обычно может создавать адреса одинакового формата, но активы и операции по этому адресу остаются отдельными в каждой сети.Можно ли отменить транзакции EVM?
Подтвержденную транзакцию EVM обычно нельзя отменить, если только в получающем контракте нет действительной функции, позволяющей создать новую корректирующую транзакцию.Почему транзакция EVM может завершиться ошибкой, хотя симуляция в кошельке прошла успешно?
До фактического исполнения транзакции могут измениться состояние блокчейна, условия газа, цены, ликвидность или хранилище контракта.Чем EVM отличается от клиента исполнения?
EVM — это виртуальная машина и набор правил вычислений смарт-контрактов, а клиент исполнения — программное обеспечение, реализующее эти правила и управляющее данными исполнения Ethereum.Используют ли сети Layer 2 EVM?
Многие сети Layer 2 используют совместимую с EVM или эквивалентную ей среду, чтобы повторно применять смарт-контракты Ethereum и инструменты разработки.Заключение
EVM, или виртуальная машина Ethereum, — это программируемая среда исполнения, лежащая в основе системы смарт-контрактов Ethereum.Она обрабатывает инструкции транзакций, исполняет байт-код, рассчитывает расход газа, обновляет состояние блокчейна и формирует результаты транзакций.Благодаря EVM Ethereum поддерживает токены, DeFi, NFT, системы управления, блокчейн-игры и множество других криптоприложений.Детерминированные правила позволяют независимым клиентам исполнения проверять одинаковый результат, не доверяя одному центральному компьютеру.Смарт-контракты пишут на понятных человеку языках, а затем компилируют в байт-код EVM, состоящий из низкоуровневых опкодов.Во время исполнения EVM использует стек, память, calldata, постоянное хранилище, вызовы сообщений, журналы и другие компоненты для обработки логики контракта.Газ ограничивает объем вычислений и обязывает пользователей оплачивать сетевые ресурсы, потребляемые их транзакциями.EVM взаимодействует с уровнем консенсуса Ethereum, но исполнение и консенсус выполняют разные задачи.Сети, совместимые с EVM, и Layer 2 могут повторно использовать технологии Ethereum, хотя их безопасность, комиссии, финальность и инфраструктура могут отличаться.Понимание EVM помогает пользователям криптовалют оценивать комиссии за газ, разрешения смарт-контрактов, неудачные транзакции, стандарты токенов, децентрализованные приложения и риски ончейн-торговли.EVM обладает широкими возможностями благодаря исполнению прозрачных программируемых правил, но не определяет, безопасны ли эти правила и выгодны ли они с финансовой точки зрения.Пользователям и разработчикам по-прежнему необходимо проверять контракты, управлять разрешениями, тестировать код, учитывать различия между сетями и относиться к каждой подписанной транзакции как к важной авторизации.Вам также может быть интересно
Питер Тодд
Питер Маккормак
Гарантийное обеспечение исполнения обязательств
В тренде
Трендовые криптовалюты, которые в настоящее время привлекают значительное внимание рынка
ТОП по объему
Криптовалюты с наибольшим объемом торгов
Недавно добавленные
Криптовалюты недавно внесенные в листинг и доступные для торговли

