За предыдущие уроки мы разобрали отдельные части blockchain-разработки. Теперь соберём их в одну картину.
Если какие-то детали пока не запомнились — это нормально. Главная цель вводного курса не в том, чтобы выучить термины наизусть, а в том, чтобы понимать, что происходит с программой от момента написания кода до изменения состояния блокчейна.
Всё начинается с программы
Разработчик пишет smart contract на Solidity. Например:
1contract BuildersGuild {2 uint256 public guildScore = 100;3}Solidity позволяет описать:
- какие данные хранит контракт;
- какие действия он предоставляет;
- какие правила должны выполняться.
Но EVM не исполняет Solidity-код напрямую. Сначала код проходит через компилятор:
1Solidity2 ↓3Компилятор4 ↓5BytecodeКомпилятор преобразует понятный разработчику код в инструкции, которые может выполнять EVM.
Контракт появляется в блокчейне
Чтобы программа появилась в блокчейне, выполняется deployment:
1Bytecode2 ↓3Deployment-транзакция4 ↓5Smart contractПосле успешного deployment контракт получает собственный blockchain-адрес и отдельное состояние. Например:
1Адрес контракта: 0x71A...F422Состояние: guildScore = 100Теперь контракт существует в сети и с ним можно взаимодействовать.
Пользователь действует через приложение
Обычно пользователь не вводит blockchain-команды вручную. Он видит обычный интерфейс приложения:
1[ Вступить в гильдию ]2[ Получить награду ]3[ Увеличить счёт ]Приложение помогает сформировать нужный запрос к smart contract.
Если действие только читает данные, приложение может получить текущее состояние без пользовательской транзакции. Если действие должно изменить состояние, начинается другой путь.
Кошелёк подтверждает действие
Представим, что пользователь хочет выполнить действие, которое изменит контракт.
Приложение формирует запрос и передаёт его кошельку. Кошелёк показывает детали. После подтверждения пользователя кошелёк создаёт цифровую подпись с помощью закрытого ключа.
Сам закрытый ключ при этом не передаётся приложению или сети.
Упрощённо:
1Приложение2 ↓3Кошелёк4 ↓5Подтверждение пользователя6 ↓7Подписанная транзакцияСеть выполняет транзакцию
После подписания транзакция отправляется в blockchain-сеть. Она может некоторое время ожидать включения в блок.
Когда сеть принимает её для выполнения, EVM запускает код нужного smart contract:
1Транзакция2 ↓3EVM4 ↓5Smart contractSmart contract не обязан выполнять любой запрос. Сначала его код может проверить условия:
1Пользователь зарегистрирован?2Достаточно средств?3Разрешено ли этому адресу действие?4Не использована ли награда раньше?Если правила не выполнены, транзакция может завершиться ошибкой. Если проверки проходят, контракт продолжает выполнение.
Состояние изменяется
Представим, что до действия guildScore = 100. Пользователь успешно вызывает действие, которое добавляет 10 очков. После выполнения guildScore = 110.
Новое значение становится частью состояния контракта. Сеть фиксирует результат, а другие участники могут его проверить.
Полный путь
Теперь весь путь можно представить так:
1Разработчик пишет Solidity2 ↓3Код компилируется в bytecode4 ↓5Контракт разворачивается в блокчейне6 ↓7Контракт получает адрес8 ↓9Пользователь выбирает действие в dApp10 ↓11Кошелёк подписывает транзакцию12 ↓13Транзакция отправляется в сеть14 ↓15EVM выполняет код контракта16 ↓17Контракт проверяет правила18 ↓19Состояние обновляетсяИменно этот цикл стоит за многими действиями blockchain-приложений.
Что вы уже знаете
- Программа — набор инструкций, которые выполняет компьютер.
- Клиент и сервер — обычная модель взаимодействия веб-приложений.
- Блокчейн — общее состояние, изменения которого проверяются сетью.
- Кошелёк — помогает управлять аккаунтом и подписывать действия.
- Цифровая подпись — подтверждает действие без передачи закрытого ключа.
- Транзакция — запрос изменить состояние блокчейна.
- Gas — мера вычислительной работы при выполнении операций.
- Smart contract — программа с состоянием и правилами, размещённая в блокчейне.
- Ethereum — blockchain-сеть, в которой могут работать smart contracts.
- EVM — среда, выполняющая код контрактов.
- Solidity — язык, на котором мы будем писать эти контракты.
- Compile — преобразование Solidity-кода в bytecode.
- Deploy — создание экземпляра контракта в блокчейне.
До этого момента мы изучали, что происходит вокруг кода. Теперь начинается следующий этап: писать этот код самостоятельно.
В основном курсе вы будете шаг за шагом создавать BuildersGuild. Сначала появится первая переменная:
1uint256 public guildScore = 100;Затем вы добавите новые данные, функции, проверки, участников и постепенно соберёте полноценный smart contract.
Не нужно знать весь Solidity заранее. Каждая новая конструкция будет появляться отдельно и сразу использоваться на практике.
База готова. Пора писать Solidity.
Теперь вы понимаете, что такое smart contract, где он выполняется, как появляется в блокчейне и каким образом пользователь взаимодействует с ним через транзакции.
В следующем курсе мы перестанем только наблюдать за этой системой и начнём создавать её сами.
Задание
Соберите полный путь smart contract.
Перед вами этапы жизненного цикла smart contract. Расположите их в правильном порядке — от написания Solidity-кода до изменения состояния после действия пользователя.
Один из блоков описывает действие, которое не должно происходить.