@typeberry/lib 0.5.3-fb6e98a → 0.5.4-9233977
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/package.json +1 -1
- package/packages/core/networking/certificate.d.ts.map +1 -1
- package/packages/core/networking/certificate.js +1 -0
- package/packages/core/networking/package.json +1 -1
- package/packages/core/networking/setup.d.ts.map +1 -1
- package/packages/core/networking/setup.js +16 -12
- package/packages/core/telemetry/package.json +1 -1
- package/packages/extensions/ipc/jamnp/handler.d.ts +5 -4
- package/packages/extensions/ipc/jamnp/handler.d.ts.map +1 -1
- package/packages/extensions/ipc/jamnp/handler.js +59 -34
- package/packages/extensions/ipc/jamnp/stream.d.ts +6 -4
- package/packages/extensions/ipc/jamnp/stream.d.ts.map +1 -1
- package/packages/jam/block/work-package.d.ts +3 -1
- package/packages/jam/block/work-package.d.ts.map +1 -1
- package/packages/jam/block/work-package.js +6 -2
- package/packages/jam/block-json/block.d.ts +125 -0
- package/packages/jam/block-json/block.d.ts.map +1 -1
- package/packages/jam/block-json/block.js +9 -2
- package/packages/jam/fuzz-proto/v1/handler.d.ts +1 -1
- package/packages/jam/fuzz-proto/v1/handler.d.ts.map +1 -1
- package/packages/jam/fuzz-proto/v1/handler.js +43 -19
- package/packages/jam/jamnp-s/peers.d.ts.map +1 -1
- package/packages/jam/jamnp-s/peers.js +10 -0
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-128-block-request.js +10 -8
- package/packages/jam/jamnp-s/protocol/ce-129-state-request.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-129-state-request.js +11 -9
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +3 -3
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.js +2 -2
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +2 -2
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.js +2 -2
- package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.js +8 -6
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts +3 -3
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.js +2 -2
- package/packages/jam/jamnp-s/protocol/stream.d.ts +13 -7
- package/packages/jam/jamnp-s/protocol/stream.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/stream.js +5 -4
- package/packages/jam/jamnp-s/protocol/test-utils.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/test-utils.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/test-utils.js +9 -12
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts.map +1 -1
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.js +1 -1
- package/packages/jam/jamnp-s/stream-manager.d.ts.map +1 -1
- package/packages/jam/jamnp-s/stream-manager.js +7 -5
- package/packages/jam/jamnp-s/stream-manager.test.js +8 -5
- package/packages/jam/jamnp-s/tasks/sync.js +1 -1
- package/packages/jam/node/jam-config.d.ts +4 -1
- package/packages/jam/node/jam-config.d.ts.map +1 -1
- package/packages/jam/node/jam-config.js +6 -2
- package/packages/jam/node/main.d.ts.map +1 -1
- package/packages/jam/node/main.js +5 -4
- package/packages/jam/node/package.json +1 -1
- package/packages/jam/state-vectors/index.d.ts +377 -5
- package/packages/jam/state-vectors/index.d.ts.map +1 -1
- package/packages/jam/state-vectors/index.js +3 -3
- package/packages/jam/transition/reports/error.d.ts +3 -1
- package/packages/jam/transition/reports/error.d.ts.map +1 -1
- package/packages/jam/transition/reports/error.js +2 -0
- package/packages/jam/transition/reports/verify-basic.d.ts.map +1 -1
- package/packages/jam/transition/reports/verify-basic.js +10 -0
- package/packages/jam/transition/reports/verify-basic.test.js +29 -0
- package/packages/workers/block-authorship/main.d.ts.map +1 -1
- package/packages/workers/block-authorship/main.js +23 -4
- package/packages/workers/block-authorship/package.json +1 -1
- package/packages/workers/block-authorship/protocol.d.ts +3 -1
- package/packages/workers/block-authorship/protocol.d.ts.map +1 -1
- package/packages/workers/block-authorship/protocol.js +6 -3
- package/packages/workers/importer/importer.d.ts.map +1 -1
- package/packages/workers/importer/importer.js +0 -1
- package/packages/workers/importer/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"up-0-block-announcement.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/up-0-block-announcement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAE3G;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,6DAAqB,CAAC;AAE9C,qBAAa,WAAY,SAAQ,SAAS;aAWtB,IAAI,EAAE,UAAU;aAChB,IAAI,EAAE,QAAQ;IAXhC,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC;IAItD,OAAO;CAMR;AAED;;GAEG;AACH,qBAAa,SAAS;IAWlB,4BAA4B;aACZ,KAAK,EAAE,WAAW;IAClC,sEAAsE;aACtD,KAAK,EAAE,WAAW,EAAE;IAbtC,MAAM,CAAC,KAAK;;;;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC;IAItD,OAAO;CAMR;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,SAAS;IAWvC,sDAAsD;aACtC,MAAM,EAAE,MAAM;IAC9B,4BAA4B;aACZ,KAAK,EAAE,WAAW;IAbpC,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,YAAY,CAAC;IAI1D,OAAO;CAQR;AAID,qBAAa,OAAQ,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IAO7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAT9B,IAAI,8DAAe;IAEnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;IAClE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;gBAGpD,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,MAAM,SAAS,EAC7B,cAAc,EAAE,CAAC,
|
|
1
|
+
{"version":3,"file":"up-0-block-announcement.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/up-0-block-announcement.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,UAAU,EAAE,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAE3G;;;;;;GAMG;AACH,eAAO,MAAM,WAAW,6DAAqB,CAAC;AAE9C,qBAAa,WAAY,SAAQ,SAAS;aAWtB,IAAI,EAAE,UAAU;aAChB,IAAI,EAAE,QAAQ;IAXhC,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,WAAW,CAAC;IAItD,OAAO;CAMR;AAED;;GAEG;AACH,qBAAa,SAAS;IAWlB,4BAA4B;aACZ,KAAK,EAAE,WAAW;IAClC,sEAAsE;aACtD,KAAK,EAAE,WAAW,EAAE;IAbtC,MAAM,CAAC,KAAK;;;;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,SAAS,CAAC;IAItD,OAAO;CAMR;AAED;;;GAGG;AACH,qBAAa,YAAa,SAAQ,SAAS;IAWvC,sDAAsD;aACtC,MAAM,EAAE,MAAM;IAC9B,4BAA4B;aACZ,KAAK,EAAE,WAAW;IAbpC,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,WAAW,CAAC,YAAY,CAAC;IAI1D,OAAO;CAQR;AAID,qBAAa,OAAQ,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IAO7D,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,cAAc;IAC/B,OAAO,CAAC,QAAQ,CAAC,WAAW;IAT9B,IAAI,8DAAe;IAEnB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAuC;IAClE,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAqC;gBAGpD,IAAI,EAAE,SAAS,EACf,YAAY,EAAE,MAAM,SAAS,EAC7B,cAAc,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,KAAK,IAAI,EAC/D,WAAW,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,KAAK,IAAI;IAGlF,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAqBtE,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAKjC,aAAa,CAAC,MAAM,EAAE,mBAAmB;IAWzC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,EAAE,WAAW,EAAE,YAAY;CAUxE"}
|
|
@@ -119,7 +119,7 @@ export class Handler {
|
|
|
119
119
|
}
|
|
120
120
|
const handshake = this.getHandshake();
|
|
121
121
|
logger.trace `[${streamId}] <-- sending handshake`;
|
|
122
|
-
this.pendingHandshakes.set(
|
|
122
|
+
this.pendingHandshakes.set(streamId, true);
|
|
123
123
|
sender.bufferAndSend(Encoder.encodeObject(Handshake.Codec, handshake));
|
|
124
124
|
}
|
|
125
125
|
sendAnnouncement(sender, annoucement) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-manager.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/jamnp-s/stream-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,mBAAmB,EAEzB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"stream-manager.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/jamnp-s/stream-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAGL,KAAK,IAAI,EACT,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,mBAAmB,EAEzB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,QAAQ,EAEb,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAGzB,MAAM,sBAAsB,CAAC;AAK9B,qBAAa,aAAa;IACxB,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;IAC9E,mDAAmD;IACnD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6C;IAE9E,8DAA8D;IAC9D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAOV;IAEd,2DAA2D;IAC3D,OAAO,CAAC,QAAQ,CAAC,eAAe,CAA2C;IAE3E,uCAAuC;IACvC,wBAAwB,CAAC,GAAG,QAAQ,EAAE,aAAa,EAAE;IAMrD,uCAAuC;IACvC,wBAAwB,CAAC,GAAG,QAAQ,EAAE,aAAa,EAAE;IAMrD,yCAAyC;IACzC,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,GAAG,IAAI;IAIxC,gDAAgD;IAC1C,aAAa;IAMnB,4DAA4D;IAC5D,gBAAgB,CAAC,QAAQ,SAAS,aAAa,EAC7C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,KAAK,EAAE,GACxD,IAAI;IAWP,4DAA4D;IAC5D,aAAa,CAAC,QAAQ,SAAS,aAAa,EAC1C,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,YAAY,CAAC,QAAQ,CAAC,EAC5B,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,gBAAgB,KAAK,EAAE,GACxD,IAAI;IAcP,iCAAiC;IAC3B,gBAAgB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM;IA8BjD,OAAO,CAAC,cAAc;CA8CvB;AA4CD,cAAM,gBAAiB,YAAW,mBAAmB;aAMjC,QAAQ,EAAE,QAAQ;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IAP1B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,YAAY,CAAiD;IACrE,OAAO,CAAC,oBAAoB,CAA8B;gBAGxC,QAAQ,EAAE,QAAQ,EACjB,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,mBAAmB;IAG/C,iDAAiD;IACjD,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,UAAO,GAAG,OAAO;IAsChE,KAAK,IAAI,IAAI;IAab;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { BytesBlob } from "#@typeberry/bytes";
|
|
2
2
|
import { Logger } from "#@typeberry/logger";
|
|
3
3
|
import { encodeMessageLength, handleMessageFragmentation, StreamErrorKind, } from "#@typeberry/networking";
|
|
4
|
+
import { tryAsU32 } from "#@typeberry/numbers";
|
|
4
5
|
import { tryAsStreamId, tryAsStreamKind, } from "./protocol/stream.js";
|
|
5
6
|
import { handleAsyncErrors } from "./utils.js";
|
|
6
7
|
const logger = Logger.new(import.meta.filename, "stream");
|
|
@@ -85,13 +86,14 @@ export class StreamManager {
|
|
|
85
86
|
this.registerStream(peer, handler, stream, BytesBlob.blobFrom(bytes.raw.subarray(1)));
|
|
86
87
|
}
|
|
87
88
|
registerStream(peer, handler, stream, initialData) {
|
|
88
|
-
const
|
|
89
|
+
const quicStreamId = tryAsU32(stream.streamId);
|
|
90
|
+
const streamId = tryAsStreamId(`${peer.id}:${quicStreamId}`);
|
|
89
91
|
// NOTE: `onError` callback may be called multiple times.
|
|
90
92
|
const onError = (e, kind) => {
|
|
91
93
|
this.streams.delete(streamId);
|
|
92
94
|
this.backgroundTasks.delete(streamId);
|
|
93
95
|
if (kind === StreamErrorKind.Exception) {
|
|
94
|
-
logger.error `🚰 --- [${
|
|
96
|
+
logger.error `🚰 --- [${streamId}] Stream error: ${e}. Disconnecting peer.`;
|
|
95
97
|
}
|
|
96
98
|
if (kind !== StreamErrorKind.LocalClose) {
|
|
97
99
|
// whenever we have an error, we are going to inform the handler
|
|
@@ -125,10 +127,10 @@ async function readStreamForever(peer, handler, quicStream, initialData, reader)
|
|
|
125
127
|
let isDone = false;
|
|
126
128
|
const callback = handleMessageFragmentation((data) => {
|
|
127
129
|
const bytes = BytesBlob.blobFrom(new Uint8Array(data));
|
|
128
|
-
logger.trace `🚰 --> [${
|
|
130
|
+
logger.trace `🚰 --> [${quicStream.streamId}] ${bytes}`;
|
|
129
131
|
handler.onStreamMessage(quicStream, bytes);
|
|
130
132
|
}, () => {
|
|
131
|
-
logger.error `🚰 --> [${
|
|
133
|
+
logger.error `🚰 --> [${quicStream.streamId}] got too much data. Disconnecting.`;
|
|
132
134
|
peer.disconnect();
|
|
133
135
|
});
|
|
134
136
|
for (;;) {
|
|
@@ -137,7 +139,7 @@ async function readStreamForever(peer, handler, quicStream, initialData, reader)
|
|
|
137
139
|
// be a promise, so that we can make back pressure here.
|
|
138
140
|
callback(bytes.raw);
|
|
139
141
|
if (isDone) {
|
|
140
|
-
logger.log `🚰 --> [${
|
|
142
|
+
logger.log `🚰 --> [${quicStream.streamId}] remote finished.`;
|
|
141
143
|
return;
|
|
142
144
|
}
|
|
143
145
|
// await for more data
|
|
@@ -2,6 +2,7 @@ import assert from "node:assert";
|
|
|
2
2
|
import { describe, it } from "node:test";
|
|
3
3
|
import { createDisconnectedPeer, TestManualStream } from "#@typeberry/networking/testing.js";
|
|
4
4
|
import { OK } from "#@typeberry/utils";
|
|
5
|
+
import { tryAsStreamId, } from "./protocol/stream.js";
|
|
5
6
|
import { StreamManager } from "./stream-manager.js";
|
|
6
7
|
// Test StreamHandler implementation
|
|
7
8
|
class TestStreamHandler {
|
|
@@ -25,7 +26,7 @@ describe("StreamManager", () => {
|
|
|
25
26
|
describe("stream management", () => {
|
|
26
27
|
it("should return null for unknown stream ID", () => {
|
|
27
28
|
const manager = new StreamManager();
|
|
28
|
-
const peer = manager.getPeer(123);
|
|
29
|
+
const peer = manager.getPeer(tryAsStreamId("peer1:123"));
|
|
29
30
|
assert.strictEqual(peer, null);
|
|
30
31
|
});
|
|
31
32
|
it("should open new stream and call work function", async () => {
|
|
@@ -38,7 +39,7 @@ describe("StreamManager", () => {
|
|
|
38
39
|
manager.withNewStream(peer, 1, (h, sender) => {
|
|
39
40
|
workCalled = true;
|
|
40
41
|
assert.strictEqual(h, handler);
|
|
41
|
-
assert.strictEqual(typeof sender.streamId, "
|
|
42
|
+
assert.strictEqual(typeof sender.streamId, "string");
|
|
42
43
|
senderFlush = sender.flush();
|
|
43
44
|
return OK;
|
|
44
45
|
});
|
|
@@ -88,17 +89,19 @@ describe("StreamManager", () => {
|
|
|
88
89
|
describe("incoming streams", () => {
|
|
89
90
|
it("should handle incoming stream with valid kind", async () => {
|
|
90
91
|
const manager = new StreamManager();
|
|
91
|
-
const
|
|
92
|
+
const peerId = "peer1";
|
|
93
|
+
const peer = createDisconnectedPeer(peerId);
|
|
92
94
|
const handler = createTestHandler(1);
|
|
93
95
|
manager.registerIncomingHandlers(handler);
|
|
94
|
-
const
|
|
96
|
+
const quicStreamId = 42;
|
|
97
|
+
const stream = new TestManualStream(quicStreamId);
|
|
95
98
|
// Simulate incoming stream with kind byte
|
|
96
99
|
const kindData = new Uint8Array([1, 0x41, 0x42]); // kind=1, followed by some data
|
|
97
100
|
stream._simulateIncomingData(kindData);
|
|
98
101
|
stream._incomingData.close();
|
|
99
102
|
await manager.onIncomingStream(peer, stream);
|
|
100
103
|
// Check that peer is tracked
|
|
101
|
-
const retrievedPeer = manager.getPeer(
|
|
104
|
+
const retrievedPeer = manager.getPeer(tryAsStreamId(`${peerId}:${quicStreamId}`));
|
|
102
105
|
assert.strictEqual(retrievedPeer, peer);
|
|
103
106
|
});
|
|
104
107
|
it("should throw error for stream without kind byte", async () => {
|
|
@@ -48,7 +48,7 @@ export class SyncTask {
|
|
|
48
48
|
// server mode
|
|
49
49
|
streamManager.registerIncomingHandlers(up0Handler);
|
|
50
50
|
streamManager.registerIncomingHandlers(new ce128.ServerHandler(spec, (streamId, hash, direction, maxBlocks) => {
|
|
51
|
-
const peer =
|
|
51
|
+
const peer = streamManager.getPeer(streamId);
|
|
52
52
|
if (peer !== null) {
|
|
53
53
|
return syncTask.handleGetBlockSequence(peer, hash, direction, maxBlocks);
|
|
54
54
|
}
|
|
@@ -14,6 +14,8 @@ export declare const DEFAULT_DEV_CONFIG: {
|
|
|
14
14
|
export declare class JamConfig {
|
|
15
15
|
/** Whether we should be authoring blocks. */
|
|
16
16
|
readonly isAuthoring: boolean;
|
|
17
|
+
/** Fast forward mode - generate blocks as fast as possible without waiting for real time. */
|
|
18
|
+
readonly isFastForward: boolean;
|
|
17
19
|
/** Node name. */
|
|
18
20
|
readonly nodeName: string;
|
|
19
21
|
/** Node starting configuration. */
|
|
@@ -28,8 +30,9 @@ export declare class JamConfig {
|
|
|
28
30
|
readonly ancestry: [HeaderHash, TimeSlot][];
|
|
29
31
|
/** Validator index for dev mode authorship. Use "all" to author as all validators. */
|
|
30
32
|
readonly devValidatorIndex: U16 | "all" | null;
|
|
31
|
-
static new({ isAuthoring, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex, }: {
|
|
33
|
+
static new({ isAuthoring, isFastForward, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex, }: {
|
|
32
34
|
isAuthoring?: boolean;
|
|
35
|
+
isFastForward?: boolean;
|
|
33
36
|
nodeName: string;
|
|
34
37
|
nodeConfig: NodeConfiguration;
|
|
35
38
|
pvmBackend: PvmBackend;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jam-config.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/jam-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,EAGb,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;
|
|
1
|
+
{"version":3,"file":"jam-config.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/jam-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,EAGb,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IAqClB,6CAA6C;aAC7B,WAAW,EAAE,OAAO;IACpC,6FAA6F;aAC7E,aAAa,EAAE,OAAO;IACtC,iBAAiB;aACD,QAAQ,EAAE,MAAM;IAChC,mCAAmC;aACnB,IAAI,EAAE,iBAAiB;IACvC,4BAA4B;aACZ,UAAU,EAAE,UAAU;IACtC,wCAAwC;aACxB,GAAG,EAAE,SAAS,GAAG,IAAI;IACrC,0BAA0B;aACV,OAAO,EAAE,aAAa,GAAG,IAAI;IAC7C,iDAAiD;aACjC,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;IAClD,sFAAsF;aACtE,iBAAiB,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI;IArDvD,MAAM,CAAC,GAAG,CAAC,EACT,WAAW,EACX,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAgB,EAChB,aAAoB,EACpB,QAAa,EACb,iBAAwB,GACzB,EAAE;QACD,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,iBAAiB,CAAC;QAC9B,UAAU,EAAE,UAAU,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;QAC7B,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACrC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpC,sFAAsF;QACtF,iBAAiB,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;KACxC;IAcD,OAAO;CAoBR;AAED,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG;IAC1B,uCAAuC;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,oCAAoC;AACpC,MAAM,MAAM,SAAS,GAAG;IAGtB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,wCAAwC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG;IAC1B,2BAA2B;IAC3B,GAAG,EAAE,iBAAiB,CAAC;IACvB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB,CAAC"}
|
|
@@ -9,6 +9,7 @@ export const DEFAULT_DEV_CONFIG = {
|
|
|
9
9
|
*/
|
|
10
10
|
export class JamConfig {
|
|
11
11
|
isAuthoring;
|
|
12
|
+
isFastForward;
|
|
12
13
|
nodeName;
|
|
13
14
|
node;
|
|
14
15
|
pvmBackend;
|
|
@@ -16,12 +17,14 @@ export class JamConfig {
|
|
|
16
17
|
network;
|
|
17
18
|
ancestry;
|
|
18
19
|
devValidatorIndex;
|
|
19
|
-
static new({ isAuthoring, nodeName, nodeConfig, pvmBackend, devConfig = null, networkConfig = null, ancestry = [], devValidatorIndex = null, }) {
|
|
20
|
-
return new JamConfig(isAuthoring ?? false, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex);
|
|
20
|
+
static new({ isAuthoring, isFastForward, nodeName, nodeConfig, pvmBackend, devConfig = null, networkConfig = null, ancestry = [], devValidatorIndex = null, }) {
|
|
21
|
+
return new JamConfig(isAuthoring ?? false, isFastForward ?? false, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex);
|
|
21
22
|
}
|
|
22
23
|
constructor(
|
|
23
24
|
/** Whether we should be authoring blocks. */
|
|
24
25
|
isAuthoring,
|
|
26
|
+
/** Fast forward mode - generate blocks as fast as possible without waiting for real time. */
|
|
27
|
+
isFastForward,
|
|
25
28
|
/** Node name. */
|
|
26
29
|
nodeName,
|
|
27
30
|
/** Node starting configuration. */
|
|
@@ -37,6 +40,7 @@ export class JamConfig {
|
|
|
37
40
|
/** Validator index for dev mode authorship. Use "all" to author as all validators. */
|
|
38
41
|
devValidatorIndex) {
|
|
39
42
|
this.isAuthoring = isAuthoring;
|
|
43
|
+
this.isFastForward = isFastForward;
|
|
40
44
|
this.nodeName = nodeName;
|
|
41
45
|
this.node = node;
|
|
42
46
|
this.pvmBackend = pvmBackend;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAe/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAkC,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1E,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAYhE,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChE,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAsB,IAAI,CACxB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,OAAO,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAe/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAkC,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1E,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAYhE,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChE,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAsB,IAAI,CACxB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,OAAO,CAAC,OAAO,CAAC,CAuJlB"}
|
|
@@ -92,7 +92,7 @@ export async function main(config, withRelPath, telemetry) {
|
|
|
92
92
|
},
|
|
93
93
|
],
|
|
94
94
|
};
|
|
95
|
-
const closeAuthorship = await initAuthorship(importer, config.isAuthoring, rootDb, baseConfig, authorshipKeys, isInMemory);
|
|
95
|
+
const closeAuthorship = await initAuthorship(importer, config.isAuthoring, config.isFastForward, rootDb, baseConfig, authorshipKeys, isInMemory);
|
|
96
96
|
// Networking initialization
|
|
97
97
|
const closeNetwork = await initNetwork(importer, rootDb, baseConfig, genesisHeaderHash, config.network, bestHeader, isInMemory);
|
|
98
98
|
const api = {
|
|
@@ -128,22 +128,23 @@ export async function main(config, withRelPath, telemetry) {
|
|
|
128
128
|
};
|
|
129
129
|
return api;
|
|
130
130
|
}
|
|
131
|
-
const initAuthorship = async (importer, isAuthoring, rootDb, baseConfig, authorshipKeys, isInMemory) => {
|
|
131
|
+
const initAuthorship = async (importer, isAuthoring, isFastForward, rootDb, baseConfig, authorshipKeys, isInMemory) => {
|
|
132
132
|
if (!isAuthoring) {
|
|
133
133
|
logger.log `✍️ Authorship off: disabled`;
|
|
134
134
|
return () => Promise.resolve();
|
|
135
135
|
}
|
|
136
136
|
logger.info `✍️ Starting block generator.`;
|
|
137
|
+
const workerParams = { ...authorshipKeys, isFastForward };
|
|
137
138
|
const { generator, finish } = isInMemory
|
|
138
139
|
? await startBlockGenerator(DirectWorkerConfig.new({
|
|
139
140
|
...baseConfig,
|
|
140
141
|
blocksDb: rootDb.getBlocksDb(),
|
|
141
142
|
statesDb: rootDb.getStatesDb(),
|
|
142
|
-
workerParams
|
|
143
|
+
workerParams,
|
|
143
144
|
}))
|
|
144
145
|
: await spawnBlockGeneratorWorker(LmdbWorkerConfig.new({
|
|
145
146
|
...baseConfig,
|
|
146
|
-
workerParams
|
|
147
|
+
workerParams,
|
|
147
148
|
}));
|
|
148
149
|
// relay blocks from generator to importer
|
|
149
150
|
generator.setOnBlock(async (block) => {
|