В предыдущем уроке мы разобрались, что smart contract — это программа с правилами и состоянием, которую может выполнять блокчейн.
Теперь разберёмся, где именно выполняется эта программа и как разработчик её создаёт.
Для этого важно различать три понятия:
Ethereum → EVM → Solidity
Они связаны между собой, но означают разные вещи.
Что такое Ethereum
Ethereum — это блокчейн-сеть, созданная не только для перевода криптовалюты, но и для выполнения программ — smart contracts.
В Ethereum множество участников поддерживают общее состояние сети.
В этом состоянии могут храниться:
- балансы;
- адреса;
- данные smart contracts;
- результаты выполненных транзакций.
Когда пользователь отправляет транзакцию контракту, сеть должна выполнить его код одинаковым образом для всех участников.
Для этого используется EVM.
Что такое EVM
EVM — Ethereum Virtual Machine.
Это виртуальная среда, в которой выполняется код smart contracts.
Её можно представить как общий набор правил выполнения программ.
Когда smart contract получает вызов, EVM:
- 1.читает инструкции контракта;
- 2.выполняет их по определённым правилам;
- 3.рассчитывает результат;
- 4.изменяет состояние, если выполнение прошло успешно.
Одна из важных идей блокчейна заключается в том, что участники сети могут проверить выполнение одной и той же программы и получить одинаковый результат.
Упрощённо:
Транзакция → EVM выполняет контракт → состояние обновляется
Где здесь Solidity
EVM не исполняет код в том виде, в котором его пишет человек.
Разработчики используют более понятный язык программирования — 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.
Один из блоков описывает неверное действие.