kademlia-table
Version:
XOR distance based routing table used for P2P networks, based on the Kademlia DHT paper
44 lines (41 loc) • 1.61 kB
TypeScript
declare const getBitwiseDistance: (a: Uint8Array, b: Uint8Array, byteLength?: number) => number;
declare namespace KademliaTable {
interface Options<Node> {
bucketSize?: number;
errorLimit?: number;
getId: (node: Node) => Uint8Array;
}
interface Bucket<T> {
items: Array<Item<T>>;
replacementItems: Array<Item<T>>;
}
interface Item<T> {
node: T;
errorCount: number;
}
}
declare class KademliaTable<T> {
readonly id: Uint8Array;
readonly bucketSize: number;
readonly buckets: Array<KademliaTable.Bucket<T>>;
readonly errorLimit: number;
getId: (node: T) => Uint8Array;
constructor(id: Uint8Array, options: KademliaTable.Options<T>);
get length(): number;
[Symbol.iterator](): IterableIterator<T>;
add(node: T, d?: number): boolean;
clear(): void;
iterateClosestToId(id: Uint8Array): IterableIterator<T>;
listClosestToId(id: Uint8Array, limit?: number): Array<T>;
get(id: Uint8Array, d?: number): T | undefined;
getBucket(d: number): KademliaTable.Bucket<T> | undefined;
getDistance(id: Uint8Array): number;
protected iterateNodes(id: Uint8Array, d?: number): IterableIterator<T>;
protected listNodes(id: Uint8Array, d?: number, limit?: number): Array<T>;
has(id: Uint8Array, d?: number): boolean;
markError(id: Uint8Array, d?: number): boolean;
markSuccess(id: Uint8Array, d?: number): boolean;
update(node: T, d?: number): boolean;
remove(id: Uint8Array, d?: number, force?: boolean): boolean;
}
export { KademliaTable, getBitwiseDistance };