@xyo-network/xl1-cli-lib 1.16.26 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/node/commands/producer/runProducer.d.ts +1 -1
- package/dist/node/commands/producer/runProducer.d.ts.map +1 -1
- package/dist/node/commands/validator/runValidator.d.ts.map +1 -1
- package/dist/node/index.mjs +345 -509
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts +2 -2
- package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts.map +1 -1
- package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts +2 -2
- package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts.map +1 -1
- package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts +2 -2
- package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts.map +1 -1
- package/dist/node/orchestration/actor/implementation/index.d.ts +0 -1
- package/dist/node/orchestration/actor/implementation/index.d.ts.map +1 -1
- package/dist/node/orchestration/initServices.d.ts.map +1 -1
- package/dist/node/orchestration/services/implementation/accountBalance.d.ts +0 -2
- package/dist/node/orchestration/services/implementation/accountBalance.d.ts.map +1 -1
- package/dist/node/orchestration/services/implementation/blockViewer.d.ts +7 -0
- package/dist/node/orchestration/services/implementation/blockViewer.d.ts.map +1 -0
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +3 -3
- package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +1 -1
- package/dist/node/orchestration/services/implementation/head/head.d.ts +1 -1
- package/dist/node/orchestration/services/implementation/head/head.d.ts.map +1 -1
- package/dist/node/orchestration/services/implementation/index.d.ts +1 -0
- package/dist/node/orchestration/services/implementation/index.d.ts.map +1 -1
- package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts +7 -3
- package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts.map +1 -1
- package/dist/node/xl1.mjs +295 -704
- package/dist/node/xl1.mjs.map +1 -1
- package/package.json +18 -16
- package/src/commands/producer/runProducer.ts +7 -5
- package/src/commands/validator/runValidator.ts +2 -3
- package/src/orchestration/actor/implementation/BalanceActor.ts +4 -7
- package/src/orchestration/actor/implementation/ProducerActor.ts +6 -6
- package/src/orchestration/actor/implementation/ValidatorActor.ts +4 -4
- package/src/orchestration/actor/implementation/index.ts +0 -1
- package/src/orchestration/initServices.ts +30 -101
- package/src/orchestration/services/implementation/accountBalance.ts +10 -17
- package/src/orchestration/services/implementation/blockViewer.ts +29 -0
- package/src/orchestration/services/implementation/head/createBootstrapHead.ts +1 -1
- package/src/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +5 -5
- package/src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +1 -1
- package/src/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.ts +1 -1
- package/src/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.ts +1 -1
- package/src/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +1 -1
- package/src/orchestration/services/implementation/head/getForkFromBlock.ts +1 -1
- package/src/orchestration/services/implementation/head/head.ts +1 -2
- package/src/orchestration/services/implementation/index.ts +1 -0
- package/src/orchestration/services/implementation/pendingTransactions.ts +28 -9
- package/src/orchestration/services/implementation/time.ts +2 -2
- package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts +0 -20
- package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts.map +0 -1
- package/src/orchestration/actor/implementation/ChainHeadUpdateActor.ts +0 -72
package/dist/node/xl1.mjs
CHANGED
|
@@ -5,7 +5,7 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
5
5
|
import { config } from "dotenv";
|
|
6
6
|
|
|
7
7
|
// src/runCLI.ts
|
|
8
|
-
import { deepMerge, isDefined as
|
|
8
|
+
import { deepMerge, isDefined as isDefined18 } from "@xylabs/sdk-js";
|
|
9
9
|
import { ConfigZod } from "@xyo-network/xl1-protocol-sdk";
|
|
10
10
|
import yargs from "yargs";
|
|
11
11
|
import { hideBin } from "yargs/helpers";
|
|
@@ -32,9 +32,11 @@ function runMempool(context) {
|
|
|
32
32
|
}
|
|
33
33
|
__name(runMempool, "runMempool");
|
|
34
34
|
|
|
35
|
+
// src/commands/producer/runProducer.ts
|
|
36
|
+
import { exists, isDefined as isDefined15 } from "@xylabs/sdk-js";
|
|
37
|
+
|
|
35
38
|
// src/orchestration/actor/implementation/BalanceActor.ts
|
|
36
39
|
import { assertEx } from "@xylabs/sdk-js";
|
|
37
|
-
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
38
40
|
import { Mutex } from "async-mutex";
|
|
39
41
|
|
|
40
42
|
// src/orchestration/actor/model/Actor.ts
|
|
@@ -229,17 +231,14 @@ var BalanceActor = class _BalanceActor extends Actor {
|
|
|
229
231
|
get balanceService() {
|
|
230
232
|
return assertEx(this.params.balance, () => "balanceService not set");
|
|
231
233
|
}
|
|
232
|
-
get
|
|
233
|
-
return assertEx(this.params.
|
|
234
|
+
get blockViewer() {
|
|
235
|
+
return assertEx(this.params.blockViewer, () => "blockViewer not set");
|
|
234
236
|
}
|
|
235
237
|
static create(params) {
|
|
236
238
|
return new _BalanceActor(params);
|
|
237
239
|
}
|
|
238
240
|
async start() {
|
|
239
241
|
await super.start();
|
|
240
|
-
this.chainIterator.on("headUpdate", async () => {
|
|
241
|
-
await this.updateBalance();
|
|
242
|
-
});
|
|
243
242
|
this.registerTimer(
|
|
244
243
|
"BalanceTimer",
|
|
245
244
|
async () => {
|
|
@@ -253,84 +252,21 @@ var BalanceActor = class _BalanceActor extends Actor {
|
|
|
253
252
|
async updateBalance() {
|
|
254
253
|
if (this._updateMutex.isLocked()) return;
|
|
255
254
|
await this._updateMutex.runExclusive(async () => {
|
|
256
|
-
const head = await
|
|
255
|
+
const head = await this.blockViewer.currentBlockHash();
|
|
257
256
|
await this.balanceService.accountsBalances([], head);
|
|
258
257
|
});
|
|
259
258
|
}
|
|
260
259
|
};
|
|
261
260
|
|
|
262
|
-
// src/orchestration/actor/implementation/ChainHeadUpdateActor.ts
|
|
263
|
-
import { assertEx as assertEx2, toHex } from "@xylabs/sdk-js";
|
|
264
|
-
import { findMostRecentBlock, sortBlocks } from "@xyo-network/chain-protocol";
|
|
265
|
-
import { isBlockBoundWitness } from "@xyo-network/xl1-protocol";
|
|
266
|
-
import { Mutex as Mutex2 } from "async-mutex";
|
|
267
|
-
var ChainHeadUpdateActor = class _ChainHeadUpdateActor extends Actor {
|
|
268
|
-
static {
|
|
269
|
-
__name(this, "ChainHeadUpdateActor");
|
|
270
|
-
}
|
|
271
|
-
_pollForNewHeadMutex = new Mutex2();
|
|
272
|
-
constructor(params) {
|
|
273
|
-
super("ChainHeadUpdate", "ChainHeadUpdate", params);
|
|
274
|
-
}
|
|
275
|
-
get chainFinalizedArchivist() {
|
|
276
|
-
return assertEx2(this.params.chainArchivist, () => "ChainArchivist not set");
|
|
277
|
-
}
|
|
278
|
-
get chainIterator() {
|
|
279
|
-
return assertEx2(this.params.chainIterator, () => "chainIterator not set");
|
|
280
|
-
}
|
|
281
|
-
static create(params) {
|
|
282
|
-
return new _ChainHeadUpdateActor(params);
|
|
283
|
-
}
|
|
284
|
-
async start() {
|
|
285
|
-
await super.start();
|
|
286
|
-
this.chainFinalizedArchivist.on("inserted", async (data) => {
|
|
287
|
-
await this.checkInsertedForNewHead(data);
|
|
288
|
-
});
|
|
289
|
-
this.registerTimer(
|
|
290
|
-
"ChainHeadUpdateTimer",
|
|
291
|
-
async () => await this.pollForNewHead(),
|
|
292
|
-
0,
|
|
293
|
-
2500
|
|
294
|
-
/* 250 */
|
|
295
|
-
);
|
|
296
|
-
}
|
|
297
|
-
async checkInsertedForNewHead(data) {
|
|
298
|
-
const candidateBlock = sortBlocks(data.payloads.filter(isBlockBoundWitness)).at(-1);
|
|
299
|
-
await this.updateHeadIfNewer(candidateBlock);
|
|
300
|
-
}
|
|
301
|
-
async pollForNewHead() {
|
|
302
|
-
if (this._pollForNewHeadMutex.isLocked()) {
|
|
303
|
-
this.logger?.log("Skipping poll for new head, previous poll still in progress");
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
306
|
-
await this._pollForNewHeadMutex.runExclusive(async () => {
|
|
307
|
-
const candidateBlock = await findMostRecentBlock(this.chainFinalizedArchivist);
|
|
308
|
-
await this.updateHeadIfNewer(candidateBlock);
|
|
309
|
-
});
|
|
310
|
-
}
|
|
311
|
-
async updateHeadIfNewer(candidateBlock) {
|
|
312
|
-
if (!candidateBlock) return;
|
|
313
|
-
const currentHead = await this.chainIterator.head();
|
|
314
|
-
const candidateBlockNumber = candidateBlock.block;
|
|
315
|
-
const candidateBlockNumberDisplay = `0x${toHex(candidateBlockNumber)}`;
|
|
316
|
-
const currentBlockNumber = currentHead?.block ?? -1;
|
|
317
|
-
if (candidateBlockNumber > currentBlockNumber) {
|
|
318
|
-
this.logger?.log("Found more recent head:", candidateBlockNumber, candidateBlockNumberDisplay);
|
|
319
|
-
await this.chainIterator.updateHead(candidateBlock);
|
|
320
|
-
this.logger?.log("Updated head:", candidateBlockNumber, candidateBlockNumberDisplay);
|
|
321
|
-
}
|
|
322
|
-
}
|
|
323
|
-
};
|
|
324
|
-
|
|
325
261
|
// src/orchestration/actor/implementation/ProducerActor.ts
|
|
326
|
-
import { assertEx as
|
|
262
|
+
import { assertEx as assertEx2, isDefined, isUndefined, toHex } from "@xylabs/sdk-js";
|
|
327
263
|
import { createDeclarationIntent } from "@xyo-network/chain-protocol";
|
|
328
264
|
import { BaseBlockProducerService } from "@xyo-network/chain-services";
|
|
329
|
-
import { PayloadBuilder
|
|
265
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
330
266
|
import { PayloadBundleSchema } from "@xyo-network/payload-model";
|
|
331
267
|
import { asXL1BlockNumber } from "@xyo-network/xl1-protocol";
|
|
332
268
|
import { buildTransaction, flattenHydratedBlock, flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
|
|
333
|
-
import { Mutex as
|
|
269
|
+
import { Mutex as Mutex2 } from "async-mutex";
|
|
334
270
|
var SHOULD_REGISTER_REDECLARATION_INTENT_TIMER = true;
|
|
335
271
|
var TEN_MINUTES = 10 * 60 * 1e3;
|
|
336
272
|
var ProducerActor = class _ProducerActor extends Actor {
|
|
@@ -344,7 +280,7 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
344
280
|
_producerActorBlockProductionChecks;
|
|
345
281
|
_producerActorBlocksProduced;
|
|
346
282
|
_producerActorBlocksPublished;
|
|
347
|
-
_produceBlockMutex = new
|
|
283
|
+
_produceBlockMutex = new Mutex2();
|
|
348
284
|
constructor(params) {
|
|
349
285
|
super(params.producer.address, "Producer", params);
|
|
350
286
|
this._metricAttributes = {
|
|
@@ -364,28 +300,28 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
364
300
|
});
|
|
365
301
|
}
|
|
366
302
|
get account() {
|
|
367
|
-
return
|
|
303
|
+
return assertEx2(this.params.account, () => "account not set");
|
|
368
304
|
}
|
|
369
305
|
get balanceService() {
|
|
370
|
-
return
|
|
306
|
+
return assertEx2(this.params.balance, () => "balanceService not set");
|
|
371
307
|
}
|
|
372
|
-
get
|
|
373
|
-
return
|
|
308
|
+
get blockViewer() {
|
|
309
|
+
return assertEx2(this.params.blockViewer, () => "blockViewer not set");
|
|
374
310
|
}
|
|
375
311
|
get chainStakeViewer() {
|
|
376
|
-
return
|
|
312
|
+
return assertEx2(this.params.chainStakeViewer, () => "chainStakeViewer not set");
|
|
377
313
|
}
|
|
378
314
|
get chainSubmissionsArchivistWrite() {
|
|
379
|
-
return
|
|
315
|
+
return assertEx2(this.params.chainSubmissionsArchivistWrite, () => "chainSubmissionsArchivistWrite not set");
|
|
380
316
|
}
|
|
381
317
|
get pendingBundledTransactionsArchivistWrite() {
|
|
382
|
-
return
|
|
318
|
+
return assertEx2(this.params.pendingBundledTransactionsArchivistWrite, () => "pendingBundledTransactionsArchivistWrite not set");
|
|
383
319
|
}
|
|
384
320
|
get producer() {
|
|
385
|
-
return
|
|
321
|
+
return assertEx2(this.params.producer, () => "producer not set");
|
|
386
322
|
}
|
|
387
323
|
get stakeIntentService() {
|
|
388
|
-
return
|
|
324
|
+
return assertEx2(this.params.stakeIntent, () => "stakeIntentService not set");
|
|
389
325
|
}
|
|
390
326
|
static create(params) {
|
|
391
327
|
return new _ProducerActor(params);
|
|
@@ -426,12 +362,12 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
426
362
|
}
|
|
427
363
|
await this._produceBlockMutex.runExclusive(async () => {
|
|
428
364
|
const headStart = Date.now();
|
|
429
|
-
const head = await this.
|
|
365
|
+
const head = (await this.blockViewer.currentBlock())[0];
|
|
430
366
|
const headDuration = Date.now() - headStart;
|
|
431
|
-
if (headDuration > 500) this.logger?.warn(`[Slow] Fetched head in ${headDuration}ms: 0x${
|
|
367
|
+
if (headDuration > 500) this.logger?.warn(`[Slow] Fetched head in ${headDuration}ms: 0x${toHex(head._hash)}`);
|
|
432
368
|
const headHash = head._hash;
|
|
433
369
|
if (this._lastProducedBlock && this._lastProducedBlock[0].previous === headHash) {
|
|
434
|
-
this.logger?.log("Block already produced:", `0x${
|
|
370
|
+
this.logger?.log("Block already produced:", `0x${toHex(this._lastProducedBlock[0].block)}`, this._lastProducedBlock[0].block);
|
|
435
371
|
} else {
|
|
436
372
|
this._producerActorBlockProductionAttempts?.add(1, this._metricAttributes);
|
|
437
373
|
const nextStart = Date.now();
|
|
@@ -439,7 +375,7 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
439
375
|
const nextDuration = Date.now() - nextStart;
|
|
440
376
|
if (nextDuration > 1e3) this.logger?.warn(`[Slow] Generated next block in ${nextDuration}ms, block: ${nextBlock?.[0]._hash}`);
|
|
441
377
|
if (nextBlock) {
|
|
442
|
-
const displayBlockNumber = `0x${
|
|
378
|
+
const displayBlockNumber = `0x${toHex(nextBlock[0].block)}`;
|
|
443
379
|
this.logger?.log("Produced block:", displayBlockNumber);
|
|
444
380
|
this._producerActorBlocksProduced?.add(1, this._metricAttributes);
|
|
445
381
|
await this.chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(nextBlock));
|
|
@@ -454,7 +390,7 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
454
390
|
async redeclareIntent() {
|
|
455
391
|
await this.spanAsync("redeclareIntent", async () => {
|
|
456
392
|
if (this.params.config.producer.disableIntentRedeclaration) return;
|
|
457
|
-
const head = await this.
|
|
393
|
+
const head = (await this.blockViewer.currentBlock())[0];
|
|
458
394
|
if (isUndefined(head)) return;
|
|
459
395
|
const currentBlock = head.block;
|
|
460
396
|
const blocksUntilExpiration = await this.calculateBlocksUntilProducerDeclarationExpiration(currentBlock);
|
|
@@ -482,12 +418,12 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
482
418
|
}
|
|
483
419
|
async submitRedeclarationIntent(currentBlock, redeclarationIntent) {
|
|
484
420
|
this.logger?.log("Submitting redeclaration intent for producer:", this.account.address);
|
|
485
|
-
const tx = await buildTransaction(this.
|
|
421
|
+
const tx = await buildTransaction(await this.chainStakeViewer.chainId(), [
|
|
486
422
|
redeclarationIntent
|
|
487
423
|
], [], this.account, currentBlock, asXL1BlockNumber(currentBlock + 1e3, true));
|
|
488
424
|
const payloads = flattenHydratedTransaction(tx);
|
|
489
425
|
const root = tx[0]._hash;
|
|
490
|
-
const payloadBundle = new
|
|
426
|
+
const payloadBundle = new PayloadBuilder({
|
|
491
427
|
schema: PayloadBundleSchema
|
|
492
428
|
}).fields({
|
|
493
429
|
payloads,
|
|
@@ -581,25 +517,12 @@ var initHealthEndpoints = /* @__PURE__ */ __name((params) => {
|
|
|
581
517
|
}, "initHealthEndpoints");
|
|
582
518
|
|
|
583
519
|
// src/orchestration/initServices.ts
|
|
584
|
-
import { asAddress as asAddress2, assertEx as
|
|
585
|
-
import {
|
|
586
|
-
import { blockViewerFromChainIteratorAndArchivist } from "@xyo-network/chain-services";
|
|
520
|
+
import { asAddress as asAddress2, assertEx as assertEx15, isDefined as isDefined14 } from "@xylabs/sdk-js";
|
|
521
|
+
import { initElectionService, initProducerAccount, initStakeIntentService } from "@xyo-network/chain-orchestration";
|
|
587
522
|
import { initTelemetry } from "@xyo-network/chain-telemetry";
|
|
588
|
-
import { startupSpanAsync as
|
|
523
|
+
import { startupSpanAsync as startupSpanAsync7 } from "@xyo-network/chain-utils";
|
|
589
524
|
import { validateHydratedBlockState } from "@xyo-network/chain-validation";
|
|
590
|
-
import { StepSizes } from "@xyo-network/xl1-protocol";
|
|
591
|
-
import { readPayloadMapFromStore } from "@xyo-network/xl1-protocol-sdk";
|
|
592
525
|
import { CompletedStepRewardAddressValidatorFactory, DerivedReceiveAddressValidatorFactory, SelfSignerValidator, TransactionTransfersValidatorFactory } from "@xyo-network/xl1-validation";
|
|
593
|
-
import { Semaphore as Semaphore2 } from "async-mutex";
|
|
594
|
-
|
|
595
|
-
// src/orchestration/archivists/ChainFinalized/archivist.ts
|
|
596
|
-
import { initArchivistSync } from "@xyo-network/chain-orchestration";
|
|
597
|
-
import { startupSpanAsync } from "@xyo-network/chain-utils";
|
|
598
|
-
import { timeBudget } from "@xyo-network/xl1-protocol-sdk";
|
|
599
|
-
import { Mutex as Mutex6 } from "async-mutex";
|
|
600
|
-
|
|
601
|
-
// src/orchestration/archivists/ChainFinalized/local.ts
|
|
602
|
-
import { Mutex as Mutex4 } from "async-mutex";
|
|
603
526
|
|
|
604
527
|
// src/orchestration/archivists/lib/localPersistentArchivist.ts
|
|
605
528
|
import { rm } from "fs/promises";
|
|
@@ -626,120 +549,62 @@ var getLocalPersistentArchivist = /* @__PURE__ */ __name((name, dbName, storeNam
|
|
|
626
549
|
}
|
|
627
550
|
}, "getLocalPersistentArchivist");
|
|
628
551
|
|
|
629
|
-
// src/orchestration/archivists/
|
|
630
|
-
var mutex = new Mutex4();
|
|
631
|
-
var singleton;
|
|
632
|
-
var initLocalChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
633
|
-
return await mutex.runExclusive(async () => {
|
|
634
|
-
if (singleton) return singleton;
|
|
635
|
-
const { root } = config2.storage;
|
|
636
|
-
singleton = await getLocalPersistentArchivist("local-finalized-chain", "chain", "finalized", root);
|
|
637
|
-
return singleton;
|
|
638
|
-
});
|
|
639
|
-
}, "initLocalChainFinalizedArchivist");
|
|
640
|
-
|
|
641
|
-
// src/orchestration/archivists/ChainFinalized/remote.ts
|
|
552
|
+
// src/orchestration/archivists/ChainSubmissions/archivist.ts
|
|
642
553
|
import { assertEx as assertEx4 } from "@xylabs/sdk-js";
|
|
554
|
+
import { startupSpanAsync } from "@xyo-network/chain-utils";
|
|
555
|
+
import { timeBudget } from "@xyo-network/xl1-protocol-sdk";
|
|
556
|
+
import { Mutex as Mutex4 } from "async-mutex";
|
|
557
|
+
|
|
558
|
+
// src/orchestration/archivists/ChainSubmissions/remote.ts
|
|
559
|
+
import { assertEx as assertEx3 } from "@xylabs/sdk-js";
|
|
643
560
|
import { initBridge, initBridgedArchivistModule } from "@xyo-network/chain-orchestration";
|
|
644
561
|
import { getUrl } from "@xyo-network/xl1-protocol-sdk";
|
|
645
|
-
import { Mutex as
|
|
646
|
-
var
|
|
647
|
-
var
|
|
648
|
-
var
|
|
649
|
-
return await
|
|
650
|
-
if (
|
|
562
|
+
import { Mutex as Mutex3 } from "async-mutex";
|
|
563
|
+
var mutex = new Mutex3();
|
|
564
|
+
var singleton;
|
|
565
|
+
var initRemoteChainSubmissionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
566
|
+
return await mutex.runExclusive(async () => {
|
|
567
|
+
if (singleton) return singleton;
|
|
651
568
|
const { host, port } = config2.mempool.enabled ? config2.mempool : config2.api;
|
|
652
569
|
const nodeUrl = getUrl(host, port);
|
|
653
570
|
const bridge = await initBridge(nodeUrl);
|
|
654
|
-
|
|
655
|
-
bridge,
|
|
656
|
-
moduleName: "XYOChain:Chain:Finalized"
|
|
657
|
-
});
|
|
658
|
-
return assertEx4(singleton2, () => "RemoteChainFinalizedArchivist failed to initialize");
|
|
659
|
-
});
|
|
660
|
-
}, "initRemoteChainFinalizedArchivist");
|
|
661
|
-
|
|
662
|
-
// src/orchestration/archivists/ChainFinalized/archivist.ts
|
|
663
|
-
var mutex3 = new Mutex6();
|
|
664
|
-
var singleton3;
|
|
665
|
-
async function initChainFinalizedArchivist({ config: config2, logger, traceProvider }) {
|
|
666
|
-
return await mutex3.runExclusive(async () => {
|
|
667
|
-
if (singleton3) return singleton3;
|
|
668
|
-
return await timeBudget("initChainFinalizedArchivist", logger, async () => {
|
|
669
|
-
const [remote, local] = await Promise.all([
|
|
670
|
-
startupSpanAsync("ChainFinalizedArchivist:initRemote", () => initRemoteChainFinalizedArchivist({
|
|
671
|
-
config: config2,
|
|
672
|
-
logger
|
|
673
|
-
})),
|
|
674
|
-
startupSpanAsync("ChainFinalizedArchivist:initLocal", () => initLocalChainFinalizedArchivist({
|
|
675
|
-
config: config2,
|
|
676
|
-
logger
|
|
677
|
-
}))
|
|
678
|
-
]);
|
|
679
|
-
await startupSpanAsync("ChainFinalizedArchivist:initArchivistSync", () => initArchivistSync("ChainFinalizedArchivist", remote, local, 200, Number.MAX_SAFE_INTEGER, traceProvider));
|
|
680
|
-
singleton3 = local;
|
|
681
|
-
return singleton3;
|
|
682
|
-
}, 2e3, true);
|
|
683
|
-
});
|
|
684
|
-
}
|
|
685
|
-
__name(initChainFinalizedArchivist, "initChainFinalizedArchivist");
|
|
686
|
-
|
|
687
|
-
// src/orchestration/archivists/ChainSubmissions/archivist.ts
|
|
688
|
-
import { assertEx as assertEx6 } from "@xylabs/sdk-js";
|
|
689
|
-
import { startupSpanAsync as startupSpanAsync2 } from "@xyo-network/chain-utils";
|
|
690
|
-
import { timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
|
|
691
|
-
import { Mutex as Mutex8 } from "async-mutex";
|
|
692
|
-
|
|
693
|
-
// src/orchestration/archivists/ChainSubmissions/remote.ts
|
|
694
|
-
import { assertEx as assertEx5 } from "@xylabs/sdk-js";
|
|
695
|
-
import { initBridge as initBridge2, initBridgedArchivistModule as initBridgedArchivistModule2 } from "@xyo-network/chain-orchestration";
|
|
696
|
-
import { getUrl as getUrl2 } from "@xyo-network/xl1-protocol-sdk";
|
|
697
|
-
import { Mutex as Mutex7 } from "async-mutex";
|
|
698
|
-
var mutex4 = new Mutex7();
|
|
699
|
-
var singleton4;
|
|
700
|
-
var initRemoteChainSubmissionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
701
|
-
return await mutex4.runExclusive(async () => {
|
|
702
|
-
if (singleton4) return singleton4;
|
|
703
|
-
const { host, port } = config2.mempool.enabled ? config2.mempool : config2.api;
|
|
704
|
-
const nodeUrl = getUrl2(host, port);
|
|
705
|
-
const bridge = await initBridge2(nodeUrl);
|
|
706
|
-
singleton4 = await initBridgedArchivistModule2({
|
|
571
|
+
singleton = await initBridgedArchivistModule({
|
|
707
572
|
bridge,
|
|
708
573
|
moduleName: "XYOChain:Chain:Submissions"
|
|
709
574
|
});
|
|
710
|
-
return
|
|
575
|
+
return assertEx3(singleton, () => new Error("Failed to initialize RemoteChainSubmissionsArchivist"));
|
|
711
576
|
});
|
|
712
577
|
}, "initRemoteChainSubmissionsArchivist");
|
|
713
578
|
|
|
714
579
|
// src/orchestration/archivists/ChainSubmissions/archivist.ts
|
|
715
|
-
var
|
|
716
|
-
var
|
|
580
|
+
var mutex2 = new Mutex4();
|
|
581
|
+
var singleton2;
|
|
717
582
|
var initChainSubmissionsArchivist = /* @__PURE__ */ __name(async (params) => {
|
|
718
|
-
return await
|
|
719
|
-
if (
|
|
720
|
-
return await
|
|
721
|
-
const remote = await
|
|
722
|
-
|
|
723
|
-
return
|
|
583
|
+
return await mutex2.runExclusive(async () => {
|
|
584
|
+
if (singleton2) return singleton2;
|
|
585
|
+
return await timeBudget("initChainSubmissionsArchivist", params.logger, async () => {
|
|
586
|
+
const remote = await startupSpanAsync("ChainSubmissionsArchivist:initRemote", () => initRemoteChainSubmissionsArchivist(params));
|
|
587
|
+
singleton2 = remote;
|
|
588
|
+
return assertEx4(singleton2, () => new Error("Failed to initialize ChainSubmissionsArchivist"));
|
|
724
589
|
}, 2e3, true);
|
|
725
590
|
});
|
|
726
591
|
}, "initChainSubmissionsArchivist");
|
|
727
592
|
|
|
728
593
|
// src/orchestration/archivists/PendingTransactions/archivist.ts
|
|
729
|
-
import { initArchivistSync
|
|
730
|
-
import { startupSpanAsync as
|
|
731
|
-
import { timeBudget as
|
|
732
|
-
import { Mutex as
|
|
594
|
+
import { initArchivistSync } from "@xyo-network/chain-orchestration";
|
|
595
|
+
import { startupSpanAsync as startupSpanAsync2 } from "@xyo-network/chain-utils";
|
|
596
|
+
import { timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
|
|
597
|
+
import { Mutex as Mutex7 } from "async-mutex";
|
|
733
598
|
|
|
734
599
|
// src/orchestration/archivists/PendingTransactions/local.ts
|
|
735
600
|
import { MemoryArchivist, MemoryArchivistConfigSchema } from "@xyo-network/archivist-memory";
|
|
736
|
-
import { Mutex as
|
|
737
|
-
var
|
|
738
|
-
var
|
|
601
|
+
import { Mutex as Mutex5 } from "async-mutex";
|
|
602
|
+
var mutex3 = new Mutex5();
|
|
603
|
+
var singleton3;
|
|
739
604
|
var initLocalPendingTransactionsArchivist = /* @__PURE__ */ __name(async () => {
|
|
740
|
-
return await
|
|
741
|
-
if (
|
|
742
|
-
|
|
605
|
+
return await mutex3.runExclusive(async () => {
|
|
606
|
+
if (singleton3) return singleton3;
|
|
607
|
+
singleton3 = await MemoryArchivist.create({
|
|
743
608
|
account: "random",
|
|
744
609
|
config: {
|
|
745
610
|
schema: MemoryArchivistConfigSchema,
|
|
@@ -747,43 +612,43 @@ var initLocalPendingTransactionsArchivist = /* @__PURE__ */ __name(async () => {
|
|
|
747
612
|
name: "localPendingTransactions"
|
|
748
613
|
}
|
|
749
614
|
});
|
|
750
|
-
return
|
|
615
|
+
return singleton3;
|
|
751
616
|
});
|
|
752
617
|
}, "initLocalPendingTransactionsArchivist");
|
|
753
618
|
|
|
754
619
|
// src/orchestration/archivists/PendingTransactions/remote.ts
|
|
755
|
-
import { assertEx as
|
|
756
|
-
import { initBridge as
|
|
757
|
-
import { getUrl as
|
|
758
|
-
import { Mutex as
|
|
759
|
-
var
|
|
760
|
-
var
|
|
620
|
+
import { assertEx as assertEx5 } from "@xylabs/sdk-js";
|
|
621
|
+
import { initBridge as initBridge2, initBridgedArchivistModule as initBridgedArchivistModule2 } from "@xyo-network/chain-orchestration";
|
|
622
|
+
import { getUrl as getUrl2 } from "@xyo-network/xl1-protocol-sdk";
|
|
623
|
+
import { Mutex as Mutex6 } from "async-mutex";
|
|
624
|
+
var mutex4 = new Mutex6();
|
|
625
|
+
var singleton4;
|
|
761
626
|
var initRemotePendingTransactionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
762
|
-
return await
|
|
763
|
-
if (
|
|
627
|
+
return await mutex4.runExclusive(async () => {
|
|
628
|
+
if (singleton4) return singleton4;
|
|
764
629
|
const { host, port } = config2.mempool.enabled ? config2.mempool : config2.api;
|
|
765
|
-
const nodeUrl =
|
|
766
|
-
const bridge = await
|
|
767
|
-
|
|
630
|
+
const nodeUrl = getUrl2(host, port);
|
|
631
|
+
const bridge = await initBridge2(nodeUrl);
|
|
632
|
+
singleton4 = await initBridgedArchivistModule2({
|
|
768
633
|
bridge,
|
|
769
634
|
moduleName: "XYOChain:Pending:PendingTransactions"
|
|
770
635
|
});
|
|
771
|
-
return
|
|
636
|
+
return assertEx5(singleton4, () => "RemotePendingBundledTransactionsArchivist is undefined");
|
|
772
637
|
});
|
|
773
638
|
}, "initRemotePendingTransactionsArchivist");
|
|
774
639
|
|
|
775
640
|
// src/orchestration/archivists/PendingTransactions/archivist.ts
|
|
776
|
-
var
|
|
777
|
-
var
|
|
641
|
+
var mutex5 = new Mutex7();
|
|
642
|
+
var singleton5;
|
|
778
643
|
var initPendingBundledTransactionsArchivist = /* @__PURE__ */ __name(async ({ config: config2, logger }) => {
|
|
779
|
-
return await
|
|
780
|
-
if (
|
|
781
|
-
return await
|
|
782
|
-
const remote = await
|
|
644
|
+
return await mutex5.runExclusive(async () => {
|
|
645
|
+
if (singleton5) return singleton5;
|
|
646
|
+
return await timeBudget2("initPendingBundledTransactionsArchivist", logger, async () => {
|
|
647
|
+
const remote = await startupSpanAsync2("PendingBundledTransactionsArchivist:initRemote", () => initRemotePendingTransactionsArchivist({
|
|
783
648
|
config: config2,
|
|
784
649
|
logger
|
|
785
650
|
}));
|
|
786
|
-
const local = await
|
|
651
|
+
const local = await startupSpanAsync2("PendingBundledTransactionsArchivist:initLocal", () => initLocalPendingTransactionsArchivist({
|
|
787
652
|
config: config2,
|
|
788
653
|
logger
|
|
789
654
|
}));
|
|
@@ -792,30 +657,30 @@ var initPendingBundledTransactionsArchivist = /* @__PURE__ */ __name(async ({ co
|
|
|
792
657
|
order: "desc"
|
|
793
658
|
});
|
|
794
659
|
await local.insert(start2);
|
|
795
|
-
await
|
|
796
|
-
|
|
660
|
+
await startupSpanAsync2("PendingBundledTransactionsArchivist:initArchivistSync", () => initArchivistSync("PendingBundledTransactionsArchivist", remote, local));
|
|
661
|
+
singleton5 = [
|
|
797
662
|
local,
|
|
798
663
|
remote
|
|
799
664
|
];
|
|
800
|
-
return
|
|
665
|
+
return singleton5;
|
|
801
666
|
}, 2e3, true);
|
|
802
667
|
});
|
|
803
668
|
}, "initPendingBundledTransactionsArchivist");
|
|
804
669
|
|
|
805
670
|
// src/orchestration/archivists/RejectedTransactions/archivist.ts
|
|
806
|
-
import { startupSpanAsync as
|
|
807
|
-
import { timeBudget as
|
|
808
|
-
import { Mutex as
|
|
671
|
+
import { startupSpanAsync as startupSpanAsync3 } from "@xyo-network/chain-utils";
|
|
672
|
+
import { timeBudget as timeBudget3 } from "@xyo-network/xl1-protocol-sdk";
|
|
673
|
+
import { Mutex as Mutex9 } from "async-mutex";
|
|
809
674
|
|
|
810
675
|
// src/orchestration/archivists/RejectedTransactions/local.ts
|
|
811
676
|
import { MemoryArchivist as MemoryArchivist2, MemoryArchivistConfigSchema as MemoryArchivistConfigSchema2 } from "@xyo-network/archivist-memory";
|
|
812
|
-
import { Mutex as
|
|
813
|
-
var
|
|
814
|
-
var
|
|
677
|
+
import { Mutex as Mutex8 } from "async-mutex";
|
|
678
|
+
var mutex6 = new Mutex8();
|
|
679
|
+
var singleton6;
|
|
815
680
|
var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () => {
|
|
816
|
-
return await
|
|
817
|
-
if (
|
|
818
|
-
|
|
681
|
+
return await mutex6.runExclusive(async () => {
|
|
682
|
+
if (singleton6) return singleton6;
|
|
683
|
+
singleton6 = await MemoryArchivist2.create({
|
|
819
684
|
account: "random",
|
|
820
685
|
config: {
|
|
821
686
|
schema: MemoryArchivistConfigSchema2,
|
|
@@ -823,90 +688,90 @@ var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () =>
|
|
|
823
688
|
name: "localRejectedTransactions"
|
|
824
689
|
}
|
|
825
690
|
});
|
|
826
|
-
return
|
|
691
|
+
return singleton6;
|
|
827
692
|
});
|
|
828
693
|
}, "initLocalRejectedTransactionsArchivist");
|
|
829
694
|
|
|
830
695
|
// src/orchestration/archivists/RejectedTransactions/archivist.ts
|
|
831
|
-
var
|
|
832
|
-
var
|
|
696
|
+
var mutex7 = new Mutex9();
|
|
697
|
+
var singleton7;
|
|
833
698
|
async function initRejectedTransactionsArchivist(params) {
|
|
834
|
-
return await
|
|
835
|
-
if (
|
|
836
|
-
return await
|
|
837
|
-
const local = await
|
|
838
|
-
|
|
839
|
-
return
|
|
699
|
+
return await mutex7.runExclusive(async () => {
|
|
700
|
+
if (singleton7) return singleton7;
|
|
701
|
+
return await timeBudget3("initRejectedTransactionsArchivist", params.logger, async () => {
|
|
702
|
+
const local = await startupSpanAsync3("RejectedTransactionsArchivist:initLocal", () => initLocalRejectedTransactionsArchivist(params));
|
|
703
|
+
singleton7 = local;
|
|
704
|
+
return singleton7;
|
|
840
705
|
}, 2e3, true);
|
|
841
706
|
});
|
|
842
707
|
}
|
|
843
708
|
__name(initRejectedTransactionsArchivist, "initRejectedTransactionsArchivist");
|
|
844
709
|
|
|
845
710
|
// src/orchestration/archivists/StakeIntentState/archivist.ts
|
|
846
|
-
import { assertEx as
|
|
847
|
-
import { startupSpanAsync as
|
|
848
|
-
import { timeBudget as
|
|
849
|
-
import { Mutex as
|
|
711
|
+
import { assertEx as assertEx7 } from "@xylabs/sdk-js";
|
|
712
|
+
import { startupSpanAsync as startupSpanAsync4 } from "@xyo-network/chain-utils";
|
|
713
|
+
import { timeBudget as timeBudget4 } from "@xyo-network/xl1-protocol-sdk";
|
|
714
|
+
import { Mutex as Mutex11 } from "async-mutex";
|
|
850
715
|
|
|
851
716
|
// src/orchestration/archivists/StakeIntentState/local.ts
|
|
852
|
-
import { assertEx as
|
|
853
|
-
import { Mutex as
|
|
854
|
-
var
|
|
855
|
-
var
|
|
717
|
+
import { assertEx as assertEx6 } from "@xylabs/sdk-js";
|
|
718
|
+
import { Mutex as Mutex10 } from "async-mutex";
|
|
719
|
+
var mutex8 = new Mutex10();
|
|
720
|
+
var singleton8;
|
|
856
721
|
var initLocalStakeIntentStateArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
857
|
-
return await
|
|
858
|
-
if (
|
|
722
|
+
return await mutex8.runExclusive(async () => {
|
|
723
|
+
if (singleton8) return singleton8;
|
|
859
724
|
const { root } = config2.storage;
|
|
860
|
-
|
|
861
|
-
return
|
|
725
|
+
singleton8 = await getLocalPersistentArchivist("local-stake-intent-state", "stakeIntent", "state", root);
|
|
726
|
+
return assertEx6(singleton8, () => new Error("Failed to initialize stake intent state archivist"));
|
|
862
727
|
});
|
|
863
728
|
}, "initLocalStakeIntentStateArchivist");
|
|
864
729
|
|
|
865
730
|
// src/orchestration/archivists/StakeIntentState/archivist.ts
|
|
866
|
-
var
|
|
867
|
-
var
|
|
731
|
+
var mutex9 = new Mutex11();
|
|
732
|
+
var singleton9;
|
|
868
733
|
var initStakeIntentStateArchivist = /* @__PURE__ */ __name(async (params) => {
|
|
869
|
-
return await
|
|
870
|
-
if (
|
|
871
|
-
return await
|
|
872
|
-
const local = await
|
|
873
|
-
|
|
874
|
-
return
|
|
734
|
+
return await mutex9.runExclusive(async () => {
|
|
735
|
+
if (singleton9) return singleton9;
|
|
736
|
+
return await timeBudget4("initStakeIntentStateArchivist", params.logger, async () => {
|
|
737
|
+
const local = await startupSpanAsync4("StakeIntentStateArchivist:initLocal", () => initLocalStakeIntentStateArchivist(params));
|
|
738
|
+
singleton9 = local;
|
|
739
|
+
return assertEx7(singleton9, () => "StakeIntentStateArchivist is undefined");
|
|
875
740
|
}, 2e3, true);
|
|
876
741
|
});
|
|
877
742
|
}, "initStakeIntentStateArchivist");
|
|
878
743
|
|
|
879
744
|
// src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts
|
|
880
745
|
import { isDefined as isDefined4 } from "@xylabs/sdk-js";
|
|
881
|
-
import { startupSpanAsync as
|
|
882
|
-
import { timeBudget as
|
|
883
|
-
import { Mutex as
|
|
746
|
+
import { startupSpanAsync as startupSpanAsync5 } from "@xyo-network/chain-utils";
|
|
747
|
+
import { timeBudget as timeBudget5 } from "@xyo-network/xl1-protocol-sdk";
|
|
748
|
+
import { Mutex as Mutex13 } from "async-mutex";
|
|
884
749
|
|
|
885
750
|
// src/orchestration/map/BalanceSummary/initLocalBalanceSummaryMap.ts
|
|
886
751
|
import { isDefined as isDefined3 } from "@xylabs/sdk-js";
|
|
887
752
|
import { getLocalPersistentMap } from "@xyo-network/chain-protocol";
|
|
888
|
-
import { Mutex as
|
|
889
|
-
var
|
|
890
|
-
var
|
|
753
|
+
import { Mutex as Mutex12 } from "async-mutex";
|
|
754
|
+
var mutex10 = new Mutex12();
|
|
755
|
+
var singleton10;
|
|
891
756
|
var initLocalBalanceSummaryMap = /* @__PURE__ */ __name(async (params) => {
|
|
892
|
-
return await
|
|
893
|
-
if (isDefined3(
|
|
757
|
+
return await mutex10.runExclusive(async () => {
|
|
758
|
+
if (isDefined3(singleton10)) return singleton10;
|
|
894
759
|
const { root } = params.config.storage;
|
|
895
|
-
|
|
896
|
-
return
|
|
760
|
+
singleton10 = await getLocalPersistentMap("balance", "summary", root);
|
|
761
|
+
return singleton10;
|
|
897
762
|
});
|
|
898
763
|
}, "initLocalBalanceSummaryMap");
|
|
899
764
|
|
|
900
765
|
// src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts
|
|
901
|
-
var
|
|
902
|
-
var
|
|
766
|
+
var mutex11 = new Mutex13();
|
|
767
|
+
var singleton11;
|
|
903
768
|
async function initBalanceSummaryMap(params) {
|
|
904
|
-
return await
|
|
905
|
-
if (isDefined4(
|
|
906
|
-
return await
|
|
907
|
-
const local = await
|
|
908
|
-
|
|
909
|
-
return
|
|
769
|
+
return await mutex11.runExclusive(async () => {
|
|
770
|
+
if (isDefined4(singleton11)) return singleton11;
|
|
771
|
+
return await timeBudget5("initBalanceSummaryMap", params.logger, async () => {
|
|
772
|
+
const local = await startupSpanAsync5("BalanceSummaryMap:initLocal", () => initLocalBalanceSummaryMap(params));
|
|
773
|
+
singleton11 = local;
|
|
774
|
+
return singleton11;
|
|
910
775
|
}, 2e3, true);
|
|
911
776
|
});
|
|
912
777
|
}
|
|
@@ -914,77 +779,103 @@ __name(initBalanceSummaryMap, "initBalanceSummaryMap");
|
|
|
914
779
|
|
|
915
780
|
// src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
|
|
916
781
|
import { isDefined as isDefined6 } from "@xylabs/sdk-js";
|
|
917
|
-
import { startupSpanAsync as
|
|
918
|
-
import { timeBudget as
|
|
919
|
-
import { Mutex as
|
|
782
|
+
import { startupSpanAsync as startupSpanAsync6 } from "@xyo-network/chain-utils";
|
|
783
|
+
import { timeBudget as timeBudget6 } from "@xyo-network/xl1-protocol-sdk";
|
|
784
|
+
import { Mutex as Mutex15 } from "async-mutex";
|
|
920
785
|
|
|
921
786
|
// src/orchestration/map/BalanceSummary/initLocalTransferSummaryMap.ts
|
|
922
787
|
import { isDefined as isDefined5 } from "@xylabs/sdk-js";
|
|
923
788
|
import { getLocalPersistentMap as getLocalPersistentMap2 } from "@xyo-network/chain-protocol";
|
|
924
|
-
import { Mutex as
|
|
925
|
-
var
|
|
926
|
-
var
|
|
789
|
+
import { Mutex as Mutex14 } from "async-mutex";
|
|
790
|
+
var mutex12 = new Mutex14();
|
|
791
|
+
var singleton12;
|
|
927
792
|
var initLocalTransferSummaryMap = /* @__PURE__ */ __name(async (params) => {
|
|
928
|
-
return await
|
|
929
|
-
if (isDefined5(
|
|
793
|
+
return await mutex12.runExclusive(async () => {
|
|
794
|
+
if (isDefined5(singleton12)) return singleton12;
|
|
930
795
|
const { root } = params.config.storage;
|
|
931
|
-
|
|
932
|
-
return
|
|
796
|
+
singleton12 = await getLocalPersistentMap2("transfer", "summary", root);
|
|
797
|
+
return singleton12;
|
|
933
798
|
});
|
|
934
799
|
}, "initLocalTransferSummaryMap");
|
|
935
800
|
|
|
936
801
|
// src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
|
|
937
|
-
var
|
|
938
|
-
var
|
|
802
|
+
var mutex13 = new Mutex15();
|
|
803
|
+
var singleton13;
|
|
939
804
|
async function initTransferSummaryMap(params) {
|
|
940
|
-
return await
|
|
941
|
-
if (isDefined6(
|
|
942
|
-
return await
|
|
943
|
-
const local = await
|
|
944
|
-
|
|
945
|
-
return
|
|
805
|
+
return await mutex13.runExclusive(async () => {
|
|
806
|
+
if (isDefined6(singleton13)) return singleton13;
|
|
807
|
+
return await timeBudget6("initTransferSummaryMap:Init", params.logger, async () => {
|
|
808
|
+
const local = await startupSpanAsync6("TransferSummaryMap:initLocal", () => initLocalTransferSummaryMap(params));
|
|
809
|
+
singleton13 = local;
|
|
810
|
+
return singleton13;
|
|
946
811
|
}, 2e3, true);
|
|
947
812
|
});
|
|
948
813
|
}
|
|
949
814
|
__name(initTransferSummaryMap, "initTransferSummaryMap");
|
|
950
815
|
|
|
951
816
|
// src/orchestration/services/implementation/accountBalance.ts
|
|
952
|
-
import {
|
|
953
|
-
import {
|
|
817
|
+
import { isDefined as isDefined7 } from "@xylabs/sdk-js";
|
|
818
|
+
import { AccountBalanceViewerRpcSchemas, HttpRpcTransport, JsonRpcAccountBalanceViewer } from "@xyo-network/xl1-rpc";
|
|
954
819
|
var balanceServiceSingleton;
|
|
955
|
-
var initAccountBalanceService = /* @__PURE__ */ __name(
|
|
820
|
+
var initAccountBalanceService = /* @__PURE__ */ __name((params) => {
|
|
956
821
|
const { config: config2, logger } = params;
|
|
957
822
|
if (balanceServiceSingleton) return balanceServiceSingleton;
|
|
958
|
-
|
|
959
|
-
|
|
960
|
-
|
|
961
|
-
|
|
962
|
-
|
|
823
|
+
const endpoint = config2.services?.accountBalanceViewerEndpoint ?? config2.services?.apiEndpoint;
|
|
824
|
+
if (isDefined7(endpoint)) {
|
|
825
|
+
const transport = new HttpRpcTransport(endpoint, {
|
|
826
|
+
...AccountBalanceViewerRpcSchemas
|
|
827
|
+
});
|
|
828
|
+
const viewer = new JsonRpcAccountBalanceViewer(transport);
|
|
829
|
+
logger?.log("Using AccountBalanceViewer RPC service at", endpoint);
|
|
830
|
+
return viewer;
|
|
831
|
+
} else {
|
|
832
|
+
throw new Error("No AccountBalanceViewer endpoint configured");
|
|
833
|
+
}
|
|
963
834
|
}, "initAccountBalanceService");
|
|
964
835
|
|
|
836
|
+
// src/orchestration/services/implementation/blockViewer.ts
|
|
837
|
+
import { isDefined as isDefined8 } from "@xylabs/sdk-js";
|
|
838
|
+
import { BlockViewerRpcSchemas, HttpRpcTransport as HttpRpcTransport2, JsonRpcBlockViewer } from "@xyo-network/xl1-rpc";
|
|
839
|
+
var blockViewerSingleton;
|
|
840
|
+
var initBlockViewer = /* @__PURE__ */ __name((params) => {
|
|
841
|
+
const { config: config2, logger } = params;
|
|
842
|
+
if (blockViewerSingleton) return blockViewerSingleton;
|
|
843
|
+
const endpoint = config2.services?.apiEndpoint;
|
|
844
|
+
if (isDefined8(endpoint)) {
|
|
845
|
+
const transport = new HttpRpcTransport2(endpoint, {
|
|
846
|
+
...BlockViewerRpcSchemas
|
|
847
|
+
});
|
|
848
|
+
const viewer = new JsonRpcBlockViewer(transport);
|
|
849
|
+
logger?.log("Using BlockViewer RPC service at", endpoint);
|
|
850
|
+
return viewer;
|
|
851
|
+
} else {
|
|
852
|
+
throw new Error("No BlockViewer endpoint configured");
|
|
853
|
+
}
|
|
854
|
+
}, "initBlockViewer");
|
|
855
|
+
|
|
965
856
|
// src/orchestration/services/implementation/chain/index.ts
|
|
966
|
-
import { assertEx as
|
|
857
|
+
import { assertEx as assertEx13 } from "@xylabs/sdk-js";
|
|
967
858
|
import { MemoryChainService } from "@xyo-network/chain-services";
|
|
968
859
|
|
|
969
860
|
// src/orchestration/services/implementation/chain/evm.ts
|
|
970
|
-
import { asAddress, assertEx as
|
|
861
|
+
import { asAddress, assertEx as assertEx12, isDefined as isDefined12, ZERO_ADDRESS } from "@xylabs/sdk-js";
|
|
971
862
|
import { EvmChainService } from "@xyo-network/chain-services";
|
|
972
863
|
import { Wallet } from "ethers/wallet";
|
|
973
864
|
|
|
974
865
|
// src/orchestration/services/implementation/evm/initEvmProvider.ts
|
|
975
|
-
import { assertEx as
|
|
866
|
+
import { assertEx as assertEx11 } from "@xylabs/sdk-js";
|
|
976
867
|
|
|
977
868
|
// src/orchestration/services/implementation/evm/initInfuraProvider.ts
|
|
978
|
-
import { assertEx as
|
|
869
|
+
import { assertEx as assertEx9, isDefined as isDefined10 } from "@xylabs/sdk-js";
|
|
979
870
|
import { InfuraProvider } from "ethers/providers";
|
|
980
871
|
|
|
981
872
|
// src/orchestration/services/implementation/evm/initChainId.ts
|
|
982
|
-
import { assertEx as
|
|
873
|
+
import { assertEx as assertEx8, hexFrom, isDefined as isDefined9, isHex } from "@xylabs/sdk-js";
|
|
983
874
|
var canUseChainId = /* @__PURE__ */ __name((config2) => {
|
|
984
|
-
return
|
|
875
|
+
return isDefined9(config2.evm.chainId);
|
|
985
876
|
}, "canUseChainId");
|
|
986
877
|
var getChainId = /* @__PURE__ */ __name((config2) => {
|
|
987
|
-
const chainId =
|
|
878
|
+
const chainId = assertEx8(config2.evm.chainId, () => "Missing config.evm.chainId");
|
|
988
879
|
if (isHex(chainId, {
|
|
989
880
|
prefix: true
|
|
990
881
|
})) {
|
|
@@ -1006,11 +897,11 @@ var initInfuraProvider = /* @__PURE__ */ __name((config2) => {
|
|
|
1006
897
|
return instance;
|
|
1007
898
|
}, "initInfuraProvider");
|
|
1008
899
|
var canUseInfuraProvider = /* @__PURE__ */ __name((config2) => {
|
|
1009
|
-
return canUseChainId(config2) &&
|
|
900
|
+
return canUseChainId(config2) && isDefined10(config2.evm?.infura?.projectId) && isDefined10(config2.evm?.infura?.projectSecret);
|
|
1010
901
|
}, "canUseInfuraProvider");
|
|
1011
902
|
var getInfuraProviderConfig = /* @__PURE__ */ __name((config2) => {
|
|
1012
|
-
const projectId =
|
|
1013
|
-
const projectSecret =
|
|
903
|
+
const projectId = assertEx9(config2.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
|
|
904
|
+
const projectSecret = assertEx9(config2.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
|
|
1014
905
|
return [
|
|
1015
906
|
getChainId(config2),
|
|
1016
907
|
projectId,
|
|
@@ -1019,17 +910,17 @@ var getInfuraProviderConfig = /* @__PURE__ */ __name((config2) => {
|
|
|
1019
910
|
}, "getInfuraProviderConfig");
|
|
1020
911
|
|
|
1021
912
|
// src/orchestration/services/implementation/evm/initJsonRpcProvider.ts
|
|
1022
|
-
import { assertEx as
|
|
913
|
+
import { assertEx as assertEx10, isDefined as isDefined11 } from "@xylabs/sdk-js";
|
|
1023
914
|
import { JsonRpcProvider } from "ethers/providers";
|
|
1024
915
|
var initJsonRpcProvider = /* @__PURE__ */ __name((config2) => {
|
|
1025
916
|
const providerConfig = getJsonRpcProviderConfig(config2);
|
|
1026
917
|
return Promise.resolve(new JsonRpcProvider(...providerConfig));
|
|
1027
918
|
}, "initJsonRpcProvider");
|
|
1028
919
|
var canUseJsonRpcProvider = /* @__PURE__ */ __name((config2) => {
|
|
1029
|
-
return canUseChainId(config2) &&
|
|
920
|
+
return canUseChainId(config2) && isDefined11(config2.evm.jsonRpc?.url);
|
|
1030
921
|
}, "canUseJsonRpcProvider");
|
|
1031
922
|
var getJsonRpcProviderConfig = /* @__PURE__ */ __name((config2) => {
|
|
1032
|
-
const jsonRpcUrl =
|
|
923
|
+
const jsonRpcUrl = assertEx10(config2.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
|
|
1033
924
|
return [
|
|
1034
925
|
jsonRpcUrl,
|
|
1035
926
|
getChainId(config2)
|
|
@@ -1045,7 +936,7 @@ var initEvmProvider = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
|
1045
936
|
} else if (canUseJsonRpcProvider(config2)) {
|
|
1046
937
|
provider = initJsonRpcProvider(config2);
|
|
1047
938
|
}
|
|
1048
|
-
return
|
|
939
|
+
return assertEx11(await provider, () => "No provider available");
|
|
1049
940
|
}, "initEvmProvider");
|
|
1050
941
|
var canUseEvmProvider = /* @__PURE__ */ __name(({ config: config2 }) => {
|
|
1051
942
|
return canUseInfuraProvider(config2) || canUseJsonRpcProvider(config2);
|
|
@@ -1055,18 +946,18 @@ var canUseEvmProvider = /* @__PURE__ */ __name(({ config: config2 }) => {
|
|
|
1055
946
|
var chainStakeServiceSingleton;
|
|
1056
947
|
var canUseEvmContractChainService = /* @__PURE__ */ __name((config2) => {
|
|
1057
948
|
const { id } = config2.chain;
|
|
1058
|
-
return
|
|
949
|
+
return isDefined12(id) && id !== ZERO_ADDRESS && canUseEvmProvider({
|
|
1059
950
|
config: config2
|
|
1060
951
|
});
|
|
1061
952
|
}, "canUseEvmContractChainService");
|
|
1062
953
|
var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, config: config2, traceProvider, meterProvider, logger }) => {
|
|
1063
954
|
if (chainStakeServiceSingleton) return chainStakeServiceSingleton;
|
|
1064
|
-
const emvStakingContractAddress =
|
|
1065
|
-
const id =
|
|
1066
|
-
const provider2 =
|
|
955
|
+
const emvStakingContractAddress = assertEx12(config2.chain.id, () => "config.chain.id is required");
|
|
956
|
+
const id = assertEx12(asAddress(emvStakingContractAddress), () => "config.chain.id is not a valid address");
|
|
957
|
+
const provider2 = assertEx12(await initEvmProvider({
|
|
1067
958
|
config: config2
|
|
1068
959
|
}));
|
|
1069
|
-
const privateKey =
|
|
960
|
+
const privateKey = assertEx12(account.private?.hex, () => "Account does not have a private key");
|
|
1070
961
|
const runner = new Wallet(privateKey, provider2);
|
|
1071
962
|
chainStakeServiceSingleton = EvmChainService.create({
|
|
1072
963
|
id,
|
|
@@ -1097,7 +988,7 @@ var initMemoryChainService = /* @__PURE__ */ __name(async ({ config: config2 })
|
|
|
1097
988
|
config: config2,
|
|
1098
989
|
name: "MemoryChainService"
|
|
1099
990
|
});
|
|
1100
|
-
|
|
991
|
+
assertEx13(await result.start(), () => "Failed to start MemoryChainService");
|
|
1101
992
|
return result;
|
|
1102
993
|
}, "initMemoryChainService");
|
|
1103
994
|
var init = /* @__PURE__ */ __name(async (params) => {
|
|
@@ -1110,273 +1001,50 @@ var init = /* @__PURE__ */ __name(async (params) => {
|
|
|
1110
1001
|
return chainStakeServiceSingleton2;
|
|
1111
1002
|
}, "init");
|
|
1112
1003
|
|
|
1113
|
-
// src/orchestration/services/implementation/head/head.ts
|
|
1114
|
-
import { assertEx as assertEx16, isDefined as isDefined12 } from "@xylabs/sdk-js";
|
|
1115
|
-
import { findMostRecentBlock as findMostRecentBlock2 } from "@xyo-network/chain-protocol";
|
|
1116
|
-
|
|
1117
|
-
// src/orchestration/services/implementation/head/createBootstrapHead.ts
|
|
1118
|
-
import { buildNextBlock, createDeclarationIntent as createDeclarationIntent2, createGenesisBlock } from "@xyo-network/chain-protocol";
|
|
1119
|
-
var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainService) => {
|
|
1120
|
-
const chainId = chainService.chainId;
|
|
1121
|
-
const chain = [];
|
|
1122
|
-
const genesisBlock = await createGenesisBlock(account, chainId, 10000000n, account.address);
|
|
1123
|
-
chain.push(genesisBlock);
|
|
1124
|
-
const producerDeclarationPayload = createDeclarationIntent2(account.address, "producer", genesisBlock[0].block, genesisBlock[0].block + 1e4);
|
|
1125
|
-
const producerDeclarationBlock = await buildNextBlock(genesisBlock[0], [], [
|
|
1126
|
-
producerDeclarationPayload
|
|
1127
|
-
], [
|
|
1128
|
-
account
|
|
1129
|
-
]);
|
|
1130
|
-
chain.push(producerDeclarationBlock);
|
|
1131
|
-
return chain;
|
|
1132
|
-
}, "createBootstrapHead");
|
|
1133
|
-
|
|
1134
|
-
// src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
|
|
1135
|
-
import { buildNextBlock as buildNextBlock2 } from "@xyo-network/chain-protocol";
|
|
1136
|
-
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
1137
|
-
import { BridgeDestinationObservationSchema } from "@xyo-network/xl1-protocol";
|
|
1138
|
-
|
|
1139
|
-
// src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
|
|
1140
|
-
import { toHex as toHex4 } from "@xylabs/sdk-js";
|
|
1141
|
-
|
|
1142
|
-
// src/orchestration/services/implementation/head/createForkedHead/config/getForkDetails.ts
|
|
1143
|
-
import { toHex as toHex3 } from "@xylabs/sdk-js";
|
|
1144
|
-
import { AttoXL1ConvertFactor } from "@xyo-network/xl1-protocol";
|
|
1145
|
-
var getForkBlockReward = /* @__PURE__ */ __name(() => {
|
|
1146
|
-
return 18000000000n * AttoXL1ConvertFactor.xl1;
|
|
1147
|
-
}, "getForkBlockReward");
|
|
1148
|
-
var getForkBlockRewardHex = /* @__PURE__ */ __name(() => {
|
|
1149
|
-
return toHex3(getForkBlockReward());
|
|
1150
|
-
}, "getForkBlockRewardHex");
|
|
1151
|
-
|
|
1152
|
-
// src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
|
|
1153
|
-
var ethChainId = toHex4("0x1");
|
|
1154
|
-
var bridgeableTokenContract = toHex4("0xf72aE3E0DA743033AbD7A407557D684c1aE66aed");
|
|
1155
|
-
var bridgeDestAddress = toHex4("0x0e65b65B10C791942665030402c35023d88B14dA");
|
|
1156
|
-
var destConfirmation = toHex4("0x950861b10523b52cdbb4a9ee52ed26601db555d2652bfec21c709e5e70d5b7d3");
|
|
1157
|
-
var getBridgeDestChainId = /* @__PURE__ */ __name(() => ethChainId, "getBridgeDestChainId");
|
|
1158
|
-
var getBridgeDestToken = /* @__PURE__ */ __name(() => bridgeableTokenContract, "getBridgeDestToken");
|
|
1159
|
-
var getBridgeDestAddress = /* @__PURE__ */ __name(() => bridgeDestAddress, "getBridgeDestAddress");
|
|
1160
|
-
var getBridgeDestAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeDestAmount");
|
|
1161
|
-
var getBridgeDestConfirmation = /* @__PURE__ */ __name(() => destConfirmation, "getBridgeDestConfirmation");
|
|
1162
|
-
var getBridgeDestinationDetails = /* @__PURE__ */ __name(() => {
|
|
1163
|
-
return {
|
|
1164
|
-
dest: getBridgeDestChainId(),
|
|
1165
|
-
destToken: getBridgeDestToken(),
|
|
1166
|
-
destAddress: getBridgeDestAddress(),
|
|
1167
|
-
destAmount: getBridgeDestAmount()
|
|
1168
|
-
};
|
|
1169
|
-
}, "getBridgeDestinationDetails");
|
|
1170
|
-
|
|
1171
|
-
// src/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts
|
|
1172
|
-
var getBridgeSrcChainId = /* @__PURE__ */ __name((chainService) => chainService.chainId, "getBridgeSrcChainId");
|
|
1173
|
-
var getBridgeSrcAddress = /* @__PURE__ */ __name((account) => account.address, "getBridgeSrcAddress");
|
|
1174
|
-
var getBridgeSrcToken = /* @__PURE__ */ __name((chainService) => chainService.chainId, "getBridgeSrcToken");
|
|
1175
|
-
var getBridgeSrcAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeSrcAmount");
|
|
1176
|
-
var getBridgeSourceDetails = /* @__PURE__ */ __name((account, chainService) => {
|
|
1177
|
-
return {
|
|
1178
|
-
src: getBridgeSrcChainId(chainService),
|
|
1179
|
-
srcAddress: getBridgeSrcAddress(account),
|
|
1180
|
-
srcToken: getBridgeSrcToken(chainService),
|
|
1181
|
-
srcAmount: getBridgeSrcAmount()
|
|
1182
|
-
};
|
|
1183
|
-
}, "getBridgeSourceDetails");
|
|
1184
|
-
|
|
1185
|
-
// src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
|
|
1186
|
-
var getBridgeDestinationObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
1187
|
-
const bridgeDestinationObservationFields = {
|
|
1188
|
-
...getBridgeSourceDetails(account, chainService),
|
|
1189
|
-
...getBridgeDestinationDetails(),
|
|
1190
|
-
destConfirmation: getBridgeDestConfirmation()
|
|
1191
|
-
};
|
|
1192
|
-
const bridgeDestinationObservation = new PayloadBuilder3({
|
|
1193
|
-
schema: BridgeDestinationObservationSchema
|
|
1194
|
-
}).fields(bridgeDestinationObservationFields).build();
|
|
1195
|
-
return await buildNextBlock2(previousBlock[0], [], [
|
|
1196
|
-
bridgeDestinationObservation
|
|
1197
|
-
], [
|
|
1198
|
-
account
|
|
1199
|
-
]);
|
|
1200
|
-
}, "getBridgeDestinationObservation");
|
|
1201
|
-
|
|
1202
|
-
// src/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.ts
|
|
1203
|
-
import { buildNextBlock as buildNextBlock3, createTransferPayload } from "@xyo-network/chain-protocol";
|
|
1204
|
-
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
1205
|
-
import { BridgeIntentSchema, XYO_BRIDGE_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
1206
|
-
var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
1207
|
-
const transferPayload = createTransferPayload(account.address, {
|
|
1208
|
-
[XYO_BRIDGE_ADDRESS]: getForkBlockReward()
|
|
1209
|
-
});
|
|
1210
|
-
const nonce = `${Date.now()}`;
|
|
1211
|
-
const bridgeIntentFields = {
|
|
1212
|
-
...getBridgeSourceDetails(account, chainService),
|
|
1213
|
-
...getBridgeDestinationDetails(),
|
|
1214
|
-
nonce
|
|
1215
|
-
};
|
|
1216
|
-
const bridgeIntent = new PayloadBuilder4({
|
|
1217
|
-
schema: BridgeIntentSchema
|
|
1218
|
-
}).fields(bridgeIntentFields).build();
|
|
1219
|
-
return await buildNextBlock3(previousBlock[0], [], [
|
|
1220
|
-
bridgeIntent,
|
|
1221
|
-
transferPayload
|
|
1222
|
-
], [
|
|
1223
|
-
account
|
|
1224
|
-
]);
|
|
1225
|
-
}, "getBridgeIntent");
|
|
1226
|
-
|
|
1227
|
-
// src/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.ts
|
|
1228
|
-
import { buildNextBlock as buildNextBlock4 } from "@xyo-network/chain-protocol";
|
|
1229
|
-
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
1230
|
-
import { BridgeSourceObservationSchema } from "@xyo-network/xl1-protocol";
|
|
1231
|
-
var getBridgeSourceObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
1232
|
-
const srcTxHash = previousBlock[0]._hash;
|
|
1233
|
-
const bridgeSourceObservationFields = {
|
|
1234
|
-
...getBridgeSourceDetails(account, chainService),
|
|
1235
|
-
...getBridgeDestinationDetails(),
|
|
1236
|
-
// Observation
|
|
1237
|
-
srcConfirmation: srcTxHash
|
|
1238
|
-
};
|
|
1239
|
-
const bridgeSourceObservation = new PayloadBuilder5({
|
|
1240
|
-
schema: BridgeSourceObservationSchema
|
|
1241
|
-
}).fields(bridgeSourceObservationFields).build();
|
|
1242
|
-
return await buildNextBlock4(previousBlock[0], [], [
|
|
1243
|
-
bridgeSourceObservation
|
|
1244
|
-
], [
|
|
1245
|
-
account
|
|
1246
|
-
]);
|
|
1247
|
-
}, "getBridgeSourceObservation");
|
|
1248
|
-
|
|
1249
|
-
// src/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.ts
|
|
1250
|
-
import { buildBlock } from "@xyo-network/chain-protocol";
|
|
1251
|
-
import { AttoXL1, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
1252
|
-
var getFirstBlockForNewChain = /* @__PURE__ */ __name(async (forkBlock, account, chainService) => {
|
|
1253
|
-
const { _hash: previousBlockHash, block: previousBlockNumber, step_hashes: previousStepHashes = [], protocol } = forkBlock;
|
|
1254
|
-
const chainId = chainService.chainId;
|
|
1255
|
-
const options = {
|
|
1256
|
-
blockPayloads: [],
|
|
1257
|
-
chainId,
|
|
1258
|
-
previousBlockHash,
|
|
1259
|
-
previousBlockNumber,
|
|
1260
|
-
previousStepHashes,
|
|
1261
|
-
signers: [
|
|
1262
|
-
account
|
|
1263
|
-
],
|
|
1264
|
-
txs: [],
|
|
1265
|
-
protocol,
|
|
1266
|
-
chainStepRewardAddress: XYO_STEP_REWARD_ADDRESS,
|
|
1267
|
-
stepRewardPoolBalance: AttoXL1(0n)
|
|
1268
|
-
};
|
|
1269
|
-
return await buildBlock(options);
|
|
1270
|
-
}, "getFirstBlockForNewChain");
|
|
1271
|
-
|
|
1272
|
-
// src/orchestration/services/implementation/head/createForkedHead/createForkedHead.ts
|
|
1273
|
-
var createForkedHead = /* @__PURE__ */ __name(async (forkFromBlock, account, chainService) => {
|
|
1274
|
-
const chain = [];
|
|
1275
|
-
const firstBlockForNewChain = await getFirstBlockForNewChain(forkFromBlock, account, chainService);
|
|
1276
|
-
chain.push(firstBlockForNewChain);
|
|
1277
|
-
const bridgeIntent = await getBridgeIntent(firstBlockForNewChain, account, chainService);
|
|
1278
|
-
chain.push(bridgeIntent);
|
|
1279
|
-
const bridgeSourceObservation = await getBridgeSourceObservation(bridgeIntent, account, chainService);
|
|
1280
|
-
chain.push(bridgeSourceObservation);
|
|
1281
|
-
const bridgeDestinationObservation = await getBridgeDestinationObservation(bridgeSourceObservation, account, chainService);
|
|
1282
|
-
chain.push(bridgeDestinationObservation);
|
|
1283
|
-
return chain;
|
|
1284
|
-
}, "createForkedHead");
|
|
1285
|
-
|
|
1286
|
-
// src/orchestration/services/implementation/head/getForkFromBlock.ts
|
|
1287
|
-
import { asHash, hexFromBigInt, isDefined as isDefined11 } from "@xylabs/sdk-js";
|
|
1288
|
-
import { isSignedBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
|
|
1289
|
-
var getForkFromBlock = /* @__PURE__ */ __name(async (head, chainService, chainArchivist) => {
|
|
1290
|
-
if (head.chain !== chainService.chainId) {
|
|
1291
|
-
const forkedAtBigInt = await chainService.forkedAtHash();
|
|
1292
|
-
const forkedAtHex = hexFromBigInt(forkedAtBigInt);
|
|
1293
|
-
const forkedAtHash = asHash(forkedAtHex);
|
|
1294
|
-
if (isDefined11(forkedAtHash)) {
|
|
1295
|
-
const [forkedAtBlock] = await chainArchivist.get([
|
|
1296
|
-
forkedAtHash
|
|
1297
|
-
]);
|
|
1298
|
-
const forkedChainId = await chainService.forkedChainId();
|
|
1299
|
-
const forkedAtBlockNumber = Number(await chainService.forkedAtBlockNumber());
|
|
1300
|
-
if (isSignedBlockBoundWitnessWithHashMeta(forkedAtBlock) && forkedAtBlock.chain === forkedChainId && forkedAtBlock.block === forkedAtBlockNumber) {
|
|
1301
|
-
return forkedAtBlock;
|
|
1302
|
-
}
|
|
1303
|
-
}
|
|
1304
|
-
}
|
|
1305
|
-
}, "getForkFromBlock");
|
|
1306
|
-
|
|
1307
|
-
// src/orchestration/services/implementation/head/submitNewChain.ts
|
|
1308
|
-
import { delay as delay2 } from "@xylabs/sdk-js";
|
|
1309
|
-
import { flattenHydratedBlock as flattenHydratedBlock2 } from "@xyo-network/xl1-protocol-sdk";
|
|
1310
|
-
var submitNewChain = /* @__PURE__ */ __name(async (chain, chainArchivist, chainSubmissionsArchivistWrite) => {
|
|
1311
|
-
for (const block of chain) {
|
|
1312
|
-
const [bw] = block;
|
|
1313
|
-
await chainSubmissionsArchivistWrite.insert(flattenHydratedBlock2(block));
|
|
1314
|
-
while (true) {
|
|
1315
|
-
const result = await chainArchivist.get([
|
|
1316
|
-
bw._hash
|
|
1317
|
-
]);
|
|
1318
|
-
if (result.length > 0) break;
|
|
1319
|
-
await delay2(1e3);
|
|
1320
|
-
}
|
|
1321
|
-
}
|
|
1322
|
-
}, "submitNewChain");
|
|
1323
|
-
|
|
1324
|
-
// src/orchestration/services/implementation/head/head.ts
|
|
1325
|
-
var headSingleton;
|
|
1326
|
-
var initHead = /* @__PURE__ */ __name(async (params) => {
|
|
1327
|
-
const { account, chainArchivist, chainSubmissionsArchivistWrite, chainService } = params;
|
|
1328
|
-
if (headSingleton) return headSingleton;
|
|
1329
|
-
let head = await findMostRecentBlock2(chainArchivist);
|
|
1330
|
-
if (head) {
|
|
1331
|
-
const forkFromBlock = await getForkFromBlock(head, chainService, chainArchivist);
|
|
1332
|
-
if (isDefined12(forkFromBlock)) {
|
|
1333
|
-
const chain = await createForkedHead(forkFromBlock, account, chainService);
|
|
1334
|
-
await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
|
|
1335
|
-
const newBlock = assertEx16(chain.at(-1), () => new Error("Failed to get new head after forking"));
|
|
1336
|
-
head = newBlock[0];
|
|
1337
|
-
}
|
|
1338
|
-
} else {
|
|
1339
|
-
const chain = await createBootstrapHead(account, chainService);
|
|
1340
|
-
await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
|
|
1341
|
-
const newBlock = assertEx16(chain.at(-1), () => new Error("Failed to get new head after genesis"));
|
|
1342
|
-
head = newBlock[0];
|
|
1343
|
-
}
|
|
1344
|
-
headSingleton = head;
|
|
1345
|
-
return headSingleton;
|
|
1346
|
-
}, "initHead");
|
|
1347
|
-
|
|
1348
1004
|
// src/orchestration/services/implementation/pendingTransactions.ts
|
|
1005
|
+
import { isDefined as isDefined13 } from "@xylabs/sdk-js";
|
|
1349
1006
|
import { BasePendingTransactionsService } from "@xyo-network/chain-services";
|
|
1350
|
-
import { timeBudget as
|
|
1007
|
+
import { timeBudget as timeBudget7 } from "@xyo-network/xl1-protocol-sdk";
|
|
1008
|
+
import { HttpRpcTransport as HttpRpcTransport3, JsonRpcMempoolViewer, MempoolViewerRpcSchemas } from "@xyo-network/xl1-rpc";
|
|
1351
1009
|
var serviceSingleton;
|
|
1352
|
-
var initPendingTransactions = /* @__PURE__ */ __name(async (params) => {
|
|
1010
|
+
var initPendingTransactions = /* @__PURE__ */ __name(async ({ config: config2, params, logger }) => {
|
|
1353
1011
|
if (serviceSingleton) return serviceSingleton;
|
|
1354
|
-
return await
|
|
1355
|
-
|
|
1012
|
+
return await timeBudget7("initPendingTransactions", logger, async () => {
|
|
1013
|
+
const endpoint = config2.services?.apiEndpoint;
|
|
1014
|
+
if (isDefined13(endpoint)) {
|
|
1015
|
+
const transport = new HttpRpcTransport3(endpoint, {
|
|
1016
|
+
...MempoolViewerRpcSchemas
|
|
1017
|
+
});
|
|
1018
|
+
const viewer = new JsonRpcMempoolViewer(transport);
|
|
1019
|
+
logger?.log("Using MempoolViewer RPC service at", endpoint);
|
|
1020
|
+
return viewer;
|
|
1021
|
+
} else {
|
|
1022
|
+
serviceSingleton = await BasePendingTransactionsService.create(params);
|
|
1023
|
+
}
|
|
1356
1024
|
return serviceSingleton;
|
|
1357
1025
|
}, 2e3, true);
|
|
1358
1026
|
}, "initPendingTransactions");
|
|
1359
1027
|
|
|
1360
1028
|
// src/orchestration/services/implementation/producer.ts
|
|
1361
1029
|
import { BaseBlockProducerService as BaseBlockProducerService2 } from "@xyo-network/chain-services";
|
|
1362
|
-
import { timeBudget as
|
|
1030
|
+
import { timeBudget as timeBudget8 } from "@xyo-network/xl1-protocol-sdk";
|
|
1363
1031
|
var serviceSingleton2;
|
|
1364
1032
|
var initBlockProducer = /* @__PURE__ */ __name(async (params) => {
|
|
1365
1033
|
if (serviceSingleton2) return serviceSingleton2;
|
|
1366
|
-
return await
|
|
1034
|
+
return await timeBudget8("initBlockProducer", params.logger, async () => {
|
|
1367
1035
|
serviceSingleton2 = await BaseBlockProducerService2.create(params);
|
|
1368
1036
|
return serviceSingleton2;
|
|
1369
1037
|
}, 2e3, true);
|
|
1370
1038
|
}, "initBlockProducer");
|
|
1371
1039
|
|
|
1372
1040
|
// src/orchestration/services/implementation/reward.ts
|
|
1373
|
-
import { assertEx as
|
|
1041
|
+
import { assertEx as assertEx14 } from "@xylabs/sdk-js";
|
|
1374
1042
|
import { EvmBlockRewardService, MemoryBlockRewardService } from "@xyo-network/chain-services";
|
|
1375
|
-
import { timeBudget as
|
|
1043
|
+
import { timeBudget as timeBudget9 } from "@xyo-network/xl1-protocol-sdk";
|
|
1376
1044
|
var rewardServiceSingleton;
|
|
1377
1045
|
var initBlockRewardService = /* @__PURE__ */ __name((params) => {
|
|
1378
1046
|
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1379
|
-
return
|
|
1047
|
+
return timeBudget9("initBlockRewardService", params.logger, () => {
|
|
1380
1048
|
const { config: config2 } = params;
|
|
1381
1049
|
rewardServiceSingleton = canUseEvmBlockRewardService({
|
|
1382
1050
|
config: config2
|
|
@@ -1386,7 +1054,7 @@ var initBlockRewardService = /* @__PURE__ */ __name((params) => {
|
|
|
1386
1054
|
}, "initBlockRewardService");
|
|
1387
1055
|
var initXyoBlockRewardService = /* @__PURE__ */ __name((params) => {
|
|
1388
1056
|
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1389
|
-
return
|
|
1057
|
+
return timeBudget9("initXyoBlockRewardService", params.logger, () => {
|
|
1390
1058
|
rewardServiceSingleton = MemoryBlockRewardService.create(params);
|
|
1391
1059
|
return rewardServiceSingleton;
|
|
1392
1060
|
}, 2e3, true);
|
|
@@ -1396,10 +1064,10 @@ var canUseEvmBlockRewardService = /* @__PURE__ */ __name((params) => canUseEvmPr
|
|
|
1396
1064
|
}), "canUseEvmBlockRewardService");
|
|
1397
1065
|
var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
|
|
1398
1066
|
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1399
|
-
return await
|
|
1067
|
+
return await timeBudget9("initEvmBlockRewardService", params.logger, async () => {
|
|
1400
1068
|
const { account: paramsAccount } = params;
|
|
1401
|
-
const account =
|
|
1402
|
-
const provider2 =
|
|
1069
|
+
const account = assertEx14(paramsAccount, () => "Account is required");
|
|
1070
|
+
const provider2 = assertEx14(await initEvmProvider(params));
|
|
1403
1071
|
const evmBlockRewardServiceParams = {
|
|
1404
1072
|
...params,
|
|
1405
1073
|
provider: provider2,
|
|
@@ -1412,19 +1080,18 @@ var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
|
|
|
1412
1080
|
|
|
1413
1081
|
// src/orchestration/services/implementation/time.ts
|
|
1414
1082
|
import { BaseTimeSyncService } from "@xyo-network/chain-services";
|
|
1415
|
-
import { timeBudget as
|
|
1083
|
+
import { timeBudget as timeBudget10 } from "@xyo-network/xl1-protocol-sdk";
|
|
1416
1084
|
var timeSyncServiceSingleton;
|
|
1417
|
-
var initTimeService = /* @__PURE__ */ __name(async ({
|
|
1085
|
+
var initTimeService = /* @__PURE__ */ __name(async ({ blockViewer, config: config2, logger, meterProvider, traceProvider }) => {
|
|
1418
1086
|
if (timeSyncServiceSingleton) return timeSyncServiceSingleton;
|
|
1419
|
-
return await
|
|
1087
|
+
return await timeBudget10("initTimeService", logger, async () => {
|
|
1420
1088
|
const ethProvider = canUseEvmProvider({
|
|
1421
1089
|
config: config2
|
|
1422
1090
|
}) ? await initEvmProvider({
|
|
1423
1091
|
config: config2
|
|
1424
1092
|
}) : void 0;
|
|
1425
1093
|
timeSyncServiceSingleton = BaseTimeSyncService.create({
|
|
1426
|
-
|
|
1427
|
-
chainIterator,
|
|
1094
|
+
blockViewer,
|
|
1428
1095
|
ethProvider,
|
|
1429
1096
|
logger,
|
|
1430
1097
|
meterProvider,
|
|
@@ -1434,18 +1101,6 @@ var initTimeService = /* @__PURE__ */ __name(async ({ chainArchivist, chainItera
|
|
|
1434
1101
|
}, 2e3, true);
|
|
1435
1102
|
}, "initTimeService");
|
|
1436
1103
|
|
|
1437
|
-
// src/orchestration/services/implementation/transfer.ts
|
|
1438
|
-
import { BaseAccountTransfersService } from "@xyo-network/chain-services";
|
|
1439
|
-
import { timeBudget as timeBudget13 } from "@xyo-network/xl1-protocol-sdk";
|
|
1440
|
-
var transferServiceSingleton;
|
|
1441
|
-
var initTransferService = /* @__PURE__ */ __name(async (params) => {
|
|
1442
|
-
if (transferServiceSingleton) return transferServiceSingleton;
|
|
1443
|
-
return await timeBudget13("initTransferService", params.logger, async () => {
|
|
1444
|
-
transferServiceSingleton = await BaseAccountTransfersService.create(params);
|
|
1445
|
-
return transferServiceSingleton;
|
|
1446
|
-
}, 2e3, true);
|
|
1447
|
-
}, "initTransferService");
|
|
1448
|
-
|
|
1449
1104
|
// src/orchestration/status/ServiceStatus.ts
|
|
1450
1105
|
var LoggerStatusReporter = class {
|
|
1451
1106
|
static {
|
|
@@ -1539,7 +1194,7 @@ var RuntimeStatusMonitor = class extends LoggerStatusReporter {
|
|
|
1539
1194
|
// src/orchestration/initServices.ts
|
|
1540
1195
|
var isStartable = /* @__PURE__ */ __name((value) => {
|
|
1541
1196
|
const possibleStartable = value;
|
|
1542
|
-
return
|
|
1197
|
+
return isDefined14(possibleStartable.start) && typeof possibleStartable.start === "function" && possibleStartable.status === "created";
|
|
1543
1198
|
}, "isStartable");
|
|
1544
1199
|
var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
1545
1200
|
const { config: config2, logger } = context;
|
|
@@ -1555,7 +1210,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1555
1210
|
logger.error("Producer encountered an unhandled error!");
|
|
1556
1211
|
process.exit(1);
|
|
1557
1212
|
});
|
|
1558
|
-
await
|
|
1213
|
+
await startupSpanAsync7("initHealthEndpoints", () => initHealthEndpoints({
|
|
1559
1214
|
...context,
|
|
1560
1215
|
statusReporter
|
|
1561
1216
|
}));
|
|
@@ -1573,8 +1228,8 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1573
1228
|
}
|
|
1574
1229
|
};
|
|
1575
1230
|
const [{ traceProvider, meterProvider }, account] = await Promise.all([
|
|
1576
|
-
|
|
1577
|
-
|
|
1231
|
+
startupSpanAsync7("initTelemetry", () => initTelemetry(telemetryConfig)),
|
|
1232
|
+
startupSpanAsync7("initProducerAccount", () => initProducerAccount(context))
|
|
1578
1233
|
]);
|
|
1579
1234
|
const allowedRewardRedeemers = config2.validation?.allowedRewardRedeemers ?? [];
|
|
1580
1235
|
const allowedRewardEscrowAccountSigners = config2.validation?.allowedRewardEscrowAccountSigners ?? [];
|
|
@@ -1590,32 +1245,23 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1590
1245
|
statusReporter,
|
|
1591
1246
|
traceProvider
|
|
1592
1247
|
};
|
|
1593
|
-
const [
|
|
1594
|
-
|
|
1595
|
-
|
|
1596
|
-
|
|
1597
|
-
|
|
1598
|
-
|
|
1599
|
-
startupSpanAsync8("ChainService", () => initChainService({
|
|
1248
|
+
const [[pendingBundledTransactionsArchivist, pendingBundledTransactionsArchivistWrite], rejectedTransactionsArchivist, chainSubmissionsArchivistWrite, stakeIntentStateArchivist, chainService, balanceSummaryMap] = await Promise.all([
|
|
1249
|
+
startupSpanAsync7("PendingBundledTransactionsArchivist", () => initPendingBundledTransactionsArchivist(initParams)),
|
|
1250
|
+
startupSpanAsync7("RejectedTransactionsArchivist", () => initRejectedTransactionsArchivist(initParams)),
|
|
1251
|
+
startupSpanAsync7("ChainSubmissionsArchivist", () => initChainSubmissionsArchivist(initParams)),
|
|
1252
|
+
startupSpanAsync7("StakeIntentStateArchivist", () => initStakeIntentStateArchivist(initParams)),
|
|
1253
|
+
startupSpanAsync7("ChainService", () => initChainService({
|
|
1600
1254
|
...initParams,
|
|
1601
1255
|
account,
|
|
1602
1256
|
name: "ChainService"
|
|
1603
1257
|
})),
|
|
1604
|
-
|
|
1605
|
-
|
|
1258
|
+
startupSpanAsync7("BalanceSummaryMap", () => initBalanceSummaryMap(initParams)),
|
|
1259
|
+
startupSpanAsync7("TransferSummaryMap", () => initTransferSummaryMap(initParams))
|
|
1606
1260
|
]);
|
|
1607
|
-
const chainId = chainService.chainId;
|
|
1608
|
-
const chainMap = readPayloadMapFromStore(chainArchivist);
|
|
1261
|
+
const chainId = await chainService.chainId();
|
|
1609
1262
|
const chainContractViewer = chainService;
|
|
1610
1263
|
const chainStakeViewer = chainService;
|
|
1611
1264
|
const chainStaker = chainService;
|
|
1612
|
-
const head = await startupSpanAsync8("initHead", () => initHead({
|
|
1613
|
-
...initParams,
|
|
1614
|
-
account,
|
|
1615
|
-
chainArchivist,
|
|
1616
|
-
chainSubmissionsArchivistWrite,
|
|
1617
|
-
chainService
|
|
1618
|
-
}));
|
|
1619
1265
|
const additionalPendingTransactionValidators = [
|
|
1620
1266
|
TransactionTransfersValidatorFactory([
|
|
1621
1267
|
SelfSignerValidator,
|
|
@@ -1623,98 +1269,48 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1623
1269
|
DerivedReceiveAddressValidatorFactory(allowedRewardEscrowAccountSigners, "reward-escrow")
|
|
1624
1270
|
])
|
|
1625
1271
|
];
|
|
1626
|
-
const [pendingTransactionsService, rewardService
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1272
|
+
const [pendingTransactionsService, rewardService] = await Promise.all([
|
|
1273
|
+
startupSpanAsync7("PendingTransactions", () => initPendingTransactions({
|
|
1274
|
+
config: config2,
|
|
1275
|
+
params: {
|
|
1276
|
+
name: "PendingTransactionsService",
|
|
1277
|
+
chainId,
|
|
1278
|
+
pendingBundledTransactionsArchivist,
|
|
1279
|
+
rejectedTransactionsArchivist,
|
|
1280
|
+
additionalPendingTransactionValidators,
|
|
1281
|
+
...initParams
|
|
1282
|
+
}
|
|
1635
1283
|
})),
|
|
1636
|
-
|
|
1284
|
+
startupSpanAsync7("RewardService", () => initBlockRewardService({
|
|
1637
1285
|
name: "RewardService",
|
|
1638
1286
|
account,
|
|
1639
1287
|
chainService,
|
|
1640
1288
|
...initParams
|
|
1641
|
-
})),
|
|
1642
|
-
startupSpanAsync8("ChainIterator", () => initChainIterator({
|
|
1643
|
-
name: "ChainIterator",
|
|
1644
|
-
chainMap,
|
|
1645
|
-
head,
|
|
1646
|
-
...initParams
|
|
1647
|
-
}))
|
|
1648
|
-
]);
|
|
1649
|
-
const blockViewer = blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist);
|
|
1650
|
-
const balanceContext = {
|
|
1651
|
-
stepSemaphores: StepSizes.map(() => new Semaphore2(20)),
|
|
1652
|
-
store: {
|
|
1653
|
-
chainMap
|
|
1654
|
-
},
|
|
1655
|
-
head: /* @__PURE__ */ __name(async () => {
|
|
1656
|
-
const head2 = await chainIterator.head();
|
|
1657
|
-
return [
|
|
1658
|
-
head2._hash,
|
|
1659
|
-
head2.block
|
|
1660
|
-
];
|
|
1661
|
-
}, "head"),
|
|
1662
|
-
chainId,
|
|
1663
|
-
summaryMap: balanceSummaryMap
|
|
1664
|
-
};
|
|
1665
|
-
const transferContext = {
|
|
1666
|
-
stepSemaphores: StepSizes.map(() => new Semaphore2(20)),
|
|
1667
|
-
store: {
|
|
1668
|
-
chainMap
|
|
1669
|
-
},
|
|
1670
|
-
head: /* @__PURE__ */ __name(async () => {
|
|
1671
|
-
const head2 = await chainIterator.head();
|
|
1672
|
-
return [
|
|
1673
|
-
head2._hash,
|
|
1674
|
-
head2.block
|
|
1675
|
-
];
|
|
1676
|
-
}, "head"),
|
|
1677
|
-
chainId,
|
|
1678
|
-
summaryMap: transferSummaryMap
|
|
1679
|
-
};
|
|
1680
|
-
const [balanceService] = await Promise.all([
|
|
1681
|
-
startupSpanAsync8("BalanceService", () => initAccountBalanceService({
|
|
1682
|
-
params: {
|
|
1683
|
-
name: "BalanceService",
|
|
1684
|
-
config: {},
|
|
1685
|
-
context: balanceContext,
|
|
1686
|
-
blockViewer,
|
|
1687
|
-
chainArchivist,
|
|
1688
|
-
chainIterator,
|
|
1689
|
-
transferContext
|
|
1690
|
-
},
|
|
1691
|
-
...initParams
|
|
1692
|
-
})),
|
|
1693
|
-
startupSpanAsync8("TransferService", () => initTransferService({
|
|
1694
|
-
name: "TransferService",
|
|
1695
|
-
context: transferContext,
|
|
1696
|
-
...initParams
|
|
1697
1289
|
}))
|
|
1698
1290
|
]);
|
|
1291
|
+
const blockViewer = await startupSpanAsync7("BlockViewer", () => initBlockViewer({
|
|
1292
|
+
...initParams
|
|
1293
|
+
}));
|
|
1294
|
+
const balanceService = await startupSpanAsync7("BalanceService", () => initAccountBalanceService({
|
|
1295
|
+
...initParams
|
|
1296
|
+
}));
|
|
1699
1297
|
const [stakeIntentService, time] = await Promise.all([
|
|
1700
|
-
|
|
1298
|
+
startupSpanAsync7("StakeIntentService", () => initStakeIntentService({
|
|
1701
1299
|
name: "StakeIntentService",
|
|
1702
|
-
|
|
1703
|
-
chainIterator,
|
|
1300
|
+
blockViewer,
|
|
1704
1301
|
chainStakeViewer,
|
|
1705
1302
|
stakeIntentStateArchivist,
|
|
1706
1303
|
...initParams
|
|
1707
1304
|
})),
|
|
1708
|
-
|
|
1305
|
+
startupSpanAsync7("TimeService", () => initTimeService({
|
|
1709
1306
|
name: "TimeService",
|
|
1710
|
-
|
|
1711
|
-
chainIterator,
|
|
1307
|
+
blockViewer,
|
|
1712
1308
|
...initParams
|
|
1713
1309
|
}))
|
|
1714
1310
|
]);
|
|
1715
|
-
const electionService = await
|
|
1311
|
+
const electionService = await startupSpanAsync7("ElectionService", () => initElectionService({
|
|
1716
1312
|
name: "ElectionService",
|
|
1717
|
-
|
|
1313
|
+
blockViewer,
|
|
1718
1314
|
chainStakeViewer,
|
|
1719
1315
|
stakeIntentService,
|
|
1720
1316
|
...initParams
|
|
@@ -1724,19 +1320,19 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1724
1320
|
account,
|
|
1725
1321
|
chainId,
|
|
1726
1322
|
pendingBundledTransactionsArchivist,
|
|
1727
|
-
|
|
1323
|
+
blockViewer,
|
|
1728
1324
|
electionService,
|
|
1729
1325
|
rewardService,
|
|
1730
1326
|
stakeIntentService,
|
|
1731
1327
|
validateHydratedBlockState,
|
|
1732
1328
|
...initParams
|
|
1733
1329
|
};
|
|
1734
|
-
const rewardAddress =
|
|
1330
|
+
const rewardAddress = isDefined14(config2.producer.rewardAddress) ? assertEx15(asAddress2(config2.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
|
|
1735
1331
|
const producerParams = {
|
|
1736
1332
|
...validatorParams,
|
|
1737
1333
|
name: "Producer",
|
|
1738
1334
|
balanceService,
|
|
1739
|
-
|
|
1335
|
+
blockViewer,
|
|
1740
1336
|
pendingBundledTransactionsArchivist,
|
|
1741
1337
|
pendingTransactionsService,
|
|
1742
1338
|
rejectedTransactionsArchivist,
|
|
@@ -1744,13 +1340,12 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1744
1340
|
time,
|
|
1745
1341
|
...initParams
|
|
1746
1342
|
};
|
|
1747
|
-
const producer = await
|
|
1343
|
+
const producer = await startupSpanAsync7("Producer", () => initBlockProducer(producerParams));
|
|
1748
1344
|
const services = {
|
|
1749
1345
|
account,
|
|
1750
1346
|
balance: balanceService,
|
|
1751
|
-
chainArchivist,
|
|
1752
1347
|
chainContractViewer,
|
|
1753
|
-
|
|
1348
|
+
blockViewer,
|
|
1754
1349
|
chainStaker,
|
|
1755
1350
|
chainStakeViewer,
|
|
1756
1351
|
chainSubmissionsArchivistWrite,
|
|
@@ -1766,7 +1361,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1766
1361
|
balanceSummaryMap,
|
|
1767
1362
|
...Object.values(services)
|
|
1768
1363
|
].filter(isStartable);
|
|
1769
|
-
|
|
1364
|
+
assertEx15((await Promise.all(startableServices.map((service) => service.start()))).every(Boolean), () => "One or more services failed to start");
|
|
1770
1365
|
logger?.log("All services started successfully.");
|
|
1771
1366
|
return {
|
|
1772
1367
|
...services,
|
|
@@ -1784,11 +1379,8 @@ var runProducer = /* @__PURE__ */ __name(async (context) => {
|
|
|
1784
1379
|
...services,
|
|
1785
1380
|
config: config2
|
|
1786
1381
|
};
|
|
1787
|
-
const
|
|
1788
|
-
|
|
1789
|
-
name: "ChainHeadUpdateActor"
|
|
1790
|
-
});
|
|
1791
|
-
const balances = await BalanceActor.create({
|
|
1382
|
+
const apiEndpoint = config2.services.apiEndpoint;
|
|
1383
|
+
const balances = isDefined15(apiEndpoint) ? void 0 : await BalanceActor.create({
|
|
1792
1384
|
...params,
|
|
1793
1385
|
name: "BalanceActor"
|
|
1794
1386
|
});
|
|
@@ -1797,10 +1389,9 @@ var runProducer = /* @__PURE__ */ __name(async (context) => {
|
|
|
1797
1389
|
name: "ProducerActor"
|
|
1798
1390
|
});
|
|
1799
1391
|
const actors = [
|
|
1800
|
-
chainHeadUpdate,
|
|
1801
1392
|
balances,
|
|
1802
1393
|
producer
|
|
1803
|
-
];
|
|
1394
|
+
].filter(exists);
|
|
1804
1395
|
for (const actor of actors) {
|
|
1805
1396
|
await orchestrator.registerActor(actor);
|
|
1806
1397
|
}
|
|
@@ -1835,16 +1426,16 @@ var XL1LogoColorizedAscii = `\x1B[38;2;128;128;128m\xA0\xA0\xA0\xA0\xA0\xA0\xA0\
|
|
|
1835
1426
|
\x1B[38;2;128;128;128m\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\xA0\x1B[0m\x1B[38;2;108;93;162m\xB2\x1B[0m\x1B[38;2;99;79;176m^\x1B[0m`;
|
|
1836
1427
|
|
|
1837
1428
|
// src/initLogger.ts
|
|
1838
|
-
import { Base as Base2, ConsoleLogger, isDefined as
|
|
1429
|
+
import { Base as Base2, ConsoleLogger, isDefined as isDefined16, LogLevel, SilentLogger } from "@xylabs/sdk-js";
|
|
1839
1430
|
var initLogger = /* @__PURE__ */ __name((config2) => {
|
|
1840
1431
|
let logger;
|
|
1841
1432
|
if (config2.silent) {
|
|
1842
1433
|
logger = new SilentLogger();
|
|
1843
1434
|
} else {
|
|
1844
1435
|
let level;
|
|
1845
|
-
if (
|
|
1436
|
+
if (isDefined16(config2.logLevel)) {
|
|
1846
1437
|
const parsed = LogLevel[config2.logLevel.toLowerCase()];
|
|
1847
|
-
if (
|
|
1438
|
+
if (isDefined16(parsed)) level = parsed;
|
|
1848
1439
|
}
|
|
1849
1440
|
logger = new ConsoleLogger(level);
|
|
1850
1441
|
}
|
|
@@ -1870,7 +1461,7 @@ var optionsFromGlobalZodRegistry = /* @__PURE__ */ __name(() => {
|
|
|
1870
1461
|
}, "optionsFromGlobalZodRegistry");
|
|
1871
1462
|
|
|
1872
1463
|
// src/tryParseConfig.ts
|
|
1873
|
-
import { isDefined as
|
|
1464
|
+
import { isDefined as isDefined17, isNull } from "@xylabs/sdk-js";
|
|
1874
1465
|
import { cosmiconfigSync } from "cosmiconfig";
|
|
1875
1466
|
var configName = "xyo";
|
|
1876
1467
|
var configSection = "xl1";
|
|
@@ -1879,7 +1470,7 @@ var tryParseConfig = /* @__PURE__ */ __name(() => {
|
|
|
1879
1470
|
const result = explorer.search();
|
|
1880
1471
|
if (!isNull(result)) {
|
|
1881
1472
|
const section = result?.config?.[configSection];
|
|
1882
|
-
if (
|
|
1473
|
+
if (isDefined17(section) && typeof section === "object") {
|
|
1883
1474
|
return section;
|
|
1884
1475
|
}
|
|
1885
1476
|
}
|
|
@@ -1909,7 +1500,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
|
|
|
1909
1500
|
|
|
1910
1501
|
// src/runCLI.ts
|
|
1911
1502
|
var configuration;
|
|
1912
|
-
var version =
|
|
1503
|
+
var version = isDefined18("1.16.26") ? "1.16.26" : "unknown";
|
|
1913
1504
|
var getContextFromConfig = /* @__PURE__ */ __name((configuration2) => {
|
|
1914
1505
|
const logger = initLogger(configuration2);
|
|
1915
1506
|
const orchestrator = new Orchestrator(logger);
|