Купить крипто
Рынки
Спот
ФьючерсыBTC
Сбережения
Центр событий
Хаб наград
Еще
Фестиваль с 0 комиссией
Ethers.js (библиотека JavaScript): Что такое Ethers.js?Ethers.js — это библиотека с открытым исходным кодом для JavaScript и TypeScript, которая позволяет подключать приложения, кошельки, скрипты и инструменты разработчика к Ethereum иEthers.js (библиотека JavaScript): Что такое Ethers.js?Ethers.js — это библиотека с открытым исходным кодом для JavaScript и TypeScript, которая позволяет подключать приложения, кошельки, скрипты и инструменты разработчика к Ethereum и

Ethers.js (библиотека JavaScript)

2026/10/13 15:32
#Advanced
Humanity
H$0.05586-5.75%
PX
PX$0.0126-1.56%
IO
IO$0.16477-4.74%
NODE
NODE$0.005225-0.68%
Эфириум
ETH$2,514.63-0.58%

Что такое Ethers.js?

Ethers.js — это библиотека с открытым исходным кодом для JavaScript и TypeScript, которая позволяет подключать приложения, кошельки, скрипты и инструменты разработчика к Ethereum и другим блокчейн-сетям на базе EVM.

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

Вместо того чтобы вручную создавать каждый запрос JSON-RPC или кодировать каждый вызов смарт-контракта, разработчик может использовать объекты и методы ethers.js, которые берут на себя значительную часть технической работы.

В официальной документации ethers.js библиотека описывается как полноценный и компактный инструмент для взаимодействия с блокчейном Ethereum и его экосистемой.

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

Библиотека не управляет собственным блокчейном и не обеспечивает консенсус Ethereum.

Она служит программным уровнем между приложением и узлом Ethereum, кошельком или совместимым RPC-сервисом.

Ethers.js написана на TypeScript и включает встроенные описания типов, которые помогают разработчикам обнаруживать некоторые ошибки до запуска приложения.

Проект распространяется по лицензии MIT и поддерживается в общедоступном репозитории исходного кода ethers.js.

Какая версия Ethers.js является текущей?

По состоянию на 16 июля 2026 года последняя документированная версия — ethers v6.17.0.

В официальном репозитории указано, что версия 6.17.0 выпущена 18 июня 2026 года.

Текущую версию также можно проверить в официальном списке пакетов ethers.

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

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

Автоматическая установка неизвестной будущей версии без тестирования может привести к несовместимым изменениям или неожиданным обновлениям зависимостей.

Для чего нужна Ethers.js?

Ethers.js предоставляет набор инструментов для взаимодействия с блокчейн-системами на базе Ethereum.

С ее помощью приложение может подключаться к узлу Ethereum через JSON-RPC, WebSocket или интерфейс браузерного кошелька.

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

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

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

Она позволяет отправлять изменяющие состояние транзакции через подписанта и ждать, пока они получат подтверждения блока.

Библиотека может оценивать объем газа, форматировать единицы криптовалют, вычислять хеши, определять адреса подписантов и проверять адреса Ethereum.

Эти возможности позволяют разработчикам сосредоточиться на логике приложения, не создавая низкоуровневые механизмы взаимодействия с блокчейном с нуля.

Как установить Ethers.js?

Обычно Ethers.js устанавливают через систему пакетов npm. Имя пакета — ethers.

В официальной инструкции по установке для проектов Node.js приведена команда npm install ethers.

После установки разработчик может импортировать все пространство имен ethers или отдельные классы и функции.

Версия 6 поддерживает современные шаблоны модулей JavaScript и позволяет напрямую импортировать многие функции из основного пакета.

Выборочный импорт помогает инструментам сборки включать только код, необходимый приложению.

В браузерных приложениях также можно использовать сборку в формате модуля ECMAScript. Однако в production-приложениях следует применять контролируемый процесс управления зависимостями и сборки, а не загружать непроверенный код из неизвестного источника.

Разработчикам не следует устанавливать пакет только потому, что его название похоже на нужное: вредоносные пакеты могут имитировать популярные криптобиблиотеки.

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

Как Ethers.js подключается к блокчейну

Ethers.js взаимодействует с блокчейн-инфраструктурой через провайдер.

Провайдер — это соединение только для чтения, которое позволяет приложению запрашивать данные блокчейна и моделировать транзакции.

Провайдер отправляет запросы узлу Ethereum или другой совместимой RPC-точке доступа.

К типичным запросам относятся проверка баланса ETH, получение блока, чтение состояния контракта, оценка газа, получение сведений о комиссиях и поиск журналов событий.

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

В официальной документации провайдеров ethers.js описаны классы провайдеров и доступные через них операции с блокчейном.

Для надежного production-приложения необходимо использовать RPC-подключение с подходящей пропускной способностью, доступностью, архивным доступом, средствами контроля безопасности и ограничениями частоты запросов.

Общедоступные или совместно используемые точки доступа могут подойти для тестирования, но при высокой нагрузке они могут работать медленно или стать недоступными.

Что такое провайдер в Ethers.js?

Провайдер — это абстракция, представляющая подключение к сети, совместимой с Ethereum.

Он предоставляет разработчикам единый интерфейс JavaScript, даже если подключение к узлу или способ передачи данных различаются.

Провайдер JSON-RPC взаимодействует с узлом посредством стандартных запросов JSON-RPC.

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

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

Резервный провайдер может объединять несколько источников данных и сравнивать их ответы или расставлять приоритеты согласно настройкам.

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

Что такое BrowserProvider?

BrowserProvider — это класс ethers.js v6, который обычно используется для подключения веб-приложения к провайдеру Ethereum, внедренному в браузер.

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

Приложение может создать BrowserProvider на основе внедренного интерфейса, а затем запросить подписанта для одобренного аккаунта.

Подключение к кошельку не предоставляет приложению автоматический доступ к приватному ключу кошелька.

Кошелек обычно хранит данные для подписания в собственной защищенной среде и запрашивает подтверждение пользователя для каждой подписи или транзакции.

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

Что такое подписант в Ethers.js?

Подписант — это абстракция, представляющая аккаунт Ethereum, который может авторизовать сообщения и транзакции.

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

В официальной документации интерфейса Signer поясняется, что подписант представляет аккаунт в блокчейне и может поддерживать расширенные схемы подписания, при которых приватный ключ напрямую недоступен приложению.

Подписант обычно может возвращать свой адрес, подписывать сообщения, оценивать газ для транзакций, заполнять поля транзакции и отправлять авторизованную транзакцию.

Доступные операции зависят от реализации подписанта.

Подписант, подключенный к провайдеру, может использовать сетевые данные при подготовке и отправке транзакции.

Отключенный подписант может подписывать данные локально, но не иметь возможности передать полученную транзакцию в сеть.

Провайдер и подписант в Ethers.js: в чем разница?

Провайдер считывает данные блокчейна, а подписант авторизует действия, связанные с аккаунтом.

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

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

Многие объекты ethers.js работают по-разному в зависимости от того, подключены они к провайдеру или подписанту.

Контракт, подключенный только к провайдеру, обычно может выполнять операции только для чтения.

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

Разделение провайдеров и подписантов помогает разработчикам не смешивать доступ к общедоступным данным с чувствительным управлением аккаунтом.

Что такое кошелек в Ethers.js?

Класс Wallet в ethers.js — это подписант, работающий на основе приватного ключа.

Он может получить адрес Ethereum, подписывать сообщения и транзакции, а также отправлять транзакции при подключении к провайдеру.

Кошелек можно создать из приватного ключа, сгенерировать случайным образом, восстановить из поддерживаемой мнемонической фразы или расшифровать из зашифрованного JSON-keystore.

В официальной документации кошельков ethers.js описаны создание кошельков, иерархические детерминированные кошельки, зашифрованные JSON-файлы, мнемонические фразы и функции подписания.

Серверный кошелек может быть полезен для контролируемой автоматизации, однако хранение неограниченного приватного ключа в исходном коде приложения создает серьезный риск безопасности.

Приватные ключи нельзя добавлять в репозиторий исходного кода, включать в общедоступную сборку для браузера, выводить в журналы или отправлять в обычных сообщениях.

В production-системах подписания следует применять контроль доступа, шифрование секретов, ограниченные полномочия, защищенное резервное копирование и мониторинг транзакций, соответствующие объему управляемой криптовалюты.

Хранит ли Ethers.js средства пользователей?

Ethers.js не является кастодиальным сервисом и не хранит криптовалюту пользователей.

Это программная библиотека, которая позволяет создавать объекты для подписания и взаимодействовать с аккаунтами блокчейна.

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

Если разработчик создает новый кошелек с помощью ethers.js, ответственность за надежную защиту данных для восстановления ложится на разработчика или пользователя.

Утрата приватного ключа или мнемонической фразы может навсегда лишить доступа к связанной с ними криптовалюте.

Если раскрыть ключ, другой человек сможет перевести активы.

Как Ethers.js взаимодействует со смарт-контрактами

Ethers.js использует класс Contract для представления развернутого смарт-контракта.

Экземпляр контракта создается с указанием адреса, ABI и, при необходимости, провайдера или подписанта.

ABI описывает внешние функции контракта, события, ошибки и типы данных.

Ethers.js использует эту информацию для создания вызываемых методов JavaScript и декодирования ответов блокчейна.

В официальной документации API Contract поясняется, что подключенный исполнитель — обычно провайдер или подписант — определяет, какие операции может выполнять контракт.

Вызов контракта только для чтения может получить баланс токена, адрес владельца, настройку протокола или другое общедоступное значение.

Вызов, изменяющий состояние, может перевести токены, одобрить расходование средств, внести залог, проголосовать, получить вознаграждение или выполнить другое предусмотренное контрактом действие.

Вызов метода контракта через ethers.js не подтверждает безопасность этого контракта.

Разработчику все равно необходимо проверить адрес контракта, ABI, разрешения, сеть, ожидаемое поведение и предположения, связанные с безопасностью.

Что такое ABI?

ABI расшифровывается как Application Binary Interface — двоичный интерфейс приложения.

Он определяет, как внешнее программное обеспечение взаимодействует с вызываемым интерфейсом смарт-контракта.

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

Ethers.js использует ABI, чтобы преобразовывать понятные значения JavaScript в закодированные данные транзакций.

Библиотека также декодирует возвращенные байты и журналы событий в значения, понятные приложению.

В официальной документации ABI ethers.js рассматриваются интерфейсы, фрагменты, кодирование, декодирование, события, ошибки и человекочитаемые форматы ABI.

Неправильный ABI может привести к кодированию приложением неверного вызова функции или ошибочному декодированию возвращаемых данных.

Разработчикам следует получать ABI из проверенных артефактов сборки или надежных источников проекта.

Что такое класс Interface?

Класс Interface представляет ABI в формате, который ethers.js может использовать для кодирования и декодирования.

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

Это удобно, когда разработчику нужен низкоуровневый контроль без создания полноценного объекта Contract.

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

Он может декодировать журналы, если известно корректное определение события.

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

Чтение данных смарт-контракта

Вызов смарт-контракта только для чтения использует текущее состояние блокчейна и не создает транзакцию.

Подключенный узел выполняет такой вызов локально, и обычно он не требует оплаты газа, поскольку не добавляется в блокчейн.

Разработчик может с помощью ethers.js читать такие данные, как балансы токенов, разрешенные суммы, владельцы контрактов, параметры протокола и сохраненные записи.

Результат отражает состояние на блоке, используемом провайдером.

Если разные RPC-точки доступа синхронизированы до разных высот блоков, они могут кратковременно возвращать разные результаты.

Для чтения исторических данных может потребоваться архивный узел, сохраняющий запрашиваемое состояние за прошлые периоды.

Вызов для чтения также может завершиться ошибкой, если контракт отклонит операцию, ABI неверен, по адресу отсутствует ожидаемый код или у провайдера нет необходимых данных.

Отправка транзакций смарт-контракта

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

Ethers.js кодирует метод и аргументы в данные транзакции и запрашивает у подписанта авторизацию.

Транзакция также может содержать сумму в нативной криптовалюте, лимит газа, параметры комиссии, nonce и идентификатор сети.

После авторизации транзакция передается в сеть через подключенный провайдер.

Первоначальным результатом обычно является ответ с хешем транзакции и отправленными данными.

Затем разработчик может дождаться квитанции транзакции и выбранного количества подтверждений.

Успешное выполнение отправленной транзакции не гарантировано, поскольку состояние блокчейна может измениться до ее обработки.

Ответы и квитанции транзакций

Ответ транзакции содержит сведения о транзакции, отправленной или обнаруженной через провайдер.

Он может содержать хеш, адреса отправителя и получателя, nonce, данные, сумму, сведения о газе и другие поля, связанные с сетью.

Квитанция транзакции становится доступна после включения транзакции в блок.

В квитанции фиксируются статус выполнения, использованный газ, данные блока, результат создания контракта и журналы сгенерированных событий.

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

Хеш транзакции подтверждает существование ее идентификатора, но не доказывает успешное завершение запрошенной операции со смарт-контрактом.

Метод провайдера waitForTransaction может ожидать включения транзакции в блок и выбранного количества подтверждений.

Оценка газа в Ethers.js

Ethers.js может запросить у провайдера оценку объема газа, который, вероятно, потребуется транзакции.

Узел моделирует предложенную транзакцию на основе текущего состояния блокчейна.

Оценка может завершиться ошибкой, если смоделированная транзакция будет отклонена.

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

Транзакция, успешно прошедшая оценку, может впоследствии завершиться ошибкой, если изменятся балансы, разрешения, цены, хранилище контракта или другие условия.

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

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

Работа с ETH и единицами токенов

Значения ETH и токенов хранятся в блокчейне как целые числа в наименьших единицах.

ETH обычно измеряется во внутренней единице wei: 1 ETH равен 10 в степени 18 wei.

Ethers.js предоставляет такие утилиты, как parseEther, formatEther, parseUnits и formatUnits.

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

В официальной документации ethers.js по преобразованию единиц объясняется безопасное преобразование десятичных значений.

Для точных балансов токенов разработчикам следует избегать обычных вычислений с числами с плавающей точкой в JavaScript, поскольку ошибки округления могут привести к неправильным значениям транзакций.

Фактическое число знаков после запятой у токена следует проверять по правильному контракту, а не определять по его символу.

BigInt в Ethers.js v6

В ethers.js v6 для многих больших целых чисел используется BigInt в JavaScript.

Суммы в Ethereum, значения газа, nonce и целые числа контрактов могут выходить за пределы безопасного диапазона обычных чисел JavaScript.

В официальном руководстве по переходу с v5 на v6 объясняется, что во многих операциях прежний класс BigNumber заменен встроенным типом BigInt из ES2020.

Значения BigInt используют целочисленную арифметику, и их нельзя напрямую смешивать с обычными значениями Number в JavaScript.

BigInt также не может представлять дробные суммы токенов без преобразования в целочисленные наименьшие единицы токена.

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

Утилиты для адресов

Ethers.js предоставляет функции для проверки, нормализации, сравнения и создания адресов Ethereum.

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

Утилита getAddress может нормализовать корректный адрес и отклонить некоторые адреса с неверным форматом контрольной суммы.

Техническая корректность адреса не доказывает, что он принадлежит нужному пользователю или контракту.

Приложениям следует сверять адреса с надежными источниками и не показывать только сокращенный вариант при подтверждении важных операций.

Злоумышленник может создать другой адрес с похожими первыми и последними символами.

Разрешение имен

Ethers.js может через подключенный провайдер преобразовывать поддерживаемые записи имен Ethereum в адреса.

Библиотека также может выполнять обратный поиск, если для адреса настроено поддерживаемое основное имя.

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

Записи имен могут измениться со временем, а имя может разрешаться по-разному в разных сетях.

Приложениям следует обрабатывать неразрешенные имена и недействительные записи, а не отправлять средства на неожиданный адрес без предупреждения.

Подписание сообщений с помощью Ethers.js

Ethers.js может подписывать человекочитаемые сообщения и определять адрес, связанный с действительной подписью.

Подписание сообщений может применяться для аутентификации аккаунта, подтверждения контроля, голосования, разрешений и внесетевой авторизации.

В официальном руководстве по подписанию ethers.js рекомендуется по возможности использовать понятный текст, чтобы пользователь знал, что именно он одобряет.

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

При необходимости приложениям следует указывать домен, назначение, nonce, срок действия и контекст сети.

Пользователям не следует подписывать непонятные сообщения только потому, что запрос не отображает комиссию за газ.

Типизированные данные EIP-712

EIP-712 определяет структурированный формат подписания, который позволяет кошелькам отображать типизированные поля вместо нечитаемой последовательности байтов.

Ethers.js может кодировать, подписывать, хешировать и проверять поддерживаемые типизированные данные.

Типизированные данные могут использоваться для разрешений токенов, ордеров на торговых площадках, действий управления, авторизации аккаунтов и других внесетевых подтверждений.

Данные домена могут включать название, версию, идентификатор сети и проверяющий контракт, чтобы снизить риск повторного использования подписи.

Разработчикам важно правильно формировать домен и типы: отсутствующее поле или неверный контекст сети могут ослабить защиту.

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

Журналы событий и обработчики контрактов

Ethers.js может запрашивать исторические журналы событий смарт-контрактов и отслеживать новые события.

Событие контракта определяется в ABI и сохраняется в квитанциях транзакций, если оно было сгенерировано при успешном выполнении.

Разработчики могут настроить фильтры для выбранных параметров события, например адреса или идентификатора токена.

Обработчик событий в реальном времени может обновлять интерфейс при переводе, депозите, сделке, голосовании или другом действии контракта.

Приложениям не следует полагаться только на постоянное соединение: перебои WebSocket могут привести к пропуску уведомлений.

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

Сгенерированное событие не доказывает надежность контракта: любой контракт может создать знакомую сигнатуру события.

Хеширование и криптографические утилиты

Ethers.js включает утилиты для хеширования данных, вычисления селекторов функций, обработки подписей, получения адресов и работы с форматами кодирования Ethereum.

К распространенным операциям относятся хеширование Keccak-256, хеширование сообщений, упакованное кодирование, кодирование RLP и восстановление подписей.

В официальной документации ethers.js по хешированию описаны вспомогательные функции для сообщений, типизированных данных, имен, идентификаторов и данных авторизации.

Криптографические API следует использовать в соответствии с соответствующим стандартом Ethereum, а не комбинировать произвольным образом.

Подписание хеша в неправильном формате может привести к несовместимым подписям или уязвимостям безопасности.

Разработчикам следует использовать разделение доменов, если одни и те же данные могут быть повторно применены в другом контексте.

Развертывание контрактов с помощью Ethers.js

Ethers.js предоставляет ContractFactory для развертывания смарт-контрактов.

Фабрика создается на основе байт-кода контракта, ABI и подписанта.

Транзакция развертывания может содержать аргументы конструктора и необязательную сумму в нативной криптовалюте.

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

Адрес развернутого контракта следует сохранить вместе с идентификатором сети, настройками компилятора, версией исходного кода, аргументами конструктора и хешем транзакции развертывания.

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

Перед работой со значимыми активами production-контракты следует протестировать и подвергнуть соответствующей проверке безопасности.

Ethers.js в браузерных приложениях

Браузерное децентрализованное приложение может использовать ethers.js для связи пользовательского интерфейса с кошельком и провайдером блокчейна.

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

Приватные ключи должны оставаться в кошельке, а не копироваться в код интерфейса.

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

Секретные API-ключи и привилегированные данные для подписания нельзя встраивать в общедоступную сборку приложения.

Интерфейс должен показывать понятные сведения о транзакции и корректно обрабатывать отказ кошелька, несовпадение сети, сбой RPC, ожидающие транзакции, отклонение, а также смену аккаунта.

Ethers.js в серверных приложениях

Серверная служба может использовать ethers.js для мониторинга данных блокчейна, отправки контролируемых транзакций, создания отчетов, проверки подписей и выполнения серверных операций с криптовалютой.

Серверные приложения могут подключаться напрямую к RPC-узлу или использовать управляемую точку доступа.

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

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

Если несколько процессов отправляют транзакции с одного аккаунта, серверу также необходимо тщательно отслеживать nonce транзакций.

Повторное использование nonce или конфликт между ними могут привести к замене транзакций или их длительному ожиданию.

Ethers.js и сети, совместимые с EVM

Ethers.js может подключаться ко многим сетям, совместимым с EVM и предоставляющим интерфейсы JSON-RPC в стиле Ethereum.

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

На разных блокчейнах у одного и того же адреса кошелька могут быть разные балансы и история транзакций.

Контракт, развернутый по определенному адресу в одной сети, может отсутствовать или содержать другой код в другой сети.

Совместимость с EVM также не гарантирует одинаковые правила расчета газа, типы транзакций, финальность, расширения RPC или особенности выполнения смарт-контрактов.

Каждую интеграцию с сетью следует тестировать отдельно.

Основные изменения при переходе с Ethers.js v5 на v6

В ethers.js v6 появились значительные архитектурные изменения и изменения API по сравнению с версией 5.

В руководстве по миграции широкое использование современных возможностей ES6 названо одним из ключевых изменений.

Во многих операциях с целыми числами прежний класс BigNumber заменен встроенным BigInt.

Объекты Contract используют поведение JavaScript Proxy для динамического определения методов.

Многие классы и утилиты перемещены в основной экспорт пакета и больше не требуют обращения через прежние вложенные пространства имен.

Класс Web3Provider заменен на BrowserProvider для оборачивания распространенных провайдеров, внедренных в браузер.

Также изменились названия и структура API транзакций, подписей, контрактов, провайдеров и утилит.

Не следует обновлять существующий код v5, просто поменяв версию пакета.

Следует воспользоваться официальным руководством по переходу на ethers.js v6 и полностью протестировать приложение.

Поддерживается ли еще Ethers.js v5?

В политике безопасности ethers.js указано, что основная часть работы по сопровождению сосредоточена на последнем мажорном выпуске.

В ней также отмечено, что для версии 5 выпускаются обновления безопасности, а более старые основные ветки больше не поддерживаются.

Разработчикам, поддерживающим приложение на версии 5, следует установить последнюю доступную версию v5 с обновлениями безопасности и рассмотреть плановый переход на v6.

Длительное использование устаревшей ветки может создавать риски совместимости и обслуживания, даже если для нее еще выпускаются критически важные исправления безопасности.

Актуальная информация о поддержке опубликована в официальной политике безопасности ethers.js.

Риски безопасности при использовании Ethers.js

Ethers.js помогает приложениям взаимодействовать с блокчейн-системами, но не способна сделать небезопасную логику приложения безопасной.

Разработчик может правильно использовать библиотеку, но при этом обращаться к вредоносному смарт-контракту или подписывать опасную транзакцию.

Неверные идентификаторы сети, адреса контрактов, ABI, количество десятичных знаков, предположения о газе или домены подписи могут привести к финансовым потерям.

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

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

Утечка приватного ключа позволяет злоумышленнику обойти все средства защиты пользовательского интерфейса.

Для безопасности необходимы надежное управление ключами, проверенные зависимости, проверка контрактов, валидация входных данных, моделирование транзакций, мониторинг и независимое тестирование.

Безопасность приватных ключей

Приватный ключ нельзя размещать в исходном коде браузера или добавлять в репозиторий.

Не следует включать его напрямую в общедоступный файл конфигурации, обращение в поддержку, снимок экрана или журнал приложения.

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

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

В production-системах права на подписание следует отделять от общего доступа к приложению.

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

Безопасность зависимостей и цепочки поставок

Разработчикам следует устанавливать ethers.js только из подлинного источника пакета.

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

Файлы блокировки пакетов и проверки целостности помогают гарантировать, что при автоматической установке используются проверенные версии зависимостей.

Следует отслеживать уведомления об обновлениях безопасности в официальном репозитории и записях пакета.

Перед развертыванием production-приложений необходимо тестировать обновления зависимостей.

Неиспользуемые пакеты и скрипты следует удалять, поскольку каждая зависимость увеличивает потенциальную поверхность атаки.

Риски RPC-провайдера

RPC-провайдер предоставляет данные блокчейна, которые использует приложение на ethers.js.

Если провайдер недоступен, приложение может не загрузить балансы или отправить транзакции.

При задержках приложение может показывать устаревшую информацию.

Вредоносная точка доступа может попытаться исказить состояние сети, оценку газа или статус транзакции.

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

Перед запросом подписи необходимо проверить идентификатор сети, возвращенный провайдером.

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

Моделирование транзакций и обработка ошибок

Ethers.js может моделировать вызовы и оценивать газ перед отправкой транзакции.

Моделирование помогает выявить многие вероятные ошибки выполнения, но не гарантирует успешный результат в будущем.

Состояние блокчейна может измениться между моделированием и фактическим выполнением.

По возможности приложениям следует декодировать ошибки контракта и показывать пользователю понятное объяснение.

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

Общее сообщение об ошибке может побудить пользователя без необходимости повторить транзакцию или подписать другое действие, не понимая исходную проблему.

Преимущества Ethers.js

Ethers.js предоставляет компактный интерфейс для решения многих типичных задач разработки на Ethereum.

Разделение провайдера и подписанта помогает четче разграничить доступ с точки зрения безопасности.

Класс Contract сокращает объем ручного кодирования ABI, необходимого для взаимодействия со смарт-контрактами.

Встроенные описания типов TypeScript улучшают поддержку в редакторах и помогают обнаруживать некоторые ошибки при передаче параметров.

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

Библиотека имеет открытый исходный код, подробную документацию и тесты.

Благодаря ориентации на EVM она подходит для работы во многих совместимых блокчейн-средах.

Ограничения Ethers.js

Ethers.js не запускает узел Ethereum, поэтому для работы библиотеке по-прежнему необходим доступ к блокчейн-инфраструктуре.

Она не проводит аудит смарт-контрактов и не гарантирует надежность адреса.

Библиотека автоматически не защищает приватные ключи, которые приложение хранит небрежно.

Она не может отменить подтвержденную транзакцию в блокчейне.

Она не гарантирует, что оценка газа, результат моделирования или ответ RPC останутся точными.

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

Разработчикам также необходимо отдельно управлять безопасностью интерфейса, базами данных, серверным доступом, развертыванием, мониторингом и соблюдением нормативных требований.

Пример процесса отправки транзакции с помощью Ethers.js

Предположим, что децентрализованное приложение позволяет пользователю перевести поддерживаемый токен.

Сначала приложение создает провайдер, подключенный к выбранной сети.

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

Приложение создает подписанта и экземпляр Contract, используя проверенные адрес токена и ABI.

Затем оно считывает количество десятичных знаков токена и баланс пользователя.

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

Приложение запрашивает оценку газа для метода контракта и подготавливает транзакцию.

Кошелек показывает получателя, контракт, сеть, сумму и сведения о комиссии для подтверждения пользователем.

После подписания пользователем подписант передает транзакцию через провайдер.

Приложение получает ответ транзакции и показывает ее хеш.

Затем оно ожидает квитанцию и проверяет, завершилось ли выполнение успешно.

После этого приложение обновляет баланс токена и записывает подтвержденную транзакцию.

Этот процесс показывает, как в ethers.js совместно работают провайдеры, подписанты, контракты, ABI, преобразование единиц, оценка газа и квитанции.

Распространенные ошибки при работе с Ethers.js

Одна из распространенных ошибок — встраивание приватного ключа во фронтенд-код JavaScript.

Другая ошибка — использование непроверенного адреса контракта или ABI.

Третья — смешивание обычных значений Number и BigInt.

Четвертая — считать отправленную транзакцию подтвержденной до получения успешной квитанции.

Пятая — полагать, что успешная оценка газа гарантирует успешное выполнение.

Шестая — использовать вычисления с плавающей точкой для сумм токенов.

Седьмая — игнорировать идентификатор сети при подключении кошелька или подписании типизированных данных.

Восьмая — не обрабатывать замену и потерю транзакций или реорганизации блокчейна.

Девятая — переходить с ethers.js v5 на v6, не проверив несовместимые изменения API.

Десятая — доверять пакету, RPC-точке доступа или смарт-контракту только из-за знакомого названия.

Часто задаваемые вопросы

Для чего используется ethers.js?

Ethers.js используют для создания приложений на JavaScript и TypeScript, которые читают данные блокчейна, управляют кошельками, подписывают сообщения, отправляют транзакции и взаимодействуют со смарт-контрактами Ethereum.

Является ли ethers.js криптовалютой?

Нет. Ethers.js — это программная библиотека, у которой нет официальной криптовалюты или инвестиционного токена.

Является ли ethers.js кошельком?

Ethers.js включает классы кошельков и инструменты подписания, однако сама библиотека не является кастодиальным сервисом кошелька.

Какая версия ethers.js является последней?

По состоянию на 16 июля 2026 года последняя документированная версия — ethers v6.17.0, выпущенная 18 июня 2026 года.

Может ли ethers.js подключаться к Ethereum?

Да. Ethers.js подключается к Ethereum через провайдер, который взаимодействует с узлом Ethereum или совместимой RPC-точкой доступа.

Может ли ethers.js работать с другими сетями EVM?

Да. Библиотека может работать со многими сетями, совместимыми с EVM и предоставляющими интерфейсы JSON-RPC в стиле Ethereum.

В чем разница между провайдером и подписантом?

Провайдер считывает общедоступные данные блокчейна, а подписант авторизует сообщения и транзакции аккаунта, изменяющие состояние.

Что такое объект Contract в ethers.js?

Объект Contract объединяет адрес контракта, ABI и провайдера или подписанта, предоставляя вызываемые методы JavaScript для развернутого смарт-контракта.

Требуется ли ethers.js ABI?

ABI обычно необходим для удобного кодирования и декодирования именованных функций, событий и ошибок смарт-контракта.

Хранит ли ethers.js приватные ключи?

Библиотека может создавать объекты кошельков с данными для подписания в памяти приложения, однако за хранение и защиту ключей отвечает разработчик.

Безопасно ли помещать приватный ключ в браузерное приложение?

Нет. Приватные ключи в браузерном коде могут просматривать и красть пользователи, злоумышленники, расширения или скомпрометированные скрипты.

Требует ли вызов контракта только для чтения оплаты газа?

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

Почему ethers.js использует BigInt?

BigInt поддерживает большие точные целые числа, необходимые для балансов криптовалют, значений газа, nonce и данных смарт-контрактов, без потери точности обычных чисел JavaScript.

Может ли ethers.js оценить газ?

Да. Библиотека может запросить оценку газа у узла, однако она основана на текущем состоянии и не гарантирует успешное выполнение будущей транзакции.

Может ли ethers.js отменить транзакцию?

Нет. Ethers.js может отправлять транзакции, но не может отменить подтвержденное изменение состояния блокчейна.

Может ли ethers.js отслеживать события смарт-контракта?

Да. Через подходящего провайдера библиотека может запрашивать исторические журналы и подписываться на новые события контракта.

Что изменилось в ethers.js v5 и v6?

В версии 6 появились встроенный BigInt, современные возможности JavaScript, обновленный импорт, новые классы провайдеров, методы контрактов на основе Proxy и ряд изменений API.

Является ли ethers.js проектом с открытым исходным кодом?

Да. Ethers.js доступна на условиях лицензии MIT.

Есть ли у ethers.js официальный токен?

Нет. Официальный проект заявляет, что у ethers нет токена.

Куда разработчикам сообщать об уязвимости безопасности ethers.js?

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

Заключение

Ethers.js — это библиотека JavaScript и TypeScript, которая предоставляет разработчикам криптоприложений структурированный способ взаимодействия с Ethereum и блокчейн-сетями, совместимыми с EVM.

Она включает провайдеры для чтения данных блокчейна, подписантов для авторизации действий аккаунта, кошельки для управления данными подписания и объекты Contract для взаимодействия со смарт-контрактами.

Также в библиотеке есть утилиты для кодирования ABI, декодирования событий, подписания сообщений, типизированных данных, адресов, хешей, оценки газа, квитанций транзакций и преобразования единиц криптовалют.

Текущая основная версия — ethers.js v6, использующая современные возможности JavaScript, такие как BigInt и методы контрактов на основе Proxy.

По состоянию на 16 июля 2026 года последняя документированная версия — ethers v6.17.0.

Ethers.js упрощает разработку блокчейн-приложений, но не устраняет риски раскрытия приватных ключей, вредоносных контрактов, неверных адресов, ненадежных RPC-точек доступа, компрометации зависимостей или необратимости транзакций.

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

Приложениям также необходимо обрабатывать неудачное моделирование, отказ кошелька, сбои RPC, ожидающие транзакции, их замену, отклонение, подтверждения и реорганизации сети.

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

Понимание принципов работы ethers.js помогает разработчикам подключать приложения JavaScript к блокчейн-системам и не путать библиотеку с сервисом кошелька, блокчейн-сетью или криптовалютой.
Откат или возможность?
Откат или возможность?Откат или возможность?
Почему BTC ETF привлекли 2,4 млрд $ при ликвидациях

В тренде

Трендовые криптовалюты, которые в настоящее время привлекают значительное внимание рынка

Недавно добавленные

Криптовалюты недавно внесенные в листинг и доступные для торговли