@subsquid/batch-processor 1.0.0-portal-api.a3f844 → 1.0.0

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
@@ -11,10 +11,15 @@ export interface FinalTxInfo {
11
11
  export interface FinalDatabase<S> {
12
12
  supportsHotBlocks?: false;
13
13
  connect(): Promise<FinalDatabaseState>;
14
- getState?(): Promise<FinalDatabaseState>;
15
- transact(info: FinalTxInfo, cb: (store: S) => Promise<void>): Promise<void>;
14
+ transact(info: FinalTxInfo, cb: (store: S) => Promise<DatabaseTransactResult | void>): Promise<void>;
16
15
  }
17
- export interface FinalDatabaseState extends HashAndHeight {
16
+ export interface DatabaseTransactResult {
17
+ templates?: TemplateMutation[];
18
+ }
19
+ export interface FinalDatabaseState {
20
+ height: number;
21
+ hash: string;
22
+ templates?: TemplateMutation[];
18
23
  }
19
24
  export interface HotTxInfo {
20
25
  finalizedHead: HashAndHeight;
@@ -24,15 +29,27 @@ export interface HotTxInfo {
24
29
  export interface HotDatabase<S> {
25
30
  supportsHotBlocks: true;
26
31
  connect(): Promise<HotDatabaseState>;
27
- getState(): Promise<HotDatabaseState>;
28
- transact(info: FinalTxInfo, cb: (store: S) => Promise<void>): Promise<void>;
29
- transactHot2(info: HotTxInfo, cb: (store: S, blockSliceStart: number, blockSliceEnd: number) => Promise<void>): Promise<void>;
32
+ transact(info: FinalTxInfo, cb: (store: S) => Promise<DatabaseTransactResult | void>): Promise<void>;
33
+ transactHot2(info: HotTxInfo, cb: (store: S, blockSliceStart: number, blockSliceEnd: number) => Promise<DatabaseTransactResult | void>): Promise<void>;
34
+ }
35
+ export interface HotBlock extends HashAndHeight {
36
+ templates?: TemplateMutation[];
30
37
  }
31
38
  export interface HotDatabaseState extends HashAndHeight {
32
- top: HashAndHeight[];
39
+ top: HotBlock[];
40
+ templates?: TemplateMutation[];
41
+ }
42
+ export interface FinalDatabaseState extends HashAndHeight {
43
+ templates?: TemplateMutation[];
44
+ }
45
+ export interface TemplateMutation {
46
+ type: 'add' | 'delete';
47
+ key: string;
48
+ value: string;
49
+ blockNumber: number;
33
50
  }
34
51
  export interface HashAndHeight {
35
- height: number;
36
52
  hash: string;
53
+ height: number;
37
54
  }
38
55
  //# 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,OAAO,CAAC,kBAAkB,CAAC,CAAA;IACxC,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,IAAI,OAAO,CAAC,gBAAgB,CAAC,CAAA;IACrC,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;AAE3D,MAAM,WAAW,WAAW;IACxB,QAAQ,EAAE,aAAa,CAAA;IACvB,QAAQ,EAAE,aAAa,CAAA;IACvB,OAAO,EAAE,OAAO,CAAA;CACnB;AAED,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,sBAAsB,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACvG;AAED,MAAM,WAAW,sBAAsB;IACnC,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,kBAAkB;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,SAAS;IACtB,aAAa,EAAE,aAAa,CAAA;IAC5B,QAAQ,EAAE,aAAa,CAAA;IACvB,SAAS,EAAE,aAAa,EAAE,CAAA;CAC7B;AAED,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,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;AAED,MAAM,WAAW,QAAS,SAAQ,aAAa;IAC3C,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACnD,GAAG,EAAE,QAAQ,EAAE,CAAA;IACf,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAED,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACrD,SAAS,CAAC,EAAE,gBAAgB,EAAE,CAAA;CACjC;AAED,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;AAED,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;CACjB"}
package/lib/run.d.ts CHANGED
@@ -1,22 +1,18 @@
1
- import { Database } from './database';
1
+ import { Database, DatabaseTransactResult } from './database';
2
2
  import { DataSource, BlockRef } from '@subsquid/util-internal-data-source';
3
+ import { PrometheusServer } from '@subsquid/util-internal-processor-tools';
4
+ export { PrometheusServer };
3
5
  export interface DataHandlerContext<Block, Store> {
4
- /**
5
- * Storage interface provided by the database
6
- */
7
6
  store: Store;
8
- /**
9
- * List of blocks to map and process
10
- */
11
7
  blocks: Block[];
12
- /**
13
- * Signals, that the processor is near the head of the chain.
14
- */
15
8
  isHead: boolean;
16
9
  }
17
10
  export interface BlockBase {
18
11
  header: BlockRef;
19
12
  }
13
+ export interface RunOptions {
14
+ prometheus?: PrometheusServer;
15
+ }
20
16
  /**
21
17
  * Run data processing.
22
18
  *
@@ -31,5 +27,23 @@ export interface BlockBase {
31
27
  *
32
28
  * @param dataHandler - The data handler, see {@link DataHandlerContext} for an API available to the handler.
33
29
  */
34
- export declare function run<Block extends BlockBase, Store>(src: DataSource<Block>, db: Database<Store>, dataHandler: (ctx: DataHandlerContext<Block, Store>) => Promise<void>): void;
30
+ export declare function run<Block extends BlockBase, Store>(src: DataSource<Block>, db: Database<Store>, dataHandler: (ctx: DataHandlerContext<Block, Store>) => Promise<DatabaseTransactResult | void>, opts?: RunOptions): void;
31
+ export declare class Processor<B extends BlockBase, S> {
32
+ private src;
33
+ private db;
34
+ private handler;
35
+ private readonly opts?;
36
+ private metrics;
37
+ private statusReportTimer?;
38
+ private hasStatusNews;
39
+ private state;
40
+ constructor(src: DataSource<B>, db: Database<S>, handler: (ctx: DataHandlerContext<B, S>) => Promise<DatabaseTransactResult | void>, opts?: RunOptions | undefined);
41
+ run(): Promise<void>;
42
+ private initMetrics;
43
+ private updateProgressMetrics;
44
+ private processBatch;
45
+ private reportStatus;
46
+ private reportFinalStatus;
47
+ }
48
+ export declare function findRollbackIndex(currentChain: BlockRef[], forkChain: BlockRef[]): number;
35
49
  //# 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":"AAIA,OAAO,EAAgB,QAAQ,EAAmB,MAAM,YAAY,CAAA;AAEpE,OAAO,EAAC,UAAU,EAAmB,QAAQ,EAAC,MAAM,qCAAqC,CAAA;AAMzF,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;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,QAAQ,CAAA;CACnB;AAED;;;;;;;;;;;;;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,GACtE,IAAI,CASN"}
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../src/run.ts"],"names":[],"mappings":"AAEA,OAAO,EAAC,QAAQ,EAAE,sBAAsB,EAAsD,MAAM,YAAY,CAAA;AAChH,OAAO,EAAC,UAAU,EAAmB,QAAQ,EAAkB,MAAM,qCAAqC,CAAA;AAE1G,OAAO,EAAC,gBAAgB,EAAgB,MAAM,yCAAyC,CAAA;AAGvF,OAAO,EAAC,gBAAgB,EAAC,CAAA;AAIzB,MAAM,WAAW,kBAAkB,CAAC,KAAK,EAAE,KAAK;IAC5C,KAAK,EAAE,KAAK,CAAA;IACZ,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,MAAM,EAAE,OAAO,CAAA;CAClB;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,QAAQ,CAAA;CACnB;AAED,MAAM,WAAW,UAAU;IACvB,UAAU,CAAC,EAAE,gBAAgB,CAAA;CAChC;AAED;;;;;;;;;;;;;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,sBAAsB,GAAG,IAAI,CAAC,EAC9F,IAAI,CAAC,EAAE,UAAU,GAClB,IAAI,CASN;AAkCD,qBAAa,SAAS,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC;IAOrC,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;IAT1B,OAAO,CAAC,OAAO,CAAe;IAC9B,OAAO,CAAC,iBAAiB,CAAC,CAAK;IAC/B,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,KAAK,CAAuB;gBAGxB,GAAG,EAAE,UAAU,CAAC,CAAC,CAAC,EAClB,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EACf,OAAO,EAAE,CAAC,GAAG,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,EACzE,IAAI,CAAC,EAAE,UAAU,YAAA;IAOhC,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA2CZ,WAAW;IAkBzB,OAAO,CAAC,qBAAqB;YAMf,YAAY;IA8F1B,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,iBAAiB;CAS5B;AAED,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,CA6BzF"}
package/lib/run.js CHANGED
@@ -1,39 +1,17 @@
1
1
  "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
2
  var __importDefault = (this && this.__importDefault) || function (mod) {
26
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
27
4
  };
28
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.Processor = exports.PrometheusServer = void 0;
29
7
  exports.run = run;
8
+ exports.findRollbackIndex = findRollbackIndex;
30
9
  const logger_1 = require("@subsquid/logger");
31
10
  const util_internal_1 = require("@subsquid/util-internal");
32
- const util_internal_prometheus_server_1 = require("@subsquid/util-internal-prometheus-server");
33
- const prom = __importStar(require("prom-client"));
34
- const metrics_1 = require("./metrics");
35
11
  const util_internal_data_source_1 = require("@subsquid/util-internal-data-source");
36
12
  const assert_1 = __importDefault(require("assert"));
13
+ const util_internal_processor_tools_1 = require("@subsquid/util-internal-processor-tools");
14
+ Object.defineProperty(exports, "PrometheusServer", { enumerable: true, get: function () { return util_internal_processor_tools_1.PrometheusServer; } });
37
15
  const util_1 = require("./util");
38
16
  const log = (0, logger_1.createLogger)('sqd:batch-processor');
39
17
  /**
@@ -50,148 +28,177 @@ const log = (0, logger_1.createLogger)('sqd:batch-processor');
50
28
  *
51
29
  * @param dataHandler - The data handler, see {@link DataHandlerContext} for an API available to the handler.
52
30
  */
53
- function run(src, db, dataHandler) {
31
+ function run(src, db, dataHandler, opts) {
54
32
  (0, util_internal_1.runProgram)(() => {
55
- return new Processor(src, db, dataHandler).run();
33
+ return new Processor(src, db, dataHandler, opts).run();
56
34
  }, (err) => {
57
35
  log.fatal(err);
58
36
  });
59
37
  }
38
+ class ProcessorState {
39
+ constructor() {
40
+ this.finalizedHead = undefined;
41
+ this.unfinalizedHeads = [];
42
+ }
43
+ get head() {
44
+ return (0, util_internal_1.maybeLast)(this.unfinalizedHeads) ?? this.finalizedHead;
45
+ }
46
+ init(state) {
47
+ this.finalizedHead = state.finalizedHead;
48
+ this.unfinalizedHeads = state.unfinalizedHeads ?? [];
49
+ }
50
+ handleFork(previousBlocks) {
51
+ let chain = this.finalizedHead ? [this.finalizedHead, ...this.unfinalizedHeads] : this.unfinalizedHeads;
52
+ let rollbackIndex = findRollbackIndex(chain, previousBlocks);
53
+ if (rollbackIndex === -1) {
54
+ if (this.finalizedHead != null)
55
+ throw new Error('Unable to process fork');
56
+ this.unfinalizedHeads = [];
57
+ }
58
+ else {
59
+ let rollbackHead = chain[rollbackIndex];
60
+ log.info(`navigating a fork on a common base ${(0, util_1.formatHead)(rollbackHead)}`);
61
+ this.unfinalizedHeads = chain.slice(this.finalizedHead ? 1 : 0, rollbackIndex + 1);
62
+ }
63
+ }
64
+ }
60
65
  class Processor {
61
- constructor(src, db, handler) {
66
+ constructor(src, db, handler, opts) {
62
67
  this.src = src;
63
68
  this.db = db;
64
69
  this.handler = handler;
65
- this.metrics = new metrics_1.Metrics();
70
+ this.opts = opts;
66
71
  this.hasStatusNews = false;
67
- this.chainHeight = new util_internal_1.Throttler(() => this.src.getFinalizedHead()?.then((r) => r?.number ?? -1), 30000);
72
+ this.state = new ProcessorState();
73
+ this.metrics = new util_internal_processor_tools_1.RunnerMetrics(src.getBlocksCountInRange?.bind(src) ?? ((range) => Math.max(0, range.to - range.from + 1)));
68
74
  }
69
75
  async run() {
70
- let finalizedHead;
71
- let head;
72
- if (this.db.supportsHotBlocks) {
73
- let state = await this.db.connect();
74
- finalizedHead = state;
75
- head = (0, util_internal_1.last)([state, ...state.top]);
76
- }
77
- else {
78
- finalizedHead = head = await this.db.connect();
76
+ let getHead = this.db.supportsHotBlocks
77
+ ? this.src.getHead.bind(this.src)
78
+ : this.src.getFinalizedHead.bind(this.src);
79
+ let chainHeight = new util_internal_1.Throttler(() => getHead().then((r) => r.number), 10000);
80
+ let dbState = await this.db.connect();
81
+ this.state.init(toProcessorStateInit(dbState));
82
+ let head = this.state.head;
83
+ if (head != null) {
84
+ log.info(`last processed block was ${head.number}`);
79
85
  }
80
- if (head.height >= 0) {
81
- log.info(`last processed block was ${head.height}`);
82
- await this.assertWeAreOnTheSameChain(finalizedHead);
83
- }
84
- await this.initMetrics(head.height);
86
+ await this.initMetrics(head?.number ?? -1, await chainHeight.get());
87
+ let getStream = this.db.supportsHotBlocks
88
+ ? this.src.getStream.bind(this.src)
89
+ : this.src.getFinalizedStream.bind(this.src);
85
90
  while (true) {
86
91
  try {
87
- let prevBlockNumber = head.height;
88
- let prevBlockHash = head.height < 0 ? undefined : head.hash;
89
- let stream = this.db.supportsHotBlocks
90
- ? this.src.getStream({ range: { from: prevBlockNumber + 1 }, parentHash: prevBlockHash })
91
- : this.src.getFinalizedStream({ range: { from: prevBlockNumber + 1 }, parentHash: prevBlockHash });
92
- for await (let data of stream) {
93
- let finalizedHead = data.finalizedHead == null
94
- ? { height: -1, hash: '0x' }
95
- : {
96
- height: data.finalizedHead.number,
97
- hash: data.finalizedHead.hash,
98
- };
99
- head = await this.processBatch(head, finalizedHead, data.blocks);
92
+ for await (let data of getStream({
93
+ from: (this.state.head?.number ?? -1) + 1,
94
+ parentHash: this.state.head?.hash,
95
+ })) {
96
+ await this.processBatch(data, await chainHeight.get(), async (store, sliceBlocks, isOnTop) => {
97
+ return this.handler({ store, blocks: sliceBlocks, isHead: isOnTop });
98
+ });
100
99
  }
101
100
  break;
102
101
  }
103
102
  catch (e) {
104
- if ((0, util_internal_data_source_1.isForkException)(e) && this.db.supportsHotBlocks) {
105
- let state = await this.db.getState();
106
- let forkBase = await computeForkBase(state, e.previousBlocks);
107
- if (forkBase == null) {
108
- // rollback all blocks
109
- head = { height: -1, hash: '0x' };
110
- }
111
- else {
112
- head = forkBase;
113
- }
114
- log.info(`navigating a fork on a common base ${(0, util_1.formatHead)(head)}`);
115
- }
116
- else {
103
+ if (!(0, util_internal_data_source_1.isForkException)(e) || !this.db.supportsHotBlocks)
117
104
  throw e;
118
- }
105
+ this.state.handleFork(e.previousBlocks);
119
106
  }
120
107
  }
121
108
  this.reportFinalStatus();
122
109
  }
123
- async assertWeAreOnTheSameChain(state) {
124
- // if (state.height < 0) return
125
- // let hash = await this.src.getBlockHash(state.number)
126
- // if (state.hash === hash) return
127
- // throw new Error(
128
- // `already indexed block ${formatHead(state)} was not found on chain`
129
- // )
130
- }
131
- async initMetrics(state) {
132
- this.updateProgressMetrics(await this.chainHeight.get(), state);
110
+ async initMetrics(state, chainHeight) {
111
+ this.updateProgressMetrics(chainHeight, state);
133
112
  let port = process.env.PROCESSOR_PROMETHEUS_PORT || process.env.PROMETHEUS_PORT;
134
- if (port == null)
113
+ let prometheusServer;
114
+ if (this.opts?.prometheus != null) {
115
+ prometheusServer = this.opts.prometheus;
116
+ }
117
+ else if (port != null) {
118
+ prometheusServer = new util_internal_processor_tools_1.PrometheusServer();
119
+ prometheusServer.setPort(port);
120
+ }
121
+ if (prometheusServer == null)
135
122
  return;
136
- prom.collectDefaultMetrics();
137
- this.metrics.install();
138
- let server = await (0, util_internal_prometheus_server_1.createPrometheusServer)(prom.register, port);
139
- log.info(`prometheus metrics are served on port ${server.port}`);
123
+ prometheusServer.addRunnerMetrics(this.metrics);
124
+ let listening = await prometheusServer.serve();
125
+ log.info(`prometheus metrics are served on port ${listening.port}`);
140
126
  }
141
127
  updateProgressMetrics(chainHeight, indexerHeight, time) {
142
128
  this.metrics.setChainHeight(chainHeight);
143
129
  this.metrics.setLastProcessedBlock(indexerHeight);
144
- let left;
145
- let processed;
146
- left = this.metrics.getChainHeight() - this.metrics.getLastProcessedBlock();
147
- processed = this.metrics.getLastProcessedBlock();
148
- this.metrics.updateProgress(processed, left, time);
130
+ this.metrics.updateProgress(time);
149
131
  }
150
- async processBatch(prevHead, finalizedHead, blocks) {
151
- let chainHeight = await this.chainHeight.get();
152
- let lastBlock = (0, util_internal_1.maybeLast)(blocks);
153
- if (lastBlock == null)
154
- return prevHead;
155
- let nextHead = {
156
- hash: lastBlock.header.hash,
157
- height: lastBlock.header.number,
158
- };
159
- let isOnTop = nextHead.height >= chainHeight;
132
+ async processBatch(data, chainHeight, map) {
133
+ let { blocks, finalizedHead: finalizedHeadData } = data;
134
+ let hasBlocks = blocks.length > 0;
135
+ if (!hasBlocks && finalizedHeadData == null)
136
+ return;
137
+ let prevHead = this.state.head;
138
+ if (!hasBlocks && !this.db.supportsHotBlocks)
139
+ return;
140
+ assertBlocksContinuity(prevHead, blocks);
141
+ if (finalizedHeadData != null &&
142
+ this.state.finalizedHead != null &&
143
+ finalizedHeadData.number <= this.state.finalizedHead.number) {
144
+ finalizedHeadData = this.state.finalizedHead;
145
+ }
146
+ finalizedHeadData = maxBlockRef(finalizedHeadData, this.state.finalizedHead);
147
+ let unfinalizedIndex = finalizedHeadData == null ? 0 : blocks.findIndex((b) => b.header.number > finalizedHeadData.number);
148
+ unfinalizedIndex = unfinalizedIndex < 0 ? blocks.length : unfinalizedIndex;
149
+ let nextHead = (0, util_internal_1.maybeLast)(blocks)?.header ?? prevHead ?? finalizedHeadData;
150
+ if (nextHead == null)
151
+ return;
152
+ let isOnTop = nextHead.number >= chainHeight;
160
153
  let mappingStartTime = process.hrtime.bigint();
161
154
  if (this.db.supportsHotBlocks) {
155
+ let finalizedHead;
156
+ if (!hasBlocks || unfinalizedIndex === 0) {
157
+ finalizedHead = finalizedHeadData;
158
+ }
159
+ else if (unfinalizedIndex === blocks.length) {
160
+ finalizedHead = (0, util_internal_1.last)(blocks).header;
161
+ }
162
+ else {
163
+ finalizedHead = blocks[unfinalizedIndex - 1]?.header;
164
+ }
165
+ let unfinalizedSliceHeads = [];
162
166
  await this.db.transactHot2({
163
- finalizedHead,
164
- baseHead: prevHead,
165
- newBlocks: blocks.map((b) => ({
166
- hash: b.header.hash,
167
- height: b.header.number,
168
- })),
169
- }, (store, start, end) => {
170
- return this.handler({
171
- store,
172
- blocks: blocks.slice(start, end),
173
- isHead: isOnTop,
174
- });
167
+ finalizedHead: toHashAndHeight(finalizedHead),
168
+ baseHead: toHashAndHeight(prevHead),
169
+ newBlocks: blocks.map((b) => toHashAndHeight(b.header)),
170
+ }, async (store, start, end) => {
171
+ let sliceBlocks = start === 0 && end === blocks.length ? blocks : blocks.slice(start, end);
172
+ if (sliceBlocks.length === 0)
173
+ return;
174
+ if (end > unfinalizedIndex) {
175
+ unfinalizedSliceHeads.push((0, util_internal_1.last)(sliceBlocks).header);
176
+ }
177
+ return map(store, sliceBlocks, isOnTop);
175
178
  });
179
+ let newFinalizedHead = finalizedHead ?? this.state.finalizedHead;
180
+ let unfinalizedHeads = this.state.unfinalizedHeads;
181
+ if (newFinalizedHead) {
182
+ let idx = unfinalizedHeads.findIndex((h) => h.number > newFinalizedHead.number);
183
+ unfinalizedHeads = idx < 0 ? [] : unfinalizedHeads.slice(idx);
184
+ }
185
+ this.state.finalizedHead = newFinalizedHead;
186
+ this.state.unfinalizedHeads = unfinalizedHeads.concat(unfinalizedSliceHeads);
176
187
  }
177
188
  else {
189
+ (0, assert_1.default)(unfinalizedIndex === blocks.length, 'non-hot database received unfinalized blocks');
178
190
  await this.db.transact({
179
- prevHead,
180
- nextHead,
191
+ prevHead: toHashAndHeight(prevHead),
192
+ nextHead: toHashAndHeight(nextHead),
181
193
  isOnTop,
182
- }, (store) => {
183
- return this.handler({
184
- store,
185
- blocks,
186
- isHead: isOnTop,
187
- });
188
- });
194
+ }, (store) => map(store, blocks, isOnTop));
195
+ this.state.finalizedHead = nextHead;
196
+ this.state.unfinalizedHeads = [];
189
197
  }
190
198
  let mappingEndTime = process.hrtime.bigint();
191
- this.updateProgressMetrics(chainHeight, nextHead.height, mappingEndTime);
199
+ this.updateProgressMetrics(chainHeight, nextHead.number, mappingEndTime);
192
200
  this.metrics.registerBatch(blocks.length, (0, util_1.getItemsCount)(blocks), mappingStartTime, mappingEndTime);
193
201
  this.reportStatus();
194
- return nextHead;
195
202
  }
196
203
  reportStatus() {
197
204
  if (this.statusReportTimer == null) {
@@ -218,33 +225,60 @@ class Processor {
218
225
  }
219
226
  }
220
227
  }
221
- async function computeForkBase(state, forked, finalizedHead) {
222
- (0, assert_1.default)(forked?.length);
223
- let tail = forked.slice();
224
- let commited = state.top;
225
- if (commited.length > 0) {
226
- for (let i = commited.length - 1; i >= 0; i--) {
227
- let h = commited[i];
228
- while (tail.length > 0 && (0, util_internal_1.last)(tail).number > h.height) {
229
- tail.pop();
230
- }
231
- if (tail.length == 0)
232
- return h;
233
- let t = (0, util_internal_1.last)(tail);
234
- if (t.number == h.height && t.hash == h.hash)
235
- return h;
228
+ exports.Processor = Processor;
229
+ function findRollbackIndex(currentChain, forkChain) {
230
+ let currentIndex = 0;
231
+ let forkIndex = 0;
232
+ let lastCommonIndex = -1;
233
+ while (currentIndex < currentChain.length && forkIndex < forkChain.length) {
234
+ const currentBlock = currentChain[currentIndex];
235
+ const forkBlock = forkChain[forkIndex];
236
+ if (currentBlock.number > forkBlock.number) {
237
+ forkIndex++;
238
+ continue;
239
+ }
240
+ if (currentBlock.number < forkBlock.number) {
241
+ currentIndex++;
242
+ continue;
243
+ }
244
+ if (currentBlock.hash !== forkBlock.hash) {
245
+ return lastCommonIndex;
236
246
  }
247
+ lastCommonIndex = currentIndex;
248
+ currentIndex++;
249
+ forkIndex++;
237
250
  }
238
- else {
239
- if (forked[0].number > state.height)
240
- return state;
241
- let headOnChain = forked.find((b) => b.number == state.height);
242
- if (headOnChain == null || headOnChain.hash !== state.hash) {
243
- if (finalizedHead && finalizedHead.number >= state.height) {
244
- throw new Error(`finalized block ${(0, util_1.formatHead)(state)} was not found on chain`);
245
- }
251
+ return lastCommonIndex;
252
+ }
253
+ function toHashAndHeight(ref) {
254
+ if (ref == null)
255
+ return { height: -1, hash: '0x' };
256
+ return { height: ref.number, hash: ref.hash };
257
+ }
258
+ function toBlockRef(hh) {
259
+ return { number: hh.height, hash: hh.hash };
260
+ }
261
+ function toProcessorStateInit(dbState) {
262
+ let top = 'top' in dbState ? dbState.top : undefined;
263
+ return {
264
+ finalizedHead: dbState.height < 0 ? undefined : toBlockRef(dbState),
265
+ unfinalizedHeads: top?.map((b) => toBlockRef(b)),
266
+ };
267
+ }
268
+ function maxBlockRef(a, b) {
269
+ if (a == null)
270
+ return b;
271
+ if (b == null)
272
+ return a;
273
+ return a.number >= b.number ? a : b;
274
+ }
275
+ function assertBlocksContinuity(prevHead, blocks) {
276
+ let prev = prevHead;
277
+ for (let block of blocks) {
278
+ if (prev && prev.number >= block.header.number) {
279
+ throw new Error('Data is not continuous');
246
280
  }
247
- return state;
281
+ prev = block.header;
248
282
  }
249
283
  }
250
284
  //# 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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"}
package/lib/util.d.ts CHANGED
@@ -1,6 +1,6 @@
1
- import { HashAndHeight } from './database';
1
+ import type { BlockRef } from '@subsquid/util-internal-data-source';
2
2
  export declare function timeInterval(seconds: number): string;
3
3
  export declare function getItemsCount(blocks: any[]): number;
4
- export declare function formatHead(head: HashAndHeight): string;
4
+ export declare function formatHead(head: BlockRef): string;
5
5
  export declare function shortHash(hash: string): string;
6
6
  //# sourceMappingURL=util.d.ts.map
package/lib/util.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,YAAY,CAAA;AAGxC,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWpD;AAGD,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAWnD;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAEtD;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C"}
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,qCAAqC,CAAA;AAGjE,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAWpD;AAGD,wBAAgB,aAAa,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,MAAM,CAWnD;AAGD,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAEjD;AAGD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9C"}
package/lib/util.js CHANGED
@@ -29,7 +29,7 @@ function getItemsCount(blocks) {
29
29
  return count;
30
30
  }
31
31
  function formatHead(head) {
32
- return `${head.height}#${shortHash(head.hash)}`;
32
+ return `${head.number}#${shortHash(head.hash)}`;
33
33
  }
34
34
  function shortHash(hash) {
35
35
  if (hash.startsWith('0x')) {
package/lib/util.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;AAGA,oCAWC;AAGD,sCAWC;AAGD,gCAEC;AAGD,8BAMC;AAvCD,SAAgB,YAAY,CAAC,OAAe;IACxC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,CAAA;IACpC,CAAC;IACD,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,EAAE,CAAC,CAAA;IACnC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACf,OAAQ,OAAO,GAAC,GAAG,CAAA;IACvB,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACpC,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,EAAE,CAAA;IAC9B,OAAO,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,GAAG,CAAA;AACvC,CAAC;AAGD,SAAgB,aAAa,CAAC,MAAa;IACvC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;YACpB,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YACpB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,IAAI,GAAG,CAAC,MAAM,CAAA;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAA;AAChB,CAAC;AAGD,SAAgB,UAAU,CAAC,IAAmB;IAC1C,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AACnD,CAAC;AAGD,SAAgB,SAAS,CAAC,IAAY;IAClC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,CAAC;SAAM,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":";;AAGA,oCAWC;AAGD,sCAWC;AAGD,gCAEC;AAGD,8BAMC;AAvCD,SAAgB,YAAY,CAAC,OAAe;IACxC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACf,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,GAAG,CAAA;IACpC,CAAC;IACD,IAAI,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,GAAC,EAAE,CAAC,CAAA;IACnC,IAAI,OAAO,GAAG,EAAE,EAAE,CAAC;QACf,OAAQ,OAAO,GAAC,GAAG,CAAA;IACvB,CAAC;IACD,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC,CAAA;IACpC,OAAO,GAAG,OAAO,GAAG,KAAK,GAAG,EAAE,CAAA;IAC9B,OAAO,KAAK,GAAG,IAAI,GAAG,OAAO,GAAG,GAAG,CAAA;AACvC,CAAC;AAGD,SAAgB,aAAa,CAAC,MAAa;IACvC,IAAI,KAAK,GAAG,CAAC,CAAA;IACb,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE,CAAC;QACvB,KAAK,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC;YACpB,IAAI,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAA;YACpB,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrB,KAAK,IAAI,GAAG,CAAC,MAAM,CAAA;YACvB,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAA;AAChB,CAAC;AAGD,SAAgB,UAAU,CAAC,IAAc;IACrC,OAAO,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;AACnD,CAAC;AAGD,SAAgB,SAAS,CAAC,IAAY;IAClC,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,CAAC;SAAM,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3B,CAAC;AACL,CAAC"}