July 22

EVM и про VM в общем. Лекция.

Вступление

Начнём с того, почему я выбрал эту тему.

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

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

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

EVM

Хочу начать лекцию именно с EVM, так как все о ней слышали, но мало кто разбирался в том, как она работает и что скрывается "под капотом" у Ethereum, а это самая популярная виртуальная машина, которая так много привнесла в криптовалютный мир.

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


Физическую установку EVM нельзя описать также, как объекты вроде облака или океанской волны. Виртуальная машина существует как единое целое благодаря тысячам компьютеров, подключенных к клиенту Ethereum.

Сам протокол Ethereum существует исключительно с целью поддержания постоянной, непрерывной и неизменной работы этой специальной машины состояния. Это среда, в которой живут все аккаунты и смарт-контракты Ethereum. При любом заданном блоке в цепочке Ethereum есть одно и только одно «каноничное» состояние, и EVM — это то, определяет правила вычисления нового допустимого состояния от блока к блоку.


EVM - это программная платформа, или "виртуальный компьютер", используемый разработчиками для создания децентрализованных приложений (Dapp), а также для исполнения и развертывания смарт-контрактов в системе Ethereum.

EVM является "сердцем" Ethereum, подобно тому как процессор является "сердцем" ПК или как ДВС, является главным звеном в автомобиле.

Физическую установку EVM нельзя описать как компьютер, она существует благодаря тысячам компьютеров, которые подключены к клиенту Ethereum. Это то, что мы и называем – децентрализацией.

Первым прообразом подобной децентрализации был BitTorrent, который работал также, нигде и везде одновременно, поэтому его и нельзя было заблокировать. Вероятно, что его идея и использовалась для начала работы над EVM, как минимум Виталик Бутерин не раз его вспоминал и называл первым DApp.

Зачем она нужна?

Цель виртуальной машины Ethereum — определить состояние каждого блока в блокчейне Ethereum. Хотя EVM похожи на другие сети на основе блокчейна тем, что они используют распределённый реестр для поддержания баз данных для транзакций, они добавляют ещё один уровень функционирования благодаря своим возможностям смарт-контрактов. Многие называют этот второй уровень «распределённой государственной машиной».

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

То есть, EVM – часть Ethereum, которая отвечает за исполнение и развёртывание смарт контрактов. Именно из-за неё и работают тысячи Dapps на основе Ethereum.


Ноды

Также именно EVM выступает той прослойкой между байт-кодом и машиной(пк/сервер), на которой мы запускаем клиент Geth/Go Ethereum, который позволяет этой машине подключится к децентрализованной сети.


Байт код

Я уже сравнивал EVM с процессором, и тут важно понимать как работают обычные программы, чтобы было легче понять работу EVM.

Так вот любая программа на ПК написана на каком-то языке программирования, будь то Java, C++ или боже упаси C, но процессор не понимает эти языки программирования, поэтому код компилируется и преобразуется в байт-код, который уже и выполняет процессор.

Смарт контракты и Dapps тоже пишутся на отдельном языке программирования – Solidity. Именно его код преобразуется в байт-код и распределяется по нодам.

При развертывании смарт-контракта каждый нод получает его копию, запускает свой байт-код и передает код тем, кто потребовал развертывания, что приводит к «изменению состояния». Это означает, что текущее состояние блокчейна изменилось, что можно сделать только с согласия каждого узла.

Пример байт-кода:

6080604052348015600f57600080fd5b5060405160208061010183398101806040528101908080519060200190929190505050806000819055505060d08061003f6000396000f3fe6080604052600436106049576000357c01000000000000000000000000000000000000000000000000000000009004806360fe47b114604e5780636d4ce63c146076575b600080fd5b6054607f565b6040518082815260200191505060405180910390f35b605c6083565b6040518082815260200191505060405180910390f35b60008054905090565b806000819055505056fea26469706673582212202b8a58c61d5c7aeb1cc5cba20a94ff01a408d4cb7a38fcd146ef575d97a9291d64736f6c634300060c0033

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



Шо по битку?

Естественно, сразу интересно как воркает биткоин и что у него за виртуальная машина, но тут все сухо и грустно. Bitcoin не имеет как таковой виртуальной машины, он использует Bitcoin Script, который может выполнять очень ограниченное количество действий и не является полным по Тьюрингу как EVM, за счёт этого он безопаснее, но при этом очень ограничен, это было сделано намерено, чтобы минимизировать уязвимости.

Скрипты в биткоине выполняются один раз при проверке транзакции и не хранятся, как это реализовано в Ethereum.

Ну и, собственно, смарт-контракты он не поддерживает.

Уже по названию скрипт – многое становится понятно.


Другие VM