@subsquid/batch-processor 0.2.0-portal-api.493495 → 0.2.0-portal-api.19316d

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/lib/database.d.ts CHANGED
@@ -10,10 +10,17 @@ export interface FinalTxInfo {
10
10
  }
11
11
  export interface FinalDatabase<S> {
12
12
  supportsHotBlocks?: false;
13
+ supportsTemplates?: boolean;
13
14
  connect(): Promise<FinalDatabaseState>;
14
- transact(info: FinalTxInfo, cb: (store: S) => Promise<void>): Promise<void>;
15
+ transact(info: FinalTxInfo, cb: (store: S) => Promise<DatabaseTransactResult | void>): Promise<void>;
15
16
  }
16
- export interface FinalDatabaseState extends HashAndHeight {
17
+ export interface DatabaseTransactResult {
18
+ templates?: TemplateMutation[];
19
+ }
20
+ export interface FinalDatabaseState {
21
+ height: number;
22
+ hash: string;
23
+ templates?: TemplateMutation[];
17
24
  }
18
25
  export interface HotTxInfo {
19
26
  finalizedHead: HashAndHeight;
@@ -22,15 +29,29 @@ export interface HotTxInfo {
22
29
  }
23
30
  export interface HotDatabase<S> {
24
31
  supportsHotBlocks: true;
32
+ supportsTemplates?: boolean;
25
33
  connect(): Promise<HotDatabaseState>;
26
- transact(info: FinalTxInfo, cb: (store: S) => Promise<void>): Promise<void>;
27
- transactHot2(info: HotTxInfo, cb: (store: S, blockSliceStart: number, blockSliceEnd: number) => Promise<void>): Promise<void>;
34
+ transact(info: FinalTxInfo, cb: (store: S) => Promise<DatabaseTransactResult | void>): Promise<void>;
35
+ transactHot2(info: HotTxInfo, cb: (store: S, blockSliceStart: number, blockSliceEnd: number) => Promise<DatabaseTransactResult | void>): Promise<void>;
36
+ }
37
+ export interface HotBlock extends HashAndHeight {
38
+ templates?: TemplateMutation[];
28
39
  }
29
40
  export interface HotDatabaseState extends HashAndHeight {
30
- top: HashAndHeight[];
41
+ top: HotBlock[];
42
+ templates?: TemplateMutation[];
43
+ }
44
+ export interface FinalDatabaseState extends HashAndHeight {
45
+ templates?: TemplateMutation[];
46
+ }
47
+ export interface TemplateMutation {
48
+ type: 'add' | 'delete';
49
+ key: string;
50
+ value: string;
51
+ blockNumber: number;
31
52
  }
32
53
  export interface HashAndHeight {
33
- height: number;
34
54
  hash: string;
55
+ height: number;
35
56
  }
36
57
  //# sourceMappingURL=database.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAG3D,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,aAAa,CAAA;IACvB,QAAQ,EAAE,aAAa,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACnB;AAGD,MAAM,WAAW,aAAa,CAAC,CAAC;IAC5B,iBAAiB,CAAC,EAAE,KAAK,CAAA;IACzB,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9E;AAGD,MAAM,WAAW,kBAAmB,SAAQ,aAAa;CAAG;AAG5D,MAAM,WAAW,SAAS;IACtB,aAAa,EAAE,aAAa,CAAA;IAC5B,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,aAAa,EAAE,CAAA;CAC7B;AAGD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,iBAAiB,EAAE,IAAI,CAAA;IACvB,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACpC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAE3E,YAAY,CACR,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GAChF,OAAO,CAAC,IAAI,CAAC,CAAA;CACnB;AAGD,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACnD,GAAG,EAAE,aAAa,EAAE,CAAA;CACvB;AAGD,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;CACf"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,aAAa,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAA;AAG3D,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,aAAa,CAAA;IACvB,QAAQ,EAAE,aAAa,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACnB;AAGD,MAAM,WAAW,aAAa,CAAC,CAAC;IAC5B,iBAAiB,CAAC,EAAE,KAAK,CAAA;IACzB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,OAAO,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACtC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvG;AAGD,MAAM,WAAW,sBAAsB;IACnC,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAGD,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAGD,MAAM,WAAW,SAAS;IACtB,aAAa,EAAE,aAAa,CAAA;IAC5B,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,aAAa,EAAE,CAAA;CAC7B;AAGD,MAAM,WAAW,WAAW,CAAC,CAAC;IAC1B,iBAAiB,EAAE,IAAI,CAAA;IACvB,iBAAiB,CAAC,EAAE,OAAO,CAAA;IAC3B,OAAO,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACpC,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAEpG,YAAY,CACR,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,GACzG,OAAO,CAAC,IAAI,CAAC,CAAA;CACnB;AAGD,MAAM,WAAW,QAAS,SAAQ,aAAa;IAC3C,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAGD,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACnD,GAAG,EAAE,QAAQ,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAGD,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACrD,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAGD,MAAM,WAAW,gBAAgB;IAC7B,IAAI,EAAE,KAAK,GAAG,QAAQ,CAAA;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;CACtB;AAGD,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACjB"}
package/lib/run.d.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import { Database } from './database';
2
2
  import { DataSource, BlockRef } from '@subsquid/util-internal-data-source';
3
+ import { type TemplateManager } from './template-registry';
3
4
  import { PrometheusServer } from '@subsquid/util-internal-processor-tools';
4
5
  export { PrometheusServer };
6
+ export type { TemplateManager } from './template-registry';
5
7
  export interface DataHandlerContext<Block, Store> {
6
8
  /**
7
9
  * Storage interface provided by the database
@@ -15,11 +17,15 @@ export interface DataHandlerContext<Block, Store> {
15
17
  * Signals, that the processor is near the head of the chain.
16
18
  */
17
19
  isHead: boolean;
20
+ /**
21
+ * Templates manager to add and remove templates
22
+ */
23
+ templates: TemplateManager;
18
24
  }
19
25
  export interface BlockBase {
20
26
  header: BlockRef;
21
27
  }
22
- interface RunOptions {
28
+ export interface RunOptions {
23
29
  prometheus?: PrometheusServer;
24
30
  }
25
31
  /**
@@ -36,5 +42,13 @@ interface RunOptions {
36
42
  *
37
43
  * @param dataHandler - The data handler, see {@link DataHandlerContext} for an API available to the handler.
38
44
  */
39
- export declare function run<Block extends BlockBase, Store>(src: DataSource<Block>, db: Database<Store>, dataHandler: (ctx: DataHandlerContext<Block, Store>) => Promise<void>, opts?: RunOptions): void;
45
+ export declare function run<Block extends BlockBase, Store>(src: DataSource<Block>, db: Database<Store> & {
46
+ supportsTemplates: true;
47
+ }, dataHandler: (ctx: DataHandlerContext<Block, Store>) => Promise<void>, opts?: RunOptions): void;
48
+ export declare function run<Block extends BlockBase, Store>(src: DataSource<Block>, db: Database<Store>, dataHandler: (ctx: Omit<DataHandlerContext<Block, Store>, 'templates'>) => Promise<void>, opts?: RunOptions): void;
49
+ export declare class TemplateRegistryChanged extends Error {
50
+ readonly isTemplateRegistryChanged = true;
51
+ readonly name = "TemplateRegistryChanged";
52
+ }
53
+ export declare function isTemplateRegistryChanged(err: unknown): err is TemplateRegistryChanged;
40
54
  //# sourceMappingURL=run.d.ts.map
package/lib/run.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,QAAQ,EAAC,MAAM,YAAY,CAAA;AAClD,OAAO,EAAC,UAAU,EAAmB,QAAQ,EAAkB,MAAM,qCAAqC,CAAA;AAE1G,OAAO,EAAC,gBAAgB,EAAgB,MAAM,yCAAyC,CAAA;AAIvF,OAAO,EAAC,gBAAgB,EAAC,CAAA;AAKzB,MAAM,WAAW,kBAAkB,CAAC,KAAK,EAAE,KAAK;IAC5C;;OAEG;IACH,KAAK,EAAE,KAAK,CAAA;IACZ;;OAEG;IACH,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;OAEG;IACH,MAAM,EAAE,OAAO,CAAA;CAClB;AAGD,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,QAAQ,CAAA;CACnB;AASD,UAAU,UAAU;IAChB,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAChC;AAGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,GAAG,CAAC,KAAK,SAAS,SAAS,EAAE,KAAK,EAC9C,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EACtB,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EACnB,WAAW,EAAE,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EACrE,IAAI,CAAC,EAAE,UAAU,GAClB,IAAI,CAMN"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAEA,OAAO,EACH,QAAQ,EAMX,MAAM,YAAY,CAAA;AACnB,OAAO,EACH,UAAU,EAEV,QAAQ,EAIX,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAAC,KAAK,eAAe,EAAmB,MAAM,qBAAqB,CAAA;AAG1E,OAAO,EAAC,gBAAgB,EAAgB,MAAM,yCAAyC,CAAA;AAGvF,OAAO,EAAC,gBAAgB,EAAC,CAAA;AACzB,YAAY,EAAC,eAAe,EAAC,MAAM,qBAAqB,CAAA;AAIxD,MAAM,WAAW,kBAAkB,CAAC,KAAK,EAAE,KAAK;IAC5C;;OAEG;IACH,KAAK,EAAE,KAAK,CAAA;IACZ;;OAEG;IACH,MAAM,EAAE,KAAK,EAAE,CAAA;IACf;;OAEG;IACH,MAAM,EAAE,OAAO,CAAA;IACf;;OAEG;IACH,SAAS,EAAE,eAAe,CAAA;CAC7B;AAGD,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,QAAQ,CAAA;CACnB;AAGD,MAAM,WAAW,UAAU;IACvB,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAChC;AAGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,GAAG,CAAC,KAAK,SAAS,SAAS,EAAE,KAAK,EAC9C,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EACtB,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG;IAAC,iBAAiB,EAAE,IAAI,CAAA;CAAC,EAC/C,WAAW,EAAE,CAAC,GAAG,EAAE,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EACrE,IAAI,CAAC,EAAE,UAAU,GAClB,IAAI,CAAA;AACP,wBAAgB,GAAG,CAAC,KAAK,SAAS,SAAS,EAAE,KAAK,EAC9C,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,EACtB,EAAE,EAAE,QAAQ,CAAC,KAAK,CAAC,EACnB,WAAW,EAAE,CAAC,GAAG,EAAE,IAAI,CAAC,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,WAAW,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,EACxF,IAAI,CAAC,EAAE,UAAU,GAClB,IAAI,CAAA;AAgWP,qBAAa,uBAAwB,SAAQ,KAAK;IAC9C,QAAQ,CAAC,yBAAyB,QAAO;IACzC,QAAQ,CAAC,IAAI,6BAA4B;CAC5C;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,uBAAuB,CAEtF"}
package/lib/run.js CHANGED
@@ -3,30 +3,18 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.PrometheusServer = void 0;
6
+ exports.TemplateRegistryChanged = exports.PrometheusServer = void 0;
7
7
  exports.run = run;
8
+ exports.isTemplateRegistryChanged = isTemplateRegistryChanged;
8
9
  const logger_1 = require("@subsquid/logger");
9
10
  const util_internal_1 = require("@subsquid/util-internal");
10
11
  const util_internal_data_source_1 = require("@subsquid/util-internal-data-source");
12
+ const template_registry_1 = require("./template-registry");
11
13
  const assert_1 = __importDefault(require("assert"));
12
14
  const util_internal_processor_tools_1 = require("@subsquid/util-internal-processor-tools");
13
15
  Object.defineProperty(exports, "PrometheusServer", { enumerable: true, get: function () { return util_internal_processor_tools_1.PrometheusServer; } });
14
16
  const util_1 = require("./util");
15
17
  const log = (0, logger_1.createLogger)('sqd:batch-processor');
16
- /**
17
- * Run data processing.
18
- *
19
- * This method assumes full control over the current OS process as
20
- * it terminates the entire program in case of error or
21
- * at the end of data processing.
22
- *
23
- * @param src - data source to ingest data from
24
- *
25
- * @param db - database is responsible for providing storage API to data handler
26
- * and persisting mapping progress and status.
27
- *
28
- * @param dataHandler - The data handler, see {@link DataHandlerContext} for an API available to the handler.
29
- */
30
18
  function run(src, db, dataHandler, opts) {
31
19
  (0, util_internal_1.runProgram)(() => {
32
20
  return new Processor(src, db, dataHandler, opts).run();
@@ -34,6 +22,52 @@ function run(src, db, dataHandler, opts) {
34
22
  log.fatal(err);
35
23
  });
36
24
  }
25
+ class ProcessorState {
26
+ constructor() {
27
+ this.finalizedHead = undefined;
28
+ this.unfinalizedHeads = [];
29
+ this.templates = new template_registry_1.TemplateRegistry();
30
+ }
31
+ get head() {
32
+ return (0, util_internal_1.maybeLast)(this.unfinalizedHeads) ?? this.finalizedHead;
33
+ }
34
+ get(key) {
35
+ return this.templates.get(key);
36
+ }
37
+ init(state) {
38
+ this.finalizedHead = state.finalizedHead;
39
+ this.unfinalizedHeads = state.unfinalizedHeads ?? [];
40
+ let hotBlockTemplates = state.unfinalizedHeads
41
+ ?.filter((b) => b.templates?.length)
42
+ .map((b) => ({ blockNumber: b.number, templates: b.templates }));
43
+ if (state.templates?.length || hotBlockTemplates?.length) {
44
+ log.info('loading persisted templates');
45
+ this.templates.init(state.templates ?? [], hotBlockTemplates);
46
+ }
47
+ }
48
+ handleFork(previousBlocks) {
49
+ let chain = this.finalizedHead ? [this.finalizedHead, ...this.unfinalizedHeads] : this.unfinalizedHeads;
50
+ let rollbackIndex = findRollbackIndex(chain, previousBlocks);
51
+ if (rollbackIndex === -1) {
52
+ if (this.finalizedHead != null)
53
+ throw new Error('Unable to process fork');
54
+ this.unfinalizedHeads = [];
55
+ this.templates.rollbackTo(-1);
56
+ }
57
+ else {
58
+ let rollbackHead = chain[rollbackIndex];
59
+ log.info(`navigating a fork on a common base ${(0, util_1.formatHead)(rollbackHead)}`);
60
+ this.unfinalizedHeads = chain.slice(1, rollbackIndex + 1);
61
+ this.templates.rollbackTo(rollbackHead.number);
62
+ }
63
+ }
64
+ prune(blockNumber) {
65
+ this.templates.prune(blockNumber);
66
+ }
67
+ async transact(range, fn) {
68
+ return this.templates.transact(range, fn);
69
+ }
70
+ }
37
71
  class Processor {
38
72
  constructor(src, db, handler, opts) {
39
73
  this.src = src;
@@ -41,58 +75,52 @@ class Processor {
41
75
  this.handler = handler;
42
76
  this.opts = opts;
43
77
  this.hasStatusNews = false;
78
+ this.state = new ProcessorState();
44
79
  this.metrics = new util_internal_processor_tools_1.RunnerMetrics(src.getBlocksCountInRange?.bind(src) ?? ((range) => Math.max(0, range.to - range.from + 1)));
45
80
  }
46
81
  async run() {
47
- let getHead = this.db.supportsHotBlocks ? this.src.getHead.bind(this.src) : this.src.getFinalizedHead.bind(this.src);
82
+ let getHead = this.db.supportsHotBlocks
83
+ ? this.src.getHead.bind(this.src)
84
+ : this.src.getFinalizedHead.bind(this.src);
48
85
  let chainHeight = new util_internal_1.Throttler(() => getHead()?.then((r) => r?.number ?? -1), 10000);
49
- let state = {
50
- finalizedHead: undefined,
51
- unfinalizedHeads: [],
52
- };
53
- if (this.db.supportsHotBlocks) {
54
- let dbState = await this.db.connect();
55
- state.finalizedHead = dbState.height < 0 ? undefined : toBlockRef(dbState);
56
- state.unfinalizedHeads = dbState.top.map(toBlockRef);
57
- }
58
- else {
59
- let dbState = await this.db.connect();
60
- state.finalizedHead = dbState.height < 0 ? undefined : toBlockRef(dbState);
61
- }
62
- let head = getStateHead(state);
86
+ let dbState = await this.db.connect();
87
+ this.state.init(toProcessorStateInit(dbState));
88
+ let head = this.state.head;
63
89
  if (head != null) {
64
90
  log.info(`last processed block was ${head.number}`);
65
91
  }
66
92
  await this.initMetrics(head?.number ?? -1, await chainHeight.get());
93
+ let getStream = this.db.supportsHotBlocks
94
+ ? this.src.getStream.bind(this.src)
95
+ : this.src.getFinalizedStream.bind(this.src);
67
96
  while (true) {
68
- let getStream = this.db.supportsHotBlocks
69
- ? this.src.getStream.bind(this.src)
70
- : this.src.getFinalizedStream.bind(this.src);
71
- head = getStateHead(state);
72
97
  try {
73
- for await (let data of getStream({ after: head })) {
74
- state = await this.processBatch(state, data, await chainHeight.get());
98
+ for await (let data of getStream({
99
+ from: (this.state.head?.number ?? -1) + 1,
100
+ parentHash: this.state.head?.hash,
101
+ templateRegistry: this.state,
102
+ })) {
103
+ await this.processBatch(data, await chainHeight.get(), async (store, sliceBlocks, isOnTop) => {
104
+ let batchRange = { from: sliceBlocks[0].header.number, to: (0, util_internal_1.last)(sliceBlocks).header.number };
105
+ const { data: newTemplates, changed } = await this.state.transact(batchRange, async (templates) => {
106
+ await this.handler({ store, blocks: sliceBlocks, isHead: isOnTop, templates });
107
+ });
108
+ if (changed) {
109
+ throw new TemplateRegistryChanged();
110
+ }
111
+ return { templates: newTemplates };
112
+ });
75
113
  }
76
- break; // Stream completed successfully, exit loop
114
+ break;
77
115
  }
78
116
  catch (e) {
117
+ if (isTemplateRegistryChanged(e)) {
118
+ log.info('template registry updated, re-fetching stream with new filters');
119
+ continue;
120
+ }
79
121
  if (!(0, util_internal_data_source_1.isForkException)(e) || !this.db.supportsHotBlocks)
80
122
  throw e;
81
- // Handle fork and continue loop to retry
82
- let chain = state.finalizedHead
83
- ? [state.finalizedHead, ...state.unfinalizedHeads]
84
- : state.unfinalizedHeads;
85
- let rollbackIndex = findRollbackIndex(chain, e.previousBlocks);
86
- if (rollbackIndex === -1) {
87
- if (state.finalizedHead != null)
88
- throw new Error('Unable to process fork');
89
- state.unfinalizedHeads = [];
90
- }
91
- else {
92
- const rollbackHead = chain[rollbackIndex];
93
- log.info(`navigating a fork on a common base ${(0, util_1.formatHead)(rollbackHead)}`);
94
- state.unfinalizedHeads = chain.slice(1, rollbackIndex + 1);
95
- }
123
+ this.state.handleFork(e.previousBlocks);
96
124
  }
97
125
  }
98
126
  this.reportFinalStatus();
@@ -119,82 +147,75 @@ class Processor {
119
147
  this.metrics.setLastProcessedBlock(indexerHeight);
120
148
  this.metrics.updateProgress(time);
121
149
  }
122
- async processBatch(state, data, chainHeight) {
150
+ async processBatch(data, chainHeight, map) {
123
151
  let { blocks, finalizedHead: finalizedHeadData } = data;
124
152
  if (blocks.length === 0)
125
- return state;
126
- let prevHead = getStateHead(state);
127
- // Validate data continuity
153
+ return;
154
+ let prevHead = this.state.head;
128
155
  if (prevHead && prevHead.number >= blocks[0].header.number) {
129
156
  throw new Error('Data is not continuous');
130
157
  }
131
- if (finalizedHeadData != null && state.finalizedHead != null && finalizedHeadData.number <= state.finalizedHead.number) {
132
- finalizedHeadData = state.finalizedHead;
133
- }
134
- let unfinalizedIndex = 0;
135
- if (finalizedHeadData != null) {
136
- unfinalizedIndex = blocks.findIndex((b) => b.header.number > finalizedHeadData.number);
158
+ if (finalizedHeadData != null &&
159
+ this.state.finalizedHead != null &&
160
+ finalizedHeadData.number <= this.state.finalizedHead.number) {
161
+ finalizedHeadData = this.state.finalizedHead;
137
162
  }
163
+ let unfinalizedIndex = finalizedHeadData == null ? 0 : blocks.findIndex((b) => b.header.number > finalizedHeadData.number);
138
164
  let nextHead = (0, util_internal_1.last)(blocks).header;
139
165
  let isOnTop = nextHead.number >= chainHeight;
140
166
  let mappingStartTime = process.hrtime.bigint();
141
167
  if (this.db.supportsHotBlocks) {
142
168
  let finalizedRef;
143
169
  if (unfinalizedIndex < 0) {
144
- finalizedRef = blocks[blocks.length - 1].header;
170
+ finalizedRef = (0, util_internal_1.last)(blocks).header;
145
171
  }
146
172
  else {
147
- finalizedRef = blocks[unfinalizedIndex - 1]?.header;
148
- if (finalizedHeadData != null) {
149
- finalizedRef = { hash: finalizedHeadData.hash, number: finalizedHeadData.number };
150
- }
173
+ finalizedRef = finalizedHeadData ?? blocks[unfinalizedIndex - 1]?.header;
151
174
  }
152
- let finalizedHead = maxBlockRef(finalizedRef, state.finalizedHead);
175
+ let finalizedHead = maxBlockRef(finalizedRef, this.state.finalizedHead);
153
176
  await this.db.transactHot2({
154
177
  finalizedHead: toHashAndHeight(finalizedHead),
155
178
  baseHead: toHashAndHeight(prevHead),
156
179
  newBlocks: blocks.map((b) => toHashAndHeight(b.header)),
157
- }, (store, start, end) => {
158
- return this.handler({
159
- store,
160
- blocks: (start === 0 && end === blocks.length) ? blocks : blocks.slice(start, end),
161
- isHead: isOnTop,
162
- });
180
+ }, async (store, start, end) => {
181
+ let sliceBlocks = start === 0 && end === blocks.length ? blocks : blocks.slice(start, end);
182
+ if (sliceBlocks.length === 0)
183
+ return;
184
+ return map(store, sliceBlocks, isOnTop);
163
185
  });
164
- if (finalizedHead) {
165
- state.finalizedHead = finalizedHead;
186
+ let newFinalizedHead = finalizedHead ?? this.state.finalizedHead;
187
+ if (newFinalizedHead) {
188
+ this.state.prune(newFinalizedHead.number);
166
189
  }
167
- if (state.finalizedHead) {
168
- let idx = state.unfinalizedHeads.findIndex((h) => h.number > state.finalizedHead.number);
169
- state.unfinalizedHeads = idx < 0 ? [] : state.unfinalizedHeads.slice(idx);
190
+ let unfinalizedHeads = this.state.unfinalizedHeads;
191
+ if (newFinalizedHead) {
192
+ let idx = unfinalizedHeads.findIndex((h) => h.number > newFinalizedHead.number);
193
+ unfinalizedHeads = idx < 0 ? [] : unfinalizedHeads.slice(idx);
170
194
  }
171
195
  if (unfinalizedIndex >= 0) {
172
- for (let i = unfinalizedIndex; i < blocks.length; i++) {
173
- state.unfinalizedHeads.push({ number: blocks[i].header.number, hash: blocks[i].header.hash });
174
- }
196
+ unfinalizedHeads = [
197
+ ...unfinalizedHeads,
198
+ ...blocks.slice(unfinalizedIndex).map((b) => ({ number: b.header.number, hash: b.header.hash })),
199
+ ];
175
200
  }
201
+ this.state.finalizedHead = newFinalizedHead;
202
+ this.state.unfinalizedHeads = unfinalizedHeads;
176
203
  }
177
204
  else {
178
205
  (0, assert_1.default)(unfinalizedIndex < 0, 'non-hot database received unfinalized blocks');
179
206
  await this.db.transact({
180
- prevHead: prevHead ? toHashAndHeight(prevHead) : { height: -1, hash: '0x' },
207
+ prevHead: toHashAndHeight(prevHead),
181
208
  nextHead: toHashAndHeight(nextHead),
182
209
  isOnTop,
183
- }, (store) => {
184
- return this.handler({
185
- store,
186
- blocks,
187
- isHead: isOnTop,
188
- });
189
- });
190
- state.finalizedHead = { number: nextHead.number, hash: nextHead.hash };
191
- state.unfinalizedHeads = [];
210
+ }, (store) => map(store, blocks, isOnTop));
211
+ this.state.prune(nextHead.number);
212
+ this.state.finalizedHead = nextHead;
213
+ this.state.unfinalizedHeads = [];
192
214
  }
193
215
  let mappingEndTime = process.hrtime.bigint();
194
216
  this.updateProgressMetrics(chainHeight, nextHead.number, mappingEndTime);
195
217
  this.metrics.registerBatch(blocks.length, (0, util_1.getItemsCount)(blocks), mappingStartTime, mappingEndTime);
196
218
  this.reportStatus();
197
- return state;
198
219
  }
199
220
  reportStatus() {
200
221
  if (this.statusReportTimer == null) {
@@ -250,11 +271,16 @@ function toHashAndHeight(ref) {
250
271
  return { height: -1, hash: '0x' };
251
272
  return { height: ref.number, hash: ref.hash };
252
273
  }
253
- function toBlockRef(hashAndHeight) {
254
- return { number: hashAndHeight.height, hash: hashAndHeight.hash };
274
+ function toBlockRef(hh) {
275
+ return { number: hh.height, hash: hh.hash };
255
276
  }
256
- function getStateHead(state) {
257
- return (0, util_internal_1.maybeLast)(state.unfinalizedHeads) ?? state.finalizedHead;
277
+ function toProcessorStateInit(dbState) {
278
+ let top = 'top' in dbState ? dbState.top : undefined;
279
+ return {
280
+ finalizedHead: dbState.height < 0 ? undefined : toBlockRef(dbState),
281
+ unfinalizedHeads: top?.map(b => ({ ...toBlockRef(b), templates: b.templates })),
282
+ templates: dbState.templates,
283
+ };
258
284
  }
259
285
  function maxBlockRef(a, b) {
260
286
  if (a == null)
@@ -263,4 +289,15 @@ function maxBlockRef(a, b) {
263
289
  return a;
264
290
  return a.number >= b.number ? a : b;
265
291
  }
292
+ class TemplateRegistryChanged extends Error {
293
+ constructor() {
294
+ super(...arguments);
295
+ this.isTemplateRegistryChanged = true;
296
+ this.name = 'TemplateRegistryChanged';
297
+ }
298
+ }
299
+ exports.TemplateRegistryChanged = TemplateRegistryChanged;
300
+ function isTemplateRegistryChanged(err) {
301
+ return err instanceof TemplateRegistryChanged;
302
+ }
266
303
  //# sourceMappingURL=run.js.map
package/lib/run.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ import type { TemplateRegistry as ITemplateRegistry, TemplateValue } from '@subsquid/util-internal-data-source';
2
+ import type { FiniteRange } from '@subsquid/util-internal-range';
3
+ import { TemplateMutation } from './database';
4
+ export interface TemplateManager {
5
+ add(key: string, value: string, blockNumber: number): void;
6
+ remove(key: string, value: string, blockNumber: number): void;
7
+ has(key: string, value: string, blockNumber: number): boolean;
8
+ }
9
+ export declare class TemplateRegistry implements ITemplateRegistry {
10
+ private byKey;
11
+ private baseMutations;
12
+ private undoLog;
13
+ private pendingTemplates;
14
+ /**
15
+ * Rebuild state from finalized mutations and optionally replay hot block
16
+ * mutations to reconstruct the undo log.
17
+ *
18
+ * Finalized mutations form the base state. Hot block mutations are stored
19
+ * in the undo log so rollbackTo() works for hot block heights after restart.
20
+ */
21
+ init(mutations: TemplateMutation[], hotBlocks?: {
22
+ blockNumber: number;
23
+ templates: TemplateMutation[];
24
+ }[]): void;
25
+ get(key: string): TemplateValue[];
26
+ has(key: string, value: string, block: number): boolean;
27
+ apply(mutation: TemplateMutation): boolean;
28
+ transact(range: FiniteRange, fn: (templates: TemplateManager) => Promise<void>): Promise<{
29
+ data: TemplateMutation[];
30
+ changed: boolean;
31
+ }>;
32
+ rollbackTo(blockNumber: number): void;
33
+ prune(blockNumber: number): void;
34
+ private applyToState;
35
+ private rebuild;
36
+ }
37
+ //# sourceMappingURL=template-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-registry.d.ts","sourceRoot":"","sources":["../src/template-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,gBAAgB,IAAI,iBAAiB,EAAE,aAAa,EAAC,MAAM,qCAAqC,CAAA;AAC7G,OAAO,KAAK,EAAC,WAAW,EAAQ,MAAM,+BAA+B,CAAA;AACrE,OAAO,EAAC,gBAAgB,EAAC,MAAM,YAAY,CAAA;AAE3C,MAAM,WAAW,eAAe;IAC5B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1D,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7D,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAA;CAChE;AAgCD,qBAAa,gBAAiB,YAAW,iBAAiB;IACtD,OAAO,CAAC,KAAK,CAA0C;IACvD,OAAO,CAAC,aAAa,CAAyB;IAC9C,OAAO,CAAC,OAAO,CAAkE;IACjF,OAAO,CAAC,gBAAgB,CAAyB;IAEjD;;;;;;OAMG;IACH,IAAI,CACA,SAAS,EAAE,gBAAgB,EAAE,EAC7B,SAAS,CAAC,EAAE;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,gBAAgB,EAAE,CAAA;KAAC,EAAE,GACnE,IAAI;IAOP,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE;IAYjC,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO;IAavD,KAAK,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO;IAQpC,QAAQ,CACV,KAAK,EAAE,WAAW,EAClB,EAAE,EAAE,CAAC,SAAS,EAAE,eAAe,KAAK,OAAO,CAAC,IAAI,CAAC,GAClD,OAAO,CAAC;QAAC,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAAC,OAAO,EAAE,OAAO,CAAA;KAAC,CAAC;IAiBxD,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQrC,KAAK,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAQhC,OAAO,CAAC,YAAY;IAqCpB,OAAO,CAAC,OAAO;CAelB"}