BSO Resolver
BSO Resolver преобразует доменные имена .bso в соответствующие им открытые ключи, считывая записи Bitsocial TXT, хранящиеся в ENS. Он предоставляет общий клиент viem, постоянное кэширование и работает как в среде Node.js, так и в среде браузера.
- GitHub: bitsocialnet/bso-resolver
- Лицензия: только GPL-2.0.
Установка
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.js | SQLite | Хранится по адресу 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, автоматически выберут правильное поле.