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

Как всё работает вместе

Соберите полный путь smart contract — от Solidity-кода разработчика до транзакции пользователя и изменения состояния блокчейна.

За предыдущие уроки мы разобрали отдельные части blockchain-разработки. Теперь соберём их в одну картину.

Если какие-то детали пока не запомнились — это нормально. Главная цель вводного курса не в том, чтобы выучить термины наизусть, а в том, чтобы понимать, что происходит с программой от момента написания кода до изменения состояния блокчейна.

Всё начинается с программы

Разработчик пишет smart contract на Solidity. Например:

solidity
1contract BuildersGuild {
2 uint256 public guildScore = 100;
3}

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

  • какие данные хранит контракт;
  • какие действия он предоставляет;
  • какие правила должны выполняться.

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

1Solidity
2 ↓
3Компилятор
4 ↓
5Bytecode

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

Контракт появляется в блокчейне

Чтобы программа появилась в блокчейне, выполняется deployment:

1Bytecode
2 ↓
3Deployment-транзакция
4 ↓
5Smart contract

После успешного deployment контракт получает собственный blockchain-адрес и отдельное состояние. Например:

1Адрес контракта: 0x71A...F42
2Состояние: guildScore = 100

Теперь контракт существует в сети и с ним можно взаимодействовать.

Пользователь действует через приложение

Обычно пользователь не вводит blockchain-команды вручную. Он видит обычный интерфейс приложения:

1[ Вступить в гильдию ]
2[ Получить награду ]
3[ Увеличить счёт ]

Приложение помогает сформировать нужный запрос к smart contract.

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

Кошелёк подтверждает действие

Представим, что пользователь хочет выполнить действие, которое изменит контракт.

Приложение формирует запрос и передаёт его кошельку. Кошелёк показывает детали. После подтверждения пользователя кошелёк создаёт цифровую подпись с помощью закрытого ключа.

Сам закрытый ключ при этом не передаётся приложению или сети.

Упрощённо:

1Приложение
2 ↓
3Кошелёк
4 ↓
5Подтверждение пользователя
6 ↓
7Подписанная транзакция

Сеть выполняет транзакцию

После подписания транзакция отправляется в blockchain-сеть. Она может некоторое время ожидать включения в блок.

Когда сеть принимает её для выполнения, EVM запускает код нужного smart contract:

1Транзакция
2 ↓
3EVM
4 ↓
5Smart contract

Smart contract не обязан выполнять любой запрос. Сначала его код может проверить условия:

1Пользователь зарегистрирован?
2Достаточно средств?
3Разрешено ли этому адресу действие?
4Не использована ли награда раньше?

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

Состояние изменяется

Представим, что до действия guildScore = 100. Пользователь успешно вызывает действие, которое добавляет 10 очков. После выполнения guildScore = 110.

Новое значение становится частью состояния контракта. Сеть фиксирует результат, а другие участники могут его проверить.

Полный путь

Теперь весь путь можно представить так:

1Разработчик пишет Solidity
2 ↓
3Код компилируется в bytecode
4 ↓
5Контракт разворачивается в блокчейне
6 ↓
7Контракт получает адрес
8 ↓
9Пользователь выбирает действие в dApp
10 ↓
11Кошелёк подписывает транзакцию
12 ↓
13Транзакция отправляется в сеть
14 ↓
15EVM выполняет код контракта
16 ↓
17Контракт проверяет правила
18 ↓
19Состояние обновляется

Именно этот цикл стоит за многими действиями blockchain-приложений.

Что вы уже знаете

  • Программа — набор инструкций, которые выполняет компьютер.
  • Клиент и сервер — обычная модель взаимодействия веб-приложений.
  • Блокчейн — общее состояние, изменения которого проверяются сетью.
  • Кошелёк — помогает управлять аккаунтом и подписывать действия.
  • Цифровая подпись — подтверждает действие без передачи закрытого ключа.
  • Транзакция — запрос изменить состояние блокчейна.
  • Gas — мера вычислительной работы при выполнении операций.
  • Smart contract — программа с состоянием и правилами, размещённая в блокчейне.
  • Ethereum — blockchain-сеть, в которой могут работать smart contracts.
  • EVM — среда, выполняющая код контрактов.
  • Solidity — язык, на котором мы будем писать эти контракты.
  • Compile — преобразование Solidity-кода в bytecode.
  • Deploy — создание экземпляра контракта в блокчейне.

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

В основном курсе вы будете шаг за шагом создавать BuildersGuild. Сначала появится первая переменная:

solidity
1uint256 public guildScore = 100;

Затем вы добавите новые данные, функции, проверки, участников и постепенно соберёте полноценный smart contract.

Не нужно знать весь Solidity заранее. Каждая новая конструкция будет появляться отдельно и сразу использоваться на практике.

База готова. Пора писать Solidity.

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

В следующем курсе мы перестанем только наблюдать за этой системой и начнём создавать её сами.

Задание

Соберите полный путь smart contract.

Перед вами этапы жизненного цикла smart contract. Расположите их в правильном порядке — от написания Solidity-кода до изменения состояния после действия пользователя.

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

Схема

Соберите полный путь smart contract. Один из десяти блоков лишний.

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

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