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

От кода к контракту: Compile и Deploy

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

В прошлом уроке мы разобрали цепочку:

Solidity → компилятор → bytecode → EVM

Но написанный код ещё не является контрактом, существующим в блокчейне.

Чтобы сеть могла хранить и выполнять программу, её нужно скомпилировать и развернуть — deploy.

Шаг 1. Разработчик пишет Solidity-код

Сначала существует обычный исходный код.

Например:

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

Это текст, понятный разработчику.

EVM не исполняет такой Solidity-код напрямую. Сначала его необходимо скомпилировать.

Шаг 2. Код компилируется

Компиляция — это преобразование исходного Solidity-кода в форму, которую понимает EVM.

Компилятор проверяет код и создаёт, среди прочего, bytecode.

Упрощённо:

Solidity → Compiler → Bytecode

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

В таком случае контракт ещё не отправляется в блокчейн.

Шаг 3. Появляется bytecode

Bytecode — набор низкоуровневых инструкций для EVM.

Он может выглядеть как длинная последовательность символов:

10x6080604052...

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

Главное понимать:

Solidity удобен человеку, bytecode предназначен для EVM.

Шаг 4. Отправляется deployment-транзакция

После успешной компиляции контракт можно развернуть — deploy.

Deployment выполняется с помощью специальной транзакции.

Она отправляет в сеть данные, необходимые для создания нового smart contract.

То есть deploy — это не просто сохранение файла.

Это настоящее действие в блокчейне:

Bytecode → Deployment transaction → Ethereum

Как и другие транзакции, deployment:

  • подписывается;
  • отправляется в сеть;
  • требует выполнения;
  • использует gas;
  • может завершиться успешно или с ошибкой.

Шаг 5. Контракт получает адрес

После успешного deployment в блокчейне появляется новый экземпляр контракта.

У него есть собственный адрес.

Например:

10x8A3...F21

По этому адресу можно найти контракт и взаимодействовать с ним.

Важно различать:

  • адрес пользователя — представляет blockchain account;
  • адрес контракта — указывает на размещённый smart contract.

Оба выглядят как Ethereum-адреса, но используются по-разному. Адрес контракта не является секретом.

Один код — несколько контрактов

Один и тот же Solidity-код можно развернуть несколько раз.

Например:

1Guild.sol
2 ↓ deploy
3Contract A: 0x111...
4 ↓ deploy ещё раз
5Contract B: 0x222...

Это будут два отдельных контракта.

У каждого:

  • свой адрес;
  • своё состояние;
  • свои сохранённые значения.

Даже если их код одинаковый.

Это похоже на создание нескольких независимых экземпляров одной программы.

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

Например:

1Пользователь
2 ↓
3Транзакция
4 ↓
5Адрес контракта
6 ↓
7EVM выполняет функцию
8 ↓
9Состояние контракта меняется

Именно с такими уже развёрнутыми контрактами работают blockchain-приложения.

Начальные данные и constructor

При создании контракта иногда нужно сразу установить начальные данные.

Для этого в Solidity существует специальная функция — constructor.

Например, контракт может при deployment сохранить адрес создателя или начальное значение.

Пока не нужно учить синтаксис constructor.

Важно только понимать:

constructor выполняется один раз — во время создания контракта.

Позже в основном Solidity-курсе мы разберём его подробнее.

Полный путь

Теперь жизненный цикл нового контракта можно представить так:

1Solidity-код
2 ↓
3Компиляция
4 ↓
5Bytecode
6 ↓
7Deployment transaction
8 ↓
9Выполнение EVM
10 ↓
11Новый smart contract
12 ↓
13Адрес контракта

После этого контракт существует в блокчейне и может принимать вызовы.

Compile превращает Solidity-код в bytecode.

Deploy создаёт новый контракт в блокчейне.

После успешного deployment контракт получает собственный адрес.

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

Задание

Соберите путь создания smart contract.

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

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

Схема

Соберите путь создания smart contract: от Solidity-кода до контракта с адресом. Один блок лишний.

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

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