@xyo-network/chain-api 1.15.2 → 1.15.4
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/dist/node/driver/mongo/MongoMap.d.ts +9 -3
- package/dist/node/driver/mongo/MongoMap.d.ts.map +1 -1
- package/dist/node/helpers/index.d.ts +5 -0
- package/dist/node/helpers/index.d.ts.map +1 -0
- package/dist/node/helpers/initChainId.d.ts +4 -0
- package/dist/node/helpers/initChainId.d.ts.map +1 -0
- package/dist/node/helpers/initEvmProvider.d.ts +11 -0
- package/dist/node/helpers/initEvmProvider.d.ts.map +1 -0
- package/dist/node/helpers/initInfuraProvider.d.ts +6 -0
- package/dist/node/helpers/initInfuraProvider.d.ts.map +1 -0
- package/dist/node/helpers/initJsonRpcProvider.d.ts +6 -0
- package/dist/node/helpers/initJsonRpcProvider.d.ts.map +1 -0
- package/dist/node/index.mjs +198 -39
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/manifest/getLocator.d.ts.map +1 -1
- package/dist/node/server/app.d.ts +2 -1
- package/dist/node/server/app.d.ts.map +1 -1
- package/dist/node/server/routes/addRoutes.d.ts +2 -1
- package/dist/node/server/routes/addRoutes.d.ts.map +1 -1
- package/dist/node/server/routes/healthz/get.d.ts +2 -1
- package/dist/node/server/routes/healthz/get.d.ts.map +1 -1
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts +2 -1
- package/dist/node/server/routes/rpc/routes/addRpcRoutes.d.ts.map +1 -1
- package/dist/node/server/server.d.ts.map +1 -1
- package/package.json +58 -51
- package/src/driver/mongo/MongoMap.ts +42 -4
- package/src/helpers/index.ts +4 -0
- package/src/helpers/initChainId.ts +20 -0
- package/src/helpers/initEvmProvider.ts +24 -0
- package/src/helpers/initInfuraProvider.ts +27 -0
- package/src/helpers/initJsonRpcProvider.ts +21 -0
- package/src/manifest/getLocator.ts +24 -9
- package/src/manifest/public/Chain.json +52 -15
- package/src/server/app.ts +3 -2
- package/src/server/routes/addRoutes.ts +3 -2
- package/src/server/routes/healthz/get.ts +1 -1
- package/src/server/routes/rpc/routes/addRpcRoutes.ts +3 -2
- package/src/server/server.ts +23 -2
|
@@ -1,17 +1,23 @@
|
|
|
1
1
|
import { AbstractCreatable, CreatableParams } from '@xylabs/creatable';
|
|
2
2
|
import { BaseMongoSdk } from '@xylabs/mongo';
|
|
3
|
-
import { AsynchronousMap } from '@xyo-network/
|
|
3
|
+
import { AsynchronousMap } from '@xyo-network/xl1-protocol-sdk';
|
|
4
4
|
import { Document } from 'mongodb';
|
|
5
5
|
export interface MongoMapParams<TData extends Document = Document> extends CreatableParams {
|
|
6
|
+
getCache?: {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
maxEntries?: number;
|
|
9
|
+
};
|
|
6
10
|
sdk: BaseMongoSdk<TData>;
|
|
7
11
|
}
|
|
8
|
-
export declare class MongoMap<K = string, V extends Document = Document> extends AbstractCreatable<MongoMapParams<V>> implements AsynchronousMap<K, V> {
|
|
12
|
+
export declare class MongoMap<K extends {} = string, V extends Document = Document> extends AbstractCreatable<MongoMapParams<V>> implements AsynchronousMap<K, V> {
|
|
13
|
+
private _getCache;
|
|
9
14
|
get sdk(): BaseMongoSdk<V>;
|
|
10
15
|
clear(): Promise<void>;
|
|
11
16
|
delete(id: K): Promise<boolean>;
|
|
12
17
|
get(id: K): Promise<V | undefined>;
|
|
18
|
+
getMany(ids: K[]): Promise<V[]>;
|
|
13
19
|
has(id: K): Promise<boolean>;
|
|
14
|
-
set(id: K, data: V): Promise<
|
|
20
|
+
set(id: K, data: V): Promise<void>;
|
|
15
21
|
startHandler(): Promise<void>;
|
|
16
22
|
}
|
|
17
23
|
//# sourceMappingURL=MongoMap.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MongoMap.d.ts","sourceRoot":"","sources":["../../../../src/driver/mongo/MongoMap.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAAa,eAAe,EAC9C,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"MongoMap.d.ts","sourceRoot":"","sources":["../../../../src/driver/mongo/MongoMap.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EAAa,eAAe,EAC9C,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAE5C,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAA;AAE/D,OAAO,EACL,QAAQ,EACT,MAAM,SAAS,CAAA;AAEhB,MAAM,WAAW,cAAc,CAAC,KAAK,SAAS,QAAQ,GAAG,QAAQ,CAAE,SAAQ,eAAe;IACxF,QAAQ,CAAC,EAAE;QACT,OAAO,EAAE,OAAO,CAAA;QAChB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;IACD,GAAG,EAAE,YAAY,CAAC,KAAK,CAAC,CAAA;CACzB;AAOD,qBACa,QAAQ,CAAC,CAAC,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,SAAS,QAAQ,GAAG,QAAQ,CACxE,SAAQ,iBAAiB,CAAC,cAAc,CAAC,CAAC,CAAC,CAC3C,YAAW,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC;IAChC,OAAO,CAAC,SAAS,CAA4B;IAE7C,IAAI,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAEzB;IAEK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAKtB,MAAM,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAQ/B,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAYlC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAW/B,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAY5B,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOzB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;CAS7C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/helpers/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,sBAAsB,CAAA;AACpC,cAAc,yBAAyB,CAAA;AACvC,cAAc,0BAA0B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initChainId.d.ts","sourceRoot":"","sources":["../../../src/helpers/initChainId.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAE3D,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,KAAG,OAE9C,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,MAAM,WAUxC,CAAA"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Logger } from '@xylabs/logger';
|
|
2
|
+
import type { Config } from '@xyo-network/xl1-protocol-sdk';
|
|
3
|
+
import type { Provider } from 'ethers';
|
|
4
|
+
export declare const initEvmProvider: ({ config }: {
|
|
5
|
+
config: Config;
|
|
6
|
+
logger?: Logger;
|
|
7
|
+
}) => Promise<Provider>;
|
|
8
|
+
export declare const canUseEvmProvider: ({ config }: {
|
|
9
|
+
config: Config;
|
|
10
|
+
}) => boolean;
|
|
11
|
+
//# sourceMappingURL=initEvmProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initEvmProvider.d.ts","sourceRoot":"","sources":["../../../src/helpers/initEvmProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAA;AAQtC,eAAO,MAAM,eAAe,GAAU,YAAY;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,QAAQ,CAQvG,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,YAAY;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,YAE/D,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Config } from '@xyo-network/xl1-protocol-sdk';
|
|
2
|
+
import { InfuraProvider } from 'ethers/providers';
|
|
3
|
+
export declare const initInfuraProvider: (config: Config) => Promise<InfuraProvider>;
|
|
4
|
+
export declare const canUseInfuraProvider: (config: Config) => boolean;
|
|
5
|
+
export declare const getInfuraProviderConfig: (config: Config) => readonly [number, string, string];
|
|
6
|
+
//# sourceMappingURL=initInfuraProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initInfuraProvider.d.ts","sourceRoot":"","sources":["../../../src/helpers/initInfuraProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMjD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,4BAKhD,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,QAAQ,MAAM,KAAG,OAIrD,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,sCAIrD,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Config } from '@xyo-network/xl1-protocol-sdk';
|
|
2
|
+
import { JsonRpcProvider } from 'ethers/providers';
|
|
3
|
+
export declare const initJsonRpcProvider: (config: Config) => Promise<JsonRpcProvider>;
|
|
4
|
+
export declare const canUseJsonRpcProvider: (config: Config) => boolean;
|
|
5
|
+
export declare const getJsonRpcProviderConfig: (config: Config) => readonly [string, number];
|
|
6
|
+
//# sourceMappingURL=initJsonRpcProvider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"initJsonRpcProvider.d.ts","sourceRoot":"","sources":["../../../src/helpers/initJsonRpcProvider.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIlD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,MAAM,6BAGjD,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,YAGnD,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,QAAQ,MAAM,8BAGtD,CAAA"}
|
package/dist/node/index.mjs
CHANGED
|
@@ -264,10 +264,10 @@ var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
|
|
|
264
264
|
import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
|
|
265
265
|
import { NodeXyoViewer } from "@xyo-network/chain-rpc";
|
|
266
266
|
import { NodeXyoRunner, rpcEngineFromConnection, XyoBaseConnection } from "@xyo-network/xl1-rpc";
|
|
267
|
-
var addRpcRoutes = /* @__PURE__ */ __name((app) => {
|
|
267
|
+
var addRpcRoutes = /* @__PURE__ */ __name((app, eventsReader, stakedChainContext) => {
|
|
268
268
|
const { node } = app;
|
|
269
269
|
const runner = new NodeXyoRunner(node);
|
|
270
|
-
const viewer = new NodeXyoViewer(node);
|
|
270
|
+
const viewer = new NodeXyoViewer(node, eventsReader, stakedChainContext);
|
|
271
271
|
const connection = new XyoBaseConnection({
|
|
272
272
|
runner,
|
|
273
273
|
viewer
|
|
@@ -282,14 +282,14 @@ var addRpcRoutes = /* @__PURE__ */ __name((app) => {
|
|
|
282
282
|
}, "addRpcRoutes");
|
|
283
283
|
|
|
284
284
|
// src/server/routes/addRoutes.ts
|
|
285
|
-
var addRoutes = /* @__PURE__ */ __name((app) => {
|
|
286
|
-
addRpcRoutes(app);
|
|
285
|
+
var addRoutes = /* @__PURE__ */ __name((app, eventsReader, stakedChainContext) => {
|
|
286
|
+
addRpcRoutes(app, eventsReader, stakedChainContext);
|
|
287
287
|
addDataLakeRoutes(app);
|
|
288
288
|
addNodeRoutes(app);
|
|
289
289
|
}, "addRoutes");
|
|
290
290
|
|
|
291
291
|
// src/server/app.ts
|
|
292
|
-
var getApp = /* @__PURE__ */ __name((node) => {
|
|
292
|
+
var getApp = /* @__PURE__ */ __name((node, eventsReader, stakedChainContext) => {
|
|
293
293
|
addInstrumentation();
|
|
294
294
|
const app = express2();
|
|
295
295
|
app.set("etag", false);
|
|
@@ -304,36 +304,83 @@ var getApp = /* @__PURE__ */ __name((node) => {
|
|
|
304
304
|
app.use(customPoweredByHeader);
|
|
305
305
|
disableCaseSensitiveRouting(app);
|
|
306
306
|
app.node = node;
|
|
307
|
-
addRoutes(app);
|
|
307
|
+
addRoutes(app, eventsReader, stakedChainContext);
|
|
308
308
|
app.use(standardErrors);
|
|
309
309
|
return app;
|
|
310
310
|
}, "getApp");
|
|
311
311
|
|
|
312
312
|
// src/server/server.ts
|
|
313
|
-
import { assertEx as
|
|
314
|
-
import {
|
|
313
|
+
import { assertEx as assertEx7 } from "@xylabs/assert";
|
|
314
|
+
import { toEthAddress, ZERO_HASH } from "@xylabs/hex";
|
|
315
|
+
import { isDefined as isDefined5, isString } from "@xylabs/typeof";
|
|
316
|
+
import { asArchivistInstance as asArchivistInstance2 } from "@xyo-network/archivist-model";
|
|
315
317
|
import { boot } from "@xyo-network/bios";
|
|
318
|
+
import { EthereumChainStake, EthereumChainStakeEvents } from "@xyo-network/chain-ethereum";
|
|
319
|
+
import { StakedXyoChainV2__factory } from "@xyo-network/typechain";
|
|
316
320
|
import { HDWallet } from "@xyo-network/wallet";
|
|
321
|
+
import { readPayloadMapFromStore } from "@xyo-network/xl1-protocol-sdk";
|
|
317
322
|
|
|
318
|
-
// src/
|
|
323
|
+
// src/helpers/initChainId.ts
|
|
324
|
+
import { assertEx as assertEx3 } from "@xylabs/assert";
|
|
325
|
+
import { hexFrom, isHex } from "@xylabs/hex";
|
|
326
|
+
import { isDefined as isDefined2 } from "@xylabs/typeof";
|
|
327
|
+
var getChainId = /* @__PURE__ */ __name((config) => {
|
|
328
|
+
const chainId = assertEx3(config.evm.chainId, () => "Missing config.evm.chainId");
|
|
329
|
+
if (isHex(chainId, {
|
|
330
|
+
prefix: true
|
|
331
|
+
})) {
|
|
332
|
+
const hex = hexFrom(chainId);
|
|
333
|
+
const parsed = Number.parseInt(hex, 16);
|
|
334
|
+
return parsed;
|
|
335
|
+
} else {
|
|
336
|
+
const parsed = Number.parseInt(chainId, 10);
|
|
337
|
+
return parsed;
|
|
338
|
+
}
|
|
339
|
+
}, "getChainId");
|
|
340
|
+
|
|
341
|
+
// src/helpers/initInfuraProvider.ts
|
|
319
342
|
import { assertEx as assertEx4 } from "@xylabs/assert";
|
|
343
|
+
import { isDefined as isDefined3 } from "@xylabs/typeof";
|
|
344
|
+
import { InfuraProvider } from "ethers/providers";
|
|
345
|
+
var instance;
|
|
346
|
+
var initInfuraProvider = /* @__PURE__ */ __name((config) => {
|
|
347
|
+
if (instance) return instance;
|
|
348
|
+
const providerConfig = getInfuraProviderConfig(config);
|
|
349
|
+
instance = Promise.resolve(new InfuraProvider(...providerConfig));
|
|
350
|
+
return instance;
|
|
351
|
+
}, "initInfuraProvider");
|
|
352
|
+
var getInfuraProviderConfig = /* @__PURE__ */ __name((config) => {
|
|
353
|
+
const projectId = assertEx4(config.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
|
|
354
|
+
const projectSecret = assertEx4(config.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
|
|
355
|
+
return [
|
|
356
|
+
getChainId(config),
|
|
357
|
+
projectId,
|
|
358
|
+
projectSecret
|
|
359
|
+
];
|
|
360
|
+
}, "getInfuraProviderConfig");
|
|
361
|
+
|
|
362
|
+
// src/manifest/getLocator.ts
|
|
363
|
+
import { assertEx as assertEx6 } from "@xylabs/assert";
|
|
320
364
|
import { asAddress as asAddress3, ZERO_ADDRESS } from "@xylabs/hex";
|
|
321
365
|
import { BaseMongoSdk } from "@xylabs/mongo";
|
|
322
|
-
import { isDefined as
|
|
366
|
+
import { isDefined as isDefined4 } from "@xylabs/typeof";
|
|
323
367
|
import { MemoryArchivist } from "@xyo-network/archivist-memory";
|
|
324
368
|
import { MongoDBArchivistV2 } from "@xyo-network/archivist-mongodb";
|
|
325
369
|
import { ViewArchivist } from "@xyo-network/archivist-view";
|
|
326
|
-
import { AddressBalanceDivinerV2,
|
|
370
|
+
import { AddressBalanceDivinerV2, AddressTransferDiviner, ArchivistSyncDiviner, HeadValidationDiviner } from "@xyo-network/chain-modules";
|
|
327
371
|
import { initTelemetry } from "@xyo-network/chain-telemetry";
|
|
328
372
|
import { AbstractModule, LoggerModuleStatusReporter } from "@xyo-network/module-abstract";
|
|
329
373
|
import { ModuleFactoryLocator } from "@xyo-network/module-factory-locator";
|
|
330
374
|
import { MemorySentinel } from "@xyo-network/sentinel-memory";
|
|
375
|
+
import { StepSizes } from "@xyo-network/xl1-protocol";
|
|
331
376
|
import { hasMongoConfig } from "@xyo-network/xl1-protocol-sdk";
|
|
377
|
+
import { Semaphore } from "async-mutex";
|
|
332
378
|
|
|
333
379
|
// src/driver/mongo/MongoMap.ts
|
|
334
|
-
import { assertEx as
|
|
380
|
+
import { assertEx as assertEx5 } from "@xylabs/assert";
|
|
335
381
|
import { AbstractCreatable, creatable } from "@xylabs/creatable";
|
|
336
382
|
import { isNull } from "@xylabs/typeof";
|
|
383
|
+
import { LRUCache } from "lru-cache";
|
|
337
384
|
function _ts_decorate(decorators, target, key, desc) {
|
|
338
385
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
339
386
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -350,13 +397,16 @@ var MongoMap = class extends AbstractCreatable {
|
|
|
350
397
|
static {
|
|
351
398
|
__name(this, "MongoMap");
|
|
352
399
|
}
|
|
400
|
+
_getCache;
|
|
353
401
|
get sdk() {
|
|
354
|
-
return
|
|
402
|
+
return assertEx5(this.params.sdk, () => "No sdk specified");
|
|
355
403
|
}
|
|
356
404
|
async clear() {
|
|
405
|
+
this._getCache?.clear();
|
|
357
406
|
await this.sdk.deleteMany({});
|
|
358
407
|
}
|
|
359
408
|
async delete(id) {
|
|
409
|
+
this._getCache?.delete(id);
|
|
360
410
|
const filter = {
|
|
361
411
|
_id: id
|
|
362
412
|
};
|
|
@@ -364,13 +414,35 @@ var MongoMap = class extends AbstractCreatable {
|
|
|
364
414
|
return result.deletedCount > 0;
|
|
365
415
|
}
|
|
366
416
|
async get(id) {
|
|
417
|
+
if (this._getCache) {
|
|
418
|
+
const getCacheResult = this._getCache.get(id);
|
|
419
|
+
if (getCacheResult) {
|
|
420
|
+
return getCacheResult;
|
|
421
|
+
}
|
|
422
|
+
}
|
|
367
423
|
const filter = {
|
|
368
424
|
_id: id
|
|
369
425
|
};
|
|
370
426
|
const doc = await this.sdk.findOne(filter);
|
|
371
427
|
return isNull(doc) ? void 0 : stripMongoId(doc);
|
|
372
428
|
}
|
|
429
|
+
async getMany(ids) {
|
|
430
|
+
const result = [];
|
|
431
|
+
for (const id of ids) {
|
|
432
|
+
const value = await this.get(id);
|
|
433
|
+
if (value) {
|
|
434
|
+
result.push(value);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
return result;
|
|
438
|
+
}
|
|
373
439
|
async has(id) {
|
|
440
|
+
if (this._getCache) {
|
|
441
|
+
const getCacheResult = this._getCache.has(id);
|
|
442
|
+
if (getCacheResult) {
|
|
443
|
+
return getCacheResult;
|
|
444
|
+
}
|
|
445
|
+
}
|
|
374
446
|
const filter = {
|
|
375
447
|
_id: id
|
|
376
448
|
};
|
|
@@ -388,10 +460,16 @@ var MongoMap = class extends AbstractCreatable {
|
|
|
388
460
|
await this.sdk.replaceOne(filter, value, {
|
|
389
461
|
upsert: true
|
|
390
462
|
});
|
|
391
|
-
|
|
463
|
+
this._getCache?.set(id, data);
|
|
392
464
|
}
|
|
393
465
|
async startHandler() {
|
|
394
466
|
await super.startHandler();
|
|
467
|
+
if (this.params.getCache?.enabled === true) {
|
|
468
|
+
const maxEntries = this.params.getCache?.maxEntries ?? 5e3;
|
|
469
|
+
this._getCache = new LRUCache({
|
|
470
|
+
max: maxEntries
|
|
471
|
+
});
|
|
472
|
+
}
|
|
395
473
|
}
|
|
396
474
|
};
|
|
397
475
|
MongoMap = _ts_decorate([
|
|
@@ -413,10 +491,11 @@ var getLocator = /* @__PURE__ */ __name(async (context) => {
|
|
|
413
491
|
port: 9465
|
|
414
492
|
}
|
|
415
493
|
});
|
|
416
|
-
if (
|
|
494
|
+
if (isDefined4(logger)) AbstractModule.defaultLogger = logger;
|
|
417
495
|
const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : void 0;
|
|
418
496
|
const locator = new ModuleFactoryLocator();
|
|
419
|
-
let
|
|
497
|
+
let balanceSummaryMap;
|
|
498
|
+
let transferSummaryMap;
|
|
420
499
|
const mongoConfig = config.storage?.mongo;
|
|
421
500
|
if (hasMongoConfig(mongoConfig)) {
|
|
422
501
|
const { connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName } = mongoConfig;
|
|
@@ -434,22 +513,44 @@ var getLocator = /* @__PURE__ */ __name(async (context) => {
|
|
|
434
513
|
traceProvider
|
|
435
514
|
};
|
|
436
515
|
locator.register(MongoDBArchivistV2.factory(params), void 0, true);
|
|
437
|
-
const
|
|
516
|
+
const sdkBalanceSummaryMap = new BaseMongoSdk({
|
|
438
517
|
...payloadSdkConfig,
|
|
439
518
|
collection: "balance_summary_map"
|
|
440
519
|
});
|
|
441
|
-
|
|
442
|
-
sdk
|
|
520
|
+
balanceSummaryMap = await MongoMap.create({
|
|
521
|
+
sdk: sdkBalanceSummaryMap,
|
|
522
|
+
getCache: {
|
|
523
|
+
enabled: true,
|
|
524
|
+
maxEntries: 5e3
|
|
525
|
+
}
|
|
526
|
+
});
|
|
527
|
+
const sdkTransferSummaryMap = new BaseMongoSdk({
|
|
528
|
+
...payloadSdkConfig,
|
|
529
|
+
collection: "transfer_summary_map"
|
|
530
|
+
});
|
|
531
|
+
transferSummaryMap = await MongoMap.create({
|
|
532
|
+
sdk: sdkTransferSummaryMap,
|
|
533
|
+
getCache: {
|
|
534
|
+
enabled: true,
|
|
535
|
+
maxEntries: 5e3
|
|
536
|
+
}
|
|
443
537
|
});
|
|
444
538
|
}
|
|
445
|
-
const summaryRepository = balanceSummaryRepositoryFromMap(summaryMap);
|
|
446
539
|
locator.register(AddressBalanceDivinerV2.factory({
|
|
447
540
|
traceProvider,
|
|
448
541
|
meterProvider,
|
|
449
542
|
statusReporter,
|
|
450
|
-
|
|
543
|
+
summaryMap: balanceSummaryMap,
|
|
544
|
+
stepSemaphores: StepSizes.map(() => new Semaphore(20))
|
|
545
|
+
}));
|
|
546
|
+
locator.register(AddressTransferDiviner.factory({
|
|
547
|
+
traceProvider,
|
|
548
|
+
meterProvider,
|
|
549
|
+
statusReporter,
|
|
550
|
+
summaryMap: transferSummaryMap,
|
|
551
|
+
stepSemaphores: StepSizes.map(() => new Semaphore(20))
|
|
451
552
|
}));
|
|
452
|
-
const chainId =
|
|
553
|
+
const chainId = isDefined4(config.chain.id) ? assertEx6(asAddress3(config.chain.id), () => "chain.id must be an Address") : ZERO_ADDRESS;
|
|
453
554
|
locator.register(HeadValidationDiviner.factory({
|
|
454
555
|
traceProvider,
|
|
455
556
|
meterProvider,
|
|
@@ -541,12 +642,12 @@ var Chain_default = {
|
|
|
541
642
|
eventSubscriptions: [
|
|
542
643
|
{
|
|
543
644
|
sourceEvent: "inserted",
|
|
544
|
-
sourceModule: "
|
|
645
|
+
sourceModule: "Submissions",
|
|
545
646
|
targetModuleFunction: "divine"
|
|
546
647
|
}
|
|
547
648
|
],
|
|
548
|
-
inArchivist: "
|
|
549
|
-
outArchivist: "
|
|
649
|
+
inArchivist: "Submissions",
|
|
650
|
+
outArchivist: "Validated",
|
|
550
651
|
name: "HeadValidationDiviner"
|
|
551
652
|
}
|
|
552
653
|
},
|
|
@@ -577,7 +678,7 @@ var Chain_default = {
|
|
|
577
678
|
accountPath: "1/1'/4'",
|
|
578
679
|
automations: [
|
|
579
680
|
{
|
|
580
|
-
frequency:
|
|
681
|
+
frequency: 1e4,
|
|
581
682
|
frequencyUnits: "millis",
|
|
582
683
|
schema: "network.xyo.automation.interval",
|
|
583
684
|
type: "interval"
|
|
@@ -593,6 +694,28 @@ var Chain_default = {
|
|
|
593
694
|
}
|
|
594
695
|
]
|
|
595
696
|
}
|
|
697
|
+
},
|
|
698
|
+
{
|
|
699
|
+
config: {
|
|
700
|
+
accountPath: "1/1'/5'",
|
|
701
|
+
automations: [
|
|
702
|
+
{
|
|
703
|
+
frequency: 1e4,
|
|
704
|
+
frequencyUnits: "millis",
|
|
705
|
+
schema: "network.xyo.automation.interval",
|
|
706
|
+
type: "interval"
|
|
707
|
+
}
|
|
708
|
+
],
|
|
709
|
+
name: "AddressTransferPollingSentinel",
|
|
710
|
+
schema: "network.xyo.sentinel.config",
|
|
711
|
+
synchronous: true,
|
|
712
|
+
tasks: [
|
|
713
|
+
{
|
|
714
|
+
mod: "AddressTransferDiviner",
|
|
715
|
+
endPoint: "divine"
|
|
716
|
+
}
|
|
717
|
+
]
|
|
718
|
+
}
|
|
596
719
|
}
|
|
597
720
|
],
|
|
598
721
|
public: [
|
|
@@ -622,23 +745,38 @@ var Chain_default = {
|
|
|
622
745
|
enabled: true,
|
|
623
746
|
maxEntries: 5e3
|
|
624
747
|
},
|
|
625
|
-
originArchivist: "
|
|
748
|
+
originArchivist: "Validated",
|
|
626
749
|
schema: "network.xyo.archivist.view.config"
|
|
627
750
|
}
|
|
628
751
|
},
|
|
629
752
|
{
|
|
630
753
|
config: {
|
|
631
|
-
accountPath: "1/1/3",
|
|
632
|
-
schema: "network.xyo.diviner.chain.address.balance.config",
|
|
633
|
-
archivist: "Chain:Validated",
|
|
754
|
+
accountPath: "1/1/3'",
|
|
634
755
|
name: "AddressBalanceDiviner",
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
756
|
+
schema: "network.xyo.diviner.chain.address.balance.config",
|
|
757
|
+
map: {
|
|
758
|
+
lmdb: {
|
|
759
|
+
dbName: "summaries",
|
|
760
|
+
storeName: "address_balance",
|
|
761
|
+
location: ".store"
|
|
640
762
|
}
|
|
641
|
-
|
|
763
|
+
},
|
|
764
|
+
archivist: "Validated"
|
|
765
|
+
}
|
|
766
|
+
},
|
|
767
|
+
{
|
|
768
|
+
config: {
|
|
769
|
+
accountPath: "1/1/4'",
|
|
770
|
+
name: "AddressTransferDiviner",
|
|
771
|
+
schema: "network.xyo.diviner.chain.address.transfer.config",
|
|
772
|
+
map: {
|
|
773
|
+
lmdb: {
|
|
774
|
+
dbName: "summaries",
|
|
775
|
+
storeName: "address_transfer",
|
|
776
|
+
location: ".store"
|
|
777
|
+
}
|
|
778
|
+
},
|
|
779
|
+
archivist: "Validated"
|
|
642
780
|
}
|
|
643
781
|
}
|
|
644
782
|
]
|
|
@@ -726,20 +864,41 @@ var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
|
|
|
726
864
|
}
|
|
727
865
|
await bios.seedPhraseStore.set("os", seedPhrase);
|
|
728
866
|
}
|
|
729
|
-
return
|
|
867
|
+
return assertEx7(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
|
|
730
868
|
}, "getSeedPhrase");
|
|
731
869
|
var getServer = /* @__PURE__ */ __name(async (context) => {
|
|
732
870
|
const { config, logger, node } = context;
|
|
733
871
|
const { mnemonic, port } = context.config.api;
|
|
734
872
|
const bios = await boot();
|
|
735
|
-
const seedPhrase =
|
|
873
|
+
const seedPhrase = isDefined5(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger);
|
|
736
874
|
const wallet = await HDWallet.fromPhrase(seedPhrase);
|
|
875
|
+
const provider = await initInfuraProvider(config);
|
|
876
|
+
const contractAddress = assertEx7(config.chain.id, () => "Missing config.evm.chainId");
|
|
877
|
+
const contract = StakedXyoChainV2__factory.connect(toEthAddress(contractAddress), provider);
|
|
737
878
|
const nodeContext = {
|
|
738
879
|
wallet,
|
|
739
880
|
logger,
|
|
740
881
|
config
|
|
741
882
|
};
|
|
742
|
-
const
|
|
883
|
+
const eventsReader = new EthereumChainStakeEvents(contract);
|
|
884
|
+
const stakeChainReader = await EthereumChainStake.create({
|
|
885
|
+
contract,
|
|
886
|
+
eventsReader
|
|
887
|
+
});
|
|
888
|
+
await stakeChainReader.start();
|
|
889
|
+
const rootNode = await getNode(nodeContext);
|
|
890
|
+
const archivist = assertEx7(asArchivistInstance2(await rootNode.resolve("Chain:Validated"), {
|
|
891
|
+
required: true
|
|
892
|
+
}), () => "FinalizedArchivist not found in node");
|
|
893
|
+
const chainMap = readPayloadMapFromStore(archivist);
|
|
894
|
+
const app = getApp(node ?? await getNode(nodeContext), eventsReader, {
|
|
895
|
+
chainId: contractAddress,
|
|
896
|
+
stake: stakeChainReader,
|
|
897
|
+
store: {
|
|
898
|
+
chainMap
|
|
899
|
+
},
|
|
900
|
+
head: /* @__PURE__ */ __name(() => ZERO_HASH, "head")
|
|
901
|
+
});
|
|
743
902
|
const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`));
|
|
744
903
|
server.setTimeout(2e4);
|
|
745
904
|
return server;
|