@typeberry/lib 0.5.10-6cb1bd5 → 0.5.10-7338c21

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.
Files changed (71) hide show
  1. package/package.json +1 -1
  2. package/packages/core/codec/encoder.d.ts +1 -1
  3. package/packages/core/codec/encoder.d.ts.map +1 -1
  4. package/packages/core/codec/encoder.js +3 -2
  5. package/packages/core/pvm-interface/pvm.d.ts +2 -0
  6. package/packages/core/pvm-interface/pvm.d.ts.map +1 -1
  7. package/packages/jam/block/work-package.d.ts +7 -7
  8. package/packages/jam/block/work-package.d.ts.map +1 -1
  9. package/packages/jam/block/work-package.js +12 -12
  10. package/packages/jam/executor/pvm-executor.d.ts +9 -2
  11. package/packages/jam/executor/pvm-executor.d.ts.map +1 -1
  12. package/packages/jam/executor/pvm-executor.js +15 -0
  13. package/packages/jam/in-core/externalities/refine.d.ts +18 -8
  14. package/packages/jam/in-core/externalities/refine.d.ts.map +1 -1
  15. package/packages/jam/in-core/externalities/refine.js +86 -7
  16. package/packages/jam/in-core/externalities/refine.test.js +167 -2
  17. package/packages/jam/in-core/in-core.d.ts +7 -22
  18. package/packages/jam/in-core/in-core.d.ts.map +1 -1
  19. package/packages/jam/in-core/in-core.js +16 -186
  20. package/packages/jam/in-core/in-core.test.js +47 -15
  21. package/packages/jam/in-core/is-authorized.d.ts +33 -0
  22. package/packages/jam/in-core/is-authorized.d.ts.map +1 -0
  23. package/packages/jam/in-core/is-authorized.js +72 -0
  24. package/packages/jam/in-core/is-authorized.test.d.ts +2 -0
  25. package/packages/jam/in-core/is-authorized.test.d.ts.map +1 -0
  26. package/packages/jam/in-core/is-authorized.test.js +125 -0
  27. package/packages/jam/in-core/refine.d.ts +34 -0
  28. package/packages/jam/in-core/refine.d.ts.map +1 -0
  29. package/packages/jam/in-core/refine.js +176 -0
  30. package/packages/jam/in-core/refine.test.d.ts +2 -0
  31. package/packages/jam/in-core/refine.test.d.ts.map +1 -0
  32. package/packages/jam/in-core/refine.test.js +6 -0
  33. package/packages/jam/jam-host-calls/accumulate/bless.js +9 -9
  34. package/packages/jam/jam-host-calls/externalities/partial-state.d.ts +1 -1
  35. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts +1 -1
  36. package/packages/jam/jam-host-calls/externalities/refine-externalities.d.ts.map +1 -1
  37. package/packages/jam/jam-host-calls/general/fetch.d.ts +164 -103
  38. package/packages/jam/jam-host-calls/general/fetch.d.ts.map +1 -1
  39. package/packages/jam/jam-host-calls/general/fetch.js +117 -23
  40. package/packages/jam/jam-host-calls/general/fetch.test.js +100 -66
  41. package/packages/jam/jamnp-s/protocol/ce-133-work-package-submission.d.ts +2 -2
  42. package/packages/jam/transition/accumulate/accumulate.js +2 -2
  43. package/packages/jam/transition/accumulate/accumulation-result-merge-utils.js +48 -39
  44. package/packages/jam/transition/externalities/accumulate-externalities.d.ts +2 -2
  45. package/packages/jam/transition/externalities/accumulate-externalities.d.ts.map +1 -1
  46. package/packages/jam/transition/externalities/accumulate-externalities.js +20 -7
  47. package/packages/jam/transition/externalities/accumulate-externalities.test.js +74 -4
  48. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts +19 -0
  49. package/packages/jam/transition/externalities/accumulate-fetch-externalities.d.ts.map +1 -0
  50. package/packages/jam/transition/externalities/accumulate-fetch-externalities.js +45 -0
  51. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts +2 -0
  52. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.d.ts.map +1 -0
  53. package/packages/jam/transition/externalities/accumulate-fetch-externalities.test.js +192 -0
  54. package/packages/jam/transition/externalities/fetch-externalities.d.ts +3 -39
  55. package/packages/jam/transition/externalities/fetch-externalities.d.ts.map +1 -1
  56. package/packages/jam/transition/externalities/fetch-externalities.js +2 -88
  57. package/packages/jam/transition/externalities/index.d.ts +3 -0
  58. package/packages/jam/transition/externalities/index.d.ts.map +1 -1
  59. package/packages/jam/transition/externalities/index.js +3 -0
  60. package/packages/jam/transition/externalities/is-authorized-fetch-externalities.d.ts +22 -0
  61. package/packages/jam/transition/externalities/is-authorized-fetch-externalities.d.ts.map +1 -0
  62. package/packages/jam/transition/externalities/is-authorized-fetch-externalities.js +41 -0
  63. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts +23 -0
  64. package/packages/jam/transition/externalities/refine-fetch-externalities.d.ts.map +1 -0
  65. package/packages/jam/transition/externalities/refine-fetch-externalities.js +56 -0
  66. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts +2 -0
  67. package/packages/jam/transition/externalities/refine-fetch-externalities.test.d.ts.map +1 -0
  68. package/packages/jam/transition/externalities/refine-fetch-externalities.test.js +32 -0
  69. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts +0 -2
  70. package/packages/jam/transition/externalities/fetch-externalities.test.d.ts.map +0 -1
  71. package/packages/jam/transition/externalities/fetch-externalities.test.js +0 -254
@@ -6,7 +6,7 @@ import { asKnownSize, FixedSizeArray, HashDictionary } from "#@typeberry/collect
6
6
  import { tinyChainSpec } from "#@typeberry/config";
7
7
  import { BANDERSNATCH_KEY_BYTES, BLS_KEY_BYTES, ED25519_KEY_BYTES } from "#@typeberry/crypto";
8
8
  import { Blake2b, HASH_SIZE } from "#@typeberry/hash";
9
- import { EjectError, ForgetPreimageError, NewServiceError, PartiallyUpdatedState, PendingTransfer, PreimageStatusKind, ProvidePreimageError, RequestPreimageError, TRANSFER_MEMO_BYTES, TransferError, UnprivilegedError, UpdatePrivilegesError, writeServiceIdAsLeBytes, } from "#@typeberry/jam-host-calls";
9
+ import { CURRENT_SERVICE_ID, EjectError, ForgetPreimageError, NewServiceError, PartiallyUpdatedState, PendingTransfer, PreimageStatusKind, ProvidePreimageError, RequestPreimageError, TRANSFER_MEMO_BYTES, TransferError, UnprivilegedError, UpdatePrivilegesError, writeServiceIdAsLeBytes, } from "#@typeberry/jam-host-calls";
10
10
  import { tryAsU32, tryAsU64 } from "#@typeberry/numbers";
11
11
  import { AUTHORIZATION_QUEUE_SIZE, InMemoryService, InMemoryState, LookupHistoryItem, PreimageItem, PrivilegedServices, ServiceAccountInfo, StorageItem, tryAsLookupHistorySlots, tryAsPerCore, UpdatePreimage, UpdateService, VALIDATOR_META_BYTES, ValidatorData, } from "#@typeberry/state";
12
12
  import { testState } from "#@typeberry/state/test.utils.js";
@@ -663,16 +663,28 @@ describe("PartialState.upgradeService", () => {
663
663
  });
664
664
  });
665
665
  describe("PartialState.updateAuthorizationQueue", () => {
666
- it("should update the authorization queue for a given core index", () => {
666
+ it("should update the authorization queue and transfer the assigner for the given core", () => {
667
667
  const state = partiallyUpdatedState();
668
+ const initialPrivileged = state.state.privilegedServices;
668
669
  const partialState = new AccumulateExternalities(tinyChainSpec, blake2b, state, tryAsServiceId(0), tryAsServiceId(10), tryAsTimeSlot(16));
669
670
  const coreIndex = tryAsCoreIndex(0);
670
- const assigners = tryAsServiceId(0);
671
+ const newAssigner = tryAsServiceId(99);
671
672
  const queue = FixedSizeArray.new(Array.from({ length: AUTHORIZATION_QUEUE_SIZE }, () => Bytes.fill(HASH_SIZE, 0xee).asOpaque()), AUTHORIZATION_QUEUE_SIZE);
672
673
  // when
673
- partialState.updateAuthorizationQueue(coreIndex, queue, assigners);
674
+ const result = partialState.updateAuthorizationQueue(coreIndex, queue, newAssigner);
674
675
  // then
676
+ deepEqual(result, Result.ok(OK));
675
677
  assert.deepStrictEqual(state.stateUpdate.authorizationQueues.get(coreIndex), queue);
678
+ // the privilegedServices update must be written, with only the targeted
679
+ // core's assigner transferred; all other fields must be preserved.
680
+ const updated = state.stateUpdate.privilegedServices;
681
+ assert.ok(updated !== null, "stateUpdate.privilegedServices should be written");
682
+ assert.strictEqual(updated.assigners[0], newAssigner);
683
+ assert.strictEqual(updated.assigners[1], initialPrivileged.assigners[1]);
684
+ assert.strictEqual(updated.manager, initialPrivileged.manager);
685
+ assert.strictEqual(updated.delegator, initialPrivileged.delegator);
686
+ assert.strictEqual(updated.registrar, initialPrivileged.registrar);
687
+ assert.strictEqual(updated.autoAccumulateServices, initialPrivileged.autoAccumulateServices);
676
688
  });
677
689
  it("should return InvalidServiceId when given auth manager is invalid", () => {
678
690
  const state = partiallyUpdatedState();
@@ -685,6 +697,8 @@ describe("PartialState.updateAuthorizationQueue", () => {
685
697
  // then
686
698
  deepEqual(result, Result.error(UpdatePrivilegesError.InvalidServiceId, () => "New auth manager is null for core 0"));
687
699
  assert.deepStrictEqual(state.stateUpdate.authorizationQueues.get(coreIndex), undefined);
700
+ // no partial privilegedServices write on error
701
+ assert.strictEqual(state.stateUpdate.privilegedServices, null);
688
702
  });
689
703
  it("should return UnprivilegedService when current service is not privileged", () => {
690
704
  const state = partiallyUpdatedState();
@@ -701,6 +715,8 @@ describe("PartialState.updateAuthorizationQueue", () => {
701
715
  // then
702
716
  deepEqual(result, Result.error(UpdatePrivilegesError.UnprivilegedService, () => "Service 0 not assigner for core 0 (expected: 1)"));
703
717
  assert.deepStrictEqual(state.stateUpdate.authorizationQueues.get(coreIndex), undefined);
718
+ // no partial privilegedServices write on error
719
+ assert.strictEqual(state.stateUpdate.privilegedServices, null);
704
720
  });
705
721
  it("should return UnprivilegedService before InvalidServiceId if given auth manager is incorrect, but current servis is also unprivileged", () => {
706
722
  const state = partiallyUpdatedState();
@@ -717,6 +733,60 @@ describe("PartialState.updateAuthorizationQueue", () => {
717
733
  // then
718
734
  deepEqual(result, Result.error(UpdatePrivilegesError.UnprivilegedService, () => "Service 0 not assigner for core 0 (expected: 1)"));
719
735
  assert.deepStrictEqual(state.stateUpdate.authorizationQueues.get(coreIndex), undefined);
736
+ // no partial privilegedServices write on error
737
+ assert.strictEqual(state.stateUpdate.privilegedServices, null);
738
+ });
739
+ it("should succeed on a self-transfer using CURRENT_SERVICE_ID", () => {
740
+ const state = partiallyUpdatedState();
741
+ // inject a service info for CURRENT_SERVICE_ID so it can act as the
742
+ // current (and assigning) service on core 0
743
+ const baseService = state.state.services.get(tryAsServiceId(0));
744
+ if (baseService === undefined) {
745
+ throw new Error("Invalid service!");
746
+ }
747
+ state.state.services.set(CURRENT_SERVICE_ID, new InMemoryService(CURRENT_SERVICE_ID, {
748
+ info: baseService.data.info,
749
+ preimages: HashDictionary.new(),
750
+ lookupHistory: HashDictionary.new(),
751
+ storage: new Map(),
752
+ }));
753
+ state.state.privilegedServices = PrivilegedServices.create({
754
+ ...state.state.privilegedServices,
755
+ assigners: asOpaqueType(FixedSizeArray.new([CURRENT_SERVICE_ID, tryAsServiceId(0)], tinyChainSpec.coresCount)),
756
+ });
757
+ const partialState = new AccumulateExternalities(tinyChainSpec, blake2b, state, CURRENT_SERVICE_ID, tryAsServiceId(10), tryAsTimeSlot(16));
758
+ const coreIndex = tryAsCoreIndex(0);
759
+ const queue = FixedSizeArray.new(Array.from({ length: AUTHORIZATION_QUEUE_SIZE }, () => Bytes.fill(HASH_SIZE, 0xee).asOpaque()), AUTHORIZATION_QUEUE_SIZE);
760
+ // when
761
+ const result = partialState.updateAuthorizationQueue(coreIndex, queue, CURRENT_SERVICE_ID);
762
+ // then
763
+ deepEqual(result, Result.ok(OK));
764
+ assert.deepStrictEqual(state.stateUpdate.authorizationQueues.get(coreIndex), queue);
765
+ const updated = state.stateUpdate.privilegedServices;
766
+ assert.ok(updated !== null, "stateUpdate.privilegedServices should be written");
767
+ assert.strictEqual(updated.assigners[0], CURRENT_SERVICE_ID);
768
+ assert.strictEqual(updated.assigners[1], tryAsServiceId(0));
769
+ });
770
+ it("should prevent the previous assigner from re-assigning after transfer", () => {
771
+ const state = partiallyUpdatedState();
772
+ const partialState = new AccumulateExternalities(tinyChainSpec, blake2b, state, tryAsServiceId(0), tryAsServiceId(10), tryAsTimeSlot(16));
773
+ const coreIndex = tryAsCoreIndex(0);
774
+ const newAssigner = tryAsServiceId(99);
775
+ const firstQueue = FixedSizeArray.new(Array.from({ length: AUTHORIZATION_QUEUE_SIZE }, () => Bytes.fill(HASH_SIZE, 0xee).asOpaque()), AUTHORIZATION_QUEUE_SIZE);
776
+ const secondQueue = FixedSizeArray.new(Array.from({ length: AUTHORIZATION_QUEUE_SIZE }, () => Bytes.fill(HASH_SIZE, 0xff).asOpaque()), AUTHORIZATION_QUEUE_SIZE);
777
+ // when: first call succeeds and transfers the assigner to service 99
778
+ const first = partialState.updateAuthorizationQueue(coreIndex, firstQueue, newAssigner);
779
+ // and the previous assigner (service 0) immediately tries to re-assign
780
+ const second = partialState.updateAuthorizationQueue(coreIndex, secondQueue, tryAsServiceId(0));
781
+ // then
782
+ deepEqual(first, Result.ok(OK));
783
+ deepEqual(second, Result.error(UpdatePrivilegesError.UnprivilegedService, () => "Service 0 not assigner for core 0 (expected: 99)"));
784
+ // the first queue remains — the failing second call must not overwrite it
785
+ assert.deepStrictEqual(state.stateUpdate.authorizationQueues.get(coreIndex), firstQueue);
786
+ // and the transferred assigner is still in place
787
+ const updated = state.stateUpdate.privilegedServices;
788
+ assert.ok(updated !== null);
789
+ assert.strictEqual(updated.assigners[0], newAssigner);
720
790
  });
721
791
  });
722
792
  describe("PartialState.updatePrivilegedServices", () => {
@@ -0,0 +1,19 @@
1
+ import type { EntropyHash } from "#@typeberry/block";
2
+ import type { BytesBlob } from "#@typeberry/bytes";
3
+ import type { ChainSpec } from "#@typeberry/config";
4
+ import { general, type PendingTransfer } from "#@typeberry/jam-host-calls";
5
+ import type { U64 } from "#@typeberry/numbers";
6
+ import type { Operand } from "../accumulate/operand.js";
7
+ export declare class AccumulateFetchExternalities implements general.IAccumulateFetch {
8
+ private readonly entropyHash;
9
+ private readonly transfers;
10
+ private readonly operands;
11
+ private readonly chainSpec;
12
+ readonly context = general.FetchContext.Accumulate;
13
+ constructor(entropyHash: EntropyHash, transfers: PendingTransfer[], operands: Operand[], chainSpec: ChainSpec);
14
+ constants(): BytesBlob;
15
+ entropy(): EntropyHash;
16
+ allTransfersAndOperands(): BytesBlob | null;
17
+ oneTransferOrOperand(index: U64): BytesBlob | null;
18
+ }
19
+ //# sourceMappingURL=accumulate-fetch-externalities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accumulate-fetch-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/accumulate-fetch-externalities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AASxD,qBAAa,4BAA6B,YAAW,OAAO,CAAC,gBAAgB;IAIzE,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAN5B,QAAQ,CAAC,OAAO,mCAAmC;gBAGhC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,eAAe,EAAE,EAC5B,QAAQ,EAAE,OAAO,EAAE,EACnB,SAAS,EAAE,SAAS;IAGvC,SAAS,IAAI,SAAS;IAItB,OAAO,IAAI,WAAW;IAItB,uBAAuB,IAAI,SAAS,GAAG,IAAI;IAU3C,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;CAqBnD"}
@@ -0,0 +1,45 @@
1
+ import { Encoder } from "#@typeberry/codec";
2
+ import { general } from "#@typeberry/jam-host-calls";
3
+ import { getEncodedConstants, TRANSFER_OR_OPERAND, TRANSFERS_AND_OPERANDS, TransferOperandKind, } from "./fetch-externalities.js";
4
+ export class AccumulateFetchExternalities {
5
+ entropyHash;
6
+ transfers;
7
+ operands;
8
+ chainSpec;
9
+ context = general.FetchContext.Accumulate;
10
+ constructor(entropyHash, transfers, operands, chainSpec) {
11
+ this.entropyHash = entropyHash;
12
+ this.transfers = transfers;
13
+ this.operands = operands;
14
+ this.chainSpec = chainSpec;
15
+ }
16
+ constants() {
17
+ return getEncodedConstants(this.chainSpec);
18
+ }
19
+ entropy() {
20
+ return this.entropyHash;
21
+ }
22
+ allTransfersAndOperands() {
23
+ const transfersAndOperands = this.transfers
24
+ .map((transfer) => ({ kind: TransferOperandKind.TRANSFER, value: transfer }))
25
+ .concat(this.operands.map((operand) => ({ kind: TransferOperandKind.OPERAND, value: operand })));
26
+ return Encoder.encodeObject(TRANSFERS_AND_OPERANDS, transfersAndOperands, this.chainSpec);
27
+ }
28
+ oneTransferOrOperand(index) {
29
+ if (index >= this.transfers.length + this.operands.length) {
30
+ return null;
31
+ }
32
+ // Transfers-first ordering, consistent with allTransfersAndOperands()
33
+ const kind = index < this.transfers.length ? TransferOperandKind.TRANSFER : TransferOperandKind.OPERAND;
34
+ const transferOrOperand = kind === TransferOperandKind.TRANSFER
35
+ ? { kind: TransferOperandKind.TRANSFER, value: this.transfers[Number(index)] }
36
+ : {
37
+ kind: TransferOperandKind.OPERAND,
38
+ value: this.operands[Number(index) - this.transfers.length],
39
+ };
40
+ if (transferOrOperand.value === undefined) {
41
+ return null;
42
+ }
43
+ return Encoder.encodeObject(TRANSFER_OR_OPERAND, transferOrOperand, this.chainSpec);
44
+ }
45
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=accumulate-fetch-externalities.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accumulate-fetch-externalities.test.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/accumulate-fetch-externalities.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,192 @@
1
+ import assert from "node:assert";
2
+ import { describe, it } from "node:test";
3
+ import { tryAsServiceGas, tryAsServiceId } from "#@typeberry/block";
4
+ import { WorkExecResult } from "#@typeberry/block/work-result.js";
5
+ import { Bytes, BytesBlob } from "#@typeberry/bytes";
6
+ import { codec, Encoder } from "#@typeberry/codec";
7
+ import { fullChainSpec, tinyChainSpec } from "#@typeberry/config";
8
+ import { HASH_SIZE } from "#@typeberry/hash";
9
+ import { TRANSFER_MEMO_BYTES } from "#@typeberry/jam-host-calls/externalities/partial-state.js";
10
+ import { PendingTransfer } from "#@typeberry/jam-host-calls/externalities/pending-transfer.js";
11
+ import { tryAsU64 } from "#@typeberry/numbers";
12
+ import { Operand } from "../accumulate/operand.js";
13
+ import { AccumulateFetchExternalities } from "./accumulate-fetch-externalities.js";
14
+ import { TRANSFER_OR_OPERAND, TransferOperandKind } from "./fetch-externalities.js";
15
+ describe("AccumulateFetchExternalities", () => {
16
+ const prepareOperands = (length) => {
17
+ const operands = [];
18
+ for (let i = 0; i < length; i++) {
19
+ operands.push(Operand.create({
20
+ authorizationOutput: BytesBlob.empty(),
21
+ authorizerHash: Bytes.fill(HASH_SIZE, i + 1).asOpaque(),
22
+ exportsRoot: Bytes.fill(HASH_SIZE, i + 2).asOpaque(),
23
+ hash: Bytes.fill(HASH_SIZE, i + 4).asOpaque(),
24
+ payloadHash: Bytes.fill(HASH_SIZE, i + 5).asOpaque(),
25
+ result: WorkExecResult.ok(BytesBlob.empty()),
26
+ gas: tryAsServiceGas(1_000),
27
+ }));
28
+ }
29
+ return operands;
30
+ };
31
+ const prepareTransfers = (length) => {
32
+ const transfers = [];
33
+ for (let i = 0; i < length; i++) {
34
+ transfers.push(PendingTransfer.create({
35
+ amount: tryAsU64(1000),
36
+ source: tryAsServiceId(i),
37
+ destination: tryAsServiceId(i + 1),
38
+ gas: tryAsServiceGas(10),
39
+ memo: Bytes.fill(TRANSFER_MEMO_BYTES, 0),
40
+ }));
41
+ }
42
+ return transfers;
43
+ };
44
+ // allTransfersAndOperands: transfers first, then operands
45
+ const toAllTransfersAndOperands = (operands, transfers) => {
46
+ return [
47
+ ...transfers.map((t) => ({ kind: TransferOperandKind.TRANSFER, value: t })),
48
+ ...operands.map((o) => ({ kind: TransferOperandKind.OPERAND, value: o })),
49
+ ];
50
+ };
51
+ // oneTransferOrOperand: transfers first, then operands (same as allTransfersAndOperands)
52
+ const toOneTransferOrOperandAt = (operands, transfers, index) => {
53
+ if (index >= transfers.length + operands.length) {
54
+ return null;
55
+ }
56
+ if (index < transfers.length) {
57
+ return { kind: TransferOperandKind.TRANSFER, value: transfers[index] };
58
+ }
59
+ return { kind: TransferOperandKind.OPERAND, value: operands[index - transfers.length] };
60
+ };
61
+ const encodeOneTransferOrOperand = (item, chainSpec) => {
62
+ if (item === null) {
63
+ return null;
64
+ }
65
+ return Encoder.encodeObject(TRANSFER_OR_OPERAND, item, chainSpec);
66
+ };
67
+ const prepareAccumulateData = ({ chainSpec, operands, entropy, transfers, }) => {
68
+ const defaultChainSpec = tinyChainSpec;
69
+ const defaultEntropy = Bytes.zero(HASH_SIZE).asOpaque();
70
+ const defaultOperands = [];
71
+ const defaultTransfers = [];
72
+ return new AccumulateFetchExternalities(entropy ?? defaultEntropy, transfers ?? defaultTransfers, operands ?? defaultOperands, chainSpec ?? defaultChainSpec);
73
+ };
74
+ it("should return different constants for different chain specs", () => {
75
+ const tinyFetchExternalities = prepareAccumulateData({ chainSpec: tinyChainSpec });
76
+ const fullFetchExternalities = prepareAccumulateData({ chainSpec: fullChainSpec });
77
+ const tinyConstants = tinyFetchExternalities.constants();
78
+ const fullConstants = fullFetchExternalities.constants();
79
+ assert.notStrictEqual(tinyConstants.length, 0);
80
+ assert.notStrictEqual(fullConstants.length, 0);
81
+ assert.notDeepStrictEqual(tinyConstants, fullConstants);
82
+ });
83
+ it("should return entropy hash", () => {
84
+ const expectedEntropy = Bytes.fill(HASH_SIZE, 5).asOpaque();
85
+ const fetchExternalities = prepareAccumulateData({ entropy: expectedEntropy });
86
+ const entropy = fetchExternalities.entropy();
87
+ assert.deepStrictEqual(entropy, expectedEntropy);
88
+ });
89
+ it("should return all transfers and operands", () => {
90
+ const operands = prepareOperands(3);
91
+ const transfers = prepareTransfers(2);
92
+ const chainSpec = tinyChainSpec;
93
+ const expected = toAllTransfersAndOperands(operands, transfers);
94
+ const encodedExpected = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), expected, chainSpec);
95
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
96
+ const result = fetchExternalities.allTransfersAndOperands();
97
+ assert.deepStrictEqual(result, encodedExpected);
98
+ });
99
+ it("should return empty encoded sequence when no transfers and no operands", () => {
100
+ const chainSpec = tinyChainSpec;
101
+ const encodedExpected = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), [], chainSpec);
102
+ const fetchExternalities = prepareAccumulateData({ operands: [], transfers: [], chainSpec });
103
+ const result = fetchExternalities.allTransfersAndOperands();
104
+ assert.deepStrictEqual(result, encodedExpected);
105
+ });
106
+ it("should return one transfer by index (first range)", () => {
107
+ const operands = prepareOperands(3);
108
+ const transfers = prepareTransfers(2);
109
+ const chainSpec = tinyChainSpec;
110
+ const encodedExpected = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, transfers, 0), chainSpec);
111
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
112
+ // Transfers come first (indices 0..1), then operands (indices 2..4)
113
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(0));
114
+ assert.deepStrictEqual(result, encodedExpected);
115
+ });
116
+ it("should return one operand by index (second range)", () => {
117
+ const operands = prepareOperands(3);
118
+ const transfers = prepareTransfers(2);
119
+ const chainSpec = tinyChainSpec;
120
+ const encodedExpected = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, transfers, 2), chainSpec);
121
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
122
+ // Operands start after transfers, so index 2 is the first operand
123
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(2));
124
+ assert.deepStrictEqual(result, encodedExpected);
125
+ });
126
+ it("should return null when index is out of bounds", () => {
127
+ const operands = prepareOperands(3);
128
+ const transfers = prepareTransfers(2);
129
+ const chainSpec = tinyChainSpec;
130
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
131
+ // Total items: 3 operands + 2 transfers = 5, so index 5 is out of bounds
132
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(5));
133
+ assert.strictEqual(result, null);
134
+ });
135
+ it("should return null when index is far out of bounds", () => {
136
+ const operands = prepareOperands(3);
137
+ const transfers = prepareTransfers(2);
138
+ const chainSpec = tinyChainSpec;
139
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
140
+ const result = fetchExternalities.oneTransferOrOperand(tryAsU64(153));
141
+ assert.strictEqual(result, null);
142
+ });
143
+ it("should have consistent encoding between all and one", () => {
144
+ const operands = prepareOperands(2);
145
+ const transfers = prepareTransfers(2);
146
+ const chainSpec = tinyChainSpec;
147
+ const allItems = toAllTransfersAndOperands(operands, transfers);
148
+ const encodedAll = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), allItems, chainSpec);
149
+ const fetchExternalities = prepareAccumulateData({ operands, transfers, chainSpec });
150
+ const all = fetchExternalities.allTransfersAndOperands();
151
+ assert.deepStrictEqual(all, encodedAll);
152
+ for (let i = 0; i < operands.length + transfers.length; i++) {
153
+ const one = fetchExternalities.oneTransferOrOperand(tryAsU64(i));
154
+ const encodedOne = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, transfers, i), chainSpec);
155
+ assert.deepStrictEqual(one, encodedOne, `Mismatch at index ${i}`);
156
+ }
157
+ const outOfRange = fetchExternalities.oneTransferOrOperand(tryAsU64(operands.length + transfers.length));
158
+ assert.strictEqual(outOfRange, null);
159
+ });
160
+ it("should handle only operands without transfers", () => {
161
+ const operands = prepareOperands(5);
162
+ const chainSpec = tinyChainSpec;
163
+ const allItems = toAllTransfersAndOperands(operands, []);
164
+ const encodedAll = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), allItems, chainSpec);
165
+ const fetchExternalities = prepareAccumulateData({ operands, transfers: [], chainSpec });
166
+ const result = fetchExternalities.allTransfersAndOperands();
167
+ assert.deepStrictEqual(result, encodedAll);
168
+ for (let i = 0; i < operands.length; i++) {
169
+ const one = fetchExternalities.oneTransferOrOperand(tryAsU64(i));
170
+ const encodedOne = encodeOneTransferOrOperand(toOneTransferOrOperandAt(operands, [], i), chainSpec);
171
+ assert.deepStrictEqual(one, encodedOne, `Mismatch at operand index ${i}`);
172
+ }
173
+ const outOfRange = fetchExternalities.oneTransferOrOperand(tryAsU64(operands.length));
174
+ assert.strictEqual(outOfRange, null);
175
+ });
176
+ it("should handle only transfers without operands", () => {
177
+ const transfers = prepareTransfers(5);
178
+ const chainSpec = tinyChainSpec;
179
+ const allItems = toAllTransfersAndOperands([], transfers);
180
+ const encodedAll = Encoder.encodeObject(codec.sequenceVarLen(TRANSFER_OR_OPERAND), allItems, chainSpec);
181
+ const fetchExternalities = prepareAccumulateData({ operands: [], transfers, chainSpec });
182
+ const result = fetchExternalities.allTransfersAndOperands();
183
+ assert.deepStrictEqual(result, encodedAll);
184
+ for (let i = 0; i < transfers.length; i++) {
185
+ const one = fetchExternalities.oneTransferOrOperand(tryAsU64(i));
186
+ const encodedOne = encodeOneTransferOrOperand(toOneTransferOrOperandAt([], transfers, i), chainSpec);
187
+ assert.deepStrictEqual(one, encodedOne, `Mismatch at transfer index ${i}`);
188
+ }
189
+ const outOfRange = fetchExternalities.oneTransferOrOperand(tryAsU64(transfers.length));
190
+ assert.strictEqual(outOfRange, null);
191
+ });
192
+ });
@@ -1,8 +1,6 @@
1
- import type { EntropyHash } from "#@typeberry/block";
2
1
  import type { BytesBlob } from "#@typeberry/bytes";
3
2
  import type { ChainSpec } from "#@typeberry/config";
4
- import { type general, PendingTransfer } from "#@typeberry/jam-host-calls";
5
- import { type U64 } from "#@typeberry/numbers";
3
+ import { PendingTransfer } from "#@typeberry/jam-host-calls";
6
4
  import { Operand } from "../accumulate/operand.js";
7
5
  export declare enum TransferOperandKind {
8
6
  OPERAND = 0,
@@ -16,40 +14,6 @@ export type TransferOrOperand = {
16
14
  value: PendingTransfer;
17
15
  };
18
16
  export declare const TRANSFER_OR_OPERAND: import("@typeberry/codec").Descriptor<TransferOrOperand, TransferOrOperand>;
19
- declare enum FetchContext {
20
- Accumulate = 0,
21
- Refine = 1
22
- }
23
- type AccumulateFetchData = {
24
- context: FetchContext.Accumulate;
25
- entropy: EntropyHash;
26
- transfers: PendingTransfer[];
27
- operands: Operand[];
28
- };
29
- type RefineFetchData = {
30
- context: FetchContext.Refine;
31
- entropy: undefined;
32
- };
33
- export declare class FetchExternalities implements general.IFetchExternalities {
34
- private fetchData;
35
- private chainSpec;
36
- private constructor();
37
- static createForAccumulate(fetchData: Omit<AccumulateFetchData, "context">, chainSpec: ChainSpec): FetchExternalities;
38
- static createForRefine(fetchData: Omit<RefineFetchData, "context">, chainSpec: ChainSpec): FetchExternalities;
39
- constants(): BytesBlob;
40
- entropy(): BytesBlob | null;
41
- authorizerTrace(): BytesBlob | null;
42
- workItemExtrinsic(_workItem: U64 | null, _index: U64): BytesBlob | null;
43
- workItemImport(_workItem: U64 | null, _index: U64): BytesBlob | null;
44
- workPackage(): BytesBlob | null;
45
- authorizer(): BytesBlob | null;
46
- authorizationToken(): BytesBlob | null;
47
- refineContext(): BytesBlob | null;
48
- allWorkItems(): BytesBlob | null;
49
- oneWorkItem(_workItem: U64): BytesBlob | null;
50
- workItemPayload(_workItem: U64): BytesBlob | null;
51
- allTransfersAndOperands(): BytesBlob | null;
52
- oneTransferOrOperand(index: U64): BytesBlob | null;
53
- }
54
- export {};
17
+ export declare const TRANSFERS_AND_OPERANDS: import("@typeberry/codec").Descriptor<TransferOrOperand[], import("@typeberry/codec").SequenceView<TransferOrOperand, TransferOrOperand>>;
18
+ export declare function getEncodedConstants(chainSpec: ChainSpec): BytesBlob;
55
19
  //# sourceMappingURL=fetch-externalities.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"fetch-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/fetch-externalities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,KAAK,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC1E,OAAO,EAAgC,KAAK,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAQ5E,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,oBAAY,mBAAmB;IAC7B,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC;IACnC,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AAEN,eAAO,MAAM,mBAAmB,6EAG9B,CAAC;AA2FH,aAAK,YAAY;IACf,UAAU,IAAI;IACd,MAAM,IAAI;CACX;AAED,KAAK,mBAAmB,GAAG;IACzB,OAAO,EAAE,YAAY,CAAC,UAAU,CAAC;IACjC,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,eAAe,EAAE,CAAC;IAC7B,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB,CAAC;AAEF,KAAK,eAAe,GAAG;IACrB,OAAO,EAAE,YAAY,CAAC,MAAM,CAAC;IAE7B,OAAO,EAAE,SAAS,CAAC;CACpB,CAAC;AAOF,qBAAa,kBAAmB,YAAW,OAAO,CAAC,mBAAmB;IAElE,OAAO,CAAC,SAAS;IACjB,OAAO,CAAC,SAAS;IAFnB,OAAO;IAKP,MAAM,CAAC,mBAAmB,CACxB,SAAS,EAAE,IAAI,CAAC,mBAAmB,EAAE,SAAS,CAAC,EAC/C,SAAS,EAAE,SAAS,GACnB,kBAAkB;IAIrB,MAAM,CAAC,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,SAAS,EAAE,SAAS,GAAG,kBAAkB;IAI7G,SAAS,IAAI,SAAS;IAItB,OAAO,IAAI,SAAS,GAAG,IAAI;IAS3B,eAAe,IAAI,SAAS,GAAG,IAAI;IAInC,iBAAiB,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAIvE,cAAc,CAAC,SAAS,EAAE,GAAG,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAIpE,WAAW,IAAI,SAAS,GAAG,IAAI;IAI/B,UAAU,IAAI,SAAS,GAAG,IAAI;IAI9B,kBAAkB,IAAI,SAAS,GAAG,IAAI;IAItC,aAAa,IAAI,SAAS,GAAG,IAAI;IAIjC,YAAY,IAAI,SAAS,GAAG,IAAI;IAIhC,WAAW,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAI7C,eAAe,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAIjD,uBAAuB,IAAI,SAAS,GAAG,IAAI;IAa3C,oBAAoB,CAAC,KAAK,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;CAuBnD"}
1
+ {"version":3,"file":"fetch-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/fetch-externalities.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAS5D,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAC;AAInD,oBAAY,mBAAmB;IAC7B,OAAO,IAAI;IACX,QAAQ,IAAI;CACb;AAED,MAAM,MAAM,iBAAiB,GACzB;IACE,IAAI,EAAE,mBAAmB,CAAC,OAAO,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC;CAChB,GACD;IACE,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC;IACnC,KAAK,EAAE,eAAe,CAAC;CACxB,CAAC;AAEN,eAAO,MAAM,mBAAmB,6EAG9B,CAAC;AAEH,eAAO,MAAM,sBAAsB,2IAA4C,CAAC;AA0ChF,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,SAAS,aA6CvD"}
@@ -17,7 +17,7 @@ export const TRANSFER_OR_OPERAND = codec.union("TransferOrOperand", {
17
17
  [TransferOperandKind.OPERAND]: codec.object({ value: Operand.Codec }),
18
18
  [TransferOperandKind.TRANSFER]: codec.object({ value: PendingTransfer.Codec }),
19
19
  });
20
- const TRANSFERS_AND_OPERANDS = codec.sequenceVarLen(TRANSFER_OR_OPERAND);
20
+ export const TRANSFERS_AND_OPERANDS = codec.sequenceVarLen(TRANSFER_OR_OPERAND);
21
21
  // https://github.com/gavofyork/graypaper/pull/414
22
22
  // 0.7.0 encoding is used for prior versions as well.
23
23
  const CONSTANTS_CODEC = codec.object({
@@ -56,7 +56,7 @@ const CONSTANTS_CODEC = codec.object({
56
56
  Y: codec.u32,
57
57
  });
58
58
  const encodedConstantsCache = new Map();
59
- function getEncodedConstants(chainSpec) {
59
+ export function getEncodedConstants(chainSpec) {
60
60
  const constsFromCache = encodedConstantsCache.get(chainSpec);
61
61
  if (constsFromCache !== undefined) {
62
62
  return constsFromCache;
@@ -99,89 +99,3 @@ function getEncodedConstants(chainSpec) {
99
99
  encodedConstantsCache.set(chainSpec, encodedConsts);
100
100
  return encodedConsts;
101
101
  }
102
- var FetchContext;
103
- (function (FetchContext) {
104
- FetchContext[FetchContext["Accumulate"] = 0] = "Accumulate";
105
- FetchContext[FetchContext["Refine"] = 1] = "Refine";
106
- })(FetchContext || (FetchContext = {}));
107
- export class FetchExternalities {
108
- fetchData;
109
- chainSpec;
110
- constructor(fetchData, chainSpec) {
111
- this.fetchData = fetchData;
112
- this.chainSpec = chainSpec;
113
- }
114
- static createForAccumulate(fetchData, chainSpec) {
115
- return new FetchExternalities({ context: FetchContext.Accumulate, ...fetchData }, chainSpec);
116
- }
117
- static createForRefine(fetchData, chainSpec) {
118
- return new FetchExternalities({ context: FetchContext.Refine, ...fetchData }, chainSpec);
119
- }
120
- constants() {
121
- return getEncodedConstants(this.chainSpec);
122
- }
123
- entropy() {
124
- const { entropy } = this.fetchData;
125
- if (entropy === undefined) {
126
- return null;
127
- }
128
- return entropy.asOpaque();
129
- }
130
- authorizerTrace() {
131
- return null;
132
- }
133
- workItemExtrinsic(_workItem, _index) {
134
- return null;
135
- }
136
- workItemImport(_workItem, _index) {
137
- return null;
138
- }
139
- workPackage() {
140
- return null;
141
- }
142
- authorizer() {
143
- return null;
144
- }
145
- authorizationToken() {
146
- return null;
147
- }
148
- refineContext() {
149
- return null;
150
- }
151
- allWorkItems() {
152
- return null;
153
- }
154
- oneWorkItem(_workItem) {
155
- return null;
156
- }
157
- workItemPayload(_workItem) {
158
- return null;
159
- }
160
- allTransfersAndOperands() {
161
- if (this.fetchData.context === FetchContext.Accumulate) {
162
- const { transfers, operands } = this.fetchData;
163
- const transfersAndOperands = transfers
164
- .map((transfer) => ({ kind: TransferOperandKind.TRANSFER, value: transfer }))
165
- .concat(operands.map((operand) => ({ kind: TransferOperandKind.OPERAND, value: operand })));
166
- return Encoder.encodeObject(TRANSFERS_AND_OPERANDS, transfersAndOperands, this.chainSpec);
167
- }
168
- return null;
169
- }
170
- oneTransferOrOperand(index) {
171
- if (this.fetchData.context === FetchContext.Accumulate) {
172
- const { operands, transfers } = this.fetchData;
173
- if (index >= operands.length + transfers.length) {
174
- return null;
175
- }
176
- const kind = index < operands.length ? TransferOperandKind.OPERAND : TransferOperandKind.TRANSFER;
177
- const transferOrOperand = kind === TransferOperandKind.OPERAND
178
- ? { kind: TransferOperandKind.OPERAND, value: operands[Number(index)] }
179
- : { kind: TransferOperandKind.TRANSFER, value: transfers[Number(index) - operands.length] };
180
- if (transferOrOperand.value === undefined) {
181
- return null;
182
- }
183
- return Encoder.encodeObject(TRANSFER_OR_OPERAND, transferOrOperand, this.chainSpec);
184
- }
185
- return null;
186
- }
187
- }
@@ -1,3 +1,6 @@
1
1
  export * from "./accumulate-externalities.js";
2
+ export * from "./accumulate-fetch-externalities.js";
2
3
  export * from "./fetch-externalities.js";
4
+ export * from "./is-authorized-fetch-externalities.js";
5
+ export * from "./refine-fetch-externalities.js";
3
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAC;AAC9C,cAAc,qCAAqC,CAAC;AACpD,cAAc,0BAA0B,CAAC;AACzC,cAAc,wCAAwC,CAAC;AACvD,cAAc,iCAAiC,CAAC"}
@@ -1,2 +1,5 @@
1
1
  export * from "./accumulate-externalities.js";
2
+ export * from "./accumulate-fetch-externalities.js";
2
3
  export * from "./fetch-externalities.js";
4
+ export * from "./is-authorized-fetch-externalities.js";
5
+ export * from "./refine-fetch-externalities.js";
@@ -0,0 +1,22 @@
1
+ import { BytesBlob } from "#@typeberry/bytes";
2
+ import type { ChainSpec } from "#@typeberry/config";
3
+ import { general } from "#@typeberry/jam-host-calls";
4
+ import type { U64 } from "#@typeberry/numbers";
5
+ export declare class IsAuthorizedFetchExternalities implements general.IIsAuthorizedFetch {
6
+ private readonly chainSpec;
7
+ private readonly params;
8
+ readonly context = general.FetchContext.IsAuthorized;
9
+ constructor(chainSpec: ChainSpec, params: {
10
+ authToken: BytesBlob;
11
+ authConfiguration: BytesBlob;
12
+ });
13
+ constants(): BytesBlob;
14
+ workPackage(): BytesBlob;
15
+ authConfiguration(): BytesBlob;
16
+ authToken(): BytesBlob;
17
+ refineContext(): BytesBlob;
18
+ allWorkItems(): BytesBlob;
19
+ oneWorkItem(_workItem: U64): BytesBlob | null;
20
+ workItemPayload(_workItem: U64): BytesBlob | null;
21
+ }
22
+ //# sourceMappingURL=is-authorized-fetch-externalities.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-authorized-fetch-externalities.d.ts","sourceRoot":"","sources":["../../../../../../packages/jam/transition/externalities/is-authorized-fetch-externalities.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAC;AACpD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAG9C,qBAAa,8BAA+B,YAAW,OAAO,CAAC,kBAAkB;IAI7E,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,QAAQ,CAAC,OAAO,qCAAqC;gBAGlC,SAAS,EAAE,SAAS,EACpB,MAAM,EAAE;QACvB,SAAS,EAAE,SAAS,CAAC;QACrB,iBAAiB,EAAE,SAAS,CAAC;KAC9B;IAGH,SAAS,IAAI,SAAS;IAKtB,WAAW,IAAI,SAAS;IAIxB,iBAAiB,IAAI,SAAS;IAI9B,SAAS,IAAI,SAAS;IAKtB,aAAa,IAAI,SAAS;IAK1B,YAAY,IAAI,SAAS;IAKzB,WAAW,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;IAK7C,eAAe,CAAC,SAAS,EAAE,GAAG,GAAG,SAAS,GAAG,IAAI;CAGlD"}
@@ -0,0 +1,41 @@
1
+ import { BytesBlob } from "#@typeberry/bytes";
2
+ import { general } from "#@typeberry/jam-host-calls";
3
+ import { getEncodedConstants } from "./fetch-externalities.js";
4
+ export class IsAuthorizedFetchExternalities {
5
+ chainSpec;
6
+ params;
7
+ context = general.FetchContext.IsAuthorized;
8
+ constructor(chainSpec, params) {
9
+ this.chainSpec = chainSpec;
10
+ this.params = params;
11
+ }
12
+ constants() {
13
+ return getEncodedConstants(this.chainSpec);
14
+ }
15
+ // TODO [ToDr] Return encoded work package E(p)
16
+ workPackage() {
17
+ return BytesBlob.empty();
18
+ }
19
+ authConfiguration() {
20
+ return this.params.authConfiguration;
21
+ }
22
+ authToken() {
23
+ return this.params.authToken;
24
+ }
25
+ // TODO [ToDr] Return encoded refinement context
26
+ refineContext() {
27
+ return BytesBlob.empty();
28
+ }
29
+ // TODO [ToDr] Return encoded work items
30
+ allWorkItems() {
31
+ return BytesBlob.empty();
32
+ }
33
+ // TODO [ToDr] Return single work item summary
34
+ oneWorkItem(_workItem) {
35
+ return null;
36
+ }
37
+ // TODO [ToDr] Return work item payload
38
+ workItemPayload(_workItem) {
39
+ return null;
40
+ }
41
+ }