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

BSO Resolver

BSO Resolver преобразует доменные имена .bso в соответствующие им открытые ключи, считывая записи Bitsocial TXT, хранящиеся в ENS. Он предоставляет общий клиент viem, постоянное кэширование и работает как в среде Node.js, так и в среде браузера.

Установка

npm install @bitsocial/bso-resolver

Создание резольвера

Создайте экземпляр преобразователя, передав объект конфигурации конструктору:

const resolver = new BsoResolver({ key, provider, dataPath });
ПараметрТребуетсяОписание
keyДаИдентификатор экземпляра преобразователя.
providerДаТранспортная конфигурация (см. ниже).
dataPathНетКаталог для файла кэша SQLite (только Node.js).

Опции провайдера

Параметр provider принимает три формата:

  • "viem" — использует общественный транспорт по умолчанию, предоставляемый viem.
  • URL-адрес HTTP(S) – подключение через конечную точку JSON-RPC (например, https://mainnet.infura.io/v3/YOUR_KEY).
  • URL-адрес WebSocket – подключение через конечную точку RPC WebSocket (например, wss://mainnet.infura.io/ws/v3/YOUR_KEY).

Методы

resolve({ name, abortSignal? })

Ищет имя .bso и возвращает связанный открытый ключ. Необязательный AbortSignal может быть передан для отмены длительных запросов.

canResolve({ name })

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

destroy()

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

Кэширование

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

Окружающая средаБэкэндЗаметки
Node.jsSQLiteХранится по адресу dataPath. Использует режим WAL для одновременного доступа.
БраузерИндексированная БДИспользует собственные транзакции IndexedDB.
Резервный вариантВ памяти MapИспользуется, когда ни SQLite, ни IndexedDB недоступны.

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

Интеграция с pkc-js

Резолвер можно подключить непосредственно к pkc-js с помощью опции nameResolvers, обеспечивая прозрачное разрешение имен .bso во время поиска ключей:

const pkc = new Pkc({
nameResolvers: [resolver],
// ...other options
});

Параллелизм

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

  • Один общий клиент viem позволяет избежать избыточных подключений.
  • SQLite работает в режиме WAL (ведение журнала упреждающей записи), позволяя одновременное чтение без блокировки.
  • Кэширование браузера основано на собственных транзакциях IndexedDB для изоляции.

Точки входа в платформу

Пакет включает отдельные точки входа для Node.js и сборок браузера. Сборщики пакетов, поддерживающие поле exports в package.json, автоматически выберут правильное поле.