Ethereum Virtual Machine: зачем Эфириуму нужна виртуальная машина

Виртуальная машина Эфириума (EVM) обеспечивает выполнения смарт-контрактов в сети Ethereum. Во многом именно благодаря этому решению эфир и его блокчейн стали так популярны в мире криптовалют. Что такое и как работает EVM?

Смарт-контракты

Еще до появления Биткоина апологеты криптографии писали о технологии смарт-контрактов. В работах Ника Сабо (Nick Szabo) 90-х годов можно найти довольно хорошо разработанную « теорию умных контрактов». Если коротко, смарт-контракт – это компьютерный алгоритм, выполнение которого происходит автоматически при достижении заранее запрограммированных условий. То есть смарт-контракт может работать без участия человека. Что помимо очевидного плюса в виде автоматизации процесса способно убрать из уравнения лишние инстанции в виде арбитров и контролеров.

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

Ответ простой – Ethereum Virtual Machine, сокращенно EVM.

Почему Эфириум

Казалось бы, главная криптовалюта мира – это Биткоин. Его доминирование не поддается сомнению. Логично, что смарт-контракты как важная часть криптомира просто обязаны были быть реализованы именно на блокчейне Биткоина. Да, в принципе его блокчейн поддерживает реализацию смарт-контрактов – он понимает язык сценариев Script. Например, мультиподпись – это по своей сути смарт-контракт.

Однако проблема в том, что блокчейн Биткоина не был специально создан для смарт-контрактов, поэтому их функционал там сильно уступает блокчейнам, в архитектуру которых изначально закладывалась полноценная реализация подобного функционала. К примеру, Биткоин не записывает свое текущее состояние в каждый момент времени. Вместо этого он просто записывает, кто чем владеет и кто что кому передал. Это позволяет хранить, отправлять и получать монеты при помощи UTXO (An unspent transaction output), в котором выбор возможных условий для транзакции весьма ограничен. Но это значит, что смарт-контракт не может обращаться к текущему состоянию блокчейна или изменять его, что сильно урезает возможности. В Ethereum же это возможно благодаря EVM – вычислительной среде, специально созданной для обеспечения работы смарт-контрактов.

Поэтому, если блокчейн Биткоина часто и справедливо называют «распределенным реестром», то EVM в Ethereum – это «распределенный компьютер», который значительно лучше работает с алгоритмами. Чем смарт-контракты, собственно, и являются.

Что такое EVM

В официальной документации Ethereum EVM дано такое определение:

«Глобальный виртуальный компьютер, состояние которого сохраняет и согласовывает каждый участник сети Эфириума. Любой участник может запросить выполнение произвольного кода на EVM и выполнение этого кода меняет состояние EVM».

EVM отвечает за то, что код будет выполняться на всех виртуальных машинах децентрализовано, но при этом единообразно по заранее заданным условиям. К слову о выполнении кода: EVM – это полная, по Тьюрингу, машина. Что значит: она теоретически способна выполнять любые вычисления.

Если посмотреть на EVM со стороны, то можно представить множество компьютеров, единообразно выполняющих один и тот же код по заранее заданным правилам. Спойлер: логика работы EVM изнутри значительно сложнее.

Пару слов о создателях: EVM – совместное детище Виталка Бутерина и Гэвина Вуда (Gavin Wood). Основные идеи, лежащие в основе EVM, можно прочесть в технической документации Гэвина Вуда. Вуд разработал язык программирования смарт-контрактов Solidity. И, кстати, после работы над Эфириумом Вуд переключился в 2016 году на собственный проект – Polkadot.

Состояния EVM

Логика состояний – ключевая для описания механизма работы EVM. Документация определяет проект Ethereum как распределенную систему состояний. Состояние – это крупная структура данных, содержащая не только все аккаунты и балансы, но также состояние машины, которая способна выполнять произвольный код и меняться от блока к блоку в соответствии с заранее определенным набором правил. Конкретные правила изменения состояния от блока к блоку, собственно, и определяются виртуальной машиной Эфириума.

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

Y(S, T) = S’, где S – это старое действительное состояние, T – набор действительных транзакций, а Y — функция перехода между состояниями, дающая новое выходное состояние S’. EVM поддерживает два варианта транзакций: вызовы сообщений и создание контракта.

Функция перехода состояния EVM позволяет Эфириуму от блока к блоку обновляться до нового действительного состояния в ответ на входные данные смарт-контракта. То есть благодаря EVM Эфириум – это не просто децентрализованная система записей, регистрирующая операции с криптовалютой. Но платформа, на которой можно разворачивать компьютерные программы, способные взаимодействовать с состоянием Эфириума. Изменения состояния позволяют разработчикам создавать при помощи смарт-контрактов собственные валюты, NFT, децентрализованные приложения (dApp) или автономные организации (DAO).

Какие языки понимает EVM

Задача EVM – принять, прочитать и исполнить код смарт-контракта. Да, контракт – это просто программа, содержащая команды для машины. Загвоздка в том, что EVM – виртуальная машина, объединяющая десятки тысяч компьютеров, обязанных исполнить эту программу по единым для всех правилам.

И это при том, что существует несколько языков программирования, на которых разрешается писать смарт-контракты для EVM. Самые популярные – это Solidity и Vyper. Но как код, написанный программистами на разных языках, становится понятным для виртуальной машины?

Единство и ясность обеспечивается благодаря байткодам – низкоуровневым инструкциям, с которыми EVM умеет работать. Смарт-контракт, написанный на Solidity или Vyper (или другом поддерживаемом высокоуровневом языке) преобразуется при компиляции в набор байткодов. Каждый шаг инструкции в байт-коде представляет собой операцию, называемую опкодом. Именно в виде таких кодов смарт-контракт и выполняется.

Иными словами, смарт-контракт – это совокупность машинных инструкций (опкодов), которые могут представлять собой стандартные машинные операции, к примеру, XOR (Исключающее «или»), AND (оператор «и»), ADD (сложение), MUL (умножение). А могут – специализированные для блокчейна инструкции, к примеру: ADDRESS (получить адрес текущего аккаунта), BALANCE (получить баланс выбранного аккаунта), BLOCKHASH (Получить хеш блока). Список опкодов можно посмотреть здесь, а узнать, как высокоуровневый код преобразуется в опкоды для EVM, можно здесь.

Газовый вопрос

Ключевой переменной для выполнения смарт-контракта является газ – аналог комиссии в Эфириуме. Газ измеряется в Gwei, которая равна 0.000000001 ETH. Он нужен для того, чтобы EVM смогла до конца обработать все действия, инициируемые смарт-контрактом. Чем этих действий больше и чем они сложнее – тем выше плата за газ. В перечне опкодов для EVM можно посмотреть, сколько газа необходимо ради выполнения каждой операции. Однако важно понимать: не все операции имеют стабильную цену в газе – очень часто на плату влияет загруженность сети Эфириума.

По мере выполнения кода газ потребляется в соответствии со стоимостью комиссионных для выполняемых операций и загрузки сети. Если в какой-то момент газ заканчивается, возникает исключение «закончился газ» (OOG – Out of Gas) и выполнение контракта немедленно останавливается, а транзакции отменяются. В этом случае никакие изменения в состоянии Ethereum не применяются, за исключением списания газа для оплаты ресурсов, которые были использованы на выполнение кода до точки остановки.

Поэтому менеджмент газа – крайне важный этап в разработке смарт-контракта. Ошибки на этом фронте могут привести к тому, что контракт не исполнится, а заложенный на его исполнение газ будет сожжен вникуда.

Обобщающие тезисы

  • Смарт-контракт — это программа, работающая на блокчейне Эфириума. Она представляет собой набор кода и данных, который находится по определенному адресу в блокчейне Ethereum.

  • Задача EVM – исполнить код смарт-контракта в сети и обеспечить изменение состояния Ethereum.

  • EVM поддерживает ряд языков программирования, самые популярные из которых – Solidity и Vyper.

  • Выполнение смарт-контракта требует уплаты газа. Чем сложнее контракт – тем больше газа потребляет. Также плата за газ зависит от загруженности сети Эфириума.

Подытожим

Виртуальная машина Эфириума – EVM, основополагающее решение проекта, благодаря которому обеспечивается выполнения смарт-контрактов в сети. Этим Эфириум отличается от предшественников на рынке криптовалют, а его популярность и эффективность (как и эффективность решения EVM) успела пройти проверку временем
Источник

Comments

There are no comments to display.

Blog entry information

Автор
NSerega
Просмотры
300
Last update

More entries in Криптовалюты

More entries from NSerega

Верх