@peerbit/stream 4.6.0-bbf27fa → 4.6.0-cb91e7b
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/benchmark/directstream-sim.d.ts +12 -0
- package/dist/benchmark/directstream-sim.d.ts.map +1 -0
- package/dist/benchmark/directstream-sim.js +299 -0
- package/dist/benchmark/directstream-sim.js.map +1 -0
- package/dist/benchmark/index.d.ts +10 -0
- package/dist/benchmark/index.d.ts.map +1 -0
- package/dist/benchmark/index.js +48 -0
- package/dist/benchmark/index.js.map +1 -0
- package/dist/benchmark/topology-sim.d.ts +12 -0
- package/dist/benchmark/topology-sim.d.ts.map +1 -0
- package/dist/benchmark/topology-sim.js +410 -0
- package/dist/benchmark/topology-sim.js.map +1 -0
- package/dist/benchmark/transfer.js +2 -2
- package/dist/benchmark/transfer.js.map +1 -1
- package/dist/src/core/seek-routing.d.ts +39 -0
- package/dist/src/core/seek-routing.d.ts.map +1 -0
- package/dist/src/core/seek-routing.js +33 -0
- package/dist/src/core/seek-routing.js.map +1 -0
- package/dist/src/index.d.ts +36 -4
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +516 -300
- package/dist/src/index.js.map +1 -1
- package/dist/src/routes.d.ts +11 -0
- package/dist/src/routes.d.ts.map +1 -1
- package/dist/src/routes.js +105 -16
- package/dist/src/routes.js.map +1 -1
- package/dist/src/wait-for-event.d.ts.map +1 -1
- package/dist/src/wait-for-event.js +14 -3
- package/dist/src/wait-for-event.js.map +1 -1
- package/package.json +8 -8
- package/src/core/seek-routing.ts +75 -0
- package/src/index.ts +789 -505
- package/src/routes.ts +121 -19
- package/src/wait-for-event.ts +23 -10
|
@@ -0,0 +1,410 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lightweight discrete-event simulator for @peerbit/stream-style routing.
|
|
3
|
+
*
|
|
4
|
+
* This is intentionally NOT libp2p-backed. It is meant for 1k–10k+ node
|
|
5
|
+
* experiments (topology / convergence / message overhead) that would be
|
|
6
|
+
* infeasible with real libp2p peers.
|
|
7
|
+
*
|
|
8
|
+
* Run:
|
|
9
|
+
* node --loader ts-node/esm ./packages/transport/stream/benchmark/topology-sim.ts --nodes 2000 --degree 4 --messages 200 --targets 10 --redundancy 2 --seed 1
|
|
10
|
+
*/
|
|
11
|
+
import { computeSeekAckRouteUpdate, selectSeekRelayTargets, shouldAcknowledgeDataMessage, shouldIgnoreDataMessage, } from "../src/core/seek-routing.js";
|
|
12
|
+
class MinHeap {
|
|
13
|
+
compare;
|
|
14
|
+
heap = [];
|
|
15
|
+
constructor(compare) {
|
|
16
|
+
this.compare = compare;
|
|
17
|
+
}
|
|
18
|
+
get size() {
|
|
19
|
+
return this.heap.length;
|
|
20
|
+
}
|
|
21
|
+
push(item) {
|
|
22
|
+
this.heap.push(item);
|
|
23
|
+
this.bubbleUp(this.heap.length - 1);
|
|
24
|
+
}
|
|
25
|
+
pop() {
|
|
26
|
+
if (this.heap.length === 0)
|
|
27
|
+
return undefined;
|
|
28
|
+
const root = this.heap[0];
|
|
29
|
+
const last = this.heap.pop();
|
|
30
|
+
if (this.heap.length > 0) {
|
|
31
|
+
this.heap[0] = last;
|
|
32
|
+
this.bubbleDown(0);
|
|
33
|
+
}
|
|
34
|
+
return root;
|
|
35
|
+
}
|
|
36
|
+
bubbleUp(index) {
|
|
37
|
+
while (index > 0) {
|
|
38
|
+
const parentIndex = (index - 1) >> 1;
|
|
39
|
+
if (this.compare(this.heap[index], this.heap[parentIndex]) >= 0)
|
|
40
|
+
break;
|
|
41
|
+
[this.heap[index], this.heap[parentIndex]] = [
|
|
42
|
+
this.heap[parentIndex],
|
|
43
|
+
this.heap[index],
|
|
44
|
+
];
|
|
45
|
+
index = parentIndex;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
bubbleDown(index) {
|
|
49
|
+
const length = this.heap.length;
|
|
50
|
+
for (;;) {
|
|
51
|
+
const left = index * 2 + 1;
|
|
52
|
+
const right = left + 1;
|
|
53
|
+
let smallest = index;
|
|
54
|
+
if (left < length &&
|
|
55
|
+
this.compare(this.heap[left], this.heap[smallest]) < 0) {
|
|
56
|
+
smallest = left;
|
|
57
|
+
}
|
|
58
|
+
if (right < length &&
|
|
59
|
+
this.compare(this.heap[right], this.heap[smallest]) < 0) {
|
|
60
|
+
smallest = right;
|
|
61
|
+
}
|
|
62
|
+
if (smallest === index)
|
|
63
|
+
break;
|
|
64
|
+
[this.heap[index], this.heap[smallest]] = [
|
|
65
|
+
this.heap[smallest],
|
|
66
|
+
this.heap[index],
|
|
67
|
+
];
|
|
68
|
+
index = smallest;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
const mulberry32 = (seed) => {
|
|
73
|
+
let t = seed >>> 0;
|
|
74
|
+
return () => {
|
|
75
|
+
t += 0x6d2b79f5;
|
|
76
|
+
let x = t;
|
|
77
|
+
x = Math.imul(x ^ (x >>> 15), x | 1);
|
|
78
|
+
x ^= x + Math.imul(x ^ (x >>> 7), x | 61);
|
|
79
|
+
return ((x ^ (x >>> 14)) >>> 0) / 4294967296;
|
|
80
|
+
};
|
|
81
|
+
};
|
|
82
|
+
const int = (rng, maxExclusive) => Math.floor(rng() * maxExclusive);
|
|
83
|
+
const intBetween = (rng, minInclusive, maxInclusive) => minInclusive + int(rng, maxInclusive - minInclusive + 1);
|
|
84
|
+
const pickDistinct = (rng, n, k, exclude) => {
|
|
85
|
+
const out = new Set();
|
|
86
|
+
while (out.size < k) {
|
|
87
|
+
const candidate = int(rng, n);
|
|
88
|
+
if (candidate === exclude)
|
|
89
|
+
continue;
|
|
90
|
+
out.add(candidate);
|
|
91
|
+
}
|
|
92
|
+
return [...out];
|
|
93
|
+
};
|
|
94
|
+
const buildRandomGraph = (n, targetDegree, rng) => {
|
|
95
|
+
if (n <= 0)
|
|
96
|
+
throw new Error("nodes must be > 0");
|
|
97
|
+
if (targetDegree < 0)
|
|
98
|
+
throw new Error("degree must be >= 0");
|
|
99
|
+
if (targetDegree >= n) {
|
|
100
|
+
throw new Error("degree must be < nodes for a simple graph");
|
|
101
|
+
}
|
|
102
|
+
const adj = Array.from({ length: n }, () => new Set());
|
|
103
|
+
const degree = new Uint16Array(n);
|
|
104
|
+
const connect = (a, b) => {
|
|
105
|
+
if (a === b)
|
|
106
|
+
return false;
|
|
107
|
+
if (adj[a].has(b))
|
|
108
|
+
return false;
|
|
109
|
+
if (degree[a] >= targetDegree || degree[b] >= targetDegree)
|
|
110
|
+
return false;
|
|
111
|
+
adj[a].add(b);
|
|
112
|
+
adj[b].add(a);
|
|
113
|
+
degree[a] += 1;
|
|
114
|
+
degree[b] += 1;
|
|
115
|
+
return true;
|
|
116
|
+
};
|
|
117
|
+
// Seed connectivity so we don't start disconnected.
|
|
118
|
+
if (targetDegree >= 2 && n >= 3) {
|
|
119
|
+
for (let i = 0; i < n; i++)
|
|
120
|
+
connect(i, (i + 1) % n);
|
|
121
|
+
}
|
|
122
|
+
else if (targetDegree >= 1 && n >= 2) {
|
|
123
|
+
for (let i = 0; i < n - 1; i++)
|
|
124
|
+
connect(i, i + 1);
|
|
125
|
+
}
|
|
126
|
+
const available = [];
|
|
127
|
+
const pos = new Int32Array(n).fill(-1);
|
|
128
|
+
for (let i = 0; i < n; i++) {
|
|
129
|
+
if (degree[i] < targetDegree) {
|
|
130
|
+
pos[i] = available.length;
|
|
131
|
+
available.push(i);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const removeAvailable = (id) => {
|
|
135
|
+
const p = pos[id];
|
|
136
|
+
if (p < 0)
|
|
137
|
+
return;
|
|
138
|
+
const last = available.pop();
|
|
139
|
+
if (last !== id) {
|
|
140
|
+
available[p] = last;
|
|
141
|
+
pos[last] = p;
|
|
142
|
+
}
|
|
143
|
+
pos[id] = -1;
|
|
144
|
+
};
|
|
145
|
+
const maxAttempts = n * Math.max(1, targetDegree) * 200;
|
|
146
|
+
let attempts = 0;
|
|
147
|
+
while (available.length > 1 && attempts < maxAttempts) {
|
|
148
|
+
attempts++;
|
|
149
|
+
const a = available[int(rng, available.length)];
|
|
150
|
+
const b = available[int(rng, available.length)];
|
|
151
|
+
if (a === b)
|
|
152
|
+
continue;
|
|
153
|
+
if (!connect(a, b))
|
|
154
|
+
continue;
|
|
155
|
+
if (degree[a] >= targetDegree)
|
|
156
|
+
removeAvailable(a);
|
|
157
|
+
if (degree[b] >= targetDegree)
|
|
158
|
+
removeAvailable(b);
|
|
159
|
+
}
|
|
160
|
+
return adj.map((s) => [...s]);
|
|
161
|
+
};
|
|
162
|
+
const addRoute = (routesByFrom, from, target, via, distance, maxPerTarget = 8) => {
|
|
163
|
+
let byTarget = routesByFrom.get(from);
|
|
164
|
+
if (!byTarget) {
|
|
165
|
+
byTarget = new Map();
|
|
166
|
+
routesByFrom.set(from, byTarget);
|
|
167
|
+
}
|
|
168
|
+
let list = byTarget.get(target);
|
|
169
|
+
if (!list) {
|
|
170
|
+
list = [];
|
|
171
|
+
byTarget.set(target, list);
|
|
172
|
+
}
|
|
173
|
+
const existing = list.find((x) => x.via === via);
|
|
174
|
+
if (existing) {
|
|
175
|
+
existing.distance = Math.min(existing.distance, distance);
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
list.push({ via, distance });
|
|
179
|
+
}
|
|
180
|
+
list.sort((a, b) => a.distance - b.distance);
|
|
181
|
+
if (list.length > maxPerTarget) {
|
|
182
|
+
list.length = maxPerTarget;
|
|
183
|
+
}
|
|
184
|
+
};
|
|
185
|
+
const traceHas = (trace, node) => {
|
|
186
|
+
let current = trace;
|
|
187
|
+
while (current) {
|
|
188
|
+
if (current.node === node)
|
|
189
|
+
return true;
|
|
190
|
+
current = current.prev;
|
|
191
|
+
}
|
|
192
|
+
return false;
|
|
193
|
+
};
|
|
194
|
+
const simulate = (params) => {
|
|
195
|
+
const rng = mulberry32(params.seed);
|
|
196
|
+
const graph = buildRandomGraph(params.nodes, params.degree, rng);
|
|
197
|
+
const warn = graph.some((nbs) => nbs.length < Math.min(params.degree, params.nodes - 1)) &&
|
|
198
|
+
"graph generation hit degree constraints (some nodes < --degree)";
|
|
199
|
+
const routes = Array.from({ length: params.nodes }, () => new Map());
|
|
200
|
+
// Seed direct neighbor routes: from=self -> target=neighbor via neighbor at distance=-1.
|
|
201
|
+
for (let u = 0; u < params.nodes; u++) {
|
|
202
|
+
for (const v of graph[u]) {
|
|
203
|
+
addRoute(routes[u], u, v, v, -1);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
let dataTx = 0;
|
|
207
|
+
let ackTx = 0;
|
|
208
|
+
let targetDeliveries = 0;
|
|
209
|
+
let targetExpected = 0;
|
|
210
|
+
let firstHopSum = 0;
|
|
211
|
+
let firstHopCount = 0;
|
|
212
|
+
const seen = new Uint8Array(params.nodes);
|
|
213
|
+
const deliveredToTarget = new Uint8Array(params.nodes);
|
|
214
|
+
const heap = new MinHeap((a, b) => a.t - b.t);
|
|
215
|
+
const scheduleData = (now, from, to, signer, hop) => {
|
|
216
|
+
if (params.dropRate > 0 && rng() < params.dropRate)
|
|
217
|
+
return;
|
|
218
|
+
const delay = intBetween(rng, params.minDelay, params.maxDelay);
|
|
219
|
+
dataTx++;
|
|
220
|
+
heap.push({ t: now + delay, kind: "data", from, to, signer, hop });
|
|
221
|
+
};
|
|
222
|
+
const scheduleAck = (now, from, to, trace, target, seenCounter) => {
|
|
223
|
+
if (params.dropRate > 0 && rng() < params.dropRate)
|
|
224
|
+
return;
|
|
225
|
+
const delay = intBetween(rng, params.minDelay, params.maxDelay);
|
|
226
|
+
ackTx++;
|
|
227
|
+
heap.push({
|
|
228
|
+
t: now + delay,
|
|
229
|
+
kind: "ack",
|
|
230
|
+
from,
|
|
231
|
+
to,
|
|
232
|
+
trace,
|
|
233
|
+
target,
|
|
234
|
+
seenCounter,
|
|
235
|
+
});
|
|
236
|
+
};
|
|
237
|
+
for (let msg = 0; msg < params.messages; msg++) {
|
|
238
|
+
seen.fill(0);
|
|
239
|
+
deliveredToTarget.fill(0);
|
|
240
|
+
while (heap.pop() != null) {
|
|
241
|
+
// drain any leftover events (shouldn't happen since we drain per message)
|
|
242
|
+
}
|
|
243
|
+
const source = int(rng, params.nodes);
|
|
244
|
+
const targets = pickDistinct(rng, params.nodes, Math.min(params.targetsPerMessage, params.nodes - 1), source);
|
|
245
|
+
const targetsSet = new Set(targets);
|
|
246
|
+
targetExpected += targets.length;
|
|
247
|
+
const sourceSigner = { node: source };
|
|
248
|
+
const t0 = 0;
|
|
249
|
+
for (const nb of graph[source]) {
|
|
250
|
+
scheduleData(t0, source, nb, sourceSigner, 1);
|
|
251
|
+
}
|
|
252
|
+
while (heap.size > 0) {
|
|
253
|
+
const ev = heap.pop();
|
|
254
|
+
if (ev.kind === "data") {
|
|
255
|
+
const to = ev.to;
|
|
256
|
+
const seenBefore = seen[to];
|
|
257
|
+
const ignored = shouldIgnoreDataMessage({
|
|
258
|
+
signedBySelf: traceHas(ev.signer, to),
|
|
259
|
+
seenBefore,
|
|
260
|
+
mode: { kind: "seek", redundancy: params.redundancy },
|
|
261
|
+
});
|
|
262
|
+
if (ignored) {
|
|
263
|
+
continue;
|
|
264
|
+
}
|
|
265
|
+
seen[to] = Math.min(255, seenBefore + 1);
|
|
266
|
+
if (shouldAcknowledgeDataMessage({
|
|
267
|
+
isRecipient: targetsSet.has(to),
|
|
268
|
+
seenBefore,
|
|
269
|
+
redundancy: params.redundancy,
|
|
270
|
+
})) {
|
|
271
|
+
if (deliveredToTarget[to] === 0) {
|
|
272
|
+
deliveredToTarget[to] = 1;
|
|
273
|
+
targetDeliveries++;
|
|
274
|
+
firstHopSum += ev.hop;
|
|
275
|
+
firstHopCount++;
|
|
276
|
+
}
|
|
277
|
+
// ACK travels backwards along the signer trace.
|
|
278
|
+
scheduleAck(ev.t, to, ev.signer.node, ev.signer, to, seenBefore);
|
|
279
|
+
}
|
|
280
|
+
// Redundant forwarding: forward until local seenBefore reaches redundancy.
|
|
281
|
+
const newSigner = { node: to, prev: ev.signer };
|
|
282
|
+
const relayTo = selectSeekRelayTargets({
|
|
283
|
+
candidates: graph[to],
|
|
284
|
+
getCandidateId: (id) => id,
|
|
285
|
+
inboundId: ev.from,
|
|
286
|
+
hasSigned: (id) => traceHas(ev.signer, id),
|
|
287
|
+
});
|
|
288
|
+
for (const nb of relayTo) {
|
|
289
|
+
scheduleData(ev.t, to, nb, newSigner, ev.hop + 1);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
else {
|
|
293
|
+
// ACK processing at `ev.to` (a signer on the trace).
|
|
294
|
+
const current = ev.to;
|
|
295
|
+
if (ev.trace.node !== current) {
|
|
296
|
+
// Should not happen; indicates a bug in the simulator.
|
|
297
|
+
continue;
|
|
298
|
+
}
|
|
299
|
+
const upstream = ev.trace.prev?.node;
|
|
300
|
+
const routeUpdate = computeSeekAckRouteUpdate({
|
|
301
|
+
current,
|
|
302
|
+
upstream,
|
|
303
|
+
downstream: ev.from,
|
|
304
|
+
target: ev.target,
|
|
305
|
+
distance: ev.seenCounter,
|
|
306
|
+
});
|
|
307
|
+
addRoute(routes[current], routeUpdate.from, routeUpdate.target, routeUpdate.neighbour, routeUpdate.distance);
|
|
308
|
+
if (upstream != null) {
|
|
309
|
+
scheduleAck(ev.t, current, upstream, ev.trace.prev, ev.target, ev.seenCounter);
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
let totalRouteEntries = 0;
|
|
315
|
+
let totalRouteTargets = 0;
|
|
316
|
+
for (let i = 0; i < params.nodes; i++) {
|
|
317
|
+
for (const [_from, byTarget] of routes[i]) {
|
|
318
|
+
totalRouteTargets += byTarget.size;
|
|
319
|
+
for (const [_target, list] of byTarget) {
|
|
320
|
+
totalRouteEntries += list.length;
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
return {
|
|
325
|
+
dataTx,
|
|
326
|
+
ackTx,
|
|
327
|
+
targetDeliveries,
|
|
328
|
+
targetExpected,
|
|
329
|
+
firstHopSum,
|
|
330
|
+
firstHopCount,
|
|
331
|
+
avgRouteEntriesPerNode: totalRouteEntries / params.nodes,
|
|
332
|
+
avgRouteTargetsPerNode: totalRouteTargets / params.nodes,
|
|
333
|
+
warn: warn || undefined,
|
|
334
|
+
};
|
|
335
|
+
};
|
|
336
|
+
const parseArgs = (argv) => {
|
|
337
|
+
const get = (key) => {
|
|
338
|
+
const idx = argv.indexOf(key);
|
|
339
|
+
if (idx === -1)
|
|
340
|
+
return undefined;
|
|
341
|
+
return argv[idx + 1];
|
|
342
|
+
};
|
|
343
|
+
const has = (key) => argv.includes(key);
|
|
344
|
+
if (has("--help") || has("-h")) {
|
|
345
|
+
console.log([
|
|
346
|
+
"topology-sim.ts",
|
|
347
|
+
"",
|
|
348
|
+
"Args:",
|
|
349
|
+
" --nodes N number of nodes (default: 2000)",
|
|
350
|
+
" --degree K target undirected degree (default: 4)",
|
|
351
|
+
" --messages M number of seek waves (default: 200)",
|
|
352
|
+
" --targets T targets per message (default: 10)",
|
|
353
|
+
" --redundancy R seek redundancy (default: 2)",
|
|
354
|
+
" --seed S RNG seed (default: 1)",
|
|
355
|
+
" --drop P per-edge drop rate [0..1] (default: 0)",
|
|
356
|
+
" --minDelay MS min per-edge delay (default: 1)",
|
|
357
|
+
" --maxDelay MS max per-edge delay (default: 5)",
|
|
358
|
+
"",
|
|
359
|
+
"Example:",
|
|
360
|
+
" node --loader ts-node/esm ./packages/transport/stream/benchmark/topology-sim.ts --nodes 5000 --degree 6 --messages 500 --targets 20 --redundancy 2 --drop 0.01 --seed 42",
|
|
361
|
+
].join("\n"));
|
|
362
|
+
process.exit(0);
|
|
363
|
+
}
|
|
364
|
+
const nodes = Number(get("--nodes") ?? 2000);
|
|
365
|
+
const degree = Number(get("--degree") ?? 4);
|
|
366
|
+
const messages = Number(get("--messages") ?? 200);
|
|
367
|
+
const targetsPerMessage = Number(get("--targets") ?? 10);
|
|
368
|
+
const redundancy = Number(get("--redundancy") ?? 2);
|
|
369
|
+
const seed = Number(get("--seed") ?? 1);
|
|
370
|
+
const dropRate = Number(get("--drop") ?? 0);
|
|
371
|
+
const minDelay = Number(get("--minDelay") ?? 1);
|
|
372
|
+
const maxDelay = Number(get("--maxDelay") ?? 5);
|
|
373
|
+
return {
|
|
374
|
+
nodes,
|
|
375
|
+
degree,
|
|
376
|
+
messages,
|
|
377
|
+
targetsPerMessage,
|
|
378
|
+
redundancy,
|
|
379
|
+
seed,
|
|
380
|
+
dropRate,
|
|
381
|
+
minDelay,
|
|
382
|
+
maxDelay,
|
|
383
|
+
};
|
|
384
|
+
};
|
|
385
|
+
const main = async () => {
|
|
386
|
+
const params = parseArgs(process.argv.slice(2));
|
|
387
|
+
const started = Date.now();
|
|
388
|
+
const result = simulate(params);
|
|
389
|
+
const elapsedMs = Date.now() - started;
|
|
390
|
+
const deliveryPct = result.targetExpected === 0
|
|
391
|
+
? 100
|
|
392
|
+
: (result.targetDeliveries / result.targetExpected) * 100;
|
|
393
|
+
const avgFirstHop = result.firstHopCount === 0 ? 0 : result.firstHopSum / result.firstHopCount;
|
|
394
|
+
const lines = [];
|
|
395
|
+
lines.push("stream topology-sim results");
|
|
396
|
+
lines.push(`- nodes: ${params.nodes}, degree: ${params.degree}`);
|
|
397
|
+
lines.push(`- messages: ${params.messages}, targets/message: ${params.targetsPerMessage}, redundancy: ${params.redundancy}`);
|
|
398
|
+
lines.push(`- drop: ${params.dropRate}, delay: ${params.minDelay}..${params.maxDelay} (sim units)`);
|
|
399
|
+
lines.push(`- tx: data=${result.dataTx}, ack=${result.ackTx}`);
|
|
400
|
+
lines.push(`- delivery: ${result.targetDeliveries}/${result.targetExpected} (${deliveryPct.toFixed(2)}%)`);
|
|
401
|
+
lines.push(`- avg first-delivery hop: ${avgFirstHop.toFixed(2)}`);
|
|
402
|
+
lines.push(`- avg route targets/node: ${result.avgRouteTargetsPerNode.toFixed(2)}, entries/node: ${result.avgRouteEntriesPerNode.toFixed(2)}`);
|
|
403
|
+
if (result.warn) {
|
|
404
|
+
lines.push(`- warn: ${result.warn}`);
|
|
405
|
+
}
|
|
406
|
+
lines.push(`- wall time: ${elapsedMs}ms`);
|
|
407
|
+
console.log(lines.join("\n"));
|
|
408
|
+
};
|
|
409
|
+
await main();
|
|
410
|
+
//# sourceMappingURL=topology-sim.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"topology-sim.js","sourceRoot":"","sources":["../../benchmark/topology-sim.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { tcp } from "@libp2p/tcp";
|
|
2
2
|
import { TestSession } from "@peerbit/libp2p-test-utils";
|
|
3
|
-
import {
|
|
3
|
+
import { AcknowledgeDelivery } from "@peerbit/stream-interface";
|
|
4
4
|
import { waitForResolved } from "@peerbit/time";
|
|
5
5
|
import B from "benchmark";
|
|
6
6
|
import crypto from "crypto";
|
|
@@ -46,7 +46,7 @@ await waitForNeighbour(stream(0), stream(1));
|
|
|
46
46
|
await waitForNeighbour(stream(1), stream(2));
|
|
47
47
|
await waitForNeighbour(stream(2), stream(3));
|
|
48
48
|
stream(0).publish(new Uint8Array([123]), {
|
|
49
|
-
mode: new
|
|
49
|
+
mode: new AcknowledgeDelivery({
|
|
50
50
|
redundancy: 1,
|
|
51
51
|
to: [stream(session.peers.length - 1).publicKey],
|
|
52
52
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../benchmark/transfer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"transfer.js","sourceRoot":"","sources":["../../benchmark/transfer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export type SeekRoutingMode = {
|
|
2
|
+
kind: "seek";
|
|
3
|
+
redundancy: number;
|
|
4
|
+
} | {
|
|
5
|
+
kind: "non-seek";
|
|
6
|
+
};
|
|
7
|
+
export type ShouldIgnoreDataMessageArgs = {
|
|
8
|
+
signedBySelf: boolean;
|
|
9
|
+
seenBefore: number;
|
|
10
|
+
mode: SeekRoutingMode;
|
|
11
|
+
};
|
|
12
|
+
export declare const shouldIgnoreDataMessage: (args: ShouldIgnoreDataMessageArgs) => boolean;
|
|
13
|
+
export type SelectSeekRelayTargetsArgs<T, Id extends string | number> = {
|
|
14
|
+
candidates: Iterable<T>;
|
|
15
|
+
getCandidateId: (candidate: T) => Id;
|
|
16
|
+
inboundId: Id;
|
|
17
|
+
hasSigned: (candidateId: Id) => boolean;
|
|
18
|
+
};
|
|
19
|
+
export declare const selectSeekRelayTargets: <T, Id extends string | number>(args: SelectSeekRelayTargetsArgs<T, Id>) => T[];
|
|
20
|
+
export type ShouldAcknowledgeDataMessageArgs = {
|
|
21
|
+
isRecipient: boolean;
|
|
22
|
+
seenBefore: number;
|
|
23
|
+
redundancy: number;
|
|
24
|
+
};
|
|
25
|
+
export declare const shouldAcknowledgeDataMessage: (args: ShouldAcknowledgeDataMessageArgs) => boolean;
|
|
26
|
+
export type SeekAckRouteUpdate<Id extends string | number> = {
|
|
27
|
+
from: Id;
|
|
28
|
+
neighbour: Id;
|
|
29
|
+
target: Id;
|
|
30
|
+
distance: number;
|
|
31
|
+
};
|
|
32
|
+
export declare const computeSeekAckRouteUpdate: <Id extends string | number>(args: {
|
|
33
|
+
current: Id;
|
|
34
|
+
upstream?: Id;
|
|
35
|
+
downstream: Id;
|
|
36
|
+
target: Id;
|
|
37
|
+
distance: number;
|
|
38
|
+
}) => SeekAckRouteUpdate<Id>;
|
|
39
|
+
//# sourceMappingURL=seek-routing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seek-routing.d.ts","sourceRoot":"","sources":["../../../src/core/seek-routing.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;AAExB,MAAM,MAAM,2BAA2B,GAAG;IACzC,YAAY,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,eAAe,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,MAAM,2BAA2B,YAUxE,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,EAAE,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI;IACvE,UAAU,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC;IACxB,cAAc,EAAE,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,CAAC;IACrC,SAAS,EAAE,EAAE,CAAC;IACd,SAAS,EAAE,CAAC,WAAW,EAAE,EAAE,KAAK,OAAO,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,sBAAsB,GAAI,CAAC,EAAE,EAAE,SAAS,MAAM,GAAG,MAAM,EACnE,MAAM,0BAA0B,CAAC,CAAC,EAAE,EAAE,CAAC,KACrC,CAAC,EASH,CAAC;AAEF,MAAM,MAAM,gCAAgC,GAAG;IAC9C,WAAW,EAAE,OAAO,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,4BAA4B,GACxC,MAAM,gCAAgC,YAGtC,CAAC;AAEF,MAAM,MAAM,kBAAkB,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI;IAC5D,IAAI,EAAE,EAAE,CAAC;IACT,SAAS,EAAE,EAAE,CAAC;IACd,MAAM,EAAE,EAAE,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,yBAAyB,GAAI,EAAE,SAAS,MAAM,GAAG,MAAM,EAAE,MAAM;IAC3E,OAAO,EAAE,EAAE,CAAC;IACZ,QAAQ,CAAC,EAAE,EAAE,CAAC;IACd,UAAU,EAAE,EAAE,CAAC;IACf,MAAM,EAAE,EAAE,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;CACjB,KAAG,kBAAkB,CAAC,EAAE,CAOxB,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export const shouldIgnoreDataMessage = (args) => {
|
|
2
|
+
if (args.signedBySelf) {
|
|
3
|
+
return true;
|
|
4
|
+
}
|
|
5
|
+
if (args.mode.kind === "seek") {
|
|
6
|
+
return args.seenBefore >= args.mode.redundancy;
|
|
7
|
+
}
|
|
8
|
+
return args.seenBefore > 0;
|
|
9
|
+
};
|
|
10
|
+
export const selectSeekRelayTargets = (args) => {
|
|
11
|
+
const out = [];
|
|
12
|
+
for (const candidate of args.candidates) {
|
|
13
|
+
const candidateId = args.getCandidateId(candidate);
|
|
14
|
+
if (candidateId === args.inboundId)
|
|
15
|
+
continue;
|
|
16
|
+
if (args.hasSigned(candidateId))
|
|
17
|
+
continue;
|
|
18
|
+
out.push(candidate);
|
|
19
|
+
}
|
|
20
|
+
return out;
|
|
21
|
+
};
|
|
22
|
+
export const shouldAcknowledgeDataMessage = (args) => {
|
|
23
|
+
return args.isRecipient && args.seenBefore < args.redundancy;
|
|
24
|
+
};
|
|
25
|
+
export const computeSeekAckRouteUpdate = (args) => {
|
|
26
|
+
return {
|
|
27
|
+
from: args.upstream ?? args.current,
|
|
28
|
+
neighbour: args.downstream,
|
|
29
|
+
target: args.target,
|
|
30
|
+
distance: args.distance,
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=seek-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"seek-routing.js","sourceRoot":"","sources":["../../../src/core/seek-routing.ts"],"names":[],"mappings":"AAUA,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAiC,EAAE,EAAE;IAC5E,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACvB,OAAO,IAAI,CAAC;IACb,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;IAChD,CAAC;IAED,OAAO,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;AAC5B,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACrC,IAAuC,EACjC,EAAE;IACR,MAAM,GAAG,GAAQ,EAAE,CAAC;IACpB,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACzC,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,WAAW,KAAK,IAAI,CAAC,SAAS;YAAE,SAAS;QAC7C,IAAI,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC;YAAE,SAAS;QAC1C,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACrB,CAAC;IACD,OAAO,GAAG,CAAC;AACZ,CAAC,CAAC;AAQF,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAC3C,IAAsC,EACrC,EAAE;IACH,OAAO,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;AAC9D,CAAC,CAAC;AASF,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAA6B,IAMrE,EAA0B,EAAE;IAC5B,OAAO;QACN,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO;QACnC,SAAS,EAAE,IAAI,CAAC,UAAU;QAC1B,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACvB,CAAC;AACH,CAAC,CAAC"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { type Multiaddr } from "@multiformats/multiaddr";
|
|
|
5
5
|
import { Cache } from "@peerbit/cache";
|
|
6
6
|
import { PublicSignKey } from "@peerbit/crypto";
|
|
7
7
|
import type { SignatureWithKey } from "@peerbit/crypto";
|
|
8
|
-
import { ACK, AcknowledgeDelivery, AnyWhere, DataMessage, Goodbye, Message, MultiAddrinfo,
|
|
8
|
+
import { ACK, AcknowledgeAnyWhere, AcknowledgeDelivery, AnyWhere, DataMessage, Goodbye, Message, MultiAddrinfo, SilentDelivery } from "@peerbit/stream-interface";
|
|
9
9
|
import type { IdOptions, PeerRefs, PriorityOptions, PublicKeyFromHashResolver, StreamEvents, WaitForAnyOpts, WaitForPeer, WaitForPresentOpts, WithExtraSigners, WithMode, WithTo } from "@peerbit/stream-interface";
|
|
10
10
|
import { pipe } from "it-pipe";
|
|
11
11
|
import { type Pushable } from "it-pushable";
|
|
@@ -66,6 +66,8 @@ export declare class PeerStreams extends TypedEventEmitter<PeerStreamEvents> {
|
|
|
66
66
|
private outboundStreams;
|
|
67
67
|
get rawOutboundStreams(): Stream[];
|
|
68
68
|
_getActiveOutboundPushable(): PushableLanes<Uint8Array> | undefined;
|
|
69
|
+
getOutboundQueuedBytes(): number;
|
|
70
|
+
getOutboundQueuedBytesByLane(): number[];
|
|
69
71
|
_getOutboundCount(): number;
|
|
70
72
|
_getInboundCount(): number;
|
|
71
73
|
_debugInboundStats(): {
|
|
@@ -153,9 +155,27 @@ export type DirectStreamOptions = {
|
|
|
153
155
|
maxOutboundStreams?: number;
|
|
154
156
|
inboundIdleTimeout?: number;
|
|
155
157
|
connectionManager?: ConnectionManagerArguments;
|
|
156
|
-
routeSeekInterval?: number;
|
|
157
158
|
seekTimeout?: number;
|
|
158
159
|
routeMaxRetentionPeriod?: number;
|
|
160
|
+
/**
|
|
161
|
+
* Best-effort bounds for the per-process route cache. These exist to prevent
|
|
162
|
+
* unbounded memory growth in large networks/simulations.
|
|
163
|
+
*/
|
|
164
|
+
routeCacheMaxFromEntries?: number;
|
|
165
|
+
routeCacheMaxTargetsPerFrom?: number;
|
|
166
|
+
routeCacheMaxRelaysPerTarget?: number;
|
|
167
|
+
/**
|
|
168
|
+
* Share node-level routing/session state across DirectStream instances created
|
|
169
|
+
* from the same libp2p private key.
|
|
170
|
+
*
|
|
171
|
+
* This reduces duplicated topology knowledge when multiple protocols run on
|
|
172
|
+
* the same node (e.g. pubsub + fanout overlays).
|
|
173
|
+
*
|
|
174
|
+
* Defaults to `true`.
|
|
175
|
+
*/
|
|
176
|
+
sharedRouting?: boolean;
|
|
177
|
+
seenCacheMax?: number;
|
|
178
|
+
seenCacheTtlMs?: number;
|
|
159
179
|
};
|
|
160
180
|
type ConnectionManagerLike = {
|
|
161
181
|
getConnections(peerId?: PeerId): Connection[];
|
|
@@ -206,6 +226,8 @@ export declare abstract class DirectStream<Events extends {
|
|
|
206
226
|
multicodecs: string[];
|
|
207
227
|
seenCache: Cache<number>;
|
|
208
228
|
private _registrarTopologyIds;
|
|
229
|
+
private _peerConnectListener?;
|
|
230
|
+
private _peerDisconnectListener?;
|
|
209
231
|
private readonly maxInboundStreams?;
|
|
210
232
|
private readonly maxOutboundStreams?;
|
|
211
233
|
connectionManagerOptions: ConnectionManagerOptions;
|
|
@@ -213,19 +235,28 @@ export declare abstract class DirectStream<Events extends {
|
|
|
213
235
|
private healthChecks;
|
|
214
236
|
private pruneConnectionsTimeout;
|
|
215
237
|
private prunedConnectionsCache?;
|
|
238
|
+
private pruneToLimitsInFlight?;
|
|
239
|
+
private _startInFlight?;
|
|
216
240
|
private routeMaxRetentionPeriod;
|
|
241
|
+
private routeCacheMaxFromEntries?;
|
|
242
|
+
private routeCacheMaxTargetsPerFrom?;
|
|
243
|
+
private routeCacheMaxRelaysPerTarget?;
|
|
244
|
+
private readonly sharedRouting;
|
|
245
|
+
private sharedRoutingKey?;
|
|
246
|
+
private sharedRoutingState?;
|
|
217
247
|
outboundInflightQueue: Pushable<{
|
|
218
248
|
connection: Connection;
|
|
219
249
|
peerId: PeerId;
|
|
220
250
|
}>;
|
|
221
|
-
routeSeekInterval: number;
|
|
222
251
|
seekTimeout: number;
|
|
223
252
|
closeController: AbortController;
|
|
224
253
|
session: number;
|
|
225
254
|
_outboundPump: ReturnType<typeof pipe> | undefined;
|
|
226
255
|
private _ackCallbacks;
|
|
227
256
|
constructor(components: DirectStreamComponents, multicodecs: string[], options?: DirectStreamOptions);
|
|
257
|
+
private pruneConnectionsToLimits;
|
|
228
258
|
start(): Promise<void>;
|
|
259
|
+
private _startImpl;
|
|
229
260
|
/**
|
|
230
261
|
* Unregister the pubsub protocol and the streams with other peers will be closed.
|
|
231
262
|
*/
|
|
@@ -285,13 +316,14 @@ export declare abstract class DirectStream<Events extends {
|
|
|
285
316
|
private checkIsAlive;
|
|
286
317
|
createMessage(data: Uint8Array | Uint8ArrayList | undefined, options: (WithTo | WithMode) & PriorityOptions & IdOptions & {
|
|
287
318
|
skipRecipientValidation?: boolean;
|
|
288
|
-
} & WithExtraSigners): Promise<DataMessage<SilentDelivery | AcknowledgeDelivery |
|
|
319
|
+
} & WithExtraSigners): Promise<DataMessage<SilentDelivery | AcknowledgeDelivery | AcknowledgeAnyWhere | AnyWhere>>;
|
|
289
320
|
/**
|
|
290
321
|
* Publishes messages to all peers
|
|
291
322
|
*/
|
|
292
323
|
publish(data: Uint8Array | Uint8ArrayList | undefined, options?: PublishOptions): Promise<Uint8Array | undefined>;
|
|
293
324
|
relayMessage(from: PublicSignKey, message: Message, to?: PeerStreams[] | Map<string, PeerStreams>): Promise<void>;
|
|
294
325
|
private clearHealthcheckTimer;
|
|
326
|
+
private formatDeliveryDebugState;
|
|
295
327
|
private createDeliveryPromise;
|
|
296
328
|
publishMessage(from: PublicSignKey, message: Message, to?: PeerStreams[] | Map<string, PeerStreams>, relayed?: boolean, signal?: AbortSignal): Promise<void>;
|
|
297
329
|
maybeConnectDirectly(toHash: string, origin: MultiAddrinfo): Promise<void>;
|