Смарт-контракт Hello World для начинающих
Если вы новичок в разработке блокчейн-приложений и не знаете, с чего начать, или если вы просто хотите понять, как развертывать смарт-контракты и взаимодействовать с ними, это руководство для вас. Мы рассмотрим создание и развертывание простого смарт-контракта в тестовой сети Sepolia с помощью виртуального кошелька MetaMaskopens in a new tab, Solidityopens in a new tab, Hardhatopens in a new tab и Alchemyopens in a new tab (не волнуйтесь, если вы еще не понимаете, что все это значит, мы объясним).
Во второй частиopens in a new tab этого руководства мы рассмотрим, как можно взаимодействовать с нашим смарт-контрактом после его развертывания, а в третьей частиopens in a new tab мы расскажем, как опубликовать его на Etherscan.
Если у вас на любом этапе возникнут вопросы, не стесняйтесь задавать их в Discord-канале Alchemyopens in a new tab!
Шаг 1. Подключение к сети Ethereum
Существует много способов отправлять запросы в сеть Ethereum. Для простоты мы будем использовать бесплатную учетную запись на Alchemy — это платформа для блокчейн-разработчиков и API, которая позволяет нам взаимодействовать с блокчейном Ethereum без необходимости запускать собственные узлы. Платформа также имеет инструменты для мониторинга и аналитики, которыми мы воспользуемся в этом руководстве, чтобы понять, что происходит «под капотом» при развертывании нашего смарт-контракта. Если у вас еще нет учетной записи Alchemy, вы можете бесплатно зарегистрироваться здесьopens in a new tab.
Шаг 2. Создайте свое приложение (и ключ API)
Как только регистрация в Alchemy завершена, можно создать приложение и таким образом сгенерировать ключ API. Это позволит нам делать запросы к тестовой сети Sepolia. Если вы не знакомы с тестовыми сетями, ознакомьтесь с этой страницей.
- Перейдите на страницу "Create new app" в вашей панели управления Alchemy, выбрав "Select an app" на панели навигации и нажав "Create new app"
- Назовите свое приложение "Hello World", добавьте краткое описание и выберите вариант использования, например "Infra & Tooling". Далее найдите "Ethereum" и выберите сеть.
- Нажмите "Next" для продолжения, затем “Create app”, и все готово! Ваше приложение должно появиться в раскрывающемся меню панели навигации, а ключ API будет доступен для копирования.
Шаг 3. Создайте учетную запись Ethereum (адрес)
Нам нужен аккаунт Ethereum для того, чтобы отправлять и получать транзакции. В этом руководстве мы будем использовать MetaMask, виртуальный кошелек в браузере, используемый для управления адресом вашего аккаунта Ethereum. Подробнее о транзакциях.
Вы можете скачать MetaMask и бесплатно создать учетную запись Ethereum здесьopens in a new tab. При создании учетной записи или если она у вас уже есть, обязательно переключитесь на тестовую сеть "Sepolia" в раскрывающемся меню сетей (чтобы мы не работали с реальными деньгами).
Если вы не видите Sepolia в списке, зайдите в меню, затем в раздел Advanced и прокрутите вниз, чтобы включить опцию "Show test networks". В меню выбора сети перейдите на вкладку "Custom", чтобы найти список тестовых сетей, и выберите "Sepolia".
Шаг 4. Получите эфир из крана
Чтобы развернуть наш смарт-контракт в тестовой сети, нам понадобится немного тестового Eth. Чтобы получить ETH в сети Sepolia, вы можете перейти к сведениям о сети Sepolia, чтобы просмотреть список различных кранов. Если один не работает, попробуйте другой, так как они иногда могут иссякать. Получение тестовых ETH может занять некоторое время из-за загруженности сети. Вскоре после этого вы увидите ETH в своем кошельке MetaMask!
Шаг 5. Проверьте свой баланс
Чтобы дважды проверить наш баланс, давайте сделаем запрос eth_getBalance, используя инструмент Alchemy Composeropens in a new tab. Результат будет содержать сумму ETH в нашем кошельке. После ввода адреса вашего аккаунта MetaMask и нажатия «Send Request» вы должны увидеть примерно такой ответ:
1{ "jsonrpc": "2.0", "id": 0, "result": "0x2B5E3AF16B1880000" }ПРИМЕЧАНИЕ. Этот результат указан в wei, а не в ETH. Wei это наименьшая единица измерения эфира. Конвертация из wei в ETH: 1 eth = 1018 wei. Итак, если мы конвертируем 0x2B5E3AF16B1880000 в десятичную систему, мы получим 5*10¹⁸, что равно 5 ETH.
Фух! Наши тестовые деньги на месте .
Шаг 6. Инициализируйте наш проект
Во-первых, надо создать директорию для нашего проекта. Перейдите в вашу командную строку и наберите:
1mkdir hello-world2cd hello-worldТеперь, когда мы находимся в папке нашего проекта, мы будем использовать npm init для его инициализации. Если у вас еще не установлен npm, следуйте этим инструкциямopens in a new tab (нам также понадобится Node.js, так что скачайте и его!).
1npm initНеважно, как вы ответите на вопросы при установке. Вот как для примера сделали это мы:
1имя пакета: (hello-world)2версия: (1.0.0)3описание: hello world smart contract4точка входа: (index.js)5тестовая команда:6репозиторий git:7ключевые слова:8автор:9лицензия: (ISC)10О файле /Users/.../.../.../hello-world/package.json будет записано следующее:1112{13 "name": "hello-world",14 "version": "1.0.0",15 "description": "hello world smart contract",16 "main": "index.js",17 "scripts": {18 "test": "echo \"Error: no test specified\" && exit 1"19 },20 "author": "",21 "license": "ISC"22}Показать всеПодтвердите package.json, и мы готовы!
Шаг 7. Загрузите Hardhatopens in a new tab
Hardhat - это среда для сборки, развертывания, тестирования и отладки программного обеспечения Ethereum. Он помогает разработчикам создавать смарт-контракты и децентрализованные приложения локально перед их развертыванием в основной сети.
Внутри нашего проекта hello-world запустите:
1npm install --save-dev hardhatБолее подробную информацию об инструкциях по установкеopens in a new tab можно найти на этой странице.
Шаг 8. Создайте проект Hardhat
В директории проекта запустите:
1npx hardhatВы увидите приветственное сообщение и интерфейс с вариантами того, что делать дальше. Выберите "create an empty hardhat.config.js":
1888 888 888 888 8882888 888 888 888 8883888 888 888 888 88848888888888 8888b. 888d888 .d88888 88888b. 8888b. 8888885888 888 "88b 888P" d88" 888 888 "88b "88b 8886888 888 .d888888 888 888 888 888 888 .d888888 8887888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888910👷 Добро пожаловать в Hardhat v2.0.11 👷?1112Что вы хотите сделать? …13Создать пример проекта14❯ Создать пустой hardhat.config.js15ВыйтиПоказать всеЭта команда создаст для нас файл hardhat.config.js, в котором мы укажем все настройки для нашего проекта (в шаге 13).
Шаг 9. Добавьте папки проекта
Для поддержания порядка в проекте мы создадим две новые папки. Перейдите в командной строке в корневую директорию проекта и наберите:
1mkdir contracts2mkdir scriptscontracts/— здесь мы будем хранить файл с кодом нашего смарт-контракта «hello world».scripts/— здесь мы будем хранить скрипты для развертывания нашего контракта и взаимодействия с ним.
Шаг 10. Напишите наш контракт
Вы, наверное, спрашиваете себя, когда же мы наконец начнем писать код?? Что ж, вот мы и на шаге 10.
Откройте проект hello-world в вашем любимом редакторе (нам нравится VSCodeopens in a new tab). Смарт-контракты пишутся на языке под названием Solidity, который мы и будем использовать для написания нашего смарт-контракта HelloWorld.sol.
- Перейдите в папку «contracts» и создайте новый файл с именем HelloWorld.sol
- Ниже приведен пример смарт-контракта Hello World от Ethereum Foundation, который мы будем использовать в этом руководстве. Скопируйте и вставьте приведенное ниже содержимое в ваш файл HelloWorld.sol и обязательно прочтите комментарии, чтобы понять, что делает этот контракт:
1// Указывает версию Solidity с использованием семантического версионирования.2// Подробнее: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma3pragma solidity ^0.7.0;45// Определяет контракт с именем `HelloWorld`.6// Контракт — это набор функций и данных (его состояние). После развертывания контракт размещается по определенному адресу в блокчейне Ethereum. Подробнее: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html7contract HelloWorld {89 // Объявляет переменную состояния `message` типа `string`.10 // Переменные состояния — это переменные, значения которых постоянно хранятся в хранилище контракта. Ключевое слово `public` делает переменные доступными извне контракта и создает функцию, которую другие контракты или клиенты могут вызывать для доступа к значению.11 string public message;1213 // Подобно многим объектно-ориентированным языкам на основе классов, конструктор — это специальная функция, которая выполняется только при создании контракта.14 // Конструкторы используются для инициализации данных контракта. Подробнее: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors15 constructor(string memory initMessage) {1617 // Принимает строковый аргумент `initMessage` и устанавливает значение в переменной хранения контракта `message`).18 message = initMessage;19 }2021 // Публичная функция, которая принимает строковый аргумент и обновляет переменную хранения `message`.22 function update(string memory newMessage) public {23 message = newMessage;24 }25}Показать всеЭто очень простой смарт-контракт, который сохраняет сообщение при создании и может быть обновлен путем вызова функции update.
Шаг 11. Подключите MetaMask и Alchemy к вашему проекту
Мы создали кошелек MetaMask, учетную запись Alchemy и написали наш смарт-контракт, теперь пришло время их соединить.
Каждая транзакция, сделанная с вашего виртуального кошелька, требует подпись с использованием вашего же персонального ключа. Чтобы дать программе такую возможность, мы можем сохранить наш приватный ключ (и ключ API Alchemy) в файле окружения.
Чтобы узнать больше об отправке транзакций, ознакомьтесь с этим руководством по отправке транзакций с использованием web3.
Во-первых, установите dotenv, находясь в директории проекта:
1npm install dotenv --saveЗатем создайте файл .env в корневом каталоге нашего проекта и добавьте в него свой закрытый ключ MetaMask и URL-адрес HTTP API Alchemy.
- Следуйте этим инструкциямopens in a new tab, чтобы экспортировать свой приватный ключ
- Ниже показано, как получить URL-адрес HTTP API Alchemy
Скопируйте URL-адрес API Alchemy
Ваш .env должен выглядеть следующим образом:
1API_URL = "https://eth-sepolia.g.alchemy.com/v2/ваш-ключ-api"2PRIVATE_KEY = "ваш-приватный-ключ-metamask"Чтобы подключить их к нашему коду, мы будем ссылаться на эти переменные в нашем файле hardhat.config.js в шаге 13.
.env в коммиты! Пожалуйста, никогда и никому не сообщайте и не показывайте содержимое файла .env, так как тем самым вы компрометируете свои секретные данные. Если вы используете систему контроля версий, добавьте .env в файл gitignore.Шаг 12: Установите Ethers.js
Ethers.js — это библиотека, которая упрощает взаимодействие и отправку запросов в Ethereum, оборачивая стандартные методы JSON-RPC в более удобные для пользователя методы.
Hardhat очень упрощает интеграцию плагиновopens in a new tab для дополнительных инструментов и расширенной функциональности. Мы воспользуемся преимуществами плагина Ethersopens in a new tab для развертывания контракта (Ethers.jsopens in a new tab имеет несколько очень удобных методов развертывания контрактов).
В директории проекта запустите:
1npm install --save-dev @nomiclabs/hardhat-ethers "ethers@^5.0.0"Нам также потребуется ethers в нашем hardhat.config.js на следующем шаге.
Шаг 13: Обновите hardhat.config.js
Мы добавили несколько зависимостей и плагинов, и теперь нам нужно обновить hardhat.config.js, чтобы наш проект знал обо всех них.
Обновите ваш hardhat.config.js, чтобы он выглядел следующим образом:
1require('dotenv').config();23require("@nomiclabs/hardhat-ethers");4const { API_URL, PRIVATE_KEY } = process.env;56/**7* @type import('hardhat/config').HardhatUserConfig8*/9module.exports = {10 solidity: "0.7.3",11 defaultNetwork: "sepolia",12 networks: {13 hardhat: {},14 sepolia: {15 url: API_URL,16 accounts: [`0x${PRIVATE_KEY}`]17 }18 },19}Показать всеШаг 14: Скомпилируйте наш контракт
Пора заставить это работать, давайте скомпилируем наш контракт. Задача compile — одна из встроенных задач hardhat.
Запустите в командной строке:
1npx hardhat compileВы можете получить предупреждение об SPDX license identifier not provided in source file, но не беспокойтесь об этом — надеюсь, все остальное выглядит хорошо! Если нет, вы всегда можете написать в Discord-канал Alchemyopens in a new tab.
Шаг 15: Напишите наш скрипт развертывания
Контракт написан, файл конфигурации корректен, пора писать скрипт развертывания.
Перейдите в папку scripts/, создайте новый файл deploy.js и добавьте в него следующее содержимое:
1async function main() {2 const HelloWorld = await ethers.getContractFactory("HelloWorld");34 // Start deployment, returning a promise that resolves to a contract object5 const hello_world = await HelloWorld.deploy("Привет, мир!");6 console.log("Контракт развернут по адресу:", hello_world.address);}78main()9 .then(() => process.exit(0))10 .catch(error => {11 console.error(error);12 process.exit(1);13 });Показать всеHardhat отлично объясняет, что делает каждая из этих строк кода, в своем руководстве по контрактамopens in a new tab, мы использовали их объяснения здесь.
1const HelloWorld = await ethers.getContractFactory("HelloWorld");ContractFactory в ethers.js — это абстракция, используемая для развертывания новых смарт-контрактов, так что HelloWorld здесь — это фабрика для экземпляров нашего контракта «hello world». При использовании плагина hardhat-ethers экземпляры ContractFactory и Contract по умолчанию подключаются к первому подписанту.
1const hello_world = await HelloWorld.deploy();Вызов deploy() на ContractFactory запустит развертывание и вернет Promise, который разрешается в Contract. Это объект, который имеет метод для каждой из функций нашего смарт контракта.
Шаг 16: Разверните наш контракт
Мы наконец-то готовы развернуть наш смарт контракт! Перейдите в командную строку и запустите:
1npx hardhat run scripts/deploy.js --network sepoliaВы должны увидеть что-то наподобие:
1Контракт развернут по адресу: 0x6cd7d44516a20882cEa2DE9f205bF401c0d23570Если мы перейдем на Etherscan для Sepoliaopens in a new tab и выполним поиск по адресу нашего контракта, то увидим, что он был успешно развернут. Транзакция будет выглядеть примерно так:
Адрес From должен совпадать с адресом вашей учетной записи MetaMask, а в адресе To будет указано «Contract Creation», но если мы нажмем на транзакцию, мы увидим адрес нашего контракта в поле To:
Поздравляем! Вы только что развернули смарт-контракт в блокчейне Ethereum 🎉
Чтобы понять, что происходит «под капотом», давайте перейдем на вкладку Explorer в нашей панели управления Alchemyopens in a new tab. Если у вас несколько приложений Alchemy, убедитесь, что вы отфильтровали их по приложению и выбрали «Hello World».

Здесь вы увидите несколько вызовов JSON-RPC, которые Hardhat/Ethers сделали для нас «под капотом», когда мы вызывали функцию .deploy(). Здесь следует отметить два важных вызова: eth_sendRawTransactionopens in a new tab, который является запросом на фактическую запись нашего контракта в сеть Sepolia, и eth_getTransactionByHashopens in a new tab, который является запросом на чтение информации о нашей транзакции по заданному хешу (типичный шаблон при работе с
транзакциями). Чтобы узнать больше об отправке транзакций, ознакомьтесь с этим руководством по отправке транзакций с помощью Web3
На этом первая часть этого руководства закончена, во второй части мы будем взаимодействовать с нашим смарт-контрактомopens in a new tab, обновив наше первоначальное сообщение, а в третьей части мы опубликуем наш смарт-контракт на Etherscanopens in a new tab, чтобы каждый мог узнать, как с ним взаимодействовать.
Хотите узнать больше об Alchemy? Посетите наш веб-сайтopens in a new tab. Никогда не хотите пропускать обновления? Подпишитесь на нашу рассылку здесьopens in a new tab! Обязательно присоединяйтесь к нашему Discordopens in a new tab..
Последнее обновление страницы: 5 декабря 2025 г.





