Основы виртуальной машины Ethereum (EVM)
Изучая проект Ethereum на Coinmarketrate.com, вы непременно обратите внимание на такой термин, как Ethereum-Virtual-Machine. Именно EVM открывает массу возможностей для блокчена Ethereum.
Если вы хотите начать использовать EVM, то вам не обязательно быть опытным программистом. EVM разработаны таким образом, что не требуют действительно мощного оборудования, что делает их подходящими для новичков.
Блокчейн-платформа Ethereum включает в себя внешние и контрактные счета. При переводе, инициированном с любого из них, пользователи могут отправлять ETH или данные в двоичном формате.
Когда разработчики платформы используют газ, это защищает EVM от различных атак, которые могут привести к замедлению работы сети блокчейна. Кроме того, в зависимости от типа, данные сети Ethereum размещаются в хранилище, памяти или стеке.
Ethereum работает посредством выполнения опкодов
Пользователи могут отключить учетные записи EVM или полностью удалить их с помощью команды самоуничтожения Solidity. Но как на самом деле работает Ethereum?
Платформа смарт-контрактов способна выполнять различные задачи путем выполнения определенных типов инструкций, известных как опкоды. Каждый опкод имеет размер 1 байт (или 8 бит), и кодируется в байткод. Опкоды также разбиваются на байты, когда пользователи выполняют определенную задачу.
Поскольку всего существует 140 опкодов, виртуальные машины Ethereum считаются полными по Тьюрингу, что означает, что они могут (теоретически) решать любые вычислительные задачи.
Исходный код, выполняемый на ней, не имеет доступа к другим системным процессам на компьютерах пользователей, что эффективно изолирует EVM.
Как уже упоминалось, в Ethereum существует два основных типа счетов: внешние и контрактные. EVM способны одинаково работать с обоими. И каждый счет имеет определенный баланс ETH. При этом любой перевод, несущий ETH, может его изменить.
Стоит также отметить, что перевод, инициированный с одного счета на другой, может содержать определенное количество ETH или двоичных данных, также называемых полезной нагрузкой.
Дополнительные действия могут зависеть от фактического счета. Так, если он включает исходный код, то он исполняется. Полезная нагрузка фактически превращается во входные данные. А если он не задан, то код, который отправляют пользователи, выполняется и в итоге возвращает код для совершенно нового контракта.
На этапе конструирования исходный код контракта ничего не содержит (другими словами, он пуст).
Поскольку нет централизованного органа, контракты выполняются на всех узлах сети Ethereum. Такой подход может привести к (значительному) замедлению работы сети блокчейн, что, возможно, и было задумано. Для того чтобы действительно замедлить работу, они могут создавать множество различных и сложных контрактов.
Чтобы обеспечить защиту от таких атак, каждый опкод поставляется с базовым уровнем стоимости газа, а газ — это как токен, который используется для оплаты EVM за выполнение транзакции.
Его основная цель — установить определенный лимит на то, сколько работы требуется для выполнения операции. Когда EVM завершает операцию, он начинает расходовать свой газ (постепенно).
EVM хранит данные/информацию в хранилище, памяти или стеке
В спецификации EVM перечислены три независимые области хранения, которые включают в себя хранилище, память и стек. Области хранения могут находиться внутри каждого счета, и способны хранить переменные состояния контракта.
Хранилище назначается в процессе выпуска смарт-контракта. Пользователи могут изменить его с помощью вызова функции sendTransaction.
Примечательно, что ни один контракт не может читать хранилище другого контракта (по соображениям безопасности и конфиденциальности), или писать непосредственно в него. Между тем, память линейна и может содержать временные переменные.
Поскольку они фактически существуют только в самой вызывающей функции, память стирается между вызовами. Пользователи могут обращаться к памяти на уровне байтов, но предел одного чтения установлен в 256 бит, а запись может быть в любом диапазоне от 8 до 256 бит.
Для расширения памяти пользователи должны платить за газ. Причем она может масштабироваться квадратично, и чем больше она расширяется, тем больше она будет стоить. Но она все равно дешевле в использовании по сравнению с памятью.
Спецификация EVM определяет его как стековую машину. Стек — это место, где происходят вычисления. Эта область данных может содержать до 1024 небольших локальных переменных. И каждый элемент стека имеет общий размер 256 бит.
Стек также является самой экономичной из различных областей хранения данных.
Программист может иметь ограниченный доступ к стеку. Он может скопировать один из 16 верхних элементов на вершину, или заставить верхний элемент поменяться местами с одним из 16 расположенных под ним.
Чтобы получить более глубокий доступ, пользователи могут начать перемещать элементы стека в область хранения, или непосредственно в память.
Журналы технически не являются типом памяти
Стоит отметить, что журналы на самом деле не являются типом памяти. Но они также используются для хранения данных, поэтому их тоже можно рассмотреть при знакомстве с Ethereum/Solidity.
Журналы могут переносить данные через индексированную структуру с отображением, достигающим уровня блока. Смарт-контракты не будут иметь доступа к данным, содержащимся в журнале, после его создания. Но они могут быть доступны извне самого блокчейна. Некоторые из этих данных также содержатся в фильтрах bloom.
Другая важная информация, которую необходимо знать о EVM, связана с операцией самоуничтожения Solidity, которая удаляет исходный код из блокчейна. Однако, он все равно останется частью истории блокчейна, и может сохраниться в большинстве узлов EVM.
Технологии EVM развиваются, быстро достигая зрелости
Технология EVM значительно развилась за последние несколько лет. Один из заметных проектов под названием Syscoin, который использует все лучшее из Bitcoin и Ethereum через скоординированную платформу, разработал свою собственную виртуальную машину, с улучшенными сетевыми возможностями (Network Enhanced Virtual Machine, NEVM).
Как объясняют разработчики проекта, конструкция Syscoin сохраняет «золотой стандарт» безопасности механизма консенсуса Биткойна и объединенного майнинга, обеспечивая при этом характеристики производительности, ожидаемые в будущем Ethereum 2.0 благодаря технологии L2 ZK-Rollup.
Основными преимуществами NEVM являются: L2 масштабируемость для смарт-контрактов, а также независимые рынки вознаграждений, которые работают на основе ZK-Rollup.
NEVM также совместим с Ethereum, поэтому практически любой смарт-контракт на базе ETH может быть развернут на NEVM. Кроме того, платформа обеспечивает надежную безопасность, поскольку использует проверенный протокол L1, применяя слияние биткоин-майнеров PoW и консенсус, соответствующий требованиям Биткоина.
В дополнение к этим функциям, адаптация протокола позволяет без доверия переносить стоимость между Bitcoin и Ethereum (SYS <-> NEVM), и все это на единой, скоординированной платформе.