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

Библиотеки JavaScript API

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

Для этой цели каждый клиент Эфириума реализует спецификацию JSON-RPC, поэтому существует единый набор методов, на которые могут опираться приложения.

Если вы хотите использовать JavaScript для подключения к узлу Эфириума, можно использовать чистый JavaScript, но в экосистеме существует несколько удобных библиотек, которые значительно упрощают эту задачу. С помощью этих библиотек разработчики могут писать интуитивно понятные однострочные методы для инициализации запросов JSON-RPC (внутренне), которые взаимодействуют с Эфириумом.

Обратите внимание, что после Слияния для запуска узла требуются две связанные части программного обеспечения Эфириума — клиент исполнения и клиент консенсуса. Убедитесь, что ваш узел включает как клиент исполнения, так и клиент консенсуса. Если ваш узел находится не на локальном компьютере (например, ваш узел работает на экземпляре AWS), соответствующим образом обновите IP-адреса в руководстве. Для получения дополнительной информации посетите нашу страницу о запуске узла.

Предварительные требования

Помимо понимания JavaScript, может быть полезно понимать стек Эфириума и клиенты Эфириума.

Зачем использовать библиотеку?

Эти библиотеки скрывают большую часть сложности прямого взаимодействия с узлом Эфириума. Они также предоставляют служебные функции (например, преобразование ETH в Gwei), поэтому как разработчик вы можете тратить меньше времени на изучение тонкостей клиентов Эфириума и больше времени уделять уникальной функциональности вашего приложения.

Особенности библиотек

Подключение к узлам Эфириума

Используя провайдеров, эти библиотеки позволяют вам подключаться к Эфириуму и читать его данные, будь то через JSON-RPC, Infura, Etherscan, Alchemy или МетаМаск.

Предупреждение: Web3.js был отправлен в архив 4 марта 2025 года. Прочитайте объявление (opens in a new tab). Рассмотрите возможность использования альтернативных библиотек, таких как ethers.js (opens in a new tab) или viem (opens in a new tab), для новых проектов.

Пример Ethers

// BrowserProvider оборачивает стандартный провайдер Web3, который
// МетаМаск внедряет как window.ethereum на каждую страницу
const provider = new ethers.BrowserProvider(window.ethereum)

// Плагин МетаМаск также позволяет подписывать транзакции, чтобы
// отправлять эфир и платить за изменение состояния в Блокчейне.
// Для этого нам нужен подписант аккаунта...
const signer = provider.getSigner()

Пример Web3js

После настройки вы сможете запрашивать у блокчейна:

  • номера блоков
  • оценки Газа
  • события смарт-контрактов
  • идентификатор сети
  • и многое другое...

Функциональность кошелька

Эти библиотеки предоставляют вам функциональность для создания кошельков, управления ключами и подписания транзакций.

Пример из Ethers:

Прочитать полную документацию (opens in a new tab)

После настройки вы сможете:

  • создавать аккаунты
  • отправлять транзакции
  • подписывать транзакции
  • и многое другое...

Взаимодействие с функциями смарт-контрактов

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

ABI по сути описывает функции контракта в формате JSON и позволяет использовать его как обычный объект JavaScript.

Таким образом, следующий контракт на Solidity:

Приведет к следующему JSON:

Это означает, что вы можете:

  • Отправить транзакцию в смарт-контракт и выполнить его метод
  • Вызвать оценку Газа, которая потребуется для выполнения метода в EVM
  • Развернуть контракт
  • И многое другое...

Служебные функции

Служебные функции предоставляют удобные ярлыки, которые немного упрощают разработку на Эфириуме.

Значения ETH по умолчанию указываются в Wei. 1 ETH = 1 000 000 000 000 000 000 Wei — это означает, что вы имеете дело с огромными числами! web3.utils.toWei конвертирует эфир в Wei за вас.

А в Ethers это выглядит так:

// Получить баланс аккаунта (по адресу или имени ENS)
balance = await provider.getBalance("ethers.eth")
// { BigNumber: "2337132817842795605" }

// Часто вам нужно будет отформатировать вывод для пользователя,
// который предпочитает видеть значения в эфире (вместо Wei)
ethers.utils.formatEther(balance)
// '2.337132817842795605'

Доступные библиотеки

Web3.js — JavaScript API для Эфириума.

Ethers.js — Полная реализация кошелька Эфириума и утилиты на JavaScript и TypeScript.

The Graph — Протокол для индексирования данных Эфириума и IPFS и их запроса с использованием GraphQL.

Alchemy SDK — Обертка вокруг Ethers.js с расширенными API.

Viem — Интерфейс TypeScript для Эфириума.

Codex — API обогащенных данных блокчейна в реальном времени для десятков сетей.

Drift — Мета-библиотека TypeScript со встроенным кэшированием, хуками и тестовыми моками.

Дополнительная литература

Знаете ресурс сообщества, который вам помог? Отредактируйте эту страницу и добавьте его!

Руководства: JavaScript API и WebSockets в Эфириуме

  • Использование WebSockets — Как использовать WebSockets с Alchemy для подписки на события Эфириума и выполнения запросов JSON-RPC в реальном времени.