@peerbit/stream 5.1.5 → 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,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":""}