Перейти к основному контенту

Смарт-контракт Hello World для начинающих

Solidity
Hardhat
Alchemy
Умные контракты
развертывание
Beginner
elanh
31 марта 2021 г.
11 минута прочтения

Если вы новичок в разработке блокчейн-приложений и не знаете, с чего начать, или если вы просто хотите понять, как развертывать смарт-контракты и взаимодействовать с ними, это руководство для вас. Мы рассмотрим создание и развертывание простого смарт-контракта в тестовой сети Sepolia с помощью виртуального кошелька MetaMask (opens in a new tab), Solidity (opens in a new tab), Hardhat (opens in a new tab) и Alchemy (opens in a new tab) (не волнуйтесь, если вы еще не понимаете, что все это значит, мы объясним).

Во второй части (opens in a new tab) этого руководства мы рассмотрим, как можно взаимодействовать с нашим смарт-контрактом после его развертывания, а в третьей части (opens in a new tab) мы расскажем, как опубликовать его на Etherscan.

Если у вас на любом этапе возникнут вопросы, не стесняйтесь задавать их в Discord-канале Alchemy (opens in a new tab)!

Шаг 1. Подключение к сети Ethereum

Существует много способов отправлять запросы в сеть Ethereum. Для простоты мы будем использовать бесплатную учетную запись на Alchemy — это платформа для блокчейн-разработчиков и API, которая позволяет нам взаимодействовать с блокчейном Ethereum без необходимости запускать собственные узлы. Платформа также имеет инструменты для мониторинга и аналитики, которыми мы воспользуемся в этом руководстве, чтобы понять, что происходит «под капотом» при развертывании нашего смарт-контракта. Если у вас еще нет учетной записи Alchemy, вы можете бесплатно зарегистрироваться здесь (opens in a new tab).

Шаг 2. Создайте свое приложение (и ключ API)

Как только регистрация в Alchemy завершена, можно создать приложение и таким образом сгенерировать ключ API. Это позволит нам делать запросы к тестовой сети Sepolia. Если вы не знакомы с тестовыми сетями, ознакомьтесь с этой страницей.

  1. Перейдите на страницу "Create new app" в вашей панели управления Alchemy, выбрав "Select an app" на панели навигации и нажав "Create new app"

Создание приложения Hello world

  1. Назовите свое приложение "Hello World", добавьте краткое описание и выберите вариант использования, например "Infra & Tooling". Далее найдите "Ethereum" и выберите сеть.

Вид создания приложения hello world

  1. Нажмите "Next" для продолжения, затем “Create app”, и все готово! Ваше приложение должно появиться в раскрывающемся меню панели навигации, а ключ API будет доступен для копирования.

Шаг 3. Создайте учетную запись Ethereum (адрес)

Нам нужен аккаунт Ethereum для того, чтобы отправлять и получать транзакции. В этом руководстве мы будем использовать MetaMask, виртуальный кошелек в браузере, используемый для управления адресом вашего аккаунта Ethereum. Подробнее о транзакциях.

Вы можете скачать MetaMask и бесплатно создать учетную запись Ethereum здесь (opens in a new tab). При создании учетной записи или если она у вас уже есть, обязательно переключитесь на тестовую сеть "Sepolia" в раскрывающемся меню сетей (чтобы мы не работали с реальными деньгами).

Если вы не видите Sepolia в списке, зайдите в меню, затем в раздел Advanced и прокрутите вниз, чтобы включить опцию "Show test networks". В меню выбора сети перейдите на вкладку "Custom", чтобы найти список тестовых сетей, и выберите "Sepolia".

Пример MetaMask Sepolia

Шаг 4. Получите эфир из крана

Чтобы развернуть наш смарт-контракт в тестовой сети, нам понадобится немного тестового Eth. Чтобы получить ETH в сети Sepolia, вы можете перейти к сведениям о сети Sepolia, чтобы просмотреть список различных кранов. Если один не работает, попробуйте другой, так как они иногда могут иссякать. Получение тестовых ETH может занять некоторое время из-за загруженности сети. Вскоре после этого вы увидите ETH в своем кошельке MetaMask!

Шаг 5. Проверьте свой баланс

Чтобы дважды проверить наш баланс, давайте сделаем запрос eth_getBalance, используя инструмент Alchemy Composer (opens in a new tab). Результат будет содержать сумму ETH в нашем кошельке. После ввода адреса вашего аккаунта MetaMask и нажатия «Send Request» вы должны увидеть примерно такой ответ:

{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }

ПРИМЕЧАНИЕ. Этот результат указан в wei, а не в ETH. Wei это наименьшая единица измерения эфира. Конвертация из wei в ETH: 1 eth = 1018 wei. Итак, если мы конвертируем 0x2B5E3AF16B1880000 в десятичную систему, мы получим 5*10¹⁸, что равно 5 ETH.

Фух! Наши тестовые деньги на месте .

Шаг 6. Инициализируйте наш проект

Во-первых, надо создать директорию для нашего проекта. Перейдите в вашу командную строку и наберите:

mkdir hello-world
cd hello-world

Теперь, когда мы находимся в папке нашего проекта, мы будем использовать npm init для его инициализации. Если у вас еще не установлен npm, следуйте этим инструкциям (opens in a new tab) (нам также понадобится Node.js, так что скачайте и его!).

npm init

Неважно, как вы ответите на вопросы при установке. Вот как для примера сделали это мы:

Подтвердите package.json, и мы готовы!

Шаг 7. Загрузите Hardhat (opens in a new tab)

Hardhat - это среда для сборки, развертывания, тестирования и отладки программного обеспечения Ethereum. Он помогает разработчикам создавать смарт-контракты и децентрализованные приложения локально перед их развертыванием в основной сети.

Внутри нашего проекта hello-world запустите:

npm install --save-dev hardhat

Более подробную информацию об инструкциях по установке (opens in a new tab) можно найти на этой странице.

Шаг 8. Создайте проект Hardhat

В директории проекта запустите:

npx hardhat

Вы увидите приветственное сообщение и интерфейс с вариантами того, что делать дальше. Выберите "create an empty hardhat.config.js":

Эта команда создаст для нас файл hardhat.config.js, в котором мы укажем все настройки для нашего проекта (в шаге 13).

Шаг 9. Добавьте папки проекта

Для поддержания порядка в проекте мы создадим две новые папки. Перейдите в командной строке в корневую директорию проекта и наберите:

mkdir contracts
mkdir scripts
  • contracts/ — здесь мы будем хранить файл с кодом нашего смарт-контракта «hello world».
  • scripts/ — здесь мы будем хранить скрипты для развертывания нашего контракта и взаимодействия с ним.

Шаг 10. Напишите наш контракт

Вы, наверное, спрашиваете себя, когда же мы наконец начнем писать код?? Что ж, вот мы и на шаге 10.

Откройте проект hello-world в вашем любимом редакторе (нам нравится VSCode (opens in a new tab)). Смарт-контракты пишутся на языке под названием Solidity, который мы и будем использовать для написания нашего смарт-контракта HelloWorld.sol.‌

  1. Перейдите в папку «contracts» и создайте новый файл с именем HelloWorld.sol
  2. Ниже приведен пример смарт-контракта Hello World от Ethereum Foundation, который мы будем использовать в этом руководстве. Скопируйте и вставьте приведенное ниже содержимое в ваш файл HelloWorld.sol и обязательно прочтите комментарии, чтобы понять, что делает этот контракт:

Это очень простой смарт-контракт, который сохраняет сообщение при создании и может быть обновлен путем вызова функции update.

Шаг 11. Подключите MetaMask и Alchemy к вашему проекту

Мы создали кошелек MetaMask, учетную запись Alchemy и написали наш смарт-контракт, теперь пришло время их соединить.

Каждая транзакция, сделанная с вашего виртуального кошелька, требует подпись с использованием вашего же персонального ключа. Чтобы дать программе такую возможность, мы можем сохранить наш приватный ключ (и ключ API Alchemy) в файле окружения.

Чтобы узнать больше об отправке транзакций, ознакомьтесь с этим руководством по отправке транзакций с использованием web3.

Во-первых, установите dotenv, находясь в директории проекта:

npm install dotenv --save

Затем создайте файл .env в корневом каталоге нашего проекта и добавьте в него свой закрытый ключ MetaMask и URL-адрес HTTP API Alchemy.

получить ключ API alchemy

Скопируйте URL-адрес API Alchemy

Ваш .env должен выглядеть следующим образом:

API_URL = "https://eth-sepolia.g.alchemy.com/v2/ваш-ключ-api"
PRIVATE_KEY = "ваш-приватный-ключ-metamask"

Чтобы подключить их к нашему коду, мы будем ссылаться на эти переменные в нашем файле hardhat.config.js в шаге 13.

Не добавляйте .env в коммиты! Пожалуйста, никогда и никому не сообщайте и не показывайте содержимое файла .env, так как тем самым вы компрометируете свои секретные данные. Если вы используете систему контроля версий, добавьте .env в файл gitignore.

Шаг 12: Установите Ethers.js

Ethers.js — это библиотека, которая упрощает взаимодействие и отправку запросов в Ethereum, оборачивая стандартные методы JSON-RPC в более удобные для пользователя методы.

Hardhat очень упрощает интеграцию плагинов (opens in a new tab) для дополнительных инструментов и расширенной функциональности. Мы воспользуемся преимуществами плагина Ethers (opens in a new tab) для развертывания контракта (Ethers.js (opens in a new tab) имеет несколько очень удобных методов развертывания контрактов).

В директории проекта запустите:

npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"

Нам также потребуется ethers в нашем hardhat.config.js на следующем шаге.

Шаг 13: Обновите hardhat.config.js

Мы добавили несколько зависимостей и плагинов, и теперь нам нужно обновить hardhat.config.js, чтобы наш проект знал обо всех них.

Обновите ваш hardhat.config.js, чтобы он выглядел следующим образом:

Шаг 14: Скомпилируйте наш контракт

Пора заставить это работать, давайте скомпилируем наш контракт. Задача compile — одна из встроенных задач hardhat.

Запустите в командной строке:

npx hardhat compile

Вы можете получить предупреждение об SPDX license identifier not provided in source file, но не беспокойтесь об этом — надеюсь, все остальное выглядит хорошо! Если нет, вы всегда можете написать в Discord-канал Alchemy (opens in a new tab).

Шаг 15: Напишите наш скрипт развертывания

Контракт написан, файл конфигурации корректен, пора писать скрипт развертывания.

Перейдите в папку scripts/, создайте новый файл deploy.js и добавьте в него следующее содержимое:

Hardhat отлично объясняет, что делает каждая из этих строк кода, в своем руководстве по контрактам (opens in a new tab), мы использовали их объяснения здесь.

const HelloWorld = await ethers.getContractFactory("HelloWorld");

ContractFactory в ethers.js — это абстракция, используемая для развертывания новых смарт-контрактов, так что HelloWorld здесь — это фабрика для экземпляров нашего контракта «hello world». При использовании плагина hardhat-ethers экземпляры ContractFactory и Contract по умолчанию подключаются к первому подписанту.

const hello_world = await HelloWorld.deploy();

Вызов deploy() на ContractFactory запустит развертывание и вернет Promise, который разрешается в Contract. Это объект, который имеет метод для каждой из функций нашего смарт контракта.

Шаг 16: Разверните наш контракт

Мы наконец-то готовы развернуть наш смарт контракт! Перейдите в командную строку и запустите:

npx hardhat run scripts/deploy.js --network sepolia

Вы должны увидеть что-то наподобие:

Контракт развернут по адресу: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570

Если мы перейдем на Etherscan для Sepolia (opens in a new tab) и выполним поиск по адресу нашего контракта, то увидим, что он был успешно развернут. Транзакция будет выглядеть примерно так:

контракт на etherscan

Адрес From должен совпадать с адресом вашей учетной записи MetaMask, а в адресе To будет указано «Contract Creation», но если мы нажмем на транзакцию, мы увидим адрес нашего контракта в поле To:

транзакция на etherscan

Поздравляем! Вы только что развернули смарт-контракт в блокчейне Ethereum 🎉

Чтобы понять, что происходит «под капотом», давайте перейдем на вкладку Explorer в нашей панели управления Alchemy (opens in a new tab). Если у вас несколько приложений Alchemy, убедитесь, что вы отфильтровали их по приложению и выбрали «Hello World». проводник hello world

Здесь вы увидите несколько вызовов JSON-RPC, которые Hardhat/Ethers сделали для нас «под капотом», когда мы вызывали функцию .deploy(). Здесь следует отметить два важных вызова: eth_sendRawTransaction (opens in a new tab), который является запросом на фактическую запись нашего контракта в сеть Sepolia, и eth_getTransactionByHash (opens in a new tab), который является запросом на чтение информации о нашей транзакции по заданному хешу (типичный шаблон при работе с транзакциями). Чтобы узнать больше об отправке транзакций, ознакомьтесь с этим руководством по отправке транзакций с помощью Web3

На этом первая часть этого руководства закончена, во второй части мы будем взаимодействовать с нашим смарт-контрактом (opens in a new tab), обновив наше первоначальное сообщение, а в третьей части мы опубликуем наш смарт-контракт на Etherscan (opens in a new tab), чтобы каждый мог узнать, как с ним взаимодействовать.

Хотите узнать больше об Alchemy? Посетите наш веб-сайт (opens in a new tab). Никогда не хотите пропускать обновления? Подпишитесь на нашу рассылку здесь (opens in a new tab)! Обязательно присоединяйтесь к нашему Discord (opens in a new tab)..

Последнее обновление страницы: 3 марта 2026 г.

Было ли это руководство полезным?