Начинаем с основ · урок 7

Ethereum, EVM и Solidity

Разберитесь, какую роль играют Ethereum, EVM и Solidity и как написанный код превращается в исполняемый smart contract.

В предыдущем уроке мы разобрались, что smart contract — это программа с правилами и состоянием, которую может выполнять блокчейн.

Теперь разберёмся, где именно выполняется эта программа и как разработчик её создаёт.

Для этого важно различать три понятия:

Ethereum → EVM → Solidity

Они связаны между собой, но означают разные вещи.

Что такое Ethereum

Ethereum — это блокчейн-сеть, созданная не только для перевода криптовалюты, но и для выполнения программ — smart contracts.

В Ethereum множество участников поддерживают общее состояние сети.

В этом состоянии могут храниться:

  • балансы;
  • адреса;
  • данные smart contracts;
  • результаты выполненных транзакций.

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

Для этого используется EVM.

Что такое EVM

EVM — Ethereum Virtual Machine.

Это виртуальная среда, в которой выполняется код smart contracts.

Её можно представить как общий набор правил выполнения программ.

Когда smart contract получает вызов, EVM:

  1. 1.читает инструкции контракта;
  2. 2.выполняет их по определённым правилам;
  3. 3.рассчитывает результат;
  4. 4.изменяет состояние, если выполнение прошло успешно.

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

Упрощённо:

Транзакция → EVM выполняет контракт → состояние обновляется

Где здесь Solidity

EVM не исполняет код в том виде, в котором его пишет человек.

Разработчики используют более понятный язык программирования — Solidity. Это основной язык, который мы будем использовать в курсе.

Например, код может выглядеть так:

solidity
1contract Guild {
2 uint256 public members = 10;
3}

Solidity позволяет описывать:

  • какие данные хранит контракт;
  • какие функции можно вызвать;
  • какие проверки должны выполняться;
  • кто имеет право выполнять определённые действия;
  • как изменяется состояние.

Позже в основном курсе мы начнём писать такой код самостоятельно.

Код Solidity не отправляется в EVM напрямую. Сначала он проходит через компилятор.

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

Упрощённо этот путь выглядит так:

Solidity-код → Компилятор → Bytecode → EVM

Bytecode — низкоуровневое представление программы, предназначенное для исполнения виртуальной машиной.

Вам не нужно писать bytecode вручную. Разработчик пишет Solidity, а компилятор выполняет преобразование автоматически.

Теперь можно собрать полную картину.

Разработчик пишет:

Solidity

Код преобразуется:

Solidity → Compiler → Bytecode

А после размещения контракта в Ethereum:

Транзакция → EVM → код контракта → новое состояние

Поэтому Ethereum, EVM и Solidity выполняют разные задачи:

  • Ethereum — сеть, в которой существует контракт.
  • EVM — среда, которая исполняет его инструкции.
  • Solidity — язык, на котором разработчик описывает эти инструкции.

Можно провести очень грубую аналогию с обычным компьютером.

Solidity похож на язык, на котором разработчик пишет программу.

Компилятор переводит её в форму, понятную машине.

EVM выполняет полученные инструкции.

Ethereum предоставляет сеть и общее состояние, в котором существует результат выполнения.

Аналогия упрощённая, но на этом этапе она помогает разделить эти понятия.

Не нужно пока знать устройство EVM изнутри.

Для следующих уроков достаточно понимать цепочку:

Solidity → компиляция → EVM → выполнение контракта

Позже мы постепенно разберём, как написать Solidity-код, скомпилировать его и разместить контракт в блокчейне.

Задание

Соберите путь Solidity-программы до её выполнения.

Расположите этапы в правильном порядке — от кода, который пишет разработчик, до выполнения программы в Ethereum.

Один из блоков описывает неверное действие.

Схема

Соберите путь Solidity-программы до её выполнения. Расположите этапы в правильном порядке. Один блок лишний.

Добавьте первый блок
Доступные блоки

Войдите, чтобы сохранить прохождение.