@peerbit/stream 5.1.6 → 5.2.0

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.
@@ -1,12 +0,0 @@
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
- export {};
12
- //# sourceMappingURL=topology-sim.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"topology-sim.d.ts","sourceRoot":"","sources":["../../benchmark/topology-sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -1,410 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"topology-sim.js","sourceRoot":"","sources":["../../benchmark/topology-sim.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=transfer.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"transfer.d.ts","sourceRoot":"","sources":["../../benchmark/transfer.ts"],"names":[],"mappings":""}