Смарт-контракт Hello World для начинающих
Если вы новичок в разработке блокчейн-приложений и не знаете, с чего начать, или если вы просто хотите понять, как развертывать смарт-контракты и взаимодействовать с ними, это руководство для вас. Мы рассмотрим создание и развертывание простого смарт-контракта в тестовой сети 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. Если вы не знакомы с тестовыми сетями, ознакомьтесь с этой страницей.
- Перейдите на страницу "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 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
Неважно, как вы ответите на вопросы при установке. Вот как для примера сделали это мы:
имя пакета: (hello-world)
версия: (1.0.0)
описание: hello world smart contract
точка входа: (index.js)
тестовая команда:
репозиторий git:
ключевые слова:
автор:
лицензия: (ISC)
О файле /Users/.../.../.../hello-world/package.json будет записано следующее:
{
"name": "hello-world",
"version": "1.0.0",
"description": "hello world smart contract",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
Подтвердите 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":
888 888 888 888 888
888 888 888 888 888
888 888 888 888 888
8888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
888 888 "88b 888P" d88" 888 888 "88b "88b 888
888 888 .d888888 888 888 888 888 888 .d888888 888
888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
👷 Добро пожаловать в Hardhat v2.0.11 👷?
Что вы хотите сделать? …
Создать пример проекта
❯ Создать пустой 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.
- Перейдите в папку «contracts» и создайте новый файл с именем HelloWorld.sol
- Ниже приведен пример смарт-контракта Hello World от Ethereum Foundation, который мы будем использовать в этом руководстве. Скопируйте и вставьте приведенное ниже содержимое в ваш файл HelloWorld.sol и обязательно прочтите комментарии, чтобы понять, что делает этот контракт:
// Указывает версию Solidity с использованием семантического версионирования.
// Подробнее: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
pragma solidity ^0.7.0;
// Определяет контракт с именем `HelloWorld`.
// Контракт — это набор функций и данных (его состояние). После развертывания контракт размещается по определенному адресу в блокчейне Ethereum. Подробнее: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
contract HelloWorld {
// Объявляет переменную состояния `message` типа `string`.
// Переменные состояния — это переменные, значения которых постоянно хранятся в хранилище контракта. Ключевое слово `public` делает переменные доступными извне контракта и создает функцию, которую другие контракты или клиенты могут вызывать для доступа к значению.
string public message;
// Подобно многим объектно-ориентированным языкам на основе классов, конструктор — это специальная функция, которая выполняется только при создании контракта.
// Конструкторы используются для инициализации данных контракта. Подробнее: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
constructor(string memory initMessage) {
// Принимает строковый аргумент `initMessage` и устанавливает значение в переменной хранения контракта `message`).
message = initMessage;
}
// Публичная функция, которая принимает строковый аргумент и обновляет переменную хранения `message`.
function update(string memory newMessage) public {
message = newMessage;
}
}
Это очень простой смарт-контракт, который сохраняет сообщение при создании и может быть обновлен путем вызова функции update.
Шаг 11. Подключите MetaMask и Alchemy к вашему проекту
Мы создали кошелек MetaMask, учетную запись Alchemy и написали наш смарт-контракт, теперь пришло время их соединить.
Каждая транзакция, сделанная с вашего виртуального кошелька, требует подпись с использованием вашего же персонального ключа. Чтобы дать программе такую возможность, мы можем сохранить наш приватный ключ (и ключ API Alchemy) в файле окружения.
Чтобы узнать больше об отправке транзакций, ознакомьтесь с этим руководством по отправке транзакций с использованием web3.
Во-первых, установите dotenv, находясь в директории проекта:
npm install dotenv --save
Затем создайте файл .env в корневом каталоге нашего проекта и добавьте в него свой закрытый ключ MetaMask и URL-адрес HTTP API Alchemy.
- Следуйте этим инструкциям (opens in a new tab), чтобы экспортировать свой приватный ключ
- Ниже показано, как получить URL-адрес HTTP 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, чтобы он выглядел следующим образом:
require('dotenv').config();
require("@nomiclabs/hardhat-ethers");
const { API_URL, PRIVATE_KEY } = process.env;
/**
* @type import('hardhat/config').HardhatUserConfig
*/
module.exports = {
solidity: "0.7.3",
defaultNetwork: "sepolia",
networks: {
hardhat: {},
sepolia: {
url: API_URL,
accounts: [`0x${PRIVATE_KEY}`]
}
},
}
Шаг 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 и добавьте в него следующее содержимое:
async function main() {
const HelloWorld = await ethers.getContractFactory("HelloWorld");
// Start deployment, returning a promise that resolves to a contract object
const hello_world = await HelloWorld.deploy("Привет, мир!");
console.log("Контракт развернут по адресу:", hello_world.address);}
main()
.then(() => process.exit(0))
.catch(error => {
console.error(error);
process.exit(1);
});
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) и выполним поиск по адресу нашего контракта, то увидим, что он был успешно развернут. Транзакция будет выглядеть примерно так:
Адрес From должен совпадать с адресом вашей учетной записи MetaMask, а в адресе To будет указано «Contract Creation», но если мы нажмем на транзакцию, мы увидим адрес нашего контракта в поле To:
Поздравляем! Вы только что развернули смарт-контракт в блокчейне Ethereum 🎉
Чтобы понять, что происходит «под капотом», давайте перейдем на вкладку Explorer в нашей панели управления Alchemy (opens in a new tab). Если у вас несколько приложений Alchemy, убедитесь, что вы отфильтровали их по приложению и выбрали «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 г.





