@xyo-network/chain-orchestration 1.16.19 → 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.
- package/dist/neutral/createDeclarationIntentBlock.d.ts +5 -0
- package/dist/neutral/createDeclarationIntentBlock.d.ts.map +1 -0
- package/dist/neutral/evm/index.d.ts +2 -0
- package/dist/neutral/evm/index.d.ts.map +1 -0
- package/dist/neutral/evm/initChainId.d.ts +4 -0
- package/dist/neutral/evm/initChainId.d.ts.map +1 -0
- package/dist/neutral/evm/initEvmProvider.d.ts +11 -0
- package/dist/neutral/evm/initEvmProvider.d.ts.map +1 -0
- package/dist/neutral/evm/initInfuraProvider.d.ts +6 -0
- package/dist/neutral/evm/initInfuraProvider.d.ts.map +1 -0
- package/dist/neutral/evm/initJsonRpcProvider.d.ts +6 -0
- package/dist/neutral/evm/initJsonRpcProvider.d.ts.map +1 -0
- package/dist/neutral/index.d.ts +3 -0
- package/dist/neutral/index.d.ts.map +1 -1
- package/dist/neutral/index.mjs +170 -0
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/initChainStakeViewer.d.ts +6 -0
- package/dist/neutral/initChainStakeViewer.d.ts.map +1 -0
- package/dist/neutral/initProducerAccount.d.ts +7 -0
- package/dist/neutral/initProducerAccount.d.ts.map +1 -0
- package/package.json +16 -12
- package/src/createDeclarationIntentBlock.ts +19 -0
- package/src/evm/index.ts +1 -0
- package/src/evm/initChainId.ts +20 -0
- package/src/evm/initEvmProvider.ts +24 -0
- package/src/evm/initInfuraProvider.ts +26 -0
- package/src/evm/initJsonRpcProvider.ts +20 -0
- package/src/index.ts +3 -0
- package/src/initChainStakeViewer.ts +39 -0
- package/src/initProducerAccount.ts +29 -0
|
@@ -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 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/evm/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
|
|
@@ -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"}
|
package/dist/neutral/index.d.ts
CHANGED
|
@@ -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"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -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.
|
|
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.
|
|
45
|
-
"@xyo-network/archivist-model": "~5.1.
|
|
46
|
-
"@xyo-network/bridge-http": "~5.1.
|
|
47
|
-
"@xyo-network/bridge-model": "~5.1.
|
|
48
|
-
"@xyo-network/chain-modules": "~1.16.
|
|
49
|
-
"@xyo-network/
|
|
50
|
-
"@xyo-network/
|
|
51
|
-
"@xyo-network/
|
|
52
|
-
"@xyo-network/
|
|
53
|
-
"@xyo-network/sentinel-
|
|
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
|
-
"
|
|
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
|
+
}
|
package/src/evm/index.ts
ADDED
|
@@ -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
|
@@ -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
|
+
}
|