@typeberry/lib 0.5.9 → 0.5.10-6923c44
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/codec/encoder.d.ts +1 -1
- package/packages/core/codec/encoder.d.ts.map +1 -1
- package/packages/core/codec/encoder.js +3 -2
- package/packages/core/pvm-interface/pvm.d.ts +2 -0
- package/packages/core/pvm-interface/pvm.d.ts.map +1 -1
- package/packages/jam/block/block.d.ts +3 -3
- package/packages/jam/block/header.d.ts +6 -6
- package/packages/jam/block/test-helpers.d.ts +2 -2
- package/packages/jam/block/tickets.d.ts +5 -6
- package/packages/jam/block/tickets.d.ts.map +1 -1
- package/packages/jam/block/tickets.js +2 -10
- package/packages/jam/block/work-item-segment.d.ts +23 -6
- package/packages/jam/block/work-item-segment.d.ts.map +1 -1
- package/packages/jam/block/work-item-segment.js +24 -7
- package/packages/jam/block/work-item.d.ts +3 -3
- package/packages/jam/block/work-item.d.ts.map +1 -1
- package/packages/jam/block/work-item.js +7 -3
- package/packages/jam/block/work-package.d.ts +2 -2
- package/packages/jam/block/work-package.d.ts.map +1 -1
- package/packages/jam/block/work-package.js +2 -6
- package/packages/jam/block-json/block.d.ts +2 -2
- package/packages/jam/block-json/block.js +1 -1
- package/packages/jam/block-json/common.d.ts +1 -2
- package/packages/jam/block-json/common.d.ts.map +1 -1
- package/packages/jam/block-json/common.js +2 -2
- package/packages/jam/block-json/extrinsic.js +1 -1
- package/packages/jam/block-json/header.d.ts +1 -2
- package/packages/jam/block-json/header.d.ts.map +1 -1
- package/packages/jam/block-json/header.js +32 -34
- package/packages/jam/block-json/tickets-extrinsic.d.ts +1 -2
- package/packages/jam/block-json/tickets-extrinsic.d.ts.map +1 -1
- package/packages/jam/block-json/tickets-extrinsic.js +5 -7
- package/packages/jam/block-json/work-result.js +2 -2
- package/packages/jam/database/blocks.d.ts +3 -0
- package/packages/jam/database/blocks.d.ts.map +1 -1
- package/packages/jam/database/blocks.js +5 -0
- package/packages/jam/database-lmdb/blocks.d.ts +1 -0
- package/packages/jam/database-lmdb/blocks.d.ts.map +1 -1
- package/packages/jam/database-lmdb/blocks.js +5 -0
- package/packages/jam/database-lmdb/states.js +1 -1
- package/packages/jam/executor/pvm-executor.d.ts +2 -2
- package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
- package/packages/jam/fuzz-proto/v1/types.d.ts +1 -1
- package/packages/jam/in-core/externalities/refine.d.ts +42 -11
- package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
- package/packages/jam/in-core/externalities/refine.js +95 -11
- package/packages/jam/in-core/externalities/refine.test.d.ts +2 -0
- package/packages/jam/in-core/externalities/refine.test.d.ts.map +1 -0
- package/packages/jam/in-core/externalities/refine.test.js +263 -0
- package/packages/jam/in-core/in-core.d.ts +1 -1
- package/packages/jam/in-core/in-core.d.ts.map +1 -1
- package/packages/jam/in-core/in-core.js +17 -10
- package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +3 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts +2 -0
- package/packages/jam/jam-host-calls/externalities/refine-externalities.test.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/externalities/refine-externalities.test.js +5 -0
- package/packages/jam/jam-host-calls/general/fetch.d.ts +159 -98
- package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
- package/packages/jam/jam-host-calls/general/fetch.js +110 -16
- package/packages/jam/jam-host-calls/general/fetch.test.js +87 -56
- package/packages/jam/jam-host-calls/refine/export.d.ts +1 -1
- package/packages/jam/jam-host-calls/refine/export.js +1 -1
- package/packages/jam/jam-host-calls/refine/export.test.js +3 -0
- package/packages/jam/jam-host-calls/refine/historical-lookup.d.ts +1 -1
- package/packages/jam/jam-host-calls/refine/historical-lookup.js +1 -1
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/ce-131-ce-132-safrole-ticket-distribution.test.js +1 -1
- package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +1 -1
- package/packages/jam/jamnp-s/protocol/up-0-block-announcement.d.ts +1 -1
- package/packages/jam/jamnp-s/tasks/ticket-distribution.test.js +1 -1
- package/packages/jam/node/main-fuzz.d.ts.map +1 -1
- package/packages/jam/node/main-fuzz.js +1 -0
- package/packages/jam/node/main-importer.d.ts +1 -0
- package/packages/jam/node/main-importer.d.ts.map +1 -1
- package/packages/jam/node/main-importer.js +1 -0
- package/packages/jam/node/main.d.ts.map +1 -1
- package/packages/jam/node/main.js +1 -0
- package/packages/jam/node/reader.d.ts +2 -2
- package/packages/jam/node/workers.d.ts +22 -22
- package/packages/jam/safrole/bandersnatch-vrf.d.ts +1 -2
- package/packages/jam/safrole/bandersnatch-vrf.d.ts.map +1 -1
- package/packages/jam/safrole/bandersnatch-vrf.js +2 -2
- package/packages/jam/safrole/bandersnatch-vrf.test.js +2 -3
- package/packages/jam/safrole/safrole.test.js +72 -80
- package/packages/jam/state/safrole-data.d.ts +1 -1
- package/packages/jam/state/test.utils.js +1 -1
- package/packages/jam/state-json/dump.js +2 -2
- package/packages/jam/state-json/safrole.d.ts +2 -2
- package/packages/jam/state-json/safrole.d.ts.map +1 -1
- package/packages/jam/state-json/safrole.js +4 -4
- package/packages/jam/state-merkleization/in-memory-state-codec.d.ts +1 -1
- package/packages/jam/state-vectors/index.d.ts +7 -8
- package/packages/jam/state-vectors/index.d.ts.map +1 -1
- package/packages/jam/state-vectors/index.js +4 -6
- package/packages/jam/transition/accumulate/accumulate.js +2 -2
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
- package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
- package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
- package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
- package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
- package/packages/jam/transition/externalities/index.d.ts +2 -0
- package/packages/jam/transition/externalities/index.d.ts.map +1 -1
- package/packages/jam/transition/externalities/index.js +2 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.js +48 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
- package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
- package/packages/jam/transition/hasher.test.js +1 -1
- package/packages/workers/block-authorship/main.d.ts.map +1 -1
- package/packages/workers/block-authorship/main.js +1 -1
- package/packages/workers/block-authorship/protocol.d.ts +4 -4
- package/packages/workers/block-authorship/ticket-generator.d.ts +1 -2
- package/packages/workers/block-authorship/ticket-generator.d.ts.map +1 -1
- package/packages/workers/block-authorship/ticket-generator.js +2 -2
- package/packages/workers/block-authorship/ticket-generator.test.js +10 -11
- package/packages/workers/comms-authorship-network/protocol.d.ts +1 -1
- package/packages/workers/comms-authorship-network/tickets-message.d.ts +1 -1
- package/packages/workers/importer/importer.d.ts +1 -0
- package/packages/workers/importer/importer.d.ts.map +1 -1
- package/packages/workers/importer/importer.js +7 -2
- package/packages/workers/importer/main.d.ts.map +1 -1
- package/packages/workers/importer/main.js +2 -0
- package/packages/workers/importer/protocol.d.ts +12 -9
- package/packages/workers/importer/protocol.d.ts.map +1 -1
- package/packages/workers/importer/protocol.js +8 -3
- package/packages/workers/jam-network/protocol.d.ts +10 -10
- package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
- package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
- package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
|
@@ -14,38 +14,36 @@ const epochMark = json.object({
|
|
|
14
14
|
tickets_entropy: fromJson.bytes32(),
|
|
15
15
|
validators: json.array(validatorKeysFromJson),
|
|
16
16
|
}, (x) => EpochMarker.create({ entropy: x.entropy, ticketsEntropy: x.tickets_entropy, validators: x.validators }));
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
seal,
|
|
49
|
-
});
|
|
17
|
+
const ticket = json.object({
|
|
18
|
+
id: fromJson.bytes32(),
|
|
19
|
+
attempt: fromJson.ticketAttempt,
|
|
20
|
+
}, (x) => Ticket.create({ id: x.id, attempt: x.attempt }));
|
|
21
|
+
export const headerFromJson = json.object({
|
|
22
|
+
parent: fromJson.bytes32(),
|
|
23
|
+
parent_state_root: fromJson.bytes32(),
|
|
24
|
+
extrinsic_hash: fromJson.bytes32(),
|
|
25
|
+
slot: "number",
|
|
26
|
+
epoch_mark: json.optional(epochMark),
|
|
27
|
+
tickets_mark: json.optional(json.array(ticket)),
|
|
28
|
+
offenders_mark: json.array(fromJson.bytes32()),
|
|
29
|
+
author_index: "number",
|
|
30
|
+
entropy_source: bandersnatchVrfSignature,
|
|
31
|
+
seal: bandersnatchVrfSignature,
|
|
32
|
+
}, ({ parent, parent_state_root, extrinsic_hash, slot, epoch_mark, tickets_mark, offenders_mark, author_index, entropy_source, seal, }) => {
|
|
33
|
+
const epochMarker = epoch_mark ?? null;
|
|
34
|
+
const ticketsMarker = tickets_mark === undefined || tickets_mark === null
|
|
35
|
+
? null
|
|
36
|
+
: TicketsMarker.create({ tickets: asOpaqueType(tickets_mark) });
|
|
37
|
+
return Header.create({
|
|
38
|
+
parentHeaderHash: parent,
|
|
39
|
+
priorStateRoot: parent_state_root,
|
|
40
|
+
extrinsicHash: extrinsic_hash,
|
|
41
|
+
timeSlotIndex: slot,
|
|
42
|
+
epochMarker,
|
|
43
|
+
ticketsMarker,
|
|
44
|
+
offendersMarker: offenders_mark,
|
|
45
|
+
bandersnatchBlockAuthorIndex: author_index,
|
|
46
|
+
entropySource: entropy_source,
|
|
47
|
+
seal,
|
|
50
48
|
});
|
|
51
|
-
};
|
|
49
|
+
});
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import { SignedTicket } from "#@typeberry/block/tickets.js";
|
|
2
|
-
import
|
|
3
|
-
export declare const ticketsExtrinsicFromJson: (spec: ChainSpec) => ["array", import("@typeberry/json-parser").FromJsonWithParser<string, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<number, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<unknown, SignedTicket> | import("@typeberry/json-parser").ObjectFromJson<SignedTicket> | import("@typeberry/json-parser").FromJsonOptional<SignedTicket> | import("@typeberry/json-parser").Parser<unknown, SignedTicket[]>];
|
|
2
|
+
export declare const ticketsExtrinsicFromJson: ["array", import("@typeberry/json-parser").FromJsonWithParser<string, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<number, SignedTicket> | import("@typeberry/json-parser").FromJsonWithParser<unknown, SignedTicket> | import("@typeberry/json-parser").ObjectFromJson<SignedTicket> | import("@typeberry/json-parser").FromJsonOptional<SignedTicket> | import("@typeberry/json-parser").Parser<unknown, SignedTicket[]>];
|
|
4
3
|
//# sourceMappingURL=tickets-extrinsic.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tickets-extrinsic.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/tickets-extrinsic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;
|
|
1
|
+
{"version":3,"file":"tickets-extrinsic.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/block-json/tickets-extrinsic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAc3D,eAAO,MAAM,wBAAwB,obAAqC,CAAC"}
|
|
@@ -3,10 +3,8 @@ import { Bytes } from "#@typeberry/bytes";
|
|
|
3
3
|
import { BANDERSNATCH_PROOF_BYTES } from "#@typeberry/crypto/bandersnatch.js";
|
|
4
4
|
import { json } from "#@typeberry/json-parser";
|
|
5
5
|
import { fromJson } from "./common.js";
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return json.array(ticketEnvelopeFromJson);
|
|
12
|
-
};
|
|
6
|
+
const ticketEnvelopeFromJson = json.object({
|
|
7
|
+
attempt: fromJson.ticketAttempt,
|
|
8
|
+
signature: json.fromString((v) => Bytes.parseBytes(v, BANDERSNATCH_PROOF_BYTES).asOpaque()),
|
|
9
|
+
}, (x) => SignedTicket.create({ attempt: x.attempt, signature: x.signature }));
|
|
10
|
+
export const ticketsExtrinsicFromJson = json.array(ticketEnvelopeFromJson);
|
|
@@ -35,13 +35,13 @@ const workExecResultFromJson = json.object({
|
|
|
35
35
|
throw new Error("Invalid WorkExecResult");
|
|
36
36
|
});
|
|
37
37
|
const workRefineLoadFromJson = json.object({
|
|
38
|
-
gas_used: json.
|
|
38
|
+
gas_used: json.fromBigInt((x) => tryAsServiceGas(x)),
|
|
39
39
|
imports: "number",
|
|
40
40
|
extrinsic_count: "number",
|
|
41
41
|
extrinsic_size: "number",
|
|
42
42
|
exports: "number",
|
|
43
43
|
}, ({ gas_used, imports, extrinsic_count, extrinsic_size, exports }) => WorkRefineLoad.create({
|
|
44
|
-
gasUsed:
|
|
44
|
+
gasUsed: gas_used,
|
|
45
45
|
importedSegments: tryAsU32(imports),
|
|
46
46
|
extrinsicCount: tryAsU32(extrinsic_count),
|
|
47
47
|
extrinsicSize: tryAsU32(extrinsic_size),
|
|
@@ -22,6 +22,8 @@ export interface BlocksDb {
|
|
|
22
22
|
* NOTE: this is not extrinsic hash!
|
|
23
23
|
*/
|
|
24
24
|
getExtrinsic(hash: HeaderHash): ExtrinsicView | null;
|
|
25
|
+
/** Mark a block as no longer needed. Backend may remove its data. */
|
|
26
|
+
markUnused(hash: HeaderHash): void;
|
|
25
27
|
/** Close the database and free resources. */
|
|
26
28
|
close(): Promise<void>;
|
|
27
29
|
}
|
|
@@ -43,6 +45,7 @@ export declare class InMemoryBlocks implements BlocksDb {
|
|
|
43
45
|
insertBlock(block: WithHash<HeaderHash, BlockView>): Promise<void>;
|
|
44
46
|
getHeader(hash: HeaderHash): HeaderView | null;
|
|
45
47
|
getExtrinsic(hash: HeaderHash): ExtrinsicView | null;
|
|
48
|
+
markUnused(hash: HeaderHash): void;
|
|
46
49
|
close(): Promise<void>;
|
|
47
50
|
}
|
|
48
51
|
//# sourceMappingURL=blocks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGxG,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gDAAgD;IAChD,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,yCAAyC;IACzC,iBAAiB,IAAI,UAAU,CAAC;IAChC,wDAAwD;IACxD,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,oDAAoD;IACpD,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC;IACzD,sDAAsD;IACtD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,+BAA+B;IAC/B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IAC/C;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC;IACrD,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,kDAAkD;AAClD,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgE;IAC9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAmE;IAC1G,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAmE;IAC7G,OAAO,CAAC,cAAc,CAAgD;IAEtE,8BAA8B;IAC9B,MAAM,CAAC,GAAG;IAIV,+DAA+D;IAC/D,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;IAQnE,OAAO;IAEP,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,iBAAiB,IAAI,UAAU;IAI/B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/E,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAIxD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAI9C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGxG,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,gDAAgD;IAChD,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnD,yCAAyC;IACzC,iBAAiB,IAAI,UAAU,CAAC;IAChC,wDAAwD;IACxD,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,oDAAoD;IACpD,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC;IACzD,sDAAsD;IACtD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnE,+BAA+B;IAC/B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IAC/C;;;;OAIG;IACH,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAAC;IACrD,qEAAqE;IACrE,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAAC;IACnC,6CAA6C;IAC7C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,kDAAkD;AAClD,qBAAa,cAAe,YAAW,QAAQ;IAC7C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgE;IAC9F,OAAO,CAAC,QAAQ,CAAC,sBAAsB,CAAmE;IAC1G,OAAO,CAAC,QAAQ,CAAC,yBAAyB,CAAmE;IAC7G,OAAO,CAAC,cAAc,CAAgD;IAEtE,8BAA8B;IAC9B,MAAM,CAAC,GAAG;IAIV,+DAA+D;IAC/D,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE;IAQnE,OAAO;IAEP,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAMlD,iBAAiB,IAAI,UAAU;IAI/B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAK/E,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAIxD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlE,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAI9C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAIpD,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAM5B,KAAK;CACZ"}
|
|
@@ -45,5 +45,10 @@ export class InMemoryBlocks {
|
|
|
45
45
|
getExtrinsic(hash) {
|
|
46
46
|
return this.extrinsicsByHeaderHash.get(hash) ?? null;
|
|
47
47
|
}
|
|
48
|
+
markUnused(hash) {
|
|
49
|
+
this.headersByHash.delete(hash);
|
|
50
|
+
this.extrinsicsByHeaderHash.delete(hash);
|
|
51
|
+
this.postStateRootByHeaderHash.delete(hash);
|
|
52
|
+
}
|
|
48
53
|
async close() { }
|
|
49
54
|
}
|
|
@@ -17,6 +17,7 @@ export declare class LmdbBlocks implements BlocksDb {
|
|
|
17
17
|
getBestHeaderHash(): HeaderHash;
|
|
18
18
|
getHeader(hash: HeaderHash): HeaderView | null;
|
|
19
19
|
getExtrinsic(hash: HeaderHash): ExtrinsicView | null;
|
|
20
|
+
markUnused(hash: HeaderHash): void;
|
|
20
21
|
close(): Promise<void>;
|
|
21
22
|
}
|
|
22
23
|
//# sourceMappingURL=blocks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,WAAW,CAAC;AAQjD,qBAAa,UAAW,YAAW,QAAQ;IAMvC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;gBAGpB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,QAAQ;IAa3B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAQlD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASlE,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,iBAAiB,IAAI,UAAU;IAS/B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAS9C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"blocks.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/database-lmdb/blocks.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,SAAS,EAEd,KAAK,aAAa,EAElB,KAAK,UAAU,EACf,KAAK,UAAU,EACf,KAAK,aAAa,EACnB,MAAM,kBAAkB,CAAC;AAG1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AAC9D,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAS,MAAM,WAAW,CAAC;AAQjD,qBAAa,UAAW,YAAW,QAAQ;IAMvC,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,IAAI;IANvB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAQ;IAChC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAQ;gBAGpB,SAAS,EAAE,SAAS,EACpB,IAAI,EAAE,QAAQ;IAa3B,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAIrF,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAQlD,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IASlE,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,iBAAiB,IAAI,UAAU;IAS/B,SAAS,CAAC,IAAI,EAAE,UAAU,GAAG,UAAU,GAAG,IAAI;IAS9C,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI;IAQpD,UAAU,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI;IAM5B,KAAK;CAGZ"}
|
|
@@ -68,6 +68,11 @@ export class LmdbBlocks {
|
|
|
68
68
|
}
|
|
69
69
|
return Decoder.decodeObject(Extrinsic.Codec.View, data, this.chainSpec);
|
|
70
70
|
}
|
|
71
|
+
markUnused(hash) {
|
|
72
|
+
this.headers.removeSync(hash.raw);
|
|
73
|
+
this.extrinsics.removeSync(hash.raw);
|
|
74
|
+
this.postStateRoots.removeSync(hash.raw);
|
|
75
|
+
}
|
|
71
76
|
async close() {
|
|
72
77
|
await Promise.all([this.headers.close(), this.extrinsics.close(), this.postStateRoots.close()]);
|
|
73
78
|
}
|
|
@@ -126,7 +126,7 @@ export class LmdbStates {
|
|
|
126
126
|
return SerializedState.new(this.spec, this.blake2b, leafDbResult.ok);
|
|
127
127
|
}
|
|
128
128
|
markUnused(header) {
|
|
129
|
-
this.states.
|
|
129
|
+
this.states.removeSync(header.raw);
|
|
130
130
|
}
|
|
131
131
|
async close() {
|
|
132
132
|
await Promise.all([this.states.close(), this.values.close()]);
|
|
@@ -6,11 +6,11 @@ import type { PartialState } from "#@typeberry/jam-host-calls/externalities/part
|
|
|
6
6
|
import { type RefineExternalities } from "#@typeberry/jam-host-calls/externalities/refine-externalities.js";
|
|
7
7
|
export type RefineHostCallExternalities = {
|
|
8
8
|
refine: RefineExternalities;
|
|
9
|
-
fetchExternalities: general.
|
|
9
|
+
fetchExternalities: general.IRefineFetch;
|
|
10
10
|
};
|
|
11
11
|
export type AccumulateHostCallExternalities = {
|
|
12
12
|
partialState: PartialState;
|
|
13
|
-
fetchExternalities: general.
|
|
13
|
+
fetchExternalities: general.IAccumulateFetch;
|
|
14
14
|
serviceExternalities: general.AccountsInfo & general.AccountsLookup & general.AccountsWrite & general.AccountsRead;
|
|
15
15
|
};
|
|
16
16
|
type OnTransferHostCallExternalities = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pvm-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/executor/pvm-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAc,OAAO,EAAU,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0DAA0D,CAAC;AAC7F,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,iEAAiE,CAAC;AAuCzE,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"pvm-executor.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/executor/pvm-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,SAAS,EAAmB,MAAM,kBAAkB,CAAC;AACpF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAc,OAAO,EAAU,MAAM,2BAA2B,CAAC;AACxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0DAA0D,CAAC;AAC7F,OAAO,EAEL,KAAK,mBAAmB,EAEzB,MAAM,iEAAiE,CAAC;AAuCzE,MAAM,MAAM,2BAA2B,GAAG;IACxC,MAAM,EAAE,mBAAmB,CAAC;IAC5B,kBAAkB,EAAE,OAAO,CAAC,YAAY,CAAC;CAC1C,CAAC;AAEF,MAAM,MAAM,+BAA+B,GAAG;IAC5C,YAAY,EAAE,YAAY,CAAC;IAC3B,kBAAkB,EAAE,OAAO,CAAC,gBAAgB,CAAC;IAC7C,oBAAoB,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;CACpH,CAAC;AAEF,KAAK,+BAA+B,GAAG;IACrC,YAAY,EAAE,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,cAAc,GAAG,OAAO,CAAC,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC;IAC3G,kBAAkB,EAAE,OAAO,CAAC,mBAAmB,CAAC;CACjD,CAAC;AAUF;;GAEG;AACH,qBAAa,WAAW;IAKpB,OAAO,CAAC,WAAW;IAEnB,OAAO,CAAC,UAAU;IANpB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAoB;IACxC,OAAO,CAAC,SAAS,CAAY;IAE7B,OAAO;mBAac,cAAc;IAInC,wCAAwC;IACxC,OAAO,CAAC,MAAM,CAAC,sBAAsB;IAerC,8CAA8C;IAC9C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAuBzC,6CAA6C;IAC7C,OAAO,CAAC,MAAM,CAAC,0BAA0B;IAazC;;;;;;OAMG;IACG,GAAG,CAAC,IAAI,EAAE,SAAS,EAAE,GAAG,EAAE,UAAU;;;;;;;;IAQ1C,qEAAqE;WACxD,oBAAoB,CAC/B,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,2BAA2B,EAC1C,GAAG,EAAE,UAAU;IAOjB,yEAAyE;WAC5D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,SAAS,EAAE,SAAS,EACpB,GAAG,EAAE,UAAU;IAQjB,0EAA0E;WAC7D,wBAAwB,CACnC,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,SAAS,EACtB,aAAa,EAAE,+BAA+B,EAC9C,GAAG,EAAE,UAAU;CAMlB"}
|
|
@@ -140,7 +140,7 @@ export declare class Initialize extends WithDebug {
|
|
|
140
140
|
ticketsMarker: import("@typeberry/codec").Descriptor<import("@typeberry/block").TicketsMarker | null, import("@typeberry/codec").ViewOf<import("@typeberry/block").TicketsMarker, {
|
|
141
141
|
tickets: import("@typeberry/codec").Descriptor<readonly import("@typeberry/block").Ticket[] & import("@typeberry/utils").WithOpaque<"EpochLength">, import("@typeberry/codec").SequenceView<import("@typeberry/block").Ticket, import("@typeberry/codec").ViewOf<import("@typeberry/block").Ticket, {
|
|
142
142
|
id: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32>, import("@typeberry/bytes").Bytes<32>>;
|
|
143
|
-
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[
|
|
143
|
+
attempt: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<1> & import("@typeberry/utils").WithOpaque<"TicketAttempt[u8]">, U32>;
|
|
144
144
|
}>>>;
|
|
145
145
|
}> | null>;
|
|
146
146
|
bandersnatchBlockAuthorIndex: import("@typeberry/codec").Descriptor<number & import("@typeberry/numbers").WithBytesRepresentation<2> & import("@typeberry/utils").WithOpaque<"ValidatorIndex[u16]">, import("@typeberry/bytes").Bytes<2>>;
|
|
@@ -1,24 +1,55 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Segment, type SegmentIndex, type ServiceId } from "#@typeberry/block";
|
|
2
2
|
import type { BytesBlob } from "#@typeberry/bytes";
|
|
3
|
+
import type { PvmBackend } from "#@typeberry/config";
|
|
3
4
|
import type { Blake2bHash } from "#@typeberry/hash";
|
|
4
|
-
import type
|
|
5
|
+
import { type MachineId, type MachineResult, type MemoryOperation, NoMachineError, type PagesError, type PeekPokeError, type ProgramCounter, type RefineExternalities, SegmentExportError, type ZeroVoidError } from "#@typeberry/jam-host-calls";
|
|
5
6
|
import type { U64 } from "#@typeberry/numbers";
|
|
6
|
-
import type
|
|
7
|
-
import type
|
|
8
|
-
import type
|
|
9
|
-
import type {
|
|
7
|
+
import { type HostCallMemory, type HostCallRegisters } from "#@typeberry/pvm-host-calls";
|
|
8
|
+
import { type BigGas } from "#@typeberry/pvm-interface";
|
|
9
|
+
import { type ProgramDecoderError } from "#@typeberry/pvm-interpreter";
|
|
10
|
+
import type { State } from "#@typeberry/state";
|
|
11
|
+
import { type OK, Result } from "#@typeberry/utils";
|
|
12
|
+
/**
|
|
13
|
+
* Parameters required to create a RefineExternalitiesImpl.
|
|
14
|
+
*/
|
|
15
|
+
export type RefineExternalitiesParams = {
|
|
16
|
+
/** The service currently being refined. */
|
|
17
|
+
currentServiceId: ServiceId;
|
|
18
|
+
/** State at the lookup anchor block, used for historical preimage lookups. */
|
|
19
|
+
lookupState: State;
|
|
20
|
+
/** Export offset -- sum of exports from prior work items in this package. */
|
|
21
|
+
exportOffset: number;
|
|
22
|
+
/**
|
|
23
|
+
* PVM backend to use for creating inner PVM instances.
|
|
24
|
+
* NIT: Could accept PVMInstanceManager
|
|
25
|
+
*/
|
|
26
|
+
pvmBackend: PvmBackend;
|
|
27
|
+
};
|
|
10
28
|
export declare class RefineExternalitiesImpl implements RefineExternalities {
|
|
11
|
-
|
|
29
|
+
/** Inner PVM instances sorted by MachineId. */
|
|
30
|
+
private machines;
|
|
31
|
+
/** Service being refined (used as default for historicalLookup). */
|
|
32
|
+
private readonly currentServiceId;
|
|
33
|
+
/** State at the lookup anchor for preimage lookups. */
|
|
34
|
+
private readonly lookupState;
|
|
35
|
+
/** Segments exported by this work item during refinement. */
|
|
36
|
+
private readonly exportedSegments;
|
|
37
|
+
/** Offset for segment indexing (sum of exports from prior items). */
|
|
38
|
+
private readonly exportOffset;
|
|
39
|
+
/** PVM backend for creating inner machines. */
|
|
40
|
+
private readonly pvmBackend;
|
|
41
|
+
static create(params: RefineExternalitiesParams): RefineExternalitiesImpl;
|
|
12
42
|
private constructor();
|
|
13
|
-
|
|
43
|
+
getExportedSegments(): readonly Segment[];
|
|
44
|
+
machineExpunge(machineIndex: MachineId): Promise<Result<ProgramCounter, NoMachineError>>;
|
|
14
45
|
machinePages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64, _requestType: MemoryOperation | null): Promise<Result<OK, PagesError>>;
|
|
15
46
|
machineVoidPages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
|
|
16
47
|
machineZeroPages(_machineIndex: MachineId, _pageStart: U64, _pageCount: U64): Promise<Result<OK, ZeroVoidError>>;
|
|
17
48
|
machinePeekFrom(_machineIndex: MachineId, _destinationStart: U64, _sourceStart: U64, _length: U64, _destination: HostCallMemory): Promise<Result<OK, PeekPokeError>>;
|
|
18
49
|
machinePokeInto(_machineIndex: MachineId, _sourceStart: U64, _destinationStart: U64, _length: U64, _source: HostCallMemory): Promise<Result<OK, PeekPokeError>>;
|
|
19
|
-
machineInit(
|
|
50
|
+
machineInit(code: BytesBlob, programCounter: ProgramCounter): Promise<Result<MachineId, ProgramDecoderError>>;
|
|
20
51
|
machineInvoke(_machineIndex: MachineId, _gas: BigGas, _registers: HostCallRegisters): Promise<Result<MachineResult, NoMachineError>>;
|
|
21
|
-
exportSegment(
|
|
22
|
-
historicalLookup(
|
|
52
|
+
exportSegment(segment: Segment): Result<SegmentIndex, SegmentExportError>;
|
|
53
|
+
historicalLookup(serviceId: ServiceId | null, hash: Blake2bHash): Promise<BytesBlob | null>;
|
|
23
54
|
}
|
|
24
55
|
//# sourceMappingURL=refine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"refine.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,SAAS,EAEf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EACL,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,cAAc,EACd,KAAK,UAAU,EACf,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,mBAAmB,EACxB,kBAAkB,EAGlB,KAAK,aAAa,EACnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAsB,MAAM,2BAA2B,CAAC;AAC5G,OAAO,EAAE,KAAK,MAAM,EAAkC,MAAM,0BAA0B,CAAC;AACvF,OAAO,EAAkB,KAAK,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtF,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,KAAK,EAAE,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAcnD;;GAEG;AACH,MAAM,MAAM,yBAAyB,GAAG;IACtC,2CAA2C;IAC3C,gBAAgB,EAAE,SAAS,CAAC;IAC5B,8EAA8E;IAC9E,WAAW,EAAE,KAAK,CAAC;IACnB,6EAA6E;IAC7E,YAAY,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,UAAU,EAAE,UAAU,CAAC;CACxB,CAAC;AAEF,qBAAa,uBAAwB,YAAW,mBAAmB;IACjE,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAA6E;IAC7F,oEAAoE;IACpE,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAY;IAC7C,uDAAuD;IACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAQ;IACpC,6DAA6D;IAC7D,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAiB;IAClD,qEAAqE;IACrE,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,+CAA+C;IAC/C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAa;IAExC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,yBAAyB;IAI/C,OAAO;IAOP,mBAAmB,IAAI,SAAS,OAAO,EAAE;IAIzC,cAAc,CAAC,YAAY,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC;IAWxF,YAAY,CACV,aAAa,EAAE,SAAS,EACxB,UAAU,EAAE,GAAG,EACf,UAAU,EAAE,GAAG,EACf,YAAY,EAAE,eAAe,GAAG,IAAI,GACnC,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC;IAIlC,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIhH,gBAAgB,CAAC,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIhH,eAAe,CACb,aAAa,EAAE,SAAS,EACxB,iBAAiB,EAAE,GAAG,EACtB,YAAY,EAAE,GAAG,EACjB,OAAO,EAAE,GAAG,EACZ,YAAY,EAAE,cAAc,GAC3B,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAIrC,eAAe,CACb,aAAa,EAAE,SAAS,EACxB,YAAY,EAAE,GAAG,EACjB,iBAAiB,EAAE,GAAG,EACtB,OAAO,EAAE,GAAG,EACZ,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,MAAM,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IAI/B,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,cAAc,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;IAgCnH,aAAa,CACX,aAAa,EAAE,SAAS,EACxB,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,iBAAiB,GAC5B,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;IAIjD,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAezE,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;CAW5F"}
|
|
@@ -1,10 +1,54 @@
|
|
|
1
|
+
import { MAX_NUMBER_OF_EXPORTS_WP, tryAsSegmentIndex, } from "#@typeberry/block";
|
|
2
|
+
import { SortedArray } from "#@typeberry/collections";
|
|
3
|
+
import { NoMachineError, SegmentExportError, tryAsMachineId, tryAsProgramCounter, } from "#@typeberry/jam-host-calls";
|
|
4
|
+
import { Ordering } from "#@typeberry/ordering";
|
|
5
|
+
import { PvmInstanceManager } from "#@typeberry/pvm-host-calls";
|
|
6
|
+
import { tryAsGas } from "#@typeberry/pvm-interface";
|
|
7
|
+
import { ProgramDecoder } from "#@typeberry/pvm-interpreter";
|
|
8
|
+
import { Result } from "#@typeberry/utils";
|
|
9
|
+
const machineComparator = (a, b) => {
|
|
10
|
+
if (a[0] < b[0]) {
|
|
11
|
+
return Ordering.Less;
|
|
12
|
+
}
|
|
13
|
+
if (a[0] > b[0]) {
|
|
14
|
+
return Ordering.Greater;
|
|
15
|
+
}
|
|
16
|
+
return Ordering.Equal;
|
|
17
|
+
};
|
|
1
18
|
export class RefineExternalitiesImpl {
|
|
2
|
-
|
|
3
|
-
|
|
19
|
+
/** Inner PVM instances sorted by MachineId. */
|
|
20
|
+
machines = SortedArray.fromSortedArray(machineComparator);
|
|
21
|
+
/** Service being refined (used as default for historicalLookup). */
|
|
22
|
+
currentServiceId;
|
|
23
|
+
/** State at the lookup anchor for preimage lookups. */
|
|
24
|
+
lookupState;
|
|
25
|
+
/** Segments exported by this work item during refinement. */
|
|
26
|
+
exportedSegments = [];
|
|
27
|
+
/** Offset for segment indexing (sum of exports from prior items). */
|
|
28
|
+
exportOffset;
|
|
29
|
+
/** PVM backend for creating inner machines. */
|
|
30
|
+
pvmBackend;
|
|
31
|
+
static create(params) {
|
|
32
|
+
return new RefineExternalitiesImpl(params);
|
|
4
33
|
}
|
|
5
|
-
constructor() {
|
|
6
|
-
|
|
7
|
-
|
|
34
|
+
constructor(params) {
|
|
35
|
+
this.currentServiceId = params.currentServiceId;
|
|
36
|
+
this.lookupState = params.lookupState;
|
|
37
|
+
this.exportOffset = params.exportOffset;
|
|
38
|
+
this.pvmBackend = params.pvmBackend;
|
|
39
|
+
}
|
|
40
|
+
getExportedSegments() {
|
|
41
|
+
return this.exportedSegments;
|
|
42
|
+
}
|
|
43
|
+
machineExpunge(machineIndex) {
|
|
44
|
+
// We just care about machineIndex
|
|
45
|
+
const entry = this.machines.findExact([machineIndex, undefined]);
|
|
46
|
+
if (entry === undefined) {
|
|
47
|
+
return Promise.resolve(Result.error(NoMachineError, () => `Machine not found (id: ${machineIndex})`));
|
|
48
|
+
}
|
|
49
|
+
const pc = tryAsProgramCounter(entry[1].getPC());
|
|
50
|
+
this.machines.removeOne(entry);
|
|
51
|
+
return Promise.resolve(Result.ok(pc));
|
|
8
52
|
}
|
|
9
53
|
machinePages(_machineIndex, _pageStart, _pageCount, _requestType) {
|
|
10
54
|
throw new Error("Method not implemented.");
|
|
@@ -21,16 +65,56 @@ export class RefineExternalitiesImpl {
|
|
|
21
65
|
machinePokeInto(_machineIndex, _sourceStart, _destinationStart, _length, _source) {
|
|
22
66
|
throw new Error("Method not implemented.");
|
|
23
67
|
}
|
|
24
|
-
machineInit(
|
|
25
|
-
|
|
68
|
+
async machineInit(code, programCounter) {
|
|
69
|
+
// https://graypaper.fluffylabs.dev/#/ab2cdbd/346400346400?v=0.7.2
|
|
70
|
+
const deblobResult = ProgramDecoder.deblob(code.raw);
|
|
71
|
+
if (deblobResult.isError) {
|
|
72
|
+
return Result.error(deblobResult.error, deblobResult.details);
|
|
73
|
+
}
|
|
74
|
+
const manager = await PvmInstanceManager.new(this.pvmBackend);
|
|
75
|
+
const innerPvm = await manager.getInstance();
|
|
76
|
+
innerPvm.resetGeneric(code.raw, Number(programCounter), tryAsGas(0));
|
|
77
|
+
// https://graypaper.fluffylabs.dev/#/ab2cdbd/348c00348c00?v=0.7.2
|
|
78
|
+
// Binary search for the minimal free MachineId
|
|
79
|
+
const arr = this.machines.array;
|
|
80
|
+
let low = 0;
|
|
81
|
+
let high = arr.length;
|
|
82
|
+
while (low < high) {
|
|
83
|
+
const mid = (low + high) >> 1;
|
|
84
|
+
if (arr[mid][0] > BigInt(mid)) {
|
|
85
|
+
high = mid;
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
low = mid + 1;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
const machineId = tryAsMachineId(low);
|
|
92
|
+
// https://graypaper.fluffylabs.dev/#/ab2cdbd/340501340b01?v=0.7.2
|
|
93
|
+
this.machines.insert([machineId, innerPvm]);
|
|
94
|
+
return Result.ok(machineId);
|
|
26
95
|
}
|
|
27
96
|
machineInvoke(_machineIndex, _gas, _registers) {
|
|
28
97
|
throw new Error("Method not implemented.");
|
|
29
98
|
}
|
|
30
|
-
exportSegment(
|
|
31
|
-
|
|
99
|
+
exportSegment(segment) {
|
|
100
|
+
// https://graypaper.fluffylabs.dev/#/ab2cdbd/335d03335d03?v=0.7.2
|
|
101
|
+
const currentIndex = this.exportOffset + this.exportedSegments.length;
|
|
102
|
+
if (currentIndex >= MAX_NUMBER_OF_EXPORTS_WP) {
|
|
103
|
+
return Result.error(SegmentExportError, () => `Maximum number of exported segments exceeded (offset: ${this.exportOffset}, exported: ${this.exportedSegments.length})`);
|
|
104
|
+
}
|
|
105
|
+
// https://graypaper.fluffylabs.dev/#/ab2cdbd/337303337303?v=0.7.2
|
|
106
|
+
this.exportedSegments.push(segment);
|
|
107
|
+
return Result.ok(tryAsSegmentIndex(currentIndex));
|
|
32
108
|
}
|
|
33
|
-
historicalLookup(
|
|
34
|
-
|
|
109
|
+
historicalLookup(serviceId, hash) {
|
|
110
|
+
// https://graypaper.fluffylabs.dev/#/ab2cdbd/33d70133f901?v=0.7.2
|
|
111
|
+
const sid = serviceId ?? this.currentServiceId;
|
|
112
|
+
const service = this.lookupState.getService(sid);
|
|
113
|
+
// https://graypaper.fluffylabs.dev/#/ab2cdbd/334802334802?v=0.7.2
|
|
114
|
+
if (service === null) {
|
|
115
|
+
return Promise.resolve(null);
|
|
116
|
+
}
|
|
117
|
+
// https://graypaper.fluffylabs.dev/#/ab2cdbd/334f02334f02?v=0.7.2
|
|
118
|
+
return Promise.resolve(service.getPreimage(hash.asOpaque()));
|
|
35
119
|
}
|
|
36
120
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refine.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/in-core/externalities/refine.test.ts"],"names":[],"mappings":""}
|