цифровая электроника
вычислительная техника
встраиваемые системы

 

Что такое Ethereum Virtual Machine

Автор: Mike(admin) от 28-11-2017, 20:25

Для создания смарт-контрактов важно знать язык программирования Solidity. Ранее были приведены примеры по основам Solidity и простому созданию некоторого подобия криптовалюты с помощью этого языка. Но для запуска самих смарт-контрактов нужен еще оди немаловажный элемент – виртуальная машина Ethereum Virtual Machine (EVM).


Ethereum Virtual Machine

Ethereum Virtual Machine представляет собой среду выполнения смарт-контрактов в системе Ethereum. Ее основной особенностью является изолированность от внешнего мира, то есть код, работающий внутри EVM, не имеет доступа к сети, файловой системе или другим подобным элементам. Интеллектуальные контракты также могут иметь ограниченный доступ к другим смарт-контрактам.


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


В сети Ethereum имеется 2 вида учетных записей, имеющих одинаковое адресное пространство: внешние учетные записи, которые управляются парами ключей открытого доступа, и контактные учетные записи, которые контролируются кодом, хранящимся вместе с учетной записью. Адрес внешней учетной записи определяется из открытого ключа, в то время как адрес контракта определяется на момент создания контракта (он получается из адреса создателя и количества транзакций, отправленных с этого адреса). Независимо от того, хранит ли код учетная запись или нет, два типа одинаково обрабатываются EVM. Каждая учетная запись имеет постоянное хранилище значений ключа, сопоставляющее 256-битные слова с 256-битными словами, называемыми хранилищем.


Транзакция представляет собой сообщение, которое отправляется из одной учетной записи в другую учетную запись. Оно может включать двоичные данные (полезную информацию) и эфир (Ether). Если целевая учетная запись содержит код, этот код выполняется и полезная информация предоставляется в качестве входных данных. Если целевой учетной записью является нулевая учетная запись (с адресом 0), транзакция создает новый контракт. Полезная информация такой транзакции создания контракта принимается как байт-код EVM и выполняется. Результат этого исполнения постоянно хранится как код контракта.


После создания каждой транзакции взимается определенное количество газа, целью которого является ограничение объема работы, необходимой для прохождения транзакции, и для оплаты этого исполнения. Хотя EVM выполняет транзакцию, газ постепенно истощается в соответствии с конкретными правилами. В системе учитывается цена на газ, то есть стоимость, установленная создателем транзакции, которая должна оплачивать газ. Если после исполнения остаётся некоторый газ, он возвращается таким же образом. Если газ расходуется (т. е. его количество становится отрицательным), запускается исключение типа «отсутствие газа», которое возвращает все изменения, сделанные в текущем кадре вызова.


Как уже упоминалось ранее, каждая учетная запись имеет постоянную область памяти, которая называется хранилищем (storage). Это хранилище ключей, которое ставит в соответствие одни 256-битные слова другим 256-битным словам. Невозможно «перебрать» хранилище в рамках контракта, и его сравнительно дорого читать и тем более изменять это хранилище. Контракт не может ни читать, ни писать в любое другое хранилище, кроме его собственного. Вторая область памяти называется собственно памятью (memory), из которой контракт получает только «очищенный» экземпляр объекта для каждого вызова сообщения. Память является линейной и может адресоваться на уровне байтов, но чтение ограничено шириной в 256 бит, тогда как запись может быть либо 8-битного, либо 256-битного формата.


EVM не является регистровой машиной, она использует стековую модель, поэтому все вычисления выполняются в области, называемой стеком. Он имеет максимальный размер 1024 элемента и содержит слова из 256 бит. Доступ к стеку ограничивается верхней планкой следующим образом: возможно скопировать один из самых верхних 16 элементов в верхнюю часть стека или заменить верхний элемент одним из 16 элементов под ним. Все остальные операции берут верхние два (или один или более, в зависимости от операции) элемента из стека и помещают результат в стек. Конечно, можно перемещать элементы стека в хранилище или память, но невозможно просто получить доступ к произвольным элементам глубоко в стеке, не удалив сначала верхнюю часть стека.


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




© digitrode.ru


Теги: криптовалюты, Ethereum, блокчейн, Ethereum Virtual Machine




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий