@typeberry/lib 0.5.2 → 0.5.3-5a6cfcc
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 +9 -5
- package/packages/core/collections/blob-dictionary.d.ts.map +1 -1
- package/packages/core/collections/blob-dictionary.js +3 -3
- package/packages/core/crypto/bandersnatch.d.ts +2 -1
- package/packages/core/crypto/bandersnatch.d.ts.map +1 -1
- package/packages/core/crypto/bandersnatch.js +9 -2
- package/packages/core/crypto/key-derivation.test.js +8 -7
- package/packages/core/hash/hash.d.ts.map +1 -1
- package/packages/core/hash/hash.js +1 -0
- 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/numbers/index.d.ts +4 -0
- package/packages/core/numbers/index.d.ts.map +1 -1
- package/packages/core/numbers/index.js +4 -4
- package/packages/core/pvm-host-calls/bin.js +6 -6
- package/packages/core/pvm-host-calls/ecalli-io-tracker.d.ts +32 -0
- package/packages/core/pvm-host-calls/ecalli-io-tracker.d.ts.map +1 -0
- package/packages/core/pvm-host-calls/ecalli-io-tracker.js +14 -0
- package/packages/core/pvm-host-calls/ecalli-trace-logger.d.ts +139 -0
- package/packages/core/pvm-host-calls/ecalli-trace-logger.d.ts.map +1 -0
- package/packages/core/pvm-host-calls/ecalli-trace-logger.js +209 -0
- package/packages/core/pvm-host-calls/ecalli-trace-logger.test.d.ts +2 -0
- package/packages/core/pvm-host-calls/ecalli-trace-logger.test.d.ts.map +1 -0
- package/packages/core/pvm-host-calls/ecalli-trace-logger.test.js +231 -0
- package/packages/core/pvm-host-calls/host-call-memory.d.ts +2 -0
- package/packages/core/pvm-host-calls/host-call-memory.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/host-call-memory.js +12 -2
- package/packages/core/pvm-host-calls/host-call-registers.d.ts +6 -0
- package/packages/core/pvm-host-calls/host-call-registers.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/host-call-registers.js +24 -0
- package/packages/core/pvm-host-calls/host-calls-executor.d.ts +37 -0
- package/packages/core/pvm-host-calls/host-calls-executor.d.ts.map +1 -0
- package/packages/core/pvm-host-calls/host-calls-executor.js +129 -0
- package/packages/core/pvm-host-calls/host-calls.d.ts +20 -26
- package/packages/core/pvm-host-calls/host-calls.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/host-calls.js +40 -112
- package/packages/core/pvm-host-calls/index.d.ts +7 -6
- package/packages/core/pvm-host-calls/index.d.ts.map +1 -1
- package/packages/core/pvm-host-calls/index.js +7 -6
- package/packages/core/pvm-host-calls/{interpreter-instance-manager.d.ts → pvm-instance-manager.d.ts} +3 -3
- package/packages/core/pvm-host-calls/pvm-instance-manager.d.ts.map +1 -0
- package/packages/core/pvm-host-calls/{interpreter-instance-manager.js → pvm-instance-manager.js} +2 -2
- package/packages/core/pvm-interpreter/ops/math-consts.d.ts +2 -3
- package/packages/core/pvm-interpreter/ops/math-consts.d.ts.map +1 -1
- package/packages/core/pvm-interpreter/ops/math-consts.js +2 -3
- package/packages/core/pvm-interpreter/ops/math-ops.js +3 -3
- package/packages/core/pvm-interpreter/ops/math-utils.js +13 -13
- package/packages/core/pvm-interpreter/ops/math-utils.test.js +17 -16
- 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-item.d.ts +13 -4
- package/packages/jam/block/work-item.d.ts.map +1 -1
- package/packages/jam/block/work-result.d.ts +3 -5
- package/packages/jam/block/work-result.d.ts.map +1 -1
- package/packages/jam/block/work-result.js +6 -0
- package/packages/jam/block-json/work-result.d.ts.map +1 -1
- package/packages/jam/block-json/work-result.js +6 -6
- package/packages/jam/database-lmdb/states.test.js +4 -3
- package/packages/jam/executor/index.d.ts +4 -0
- package/packages/jam/executor/index.d.ts.map +1 -0
- package/packages/jam/executor/index.js +2 -0
- package/packages/jam/{transition/accumulate → executor}/pvm-executor.d.ts +19 -16
- package/packages/jam/executor/pvm-executor.d.ts.map +1 -0
- package/packages/jam/{transition/accumulate → executor}/pvm-executor.js +48 -5
- package/packages/jam/in-core/externalities/refine.d.ts +24 -0
- package/packages/jam/in-core/externalities/refine.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/refine.js +36 -0
- package/packages/jam/in-core/in-core.d.ts +60 -0
- package/packages/jam/in-core/in-core.d.ts.map +1 -0
- package/packages/jam/in-core/in-core.js +294 -0
- package/packages/jam/in-core/in-core.test.d.ts +2 -0
- package/packages/jam/in-core/in-core.test.d.ts.map +1 -0
- package/packages/jam/in-core/in-core.test.js +81 -0
- package/packages/jam/in-core/index.d.ts +2 -0
- package/packages/jam/in-core/index.d.ts.map +1 -0
- package/packages/jam/in-core/index.js +1 -0
- package/packages/jam/jam-host-calls/accumulate/bless.test.js +4 -5
- 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 +5 -5
- 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/ce-135-work-report-distribution.test.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-importer.d.ts.map +1 -1
- package/packages/jam/node/main-importer.js +3 -1
- 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/rpc-validation/types.d.ts +7 -3
- package/packages/jam/rpc-validation/types.d.ts.map +1 -1
- package/packages/jam/rpc-validation/validation.d.ts +254 -36
- package/packages/jam/rpc-validation/validation.d.ts.map +1 -1
- package/packages/jam/rpc-validation/validation.js +20 -2
- package/packages/jam/safrole/bandersnatch-vrf.d.ts +2 -0
- package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
- package/packages/jam/safrole/bandersnatch-vrf.js +11 -0
- package/packages/jam/safrole/bandersnatch-vrf.test.js +3 -3
- package/packages/jam/safrole/bandersnatch-wasm.d.ts +1 -0
- package/packages/jam/safrole/bandersnatch-wasm.d.ts.map +1 -1
- package/packages/jam/safrole/bandersnatch-wasm.js +8 -5
- package/packages/jam/safrole/safrole-seal.d.ts +1 -3
- package/packages/jam/safrole/safrole-seal.d.ts.map +1 -1
- package/packages/jam/safrole/safrole-seal.js +14 -25
- package/packages/jam/safrole/safrole-seal.test.js +4 -10
- package/packages/jam/state/in-memory-state.d.ts.map +1 -1
- package/packages/jam/state/in-memory-state.js +2 -3
- package/packages/jam/state/test.utils.d.ts.map +1 -1
- package/packages/jam/state/test.utils.js +2 -3
- package/packages/jam/transition/accumulate/accumulate-data.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate-data.js +1 -2
- package/packages/jam/transition/accumulate/accumulate-queue.test.js +2 -2
- package/packages/jam/transition/accumulate/accumulate-utils.test.js +2 -2
- package/packages/jam/transition/accumulate/accumulate.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulate.js +8 -13
- package/packages/jam/transition/accumulate/accumulate.test.js +2 -2
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +1 -2
- package/packages/jam/transition/accumulate/accumulation-result-merge-utils.test.js +1 -2
- package/packages/jam/transition/accumulate/deferred-transfers.d.ts +1 -1
- package/packages/jam/transition/accumulate/deferred-transfers.d.ts.map +1 -1
- package/packages/jam/transition/accumulate/deferred-transfers.js +6 -7
- package/packages/jam/transition/disputes/disputes.d.ts.map +1 -1
- package/packages/jam/transition/disputes/disputes.js +5 -4
- package/packages/jam/transition/disputes/disputes.test.data2.js +2 -2
- package/packages/jam/transition/externalities/fetch-externalities.d.ts +7 -1
- package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/fetch-externalities.js +4 -0
- package/packages/jam/transition/externalities/fetch-externalities.test.js +2 -2
- package/packages/jam/transition/hasher.test.js +2 -2
- package/packages/jam/transition/reports/test.utils.d.ts.map +1 -1
- package/packages/jam/transition/reports/test.utils.js +2 -2
- 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/package.json +1 -1
- package/packages/core/pvm-host-calls/host-calls-manager.d.ts +0 -23
- package/packages/core/pvm-host-calls/host-calls-manager.d.ts.map +0 -1
- package/packages/core/pvm-host-calls/host-calls-manager.js +0 -44
- package/packages/core/pvm-host-calls/interpreter-instance-manager.d.ts.map +0 -1
- package/packages/jam/transition/accumulate/pvm-executor.d.ts.map +0 -1
|
@@ -82,37 +82,39 @@ export class Handler {
|
|
|
82
82
|
}
|
|
83
83
|
}
|
|
84
84
|
onStreamMessage(sender, message) {
|
|
85
|
+
const { streamId } = sender;
|
|
85
86
|
if (this.isServer) {
|
|
86
|
-
logger.info `[${
|
|
87
|
+
logger.info `[${streamId}][server]: Received request.`;
|
|
87
88
|
if (this.getBoundaryNodes === undefined || this.getKeyValuePairs === undefined) {
|
|
88
89
|
return;
|
|
89
90
|
}
|
|
90
91
|
const request = Decoder.decodeObject(StateRequest.Codec, message);
|
|
91
92
|
const boundaryNodes = this.getBoundaryNodes(request.headerHash, request.startKey, request.endKey);
|
|
92
93
|
const keyValuePairs = this.getKeyValuePairs(request.headerHash, request.startKey, request.endKey);
|
|
93
|
-
logger.info `[${
|
|
94
|
+
logger.info `[${streamId}][server]: <-- responding with boundary nodes and key value pairs.`;
|
|
94
95
|
sender.bufferAndSend(Encoder.encodeObject(codec.sequenceVarLen(trieNodeCodec), boundaryNodes));
|
|
95
96
|
sender.bufferAndSend(Encoder.encodeObject(StateResponse.Codec, StateResponse.create({ keyValuePairs })));
|
|
96
97
|
sender.close();
|
|
97
98
|
return;
|
|
98
99
|
}
|
|
99
|
-
if (!this.boundaryNodes.has(
|
|
100
|
-
this.boundaryNodes.set(
|
|
101
|
-
logger.info `[${
|
|
100
|
+
if (!this.boundaryNodes.has(streamId)) {
|
|
101
|
+
this.boundaryNodes.set(streamId, Decoder.decodeObject(codec.sequenceVarLen(trieNodeCodec), message));
|
|
102
|
+
logger.info `[${streamId}][client]: Received boundary nodes.`;
|
|
102
103
|
return;
|
|
103
104
|
}
|
|
104
|
-
this.onResponse.get(
|
|
105
|
-
logger.info `[${
|
|
105
|
+
this.onResponse.get(streamId)?.(Decoder.decodeObject(StateResponse.Codec, message));
|
|
106
|
+
logger.info `[${streamId}][client]: Received state values.`;
|
|
106
107
|
}
|
|
107
108
|
onClose(streamId) {
|
|
108
109
|
this.boundaryNodes.delete(streamId);
|
|
109
110
|
this.onResponse.delete(streamId);
|
|
110
111
|
}
|
|
111
112
|
getStateByKey(sender, headerHash, startKey, onResponse) {
|
|
112
|
-
|
|
113
|
+
const { streamId } = sender;
|
|
114
|
+
if (this.onResponse.has(streamId)) {
|
|
113
115
|
throw new Error("It is disallowed to use the same stream for multiple requests.");
|
|
114
116
|
}
|
|
115
|
-
this.onResponse.set(
|
|
117
|
+
this.onResponse.set(streamId, onResponse);
|
|
116
118
|
sender.bufferAndSend(Encoder.encodeObject(StateRequest.Codec, StateRequest.create({ headerHash, startKey, endKey: startKey, maximumSize: tryAsU32(4096) })));
|
|
117
119
|
sender.close();
|
|
118
120
|
}
|
|
@@ -3,7 +3,7 @@ import { SignedTicket } from "#@typeberry/block/tickets.js";
|
|
|
3
3
|
import type { BytesBlob } from "#@typeberry/bytes";
|
|
4
4
|
import { type CodecRecord } from "#@typeberry/codec";
|
|
5
5
|
import { WithDebug } from "#@typeberry/utils";
|
|
6
|
-
import { type StreamHandler, type StreamMessageSender } from "./stream.js";
|
|
6
|
+
import { type StreamHandler, type StreamId, type StreamMessageSender } from "./stream.js";
|
|
7
7
|
/**
|
|
8
8
|
* JAM-SNP CE-131 and CE-132 streams.
|
|
9
9
|
*
|
|
@@ -32,13 +32,13 @@ export declare class ServerHandler<T extends STREAM_KIND> implements StreamHandl
|
|
|
32
32
|
private readonly onTicketReceived;
|
|
33
33
|
constructor(kind: T, onTicketReceived: (epochIndex: Epoch, ticket: SignedTicket) => void);
|
|
34
34
|
onStreamMessage(sender: StreamMessageSender, message: BytesBlob): void;
|
|
35
|
-
onClose(): void;
|
|
35
|
+
onClose(_streamId: StreamId): void;
|
|
36
36
|
}
|
|
37
37
|
export declare class ClientHandler<T extends STREAM_KIND> implements StreamHandler<T> {
|
|
38
38
|
readonly kind: T;
|
|
39
39
|
constructor(kind: T);
|
|
40
40
|
onStreamMessage(sender: StreamMessageSender): void;
|
|
41
|
-
onClose(): void;
|
|
41
|
+
onClose(_streamId: StreamId): void;
|
|
42
42
|
sendTicket(sender: StreamMessageSender, epochIndex: Epoch, ticket: SignedTicket): void;
|
|
43
43
|
}
|
|
44
44
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ce-131-ce-132-safrole-ticket-distribution.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ce-131-ce-132-safrole-ticket-distribution.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAE7E,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAE3G;;;;;;GAMG;AAEH,eAAO,MAAM,8BAA8B,+DAAuB,CAAC;AACnE,eAAO,MAAM,wBAAwB,+DAAuB,CAAC;AAE7D,KAAK,WAAW,GAAG,OAAO,8BAA8B,GAAG,OAAO,wBAAwB,CAAC;AAE3F,qBAAa,yBAA0B,SAAQ,SAAS;aAWpC,UAAU,EAAE,KAAK;aACjB,MAAM,EAAE,YAAY;IAXtC,MAAM,CAAC,KAAK;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,WAAW,CAAC,yBAAyB,CAAC;IAI5E,OAAO;CAMR;AAID,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;aAEzD,IAAI,EAAE,CAAC;IACvB,OAAO,CAAC,QAAQ,CAAC,gBAAgB;gBADjB,IAAI,EAAE,CAAC,EACN,gBAAgB,EAAE,CAAC,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,KAAK,IAAI;IAGtF,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAOtE,OAAO,CAAC,SAAS,EAAE,QAAQ;CAC5B;AAED,qBAAa,aAAa,CAAC,CAAC,SAAS,WAAW,CAAE,YAAW,aAAa,CAAC,CAAC,CAAC;aAC/C,IAAI,EAAE,CAAC;gBAAP,IAAI,EAAE,CAAC;IAEnC,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAKlD,OAAO,CAAC,SAAS,EAAE,QAAQ;IAE3B,UAAU,CAAC,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY;CAKhF"}
|
|
@@ -42,7 +42,7 @@ export class ServerHandler {
|
|
|
42
42
|
this.onTicketReceived(ticketDistribution.epochIndex, ticketDistribution.ticket);
|
|
43
43
|
sender.close();
|
|
44
44
|
}
|
|
45
|
-
onClose() { }
|
|
45
|
+
onClose(_streamId) { }
|
|
46
46
|
}
|
|
47
47
|
export class ClientHandler {
|
|
48
48
|
kind;
|
|
@@ -53,7 +53,7 @@ export class ClientHandler {
|
|
|
53
53
|
logger.warn `[${sender.streamId}][ce-${this.kind}] Unexpected message received. Closing.`;
|
|
54
54
|
sender.close();
|
|
55
55
|
}
|
|
56
|
-
onClose() { }
|
|
56
|
+
onClose(_streamId) { }
|
|
57
57
|
sendTicket(sender, epochIndex, ticket) {
|
|
58
58
|
const request = TicketDistributionRequest.create({ epochIndex, ticket });
|
|
59
59
|
sender.bufferAndSend(Encoder.encodeObject(TicketDistributionRequest.Codec, request));
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CoreIndex } from "#@typeberry/block";
|
|
2
|
-
import { type
|
|
2
|
+
import { type WorkPackageExtrinsics } from "#@typeberry/block/work-item.js";
|
|
3
3
|
import { WorkPackage } from "#@typeberry/block/work-package.js";
|
|
4
4
|
import type { BytesBlob } from "#@typeberry/bytes";
|
|
5
5
|
import { type CodecRecord } from "#@typeberry/codec";
|
|
@@ -55,15 +55,15 @@ export declare class CoreWorkPackage extends WithDebug {
|
|
|
55
55
|
export declare class ServerHandler implements StreamHandler<typeof STREAM_KIND> {
|
|
56
56
|
private readonly onWorkPackage;
|
|
57
57
|
kind: 133 & import("@typeberry/numbers").WithBytesRepresentation<1>;
|
|
58
|
-
constructor(onWorkPackage: (i: CoreIndex, w: WorkPackage, e:
|
|
59
|
-
readonly workPackages: Map<import("@typeberry/
|
|
58
|
+
constructor(onWorkPackage: (i: CoreIndex, w: WorkPackage, e: WorkPackageExtrinsics) => void);
|
|
59
|
+
readonly workPackages: Map<string & import("@typeberry/utils").WithOpaque<"streamId">, CoreWorkPackage>;
|
|
60
60
|
onStreamMessage(sender: StreamMessageSender, message: BytesBlob): void;
|
|
61
61
|
onClose(streamId: StreamId): void;
|
|
62
62
|
}
|
|
63
63
|
export declare class ClientHandler implements StreamHandler<typeof STREAM_KIND> {
|
|
64
64
|
kind: 133 & import("@typeberry/numbers").WithBytesRepresentation<1>;
|
|
65
65
|
onStreamMessage(sender: StreamMessageSender): void;
|
|
66
|
-
onClose(): void;
|
|
67
|
-
sendWorkPackage(sender: StreamMessageSender, coreIndex: CoreIndex, workPackage: WorkPackage, extrinsic:
|
|
66
|
+
onClose(_streamId: StreamId): void;
|
|
67
|
+
sendWorkPackage(sender: StreamMessageSender, coreIndex: CoreIndex, workPackage: WorkPackage, extrinsic: WorkPackageExtrinsics): void;
|
|
68
68
|
}
|
|
69
69
|
//# sourceMappingURL=ce-133-work-package-submission.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ce-133-work-package-submission.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-133-work-package-submission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,
|
|
1
|
+
{"version":3,"file":"ce-133-work-package-submission.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-133-work-package-submission.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,qBAAqB,EAA2B,MAAM,+BAA+B,CAAC;AACpG,OAAO,EAAE,WAAW,EAAE,MAAM,kCAAkC,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAE7E,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,+DAAuB,CAAC;AAEhD,qBAAa,eAAgB,SAAQ,SAAS;aAW1B,SAAS,EAAE,SAAS;aACpB,WAAW,EAAE,WAAW;IAX1C,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,WAAW,CAAC,eAAe,CAAC;IAItE,OAAO;CAMR;AAID,qBAAa,aAAc,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IAGzD,OAAO,CAAC,QAAQ,CAAC,aAAa;IAF1C,IAAI,gEAAe;gBAEU,aAAa,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,qBAAqB,KAAK,IAAI;IAE5G,SAAgB,YAAY,mFAAwC;IAEpE,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAiBtE,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAGlC;AAED,qBAAa,aAAc,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IACrE,IAAI,gEAAe;IAEnB,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAKlD,OAAO,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI;IAElC,eAAe,CACb,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,qBAAqB;CAUnC"}
|
|
@@ -37,7 +37,7 @@ export class ServerHandler {
|
|
|
37
37
|
}
|
|
38
38
|
workPackages = new Map();
|
|
39
39
|
onStreamMessage(sender, message) {
|
|
40
|
-
const streamId = sender
|
|
40
|
+
const { streamId } = sender;
|
|
41
41
|
// initially we expect the `CoreWorkPackage`
|
|
42
42
|
const workPackage = this.workPackages.get(streamId);
|
|
43
43
|
if (workPackage === undefined) {
|
|
@@ -62,7 +62,7 @@ export class ClientHandler {
|
|
|
62
62
|
logger.warn `[${sender.streamId}] Got unexpected message on CE-133 stream. Closing.`;
|
|
63
63
|
sender.close();
|
|
64
64
|
}
|
|
65
|
-
onClose() { }
|
|
65
|
+
onClose(_streamId) { }
|
|
66
66
|
sendWorkPackage(sender, coreIndex, workPackage, extrinsic) {
|
|
67
67
|
const corePack = CoreWorkPackage.create({ coreIndex, workPackage });
|
|
68
68
|
logger.trace `[${sender.streamId}] Sending work package: ${corePack}`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ce-134-work-package-sharing.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAE3G;;;;;;GAMG;AAIH,KAAK,iBAAiB,GAAG,SAAS,CAAC;AAGnC,eAAO,MAAM,WAAW,+DAAuB,CAAC;AAEhD,qBAAa,yBAA0B,SAAQ,SAAS;aAWpC,SAAS,EAAE,SAAS;aACpB,oBAAoB,EAAE,eAAe,EAAE;IAXzD,MAAM,CAAC,KAAK;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,yBAAyB,CAAC;IAIzF,OAAO;CAMR;AAED,qBAAa,0BAA2B,SAAQ,SAAS;aAWrC,cAAc,EAAE,cAAc;aAC9B,SAAS,EAAE,gBAAgB;IAX7C,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,WAAW,CAAC,0BAA0B,CAAC;IAIpF,OAAO;CAMR;AAID,qBAAa,aAAc,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IAInE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAHhC,IAAI,gEAAe;gBAGA,aAAa,EAAE,CAC9B,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,eAAe,EAAE,EACvC,iBAAiB,EAAE,iBAAiB,KACjC,OAAO,CAAC;QAAE,cAAc,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAG/E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;IAE9E,OAAO,CAAC,MAAM,CAAC,cAAc;IAU7B,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAsBtE,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAGlC;AAED,qBAAa,aAAc,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IACrE,IAAI,gEAAe;IACnB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAM5B;IAEJ,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"ce-134-work-package-sharing.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-134-work-package-sharing.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAA2B,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAE3G;;;;;;GAMG;AAIH,KAAK,iBAAiB,GAAG,SAAS,CAAC;AAGnC,eAAO,MAAM,WAAW,+DAAuB,CAAC;AAEhD,qBAAa,yBAA0B,SAAQ,SAAS;aAWpC,SAAS,EAAE,SAAS;aACpB,oBAAoB,EAAE,eAAe,EAAE;IAXzD,MAAM,CAAC,KAAK;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,oBAAoB,EAAE,EAAE,WAAW,CAAC,yBAAyB,CAAC;IAIzF,OAAO;CAMR;AAED,qBAAa,0BAA2B,SAAQ,SAAS;aAWrC,cAAc,EAAE,cAAc;aAC9B,SAAS,EAAE,gBAAgB;IAX7C,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,SAAS,EAAE,EAAE,WAAW,CAAC,0BAA0B,CAAC;IAIpF,OAAO;CAMR;AAID,qBAAa,aAAc,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IAInE,OAAO,CAAC,QAAQ,CAAC,aAAa;IAHhC,IAAI,gEAAe;gBAGA,aAAa,EAAE,CAC9B,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,eAAe,EAAE,EACvC,iBAAiB,EAAE,iBAAiB,KACjC,OAAO,CAAC;QAAE,cAAc,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC;IAG/E,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAkD;IAE9E,OAAO,CAAC,MAAM,CAAC,cAAc;IAU7B,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAsBtE,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;CAGlC;AAED,qBAAa,aAAc,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IACrE,IAAI,gEAAe;IACnB,OAAO,CAAC,QAAQ,CAAC,eAAe,CAM5B;IAEJ,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAatE,OAAO,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI;IAQ3B,eAAe,CACnB,MAAM,EAAE,mBAAmB,EAC3B,SAAS,EAAE,SAAS,EACpB,oBAAoB,EAAE,eAAe,EAAE,EACvC,iBAAiB,EAAE,iBAAiB,GACnC,OAAO,CAAC;QAAE,cAAc,EAAE,cAAc,CAAC;QAAC,SAAS,EAAE,gBAAgB,CAAA;KAAE,CAAC;CAY5E"}
|
|
@@ -53,7 +53,7 @@ export class ServerHandler {
|
|
|
53
53
|
sender.close();
|
|
54
54
|
}
|
|
55
55
|
onStreamMessage(sender, message) {
|
|
56
|
-
const streamId = sender
|
|
56
|
+
const { streamId } = sender;
|
|
57
57
|
const request = this.requestsMap.get(streamId);
|
|
58
58
|
if (request === undefined) {
|
|
59
59
|
const receivedRequest = Decoder.decodeObject(WorkPackageSharingRequest.Codec, message);
|
|
@@ -78,12 +78,13 @@ export class ClientHandler {
|
|
|
78
78
|
kind = STREAM_KIND;
|
|
79
79
|
pendingRequests = new Map();
|
|
80
80
|
onStreamMessage(sender, message) {
|
|
81
|
-
const
|
|
81
|
+
const { streamId } = sender;
|
|
82
|
+
const pendingRequest = this.pendingRequests.get(streamId);
|
|
82
83
|
if (pendingRequest === undefined) {
|
|
83
84
|
throw new Error("Unexpected message received.");
|
|
84
85
|
}
|
|
85
86
|
const response = Decoder.decodeObject(WorkPackageSharingResponse.Codec, message);
|
|
86
|
-
logger.info `[${
|
|
87
|
+
logger.info `[${streamId}] Received work report hash and signature.`;
|
|
87
88
|
pendingRequest.resolve({ workReportHash: response.workReportHash, signature: response.signature });
|
|
88
89
|
sender.close();
|
|
89
90
|
}
|
|
@@ -95,13 +96,14 @@ export class ClientHandler {
|
|
|
95
96
|
}
|
|
96
97
|
}
|
|
97
98
|
async sendWorkPackage(sender, coreIndex, segmentsRootMappings, workPackageBundle) {
|
|
99
|
+
const { streamId } = sender;
|
|
98
100
|
const request = WorkPackageSharingRequest.create({ coreIndex, segmentsRootMappings });
|
|
99
|
-
logger.trace `[${
|
|
101
|
+
logger.trace `[${streamId}] Sending core index and segments-root mappings.`;
|
|
100
102
|
sender.bufferAndSend(Encoder.encodeObject(WorkPackageSharingRequest.Codec, request));
|
|
101
|
-
logger.trace `[${
|
|
103
|
+
logger.trace `[${streamId}] Sending work package bundle.`;
|
|
102
104
|
sender.bufferAndSend(Encoder.encodeObject(WorkPackageBundleCodec, workPackageBundle));
|
|
103
105
|
return new Promise((resolve, reject) => {
|
|
104
|
-
this.pendingRequests.set(
|
|
106
|
+
this.pendingRequests.set(streamId, { resolve, reject });
|
|
105
107
|
});
|
|
106
108
|
}
|
|
107
109
|
}
|
|
@@ -6,7 +6,7 @@ import { type CodecRecord } from "#@typeberry/codec";
|
|
|
6
6
|
import type { KnownSizeArray } from "#@typeberry/collections";
|
|
7
7
|
import type { ChainSpec } from "#@typeberry/config";
|
|
8
8
|
import { WithDebug } from "#@typeberry/utils";
|
|
9
|
-
import { type StreamHandler, type StreamMessageSender } from "./stream.js";
|
|
9
|
+
import { type StreamHandler, type StreamId, type StreamMessageSender } from "./stream.js";
|
|
10
10
|
/**
|
|
11
11
|
* JAMNP-S CE 135 Stream
|
|
12
12
|
*
|
|
@@ -89,14 +89,14 @@ export declare class ServerHandler implements StreamHandler<typeof STREAM_KIND>
|
|
|
89
89
|
kind: 135 & import("@typeberry/numbers").WithBytesRepresentation<1>;
|
|
90
90
|
constructor(chainSpec: ChainSpec, onWorkReport: (workReport: GuaranteedWorkReport) => void);
|
|
91
91
|
onStreamMessage(sender: StreamMessageSender, message: BytesBlob): void;
|
|
92
|
-
onClose(): void;
|
|
92
|
+
onClose(_streamId: StreamId): void;
|
|
93
93
|
}
|
|
94
94
|
export declare class ClientHandler implements StreamHandler<typeof STREAM_KIND> {
|
|
95
95
|
private readonly chainSpec;
|
|
96
96
|
kind: 135 & import("@typeberry/numbers").WithBytesRepresentation<1>;
|
|
97
97
|
constructor(chainSpec: ChainSpec);
|
|
98
98
|
onStreamMessage(sender: StreamMessageSender): void;
|
|
99
|
-
onClose(): void;
|
|
99
|
+
onClose(_streamId: StreamId): void;
|
|
100
100
|
sendWorkReport(sender: StreamMessageSender, workReport: GuaranteedWorkReport): void;
|
|
101
101
|
}
|
|
102
102
|
//# sourceMappingURL=ce-135-work-report-distribution.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ce-135-work-report-distribution.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ce-135-work-report-distribution.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/ce-135-work-report-distribution.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,KAAK,WAAW,EAA2B,MAAM,kBAAkB,CAAC;AAC7E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,KAAK,aAAa,EAAE,KAAK,QAAQ,EAAE,KAAK,mBAAmB,EAAmB,MAAM,aAAa,CAAC;AAE3G;;;;;;GAMG;AAEH,eAAO,MAAM,WAAW,+DAAuB,CAAC;AAEhD,qBAAa,oBAAqB,SAAQ,SAAS;aAkB/B,MAAM,EAAE,UAAU;aAClB,IAAI,EAAE,QAAQ;aACd,UAAU,EAAE,cAAc,CAAC,UAAU,EAAE,sBAAsB,CAAC;IAnBhF,MAAM,CAAC,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QAUT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,WAAW,CAAC,oBAAoB,CAAC;IAI7E,OAAO;CAOR;AAID,qBAAa,aAAc,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IAInE,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,YAAY;IAJ/B,IAAI,gEAAe;gBAGA,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,CAAC,UAAU,EAAE,oBAAoB,KAAK,IAAI;IAG3E,eAAe,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI;IAOtE,OAAO,CAAC,SAAS,EAAE,QAAQ;CAC5B;AAED,qBAAa,aAAc,YAAW,aAAa,CAAC,OAAO,WAAW,CAAC;IAGzD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAFtC,IAAI,gEAAe;gBAEU,SAAS,EAAE,SAAS;IAEjD,eAAe,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI;IAKlD,OAAO,CAAC,SAAS,EAAE,QAAQ,GAAG,IAAI;IAElC,cAAc,CAAC,MAAM,EAAE,mBAAmB,EAAE,UAAU,EAAE,oBAAoB;CAK7E"}
|
|
@@ -53,7 +53,7 @@ export class ServerHandler {
|
|
|
53
53
|
this.onWorkReport(guaranteedWorkReport);
|
|
54
54
|
sender.close();
|
|
55
55
|
}
|
|
56
|
-
onClose() { }
|
|
56
|
+
onClose(_streamId) { }
|
|
57
57
|
}
|
|
58
58
|
export class ClientHandler {
|
|
59
59
|
chainSpec;
|
|
@@ -65,7 +65,7 @@ export class ClientHandler {
|
|
|
65
65
|
logger.warn `[${sender.streamId}] Got unexpected message on CE-135 stream. Closing.`;
|
|
66
66
|
sender.close();
|
|
67
67
|
}
|
|
68
|
-
onClose() { }
|
|
68
|
+
onClose(_streamId) { }
|
|
69
69
|
sendWorkReport(sender, workReport) {
|
|
70
70
|
logger.trace `[${sender.streamId}] Sending guaranteed work report.`;
|
|
71
71
|
sender.bufferAndSend(Encoder.encodeObject(GuaranteedWorkReport.Codec, workReport, this.chainSpec));
|
|
@@ -5,7 +5,7 @@ import { Credential } from "#@typeberry/block/guarantees.js";
|
|
|
5
5
|
import { RefineContext } from "#@typeberry/block/refine-context.js";
|
|
6
6
|
import { tryAsWorkItemsCount } from "#@typeberry/block/work-package.js";
|
|
7
7
|
import { WorkPackageSpec, WorkReport } from "#@typeberry/block/work-report.js";
|
|
8
|
-
import { WorkExecResult,
|
|
8
|
+
import { WorkExecResult, WorkRefineLoad, WorkResult } from "#@typeberry/block/work-result.js";
|
|
9
9
|
import { Bytes, BytesBlob } from "#@typeberry/bytes";
|
|
10
10
|
import { asKnownSize, FixedSizeArray } from "#@typeberry/collections";
|
|
11
11
|
import { tinyChainSpec } from "#@typeberry/config";
|
|
@@ -36,7 +36,7 @@ const MOCK_WORK_RESULT = WorkResult.create({
|
|
|
36
36
|
codeHash: Bytes.zero(HASH_SIZE).asOpaque(),
|
|
37
37
|
payloadHash: Bytes.zero(HASH_SIZE),
|
|
38
38
|
gas: tryAsServiceGas(1000n),
|
|
39
|
-
result:
|
|
39
|
+
result: WorkExecResult.ok(BytesBlob.empty()),
|
|
40
40
|
load: WorkRefineLoad.create({
|
|
41
41
|
gasUsed: tryAsServiceGas(10000n),
|
|
42
42
|
importedSegments: tryAsU32(1),
|
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
import type { BytesBlob } from "#@typeberry/bytes";
|
|
2
|
-
import { type U8
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
2
|
+
import { type U8 } from "#@typeberry/numbers";
|
|
3
|
+
import { type Opaque } from "#@typeberry/utils";
|
|
4
|
+
/**
|
|
5
|
+
* Globally unique stream identifier.
|
|
6
|
+
*
|
|
7
|
+
* Assigned during stream registration and used as the sole public
|
|
8
|
+
* identifier for a stream throughout the protocol layer.
|
|
9
|
+
*/
|
|
10
|
+
export type StreamId = Opaque<string, "streamId">;
|
|
11
|
+
/** Cast a string as `StreamId`. */
|
|
12
|
+
export declare function tryAsStreamId(id: string): StreamId;
|
|
7
13
|
/** Unique stream kind. */
|
|
8
14
|
export type StreamKind<T extends U8 = U8> = T;
|
|
9
15
|
/** Try to cast the number as `StreamKind`. */
|
|
10
16
|
export declare function tryAsStreamKind<T extends number>(num: T): StreamKind<T & U8>;
|
|
11
17
|
/** Abstraction over sending messages tied to a particular stream. */
|
|
12
18
|
export interface StreamMessageSender {
|
|
13
|
-
/**
|
|
19
|
+
/** Globally unique stream identifier. */
|
|
14
20
|
streamId: StreamId;
|
|
15
21
|
/**
|
|
16
22
|
* Send data blob to the other end.
|
|
@@ -29,7 +35,7 @@ export interface StreamHandler<TStreamKind extends StreamKind = StreamKind> {
|
|
|
29
35
|
readonly kind: TStreamKind;
|
|
30
36
|
/** Handle message for that particular stream kind. */
|
|
31
37
|
onStreamMessage(streamSender: StreamMessageSender, message: BytesBlob): void;
|
|
32
|
-
/** Handle closing of given
|
|
38
|
+
/** Handle closing of given stream. */
|
|
33
39
|
onClose(streamId: StreamId, isError: boolean): void;
|
|
34
40
|
}
|
|
35
41
|
/** Extract the stream kind out of the the handler type. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,
|
|
1
|
+
{"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAW,KAAK,EAAE,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE7D;;;;;GAKG;AACH,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAElD,mCAAmC;AACnC,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,GAAG,QAAQ,CAElD;AAED,0BAA0B;AAC1B,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AAC9C,8CAA8C;AAC9C,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,GAAG,UAAU,CAAC,CAAC,GAAG,EAAE,CAAC,CAE5E;AAED,qEAAqE;AACrE,MAAM,WAAW,mBAAmB;IAClC,yCAAyC;IACzC,QAAQ,EAAE,QAAQ,CAAC;IAEnB;;;;;;OAMG;IACH,aAAa,CAAC,IAAI,EAAE,SAAS,EAAE,gBAAgB,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC;IAEpE,8CAA8C;IAC9C,KAAK,IAAI,IAAI,CAAC;CACf;AAED,iEAAiE;AACjE,MAAM,WAAW,aAAa,CAAC,WAAW,SAAS,UAAU,GAAG,UAAU;IACxE,yBAAyB;IACzB,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAE3B,sDAAsD;IACtD,eAAe,CAAC,YAAY,EAAE,mBAAmB,EAAE,OAAO,EAAE,SAAS,GAAG,IAAI,CAAC;IAE7E,sCAAsC;IACtC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACrD;AAED,2DAA2D;AAC3D,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,aAAa,IAAI,CAAC,SAAS,aAAa,CAAC,MAAM,KAAK,CAAC,GAAG,KAAK,GAAG,KAAK,CAAC"}
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import { tryAsU8
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
import { tryAsU8 } from "#@typeberry/numbers";
|
|
2
|
+
import { asOpaqueType } from "#@typeberry/utils";
|
|
3
|
+
/** Cast a string as `StreamId`. */
|
|
4
|
+
export function tryAsStreamId(id) {
|
|
5
|
+
return asOpaqueType(id);
|
|
5
6
|
}
|
|
6
7
|
/** Try to cast the number as `StreamKind`. */
|
|
7
8
|
export function tryAsStreamKind(num) {
|
|
@@ -4,7 +4,7 @@ import { type StreamHandler, type StreamId, type StreamKind, type StreamKindOf,
|
|
|
4
4
|
export declare class TestStreamSender implements StreamMessageSender {
|
|
5
5
|
readonly streamId: StreamId;
|
|
6
6
|
readonly onSend: (data: BytesBlob) => void;
|
|
7
|
-
readonly
|
|
7
|
+
readonly onCloseCallback: () => void;
|
|
8
8
|
constructor(streamId: StreamId, { onSend, onClose, }: {
|
|
9
9
|
onSend: (data: BytesBlob) => void;
|
|
10
10
|
onClose?: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/jamnp-s/protocol/test-utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EACL,KAAK,aAAa,EAClB,KAAK,QAAQ,EACb,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,mBAAmB,EAEzB,MAAM,aAAa,CAAC;AAUrB,qBAAa,gBAAiB,YAAW,mBAAmB;aAKxC,QAAQ,EAAE,QAAQ;IAJpC,SAAgB,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;IAClD,SAAgB,eAAe,EAAE,MAAM,IAAI,CAAC;gBAG1B,QAAQ,EAAE,QAAQ,EAClC,EACE,MAAM,EACN,OAAkB,GACnB,EAAE;QACD,MAAM,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC;QAClC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;KACtB;IAMH,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO;IAOvC,KAAK,IAAI,IAAI;CAKd;AAKD,qBAAa,kBAAkB;IAO3B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAoE;IACtG,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAA6C;IAEhF,SAAgB,WAAW,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,aAAa,EAAE,mBAAmB,CAAC,CAAC,CAAa;gBAG1E,SAAS,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,IAAI,KAAK,mBAAmB;IAG1G,gBAAgB,CAAC,GAAG,QAAQ,EAAE,aAAa,EAAE;IAM7C,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,GAAG,IAAI;IASlD,gBAAgB,CAAC,QAAQ,SAAS,aAAa,EAC7C,UAAU,EAAE,YAAY,CAAC,QAAQ,CAAC,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,KAAK,EAAE,GAC3D,IAAI;IASP,aAAa,CAAC,QAAQ,SAAS,aAAa,EAC1C,UAAU,EAAE,YAAY,CAAC,QAAQ,CAAC,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,mBAAmB,KAAK,EAAE,GAC3D,IAAI;IASP;;;;OAIG;IACH,iBAAiB,CAAC,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU;IAMhD;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,EAAE,QAAQ;IAS/B,OAAO,CAAC,wBAAwB;CAsBjC;AAED,wBAAgB,gBAAgB;;;EA6B/B"}
|
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
import { tryAsStreamId, } from "./stream.js";
|
|
2
|
+
const TEST_PEER_ID = "test-peer";
|
|
3
|
+
let nextTestStreamCounter = 0;
|
|
4
|
+
function nextTestStreamId() {
|
|
5
|
+
return tryAsStreamId(`${TEST_PEER_ID}:${nextTestStreamCounter++}`);
|
|
6
|
+
}
|
|
2
7
|
export class TestStreamSender {
|
|
3
8
|
streamId;
|
|
4
9
|
onSend;
|
|
5
|
-
|
|
10
|
+
onCloseCallback;
|
|
6
11
|
constructor(streamId, { onSend, onClose = () => { }, }) {
|
|
7
12
|
this.streamId = streamId;
|
|
8
13
|
this.onSend = onSend;
|
|
9
|
-
this.
|
|
14
|
+
this.onCloseCallback = onClose;
|
|
10
15
|
}
|
|
11
16
|
bufferAndSend(data) {
|
|
12
17
|
setImmediate(() => {
|
|
@@ -16,7 +21,7 @@ export class TestStreamSender {
|
|
|
16
21
|
}
|
|
17
22
|
close() {
|
|
18
23
|
setImmediate(() => {
|
|
19
|
-
this.
|
|
24
|
+
this.onCloseCallback();
|
|
20
25
|
});
|
|
21
26
|
}
|
|
22
27
|
}
|
|
@@ -50,15 +55,7 @@ export class TestMessageHandler {
|
|
|
50
55
|
work(handler[0], handler[1]);
|
|
51
56
|
}
|
|
52
57
|
withNewStream(streamKind, work) {
|
|
53
|
-
const
|
|
54
|
-
const streams = this.openStreams;
|
|
55
|
-
const streamId = (function findStreamId() {
|
|
56
|
-
const s = getRandomStreamId();
|
|
57
|
-
if (!streams.has(s)) {
|
|
58
|
-
return s;
|
|
59
|
-
}
|
|
60
|
-
return findStreamId();
|
|
61
|
-
})();
|
|
58
|
+
const streamId = nextTestStreamId();
|
|
62
59
|
// since we are picking a non-existing stream id, there is no way of
|
|
63
60
|
// conflicting here, so the `[handler, stream]` will be fresh.
|
|
64
61
|
const [handler, stream] = this.createStreamIfNotPresent(streamId, streamKind);
|
|
@@ -93,7 +93,7 @@ export declare class Handler implements StreamHandler<typeof STREAM_KIND> {
|
|
|
93
93
|
kind: 0 & import("@typeberry/numbers").WithBytesRepresentation<1>;
|
|
94
94
|
private readonly handshakes;
|
|
95
95
|
private readonly pendingHandshakes;
|
|
96
|
-
constructor(spec: ChainSpec, getHandshake: () => Handshake, onAnnouncement: (
|
|
96
|
+
constructor(spec: ChainSpec, getHandshake: () => Handshake, onAnnouncement: (streamId: StreamId, ann: Announcement) => void, onHandshake: (streamId: StreamId, handshake: Handshake) => void);
|
|
97
97
|
onStreamMessage(sender: StreamMessageSender, message: BytesBlob): void;
|
|
98
98
|
onClose(streamId: StreamId): void;
|
|
99
99
|
sendHandshake(sender: StreamMessageSender): void;
|
|
@@ -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"}
|