@belopash/typeorm-store 2.0.0-rc.4 → 2.0.0-rc.5

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
@@ -1,8 +1,10 @@
1
- import { TypeormDatabaseOptions as TypeormDatabaseOptions_, IsolationLevel } from '@subsquid/typeorm-store';
1
+ import { TypeormDatabaseOptions as TypeormDatabaseOptions_, IsolationLevel, DatabaseTransactResult } from '@subsquid/typeorm-store';
2
2
  import { DatabaseState, FinalTxInfo, HashAndHeight, HotTxInfo } from '@subsquid/typeorm-store/lib/interfaces';
3
+ import { TemplateMutation } from '@subsquid/typeorm-store/lib/templates';
3
4
  import { DataSource } from 'typeorm';
4
5
  import { Store } from './store';
5
6
  import { StateManager } from './utils/stateManager';
7
+ export { DatabaseTransactResult, TemplateMutation };
6
8
  export { IsolationLevel };
7
9
  export interface TypeormDatabaseOptions extends TypeormDatabaseOptions_ {
8
10
  /**
@@ -33,15 +35,16 @@ export declare class TypeormDatabase {
33
35
  };
34
36
  protected projectDir: string;
35
37
  readonly supportsHotBlocks: boolean;
38
+ readonly supportsTemplates: true;
36
39
  constructor(options?: TypeormDatabaseOptions);
37
40
  connect(): Promise<DatabaseState>;
38
41
  protected initializeDataSource(): Promise<DataSource>;
39
42
  disconnect(): Promise<void>;
40
43
  private initTransaction;
41
44
  private getState;
42
- transact(info: FinalTxInfo, cb: (store: Store) => Promise<void>): Promise<void>;
45
+ transact(info: FinalTxInfo, cb: (store: Store) => Promise<DatabaseTransactResult | void>): Promise<void>;
43
46
  transactHot(info: HotTxInfo, cb: (store: Store, block: HashAndHeight) => Promise<void>): Promise<void>;
44
- transactHot2(info: HotTxInfo, cb: (store: Store, sliceBeg: number, sliceEnd: number) => Promise<void>): Promise<void>;
47
+ transactHot2(info: HotTxInfo, cb: (store: Store, sliceBeg: number, sliceEnd: number) => Promise<DatabaseTransactResult | void>): Promise<void>;
45
48
  private deleteHotBlocks;
46
49
  private insertHotBlock;
47
50
  private updateStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AACA,OAAO,EACH,sBAAsB,IAAI,uBAAuB,EACjD,cAAc,EACjB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,SAAS,EAAC,MAAM,wCAAwC,CAAA;AAG3G,OAAO,EAAC,UAAU,EAAgB,MAAM,SAAS,CAAA;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAA;AAGjD,OAAO,EAAC,cAAc,EAAC,CAAA;AAEvB,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACnE;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAEjC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,QAAA,MAAM,kBAAkB,eAAyB,CAAA;AAEjD,qBAAa,eAAe;IACxB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAA;IAC9B,SAAS,CAAC,cAAc,EAAE,cAAc,CAAA;IACxC,SAAS,CAAC,uBAAuB,EAAE,OAAO,CAAA;IAC1C,SAAS,CAAC,aAAa,EAAE,OAAO,CAAA;IAChC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAA;IAChC,SAAS,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG;QACzB,CAAC,kBAAkB,CAAC,CAAC,EAAE,YAAY,CAAA;KACtC,CAAA;IACD,SAAS,CAAC,UAAU,EAAE,MAAM,CAAA;IAE5B,SAAgB,iBAAiB,EAAE,OAAO,CAAA;gBAE9B,OAAO,CAAC,EAAE,sBAAsB;IAUtC,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;cAcvB,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC;IAMrD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAInB,eAAe;YA2Cf,QAAQ;IActB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/E,WAAW,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAQtG,YAAY,CACR,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,GACxE,OAAO,CAAC,IAAI,CAAC;IAgDhB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,cAAc;YAOR,YAAY;YAeZ,cAAc;YA2Bd,MAAM;IAiBpB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,eAAe;CAa1B"}
1
+ {"version":3,"file":"database.d.ts","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"AACA,OAAO,EACH,sBAAsB,IAAI,uBAAuB,EACjD,cAAc,EACd,sBAAsB,EACzB,MAAM,yBAAyB,CAAA;AAEhC,OAAO,EAAC,aAAa,EAAE,WAAW,EAAE,aAAa,EAAY,SAAS,EAAC,MAAM,wCAAwC,CAAA;AACrH,OAAO,EAAC,gBAAgB,EAA0B,MAAM,uCAAuC,CAAA;AAG/F,OAAO,EAAC,UAAU,EAAgB,MAAM,SAAS,CAAA;AACjD,OAAO,EAAC,KAAK,EAAC,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAC,YAAY,EAAC,MAAM,sBAAsB,CAAA;AAGjD,OAAO,EAAC,sBAAsB,EAAE,gBAAgB,EAAC,CAAA;AAEjD,OAAO,EAAC,cAAc,EAAC,CAAA;AAEvB,MAAM,WAAW,sBAAuB,SAAQ,uBAAuB;IACnE;;;OAGG;IACH,uBAAuB,CAAC,EAAE,OAAO,CAAA;IAEjC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;IAEvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAA;CAC1B;AAED,QAAA,MAAM,kBAAkB,eAAyB,CAAA;AAEjD,qBAAa,eAAe;IACxB,SAAS,CAAC,YAAY,EAAE,MAAM,CAAA;IAC9B,SAAS,CAAC,cAAc,EAAE,cAAc,CAAA;IACxC,SAAS,CAAC,uBAAuB,EAAE,OAAO,CAAA;IAC1C,SAAS,CAAC,aAAa,EAAE,OAAO,CAAA;IAChC,SAAS,CAAC,aAAa,EAAE,OAAO,CAAA;IAChC,SAAS,CAAC,GAAG,CAAC,EAAE,UAAU,GAAG;QACzB,CAAC,kBAAkB,CAAC,CAAC,EAAE,YAAY,CAAA;KACtC,CAAA;IACD,SAAS,CAAC,UAAU,EAAE,MAAM,CAAA;IAE5B,SAAgB,iBAAiB,EAAE,OAAO,CAAA;IAC1C,SAAgB,iBAAiB,EAAG,IAAI,CAAS;gBAErC,OAAO,CAAC,EAAE,sBAAsB;IAUtC,OAAO,IAAI,OAAO,CAAC,aAAa,CAAC;cAcvB,oBAAoB,IAAI,OAAO,CAAC,UAAU,CAAC;IAMrD,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;YAInB,eAAe;YAqEf,QAAQ;IAetB,QAAQ,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBxG,WAAW,CACP,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,IAAI,CAAC,GAC1D,OAAO,CAAC,IAAI,CAAC;IAQhB,YAAY,CACR,IAAI,EAAE,SAAS,EACf,EAAE,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,GACjG,OAAO,CAAC,IAAI,CAAC;IAqDhB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,cAAc;YAOR,YAAY;YAeZ,cAAc;YAgCd,MAAM;IAiBpB,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,SAAS;IAIjB,OAAO,CAAC,eAAe;CAa1B"}
package/lib/database.js CHANGED
@@ -15,6 +15,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
15
15
  exports.TypeormDatabase = void 0;
16
16
  const logger_1 = require("@subsquid/logger");
17
17
  const hot_1 = require("@subsquid/typeorm-store/lib/hot");
18
+ const templates_1 = require("@subsquid/typeorm-store/lib/templates");
18
19
  const util_internal_1 = require("@subsquid/util-internal");
19
20
  const assert_1 = __importDefault(require("assert"));
20
21
  const typeorm_1 = require("typeorm");
@@ -24,6 +25,7 @@ const typeorm_config_1 = require("@subsquid/typeorm-config");
24
25
  const StateManagerSymbol = Symbol('StateManager');
25
26
  class TypeormDatabase {
26
27
  constructor(options) {
28
+ this.supportsTemplates = true;
27
29
  this.statusSchema = options?.stateSchema || 'squid_processor';
28
30
  this.isolationLevel = options?.isolationLevel || 'SERIALIZABLE';
29
31
  this.postponeWriteOperations = options?.postponeWriteOperations ?? true;
@@ -74,20 +76,38 @@ class TypeormDatabase {
74
76
  `change jsonb not null, ` +
75
77
  `PRIMARY KEY (block_height, index)` +
76
78
  `)`);
79
+ await em.query(`CREATE TABLE IF NOT EXISTS ${schema}.template_registry (` +
80
+ `key text not null, ` +
81
+ `value text not null, ` +
82
+ `type boolean not null, ` +
83
+ `block_number int not null, ` +
84
+ `height int not null, ` +
85
+ `PRIMARY KEY (key, value, type, block_number)` +
86
+ `)`);
77
87
  let status = await em.query(`SELECT height, hash, nonce FROM ${schema}.status WHERE id = 0`);
78
88
  if (status.length == 0) {
79
89
  await em.query(`INSERT INTO ${schema}.status (id, height, hash) VALUES (0, -1, '0x')`);
80
- status.push({ height: -1, hash: '0x', nonce: 0 });
90
+ return assertStateInvariants({ height: -1, hash: '0x', nonce: 0, top: [], templates: [] });
91
+ }
92
+ let rawTemplates = await em.query(`SELECT key, value, type, block_number FROM ${schema}.template_registry ` +
93
+ `WHERE height <= $1 ORDER BY height, block_number, type, key, value`, [status[0].height]);
94
+ let templates = rawTemplates.map(mapTemplateMutation);
95
+ let hotBlocks = await em.query(`SELECT height, hash FROM ${schema}.hot_block ORDER BY height`);
96
+ let top = [];
97
+ for (let block of hotBlocks) {
98
+ let rawBlockTemplates = await em.query(`SELECT key, value, type, block_number FROM ${schema}.template_registry ` +
99
+ `WHERE height = $1 ORDER BY block_number, type, key, value`, [block.height]);
100
+ top.push({ ...block, templates: rawBlockTemplates.map(mapTemplateMutation) });
81
101
  }
82
- let top = await em.query(`SELECT height, hash FROM ${schema}.hot_block ORDER BY height`);
83
- return assertStateInvariants({ ...status[0], top });
102
+ return assertStateInvariants({ ...status[0], top, templates });
84
103
  }
85
104
  async getState(em) {
86
105
  let schema = this.escapedSchema();
87
106
  let status = await em.query(`SELECT height, hash, nonce FROM ${schema}.status WHERE id = 0`);
88
107
  (0, assert_1.default)(status.length == 1);
89
- let top = await em.query(`SELECT hash, height FROM ${schema}.hot_block ORDER BY height`);
90
- return assertStateInvariants({ ...status[0], top });
108
+ let rawTop = await em.query(`SELECT hash, height FROM ${schema}.hot_block ORDER BY height`);
109
+ let top = rawTop.map(b => ({ ...b, templates: [] }));
110
+ return assertStateInvariants({ ...status[0], top, templates: [] });
91
111
  }
92
112
  transact(info, cb) {
93
113
  return this.submit(async (em) => {
@@ -101,7 +121,7 @@ class TypeormDatabase {
101
121
  let block = state.top[i];
102
122
  await (0, hot_1.rollbackBlock)(this.statusSchema, em, block.height);
103
123
  }
104
- await this.performUpdates(cb, em);
124
+ await this.performUpdates(cb, em, new templates_1.TemplateRegistryTracker(em, this.statusSchema, next.height));
105
125
  await this.updateStatus(em, state.nonce, next);
106
126
  });
107
127
  }
@@ -134,12 +154,12 @@ class TypeormDatabase {
134
154
  finalizedEnd = info.newBlocks.length;
135
155
  }
136
156
  if (finalizedEnd > 0) {
137
- await this.performUpdates((store) => cb(store, 0, finalizedEnd), em);
157
+ await this.performUpdates((store) => cb(store, 0, finalizedEnd), em, new templates_1.TemplateRegistryTracker(em, this.statusSchema, info.finalizedHead.height));
138
158
  }
139
159
  for (let i = finalizedEnd; i < info.newBlocks.length; i++) {
140
160
  let b = info.newBlocks[i];
141
161
  await this.insertHotBlock(em, b);
142
- await this.performUpdates((store) => cb(store, i, i + 1), em, new hot_1.ChangeTracker(em, this.statusSchema, b.height));
162
+ await this.performUpdates((store) => cb(store, i, i + 1), em, new templates_1.TemplateRegistryTracker(em, this.statusSchema, b.height), new hot_1.ChangeTracker(em, this.statusSchema, b.height));
143
163
  }
144
164
  }
145
165
  chain = chain.slice(0, rollbackPos).concat(info.newBlocks);
@@ -164,7 +184,7 @@ class TypeormDatabase {
164
184
  // but occasionally people use multiprocessor setups and READ_COMMITTED.
165
185
  assert_1.default.strictEqual(rowsChanged, 1, RACE_MSG);
166
186
  }
167
- async performUpdates(cb, em, changeWriter) {
187
+ async performUpdates(cb, em, templateRegistry, changeWriter) {
168
188
  let store = new store_1.Store({
169
189
  em,
170
190
  state: this.getStateManager(),
@@ -174,13 +194,16 @@ class TypeormDatabase {
174
194
  cacheEntities: this.cacheEntities,
175
195
  });
176
196
  try {
177
- await cb(store);
197
+ let result = await cb(store);
178
198
  if (this.resetOnCommit) {
179
199
  await store.flush();
180
200
  }
181
201
  else {
182
202
  await store.sync();
183
203
  }
204
+ if (result?.templates) {
205
+ await templateRegistry.persist(result.templates);
206
+ }
184
207
  }
185
208
  finally {
186
209
  store['isClosed'] = true;
@@ -246,4 +269,12 @@ function assertChainContinuity(base, chain) {
246
269
  prev = b;
247
270
  }
248
271
  }
272
+ function mapTemplateMutation(r) {
273
+ return {
274
+ type: r.type ? 'add' : 'delete',
275
+ key: r.key,
276
+ value: r.value,
277
+ blockNumber: r.block_number,
278
+ };
279
+ }
249
280
  //# sourceMappingURL=database.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"database.js","sourceRoot":"","sources":["../src/database.ts"],"names":[],"mappings":"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"}
package/lib/index.d.ts CHANGED
@@ -1,3 +1,3 @@
1
- export { TypeormDatabase, TypeormDatabase as TypeormDatabaseWithCache, TypeormDatabaseOptions } from './database';
1
+ export { TypeormDatabase, TypeormDatabase as TypeormDatabaseWithCache, TypeormDatabaseOptions, DatabaseTransactResult, TemplateMutation, } from './database';
2
2
  export { EntityTarget, EntityLiteral, EntityLiteral as Entity, FindManyOptions, FindOneOptions, Store, Store as StoreWithCache, TrackOptions, } from './store';
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,eAAe,EAAE,eAAe,IAAI,wBAAwB,EAAE,sBAAsB,EAAC,MAAM,YAAY,CAAA;AAC/G,OAAO,EACH,YAAY,EACZ,aAAa,EACb,aAAa,IAAI,MAAM,EACvB,eAAe,EACf,cAAc,EACd,KAAK,EACL,KAAK,IAAI,cAAc,EACvB,YAAY,GACf,MAAM,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,eAAe,EACf,eAAe,IAAI,wBAAwB,EAC3C,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,GACnB,MAAM,YAAY,CAAA;AACnB,OAAO,EACH,YAAY,EACZ,aAAa,EACb,aAAa,IAAI,MAAM,EACvB,eAAe,EACf,cAAc,EACd,KAAK,EACL,KAAK,IAAI,cAAc,EACvB,YAAY,GACf,MAAM,SAAS,CAAA"}
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAA+G;AAAvG,2GAAA,eAAe,OAAA;AAAE,oHAAA,eAAe,OAA4B;AACpE,iCASgB;AAHZ,8FAAA,KAAK,OAAA;AACL,uGAAA,KAAK,OAAkB"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,uCAMmB;AALf,2GAAA,eAAe,OAAA;AACf,oHAAA,eAAe,OAA4B;AAK/C,iCASgB;AAHZ,8FAAA,KAAK,OAAA;AACL,uGAAA,KAAK,OAAkB"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@belopash/typeorm-store",
3
- "version": "2.0.0-rc.4",
3
+ "version": "2.0.0-rc.5",
4
4
  "description": "Optimized TypeORM based storage for squid mappings",
5
5
  "repository": {
6
6
  "url": "git+https://github.com/belopash/squid-typeorm-store.git"
@@ -25,7 +25,7 @@
25
25
  "peerDependencies": {
26
26
  "@subsquid/logger": "^1",
27
27
  "@subsquid/typeorm-config": "^4",
28
- "@subsquid/typeorm-store": "^1",
28
+ "@subsquid/typeorm-store": "^1.8.0",
29
29
  "pg": "^8.11.3",
30
30
  "typeorm": "^0.3.20"
31
31
  },
package/src/database.ts CHANGED
@@ -2,9 +2,11 @@ import {createLogger} from '@subsquid/logger'
2
2
  import {
3
3
  TypeormDatabaseOptions as TypeormDatabaseOptions_,
4
4
  IsolationLevel,
5
+ DatabaseTransactResult,
5
6
  } from '@subsquid/typeorm-store'
6
7
  import {ChangeTracker, rollbackBlock} from '@subsquid/typeorm-store/lib/hot'
7
- import {DatabaseState, FinalTxInfo, HashAndHeight, HotTxInfo} from '@subsquid/typeorm-store/lib/interfaces'
8
+ import {DatabaseState, FinalTxInfo, HashAndHeight, HotBlock, HotTxInfo} from '@subsquid/typeorm-store/lib/interfaces'
9
+ import {TemplateMutation, TemplateRegistryTracker} from '@subsquid/typeorm-store/lib/templates'
8
10
  import {assertNotNull, def, maybeLast} from '@subsquid/util-internal'
9
11
  import assert from 'assert'
10
12
  import {DataSource, EntityManager} from 'typeorm'
@@ -12,6 +14,8 @@ import {Store} from './store'
12
14
  import {StateManager} from './utils/stateManager'
13
15
  import {createOrmConfig} from '@subsquid/typeorm-config'
14
16
 
17
+ export {DatabaseTransactResult, TemplateMutation}
18
+
15
19
  export {IsolationLevel}
16
20
 
17
21
  export interface TypeormDatabaseOptions extends TypeormDatabaseOptions_ {
@@ -48,6 +52,7 @@ export class TypeormDatabase {
48
52
  protected projectDir: string
49
53
 
50
54
  public readonly supportsHotBlocks: boolean
55
+ public readonly supportsTemplates = true as const
51
56
 
52
57
  constructor(options?: TypeormDatabaseOptions) {
53
58
  this.statusSchema = options?.stateSchema || 'squid_processor'
@@ -112,18 +117,44 @@ export class TypeormDatabase {
112
117
  `PRIMARY KEY (block_height, index)` +
113
118
  `)`
114
119
  )
120
+ await em.query(
121
+ `CREATE TABLE IF NOT EXISTS ${schema}.template_registry (` +
122
+ `key text not null, ` +
123
+ `value text not null, ` +
124
+ `type boolean not null, ` +
125
+ `block_number int not null, ` +
126
+ `height int not null, ` +
127
+ `PRIMARY KEY (key, value, type, block_number)` +
128
+ `)`
129
+ )
115
130
 
116
131
  let status: (HashAndHeight & {nonce: number})[] = await em.query(
117
132
  `SELECT height, hash, nonce FROM ${schema}.status WHERE id = 0`
118
133
  )
119
134
  if (status.length == 0) {
120
135
  await em.query(`INSERT INTO ${schema}.status (id, height, hash) VALUES (0, -1, '0x')`)
121
- status.push({height: -1, hash: '0x', nonce: 0})
136
+ return assertStateInvariants({height: -1, hash: '0x', nonce: 0, top: [], templates: []})
122
137
  }
123
138
 
124
- let top: HashAndHeight[] = await em.query(`SELECT height, hash FROM ${schema}.hot_block ORDER BY height`)
139
+ let rawTemplates: any[] = await em.query(
140
+ `SELECT key, value, type, block_number FROM ${schema}.template_registry ` +
141
+ `WHERE height <= $1 ORDER BY height, block_number, type, key, value`,
142
+ [status[0].height]
143
+ )
144
+ let templates: TemplateMutation[] = rawTemplates.map(mapTemplateMutation)
145
+
146
+ let hotBlocks: HashAndHeight[] = await em.query(`SELECT height, hash FROM ${schema}.hot_block ORDER BY height`)
147
+ let top: HotBlock[] = []
148
+ for (let block of hotBlocks) {
149
+ let rawBlockTemplates: any[] = await em.query(
150
+ `SELECT key, value, type, block_number FROM ${schema}.template_registry ` +
151
+ `WHERE height = $1 ORDER BY block_number, type, key, value`,
152
+ [block.height]
153
+ )
154
+ top.push({...block, templates: rawBlockTemplates.map(mapTemplateMutation)})
155
+ }
125
156
 
126
- return assertStateInvariants({...status[0], top})
157
+ return assertStateInvariants({...status[0], top, templates})
127
158
  }
128
159
 
129
160
  private async getState(em: EntityManager): Promise<DatabaseState> {
@@ -135,12 +166,13 @@ export class TypeormDatabase {
135
166
 
136
167
  assert(status.length == 1)
137
168
 
138
- let top: HashAndHeight[] = await em.query(`SELECT hash, height FROM ${schema}.hot_block ORDER BY height`)
169
+ let rawTop: HashAndHeight[] = await em.query(`SELECT hash, height FROM ${schema}.hot_block ORDER BY height`)
170
+ let top: HotBlock[] = rawTop.map(b => ({...b, templates: []}))
139
171
 
140
- return assertStateInvariants({...status[0], top})
172
+ return assertStateInvariants({...status[0], top, templates: []})
141
173
  }
142
174
 
143
- transact(info: FinalTxInfo, cb: (store: Store) => Promise<void>): Promise<void> {
175
+ transact(info: FinalTxInfo, cb: (store: Store) => Promise<DatabaseTransactResult | void>): Promise<void> {
144
176
  return this.submit(async (em) => {
145
177
  let state = await this.getState(em)
146
178
  let {prevHead: prev, nextHead: next} = info
@@ -155,13 +187,16 @@ export class TypeormDatabase {
155
187
  await rollbackBlock(this.statusSchema, em, block.height)
156
188
  }
157
189
 
158
- await this.performUpdates(cb, em)
190
+ await this.performUpdates(cb, em, new TemplateRegistryTracker(em, this.statusSchema, next.height))
159
191
 
160
192
  await this.updateStatus(em, state.nonce, next)
161
193
  })
162
194
  }
163
195
 
164
- transactHot(info: HotTxInfo, cb: (store: Store, block: HashAndHeight) => Promise<void>): Promise<void> {
196
+ transactHot(
197
+ info: HotTxInfo,
198
+ cb: (store: Store, block: HashAndHeight) => Promise<void>
199
+ ): Promise<void> {
165
200
  return this.transactHot2(info, async (store, sliceBeg, sliceEnd) => {
166
201
  for (let i = sliceBeg; i < sliceEnd; i++) {
167
202
  await cb(store, info.newBlocks[i])
@@ -171,11 +206,11 @@ export class TypeormDatabase {
171
206
 
172
207
  transactHot2(
173
208
  info: HotTxInfo,
174
- cb: (store: Store, sliceBeg: number, sliceEnd: number) => Promise<void>
209
+ cb: (store: Store, sliceBeg: number, sliceEnd: number) => Promise<DatabaseTransactResult | void>
175
210
  ): Promise<void> {
176
211
  return this.submit(async (em) => {
177
212
  let state = await this.getState(em)
178
- let chain = [state, ...state.top]
213
+ let chain: HashAndHeight[] = [state, ...state.top]
179
214
 
180
215
  assertChainContinuity(info.baseHead, info.newBlocks)
181
216
  assert(info.finalizedHead.height <= (maybeLast(info.newBlocks) ?? info.baseHead).height)
@@ -199,7 +234,11 @@ export class TypeormDatabase {
199
234
  finalizedEnd = info.newBlocks.length
200
235
  }
201
236
  if (finalizedEnd > 0) {
202
- await this.performUpdates((store) => cb(store, 0, finalizedEnd), em)
237
+ await this.performUpdates(
238
+ (store) => cb(store, 0, finalizedEnd),
239
+ em,
240
+ new TemplateRegistryTracker(em, this.statusSchema, info.finalizedHead.height)
241
+ )
203
242
  }
204
243
  for (let i = finalizedEnd; i < info.newBlocks.length; i++) {
205
244
  let b = info.newBlocks[i]
@@ -207,6 +246,7 @@ export class TypeormDatabase {
207
246
  await this.performUpdates(
208
247
  (store) => cb(store, i, i + 1),
209
248
  em,
249
+ new TemplateRegistryTracker(em, this.statusSchema, b.height),
210
250
  new ChangeTracker(em, this.statusSchema, b.height)
211
251
  )
212
252
  }
@@ -247,8 +287,9 @@ export class TypeormDatabase {
247
287
  }
248
288
 
249
289
  private async performUpdates(
250
- cb: (store: Store) => Promise<void>,
290
+ cb: (store: Store) => Promise<DatabaseTransactResult | void>,
251
291
  em: EntityManager,
292
+ templateRegistry: TemplateRegistryTracker,
252
293
  changeWriter?: ChangeTracker
253
294
  ): Promise<void> {
254
295
  let store = new Store({
@@ -261,13 +302,17 @@ export class TypeormDatabase {
261
302
  })
262
303
 
263
304
  try {
264
- await cb(store)
305
+ let result = await cb(store)
265
306
 
266
307
  if (this.resetOnCommit) {
267
308
  await store.flush()
268
309
  } else {
269
310
  await store.sync()
270
311
  }
312
+
313
+ if (result?.templates) {
314
+ await templateRegistry.persist(result.templates)
315
+ }
271
316
  } finally {
272
317
  store['isClosed'] = true
273
318
  }
@@ -335,3 +380,12 @@ function assertChainContinuity(base: HashAndHeight, chain: HashAndHeight[]) {
335
380
  prev = b
336
381
  }
337
382
  }
383
+
384
+ function mapTemplateMutation(r: any): TemplateMutation {
385
+ return {
386
+ type: r.type ? 'add' : 'delete',
387
+ key: r.key,
388
+ value: r.value,
389
+ blockNumber: r.block_number,
390
+ }
391
+ }
package/src/index.ts CHANGED
@@ -1,4 +1,10 @@
1
- export {TypeormDatabase, TypeormDatabase as TypeormDatabaseWithCache, TypeormDatabaseOptions} from './database'
1
+ export {
2
+ TypeormDatabase,
3
+ TypeormDatabase as TypeormDatabaseWithCache,
4
+ TypeormDatabaseOptions,
5
+ DatabaseTransactResult,
6
+ TemplateMutation,
7
+ } from './database'
2
8
  export {
3
9
  EntityTarget,
4
10
  EntityLiteral,