跳到主要内容

BSO Resolver

BSO 解析器通过读取存储在 ENS 上的 Bitsocial TXT 记录,将 .bso 域名转换为其相应的公钥。它提供共享的 viem 客户端、持久缓存,并可在 Node.js 和浏览器环境中工作。

安装

npm install @bitsocial/bso-resolver

创建解析器

通过将配置对象传递给构造函数来实例化解析器:

const resolver = new BsoResolver({ key, provider, dataPath });
范围必需的描述
key是的解析器实例的标识符。
provider是的传输配置(见下文)。
dataPathSQLite 缓存文件的目录(仅限 Node.js)。

提供商选项

provider 参数接受三种格式:

  • "viem" -- 使用 viem 提供的默认公共交通。
  • HTTP(S) URL -- 通过 JSON-RPC 端点进行连接(例如,https://mainnet.infura.io/v3/YOUR_KEY)。
  • WebSocket URL - 通过 WebSocket RPC 端点(例如 wss://mainnet.infura.io/ws/v3/YOUR_KEY)进行连接。

方法

resolve({ name, abortSignal? })

查找.bso 名称并返回关联的公钥。可以传递可选的AbortSignal来取消长时间运行的请求。

canResolve({ name })

返回一个布尔值,指示解析器是否能够处理给定的名称。在尝试完整解决方案之前,请使用它来检查支持情况。

destroy()

拆除解析器,关闭数据库连接并释放资源。当不再需要解析器时调用此方法。

缓存

解析的名称会自动缓存,以减少冗余的网络查找。根据运行时环境选择缓存后端:

环境后端笔记
Node.jsSQLite存储在dataPath。使用WAL模式进行并发访问。
浏览器索引数据库使用本机 IndexedDB 事务。
倒退内存中Map当 SQLite 和 IndexedDB 都不可用时使用。

所有缓存条目都有一小时的 TTL,并且在过期后会自动逐出。

与 pkc-js 集成

解析器可以通过 nameResolvers 选项直接插入 pkc-js,从而在密钥查找期间启用透明的 .bso 名称解析:

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

并发性

解析器被设计为在并发使用下是安全的:

  • 单个共享 viem 客户端避免了冗余连接。
  • SQLite 以 WAL(预写日志记录)模式运行,允许并发读取而不会阻塞。
  • 浏览器缓存依赖于本机 IndexedDB 事务进行隔离。

平台入口点

该包为 Node.js 和浏览器构建提供了单独的入口点。支持package.jsonexports 字段的捆绑器将自动选择正确的一个。