Passa al contenuto principale

BSO Resolver

Il risolutore BSO traduce i nomi di dominio .bso nelle chiavi pubbliche corrispondenti leggendo i record TXT Bitsocial archiviati su ENS. Fornisce un client viem condiviso, memorizzazione nella cache persistente e funziona sia in ambienti Node.js che browser.

Installazione

npm install @bitsocial/bso-resolver

Creazione di un risolutore

Istanzia il risolutore passando un oggetto di configurazione al costruttore:

const resolver = new BsoResolver({ key, provider, dataPath });
ParametroObbligatorioDescrizione
keyYesIdentifier for the resolver instance.
providerYesTransport configuration (see below).
dataPathNoDirectory for the SQLite cache file (Node.js only).

Provider Opzioni

Il parametro provider accetta tre formati:

  • "viem" -- Utilizza il trasporto pubblico predefinito fornito da viem.
  • URL HTTP(S) -- Si connette tramite un endpoint JSON-RPC (ad esempio, https://mainnet.infura.io/v3/YOUR_KEY).
  • URL WebSocket -- Si connette tramite un endpoint RPC WebSocket (ad esempio, wss://mainnet.infura.io/ws/v3/YOUR_KEY).

Metodi

resolve({ name, abortSignal? })

Cerca un nome .bso e restituisce la chiave pubblica associata. È possibile passare un AbortSignal opzionale per annullare le richieste a lunga esecuzione.

canResolve({ name })

Restituisce un valore booleano che indica se il risolutore è in grado di gestire il nome specificato. Utilizzalo per verificare il supporto prima di tentare una risoluzione completa.

destroy()

Abbatte il risolutore, chiudendo le connessioni al database e liberando risorse. Chiamalo quando il risolutore non è più necessario.

Memoria nella cache

I nomi risolti vengono memorizzati nella cache automaticamente per ridurre le ricerche di rete ridondanti. Il backend di memorizzazione nella cache viene scelto in base all'ambiente di runtime:

AmbienteBackendNote
Node.jsSQLiteConservato a dataPath. Utilizza la modalità WAL per l'accesso simultaneo.
NavigatoreDB indicizzatoUtilizza transazioni IndexedDB native.
RipiegoIn memoria MapUtilizzato quando non sono disponibili né SQLite né IndexedDB.

Tutte le voci della cache hanno un TTL di un'ora e vengono automaticamente rimosse dopo la scadenza.

Integrazione con pkc-js

Il risolutore può essere collegato direttamente a pkc-js tramite l'opzione nameResolvers, abilitando la risoluzione trasparente del nome .bso durante la chiave ricerche:

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

Concorrenza

Il risolutore è progettato per essere sicuro nell'uso simultaneo:

  • Un singolo client viem condiviso evita connessioni ridondanti.
  • SQLite opera in modalità WAL (Write-Ahead Logging), consentendo letture simultanee senza blocchi.
  • La memorizzazione nella cache del browser si basa su transazioni native IndexedDB per isolamento.

Punti di ingresso della piattaforma

Il pacchetto fornisce punti di ingresso separati per Node.js e build del browser. I bundler che supportano il campo exports in package.json selezioneranno automaticamente quello corretto.