Перейти к основному содержанию

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

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

Если вы новичок в разработке блокчейн-приложений и не знаете, с чего начать, или если вы просто хотите понять, как развертывать смарт-контракты и взаимодействовать с ними, это руководство для вас. Мы рассмотрим создание и развертывание простого смарт-контракта в тестовой сети 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. Если вы не знакомы с тестовыми сетями, ознакомьтесь с этой страницей.

  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 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-world
2cd 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 contract
4точка входа: (index.js)
5тестовая команда:
6репозиторий git:
7ключевые слова:
8автор:
9лицензия: (ISC)
10О файле /Users/.../.../.../hello-world/package.json будет записано следующее:
11
12{
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 888
2888 888 888 888 888
3888 888 888 888 888
48888888888 8888b. 888d888 .d88888 88888b. 8888b. 888888
5888 888 "88b 888P" d88" 888 888 "88b "88b 888
6888 888 .d888888 888 888 888 888 888 .d888888 888
7888 888 888 888 888 Y88b 888 888 888 888 888 Y88b.
8888 888 "Y888888 888 "Y88888 888 888 "Y888888 "Y888
9
10👷 Добро пожаловать в Hardhat v2.0.11 👷‍?
11
12Что вы хотите сделать? …
13Создать пример проекта
14❯ Создать пустой hardhat.config.js
15Выйти
Показать все

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

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

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

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

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

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

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

  1. Перейдите в папку «contracts» и создайте новый файл с именем HelloWorld.sol
  2. Ниже приведен пример смарт-контракта Hello World от Ethereum Foundation, который мы будем использовать в этом руководстве. Скопируйте и вставьте приведенное ниже содержимое в ваш файл HelloWorld.sol и обязательно прочтите комментарии, чтобы понять, что делает этот контракт:
1// Указывает версию Solidity с использованием семантического версионирования.
2// Подробнее: https://solidity.readthedocs.io/en/v0.5.10/layout-of-source-files.html#pragma
3pragma solidity ^0.7.0;
4
5// Определяет контракт с именем `HelloWorld`.
6// Контракт — это набор функций и данных (его состояние). После развертывания контракт размещается по определенному адресу в блокчейне Ethereum. Подробнее: https://solidity.readthedocs.io/en/v0.5.10/structure-of-a-contract.html
7contract HelloWorld {
8
9 // Объявляет переменную состояния `message` типа `string`.
10 // Переменные состояния — это переменные, значения которых постоянно хранятся в хранилище контракта. Ключевое слово `public` делает переменные доступными извне контракта и создает функцию, которую другие контракты или клиенты могут вызывать для доступа к значению.
11 string public message;
12
13 // Подобно многим объектно-ориентированным языкам на основе классов, конструктор — это специальная функция, которая выполняется только при создании контракта.
14 // Конструкторы используются для инициализации данных контракта. Подробнее: https://solidity.readthedocs.io/en/v0.5.10/contracts.html#constructors
15 constructor(string memory initMessage) {
16
17 // Принимает строковый аргумент `initMessage` и устанавливает значение в переменной хранения контракта `message`).
18 message = initMessage;
19 }
20
21 // Публичная функция, которая принимает строковый аргумент и обновляет переменную хранения `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.

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

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

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

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

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

Шаг 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();
2
3require("@nomiclabs/hardhat-ethers");
4const { API_URL, PRIVATE_KEY } = process.env;
5
6/**
7* @type import('hardhat/config').HardhatUserConfig
8*/
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");
3
4 // Start deployment, returning a promise that resolves to a contract object
5 const hello_world = await HelloWorld.deploy("Привет, мир!");
6 console.log("Контракт развернут по адресу:", hello_world.address);}
7
8main()
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 и выполним поиск по адресу нашего контракта, то увидим, что он был успешно развернут. Транзакция будет выглядеть примерно так:

контракт на etherscan

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

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

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

Чтобы понять, что происходит «под капотом», давайте перейдем на вкладку Explorer в нашей панели управления Alchemyopens in a new tab. Если у вас несколько приложений Alchemy, убедитесь, что вы отфильтровали их по приложению и выбрали «Hello World». проводник 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 г.

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