@xyo-network/chain-api 1.15.1 → 1.15.3
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 +197 -42
- 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 +56 -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 +22 -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 +6 -5
- 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
|
@@ -263,16 +263,16 @@ var addDataLakeRoutes = /* @__PURE__ */ __name((app) => {
|
|
|
263
263
|
// src/server/routes/rpc/routes/addRpcRoutes.ts
|
|
264
264
|
import { setRawResponseFormat as setRawResponseFormat2 } from "@xylabs/express";
|
|
265
265
|
import { NodeXyoViewer } from "@xyo-network/chain-rpc";
|
|
266
|
-
import { NodeXyoRunner,
|
|
267
|
-
var addRpcRoutes = /* @__PURE__ */ __name((app) => {
|
|
266
|
+
import { NodeXyoRunner, rpcEngineFromConnection, XyoBaseConnection } from "@xyo-network/xl1-rpc";
|
|
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);
|
|
271
|
-
const
|
|
270
|
+
const viewer = new NodeXyoViewer(node, eventsReader, stakedChainContext);
|
|
271
|
+
const connection = new XyoBaseConnection({
|
|
272
272
|
runner,
|
|
273
273
|
viewer
|
|
274
274
|
});
|
|
275
|
-
const engine =
|
|
275
|
+
const engine = rpcEngineFromConnection(connection);
|
|
276
276
|
app.post("/rpc", (req, res) => {
|
|
277
277
|
setRawResponseFormat2(res);
|
|
278
278
|
engine.handle(req.body, (_, rpcResponse) => {
|
|
@@ -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,26 +304,70 @@ 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";
|
|
@@ -331,9 +375,10 @@ import { MemorySentinel } from "@xyo-network/sentinel-memory";
|
|
|
331
375
|
import { hasMongoConfig } from "@xyo-network/xl1-protocol-sdk";
|
|
332
376
|
|
|
333
377
|
// src/driver/mongo/MongoMap.ts
|
|
334
|
-
import { assertEx as
|
|
378
|
+
import { assertEx as assertEx5 } from "@xylabs/assert";
|
|
335
379
|
import { AbstractCreatable, creatable } from "@xylabs/creatable";
|
|
336
380
|
import { isNull } from "@xylabs/typeof";
|
|
381
|
+
import { LRUCache } from "lru-cache";
|
|
337
382
|
function _ts_decorate(decorators, target, key, desc) {
|
|
338
383
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
339
384
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
@@ -350,13 +395,16 @@ var MongoMap = class extends AbstractCreatable {
|
|
|
350
395
|
static {
|
|
351
396
|
__name(this, "MongoMap");
|
|
352
397
|
}
|
|
398
|
+
_getCache;
|
|
353
399
|
get sdk() {
|
|
354
|
-
return
|
|
400
|
+
return assertEx5(this.params.sdk, () => "No sdk specified");
|
|
355
401
|
}
|
|
356
402
|
async clear() {
|
|
403
|
+
this._getCache?.clear();
|
|
357
404
|
await this.sdk.deleteMany({});
|
|
358
405
|
}
|
|
359
406
|
async delete(id) {
|
|
407
|
+
this._getCache?.delete(id);
|
|
360
408
|
const filter = {
|
|
361
409
|
_id: id
|
|
362
410
|
};
|
|
@@ -364,13 +412,35 @@ var MongoMap = class extends AbstractCreatable {
|
|
|
364
412
|
return result.deletedCount > 0;
|
|
365
413
|
}
|
|
366
414
|
async get(id) {
|
|
415
|
+
if (this._getCache) {
|
|
416
|
+
const getCacheResult = this._getCache.get(id);
|
|
417
|
+
if (getCacheResult) {
|
|
418
|
+
return getCacheResult;
|
|
419
|
+
}
|
|
420
|
+
}
|
|
367
421
|
const filter = {
|
|
368
422
|
_id: id
|
|
369
423
|
};
|
|
370
424
|
const doc = await this.sdk.findOne(filter);
|
|
371
425
|
return isNull(doc) ? void 0 : stripMongoId(doc);
|
|
372
426
|
}
|
|
427
|
+
async getMany(ids) {
|
|
428
|
+
const result = [];
|
|
429
|
+
for (const id of ids) {
|
|
430
|
+
const value = await this.get(id);
|
|
431
|
+
if (value) {
|
|
432
|
+
result.push(value);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
return result;
|
|
436
|
+
}
|
|
373
437
|
async has(id) {
|
|
438
|
+
if (this._getCache) {
|
|
439
|
+
const getCacheResult = this._getCache.has(id);
|
|
440
|
+
if (getCacheResult) {
|
|
441
|
+
return getCacheResult;
|
|
442
|
+
}
|
|
443
|
+
}
|
|
374
444
|
const filter = {
|
|
375
445
|
_id: id
|
|
376
446
|
};
|
|
@@ -388,10 +458,16 @@ var MongoMap = class extends AbstractCreatable {
|
|
|
388
458
|
await this.sdk.replaceOne(filter, value, {
|
|
389
459
|
upsert: true
|
|
390
460
|
});
|
|
391
|
-
|
|
461
|
+
this._getCache?.set(id, data);
|
|
392
462
|
}
|
|
393
463
|
async startHandler() {
|
|
394
464
|
await super.startHandler();
|
|
465
|
+
if (this.params.getCache?.enabled === true) {
|
|
466
|
+
const maxEntries = this.params.getCache?.maxEntries ?? 5e3;
|
|
467
|
+
this._getCache = new LRUCache({
|
|
468
|
+
max: maxEntries
|
|
469
|
+
});
|
|
470
|
+
}
|
|
395
471
|
}
|
|
396
472
|
};
|
|
397
473
|
MongoMap = _ts_decorate([
|
|
@@ -413,10 +489,11 @@ var getLocator = /* @__PURE__ */ __name(async (context) => {
|
|
|
413
489
|
port: 9465
|
|
414
490
|
}
|
|
415
491
|
});
|
|
416
|
-
if (
|
|
492
|
+
if (isDefined4(logger)) AbstractModule.defaultLogger = logger;
|
|
417
493
|
const statusReporter = logger ? new LoggerModuleStatusReporter(logger) : void 0;
|
|
418
494
|
const locator = new ModuleFactoryLocator();
|
|
419
|
-
let
|
|
495
|
+
let balanceSummaryMap;
|
|
496
|
+
let transferSummaryMap;
|
|
420
497
|
const mongoConfig = config.storage?.mongo;
|
|
421
498
|
if (hasMongoConfig(mongoConfig)) {
|
|
422
499
|
const { connectionString: dbConnectionString, database: dbName, domain: dbDomain, password: dbPassword, username: dbUserName } = mongoConfig;
|
|
@@ -434,22 +511,42 @@ var getLocator = /* @__PURE__ */ __name(async (context) => {
|
|
|
434
511
|
traceProvider
|
|
435
512
|
};
|
|
436
513
|
locator.register(MongoDBArchivistV2.factory(params), void 0, true);
|
|
437
|
-
const
|
|
514
|
+
const sdkBalanceSummaryMap = new BaseMongoSdk({
|
|
438
515
|
...payloadSdkConfig,
|
|
439
516
|
collection: "balance_summary_map"
|
|
440
517
|
});
|
|
441
|
-
|
|
442
|
-
sdk
|
|
518
|
+
balanceSummaryMap = await MongoMap.create({
|
|
519
|
+
sdk: sdkBalanceSummaryMap,
|
|
520
|
+
getCache: {
|
|
521
|
+
enabled: true,
|
|
522
|
+
maxEntries: 5e3
|
|
523
|
+
}
|
|
524
|
+
});
|
|
525
|
+
const sdkTransferSummaryMap = new BaseMongoSdk({
|
|
526
|
+
...payloadSdkConfig,
|
|
527
|
+
collection: "transfer_summary_map"
|
|
528
|
+
});
|
|
529
|
+
transferSummaryMap = await MongoMap.create({
|
|
530
|
+
sdk: sdkTransferSummaryMap,
|
|
531
|
+
getCache: {
|
|
532
|
+
enabled: true,
|
|
533
|
+
maxEntries: 5e3
|
|
534
|
+
}
|
|
443
535
|
});
|
|
444
536
|
}
|
|
445
|
-
const summaryRepository = balanceSummaryRepositoryFromMap(summaryMap);
|
|
446
537
|
locator.register(AddressBalanceDivinerV2.factory({
|
|
447
538
|
traceProvider,
|
|
448
539
|
meterProvider,
|
|
449
540
|
statusReporter,
|
|
450
|
-
|
|
541
|
+
summaryMap: balanceSummaryMap
|
|
542
|
+
}));
|
|
543
|
+
locator.register(AddressTransferDiviner.factory({
|
|
544
|
+
traceProvider,
|
|
545
|
+
meterProvider,
|
|
546
|
+
statusReporter,
|
|
547
|
+
summaryMap: transferSummaryMap
|
|
451
548
|
}));
|
|
452
|
-
const chainId =
|
|
549
|
+
const chainId = isDefined4(config.chain.id) ? assertEx6(asAddress3(config.chain.id), () => "chain.id must be an Address") : ZERO_ADDRESS;
|
|
453
550
|
locator.register(HeadValidationDiviner.factory({
|
|
454
551
|
traceProvider,
|
|
455
552
|
meterProvider,
|
|
@@ -541,12 +638,12 @@ var Chain_default = {
|
|
|
541
638
|
eventSubscriptions: [
|
|
542
639
|
{
|
|
543
640
|
sourceEvent: "inserted",
|
|
544
|
-
sourceModule: "
|
|
641
|
+
sourceModule: "Submissions",
|
|
545
642
|
targetModuleFunction: "divine"
|
|
546
643
|
}
|
|
547
644
|
],
|
|
548
|
-
inArchivist: "
|
|
549
|
-
outArchivist: "
|
|
645
|
+
inArchivist: "Submissions",
|
|
646
|
+
outArchivist: "Validated",
|
|
550
647
|
name: "HeadValidationDiviner"
|
|
551
648
|
}
|
|
552
649
|
},
|
|
@@ -577,7 +674,7 @@ var Chain_default = {
|
|
|
577
674
|
accountPath: "1/1'/4'",
|
|
578
675
|
automations: [
|
|
579
676
|
{
|
|
580
|
-
frequency:
|
|
677
|
+
frequency: 1e4,
|
|
581
678
|
frequencyUnits: "millis",
|
|
582
679
|
schema: "network.xyo.automation.interval",
|
|
583
680
|
type: "interval"
|
|
@@ -593,6 +690,28 @@ var Chain_default = {
|
|
|
593
690
|
}
|
|
594
691
|
]
|
|
595
692
|
}
|
|
693
|
+
},
|
|
694
|
+
{
|
|
695
|
+
config: {
|
|
696
|
+
accountPath: "1/1'/5'",
|
|
697
|
+
automations: [
|
|
698
|
+
{
|
|
699
|
+
frequency: 1e4,
|
|
700
|
+
frequencyUnits: "millis",
|
|
701
|
+
schema: "network.xyo.automation.interval",
|
|
702
|
+
type: "interval"
|
|
703
|
+
}
|
|
704
|
+
],
|
|
705
|
+
name: "AddressTransferPollingSentinel",
|
|
706
|
+
schema: "network.xyo.sentinel.config",
|
|
707
|
+
synchronous: true,
|
|
708
|
+
tasks: [
|
|
709
|
+
{
|
|
710
|
+
mod: "AddressTransferDiviner",
|
|
711
|
+
endPoint: "divine"
|
|
712
|
+
}
|
|
713
|
+
]
|
|
714
|
+
}
|
|
596
715
|
}
|
|
597
716
|
],
|
|
598
717
|
public: [
|
|
@@ -622,23 +741,38 @@ var Chain_default = {
|
|
|
622
741
|
enabled: true,
|
|
623
742
|
maxEntries: 5e3
|
|
624
743
|
},
|
|
625
|
-
originArchivist: "
|
|
744
|
+
originArchivist: "Validated",
|
|
626
745
|
schema: "network.xyo.archivist.view.config"
|
|
627
746
|
}
|
|
628
747
|
},
|
|
629
748
|
{
|
|
630
749
|
config: {
|
|
631
|
-
accountPath: "1/1/3",
|
|
632
|
-
schema: "network.xyo.diviner.chain.address.balance.config",
|
|
633
|
-
archivist: "Chain:Validated",
|
|
750
|
+
accountPath: "1/1/3'",
|
|
634
751
|
name: "AddressBalanceDiviner",
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
752
|
+
schema: "network.xyo.diviner.chain.address.balance.config",
|
|
753
|
+
map: {
|
|
754
|
+
lmdb: {
|
|
755
|
+
dbName: "summaries",
|
|
756
|
+
storeName: "address_balance",
|
|
757
|
+
location: ".store"
|
|
640
758
|
}
|
|
641
|
-
|
|
759
|
+
},
|
|
760
|
+
archivist: "Validated"
|
|
761
|
+
}
|
|
762
|
+
},
|
|
763
|
+
{
|
|
764
|
+
config: {
|
|
765
|
+
accountPath: "1/1/4'",
|
|
766
|
+
name: "AddressTransferDiviner",
|
|
767
|
+
schema: "network.xyo.diviner.chain.address.transfer.config",
|
|
768
|
+
map: {
|
|
769
|
+
lmdb: {
|
|
770
|
+
dbName: "summaries",
|
|
771
|
+
storeName: "address_transfer",
|
|
772
|
+
location: ".store"
|
|
773
|
+
}
|
|
774
|
+
},
|
|
775
|
+
archivist: "Validated"
|
|
642
776
|
}
|
|
643
777
|
}
|
|
644
778
|
]
|
|
@@ -726,20 +860,41 @@ var getSeedPhrase = /* @__PURE__ */ __name(async (bios, config, logger) => {
|
|
|
726
860
|
}
|
|
727
861
|
await bios.seedPhraseStore.set("os", seedPhrase);
|
|
728
862
|
}
|
|
729
|
-
return
|
|
863
|
+
return assertEx7(await bios.seedPhraseStore.get("os"), () => "Unable to acquire mnemonic from bios");
|
|
730
864
|
}, "getSeedPhrase");
|
|
731
865
|
var getServer = /* @__PURE__ */ __name(async (context) => {
|
|
732
866
|
const { config, logger, node } = context;
|
|
733
867
|
const { mnemonic, port } = context.config.api;
|
|
734
868
|
const bios = await boot();
|
|
735
|
-
const seedPhrase =
|
|
869
|
+
const seedPhrase = isDefined5(mnemonic) ? mnemonic : await getSeedPhrase(bios, config, logger);
|
|
736
870
|
const wallet = await HDWallet.fromPhrase(seedPhrase);
|
|
871
|
+
const provider = await initInfuraProvider(config);
|
|
872
|
+
const contractAddress = assertEx7(config.chain.id, () => "Missing config.evm.chainId");
|
|
873
|
+
const contract = StakedXyoChainV2__factory.connect(toEthAddress(contractAddress), provider);
|
|
737
874
|
const nodeContext = {
|
|
738
875
|
wallet,
|
|
739
876
|
logger,
|
|
740
877
|
config
|
|
741
878
|
};
|
|
742
|
-
const
|
|
879
|
+
const eventsReader = new EthereumChainStakeEvents(contract);
|
|
880
|
+
const stakeChainReader = await EthereumChainStake.create({
|
|
881
|
+
contract,
|
|
882
|
+
eventsReader
|
|
883
|
+
});
|
|
884
|
+
await stakeChainReader.start();
|
|
885
|
+
const rootNode = await getNode(nodeContext);
|
|
886
|
+
const archivist = assertEx7(asArchivistInstance2(await rootNode.resolve("Chain:Validated"), {
|
|
887
|
+
required: true
|
|
888
|
+
}), () => "FinalizedArchivist not found in node");
|
|
889
|
+
const chainMap = readPayloadMapFromStore(archivist);
|
|
890
|
+
const app = getApp(node ?? await getNode(nodeContext), eventsReader, {
|
|
891
|
+
chainId: contractAddress,
|
|
892
|
+
stake: stakeChainReader,
|
|
893
|
+
store: {
|
|
894
|
+
chainMap
|
|
895
|
+
},
|
|
896
|
+
head: /* @__PURE__ */ __name(() => ZERO_HASH, "head")
|
|
897
|
+
});
|
|
743
898
|
const server = app.listen(port, hostname, () => logger?.log(`[API] Server listening at http://${hostname}:${port}`));
|
|
744
899
|
server.setTimeout(2e4);
|
|
745
900
|
return server;
|