blind-peer-router
v0.2.0
Published
Single-writer RPC service mapping content keys to blind peer assignments
Readme
blind-peer-router
POC — This is a proof-of-concept still. Breaking changes possible till the V1 release.
Single-writer RPC service that maps content keys to blind peer assignments. Clients request peers for a given content key and the service resolves the closest configured blind peers by XOR distance, persisting assignments in HyperDB so subsequent requests for the same key return the same peers.
Install
npm install blind-peer-routerUsage
Define a config file at ~/.blind-peer-router/config.json file with blind peer entries:
{
"blindPeers": {
"<blindPeerKey>": {},
"<otherBlindPeerKey>": {},
}
}blind-peer-router runHow it works
- The operator starts the service with a list of known blind peer public keys.
- A client sends a
resolve-peersRPC request with a content key. - If the key already has an assignment, the stored peers are returned.
- Otherwise the service picks the closest peers by XOR distance, stores the assignment in HyperDB, and returns the peer keys.
L limitations
- Best-effort persistence in interval mode: we use periodic flushes, so recent assignments may be lost on unclean shutdown.
CLI
blind-peer-router run [options]--storage|-s [path]: storage directory (default:./blind-peer-router)--blind-peer|-b <key>: blind peer public key in z32 or hex (repeatable, at least one required)--replica-count|-r [count]: number of peers assigned per key (default:1)--auto-flush [enabled]: flush on every assignment (true/false, default:true)
API
const service = new BlindPeerRouter(store, swarm, router, opts)
Create a new blind peer routing service.
store: Corestore instanceswarm: Hyperswarm instancerouter: ProtomuxRPCRouter instance (with middleware already applied)opts.blindPeerKeys: array of blind peer public keys (Buffers) — the fixed set of blind peers to assign fromopts.replicaCount: number of peers to assign per key (default:1, capped to number of blind peers)opts.autoFlush: flush each assignment whentrue; whenfalse, flushes are batched by a 1s interval (default:true)
await service.ready()
Start the service: opens the database, starts the RPC router, and joins the swarm.
await service.close()
Gracefully shut down the service.
service.publicKey
The swarm public key clients use to connect.
