@xyo-network/chain-orchestration 1.16.20 → 1.16.21

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.
@@ -0,0 +1,5 @@
1
+ import type { AccountInstance } from '@xyo-network/account-model';
2
+ import type { WithHashMeta } from '@xyo-network/payload-model';
3
+ import type { BlockBoundWitness, XL1BlockRange } from '@xyo-network/xl1-protocol';
4
+ export declare function createProducerChainStakeIntentBlock(prevBlock: WithHashMeta<BlockBoundWitness>, producerAccount: AccountInstance, range: XL1BlockRange): Promise<import("@xyo-network/xl1-protocol").HydratedBlock>;
5
+ //# sourceMappingURL=createDeclarationIntentBlock.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"createDeclarationIntentBlock.d.ts","sourceRoot":"","sources":["../../src/createDeclarationIntentBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAA;AAC9D,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAEjF,wBAAsB,mCAAmC,CAAC,SAAS,EAAE,YAAY,CAAC,iBAAiB,CAAC,EAAE,eAAe,EAAE,eAAe,EAAE,KAAK,EAAE,aAAa,8DAa3J"}
@@ -0,0 +1,2 @@
1
+ export * from './initEvmProvider.ts';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/evm/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Config } from '@xyo-network/xl1-protocol-sdk';
2
+ export declare const canUseChainId: (config: Pick<Config, "evm">) => boolean;
3
+ export declare const getChainId: (config: Pick<Config, "evm">) => number;
4
+ //# sourceMappingURL=initChainId.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initChainId.d.ts","sourceRoot":"","sources":["../../../src/evm/initChainId.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAE3D,eAAO,MAAM,aAAa,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAG,OAE3D,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,WAUrD,CAAA"}
@@ -0,0 +1,11 @@
1
+ import type { Logger } from '@xylabs/sdk-js';
2
+ import type { Config } from '@xyo-network/xl1-protocol-sdk';
3
+ import type { Provider } from 'ethers';
4
+ export declare const initEvmProvider: ({ config }: {
5
+ config: Pick<Config, "evm">;
6
+ logger?: Logger;
7
+ }) => Promise<Provider>;
8
+ export declare const canUseEvmProvider: ({ config }: {
9
+ config: Pick<Config, "evm">;
10
+ }) => boolean;
11
+ //# sourceMappingURL=initEvmProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initEvmProvider.d.ts","sourceRoot":"","sources":["../../../src/evm/initEvmProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AAE5C,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,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,KAAG,OAAO,CAAC,QAAQ,CAQpH,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,YAAY;IAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAA;CAAE,YAE5E,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: Pick<Config, "evm">) => Promise<InfuraProvider>;
4
+ export declare const canUseInfuraProvider: (config: Pick<Config, "evm">) => boolean;
5
+ export declare const getInfuraProviderConfig: (config: Pick<Config, "evm">) => readonly [number, string, string];
6
+ //# sourceMappingURL=initInfuraProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initInfuraProvider.d.ts","sourceRoot":"","sources":["../../../src/evm/initInfuraProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAMjD,eAAO,MAAM,kBAAkB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,4BAK7D,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAG,OAIlE,CAAA;AAED,eAAO,MAAM,uBAAuB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,sCAIlE,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: Pick<Config, "evm">) => Promise<JsonRpcProvider>;
4
+ export declare const canUseJsonRpcProvider: (config: Pick<Config, "evm">) => boolean;
5
+ export declare const getJsonRpcProviderConfig: (config: Pick<Config, "evm">) => readonly [string, number];
6
+ //# sourceMappingURL=initJsonRpcProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initJsonRpcProvider.d.ts","sourceRoot":"","sources":["../../../src/evm/initJsonRpcProvider.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAC3D,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAIlD,eAAO,MAAM,mBAAmB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,6BAG9D,CAAA;AAED,eAAO,MAAM,qBAAqB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,YAGhE,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAI,QAAQ,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,8BAGnE,CAAA"}
@@ -1,4 +1,7 @@
1
1
  export * from './archivist/index.ts';
2
2
  export * from './bridge.ts';
3
+ export * from './createDeclarationIntentBlock.ts';
3
4
  export * from './initBridgedModule.ts';
5
+ export * from './initChainStakeViewer.ts';
6
+ export * from './initProducerAccount.ts';
4
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,wBAAwB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA;AACpC,cAAc,aAAa,CAAA;AAC3B,cAAc,mCAAmC,CAAA;AACjD,cAAc,wBAAwB,CAAA;AACtC,cAAc,2BAA2B,CAAA;AACzC,cAAc,0BAA0B,CAAA"}
@@ -122,6 +122,18 @@ var initBridge = /* @__PURE__ */ __name(async (nodeUrl) => {
122
122
  });
123
123
  }, "initBridge");
124
124
 
125
+ // src/createDeclarationIntentBlock.ts
126
+ import { buildNextBlock, createDeclarationIntent } from "@xyo-network/chain-sdk";
127
+ async function createProducerChainStakeIntentBlock(prevBlock, producerAccount, range) {
128
+ const producerDeclarationPayload = createDeclarationIntent(producerAccount.address, "producer", range[0], range[1]);
129
+ return await buildNextBlock(prevBlock, [], [
130
+ producerDeclarationPayload
131
+ ], [
132
+ producerAccount
133
+ ]);
134
+ }
135
+ __name(createProducerChainStakeIntentBlock, "createProducerChainStakeIntentBlock");
136
+
125
137
  // src/initBridgedModule.ts
126
138
  import { assertEx } from "@xylabs/sdk-js";
127
139
  import { asAttachableArchivistInstance } from "@xyo-network/archivist-model";
@@ -150,12 +162,170 @@ var initBridgedArchivistModule = /* @__PURE__ */ __name(async ({ bridge, moduleN
150
162
  moduleName
151
163
  })), () => `Could not convert ${moduleName} to attachable archivist instance`);
152
164
  }, "initBridgedArchivistModule");
165
+
166
+ // src/initChainStakeViewer.ts
167
+ import { assertEx as assertEx6, toEthAddress } from "@xylabs/sdk-js";
168
+ import { EthereumChainStakeEvents, EthereumChainStakeViewer } from "@xyo-network/chain-sdk";
169
+ import { StakedXyoChainV2__factory } from "@xyo-network/typechain";
170
+ import { SimpleChainStakeViewer } from "@xyo-network/xl1-protocol-sdk";
171
+
172
+ // src/evm/initEvmProvider.ts
173
+ import { assertEx as assertEx5 } from "@xylabs/sdk-js";
174
+
175
+ // src/evm/initInfuraProvider.ts
176
+ import { assertEx as assertEx3, isDefined as isDefined2 } from "@xylabs/sdk-js";
177
+ import { InfuraProvider } from "ethers/providers";
178
+
179
+ // src/evm/initChainId.ts
180
+ import { assertEx as assertEx2, hexFrom, isDefined, isHex } from "@xylabs/sdk-js";
181
+ var canUseChainId = /* @__PURE__ */ __name((config) => {
182
+ return isDefined(config.evm.chainId);
183
+ }, "canUseChainId");
184
+ var getChainId = /* @__PURE__ */ __name((config) => {
185
+ const chainId = assertEx2(config.evm.chainId, () => "Missing config.evm.chainId");
186
+ if (isHex(chainId, {
187
+ prefix: true
188
+ })) {
189
+ const hex = hexFrom(chainId);
190
+ const parsed = Number.parseInt(hex, 16);
191
+ return parsed;
192
+ } else {
193
+ const parsed = Number.parseInt(chainId, 10);
194
+ return parsed;
195
+ }
196
+ }, "getChainId");
197
+
198
+ // src/evm/initInfuraProvider.ts
199
+ var instance;
200
+ var initInfuraProvider = /* @__PURE__ */ __name((config) => {
201
+ if (instance) return instance;
202
+ const providerConfig = getInfuraProviderConfig(config);
203
+ instance = Promise.resolve(new InfuraProvider(...providerConfig));
204
+ return instance;
205
+ }, "initInfuraProvider");
206
+ var canUseInfuraProvider = /* @__PURE__ */ __name((config) => {
207
+ return canUseChainId(config) && isDefined2(config.evm?.infura?.projectId) && isDefined2(config.evm?.infura?.projectSecret);
208
+ }, "canUseInfuraProvider");
209
+ var getInfuraProviderConfig = /* @__PURE__ */ __name((config) => {
210
+ const projectId = assertEx3(config.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
211
+ const projectSecret = assertEx3(config.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
212
+ return [
213
+ getChainId(config),
214
+ projectId,
215
+ projectSecret
216
+ ];
217
+ }, "getInfuraProviderConfig");
218
+
219
+ // src/evm/initJsonRpcProvider.ts
220
+ import { assertEx as assertEx4, isDefined as isDefined3 } from "@xylabs/sdk-js";
221
+ import { JsonRpcProvider } from "ethers/providers";
222
+ var initJsonRpcProvider = /* @__PURE__ */ __name((config) => {
223
+ const providerConfig = getJsonRpcProviderConfig(config);
224
+ return Promise.resolve(new JsonRpcProvider(...providerConfig));
225
+ }, "initJsonRpcProvider");
226
+ var canUseJsonRpcProvider = /* @__PURE__ */ __name((config) => {
227
+ return canUseChainId(config) && isDefined3(config.evm.jsonRpc?.url);
228
+ }, "canUseJsonRpcProvider");
229
+ var getJsonRpcProviderConfig = /* @__PURE__ */ __name((config) => {
230
+ const jsonRpcUrl = assertEx4(config.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
231
+ return [
232
+ jsonRpcUrl,
233
+ getChainId(config)
234
+ ];
235
+ }, "getJsonRpcProviderConfig");
236
+
237
+ // src/evm/initEvmProvider.ts
238
+ var provider;
239
+ var initEvmProvider = /* @__PURE__ */ __name(async ({ config }) => {
240
+ if (provider) return provider;
241
+ if (canUseInfuraProvider(config)) {
242
+ provider = initInfuraProvider(config);
243
+ } else if (canUseJsonRpcProvider(config)) {
244
+ provider = initJsonRpcProvider(config);
245
+ }
246
+ return assertEx5(await provider, () => "No provider available");
247
+ }, "initEvmProvider");
248
+ var canUseEvmProvider = /* @__PURE__ */ __name(({ config }) => {
249
+ return canUseInfuraProvider(config) || canUseJsonRpcProvider(config);
250
+ }, "canUseEvmProvider");
251
+
252
+ // src/initChainStakeViewer.ts
253
+ async function initEvmChainStakeViewer(config, logger) {
254
+ const provider2 = await initEvmProvider({
255
+ config,
256
+ logger
257
+ });
258
+ const contractAddress = assertEx6(config.chain.id, () => "Missing config.evm.chainId");
259
+ const contract = StakedXyoChainV2__factory.connect(toEthAddress(contractAddress), provider2);
260
+ const stakeEventsViewer = await EthereumChainStakeEvents.create({
261
+ contract,
262
+ logger
263
+ });
264
+ assertEx6(await stakeEventsViewer.start(), () => "Failed to start EthereumChainStakeEvents reader");
265
+ const stakeChainViewer = await EthereumChainStakeViewer.create({
266
+ contract,
267
+ stakeEventsViewer,
268
+ logger
269
+ });
270
+ assertEx6(await stakeChainViewer.start(), () => "Failed to start EthereumChainStake viewer");
271
+ return stakeChainViewer;
272
+ }
273
+ __name(initEvmChainStakeViewer, "initEvmChainStakeViewer");
274
+ async function initSimpleStakeViewer(config, logger) {
275
+ const stakeChainViewer = await SimpleChainStakeViewer.create({
276
+ logger,
277
+ positions: []
278
+ });
279
+ assertEx6(await stakeChainViewer.start(), () => "Failed to start SimpleChainStake viewer");
280
+ return stakeChainViewer;
281
+ }
282
+ __name(initSimpleStakeViewer, "initSimpleStakeViewer");
283
+ async function initChainStakeViewer(config, logger) {
284
+ if (canUseEvmProvider({
285
+ config
286
+ })) {
287
+ return await initEvmChainStakeViewer(config, logger);
288
+ } else {
289
+ console.warn("[API] Infura configuration not found. Using SimpleChainStakeViewer with no positions. This means no staking data will be available.");
290
+ return await initSimpleStakeViewer(config, logger);
291
+ }
292
+ }
293
+ __name(initChainStakeViewer, "initChainStakeViewer");
294
+
295
+ // src/initProducerAccount.ts
296
+ import { isUndefined } from "@xylabs/sdk-js";
297
+ import { HDWallet } from "@xyo-network/wallet";
298
+ import { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from "@xyo-network/xl1-protocol-sdk";
299
+ var accountServiceSingleton;
300
+ var initProducerAccount = /* @__PURE__ */ __name(async ({ config, logger }) => {
301
+ if (accountServiceSingleton) return accountServiceSingleton;
302
+ let walletPhrase = config.producer.mnemonic;
303
+ if (isUndefined(walletPhrase)) {
304
+ logger?.warn("[Producer] No wallet mnemonic specified!");
305
+ const randomMnemonic = HDWallet.generateMnemonic();
306
+ logger?.warn(`[Producer] Using randomly generated mnemonic:
307
+
308
+ ${randomMnemonic}
309
+
310
+ `);
311
+ walletPhrase = randomMnemonic;
312
+ }
313
+ const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase);
314
+ const account = await wallet.derivePath(ADDRESS_INDEX.XYO);
315
+ accountServiceSingleton = account;
316
+ return accountServiceSingleton;
317
+ }, "initProducerAccount");
153
318
  export {
154
319
  DefaultReadCachingArchivistConfig,
320
+ createProducerChainStakeIntentBlock,
155
321
  initArchivistSync,
156
322
  initBridge,
157
323
  initBridgedArchivistModule,
158
324
  initBridgedModule,
325
+ initChainStakeViewer,
326
+ initEvmChainStakeViewer,
327
+ initProducerAccount,
328
+ initSimpleStakeViewer,
159
329
  wrapWithReadCachingArchivist
160
330
  };
161
331
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/archivist/initArchivistSync.ts","../../src/archivist/wrapWithReadCachingArchivist.ts","../../src/bridge.ts","../../src/initBridgedModule.ts"],"sourcesContent":["import type { TracerProvider } from '@opentelemetry/api'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistSyncDiviner } from '@xyo-network/chain-modules'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { SentinelConfigSchema } from '@xyo-network/sentinel-model'\n\nexport const initArchivistSync = async (\n name: ModuleIdentifier,\n inArchivist: ArchivistInstance,\n outArchivist: ArchivistInstance,\n frequency = 1000,\n max = 1000,\n traceProvider?: TracerProvider,\n) => {\n const node = await MemoryNode.create({ account: 'random' })\n const finalizedArchivistSyncDiviner = await ArchivistSyncDiviner.create({\n account: 'random',\n inArchivist,\n outArchivist,\n traceProvider,\n config: {\n schema: DivinerConfigSchema, name, max,\n },\n })\n\n await node.register(finalizedArchivistSyncDiviner)\n await node.attach(finalizedArchivistSyncDiviner.address)\n\n const sentinel = await MemorySentinel.create({\n account: 'random',\n config: {\n name,\n synchronous: true,\n schema: SentinelConfigSchema,\n tasks: [\n {\n required: true,\n mod: finalizedArchivistSyncDiviner.address,\n endPoint: 'divine',\n },\n ],\n automations: [\n {\n frequency,\n frequencyUnits: 'millis',\n schema: 'network.xyo.automation.interval',\n start: Date.now(),\n type: 'interval',\n },\n ],\n },\n })\n\n await node.register(sentinel)\n await node.attach(sentinel.address)\n\n return node\n}\n","import type { MemoryArchivistConfig } from '@xyo-network/archivist-memory'\nimport { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\n\nimport { initArchivistSync } from './initArchivistSync.ts'\n\nexport const DefaultReadCachingArchivistConfig: MemoryArchivistConfig = {\n max: 100_000,\n // requireAllParents: true,\n schema: MemoryArchivistConfigSchema,\n}\n\nconst getDynamicDefaultReadCachingArchivistConfig = (archivist: AttachableArchivistInstance): Partial<MemoryArchivistConfig> => {\n const { id } = archivist\n const name = `${id}-CachingArchivist`\n const dynamicDefaults: Partial<MemoryArchivistConfig> = { name }\n return dynamicDefaults\n}\n\nconst getDynamicReadCachingArchivistConfig = (_archivist: AttachableArchivistInstance): Partial<MemoryArchivistConfig> => {\n // const parents = {\n // read: [archivist.address], write: [], commit: [],\n // }\n // const dynamicConfig: Partial<MemoryArchivistConfig> = { parents }\n const dynamicConfig: Partial<MemoryArchivistConfig> = {}\n return dynamicConfig\n}\n\nexport const wrapWithReadCachingArchivist = async (\n archivist: AttachableArchivistInstance,\n config: Partial<MemoryArchivistConfig> = DefaultReadCachingArchivistConfig,\n): Promise<AttachableArchivistInstance> => {\n const dynamicDefaultReadCachingArchivistConfig = getDynamicDefaultReadCachingArchivistConfig(archivist)\n const dynamicReadCachingArchivistConfig = getDynamicReadCachingArchivistConfig(archivist)\n\n // Create a materialized config with precedence\n const materializedConfig: MemoryArchivistConfig = {\n // Use the static defaults\n ...DefaultReadCachingArchivistConfig,\n // Use the dynamic defaults\n ...dynamicDefaultReadCachingArchivistConfig,\n // Use the supplied config\n ...config,\n // Use they dynamic config\n ...dynamicReadCachingArchivistConfig,\n }\n const cachingArchivist = await MemoryArchivist.create({ account: 'random', config: materializedConfig })\n await initArchivistSync(\n `${cachingArchivist.id}-Sync`,\n archivist,\n cachingArchivist,\n 1000,\n )\n\n return cachingArchivist\n}\n","import { HttpBridge, HttpBridgeConfigSchema } from '@xyo-network/bridge-http'\nimport type { AttachableBridgeInstance } from '@xyo-network/bridge-model'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\nconst bridgeSingletonMap = new Map<string, AttachableBridgeInstance>()\n\nexport const initBridge = async (nodeUrl: string): Promise<AttachableBridgeInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgeSingletonMap.get(nodeUrl)\n if (existing) return existing\n const bridge = await HttpBridge.create({\n account: 'random',\n config: {\n name: 'HttpBridge',\n client: { url: nodeUrl, discoverRoots: 'start' },\n schema: HttpBridgeConfigSchema,\n security: { allowAnonymous: true },\n },\n })\n await bridge.start()\n bridgeSingletonMap.set(nodeUrl, bridge)\n return bridge\n })\n}\n","import type { Address, Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport { asAttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport { asAttachableModuleInstance } from '@xyo-network/module-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\ntype ModuleDictionary = Record<ModuleIdentifier, AttachableModuleInstance | undefined>\ntype BridgedModuleDictionary = Record<Address, ModuleDictionary | undefined>\nconst bridgedModuleDictionary: BridgedModuleDictionary = {}\n\nexport const initBridgedModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance\n> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`)\n // Initialize the nested dictionary if needed\n let moduleMap = bridgedModuleDictionary[bridge.address]\n if (moduleMap === undefined) {\n moduleMap = {}\n bridgedModuleDictionary[bridge.address] = moduleMap\n }\n // Store and return the module instance\n moduleMap[moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport const initBridgedArchivistModule: Initializable<\n { bridge: BridgeInstance; logger?: Logger; moduleName: ModuleIdentifier }, AttachableArchivistInstance\n> = async ({ bridge, moduleName }): Promise<AttachableArchivistInstance> => {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n"],"mappings":"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","names":["ArchivistSyncDiviner","DivinerConfigSchema","MemoryNode","MemorySentinel","SentinelConfigSchema","initArchivistSync","name","inArchivist","outArchivist","frequency","max","traceProvider","node","MemoryNode","create","account","finalizedArchivistSyncDiviner","ArchivistSyncDiviner","config","schema","DivinerConfigSchema","register","attach","address","sentinel","MemorySentinel","synchronous","SentinelConfigSchema","tasks","required","mod","endPoint","automations","frequencyUnits","start","Date","now","type","MemoryArchivist","MemoryArchivistConfigSchema","DefaultReadCachingArchivistConfig","max","schema","MemoryArchivistConfigSchema","getDynamicDefaultReadCachingArchivistConfig","archivist","id","name","dynamicDefaults","getDynamicReadCachingArchivistConfig","_archivist","dynamicConfig","wrapWithReadCachingArchivist","config","dynamicDefaultReadCachingArchivistConfig","dynamicReadCachingArchivistConfig","materializedConfig","cachingArchivist","MemoryArchivist","create","account","initArchivistSync","HttpBridge","HttpBridgeConfigSchema","Mutex","initMutex","Mutex","bridgeSingletonMap","Map","initBridge","nodeUrl","runExclusive","existing","get","bridge","HttpBridge","create","account","config","name","client","url","discoverRoots","schema","HttpBridgeConfigSchema","security","allowAnonymous","start","set","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","moduleMap","undefined","initBridgedArchivistModule","asAttachableArchivistInstance"]}
1
+ {"version":3,"sources":["../../src/archivist/initArchivistSync.ts","../../src/archivist/wrapWithReadCachingArchivist.ts","../../src/bridge.ts","../../src/createDeclarationIntentBlock.ts","../../src/initBridgedModule.ts","../../src/initChainStakeViewer.ts","../../src/evm/initEvmProvider.ts","../../src/evm/initInfuraProvider.ts","../../src/evm/initChainId.ts","../../src/evm/initJsonRpcProvider.ts","../../src/initProducerAccount.ts"],"sourcesContent":["import type { TracerProvider } from '@opentelemetry/api'\nimport type { ArchivistInstance } from '@xyo-network/archivist-model'\nimport { ArchivistSyncDiviner } from '@xyo-network/chain-modules'\nimport { DivinerConfigSchema } from '@xyo-network/diviner-model'\nimport type { ModuleIdentifier } from '@xyo-network/module-model'\nimport { MemoryNode } from '@xyo-network/node-memory'\nimport { MemorySentinel } from '@xyo-network/sentinel-memory'\nimport { SentinelConfigSchema } from '@xyo-network/sentinel-model'\n\nexport const initArchivistSync = async (\n name: ModuleIdentifier,\n inArchivist: ArchivistInstance,\n outArchivist: ArchivistInstance,\n frequency = 1000,\n max = 1000,\n traceProvider?: TracerProvider,\n) => {\n const node = await MemoryNode.create({ account: 'random' })\n const finalizedArchivistSyncDiviner = await ArchivistSyncDiviner.create({\n account: 'random',\n inArchivist,\n outArchivist,\n traceProvider,\n config: {\n schema: DivinerConfigSchema, name, max,\n },\n })\n\n await node.register(finalizedArchivistSyncDiviner)\n await node.attach(finalizedArchivistSyncDiviner.address)\n\n const sentinel = await MemorySentinel.create({\n account: 'random',\n config: {\n name,\n synchronous: true,\n schema: SentinelConfigSchema,\n tasks: [\n {\n required: true,\n mod: finalizedArchivistSyncDiviner.address,\n endPoint: 'divine',\n },\n ],\n automations: [\n {\n frequency,\n frequencyUnits: 'millis',\n schema: 'network.xyo.automation.interval',\n start: Date.now(),\n type: 'interval',\n },\n ],\n },\n })\n\n await node.register(sentinel)\n await node.attach(sentinel.address)\n\n return node\n}\n","import type { MemoryArchivistConfig } from '@xyo-network/archivist-memory'\nimport { MemoryArchivist, MemoryArchivistConfigSchema } from '@xyo-network/archivist-memory'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\n\nimport { initArchivistSync } from './initArchivistSync.ts'\n\nexport const DefaultReadCachingArchivistConfig: MemoryArchivistConfig = {\n max: 100_000,\n // requireAllParents: true,\n schema: MemoryArchivistConfigSchema,\n}\n\nconst getDynamicDefaultReadCachingArchivistConfig = (archivist: AttachableArchivistInstance): Partial<MemoryArchivistConfig> => {\n const { id } = archivist\n const name = `${id}-CachingArchivist`\n const dynamicDefaults: Partial<MemoryArchivistConfig> = { name }\n return dynamicDefaults\n}\n\nconst getDynamicReadCachingArchivistConfig = (_archivist: AttachableArchivistInstance): Partial<MemoryArchivistConfig> => {\n // const parents = {\n // read: [archivist.address], write: [], commit: [],\n // }\n // const dynamicConfig: Partial<MemoryArchivistConfig> = { parents }\n const dynamicConfig: Partial<MemoryArchivistConfig> = {}\n return dynamicConfig\n}\n\nexport const wrapWithReadCachingArchivist = async (\n archivist: AttachableArchivistInstance,\n config: Partial<MemoryArchivistConfig> = DefaultReadCachingArchivistConfig,\n): Promise<AttachableArchivistInstance> => {\n const dynamicDefaultReadCachingArchivistConfig = getDynamicDefaultReadCachingArchivistConfig(archivist)\n const dynamicReadCachingArchivistConfig = getDynamicReadCachingArchivistConfig(archivist)\n\n // Create a materialized config with precedence\n const materializedConfig: MemoryArchivistConfig = {\n // Use the static defaults\n ...DefaultReadCachingArchivistConfig,\n // Use the dynamic defaults\n ...dynamicDefaultReadCachingArchivistConfig,\n // Use the supplied config\n ...config,\n // Use they dynamic config\n ...dynamicReadCachingArchivistConfig,\n }\n const cachingArchivist = await MemoryArchivist.create({ account: 'random', config: materializedConfig })\n await initArchivistSync(\n `${cachingArchivist.id}-Sync`,\n archivist,\n cachingArchivist,\n 1000,\n )\n\n return cachingArchivist\n}\n","import { HttpBridge, HttpBridgeConfigSchema } from '@xyo-network/bridge-http'\nimport type { AttachableBridgeInstance } from '@xyo-network/bridge-model'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\nconst bridgeSingletonMap = new Map<string, AttachableBridgeInstance>()\n\nexport const initBridge = async (nodeUrl: string): Promise<AttachableBridgeInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgeSingletonMap.get(nodeUrl)\n if (existing) return existing\n const bridge = await HttpBridge.create({\n account: 'random',\n config: {\n name: 'HttpBridge',\n client: { url: nodeUrl, discoverRoots: 'start' },\n schema: HttpBridgeConfigSchema,\n security: { allowAnonymous: true },\n },\n })\n await bridge.start()\n bridgeSingletonMap.set(nodeUrl, bridge)\n return bridge\n })\n}\n","import type { AccountInstance } from '@xyo-network/account-model'\nimport { buildNextBlock, createDeclarationIntent } from '@xyo-network/chain-sdk'\nimport type { WithHashMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, XL1BlockRange } from '@xyo-network/xl1-protocol'\n\nexport async function createProducerChainStakeIntentBlock(prevBlock: WithHashMeta<BlockBoundWitness>, producerAccount: AccountInstance, range: XL1BlockRange) {\n const producerDeclarationPayload = createDeclarationIntent(\n producerAccount.address,\n 'producer',\n range[0],\n range[1],\n )\n return await buildNextBlock(\n prevBlock,\n [],\n [producerDeclarationPayload],\n [producerAccount],\n )\n}\n","import type { Address, Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { AttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport { asAttachableArchivistInstance } from '@xyo-network/archivist-model'\nimport type { BridgeInstance } from '@xyo-network/bridge-model'\nimport type { AttachableModuleInstance, ModuleIdentifier } from '@xyo-network/module-model'\nimport { asAttachableModuleInstance } from '@xyo-network/module-model'\nimport type { Initializable } from '@xyo-network/xl1-protocol'\nimport { Mutex } from 'async-mutex'\n\nconst initMutex = new Mutex()\ntype ModuleDictionary = Record<ModuleIdentifier, AttachableModuleInstance | undefined>\ntype BridgedModuleDictionary = Record<Address, ModuleDictionary | undefined>\nconst bridgedModuleDictionary: BridgedModuleDictionary = {}\n\nexport const initBridgedModule: Initializable<\n { bridge: BridgeInstance; moduleName: ModuleIdentifier }, AttachableModuleInstance\n> = async ({ bridge, moduleName }): Promise<AttachableModuleInstance> => {\n return await initMutex.runExclusive(async () => {\n const existing = bridgedModuleDictionary?.[bridge.address]?.[moduleName]\n if (existing) return existing\n const mod = assertEx(await bridge.resolve(moduleName), () => `Could not resolve ${moduleName}`)\n const moduleInstance = assertEx(asAttachableModuleInstance(mod), () => `Could not convert ${moduleName} to attachable module instance`)\n // Initialize the nested dictionary if needed\n let moduleMap = bridgedModuleDictionary[bridge.address]\n if (moduleMap === undefined) {\n moduleMap = {}\n bridgedModuleDictionary[bridge.address] = moduleMap\n }\n // Store and return the module instance\n moduleMap[moduleName] = moduleInstance\n return moduleInstance\n })\n}\n\nexport const initBridgedArchivistModule: Initializable<\n { bridge: BridgeInstance; logger?: Logger; moduleName: ModuleIdentifier }, AttachableArchivistInstance\n> = async ({ bridge, moduleName }): Promise<AttachableArchivistInstance> => {\n return assertEx(\n asAttachableArchivistInstance(await initBridgedModule({ bridge, moduleName })),\n () => `Could not convert ${moduleName} to attachable archivist instance`,\n )\n}\n","import {\n assertEx, type Logger, toEthAddress,\n} from '@xylabs/sdk-js'\nimport { EthereumChainStakeEvents, EthereumChainStakeViewer } from '@xyo-network/chain-sdk'\nimport { StakedXyoChainV2__factory } from '@xyo-network/typechain'\nimport type { ChainId } from '@xyo-network/xl1-protocol'\nimport {\n type Config, SimpleChainStakeViewer, type StakeViewer,\n} from '@xyo-network/xl1-protocol-sdk'\n\nimport { canUseEvmProvider, initEvmProvider } from './evm/index.ts'\n\nexport async function initEvmChainStakeViewer(config: Config, logger?: Logger): Promise<StakeViewer> {\n const provider = await initEvmProvider({ config, logger })\n const contractAddress = assertEx(config.chain.id, () => 'Missing config.evm.chainId') as ChainId\n const contract = StakedXyoChainV2__factory.connect(toEthAddress(contractAddress), provider)\n const stakeEventsViewer = await EthereumChainStakeEvents.create({ contract, logger })\n assertEx(await stakeEventsViewer.start(), () => 'Failed to start EthereumChainStakeEvents reader')\n const stakeChainViewer = await EthereumChainStakeViewer.create({\n contract, stakeEventsViewer, logger,\n })\n assertEx(await stakeChainViewer.start(), () => 'Failed to start EthereumChainStake viewer')\n return stakeChainViewer\n}\n\nexport async function initSimpleStakeViewer(config: Config, logger?: Logger): Promise<StakeViewer> {\n const stakeChainViewer = await SimpleChainStakeViewer.create({ logger, positions: [] })\n assertEx(await stakeChainViewer.start(), () => 'Failed to start SimpleChainStake viewer')\n return stakeChainViewer\n}\n\nexport async function initChainStakeViewer(config: Config, logger?: Logger): Promise<StakeViewer> {\n if (canUseEvmProvider({ config })) {\n return await initEvmChainStakeViewer(config, logger)\n } else {\n console.warn('[API] Infura configuration not found. Using SimpleChainStakeViewer with no positions. This means no staking data will be available.')\n return await initSimpleStakeViewer(config, logger)\n }\n}\n","import type { Logger } from '@xylabs/sdk-js'\nimport { assertEx } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport type { Provider } from 'ethers'\nimport type { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'\nimport { canUseJsonRpcProvider, initJsonRpcProvider } from './initJsonRpcProvider.ts'\n\nlet provider: Promise<JsonRpcProvider> | undefined\n\nexport const initEvmProvider = async ({ config }: { config: Pick<Config, 'evm'>; logger?: Logger }): Promise<Provider> => {\n if (provider) return provider\n if (canUseInfuraProvider(config)) {\n provider = initInfuraProvider(config)\n } else if (canUseJsonRpcProvider(config)) {\n provider = initJsonRpcProvider(config)\n }\n return assertEx(await provider, () => 'No provider available')\n}\n\nexport const canUseEvmProvider = ({ config }: { config: Pick<Config, 'evm'> }) => {\n return canUseInfuraProvider(config) || canUseJsonRpcProvider(config)\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { InfuraProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nlet instance: Promise<InfuraProvider> | undefined\n\nexport const initInfuraProvider = (config: Pick<Config, 'evm'>) => {\n if (instance) return instance\n const providerConfig = getInfuraProviderConfig(config)\n instance = Promise.resolve(new InfuraProvider(...providerConfig))\n return instance\n}\n\nexport const canUseInfuraProvider = (config: Pick<Config, 'evm'>): boolean => {\n return canUseChainId(config)\n && isDefined(config.evm?.infura?.projectId)\n && isDefined(config.evm?.infura?.projectSecret)\n}\n\nexport const getInfuraProviderConfig = (config: Pick<Config, 'evm'>) => {\n const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')\n const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')\n return [getChainId(config), projectId, projectSecret] as const\n}\n","import {\n assertEx, hexFrom, isDefined, isHex,\n} from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\n\nexport const canUseChainId = (config: Pick<Config, 'evm'>): boolean => {\n return isDefined(config.evm.chainId)\n}\n\nexport const getChainId = (config: Pick<Config, 'evm'>) => {\n const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')\n if (isHex(chainId, { prefix: true })) {\n const hex = hexFrom(chainId)\n const parsed = Number.parseInt(hex, 16)\n return parsed\n } else {\n const parsed = Number.parseInt(chainId, 10)\n return parsed\n }\n}\n","import { assertEx, isDefined } from '@xylabs/sdk-js'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { JsonRpcProvider } from 'ethers/providers'\n\nimport { canUseChainId, getChainId } from './initChainId.ts'\n\nexport const initJsonRpcProvider = (config: Pick<Config, 'evm'>) => {\n const providerConfig = getJsonRpcProviderConfig(config)\n return Promise.resolve(new JsonRpcProvider(...providerConfig))\n}\n\nexport const canUseJsonRpcProvider = (config: Pick<Config, 'evm'>) => {\n return canUseChainId(config)\n && isDefined(config.evm.jsonRpc?.url)\n}\n\nexport const getJsonRpcProviderConfig = (config: Pick<Config, 'evm'>) => {\n const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')\n return [jsonRpcUrl, getChainId(config)] as const\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { isUndefined } from '@xylabs/sdk-js'\nimport { HDWallet } from '@xyo-network/wallet'\nimport type { WalletInstance } from '@xyo-network/wallet-model'\nimport type { Initializable, InitializableParams } from '@xyo-network/xl1-protocol'\nimport type { Config } from '@xyo-network/xl1-protocol-sdk'\nimport { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-protocol-sdk'\n\nlet accountServiceSingleton: Promisable<WalletInstance> | undefined\n\nexport const initProducerAccount: Initializable<InitializableParams<{ config: Config }>, WalletInstance>\n = async ({ config, logger }): Promise<WalletInstance> => {\n if (accountServiceSingleton) return accountServiceSingleton\n let walletPhrase = config.producer.mnemonic\n if (isUndefined(walletPhrase)) {\n logger?.warn('[Producer] No wallet mnemonic specified!')\n const randomMnemonic = HDWallet.generateMnemonic()\n logger?.warn(`[Producer] Using randomly generated mnemonic:\n \n${randomMnemonic}\n \n `)\n walletPhrase = randomMnemonic\n }\n const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)\n const account = await wallet.derivePath(ADDRESS_INDEX.XYO)\n accountServiceSingleton = account\n return accountServiceSingleton\n }\n"],"mappings":"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","names":["ArchivistSyncDiviner","DivinerConfigSchema","MemoryNode","MemorySentinel","SentinelConfigSchema","initArchivistSync","name","inArchivist","outArchivist","frequency","max","traceProvider","node","MemoryNode","create","account","finalizedArchivistSyncDiviner","ArchivistSyncDiviner","config","schema","DivinerConfigSchema","register","attach","address","sentinel","MemorySentinel","synchronous","SentinelConfigSchema","tasks","required","mod","endPoint","automations","frequencyUnits","start","Date","now","type","MemoryArchivist","MemoryArchivistConfigSchema","DefaultReadCachingArchivistConfig","max","schema","MemoryArchivistConfigSchema","getDynamicDefaultReadCachingArchivistConfig","archivist","id","name","dynamicDefaults","getDynamicReadCachingArchivistConfig","_archivist","dynamicConfig","wrapWithReadCachingArchivist","config","dynamicDefaultReadCachingArchivistConfig","dynamicReadCachingArchivistConfig","materializedConfig","cachingArchivist","MemoryArchivist","create","account","initArchivistSync","HttpBridge","HttpBridgeConfigSchema","Mutex","initMutex","Mutex","bridgeSingletonMap","Map","initBridge","nodeUrl","runExclusive","existing","get","bridge","HttpBridge","create","account","config","name","client","url","discoverRoots","schema","HttpBridgeConfigSchema","security","allowAnonymous","start","set","buildNextBlock","createDeclarationIntent","createProducerChainStakeIntentBlock","prevBlock","producerAccount","range","producerDeclarationPayload","createDeclarationIntent","address","buildNextBlock","assertEx","asAttachableArchivistInstance","asAttachableModuleInstance","Mutex","initMutex","Mutex","bridgedModuleDictionary","initBridgedModule","bridge","moduleName","runExclusive","existing","address","mod","assertEx","resolve","moduleInstance","asAttachableModuleInstance","moduleMap","undefined","initBridgedArchivistModule","asAttachableArchivistInstance","assertEx","toEthAddress","EthereumChainStakeEvents","EthereumChainStakeViewer","StakedXyoChainV2__factory","SimpleChainStakeViewer","assertEx","assertEx","isDefined","InfuraProvider","assertEx","hexFrom","isDefined","isHex","canUseChainId","config","isDefined","evm","chainId","getChainId","assertEx","isHex","prefix","hex","hexFrom","parsed","Number","parseInt","instance","initInfuraProvider","config","providerConfig","getInfuraProviderConfig","Promise","resolve","InfuraProvider","canUseInfuraProvider","canUseChainId","isDefined","evm","infura","projectId","projectSecret","assertEx","getChainId","assertEx","isDefined","JsonRpcProvider","initJsonRpcProvider","config","providerConfig","getJsonRpcProviderConfig","Promise","resolve","JsonRpcProvider","canUseJsonRpcProvider","canUseChainId","isDefined","evm","jsonRpc","url","jsonRpcUrl","assertEx","getChainId","provider","initEvmProvider","config","canUseInfuraProvider","initInfuraProvider","canUseJsonRpcProvider","initJsonRpcProvider","assertEx","canUseEvmProvider","initEvmChainStakeViewer","config","logger","provider","initEvmProvider","contractAddress","assertEx","chain","id","contract","StakedXyoChainV2__factory","connect","toEthAddress","stakeEventsViewer","EthereumChainStakeEvents","create","start","stakeChainViewer","EthereumChainStakeViewer","initSimpleStakeViewer","SimpleChainStakeViewer","positions","initChainStakeViewer","canUseEvmProvider","console","warn","isUndefined","HDWallet","ADDRESS_INDEX","generateXyoBaseWalletFromPhrase","accountServiceSingleton","initProducerAccount","config","logger","walletPhrase","producer","mnemonic","isUndefined","warn","randomMnemonic","HDWallet","generateMnemonic","wallet","generateXyoBaseWalletFromPhrase","account","derivePath","ADDRESS_INDEX","XYO"]}
@@ -0,0 +1,6 @@
1
+ import { type Logger } from '@xylabs/sdk-js';
2
+ import { type Config, type StakeViewer } from '@xyo-network/xl1-protocol-sdk';
3
+ export declare function initEvmChainStakeViewer(config: Config, logger?: Logger): Promise<StakeViewer>;
4
+ export declare function initSimpleStakeViewer(config: Config, logger?: Logger): Promise<StakeViewer>;
5
+ export declare function initChainStakeViewer(config: Config, logger?: Logger): Promise<StakeViewer>;
6
+ //# sourceMappingURL=initChainStakeViewer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initChainStakeViewer.d.ts","sourceRoot":"","sources":["../../src/initChainStakeViewer.ts"],"names":[],"mappings":"AAAA,OAAO,EACK,KAAK,MAAM,EACtB,MAAM,gBAAgB,CAAA;AAIvB,OAAO,EACL,KAAK,MAAM,EAA0B,KAAK,WAAW,EACtD,MAAM,+BAA+B,CAAA;AAItC,wBAAsB,uBAAuB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAWnG;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAIjG;AAED,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAOhG"}
@@ -0,0 +1,7 @@
1
+ import type { WalletInstance } from '@xyo-network/wallet-model';
2
+ import type { Initializable, InitializableParams } from '@xyo-network/xl1-protocol';
3
+ import type { Config } from '@xyo-network/xl1-protocol-sdk';
4
+ export declare const initProducerAccount: Initializable<InitializableParams<{
5
+ config: Config;
6
+ }>, WalletInstance>;
7
+ //# sourceMappingURL=initProducerAccount.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"initProducerAccount.d.ts","sourceRoot":"","sources":["../../src/initProducerAccount.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAA;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAA;AACnF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAK3D,eAAO,MAAM,mBAAmB,EAAE,aAAa,CAAC,mBAAmB,CAAC;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,cAAc,CAkBpG,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/chain-orchestration",
4
- "version": "1.16.20",
4
+ "version": "1.16.21",
5
5
  "description": "XYO Layer One SDK Orchestration",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -41,18 +41,22 @@
41
41
  "dependencies": {
42
42
  "@opentelemetry/api": "~1.9.0",
43
43
  "@xylabs/sdk-js": "~5.0.37",
44
- "@xyo-network/archivist-memory": "~5.1.23",
45
- "@xyo-network/archivist-model": "~5.1.23",
46
- "@xyo-network/bridge-http": "~5.1.23",
47
- "@xyo-network/bridge-model": "~5.1.23",
48
- "@xyo-network/chain-modules": "~1.16.20",
49
- "@xyo-network/diviner-model": "~5.1.23",
50
- "@xyo-network/module-model": "~5.1.23",
51
- "@xyo-network/node-memory": "~5.1.23",
52
- "@xyo-network/sentinel-memory": "~5.1.23",
53
- "@xyo-network/sentinel-model": "~5.1.23",
44
+ "@xyo-network/archivist-memory": "~5.1.24",
45
+ "@xyo-network/archivist-model": "~5.1.24",
46
+ "@xyo-network/bridge-http": "~5.1.24",
47
+ "@xyo-network/bridge-model": "~5.1.24",
48
+ "@xyo-network/chain-modules": "~1.16.21",
49
+ "@xyo-network/chain-sdk": "~1.16.21",
50
+ "@xyo-network/diviner-model": "~5.1.24",
51
+ "@xyo-network/module-model": "~5.1.24",
52
+ "@xyo-network/node-memory": "~5.1.24",
53
+ "@xyo-network/sentinel-memory": "~5.1.24",
54
+ "@xyo-network/sentinel-model": "~5.1.24",
55
+ "@xyo-network/typechain": "~4.0.10",
54
56
  "@xyo-network/xl1-protocol": "~1.13.11",
55
- "async-mutex": "~0.5.0"
57
+ "@xyo-network/xl1-protocol-sdk": "~1.16.21",
58
+ "async-mutex": "~0.5.0",
59
+ "ethers": "~6.15.0"
56
60
  },
57
61
  "devDependencies": {
58
62
  "@types/node": "~24.10.1",
@@ -0,0 +1,19 @@
1
+ import type { AccountInstance } from '@xyo-network/account-model'
2
+ import { buildNextBlock, createDeclarationIntent } from '@xyo-network/chain-sdk'
3
+ import type { WithHashMeta } from '@xyo-network/payload-model'
4
+ import type { BlockBoundWitness, XL1BlockRange } from '@xyo-network/xl1-protocol'
5
+
6
+ export async function createProducerChainStakeIntentBlock(prevBlock: WithHashMeta<BlockBoundWitness>, producerAccount: AccountInstance, range: XL1BlockRange) {
7
+ const producerDeclarationPayload = createDeclarationIntent(
8
+ producerAccount.address,
9
+ 'producer',
10
+ range[0],
11
+ range[1],
12
+ )
13
+ return await buildNextBlock(
14
+ prevBlock,
15
+ [],
16
+ [producerDeclarationPayload],
17
+ [producerAccount],
18
+ )
19
+ }
@@ -0,0 +1 @@
1
+ export * from './initEvmProvider.ts'
@@ -0,0 +1,20 @@
1
+ import {
2
+ assertEx, hexFrom, isDefined, isHex,
3
+ } from '@xylabs/sdk-js'
4
+ import type { Config } from '@xyo-network/xl1-protocol-sdk'
5
+
6
+ export const canUseChainId = (config: Pick<Config, 'evm'>): boolean => {
7
+ return isDefined(config.evm.chainId)
8
+ }
9
+
10
+ export const getChainId = (config: Pick<Config, 'evm'>) => {
11
+ const chainId = assertEx(config.evm.chainId, () => 'Missing config.evm.chainId')
12
+ if (isHex(chainId, { prefix: true })) {
13
+ const hex = hexFrom(chainId)
14
+ const parsed = Number.parseInt(hex, 16)
15
+ return parsed
16
+ } else {
17
+ const parsed = Number.parseInt(chainId, 10)
18
+ return parsed
19
+ }
20
+ }
@@ -0,0 +1,24 @@
1
+ import type { Logger } from '@xylabs/sdk-js'
2
+ import { assertEx } from '@xylabs/sdk-js'
3
+ import type { Config } from '@xyo-network/xl1-protocol-sdk'
4
+ import type { Provider } from 'ethers'
5
+ import type { JsonRpcProvider } from 'ethers/providers'
6
+
7
+ import { canUseInfuraProvider, initInfuraProvider } from './initInfuraProvider.ts'
8
+ import { canUseJsonRpcProvider, initJsonRpcProvider } from './initJsonRpcProvider.ts'
9
+
10
+ let provider: Promise<JsonRpcProvider> | undefined
11
+
12
+ export const initEvmProvider = async ({ config }: { config: Pick<Config, 'evm'>; logger?: Logger }): Promise<Provider> => {
13
+ if (provider) return provider
14
+ if (canUseInfuraProvider(config)) {
15
+ provider = initInfuraProvider(config)
16
+ } else if (canUseJsonRpcProvider(config)) {
17
+ provider = initJsonRpcProvider(config)
18
+ }
19
+ return assertEx(await provider, () => 'No provider available')
20
+ }
21
+
22
+ export const canUseEvmProvider = ({ config }: { config: Pick<Config, 'evm'> }) => {
23
+ return canUseInfuraProvider(config) || canUseJsonRpcProvider(config)
24
+ }
@@ -0,0 +1,26 @@
1
+ import { assertEx, isDefined } from '@xylabs/sdk-js'
2
+ import type { Config } from '@xyo-network/xl1-protocol-sdk'
3
+ import { InfuraProvider } from 'ethers/providers'
4
+
5
+ import { canUseChainId, getChainId } from './initChainId.ts'
6
+
7
+ let instance: Promise<InfuraProvider> | undefined
8
+
9
+ export const initInfuraProvider = (config: Pick<Config, 'evm'>) => {
10
+ if (instance) return instance
11
+ const providerConfig = getInfuraProviderConfig(config)
12
+ instance = Promise.resolve(new InfuraProvider(...providerConfig))
13
+ return instance
14
+ }
15
+
16
+ export const canUseInfuraProvider = (config: Pick<Config, 'evm'>): boolean => {
17
+ return canUseChainId(config)
18
+ && isDefined(config.evm?.infura?.projectId)
19
+ && isDefined(config.evm?.infura?.projectSecret)
20
+ }
21
+
22
+ export const getInfuraProviderConfig = (config: Pick<Config, 'evm'>) => {
23
+ const projectId = assertEx(config.evm?.infura?.projectId, () => 'Missing config.evm.infura.projectId')
24
+ const projectSecret = assertEx(config.evm?.infura?.projectSecret, () => 'Missing config.evm.infura.projectSecret')
25
+ return [getChainId(config), projectId, projectSecret] as const
26
+ }
@@ -0,0 +1,20 @@
1
+ import { assertEx, isDefined } from '@xylabs/sdk-js'
2
+ import type { Config } from '@xyo-network/xl1-protocol-sdk'
3
+ import { JsonRpcProvider } from 'ethers/providers'
4
+
5
+ import { canUseChainId, getChainId } from './initChainId.ts'
6
+
7
+ export const initJsonRpcProvider = (config: Pick<Config, 'evm'>) => {
8
+ const providerConfig = getJsonRpcProviderConfig(config)
9
+ return Promise.resolve(new JsonRpcProvider(...providerConfig))
10
+ }
11
+
12
+ export const canUseJsonRpcProvider = (config: Pick<Config, 'evm'>) => {
13
+ return canUseChainId(config)
14
+ && isDefined(config.evm.jsonRpc?.url)
15
+ }
16
+
17
+ export const getJsonRpcProviderConfig = (config: Pick<Config, 'evm'>) => {
18
+ const jsonRpcUrl = assertEx(config.evm.jsonRpc?.url, () => 'Missing config.evm.jsonRpc.url')
19
+ return [jsonRpcUrl, getChainId(config)] as const
20
+ }
package/src/index.ts CHANGED
@@ -1,3 +1,6 @@
1
1
  export * from './archivist/index.ts'
2
2
  export * from './bridge.ts'
3
+ export * from './createDeclarationIntentBlock.ts'
3
4
  export * from './initBridgedModule.ts'
5
+ export * from './initChainStakeViewer.ts'
6
+ export * from './initProducerAccount.ts'
@@ -0,0 +1,39 @@
1
+ import {
2
+ assertEx, type Logger, toEthAddress,
3
+ } from '@xylabs/sdk-js'
4
+ import { EthereumChainStakeEvents, EthereumChainStakeViewer } from '@xyo-network/chain-sdk'
5
+ import { StakedXyoChainV2__factory } from '@xyo-network/typechain'
6
+ import type { ChainId } from '@xyo-network/xl1-protocol'
7
+ import {
8
+ type Config, SimpleChainStakeViewer, type StakeViewer,
9
+ } from '@xyo-network/xl1-protocol-sdk'
10
+
11
+ import { canUseEvmProvider, initEvmProvider } from './evm/index.ts'
12
+
13
+ export async function initEvmChainStakeViewer(config: Config, logger?: Logger): Promise<StakeViewer> {
14
+ const provider = await initEvmProvider({ config, logger })
15
+ const contractAddress = assertEx(config.chain.id, () => 'Missing config.evm.chainId') as ChainId
16
+ const contract = StakedXyoChainV2__factory.connect(toEthAddress(contractAddress), provider)
17
+ const stakeEventsViewer = await EthereumChainStakeEvents.create({ contract, logger })
18
+ assertEx(await stakeEventsViewer.start(), () => 'Failed to start EthereumChainStakeEvents reader')
19
+ const stakeChainViewer = await EthereumChainStakeViewer.create({
20
+ contract, stakeEventsViewer, logger,
21
+ })
22
+ assertEx(await stakeChainViewer.start(), () => 'Failed to start EthereumChainStake viewer')
23
+ return stakeChainViewer
24
+ }
25
+
26
+ export async function initSimpleStakeViewer(config: Config, logger?: Logger): Promise<StakeViewer> {
27
+ const stakeChainViewer = await SimpleChainStakeViewer.create({ logger, positions: [] })
28
+ assertEx(await stakeChainViewer.start(), () => 'Failed to start SimpleChainStake viewer')
29
+ return stakeChainViewer
30
+ }
31
+
32
+ export async function initChainStakeViewer(config: Config, logger?: Logger): Promise<StakeViewer> {
33
+ if (canUseEvmProvider({ config })) {
34
+ return await initEvmChainStakeViewer(config, logger)
35
+ } else {
36
+ console.warn('[API] Infura configuration not found. Using SimpleChainStakeViewer with no positions. This means no staking data will be available.')
37
+ return await initSimpleStakeViewer(config, logger)
38
+ }
39
+ }
@@ -0,0 +1,29 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import { isUndefined } from '@xylabs/sdk-js'
3
+ import { HDWallet } from '@xyo-network/wallet'
4
+ import type { WalletInstance } from '@xyo-network/wallet-model'
5
+ import type { Initializable, InitializableParams } from '@xyo-network/xl1-protocol'
6
+ import type { Config } from '@xyo-network/xl1-protocol-sdk'
7
+ import { ADDRESS_INDEX, generateXyoBaseWalletFromPhrase } from '@xyo-network/xl1-protocol-sdk'
8
+
9
+ let accountServiceSingleton: Promisable<WalletInstance> | undefined
10
+
11
+ export const initProducerAccount: Initializable<InitializableParams<{ config: Config }>, WalletInstance>
12
+ = async ({ config, logger }): Promise<WalletInstance> => {
13
+ if (accountServiceSingleton) return accountServiceSingleton
14
+ let walletPhrase = config.producer.mnemonic
15
+ if (isUndefined(walletPhrase)) {
16
+ logger?.warn('[Producer] No wallet mnemonic specified!')
17
+ const randomMnemonic = HDWallet.generateMnemonic()
18
+ logger?.warn(`[Producer] Using randomly generated mnemonic:
19
+
20
+ ${randomMnemonic}
21
+
22
+ `)
23
+ walletPhrase = randomMnemonic
24
+ }
25
+ const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)
26
+ const account = await wallet.derivePath(ADDRESS_INDEX.XYO)
27
+ accountServiceSingleton = account
28
+ return accountServiceSingleton
29
+ }