@typeberry/lib 0.5.3-aa4626d → 0.5.3-edc7483

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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typeberry/lib",
3
- "version": "0.5.3-aa4626d",
3
+ "version": "0.5.3-edc7483",
4
4
  "description": "Typeberry Library",
5
5
  "main": "./bin/lib/index.js",
6
6
  "types": "./bin/lib/index.d.ts",
@@ -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;IAkClB,6CAA6C;aAC7B,WAAW,EAAE,OAAO;IACpC,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;IAhDvD,MAAM,CAAC,GAAG,CAAC,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAgB,EAChB,aAAoB,EACpB,QAAa,EACb,iBAAwB,GACzB,EAAE;QACD,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,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;IAaD,OAAO;CAkBR;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"}
1
+ {"version":3,"file":"jam-config.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/jam-config.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,UAAU,EACf,KAAK,QAAQ,EAGb,KAAK,cAAc,EACpB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,KAAK,EAAE,iBAAiB,EAAE,OAAO,EAAE,MAAM,qCAAqC,CAAC;AACtF,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAE9C,eAAO,MAAM,kBAAkB;;;;CAI9B,CAAC;AAEF;;GAEG;AACH,qBAAa,SAAS;IAqClB,6CAA6C;aAC7B,WAAW,EAAE,OAAO;IACpC,6FAA6F;aAC7E,aAAa,EAAE,OAAO;IACtC,iBAAiB;aACD,QAAQ,EAAE,MAAM;IAChC,mCAAmC;aACnB,IAAI,EAAE,iBAAiB;IACvC,4BAA4B;aACZ,UAAU,EAAE,UAAU;IACtC,wCAAwC;aACxB,GAAG,EAAE,SAAS,GAAG,IAAI;IACrC,0BAA0B;aACV,OAAO,EAAE,aAAa,GAAG,IAAI;IAC7C,iDAAiD;aACjC,QAAQ,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;IAClD,sFAAsF;aACtE,iBAAiB,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI;IArDvD,MAAM,CAAC,GAAG,CAAC,EACT,WAAW,EACX,aAAa,EACb,QAAQ,EACR,UAAU,EACV,UAAU,EACV,SAAgB,EAChB,aAAoB,EACpB,QAAa,EACb,iBAAwB,GACzB,EAAE;QACD,WAAW,CAAC,EAAE,OAAO,CAAC;QACtB,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,iBAAiB,CAAC;QAC9B,UAAU,EAAE,UAAU,CAAC;QACvB,SAAS,CAAC,EAAE,SAAS,GAAG,IAAI,CAAC;QAC7B,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;QACrC,QAAQ,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC;QACpC,sFAAsF;QACtF,iBAAiB,CAAC,EAAE,GAAG,GAAG,KAAK,GAAG,IAAI,CAAC;KACxC;IAcD,OAAO;CAoBR;AAED,6CAA6C;AAC7C,MAAM,MAAM,aAAa,GAAG;IAC1B,uCAAuC;IACvC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,kCAAkC;IAClC,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,oCAAoC;AACpC,MAAM,MAAM,SAAS,GAAG;IAGtB,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,wCAAwC;IACxC,cAAc,EAAE,cAAc,CAAC;IAC/B,2CAA2C;IAC3C,IAAI,CAAC,EAAE,aAAa,CAAC;CACtB,CAAC;AAEF,gCAAgC;AAChC,MAAM,MAAM,aAAa,GAAG;IAC1B,2BAA2B;IAC3B,GAAG,EAAE,iBAAiB,CAAC;IACvB,8CAA8C;IAC9C,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,+BAA+B;IAC/B,SAAS,EAAE,QAAQ,EAAE,CAAC;CACvB,CAAC"}
@@ -9,6 +9,7 @@ export const DEFAULT_DEV_CONFIG = {
9
9
  */
10
10
  export class JamConfig {
11
11
  isAuthoring;
12
+ isFastForward;
12
13
  nodeName;
13
14
  node;
14
15
  pvmBackend;
@@ -16,12 +17,14 @@ export class JamConfig {
16
17
  network;
17
18
  ancestry;
18
19
  devValidatorIndex;
19
- static new({ isAuthoring, nodeName, nodeConfig, pvmBackend, devConfig = null, networkConfig = null, ancestry = [], devValidatorIndex = null, }) {
20
- return new JamConfig(isAuthoring ?? false, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex);
20
+ static new({ isAuthoring, isFastForward, nodeName, nodeConfig, pvmBackend, devConfig = null, networkConfig = null, ancestry = [], devValidatorIndex = null, }) {
21
+ return new JamConfig(isAuthoring ?? false, isFastForward ?? false, nodeName, nodeConfig, pvmBackend, devConfig, networkConfig, ancestry, devValidatorIndex);
21
22
  }
22
23
  constructor(
23
24
  /** Whether we should be authoring blocks. */
24
25
  isAuthoring,
26
+ /** Fast forward mode - generate blocks as fast as possible without waiting for real time. */
27
+ isFastForward,
25
28
  /** Node name. */
26
29
  nodeName,
27
30
  /** Node starting configuration. */
@@ -37,6 +40,7 @@ export class JamConfig {
37
40
  /** Validator index for dev mode authorship. Use "all" to author as all validators. */
38
41
  devValidatorIndex) {
39
42
  this.isAuthoring = isAuthoring;
43
+ this.isFastForward = isFastForward;
40
44
  this.nodeName = nodeName;
41
45
  this.node = node;
42
46
  this.pvmBackend = pvmBackend;
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAe/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAkC,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1E,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAYhE,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChE,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAsB,IAAI,CACxB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,OAAO,CAAC,OAAO,CAAC,CAsJlB"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/jam/node/main.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAc,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,KAAK,SAAS,EAAc,MAAM,mBAAmB,CAAC;AAe/D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAkC,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAK1E,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,iBAAiB,CAAC;AAYhE,MAAM,MAAM,OAAO,GAAG;IACpB,SAAS,EAAE,SAAS,CAAC;IACrB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;IAChE,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,oBAAoB,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC/C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB,CAAC;AAEF,wBAAsB,IAAI,CACxB,MAAM,EAAE,SAAS,EACjB,WAAW,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,MAAM,EAClC,SAAS,EAAE,SAAS,GAAG,IAAI,GAC1B,OAAO,CAAC,OAAO,CAAC,CAuJlB"}
@@ -92,7 +92,7 @@ export async function main(config, withRelPath, telemetry) {
92
92
  },
93
93
  ],
94
94
  };
95
- const closeAuthorship = await initAuthorship(importer, config.isAuthoring, rootDb, baseConfig, authorshipKeys, isInMemory);
95
+ const closeAuthorship = await initAuthorship(importer, config.isAuthoring, config.isFastForward, rootDb, baseConfig, authorshipKeys, isInMemory);
96
96
  // Networking initialization
97
97
  const closeNetwork = await initNetwork(importer, rootDb, baseConfig, genesisHeaderHash, config.network, bestHeader, isInMemory);
98
98
  const api = {
@@ -128,22 +128,23 @@ export async function main(config, withRelPath, telemetry) {
128
128
  };
129
129
  return api;
130
130
  }
131
- const initAuthorship = async (importer, isAuthoring, rootDb, baseConfig, authorshipKeys, isInMemory) => {
131
+ const initAuthorship = async (importer, isAuthoring, isFastForward, rootDb, baseConfig, authorshipKeys, isInMemory) => {
132
132
  if (!isAuthoring) {
133
133
  logger.log `✍️ Authorship off: disabled`;
134
134
  return () => Promise.resolve();
135
135
  }
136
136
  logger.info `✍️ Starting block generator.`;
137
+ const workerParams = { ...authorshipKeys, isFastForward };
137
138
  const { generator, finish } = isInMemory
138
139
  ? await startBlockGenerator(DirectWorkerConfig.new({
139
140
  ...baseConfig,
140
141
  blocksDb: rootDb.getBlocksDb(),
141
142
  statesDb: rootDb.getStatesDb(),
142
- workerParams: authorshipKeys,
143
+ workerParams,
143
144
  }))
144
145
  : await spawnBlockGeneratorWorker(LmdbWorkerConfig.new({
145
146
  ...baseConfig,
146
- workerParams: authorshipKeys,
147
+ workerParams,
147
148
  }));
148
149
  // relay blocks from generator to importer
149
150
  generator.setOnBlock(async (block) => {
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAI9E,KAAK,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAkBlD,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,iBAyIlE"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/main.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAI9E,KAAK,MAAM,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC;AAkBlD,wBAAsB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,iBAgKlE"}
@@ -86,6 +86,8 @@ export async function main(config, comms) {
86
86
  }
87
87
  return Result.ok(state.sealingKeySeries);
88
88
  }
89
+ const isFastForward = config.workerParams.isFastForward;
90
+ let lastGeneratedSlot = startTimeSlot;
89
91
  while (!isFinished) {
90
92
  const hash = blocks.getBestHeaderHash();
91
93
  const state = states.getState(hash);
@@ -93,10 +95,20 @@ export async function main(config, comms) {
93
95
  if (state === null) {
94
96
  continue;
95
97
  }
96
- const time = getTime();
97
- /** Assuming `slotDuration` is 6 sec it is safe till year 2786. If `slotDuration` is 1 sec then it is safe till 2106 */
98
- const timeSlot = tryAsTimeSlot(Number(time / 1000n / BigInt(chainSpec.slotDuration)));
99
98
  const lastTimeSlot = state.timeslot;
99
+ /**
100
+ * In fastForward mode, use simulated time (next slot after current state).
101
+ * In normal mode, use wall clock time.
102
+ * Assuming `slotDuration` is 6 sec it is safe till year 2786.
103
+ * If `slotDuration` is 1 sec then it is safe till 2106.
104
+ */
105
+ const timeSlot = isFastForward === true
106
+ ? tryAsTimeSlot(lastTimeSlot + 1)
107
+ : tryAsTimeSlot(Number(getTime() / 1000n / BigInt(chainSpec.slotDuration)));
108
+ // In fastForward mode, skip if we already generated for this slot (waiting for import)
109
+ if (isFastForward === true && timeSlot <= lastGeneratedSlot) {
110
+ continue;
111
+ }
100
112
  const isNewEpoch = isEpochChanged(lastTimeSlot, timeSlot);
101
113
  const selingKeySeriesResult = await getSealingKeySeries(isNewEpoch, timeSlot, state);
102
114
  if (selingKeySeriesResult.isError) {
@@ -113,10 +125,17 @@ export async function main(config, comms) {
113
125
  const sealPayload = getSealPayload(selingKeySeriesResult.ok, entropy);
114
126
  const newBlock = await generator.nextBlockView(validatorIndex, key.bandersnatchSecret, sealPayload, timeSlot);
115
127
  counter += 1;
128
+ lastGeneratedSlot = timeSlot;
116
129
  logger.trace `Sending block ${counter}`;
117
130
  await comms.sendBlock(newBlock);
118
131
  }
119
- await setTimeout(chainSpec.slotDuration * 1000);
132
+ else if (isFastForward === true) {
133
+ // In fast-forward mode, if this slot is not ours, wait briefly for other validators to produce blocks
134
+ await setTimeout(10);
135
+ }
136
+ if (isFastForward === false) {
137
+ await setTimeout(chainSpec.slotDuration * 1000);
138
+ }
120
139
  }
121
140
  logger.info `🎁 Block Authorship finished. Closing channel.`;
122
141
  await db.close();
@@ -275,13 +275,15 @@ export declare class ValidatorSecrets {
275
275
  }
276
276
  export declare class BlockAuthorshipConfig {
277
277
  readonly keys: ValidatorSecrets[];
278
+ readonly isFastForward: boolean;
278
279
  static Codec: import("@typeberry/codec").Descriptor<BlockAuthorshipConfig, import("@typeberry/codec").ViewOf<BlockAuthorshipConfig, {
279
280
  keys: import("@typeberry/codec").Descriptor<ValidatorSecrets[], import("@typeberry/codec").SequenceView<ValidatorSecrets, import("@typeberry/codec").ViewOf<ValidatorSecrets, {
280
281
  bandersnatch: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"BandersnatchSecretSeed">, import("@typeberry/bytes").Bytes<32>>;
281
282
  ed25519: import("@typeberry/codec").Descriptor<import("@typeberry/bytes").Bytes<32> & import("@typeberry/utils").WithOpaque<"Ed25519SecretSeed">, import("@typeberry/bytes").Bytes<32>>;
282
283
  }>>>;
284
+ isFastForward: import("@typeberry/codec").Descriptor<boolean, boolean>;
283
285
  }>>;
284
- static create({ keys }: CodecRecord<BlockAuthorshipConfig>): BlockAuthorshipConfig;
286
+ static create({ keys, isFastForward }: CodecRecord<BlockAuthorshipConfig>): BlockAuthorshipConfig;
285
287
  private constructor();
286
288
  }
287
289
  //# sourceMappingURL=protocol.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,GAAG,EAAkB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAanB,CAAC;AAEH,qBAAa,gBAAgB;aAWT,YAAY,EAAE,sBAAsB;aACpC,OAAO,EAAE,iBAAiB;IAX5C,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,WAAW,CAAC,gBAAgB,CAAC;IAItE,OAAO;CAIR;AAED,qBAAa,qBAAqB;aASI,IAAI,EAAE,gBAAgB,EAAE;IAR5D,MAAM,CAAC,KAAK;;;;;QAET;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,WAAW,CAAC,qBAAqB,CAAC;IAI1D,OAAO;CACR"}
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../../../../packages/workers/block-authorship/protocol.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,KAAK,WAAW,EAAS,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAEL,KAAK,sBAAsB,EAE3B,KAAK,iBAAiB,EACvB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,KAAK,GAAG,EAAkB,KAAK,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAEjF,MAAM,MAAM,iBAAiB,GAAG,QAAQ,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC1D,MAAM,MAAM,YAAY,GAAG,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC;AAEhD,eAAO,MAAM,QAAQ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAanB,CAAC;AAEH,qBAAa,gBAAgB;aAWT,YAAY,EAAE,sBAAsB;aACpC,OAAO,EAAE,iBAAiB;IAX5C,MAAM,CAAC,KAAK;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE,WAAW,CAAC,gBAAgB,CAAC;IAItE,OAAO;CAIR;AAED,qBAAa,qBAAqB;aAWd,IAAI,EAAE,gBAAgB,EAAE;aACxB,aAAa,EAAE,OAAO;IAXxC,MAAM,CAAC,KAAK;;;;;;QAGT;IAEH,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,WAAW,CAAC,qBAAqB,CAAC;IAIzE,OAAO;CAIR"}
@@ -33,13 +33,16 @@ export class ValidatorSecrets {
33
33
  }
34
34
  export class BlockAuthorshipConfig {
35
35
  keys;
36
+ isFastForward;
36
37
  static Codec = codec.Class(BlockAuthorshipConfig, {
37
38
  keys: codec.sequenceVarLen(ValidatorSecrets.Codec),
39
+ isFastForward: codec.bool,
38
40
  });
39
- static create({ keys }) {
40
- return new BlockAuthorshipConfig(keys);
41
+ static create({ keys, isFastForward }) {
42
+ return new BlockAuthorshipConfig(keys, isFastForward);
41
43
  }
42
- constructor(keys) {
44
+ constructor(keys, isFastForward) {
43
45
  this.keys = keys;
46
+ this.isFastForward = isFastForward;
44
47
  }
45
48
  }