@peerbit/stream 4.5.3 → 4.6.0-000e3f1

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.
@@ -0,0 +1,12 @@
1
+ /**
2
+ * In-memory "real DirectStream" simulator.
3
+ *
4
+ * Goal: run most of @peerbit/stream's real logic (routing, ACK learning, dialer,
5
+ * pruning) but swap the underlying libp2p transport for a lightweight, in-memory
6
+ * shim so we can explore 100s–1000s of nodes.
7
+ *
8
+ * Run:
9
+ * node --loader ts-node/esm ./packages/transport/stream/benchmark/directstream-sim.ts --nodes 200 --degree 4 --messages 20 --targets 5 --redundancy 2 --seed 1
10
+ */
11
+ export {};
12
+ //# sourceMappingURL=directstream-sim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directstream-sim.d.ts","sourceRoot":"","sources":["../../benchmark/directstream-sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
@@ -0,0 +1,299 @@
1
+ /**
2
+ * In-memory "real DirectStream" simulator.
3
+ *
4
+ * Goal: run most of @peerbit/stream's real logic (routing, ACK learning, dialer,
5
+ * pruning) but swap the underlying libp2p transport for a lightweight, in-memory
6
+ * shim so we can explore 100s–1000s of nodes.
7
+ *
8
+ * Run:
9
+ * node --loader ts-node/esm ./packages/transport/stream/benchmark/directstream-sim.ts --nodes 200 --degree 4 --messages 20 --targets 5 --redundancy 2 --seed 1
10
+ */
11
+ import { AcknowledgeDelivery } from "@peerbit/stream-interface";
12
+ import { PreHash, SignatureWithKey } from "@peerbit/crypto";
13
+ import { delay } from "@peerbit/time";
14
+ import { DirectStream } from "../src/index.js";
15
+ import { InMemoryConnectionManager, InMemoryNetwork, } from "@peerbit/libp2p-test-utils/inmemory-libp2p.js";
16
+ const mulberry32 = (seed) => {
17
+ let t = seed >>> 0;
18
+ return () => {
19
+ t += 0x6d2b79f5;
20
+ let x = t;
21
+ x = Math.imul(x ^ (x >>> 15), x | 1);
22
+ x ^= x + Math.imul(x ^ (x >>> 7), x | 61);
23
+ return ((x ^ (x >>> 14)) >>> 0) / 4294967296;
24
+ };
25
+ };
26
+ const int = (rng, maxExclusive) => Math.floor(rng() * maxExclusive);
27
+ const pickDistinct = (rng, n, k, exclude) => {
28
+ const out = new Set();
29
+ while (out.size < k) {
30
+ const candidate = int(rng, n);
31
+ if (candidate === exclude)
32
+ continue;
33
+ out.add(candidate);
34
+ }
35
+ return [...out];
36
+ };
37
+ const buildRandomGraph = (n, targetDegree, rng) => {
38
+ if (n <= 0)
39
+ throw new Error("nodes must be > 0");
40
+ if (targetDegree < 0)
41
+ throw new Error("degree must be >= 0");
42
+ if (targetDegree >= n) {
43
+ throw new Error("degree must be < nodes for a simple graph");
44
+ }
45
+ const adj = Array.from({ length: n }, () => new Set());
46
+ const degree = new Uint16Array(n);
47
+ const connect = (a, b) => {
48
+ if (a === b)
49
+ return false;
50
+ if (adj[a].has(b))
51
+ return false;
52
+ if (degree[a] >= targetDegree || degree[b] >= targetDegree)
53
+ return false;
54
+ adj[a].add(b);
55
+ adj[b].add(a);
56
+ degree[a] += 1;
57
+ degree[b] += 1;
58
+ return true;
59
+ };
60
+ // Seed connectivity.
61
+ if (targetDegree >= 2 && n >= 3) {
62
+ for (let i = 0; i < n; i++)
63
+ connect(i, (i + 1) % n);
64
+ }
65
+ else if (targetDegree >= 1 && n >= 2) {
66
+ for (let i = 0; i < n - 1; i++)
67
+ connect(i, i + 1);
68
+ }
69
+ const available = [];
70
+ const pos = new Int32Array(n).fill(-1);
71
+ for (let i = 0; i < n; i++) {
72
+ if (degree[i] < targetDegree) {
73
+ pos[i] = available.length;
74
+ available.push(i);
75
+ }
76
+ }
77
+ const removeAvailable = (id) => {
78
+ const p = pos[id];
79
+ if (p < 0)
80
+ return;
81
+ const last = available.pop();
82
+ if (last !== id) {
83
+ available[p] = last;
84
+ pos[last] = p;
85
+ }
86
+ pos[id] = -1;
87
+ };
88
+ const maxAttempts = n * Math.max(1, targetDegree) * 200;
89
+ let attempts = 0;
90
+ while (available.length > 1 && attempts < maxAttempts) {
91
+ attempts++;
92
+ const a = available[int(rng, available.length)];
93
+ const b = available[int(rng, available.length)];
94
+ if (a === b)
95
+ continue;
96
+ if (!connect(a, b))
97
+ continue;
98
+ if (degree[a] >= targetDegree)
99
+ removeAvailable(a);
100
+ if (degree[b] >= targetDegree)
101
+ removeAvailable(b);
102
+ }
103
+ return adj.map((s) => [...s]);
104
+ };
105
+ class SimDirectStream extends DirectStream {
106
+ constructor(c, opts) {
107
+ super(c, ["sim/stream/0.0.0"], {
108
+ canRelayMessage: true,
109
+ connectionManager: {
110
+ // Keep it simple by default; can be expanded later.
111
+ dialer: opts.dialer ? { retryDelay: 1_000 } : false,
112
+ pruner: opts.pruner
113
+ ? {
114
+ interval: opts.prunerIntervalMs,
115
+ maxBuffer: opts.prunerMaxBufferBytes,
116
+ }
117
+ : false,
118
+ maxConnections: Number.MAX_SAFE_INTEGER,
119
+ minConnections: 0,
120
+ },
121
+ });
122
+ // Fast/mock signing: we only need the signer identity to flow through the
123
+ // signatures list for routing semantics; crypto verification is skipped.
124
+ this.sign = async () => new SignatureWithKey({
125
+ signature: new Uint8Array([0]),
126
+ publicKey: this.publicKey,
127
+ prehash: PreHash.NONE,
128
+ });
129
+ }
130
+ async verifyAndProcess(message) {
131
+ // Skip expensive crypto verify for large sims, but keep session handling
132
+ // behavior consistent with the real implementation.
133
+ const from = message.header.signatures.publicKeys[0];
134
+ if (this.peers.has(from.hashcode())) {
135
+ // do nothing
136
+ }
137
+ else {
138
+ this.updateSession(from, Number(message.header.session));
139
+ }
140
+ return true;
141
+ }
142
+ }
143
+ const parseArgs = (argv) => {
144
+ const get = (key) => {
145
+ const idx = argv.indexOf(key);
146
+ if (idx === -1)
147
+ return undefined;
148
+ return argv[idx + 1];
149
+ };
150
+ if (argv.includes("--help") || argv.includes("-h")) {
151
+ console.log([
152
+ "directstream-sim.ts",
153
+ "",
154
+ "Args:",
155
+ " --nodes N number of nodes (default: 200)",
156
+ " --degree K target undirected degree (default: 4)",
157
+ " --messages M number of seek waves (default: 20)",
158
+ " --targets T targets per message (default: 5)",
159
+ " --redundancy R seek redundancy (default: 2)",
160
+ " --seed S RNG seed (default: 1)",
161
+ " --dialer 0|1 enable autodial (default: 1)",
162
+ " --pruner 0|1 enable pruning (default: 0)",
163
+ " --prunerIntervalMs X pruner interval (default: 50)",
164
+ " --prunerMaxBufferBytes B prune when queued bytes > B (default: 65536)",
165
+ " --dialDelayMs X artificial dial delay (default: 0)",
166
+ " --streamRxDelayMs X per-chunk inbound delay in shim (default: 0)",
167
+ " --streamHighWaterMarkBytes B backpressure threshold (default: 262144)",
168
+ "",
169
+ "Example:",
170
+ " node --loader ts-node/esm ./packages/transport/stream/benchmark/directstream-sim.ts --nodes 500 --degree 6 --messages 50 --targets 20 --redundancy 2 --seed 42",
171
+ ].join("\n"));
172
+ process.exit(0);
173
+ }
174
+ return {
175
+ nodes: Number(get("--nodes") ?? 200),
176
+ degree: Number(get("--degree") ?? 4),
177
+ messages: Number(get("--messages") ?? 20),
178
+ targetsPerMessage: Number(get("--targets") ?? 5),
179
+ redundancy: Number(get("--redundancy") ?? 2),
180
+ seed: Number(get("--seed") ?? 1),
181
+ dialer: String(get("--dialer") ?? "1") !== "0",
182
+ pruner: String(get("--pruner") ?? "0") === "1",
183
+ prunerIntervalMs: Number(get("--prunerIntervalMs") ?? 50),
184
+ prunerMaxBufferBytes: Number(get("--prunerMaxBufferBytes") ?? 64 * 1024),
185
+ dialDelayMs: Number(get("--dialDelayMs") ?? 0),
186
+ streamRxDelayMs: Number(get("--streamRxDelayMs") ?? 0),
187
+ streamHighWaterMarkBytes: Number(get("--streamHighWaterMarkBytes") ?? 256 * 1024),
188
+ };
189
+ };
190
+ const waitForProtocolStreams = async (peers, timeoutMs = 30_000) => {
191
+ const start = Date.now();
192
+ while (Date.now() - start < timeoutMs) {
193
+ let missing = 0;
194
+ for (const p of peers) {
195
+ const protocols = p.stream.multicodecs;
196
+ for (const conn of p.stream.components.connectionManager.getConnections()) {
197
+ const streams = conn.streams;
198
+ const hasOutbound = streams.some((s) => s.protocol && protocols.includes(s.protocol) && s.direction === "outbound");
199
+ const hasInbound = streams.some((s) => s.protocol && protocols.includes(s.protocol) && s.direction === "inbound");
200
+ if (!hasOutbound || !hasInbound)
201
+ missing++;
202
+ }
203
+ }
204
+ if (missing === 0)
205
+ return;
206
+ await delay(0);
207
+ }
208
+ throw new Error("Timeout waiting for protocol streams to become duplex");
209
+ };
210
+ const main = async () => {
211
+ const params = parseArgs(process.argv.slice(2));
212
+ const rng = mulberry32(params.seed);
213
+ const graph = buildRandomGraph(params.nodes, params.degree, rng);
214
+ const network = new InMemoryNetwork({
215
+ streamRxDelayMs: params.streamRxDelayMs,
216
+ streamHighWaterMarkBytes: params.streamHighWaterMarkBytes,
217
+ dialDelayMs: params.dialDelayMs,
218
+ });
219
+ const peers = [];
220
+ const basePort = 30_000;
221
+ for (let i = 0; i < params.nodes; i++) {
222
+ const port = basePort + i;
223
+ const { runtime } = InMemoryNetwork.createPeer({ index: i, port, network });
224
+ runtime.connectionManager = new InMemoryConnectionManager(network, runtime);
225
+ network.registerPeer(runtime, port);
226
+ const components = {
227
+ peerId: runtime.peerId,
228
+ privateKey: runtime.privateKey,
229
+ addressManager: runtime.addressManager,
230
+ registrar: runtime.registrar,
231
+ connectionManager: runtime.connectionManager,
232
+ peerStore: runtime.peerStore,
233
+ events: runtime.events,
234
+ };
235
+ peers.push({
236
+ peerId: runtime.peerId,
237
+ stream: new SimDirectStream(components, {
238
+ dialer: params.dialer,
239
+ pruner: params.pruner,
240
+ prunerIntervalMs: params.prunerIntervalMs,
241
+ prunerMaxBufferBytes: params.prunerMaxBufferBytes,
242
+ }),
243
+ });
244
+ }
245
+ await Promise.all(peers.map((p) => p.stream.start()));
246
+ // Establish initial graph via dials.
247
+ for (let a = 0; a < graph.length; a++) {
248
+ for (const b of graph[a]) {
249
+ if (b <= a)
250
+ continue;
251
+ const addrB = peers[b].stream.components.addressManager.getAddresses()[0];
252
+ await peers[a].stream.components.connectionManager.openConnection(addrB);
253
+ }
254
+ }
255
+ await waitForProtocolStreams(peers);
256
+ let delivered = 0;
257
+ for (let i = 0; i < params.messages; i++) {
258
+ const source = int(rng, params.nodes);
259
+ const targets = pickDistinct(rng, params.nodes, Math.min(params.targetsPerMessage, params.nodes - 1), source);
260
+ const to = targets.map((t) => peers[t].stream.publicKey);
261
+ await peers[source].stream.publish(new Uint8Array([1]), {
262
+ mode: new AcknowledgeDelivery({
263
+ to,
264
+ redundancy: params.redundancy,
265
+ }),
266
+ });
267
+ delivered += to.length;
268
+ }
269
+ // Allow any dialer follow-ups / pruning timers to run briefly.
270
+ await delay(50);
271
+ const m = network.metrics;
272
+ let peerEdges = 0;
273
+ let neighbourSum = 0;
274
+ let routeSum = 0;
275
+ for (const p of peers) {
276
+ peerEdges += p.stream.components.connectionManager.getConnections().length;
277
+ neighbourSum += p.stream.peers.size;
278
+ routeSum += p.stream.routes.count();
279
+ }
280
+ const connectionsNow = peerEdges / 2;
281
+ const avgNeighbours = neighbourSum / peers.length;
282
+ const avgRoutes = routeSum / peers.length;
283
+ const lines = [];
284
+ lines.push("stream directstream-sim results");
285
+ lines.push(`- nodes: ${params.nodes}, degree: ${params.degree}`);
286
+ lines.push(`- messages: ${params.messages}, targets/message: ${params.targetsPerMessage}, redundancy: ${params.redundancy}`);
287
+ lines.push(`- dialer: ${params.dialer ? "on" : "off"}, pruner: ${params.pruner ? "on" : "off"} (interval=${params.prunerIntervalMs}ms, maxBuffer=${params.prunerMaxBufferBytes}B)`);
288
+ lines.push(`- transport: rxDelay=${params.streamRxDelayMs}ms, hwm=${params.streamHighWaterMarkBytes}B`);
289
+ lines.push(`- target deliveries attempted: ${delivered}`);
290
+ lines.push(`- connections: opened=${m.connectionsOpened}, closed=${m.connectionsClosed}, dials=${m.dials}`);
291
+ lines.push(`- connections now: ${connectionsNow} (avg neighbours/node=${avgNeighbours.toFixed(2)}, avg routes/node=${avgRoutes.toFixed(2)})`);
292
+ lines.push(`- protocol streams opened: ${m.streamsOpened}`);
293
+ lines.push(`- frames sent: total=${m.framesSent} (data=${m.dataFramesSent}, ack=${m.ackFramesSent}, goodbye=${m.goodbyeFramesSent}, other=${m.otherFramesSent})`);
294
+ lines.push(`- bytes sent: ${m.bytesSent}`);
295
+ console.log(lines.join("\n"));
296
+ await Promise.all(peers.map((p) => p.stream.stop()));
297
+ };
298
+ await main();
299
+ //# sourceMappingURL=directstream-sim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"directstream-sim.js","sourceRoot":"","sources":["../../benchmark/directstream-sim.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Benchmark entrypoint (wired to `pnpm -C packages/transport/stream run bench`).
3
+ *
4
+ * Examples:
5
+ * pnpm -C packages/transport/stream run bench -- directstream-sim --nodes 500 --degree 6
6
+ * pnpm -C packages/transport/stream run bench -- topology-sim --nodes 2000 --degree 4
7
+ * pnpm -C packages/transport/stream run bench -- transfer
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../benchmark/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Benchmark entrypoint (wired to `pnpm -C packages/transport/stream run bench`).
3
+ *
4
+ * Examples:
5
+ * pnpm -C packages/transport/stream run bench -- directstream-sim --nodes 500 --degree 6
6
+ * pnpm -C packages/transport/stream run bench -- topology-sim --nodes 2000 --degree 4
7
+ * pnpm -C packages/transport/stream run bench -- transfer
8
+ */
9
+ const argv = process.argv.slice(2);
10
+ const bench = argv[0] === "--" ? argv[1] : argv[0];
11
+ const usage = () => {
12
+ console.log([
13
+ "@peerbit/stream benchmarks",
14
+ "",
15
+ "Usage:",
16
+ " pnpm -C packages/transport/stream run bench -- <benchmark> [args]",
17
+ "",
18
+ "Benchmarks:",
19
+ " directstream-sim in-memory DirectStream network sim",
20
+ " topology-sim discrete-event topology/routing sim",
21
+ " transfer small real-libp2p throughput microbench",
22
+ "",
23
+ "Examples:",
24
+ " pnpm -C packages/transport/stream run bench -- directstream-sim --nodes 500 --degree 6",
25
+ " pnpm -C packages/transport/stream run bench -- topology-sim --nodes 2000 --degree 4",
26
+ " pnpm -C packages/transport/stream run bench -- transfer",
27
+ ].join("\n"));
28
+ };
29
+ if (!bench || bench === "--help" || bench === "-h") {
30
+ usage();
31
+ process.exit(1);
32
+ }
33
+ switch (bench) {
34
+ case "directstream-sim":
35
+ await import("./directstream-sim.js");
36
+ break;
37
+ case "topology-sim":
38
+ await import("./topology-sim.js");
39
+ break;
40
+ case "transfer":
41
+ await import("./transfer.js");
42
+ break;
43
+ default:
44
+ usage();
45
+ process.exit(1);
46
+ }
47
+ export {};
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../benchmark/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAEnD,MAAM,KAAK,GAAG,GAAG,EAAE;IAClB,OAAO,CAAC,GAAG,CACV;QACC,4BAA4B;QAC5B,EAAE;QACF,QAAQ;QACR,qEAAqE;QACrE,EAAE;QACF,aAAa;QACb,wDAAwD;QACxD,yDAAyD;QACzD,6DAA6D;QAC7D,EAAE;QACF,WAAW;QACX,0FAA0F;QAC1F,uFAAuF;QACvF,2DAA2D;KAC3D,CAAC,IAAI,CAAC,IAAI,CAAC,CACZ,CAAC;AACH,CAAC,CAAC;AAEF,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;IACpD,KAAK,EAAE,CAAC;IACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACjB,CAAC;AAED,QAAQ,KAAK,EAAE,CAAC;IACf,KAAK,kBAAkB;QACtB,MAAM,MAAM,CAAC,uBAAuB,CAAC,CAAC;QACtC,MAAM;IACP,KAAK,cAAc;QAClB,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAClC,MAAM;IACP,KAAK,UAAU;QACd,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;QAC9B,MAAM;IACP;QACC,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,12 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topology-sim.d.ts","sourceRoot":"","sources":["../../benchmark/topology-sim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}