@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/index.mjs
CHANGED
|
@@ -3,7 +3,6 @@ var __name = (target, value) => __defProp(target, "name", { value, configurable:
|
|
|
3
3
|
|
|
4
4
|
// src/orchestration/actor/implementation/BalanceActor.ts
|
|
5
5
|
import { assertEx } from "@xylabs/sdk-js";
|
|
6
|
-
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
7
6
|
import { Mutex } from "async-mutex";
|
|
8
7
|
|
|
9
8
|
// src/orchestration/actor/model/Actor.ts
|
|
@@ -198,17 +197,14 @@ var BalanceActor = class _BalanceActor extends Actor {
|
|
|
198
197
|
get balanceService() {
|
|
199
198
|
return assertEx(this.params.balance, () => "balanceService not set");
|
|
200
199
|
}
|
|
201
|
-
get
|
|
202
|
-
return assertEx(this.params.
|
|
200
|
+
get blockViewer() {
|
|
201
|
+
return assertEx(this.params.blockViewer, () => "blockViewer not set");
|
|
203
202
|
}
|
|
204
203
|
static create(params) {
|
|
205
204
|
return new _BalanceActor(params);
|
|
206
205
|
}
|
|
207
206
|
async start() {
|
|
208
207
|
await super.start();
|
|
209
|
-
this.chainIterator.on("headUpdate", async () => {
|
|
210
|
-
await this.updateBalance();
|
|
211
|
-
});
|
|
212
208
|
this.registerTimer(
|
|
213
209
|
"BalanceTimer",
|
|
214
210
|
async () => {
|
|
@@ -222,84 +218,21 @@ var BalanceActor = class _BalanceActor extends Actor {
|
|
|
222
218
|
async updateBalance() {
|
|
223
219
|
if (this._updateMutex.isLocked()) return;
|
|
224
220
|
await this._updateMutex.runExclusive(async () => {
|
|
225
|
-
const head = await
|
|
221
|
+
const head = await this.blockViewer.currentBlockHash();
|
|
226
222
|
await this.balanceService.accountsBalances([], head);
|
|
227
223
|
});
|
|
228
224
|
}
|
|
229
225
|
};
|
|
230
226
|
|
|
231
|
-
// src/orchestration/actor/implementation/ChainHeadUpdateActor.ts
|
|
232
|
-
import { assertEx as assertEx2, toHex } from "@xylabs/sdk-js";
|
|
233
|
-
import { findMostRecentBlock, sortBlocks } from "@xyo-network/chain-protocol";
|
|
234
|
-
import { isBlockBoundWitness } from "@xyo-network/xl1-protocol";
|
|
235
|
-
import { Mutex as Mutex2 } from "async-mutex";
|
|
236
|
-
var ChainHeadUpdateActor = class _ChainHeadUpdateActor extends Actor {
|
|
237
|
-
static {
|
|
238
|
-
__name(this, "ChainHeadUpdateActor");
|
|
239
|
-
}
|
|
240
|
-
_pollForNewHeadMutex = new Mutex2();
|
|
241
|
-
constructor(params) {
|
|
242
|
-
super("ChainHeadUpdate", "ChainHeadUpdate", params);
|
|
243
|
-
}
|
|
244
|
-
get chainFinalizedArchivist() {
|
|
245
|
-
return assertEx2(this.params.chainArchivist, () => "ChainArchivist not set");
|
|
246
|
-
}
|
|
247
|
-
get chainIterator() {
|
|
248
|
-
return assertEx2(this.params.chainIterator, () => "chainIterator not set");
|
|
249
|
-
}
|
|
250
|
-
static create(params) {
|
|
251
|
-
return new _ChainHeadUpdateActor(params);
|
|
252
|
-
}
|
|
253
|
-
async start() {
|
|
254
|
-
await super.start();
|
|
255
|
-
this.chainFinalizedArchivist.on("inserted", async (data) => {
|
|
256
|
-
await this.checkInsertedForNewHead(data);
|
|
257
|
-
});
|
|
258
|
-
this.registerTimer(
|
|
259
|
-
"ChainHeadUpdateTimer",
|
|
260
|
-
async () => await this.pollForNewHead(),
|
|
261
|
-
0,
|
|
262
|
-
2500
|
|
263
|
-
/* 250 */
|
|
264
|
-
);
|
|
265
|
-
}
|
|
266
|
-
async checkInsertedForNewHead(data) {
|
|
267
|
-
const candidateBlock = sortBlocks(data.payloads.filter(isBlockBoundWitness)).at(-1);
|
|
268
|
-
await this.updateHeadIfNewer(candidateBlock);
|
|
269
|
-
}
|
|
270
|
-
async pollForNewHead() {
|
|
271
|
-
if (this._pollForNewHeadMutex.isLocked()) {
|
|
272
|
-
this.logger?.log("Skipping poll for new head, previous poll still in progress");
|
|
273
|
-
return;
|
|
274
|
-
}
|
|
275
|
-
await this._pollForNewHeadMutex.runExclusive(async () => {
|
|
276
|
-
const candidateBlock = await findMostRecentBlock(this.chainFinalizedArchivist);
|
|
277
|
-
await this.updateHeadIfNewer(candidateBlock);
|
|
278
|
-
});
|
|
279
|
-
}
|
|
280
|
-
async updateHeadIfNewer(candidateBlock) {
|
|
281
|
-
if (!candidateBlock) return;
|
|
282
|
-
const currentHead = await this.chainIterator.head();
|
|
283
|
-
const candidateBlockNumber = candidateBlock.block;
|
|
284
|
-
const candidateBlockNumberDisplay = `0x${toHex(candidateBlockNumber)}`;
|
|
285
|
-
const currentBlockNumber = currentHead?.block ?? -1;
|
|
286
|
-
if (candidateBlockNumber > currentBlockNumber) {
|
|
287
|
-
this.logger?.log("Found more recent head:", candidateBlockNumber, candidateBlockNumberDisplay);
|
|
288
|
-
await this.chainIterator.updateHead(candidateBlock);
|
|
289
|
-
this.logger?.log("Updated head:", candidateBlockNumber, candidateBlockNumberDisplay);
|
|
290
|
-
}
|
|
291
|
-
}
|
|
292
|
-
};
|
|
293
|
-
|
|
294
227
|
// src/orchestration/actor/implementation/ProducerActor.ts
|
|
295
|
-
import { assertEx as
|
|
228
|
+
import { assertEx as assertEx2, isDefined, isUndefined, toHex } from "@xylabs/sdk-js";
|
|
296
229
|
import { createDeclarationIntent } from "@xyo-network/chain-protocol";
|
|
297
230
|
import { BaseBlockProducerService } from "@xyo-network/chain-services";
|
|
298
|
-
import { PayloadBuilder
|
|
231
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
299
232
|
import { PayloadBundleSchema } from "@xyo-network/payload-model";
|
|
300
233
|
import { asXL1BlockNumber } from "@xyo-network/xl1-protocol";
|
|
301
234
|
import { buildTransaction, flattenHydratedBlock, flattenHydratedTransaction } from "@xyo-network/xl1-protocol-sdk";
|
|
302
|
-
import { Mutex as
|
|
235
|
+
import { Mutex as Mutex2 } from "async-mutex";
|
|
303
236
|
var SHOULD_REGISTER_REDECLARATION_INTENT_TIMER = true;
|
|
304
237
|
var TEN_MINUTES = 10 * 60 * 1e3;
|
|
305
238
|
var ProducerActor = class _ProducerActor extends Actor {
|
|
@@ -313,7 +246,7 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
313
246
|
_producerActorBlockProductionChecks;
|
|
314
247
|
_producerActorBlocksProduced;
|
|
315
248
|
_producerActorBlocksPublished;
|
|
316
|
-
_produceBlockMutex = new
|
|
249
|
+
_produceBlockMutex = new Mutex2();
|
|
317
250
|
constructor(params) {
|
|
318
251
|
super(params.producer.address, "Producer", params);
|
|
319
252
|
this._metricAttributes = {
|
|
@@ -333,28 +266,28 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
333
266
|
});
|
|
334
267
|
}
|
|
335
268
|
get account() {
|
|
336
|
-
return
|
|
269
|
+
return assertEx2(this.params.account, () => "account not set");
|
|
337
270
|
}
|
|
338
271
|
get balanceService() {
|
|
339
|
-
return
|
|
272
|
+
return assertEx2(this.params.balance, () => "balanceService not set");
|
|
340
273
|
}
|
|
341
|
-
get
|
|
342
|
-
return
|
|
274
|
+
get blockViewer() {
|
|
275
|
+
return assertEx2(this.params.blockViewer, () => "blockViewer not set");
|
|
343
276
|
}
|
|
344
277
|
get chainStakeViewer() {
|
|
345
|
-
return
|
|
278
|
+
return assertEx2(this.params.chainStakeViewer, () => "chainStakeViewer not set");
|
|
346
279
|
}
|
|
347
280
|
get chainSubmissionsArchivistWrite() {
|
|
348
|
-
return
|
|
281
|
+
return assertEx2(this.params.chainSubmissionsArchivistWrite, () => "chainSubmissionsArchivistWrite not set");
|
|
349
282
|
}
|
|
350
283
|
get pendingBundledTransactionsArchivistWrite() {
|
|
351
|
-
return
|
|
284
|
+
return assertEx2(this.params.pendingBundledTransactionsArchivistWrite, () => "pendingBundledTransactionsArchivistWrite not set");
|
|
352
285
|
}
|
|
353
286
|
get producer() {
|
|
354
|
-
return
|
|
287
|
+
return assertEx2(this.params.producer, () => "producer not set");
|
|
355
288
|
}
|
|
356
289
|
get stakeIntentService() {
|
|
357
|
-
return
|
|
290
|
+
return assertEx2(this.params.stakeIntent, () => "stakeIntentService not set");
|
|
358
291
|
}
|
|
359
292
|
static create(params) {
|
|
360
293
|
return new _ProducerActor(params);
|
|
@@ -395,12 +328,12 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
395
328
|
}
|
|
396
329
|
await this._produceBlockMutex.runExclusive(async () => {
|
|
397
330
|
const headStart = Date.now();
|
|
398
|
-
const head = await this.
|
|
331
|
+
const head = (await this.blockViewer.currentBlock())[0];
|
|
399
332
|
const headDuration = Date.now() - headStart;
|
|
400
|
-
if (headDuration > 500) this.logger?.warn(`[Slow] Fetched head in ${headDuration}ms: 0x${
|
|
333
|
+
if (headDuration > 500) this.logger?.warn(`[Slow] Fetched head in ${headDuration}ms: 0x${toHex(head._hash)}`);
|
|
401
334
|
const headHash = head._hash;
|
|
402
335
|
if (this._lastProducedBlock && this._lastProducedBlock[0].previous === headHash) {
|
|
403
|
-
this.logger?.log("Block already produced:", `0x${
|
|
336
|
+
this.logger?.log("Block already produced:", `0x${toHex(this._lastProducedBlock[0].block)}`, this._lastProducedBlock[0].block);
|
|
404
337
|
} else {
|
|
405
338
|
this._producerActorBlockProductionAttempts?.add(1, this._metricAttributes);
|
|
406
339
|
const nextStart = Date.now();
|
|
@@ -408,7 +341,7 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
408
341
|
const nextDuration = Date.now() - nextStart;
|
|
409
342
|
if (nextDuration > 1e3) this.logger?.warn(`[Slow] Generated next block in ${nextDuration}ms, block: ${nextBlock?.[0]._hash}`);
|
|
410
343
|
if (nextBlock) {
|
|
411
|
-
const displayBlockNumber = `0x${
|
|
344
|
+
const displayBlockNumber = `0x${toHex(nextBlock[0].block)}`;
|
|
412
345
|
this.logger?.log("Produced block:", displayBlockNumber);
|
|
413
346
|
this._producerActorBlocksProduced?.add(1, this._metricAttributes);
|
|
414
347
|
await this.chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(nextBlock));
|
|
@@ -423,7 +356,7 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
423
356
|
async redeclareIntent() {
|
|
424
357
|
await this.spanAsync("redeclareIntent", async () => {
|
|
425
358
|
if (this.params.config.producer.disableIntentRedeclaration) return;
|
|
426
|
-
const head = await this.
|
|
359
|
+
const head = (await this.blockViewer.currentBlock())[0];
|
|
427
360
|
if (isUndefined(head)) return;
|
|
428
361
|
const currentBlock = head.block;
|
|
429
362
|
const blocksUntilExpiration = await this.calculateBlocksUntilProducerDeclarationExpiration(currentBlock);
|
|
@@ -451,12 +384,12 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
451
384
|
}
|
|
452
385
|
async submitRedeclarationIntent(currentBlock, redeclarationIntent) {
|
|
453
386
|
this.logger?.log("Submitting redeclaration intent for producer:", this.account.address);
|
|
454
|
-
const tx = await buildTransaction(this.
|
|
387
|
+
const tx = await buildTransaction(await this.chainStakeViewer.chainId(), [
|
|
455
388
|
redeclarationIntent
|
|
456
389
|
], [], this.account, currentBlock, asXL1BlockNumber(currentBlock + 1e3, true));
|
|
457
390
|
const payloads = flattenHydratedTransaction(tx);
|
|
458
391
|
const root = tx[0]._hash;
|
|
459
|
-
const payloadBundle = new
|
|
392
|
+
const payloadBundle = new PayloadBuilder({
|
|
460
393
|
schema: PayloadBundleSchema
|
|
461
394
|
}).fields({
|
|
462
395
|
payloads,
|
|
@@ -494,8 +427,8 @@ var ProducerActor = class _ProducerActor extends Actor {
|
|
|
494
427
|
};
|
|
495
428
|
|
|
496
429
|
// src/orchestration/actor/implementation/ValidatorActor.ts
|
|
497
|
-
import { assertEx as
|
|
498
|
-
import { PayloadBuilder as
|
|
430
|
+
import { assertEx as assertEx3, isDefined as isDefined2, isUndefined as isUndefined2, toHex as toHex2 } from "@xylabs/sdk-js";
|
|
431
|
+
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/payload-builder";
|
|
499
432
|
var ValidatorActor = class _ValidatorActor extends Actor {
|
|
500
433
|
static {
|
|
501
434
|
__name(this, "ValidatorActor");
|
|
@@ -506,25 +439,25 @@ var ValidatorActor = class _ValidatorActor extends Actor {
|
|
|
506
439
|
super("Validator", "Validator", params);
|
|
507
440
|
}
|
|
508
441
|
get account() {
|
|
509
|
-
return
|
|
442
|
+
return assertEx3(this.params.account, () => "account not set");
|
|
510
443
|
}
|
|
511
444
|
get balanceService() {
|
|
512
|
-
return
|
|
445
|
+
return assertEx3(this.params.balance, () => "balanceService not set");
|
|
513
446
|
}
|
|
514
|
-
get
|
|
515
|
-
return
|
|
447
|
+
get blockViewer() {
|
|
448
|
+
return assertEx3(this.params.blockViewer, () => "blockViewer not set");
|
|
516
449
|
}
|
|
517
450
|
get chainStakeViewer() {
|
|
518
|
-
return
|
|
451
|
+
return assertEx3(this.params.chainStakeViewer, () => "chainStakeViewer not set");
|
|
519
452
|
}
|
|
520
453
|
get chainSubmissionsArchivistWrite() {
|
|
521
|
-
return
|
|
454
|
+
return assertEx3(this.params.chainSubmissionsArchivistWrite, () => "chainSubmissionsArchivistWrite not set");
|
|
522
455
|
}
|
|
523
456
|
get pendingBundledTransactionsArchivistWrite() {
|
|
524
|
-
return
|
|
457
|
+
return assertEx3(this.params.pendingBundledTransactionsArchivistWrite, () => "pendingBundledTransactionsArchivistWrite not set");
|
|
525
458
|
}
|
|
526
459
|
get stakeIntentService() {
|
|
527
|
-
return
|
|
460
|
+
return assertEx3(this.params.stakeIntent, () => "stakeIntentService not set");
|
|
528
461
|
}
|
|
529
462
|
// protected get validator() {
|
|
530
463
|
// return assertEx(this.params.validator, () => 'validator not set')
|
|
@@ -538,18 +471,18 @@ var ValidatorActor = class _ValidatorActor extends Actor {
|
|
|
538
471
|
"BlockProductionTimer",
|
|
539
472
|
async () => {
|
|
540
473
|
await this.spanAsync("produceBlock", async () => {
|
|
541
|
-
const block = await this.
|
|
474
|
+
const block = (await this.blockViewer.currentBlock())[0];
|
|
542
475
|
if (isUndefined2(block)) return;
|
|
543
|
-
const hash = await
|
|
476
|
+
const hash = await PayloadBuilder2.hash(block);
|
|
544
477
|
if (isDefined2(this._lastValidatedBlock) && this._lastValidatedBlockHash === hash) {
|
|
545
|
-
this.logger?.log("Block already validated:", `0x${
|
|
478
|
+
this.logger?.log("Block already validated:", `0x${toHex2(block.block)}`);
|
|
546
479
|
} else {
|
|
547
|
-
this.logger?.log("Validating block:", `0x${
|
|
480
|
+
this.logger?.log("Validating block:", `0x${toHex2(block.block)}`);
|
|
548
481
|
const valid = await this.validateBlock(block);
|
|
549
482
|
if (valid) {
|
|
550
|
-
this.logger?.log("Validated block:", `0x${
|
|
483
|
+
this.logger?.log("Validated block:", `0x${toHex2(block.block)}`);
|
|
551
484
|
} else {
|
|
552
|
-
this.logger?.log("Invalid block:", `0x${
|
|
485
|
+
this.logger?.log("Invalid block:", `0x${toHex2(block.block)}`);
|
|
553
486
|
await this.slashInvalidBlock(block);
|
|
554
487
|
}
|
|
555
488
|
}
|
|
@@ -567,7 +500,7 @@ var ValidatorActor = class _ValidatorActor extends Actor {
|
|
|
567
500
|
async validateBlock(block) {
|
|
568
501
|
const valid = await Promise.resolve(true);
|
|
569
502
|
this._lastValidatedBlock = block;
|
|
570
|
-
this._lastValidatedBlockHash = await
|
|
503
|
+
this._lastValidatedBlockHash = await PayloadBuilder2.hash(block);
|
|
571
504
|
return valid;
|
|
572
505
|
}
|
|
573
506
|
};
|
|
@@ -629,25 +562,12 @@ var initHealthEndpoints = /* @__PURE__ */ __name((params) => {
|
|
|
629
562
|
}, "initHealthEndpoints");
|
|
630
563
|
|
|
631
564
|
// src/orchestration/initServices.ts
|
|
632
|
-
import { asAddress as asAddress2, assertEx as
|
|
633
|
-
import {
|
|
634
|
-
import { blockViewerFromChainIteratorAndArchivist } from "@xyo-network/chain-services";
|
|
565
|
+
import { asAddress as asAddress2, assertEx as assertEx17, isDefined as isDefined17 } from "@xylabs/sdk-js";
|
|
566
|
+
import { initElectionService, initProducerAccount, initStakeIntentService } from "@xyo-network/chain-orchestration";
|
|
635
567
|
import { initTelemetry } from "@xyo-network/chain-telemetry";
|
|
636
|
-
import { startupSpanAsync as
|
|
568
|
+
import { startupSpanAsync as startupSpanAsync7 } from "@xyo-network/chain-utils";
|
|
637
569
|
import { validateHydratedBlockState } from "@xyo-network/chain-validation";
|
|
638
|
-
import { StepSizes } from "@xyo-network/xl1-protocol";
|
|
639
|
-
import { readPayloadMapFromStore } from "@xyo-network/xl1-protocol-sdk";
|
|
640
570
|
import { CompletedStepRewardAddressValidatorFactory, DerivedReceiveAddressValidatorFactory, SelfSignerValidator, TransactionTransfersValidatorFactory } from "@xyo-network/xl1-validation";
|
|
641
|
-
import { Semaphore as Semaphore2 } from "async-mutex";
|
|
642
|
-
|
|
643
|
-
// src/orchestration/archivists/ChainFinalized/archivist.ts
|
|
644
|
-
import { initArchivistSync } from "@xyo-network/chain-orchestration";
|
|
645
|
-
import { startupSpanAsync } from "@xyo-network/chain-utils";
|
|
646
|
-
import { timeBudget } from "@xyo-network/xl1-protocol-sdk";
|
|
647
|
-
import { Mutex as Mutex6 } from "async-mutex";
|
|
648
|
-
|
|
649
|
-
// src/orchestration/archivists/ChainFinalized/local.ts
|
|
650
|
-
import { Mutex as Mutex4 } from "async-mutex";
|
|
651
571
|
|
|
652
572
|
// src/orchestration/archivists/lib/localPersistentArchivist.ts
|
|
653
573
|
import { rm } from "fs/promises";
|
|
@@ -674,120 +594,62 @@ var getLocalPersistentArchivist = /* @__PURE__ */ __name((name, dbName, storeNam
|
|
|
674
594
|
}
|
|
675
595
|
}, "getLocalPersistentArchivist");
|
|
676
596
|
|
|
677
|
-
// src/orchestration/archivists/
|
|
678
|
-
var mutex = new Mutex4();
|
|
679
|
-
var singleton;
|
|
680
|
-
var initLocalChainFinalizedArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
681
|
-
return await mutex.runExclusive(async () => {
|
|
682
|
-
if (singleton) return singleton;
|
|
683
|
-
const { root } = config2.storage;
|
|
684
|
-
singleton = await getLocalPersistentArchivist("local-finalized-chain", "chain", "finalized", root);
|
|
685
|
-
return singleton;
|
|
686
|
-
});
|
|
687
|
-
}, "initLocalChainFinalizedArchivist");
|
|
688
|
-
|
|
689
|
-
// src/orchestration/archivists/ChainFinalized/remote.ts
|
|
597
|
+
// src/orchestration/archivists/ChainSubmissions/archivist.ts
|
|
690
598
|
import { assertEx as assertEx5 } from "@xylabs/sdk-js";
|
|
599
|
+
import { startupSpanAsync } from "@xyo-network/chain-utils";
|
|
600
|
+
import { timeBudget } from "@xyo-network/xl1-protocol-sdk";
|
|
601
|
+
import { Mutex as Mutex4 } from "async-mutex";
|
|
602
|
+
|
|
603
|
+
// src/orchestration/archivists/ChainSubmissions/remote.ts
|
|
604
|
+
import { assertEx as assertEx4 } from "@xylabs/sdk-js";
|
|
691
605
|
import { initBridge, initBridgedArchivistModule } from "@xyo-network/chain-orchestration";
|
|
692
606
|
import { getUrl } from "@xyo-network/xl1-protocol-sdk";
|
|
693
|
-
import { Mutex as
|
|
694
|
-
var
|
|
695
|
-
var
|
|
696
|
-
var
|
|
697
|
-
return await
|
|
698
|
-
if (
|
|
607
|
+
import { Mutex as Mutex3 } from "async-mutex";
|
|
608
|
+
var mutex = new Mutex3();
|
|
609
|
+
var singleton;
|
|
610
|
+
var initRemoteChainSubmissionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
611
|
+
return await mutex.runExclusive(async () => {
|
|
612
|
+
if (singleton) return singleton;
|
|
699
613
|
const { host, port } = config2.mempool.enabled ? config2.mempool : config2.api;
|
|
700
614
|
const nodeUrl = getUrl(host, port);
|
|
701
615
|
const bridge = await initBridge(nodeUrl);
|
|
702
|
-
|
|
703
|
-
bridge,
|
|
704
|
-
moduleName: "XYOChain:Chain:Finalized"
|
|
705
|
-
});
|
|
706
|
-
return assertEx5(singleton2, () => "RemoteChainFinalizedArchivist failed to initialize");
|
|
707
|
-
});
|
|
708
|
-
}, "initRemoteChainFinalizedArchivist");
|
|
709
|
-
|
|
710
|
-
// src/orchestration/archivists/ChainFinalized/archivist.ts
|
|
711
|
-
var mutex3 = new Mutex6();
|
|
712
|
-
var singleton3;
|
|
713
|
-
async function initChainFinalizedArchivist({ config: config2, logger, traceProvider }) {
|
|
714
|
-
return await mutex3.runExclusive(async () => {
|
|
715
|
-
if (singleton3) return singleton3;
|
|
716
|
-
return await timeBudget("initChainFinalizedArchivist", logger, async () => {
|
|
717
|
-
const [remote, local] = await Promise.all([
|
|
718
|
-
startupSpanAsync("ChainFinalizedArchivist:initRemote", () => initRemoteChainFinalizedArchivist({
|
|
719
|
-
config: config2,
|
|
720
|
-
logger
|
|
721
|
-
})),
|
|
722
|
-
startupSpanAsync("ChainFinalizedArchivist:initLocal", () => initLocalChainFinalizedArchivist({
|
|
723
|
-
config: config2,
|
|
724
|
-
logger
|
|
725
|
-
}))
|
|
726
|
-
]);
|
|
727
|
-
await startupSpanAsync("ChainFinalizedArchivist:initArchivistSync", () => initArchivistSync("ChainFinalizedArchivist", remote, local, 200, Number.MAX_SAFE_INTEGER, traceProvider));
|
|
728
|
-
singleton3 = local;
|
|
729
|
-
return singleton3;
|
|
730
|
-
}, 2e3, true);
|
|
731
|
-
});
|
|
732
|
-
}
|
|
733
|
-
__name(initChainFinalizedArchivist, "initChainFinalizedArchivist");
|
|
734
|
-
|
|
735
|
-
// src/orchestration/archivists/ChainSubmissions/archivist.ts
|
|
736
|
-
import { assertEx as assertEx7 } from "@xylabs/sdk-js";
|
|
737
|
-
import { startupSpanAsync as startupSpanAsync2 } from "@xyo-network/chain-utils";
|
|
738
|
-
import { timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
|
|
739
|
-
import { Mutex as Mutex8 } from "async-mutex";
|
|
740
|
-
|
|
741
|
-
// src/orchestration/archivists/ChainSubmissions/remote.ts
|
|
742
|
-
import { assertEx as assertEx6 } from "@xylabs/sdk-js";
|
|
743
|
-
import { initBridge as initBridge2, initBridgedArchivistModule as initBridgedArchivistModule2 } from "@xyo-network/chain-orchestration";
|
|
744
|
-
import { getUrl as getUrl2 } from "@xyo-network/xl1-protocol-sdk";
|
|
745
|
-
import { Mutex as Mutex7 } from "async-mutex";
|
|
746
|
-
var mutex4 = new Mutex7();
|
|
747
|
-
var singleton4;
|
|
748
|
-
var initRemoteChainSubmissionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
749
|
-
return await mutex4.runExclusive(async () => {
|
|
750
|
-
if (singleton4) return singleton4;
|
|
751
|
-
const { host, port } = config2.mempool.enabled ? config2.mempool : config2.api;
|
|
752
|
-
const nodeUrl = getUrl2(host, port);
|
|
753
|
-
const bridge = await initBridge2(nodeUrl);
|
|
754
|
-
singleton4 = await initBridgedArchivistModule2({
|
|
616
|
+
singleton = await initBridgedArchivistModule({
|
|
755
617
|
bridge,
|
|
756
618
|
moduleName: "XYOChain:Chain:Submissions"
|
|
757
619
|
});
|
|
758
|
-
return
|
|
620
|
+
return assertEx4(singleton, () => new Error("Failed to initialize RemoteChainSubmissionsArchivist"));
|
|
759
621
|
});
|
|
760
622
|
}, "initRemoteChainSubmissionsArchivist");
|
|
761
623
|
|
|
762
624
|
// src/orchestration/archivists/ChainSubmissions/archivist.ts
|
|
763
|
-
var
|
|
764
|
-
var
|
|
625
|
+
var mutex2 = new Mutex4();
|
|
626
|
+
var singleton2;
|
|
765
627
|
var initChainSubmissionsArchivist = /* @__PURE__ */ __name(async (params) => {
|
|
766
|
-
return await
|
|
767
|
-
if (
|
|
768
|
-
return await
|
|
769
|
-
const remote = await
|
|
770
|
-
|
|
771
|
-
return
|
|
628
|
+
return await mutex2.runExclusive(async () => {
|
|
629
|
+
if (singleton2) return singleton2;
|
|
630
|
+
return await timeBudget("initChainSubmissionsArchivist", params.logger, async () => {
|
|
631
|
+
const remote = await startupSpanAsync("ChainSubmissionsArchivist:initRemote", () => initRemoteChainSubmissionsArchivist(params));
|
|
632
|
+
singleton2 = remote;
|
|
633
|
+
return assertEx5(singleton2, () => new Error("Failed to initialize ChainSubmissionsArchivist"));
|
|
772
634
|
}, 2e3, true);
|
|
773
635
|
});
|
|
774
636
|
}, "initChainSubmissionsArchivist");
|
|
775
637
|
|
|
776
638
|
// src/orchestration/archivists/PendingTransactions/archivist.ts
|
|
777
|
-
import { initArchivistSync
|
|
778
|
-
import { startupSpanAsync as
|
|
779
|
-
import { timeBudget as
|
|
780
|
-
import { Mutex as
|
|
639
|
+
import { initArchivistSync } from "@xyo-network/chain-orchestration";
|
|
640
|
+
import { startupSpanAsync as startupSpanAsync2 } from "@xyo-network/chain-utils";
|
|
641
|
+
import { timeBudget as timeBudget2 } from "@xyo-network/xl1-protocol-sdk";
|
|
642
|
+
import { Mutex as Mutex7 } from "async-mutex";
|
|
781
643
|
|
|
782
644
|
// src/orchestration/archivists/PendingTransactions/local.ts
|
|
783
645
|
import { MemoryArchivist, MemoryArchivistConfigSchema } from "@xyo-network/archivist-memory";
|
|
784
|
-
import { Mutex as
|
|
785
|
-
var
|
|
786
|
-
var
|
|
646
|
+
import { Mutex as Mutex5 } from "async-mutex";
|
|
647
|
+
var mutex3 = new Mutex5();
|
|
648
|
+
var singleton3;
|
|
787
649
|
var initLocalPendingTransactionsArchivist = /* @__PURE__ */ __name(async () => {
|
|
788
|
-
return await
|
|
789
|
-
if (
|
|
790
|
-
|
|
650
|
+
return await mutex3.runExclusive(async () => {
|
|
651
|
+
if (singleton3) return singleton3;
|
|
652
|
+
singleton3 = await MemoryArchivist.create({
|
|
791
653
|
account: "random",
|
|
792
654
|
config: {
|
|
793
655
|
schema: MemoryArchivistConfigSchema,
|
|
@@ -795,43 +657,43 @@ var initLocalPendingTransactionsArchivist = /* @__PURE__ */ __name(async () => {
|
|
|
795
657
|
name: "localPendingTransactions"
|
|
796
658
|
}
|
|
797
659
|
});
|
|
798
|
-
return
|
|
660
|
+
return singleton3;
|
|
799
661
|
});
|
|
800
662
|
}, "initLocalPendingTransactionsArchivist");
|
|
801
663
|
|
|
802
664
|
// src/orchestration/archivists/PendingTransactions/remote.ts
|
|
803
|
-
import { assertEx as
|
|
804
|
-
import { initBridge as
|
|
805
|
-
import { getUrl as
|
|
806
|
-
import { Mutex as
|
|
807
|
-
var
|
|
808
|
-
var
|
|
665
|
+
import { assertEx as assertEx6 } from "@xylabs/sdk-js";
|
|
666
|
+
import { initBridge as initBridge2, initBridgedArchivistModule as initBridgedArchivistModule2 } from "@xyo-network/chain-orchestration";
|
|
667
|
+
import { getUrl as getUrl2 } from "@xyo-network/xl1-protocol-sdk";
|
|
668
|
+
import { Mutex as Mutex6 } from "async-mutex";
|
|
669
|
+
var mutex4 = new Mutex6();
|
|
670
|
+
var singleton4;
|
|
809
671
|
var initRemotePendingTransactionsArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
810
|
-
return await
|
|
811
|
-
if (
|
|
672
|
+
return await mutex4.runExclusive(async () => {
|
|
673
|
+
if (singleton4) return singleton4;
|
|
812
674
|
const { host, port } = config2.mempool.enabled ? config2.mempool : config2.api;
|
|
813
|
-
const nodeUrl =
|
|
814
|
-
const bridge = await
|
|
815
|
-
|
|
675
|
+
const nodeUrl = getUrl2(host, port);
|
|
676
|
+
const bridge = await initBridge2(nodeUrl);
|
|
677
|
+
singleton4 = await initBridgedArchivistModule2({
|
|
816
678
|
bridge,
|
|
817
679
|
moduleName: "XYOChain:Pending:PendingTransactions"
|
|
818
680
|
});
|
|
819
|
-
return
|
|
681
|
+
return assertEx6(singleton4, () => "RemotePendingBundledTransactionsArchivist is undefined");
|
|
820
682
|
});
|
|
821
683
|
}, "initRemotePendingTransactionsArchivist");
|
|
822
684
|
|
|
823
685
|
// src/orchestration/archivists/PendingTransactions/archivist.ts
|
|
824
|
-
var
|
|
825
|
-
var
|
|
686
|
+
var mutex5 = new Mutex7();
|
|
687
|
+
var singleton5;
|
|
826
688
|
var initPendingBundledTransactionsArchivist = /* @__PURE__ */ __name(async ({ config: config2, logger }) => {
|
|
827
|
-
return await
|
|
828
|
-
if (
|
|
829
|
-
return await
|
|
830
|
-
const remote = await
|
|
689
|
+
return await mutex5.runExclusive(async () => {
|
|
690
|
+
if (singleton5) return singleton5;
|
|
691
|
+
return await timeBudget2("initPendingBundledTransactionsArchivist", logger, async () => {
|
|
692
|
+
const remote = await startupSpanAsync2("PendingBundledTransactionsArchivist:initRemote", () => initRemotePendingTransactionsArchivist({
|
|
831
693
|
config: config2,
|
|
832
694
|
logger
|
|
833
695
|
}));
|
|
834
|
-
const local = await
|
|
696
|
+
const local = await startupSpanAsync2("PendingBundledTransactionsArchivist:initLocal", () => initLocalPendingTransactionsArchivist({
|
|
835
697
|
config: config2,
|
|
836
698
|
logger
|
|
837
699
|
}));
|
|
@@ -840,30 +702,30 @@ var initPendingBundledTransactionsArchivist = /* @__PURE__ */ __name(async ({ co
|
|
|
840
702
|
order: "desc"
|
|
841
703
|
});
|
|
842
704
|
await local.insert(start2);
|
|
843
|
-
await
|
|
844
|
-
|
|
705
|
+
await startupSpanAsync2("PendingBundledTransactionsArchivist:initArchivistSync", () => initArchivistSync("PendingBundledTransactionsArchivist", remote, local));
|
|
706
|
+
singleton5 = [
|
|
845
707
|
local,
|
|
846
708
|
remote
|
|
847
709
|
];
|
|
848
|
-
return
|
|
710
|
+
return singleton5;
|
|
849
711
|
}, 2e3, true);
|
|
850
712
|
});
|
|
851
713
|
}, "initPendingBundledTransactionsArchivist");
|
|
852
714
|
|
|
853
715
|
// src/orchestration/archivists/RejectedTransactions/archivist.ts
|
|
854
|
-
import { startupSpanAsync as
|
|
855
|
-
import { timeBudget as
|
|
856
|
-
import { Mutex as
|
|
716
|
+
import { startupSpanAsync as startupSpanAsync3 } from "@xyo-network/chain-utils";
|
|
717
|
+
import { timeBudget as timeBudget3 } from "@xyo-network/xl1-protocol-sdk";
|
|
718
|
+
import { Mutex as Mutex9 } from "async-mutex";
|
|
857
719
|
|
|
858
720
|
// src/orchestration/archivists/RejectedTransactions/local.ts
|
|
859
721
|
import { MemoryArchivist as MemoryArchivist2, MemoryArchivistConfigSchema as MemoryArchivistConfigSchema2 } from "@xyo-network/archivist-memory";
|
|
860
|
-
import { Mutex as
|
|
861
|
-
var
|
|
862
|
-
var
|
|
722
|
+
import { Mutex as Mutex8 } from "async-mutex";
|
|
723
|
+
var mutex6 = new Mutex8();
|
|
724
|
+
var singleton6;
|
|
863
725
|
var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () => {
|
|
864
|
-
return await
|
|
865
|
-
if (
|
|
866
|
-
|
|
726
|
+
return await mutex6.runExclusive(async () => {
|
|
727
|
+
if (singleton6) return singleton6;
|
|
728
|
+
singleton6 = await MemoryArchivist2.create({
|
|
867
729
|
account: "random",
|
|
868
730
|
config: {
|
|
869
731
|
schema: MemoryArchivistConfigSchema2,
|
|
@@ -871,90 +733,90 @@ var initLocalRejectedTransactionsArchivist = /* @__PURE__ */ __name(async () =>
|
|
|
871
733
|
name: "localRejectedTransactions"
|
|
872
734
|
}
|
|
873
735
|
});
|
|
874
|
-
return
|
|
736
|
+
return singleton6;
|
|
875
737
|
});
|
|
876
738
|
}, "initLocalRejectedTransactionsArchivist");
|
|
877
739
|
|
|
878
740
|
// src/orchestration/archivists/RejectedTransactions/archivist.ts
|
|
879
|
-
var
|
|
880
|
-
var
|
|
741
|
+
var mutex7 = new Mutex9();
|
|
742
|
+
var singleton7;
|
|
881
743
|
async function initRejectedTransactionsArchivist(params) {
|
|
882
|
-
return await
|
|
883
|
-
if (
|
|
884
|
-
return await
|
|
885
|
-
const local = await
|
|
886
|
-
|
|
887
|
-
return
|
|
744
|
+
return await mutex7.runExclusive(async () => {
|
|
745
|
+
if (singleton7) return singleton7;
|
|
746
|
+
return await timeBudget3("initRejectedTransactionsArchivist", params.logger, async () => {
|
|
747
|
+
const local = await startupSpanAsync3("RejectedTransactionsArchivist:initLocal", () => initLocalRejectedTransactionsArchivist(params));
|
|
748
|
+
singleton7 = local;
|
|
749
|
+
return singleton7;
|
|
888
750
|
}, 2e3, true);
|
|
889
751
|
});
|
|
890
752
|
}
|
|
891
753
|
__name(initRejectedTransactionsArchivist, "initRejectedTransactionsArchivist");
|
|
892
754
|
|
|
893
755
|
// src/orchestration/archivists/StakeIntentState/archivist.ts
|
|
894
|
-
import { assertEx as
|
|
895
|
-
import { startupSpanAsync as
|
|
896
|
-
import { timeBudget as
|
|
897
|
-
import { Mutex as
|
|
756
|
+
import { assertEx as assertEx8 } from "@xylabs/sdk-js";
|
|
757
|
+
import { startupSpanAsync as startupSpanAsync4 } from "@xyo-network/chain-utils";
|
|
758
|
+
import { timeBudget as timeBudget4 } from "@xyo-network/xl1-protocol-sdk";
|
|
759
|
+
import { Mutex as Mutex11 } from "async-mutex";
|
|
898
760
|
|
|
899
761
|
// src/orchestration/archivists/StakeIntentState/local.ts
|
|
900
|
-
import { assertEx as
|
|
901
|
-
import { Mutex as
|
|
902
|
-
var
|
|
903
|
-
var
|
|
762
|
+
import { assertEx as assertEx7 } from "@xylabs/sdk-js";
|
|
763
|
+
import { Mutex as Mutex10 } from "async-mutex";
|
|
764
|
+
var mutex8 = new Mutex10();
|
|
765
|
+
var singleton8;
|
|
904
766
|
var initLocalStakeIntentStateArchivist = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
905
|
-
return await
|
|
906
|
-
if (
|
|
767
|
+
return await mutex8.runExclusive(async () => {
|
|
768
|
+
if (singleton8) return singleton8;
|
|
907
769
|
const { root } = config2.storage;
|
|
908
|
-
|
|
909
|
-
return
|
|
770
|
+
singleton8 = await getLocalPersistentArchivist("local-stake-intent-state", "stakeIntent", "state", root);
|
|
771
|
+
return assertEx7(singleton8, () => new Error("Failed to initialize stake intent state archivist"));
|
|
910
772
|
});
|
|
911
773
|
}, "initLocalStakeIntentStateArchivist");
|
|
912
774
|
|
|
913
775
|
// src/orchestration/archivists/StakeIntentState/archivist.ts
|
|
914
|
-
var
|
|
915
|
-
var
|
|
776
|
+
var mutex9 = new Mutex11();
|
|
777
|
+
var singleton9;
|
|
916
778
|
var initStakeIntentStateArchivist = /* @__PURE__ */ __name(async (params) => {
|
|
917
|
-
return await
|
|
918
|
-
if (
|
|
919
|
-
return await
|
|
920
|
-
const local = await
|
|
921
|
-
|
|
922
|
-
return
|
|
779
|
+
return await mutex9.runExclusive(async () => {
|
|
780
|
+
if (singleton9) return singleton9;
|
|
781
|
+
return await timeBudget4("initStakeIntentStateArchivist", params.logger, async () => {
|
|
782
|
+
const local = await startupSpanAsync4("StakeIntentStateArchivist:initLocal", () => initLocalStakeIntentStateArchivist(params));
|
|
783
|
+
singleton9 = local;
|
|
784
|
+
return assertEx8(singleton9, () => "StakeIntentStateArchivist is undefined");
|
|
923
785
|
}, 2e3, true);
|
|
924
786
|
});
|
|
925
787
|
}, "initStakeIntentStateArchivist");
|
|
926
788
|
|
|
927
789
|
// src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts
|
|
928
790
|
import { isDefined as isDefined5 } from "@xylabs/sdk-js";
|
|
929
|
-
import { startupSpanAsync as
|
|
930
|
-
import { timeBudget as
|
|
931
|
-
import { Mutex as
|
|
791
|
+
import { startupSpanAsync as startupSpanAsync5 } from "@xyo-network/chain-utils";
|
|
792
|
+
import { timeBudget as timeBudget5 } from "@xyo-network/xl1-protocol-sdk";
|
|
793
|
+
import { Mutex as Mutex13 } from "async-mutex";
|
|
932
794
|
|
|
933
795
|
// src/orchestration/map/BalanceSummary/initLocalBalanceSummaryMap.ts
|
|
934
796
|
import { isDefined as isDefined4 } from "@xylabs/sdk-js";
|
|
935
797
|
import { getLocalPersistentMap } from "@xyo-network/chain-protocol";
|
|
936
|
-
import { Mutex as
|
|
937
|
-
var
|
|
938
|
-
var
|
|
798
|
+
import { Mutex as Mutex12 } from "async-mutex";
|
|
799
|
+
var mutex10 = new Mutex12();
|
|
800
|
+
var singleton10;
|
|
939
801
|
var initLocalBalanceSummaryMap = /* @__PURE__ */ __name(async (params) => {
|
|
940
|
-
return await
|
|
941
|
-
if (isDefined4(
|
|
802
|
+
return await mutex10.runExclusive(async () => {
|
|
803
|
+
if (isDefined4(singleton10)) return singleton10;
|
|
942
804
|
const { root } = params.config.storage;
|
|
943
|
-
|
|
944
|
-
return
|
|
805
|
+
singleton10 = await getLocalPersistentMap("balance", "summary", root);
|
|
806
|
+
return singleton10;
|
|
945
807
|
});
|
|
946
808
|
}, "initLocalBalanceSummaryMap");
|
|
947
809
|
|
|
948
810
|
// src/orchestration/map/BalanceSummary/initBalanceSummaryMap.ts
|
|
949
|
-
var
|
|
950
|
-
var
|
|
811
|
+
var mutex11 = new Mutex13();
|
|
812
|
+
var singleton11;
|
|
951
813
|
async function initBalanceSummaryMap(params) {
|
|
952
|
-
return await
|
|
953
|
-
if (isDefined5(
|
|
954
|
-
return await
|
|
955
|
-
const local = await
|
|
956
|
-
|
|
957
|
-
return
|
|
814
|
+
return await mutex11.runExclusive(async () => {
|
|
815
|
+
if (isDefined5(singleton11)) return singleton11;
|
|
816
|
+
return await timeBudget5("initBalanceSummaryMap", params.logger, async () => {
|
|
817
|
+
const local = await startupSpanAsync5("BalanceSummaryMap:initLocal", () => initLocalBalanceSummaryMap(params));
|
|
818
|
+
singleton11 = local;
|
|
819
|
+
return singleton11;
|
|
958
820
|
}, 2e3, true);
|
|
959
821
|
});
|
|
960
822
|
}
|
|
@@ -962,77 +824,103 @@ __name(initBalanceSummaryMap, "initBalanceSummaryMap");
|
|
|
962
824
|
|
|
963
825
|
// src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
|
|
964
826
|
import { isDefined as isDefined7 } from "@xylabs/sdk-js";
|
|
965
|
-
import { startupSpanAsync as
|
|
966
|
-
import { timeBudget as
|
|
967
|
-
import { Mutex as
|
|
827
|
+
import { startupSpanAsync as startupSpanAsync6 } from "@xyo-network/chain-utils";
|
|
828
|
+
import { timeBudget as timeBudget6 } from "@xyo-network/xl1-protocol-sdk";
|
|
829
|
+
import { Mutex as Mutex15 } from "async-mutex";
|
|
968
830
|
|
|
969
831
|
// src/orchestration/map/BalanceSummary/initLocalTransferSummaryMap.ts
|
|
970
832
|
import { isDefined as isDefined6 } from "@xylabs/sdk-js";
|
|
971
833
|
import { getLocalPersistentMap as getLocalPersistentMap2 } from "@xyo-network/chain-protocol";
|
|
972
|
-
import { Mutex as
|
|
973
|
-
var
|
|
974
|
-
var
|
|
834
|
+
import { Mutex as Mutex14 } from "async-mutex";
|
|
835
|
+
var mutex12 = new Mutex14();
|
|
836
|
+
var singleton12;
|
|
975
837
|
var initLocalTransferSummaryMap = /* @__PURE__ */ __name(async (params) => {
|
|
976
|
-
return await
|
|
977
|
-
if (isDefined6(
|
|
838
|
+
return await mutex12.runExclusive(async () => {
|
|
839
|
+
if (isDefined6(singleton12)) return singleton12;
|
|
978
840
|
const { root } = params.config.storage;
|
|
979
|
-
|
|
980
|
-
return
|
|
841
|
+
singleton12 = await getLocalPersistentMap2("transfer", "summary", root);
|
|
842
|
+
return singleton12;
|
|
981
843
|
});
|
|
982
844
|
}, "initLocalTransferSummaryMap");
|
|
983
845
|
|
|
984
846
|
// src/orchestration/map/BalanceSummary/initTransferSummaryMap.ts
|
|
985
|
-
var
|
|
986
|
-
var
|
|
847
|
+
var mutex13 = new Mutex15();
|
|
848
|
+
var singleton13;
|
|
987
849
|
async function initTransferSummaryMap(params) {
|
|
988
|
-
return await
|
|
989
|
-
if (isDefined7(
|
|
990
|
-
return await
|
|
991
|
-
const local = await
|
|
992
|
-
|
|
993
|
-
return
|
|
850
|
+
return await mutex13.runExclusive(async () => {
|
|
851
|
+
if (isDefined7(singleton13)) return singleton13;
|
|
852
|
+
return await timeBudget6("initTransferSummaryMap:Init", params.logger, async () => {
|
|
853
|
+
const local = await startupSpanAsync6("TransferSummaryMap:initLocal", () => initLocalTransferSummaryMap(params));
|
|
854
|
+
singleton13 = local;
|
|
855
|
+
return singleton13;
|
|
994
856
|
}, 2e3, true);
|
|
995
857
|
});
|
|
996
858
|
}
|
|
997
859
|
__name(initTransferSummaryMap, "initTransferSummaryMap");
|
|
998
860
|
|
|
999
861
|
// src/orchestration/services/implementation/accountBalance.ts
|
|
1000
|
-
import {
|
|
1001
|
-
import {
|
|
862
|
+
import { isDefined as isDefined8 } from "@xylabs/sdk-js";
|
|
863
|
+
import { AccountBalanceViewerRpcSchemas, HttpRpcTransport, JsonRpcAccountBalanceViewer } from "@xyo-network/xl1-rpc";
|
|
1002
864
|
var balanceServiceSingleton;
|
|
1003
|
-
var initAccountBalanceService = /* @__PURE__ */ __name(
|
|
865
|
+
var initAccountBalanceService = /* @__PURE__ */ __name((params) => {
|
|
1004
866
|
const { config: config2, logger } = params;
|
|
1005
867
|
if (balanceServiceSingleton) return balanceServiceSingleton;
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
868
|
+
const endpoint = config2.services?.accountBalanceViewerEndpoint ?? config2.services?.apiEndpoint;
|
|
869
|
+
if (isDefined8(endpoint)) {
|
|
870
|
+
const transport = new HttpRpcTransport(endpoint, {
|
|
871
|
+
...AccountBalanceViewerRpcSchemas
|
|
872
|
+
});
|
|
873
|
+
const viewer = new JsonRpcAccountBalanceViewer(transport);
|
|
874
|
+
logger?.log("Using AccountBalanceViewer RPC service at", endpoint);
|
|
875
|
+
return viewer;
|
|
876
|
+
} else {
|
|
877
|
+
throw new Error("No AccountBalanceViewer endpoint configured");
|
|
878
|
+
}
|
|
1011
879
|
}, "initAccountBalanceService");
|
|
1012
880
|
|
|
881
|
+
// src/orchestration/services/implementation/blockViewer.ts
|
|
882
|
+
import { isDefined as isDefined9 } from "@xylabs/sdk-js";
|
|
883
|
+
import { BlockViewerRpcSchemas, HttpRpcTransport as HttpRpcTransport2, JsonRpcBlockViewer } from "@xyo-network/xl1-rpc";
|
|
884
|
+
var blockViewerSingleton;
|
|
885
|
+
var initBlockViewer = /* @__PURE__ */ __name((params) => {
|
|
886
|
+
const { config: config2, logger } = params;
|
|
887
|
+
if (blockViewerSingleton) return blockViewerSingleton;
|
|
888
|
+
const endpoint = config2.services?.apiEndpoint;
|
|
889
|
+
if (isDefined9(endpoint)) {
|
|
890
|
+
const transport = new HttpRpcTransport2(endpoint, {
|
|
891
|
+
...BlockViewerRpcSchemas
|
|
892
|
+
});
|
|
893
|
+
const viewer = new JsonRpcBlockViewer(transport);
|
|
894
|
+
logger?.log("Using BlockViewer RPC service at", endpoint);
|
|
895
|
+
return viewer;
|
|
896
|
+
} else {
|
|
897
|
+
throw new Error("No BlockViewer endpoint configured");
|
|
898
|
+
}
|
|
899
|
+
}, "initBlockViewer");
|
|
900
|
+
|
|
1013
901
|
// src/orchestration/services/implementation/chain/index.ts
|
|
1014
|
-
import { assertEx as
|
|
902
|
+
import { assertEx as assertEx14 } from "@xylabs/sdk-js";
|
|
1015
903
|
import { MemoryChainService } from "@xyo-network/chain-services";
|
|
1016
904
|
|
|
1017
905
|
// src/orchestration/services/implementation/chain/evm.ts
|
|
1018
|
-
import { asAddress, assertEx as
|
|
906
|
+
import { asAddress, assertEx as assertEx13, isDefined as isDefined13, ZERO_ADDRESS } from "@xylabs/sdk-js";
|
|
1019
907
|
import { EvmChainService } from "@xyo-network/chain-services";
|
|
1020
908
|
import { Wallet } from "ethers/wallet";
|
|
1021
909
|
|
|
1022
910
|
// src/orchestration/services/implementation/evm/initEvmProvider.ts
|
|
1023
|
-
import { assertEx as
|
|
911
|
+
import { assertEx as assertEx12 } from "@xylabs/sdk-js";
|
|
1024
912
|
|
|
1025
913
|
// src/orchestration/services/implementation/evm/initInfuraProvider.ts
|
|
1026
|
-
import { assertEx as
|
|
914
|
+
import { assertEx as assertEx10, isDefined as isDefined11 } from "@xylabs/sdk-js";
|
|
1027
915
|
import { InfuraProvider } from "ethers/providers";
|
|
1028
916
|
|
|
1029
917
|
// src/orchestration/services/implementation/evm/initChainId.ts
|
|
1030
|
-
import { assertEx as
|
|
918
|
+
import { assertEx as assertEx9, hexFrom, isDefined as isDefined10, isHex } from "@xylabs/sdk-js";
|
|
1031
919
|
var canUseChainId = /* @__PURE__ */ __name((config2) => {
|
|
1032
|
-
return
|
|
920
|
+
return isDefined10(config2.evm.chainId);
|
|
1033
921
|
}, "canUseChainId");
|
|
1034
922
|
var getChainId = /* @__PURE__ */ __name((config2) => {
|
|
1035
|
-
const chainId =
|
|
923
|
+
const chainId = assertEx9(config2.evm.chainId, () => "Missing config.evm.chainId");
|
|
1036
924
|
if (isHex(chainId, {
|
|
1037
925
|
prefix: true
|
|
1038
926
|
})) {
|
|
@@ -1054,11 +942,11 @@ var initInfuraProvider = /* @__PURE__ */ __name((config2) => {
|
|
|
1054
942
|
return instance;
|
|
1055
943
|
}, "initInfuraProvider");
|
|
1056
944
|
var canUseInfuraProvider = /* @__PURE__ */ __name((config2) => {
|
|
1057
|
-
return canUseChainId(config2) &&
|
|
945
|
+
return canUseChainId(config2) && isDefined11(config2.evm?.infura?.projectId) && isDefined11(config2.evm?.infura?.projectSecret);
|
|
1058
946
|
}, "canUseInfuraProvider");
|
|
1059
947
|
var getInfuraProviderConfig = /* @__PURE__ */ __name((config2) => {
|
|
1060
|
-
const projectId =
|
|
1061
|
-
const projectSecret =
|
|
948
|
+
const projectId = assertEx10(config2.evm?.infura?.projectId, () => "Missing config.evm.infura.projectId");
|
|
949
|
+
const projectSecret = assertEx10(config2.evm?.infura?.projectSecret, () => "Missing config.evm.infura.projectSecret");
|
|
1062
950
|
return [
|
|
1063
951
|
getChainId(config2),
|
|
1064
952
|
projectId,
|
|
@@ -1067,17 +955,17 @@ var getInfuraProviderConfig = /* @__PURE__ */ __name((config2) => {
|
|
|
1067
955
|
}, "getInfuraProviderConfig");
|
|
1068
956
|
|
|
1069
957
|
// src/orchestration/services/implementation/evm/initJsonRpcProvider.ts
|
|
1070
|
-
import { assertEx as
|
|
958
|
+
import { assertEx as assertEx11, isDefined as isDefined12 } from "@xylabs/sdk-js";
|
|
1071
959
|
import { JsonRpcProvider } from "ethers/providers";
|
|
1072
960
|
var initJsonRpcProvider = /* @__PURE__ */ __name((config2) => {
|
|
1073
961
|
const providerConfig = getJsonRpcProviderConfig(config2);
|
|
1074
962
|
return Promise.resolve(new JsonRpcProvider(...providerConfig));
|
|
1075
963
|
}, "initJsonRpcProvider");
|
|
1076
964
|
var canUseJsonRpcProvider = /* @__PURE__ */ __name((config2) => {
|
|
1077
|
-
return canUseChainId(config2) &&
|
|
965
|
+
return canUseChainId(config2) && isDefined12(config2.evm.jsonRpc?.url);
|
|
1078
966
|
}, "canUseJsonRpcProvider");
|
|
1079
967
|
var getJsonRpcProviderConfig = /* @__PURE__ */ __name((config2) => {
|
|
1080
|
-
const jsonRpcUrl =
|
|
968
|
+
const jsonRpcUrl = assertEx11(config2.evm.jsonRpc?.url, () => "Missing config.evm.jsonRpc.url");
|
|
1081
969
|
return [
|
|
1082
970
|
jsonRpcUrl,
|
|
1083
971
|
getChainId(config2)
|
|
@@ -1093,7 +981,7 @@ var initEvmProvider = /* @__PURE__ */ __name(async ({ config: config2 }) => {
|
|
|
1093
981
|
} else if (canUseJsonRpcProvider(config2)) {
|
|
1094
982
|
provider = initJsonRpcProvider(config2);
|
|
1095
983
|
}
|
|
1096
|
-
return
|
|
984
|
+
return assertEx12(await provider, () => "No provider available");
|
|
1097
985
|
}, "initEvmProvider");
|
|
1098
986
|
var canUseEvmProvider = /* @__PURE__ */ __name(({ config: config2 }) => {
|
|
1099
987
|
return canUseInfuraProvider(config2) || canUseJsonRpcProvider(config2);
|
|
@@ -1103,18 +991,18 @@ var canUseEvmProvider = /* @__PURE__ */ __name(({ config: config2 }) => {
|
|
|
1103
991
|
var chainStakeServiceSingleton;
|
|
1104
992
|
var canUseEvmContractChainService = /* @__PURE__ */ __name((config2) => {
|
|
1105
993
|
const { id } = config2.chain;
|
|
1106
|
-
return
|
|
994
|
+
return isDefined13(id) && id !== ZERO_ADDRESS && canUseEvmProvider({
|
|
1107
995
|
config: config2
|
|
1108
996
|
});
|
|
1109
997
|
}, "canUseEvmContractChainService");
|
|
1110
998
|
var initEvmContractChainService = /* @__PURE__ */ __name(async ({ account, config: config2, traceProvider, meterProvider, logger }) => {
|
|
1111
999
|
if (chainStakeServiceSingleton) return chainStakeServiceSingleton;
|
|
1112
|
-
const emvStakingContractAddress =
|
|
1113
|
-
const id =
|
|
1114
|
-
const provider2 =
|
|
1000
|
+
const emvStakingContractAddress = assertEx13(config2.chain.id, () => "config.chain.id is required");
|
|
1001
|
+
const id = assertEx13(asAddress(emvStakingContractAddress), () => "config.chain.id is not a valid address");
|
|
1002
|
+
const provider2 = assertEx13(await initEvmProvider({
|
|
1115
1003
|
config: config2
|
|
1116
1004
|
}));
|
|
1117
|
-
const privateKey =
|
|
1005
|
+
const privateKey = assertEx13(account.private?.hex, () => "Account does not have a private key");
|
|
1118
1006
|
const runner = new Wallet(privateKey, provider2);
|
|
1119
1007
|
chainStakeServiceSingleton = EvmChainService.create({
|
|
1120
1008
|
id,
|
|
@@ -1145,7 +1033,7 @@ var initMemoryChainService = /* @__PURE__ */ __name(async ({ config: config2 })
|
|
|
1145
1033
|
config: config2,
|
|
1146
1034
|
name: "MemoryChainService"
|
|
1147
1035
|
});
|
|
1148
|
-
|
|
1036
|
+
assertEx14(await result.start(), () => "Failed to start MemoryChainService");
|
|
1149
1037
|
return result;
|
|
1150
1038
|
}, "initMemoryChainService");
|
|
1151
1039
|
var init = /* @__PURE__ */ __name(async (params) => {
|
|
@@ -1159,13 +1047,13 @@ var init = /* @__PURE__ */ __name(async (params) => {
|
|
|
1159
1047
|
}, "init");
|
|
1160
1048
|
|
|
1161
1049
|
// src/orchestration/services/implementation/head/head.ts
|
|
1162
|
-
import { assertEx as
|
|
1163
|
-
import { findMostRecentBlock
|
|
1050
|
+
import { assertEx as assertEx15, isDefined as isDefined15 } from "@xylabs/sdk-js";
|
|
1051
|
+
import { findMostRecentBlock } from "@xyo-network/xl1-protocol-sdk";
|
|
1164
1052
|
|
|
1165
1053
|
// src/orchestration/services/implementation/head/createBootstrapHead.ts
|
|
1166
1054
|
import { buildNextBlock, createDeclarationIntent as createDeclarationIntent2, createGenesisBlock } from "@xyo-network/chain-protocol";
|
|
1167
1055
|
var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainService) => {
|
|
1168
|
-
const chainId = chainService.chainId;
|
|
1056
|
+
const chainId = await chainService.chainId();
|
|
1169
1057
|
const chain = [];
|
|
1170
1058
|
const genesisBlock = await createGenesisBlock(account, chainId, 10000000n, account.address);
|
|
1171
1059
|
chain.push(genesisBlock);
|
|
@@ -1181,27 +1069,27 @@ var createBootstrapHead = /* @__PURE__ */ __name(async (account, chainService) =
|
|
|
1181
1069
|
|
|
1182
1070
|
// src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
|
|
1183
1071
|
import { buildNextBlock as buildNextBlock2 } from "@xyo-network/chain-protocol";
|
|
1184
|
-
import { PayloadBuilder as
|
|
1072
|
+
import { PayloadBuilder as PayloadBuilder3 } from "@xyo-network/payload-builder";
|
|
1185
1073
|
import { BridgeDestinationObservationSchema } from "@xyo-network/xl1-protocol";
|
|
1186
1074
|
|
|
1187
1075
|
// src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
|
|
1188
|
-
import { toHex as
|
|
1076
|
+
import { toHex as toHex4 } from "@xylabs/sdk-js";
|
|
1189
1077
|
|
|
1190
1078
|
// src/orchestration/services/implementation/head/createForkedHead/config/getForkDetails.ts
|
|
1191
|
-
import { toHex as
|
|
1079
|
+
import { toHex as toHex3 } from "@xylabs/sdk-js";
|
|
1192
1080
|
import { AttoXL1ConvertFactor } from "@xyo-network/xl1-protocol";
|
|
1193
1081
|
var getForkBlockReward = /* @__PURE__ */ __name(() => {
|
|
1194
1082
|
return 18000000000n * AttoXL1ConvertFactor.xl1;
|
|
1195
1083
|
}, "getForkBlockReward");
|
|
1196
1084
|
var getForkBlockRewardHex = /* @__PURE__ */ __name(() => {
|
|
1197
|
-
return
|
|
1085
|
+
return toHex3(getForkBlockReward());
|
|
1198
1086
|
}, "getForkBlockRewardHex");
|
|
1199
1087
|
|
|
1200
1088
|
// src/orchestration/services/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts
|
|
1201
|
-
var ethChainId =
|
|
1202
|
-
var bridgeableTokenContract =
|
|
1203
|
-
var bridgeDestAddress =
|
|
1204
|
-
var destConfirmation =
|
|
1089
|
+
var ethChainId = toHex4("0x1");
|
|
1090
|
+
var bridgeableTokenContract = toHex4("0xf72aE3E0DA743033AbD7A407557D684c1aE66aed");
|
|
1091
|
+
var bridgeDestAddress = toHex4("0x0e65b65B10C791942665030402c35023d88B14dA");
|
|
1092
|
+
var destConfirmation = toHex4("0x950861b10523b52cdbb4a9ee52ed26601db555d2652bfec21c709e5e70d5b7d3");
|
|
1205
1093
|
var getBridgeDestChainId = /* @__PURE__ */ __name(() => ethChainId, "getBridgeDestChainId");
|
|
1206
1094
|
var getBridgeDestToken = /* @__PURE__ */ __name(() => bridgeableTokenContract, "getBridgeDestToken");
|
|
1207
1095
|
var getBridgeDestAddress = /* @__PURE__ */ __name(() => bridgeDestAddress, "getBridgeDestAddress");
|
|
@@ -1217,15 +1105,15 @@ var getBridgeDestinationDetails = /* @__PURE__ */ __name(() => {
|
|
|
1217
1105
|
}, "getBridgeDestinationDetails");
|
|
1218
1106
|
|
|
1219
1107
|
// src/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts
|
|
1220
|
-
var getBridgeSrcChainId = /* @__PURE__ */ __name((chainService) => chainService.chainId, "getBridgeSrcChainId");
|
|
1108
|
+
var getBridgeSrcChainId = /* @__PURE__ */ __name((chainService) => chainService.chainId(), "getBridgeSrcChainId");
|
|
1221
1109
|
var getBridgeSrcAddress = /* @__PURE__ */ __name((account) => account.address, "getBridgeSrcAddress");
|
|
1222
|
-
var getBridgeSrcToken = /* @__PURE__ */ __name((chainService) => chainService.chainId, "getBridgeSrcToken");
|
|
1110
|
+
var getBridgeSrcToken = /* @__PURE__ */ __name((chainService) => chainService.chainId(), "getBridgeSrcToken");
|
|
1223
1111
|
var getBridgeSrcAmount = /* @__PURE__ */ __name(() => getForkBlockRewardHex(), "getBridgeSrcAmount");
|
|
1224
|
-
var getBridgeSourceDetails = /* @__PURE__ */ __name((account, chainService) => {
|
|
1112
|
+
var getBridgeSourceDetails = /* @__PURE__ */ __name(async (account, chainService) => {
|
|
1225
1113
|
return {
|
|
1226
|
-
src: getBridgeSrcChainId(chainService),
|
|
1114
|
+
src: await getBridgeSrcChainId(chainService),
|
|
1227
1115
|
srcAddress: getBridgeSrcAddress(account),
|
|
1228
|
-
srcToken: getBridgeSrcToken(chainService),
|
|
1116
|
+
srcToken: await getBridgeSrcToken(chainService),
|
|
1229
1117
|
srcAmount: getBridgeSrcAmount()
|
|
1230
1118
|
};
|
|
1231
1119
|
}, "getBridgeSourceDetails");
|
|
@@ -1233,11 +1121,11 @@ var getBridgeSourceDetails = /* @__PURE__ */ __name((account, chainService) => {
|
|
|
1233
1121
|
// src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts
|
|
1234
1122
|
var getBridgeDestinationObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
1235
1123
|
const bridgeDestinationObservationFields = {
|
|
1236
|
-
...getBridgeSourceDetails(account, chainService),
|
|
1124
|
+
...await getBridgeSourceDetails(account, chainService),
|
|
1237
1125
|
...getBridgeDestinationDetails(),
|
|
1238
1126
|
destConfirmation: getBridgeDestConfirmation()
|
|
1239
1127
|
};
|
|
1240
|
-
const bridgeDestinationObservation = new
|
|
1128
|
+
const bridgeDestinationObservation = new PayloadBuilder3({
|
|
1241
1129
|
schema: BridgeDestinationObservationSchema
|
|
1242
1130
|
}).fields(bridgeDestinationObservationFields).build();
|
|
1243
1131
|
return await buildNextBlock2(previousBlock[0], [], [
|
|
@@ -1249,7 +1137,7 @@ var getBridgeDestinationObservation = /* @__PURE__ */ __name(async (previousBloc
|
|
|
1249
1137
|
|
|
1250
1138
|
// src/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.ts
|
|
1251
1139
|
import { buildNextBlock as buildNextBlock3, createTransferPayload } from "@xyo-network/chain-protocol";
|
|
1252
|
-
import { PayloadBuilder as
|
|
1140
|
+
import { PayloadBuilder as PayloadBuilder4 } from "@xyo-network/payload-builder";
|
|
1253
1141
|
import { BridgeIntentSchema, XYO_BRIDGE_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
1254
1142
|
var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
1255
1143
|
const transferPayload = createTransferPayload(account.address, {
|
|
@@ -1257,11 +1145,11 @@ var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chai
|
|
|
1257
1145
|
});
|
|
1258
1146
|
const nonce = `${Date.now()}`;
|
|
1259
1147
|
const bridgeIntentFields = {
|
|
1260
|
-
...getBridgeSourceDetails(account, chainService),
|
|
1148
|
+
...await getBridgeSourceDetails(account, chainService),
|
|
1261
1149
|
...getBridgeDestinationDetails(),
|
|
1262
1150
|
nonce
|
|
1263
1151
|
};
|
|
1264
|
-
const bridgeIntent = new
|
|
1152
|
+
const bridgeIntent = new PayloadBuilder4({
|
|
1265
1153
|
schema: BridgeIntentSchema
|
|
1266
1154
|
}).fields(bridgeIntentFields).build();
|
|
1267
1155
|
return await buildNextBlock3(previousBlock[0], [], [
|
|
@@ -1274,17 +1162,17 @@ var getBridgeIntent = /* @__PURE__ */ __name(async (previousBlock, account, chai
|
|
|
1274
1162
|
|
|
1275
1163
|
// src/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.ts
|
|
1276
1164
|
import { buildNextBlock as buildNextBlock4 } from "@xyo-network/chain-protocol";
|
|
1277
|
-
import { PayloadBuilder as
|
|
1165
|
+
import { PayloadBuilder as PayloadBuilder5 } from "@xyo-network/payload-builder";
|
|
1278
1166
|
import { BridgeSourceObservationSchema } from "@xyo-network/xl1-protocol";
|
|
1279
1167
|
var getBridgeSourceObservation = /* @__PURE__ */ __name(async (previousBlock, account, chainService) => {
|
|
1280
1168
|
const srcTxHash = previousBlock[0]._hash;
|
|
1281
1169
|
const bridgeSourceObservationFields = {
|
|
1282
|
-
...getBridgeSourceDetails(account, chainService),
|
|
1170
|
+
...await getBridgeSourceDetails(account, chainService),
|
|
1283
1171
|
...getBridgeDestinationDetails(),
|
|
1284
1172
|
// Observation
|
|
1285
1173
|
srcConfirmation: srcTxHash
|
|
1286
1174
|
};
|
|
1287
|
-
const bridgeSourceObservation = new
|
|
1175
|
+
const bridgeSourceObservation = new PayloadBuilder5({
|
|
1288
1176
|
schema: BridgeSourceObservationSchema
|
|
1289
1177
|
}).fields(bridgeSourceObservationFields).build();
|
|
1290
1178
|
return await buildNextBlock4(previousBlock[0], [], [
|
|
@@ -1299,7 +1187,7 @@ import { buildBlock } from "@xyo-network/chain-protocol";
|
|
|
1299
1187
|
import { AttoXL1, XYO_STEP_REWARD_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
1300
1188
|
var getFirstBlockForNewChain = /* @__PURE__ */ __name(async (forkBlock, account, chainService) => {
|
|
1301
1189
|
const { _hash: previousBlockHash, block: previousBlockNumber, step_hashes: previousStepHashes = [], protocol } = forkBlock;
|
|
1302
|
-
const chainId = chainService.chainId;
|
|
1190
|
+
const chainId = await chainService.chainId();
|
|
1303
1191
|
const options = {
|
|
1304
1192
|
blockPayloads: [],
|
|
1305
1193
|
chainId,
|
|
@@ -1332,14 +1220,14 @@ var createForkedHead = /* @__PURE__ */ __name(async (forkFromBlock, account, cha
|
|
|
1332
1220
|
}, "createForkedHead");
|
|
1333
1221
|
|
|
1334
1222
|
// src/orchestration/services/implementation/head/getForkFromBlock.ts
|
|
1335
|
-
import { asHash, hexFromBigInt, isDefined as
|
|
1223
|
+
import { asHash, hexFromBigInt, isDefined as isDefined14 } from "@xylabs/sdk-js";
|
|
1336
1224
|
import { isSignedBlockBoundWitnessWithHashMeta } from "@xyo-network/xl1-protocol";
|
|
1337
1225
|
var getForkFromBlock = /* @__PURE__ */ __name(async (head, chainService, chainArchivist) => {
|
|
1338
|
-
if (head.chain !== chainService.chainId) {
|
|
1226
|
+
if (head.chain !== await chainService.chainId()) {
|
|
1339
1227
|
const forkedAtBigInt = await chainService.forkedAtHash();
|
|
1340
1228
|
const forkedAtHex = hexFromBigInt(forkedAtBigInt);
|
|
1341
1229
|
const forkedAtHash = asHash(forkedAtHex);
|
|
1342
|
-
if (
|
|
1230
|
+
if (isDefined14(forkedAtHash)) {
|
|
1343
1231
|
const [forkedAtBlock] = await chainArchivist.get([
|
|
1344
1232
|
forkedAtHash
|
|
1345
1233
|
]);
|
|
@@ -1374,19 +1262,19 @@ var headSingleton;
|
|
|
1374
1262
|
var initHead = /* @__PURE__ */ __name(async (params) => {
|
|
1375
1263
|
const { account, chainArchivist, chainSubmissionsArchivistWrite, chainService } = params;
|
|
1376
1264
|
if (headSingleton) return headSingleton;
|
|
1377
|
-
let head = await
|
|
1265
|
+
let head = await findMostRecentBlock(chainArchivist);
|
|
1378
1266
|
if (head) {
|
|
1379
1267
|
const forkFromBlock = await getForkFromBlock(head, chainService, chainArchivist);
|
|
1380
|
-
if (
|
|
1268
|
+
if (isDefined15(forkFromBlock)) {
|
|
1381
1269
|
const chain = await createForkedHead(forkFromBlock, account, chainService);
|
|
1382
1270
|
await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
|
|
1383
|
-
const newBlock =
|
|
1271
|
+
const newBlock = assertEx15(chain.at(-1), () => new Error("Failed to get new head after forking"));
|
|
1384
1272
|
head = newBlock[0];
|
|
1385
1273
|
}
|
|
1386
1274
|
} else {
|
|
1387
1275
|
const chain = await createBootstrapHead(account, chainService);
|
|
1388
1276
|
await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite);
|
|
1389
|
-
const newBlock =
|
|
1277
|
+
const newBlock = assertEx15(chain.at(-1), () => new Error("Failed to get new head after genesis"));
|
|
1390
1278
|
head = newBlock[0];
|
|
1391
1279
|
}
|
|
1392
1280
|
headSingleton = head;
|
|
@@ -1394,37 +1282,49 @@ var initHead = /* @__PURE__ */ __name(async (params) => {
|
|
|
1394
1282
|
}, "initHead");
|
|
1395
1283
|
|
|
1396
1284
|
// src/orchestration/services/implementation/pendingTransactions.ts
|
|
1285
|
+
import { isDefined as isDefined16 } from "@xylabs/sdk-js";
|
|
1397
1286
|
import { BasePendingTransactionsService } from "@xyo-network/chain-services";
|
|
1398
|
-
import { timeBudget as
|
|
1287
|
+
import { timeBudget as timeBudget7 } from "@xyo-network/xl1-protocol-sdk";
|
|
1288
|
+
import { HttpRpcTransport as HttpRpcTransport3, JsonRpcMempoolViewer, MempoolViewerRpcSchemas } from "@xyo-network/xl1-rpc";
|
|
1399
1289
|
var serviceSingleton;
|
|
1400
|
-
var initPendingTransactions = /* @__PURE__ */ __name(async (params) => {
|
|
1290
|
+
var initPendingTransactions = /* @__PURE__ */ __name(async ({ config: config2, params, logger }) => {
|
|
1401
1291
|
if (serviceSingleton) return serviceSingleton;
|
|
1402
|
-
return await
|
|
1403
|
-
|
|
1292
|
+
return await timeBudget7("initPendingTransactions", logger, async () => {
|
|
1293
|
+
const endpoint = config2.services?.apiEndpoint;
|
|
1294
|
+
if (isDefined16(endpoint)) {
|
|
1295
|
+
const transport = new HttpRpcTransport3(endpoint, {
|
|
1296
|
+
...MempoolViewerRpcSchemas
|
|
1297
|
+
});
|
|
1298
|
+
const viewer = new JsonRpcMempoolViewer(transport);
|
|
1299
|
+
logger?.log("Using MempoolViewer RPC service at", endpoint);
|
|
1300
|
+
return viewer;
|
|
1301
|
+
} else {
|
|
1302
|
+
serviceSingleton = await BasePendingTransactionsService.create(params);
|
|
1303
|
+
}
|
|
1404
1304
|
return serviceSingleton;
|
|
1405
1305
|
}, 2e3, true);
|
|
1406
1306
|
}, "initPendingTransactions");
|
|
1407
1307
|
|
|
1408
1308
|
// src/orchestration/services/implementation/producer.ts
|
|
1409
1309
|
import { BaseBlockProducerService as BaseBlockProducerService2 } from "@xyo-network/chain-services";
|
|
1410
|
-
import { timeBudget as
|
|
1310
|
+
import { timeBudget as timeBudget8 } from "@xyo-network/xl1-protocol-sdk";
|
|
1411
1311
|
var serviceSingleton2;
|
|
1412
1312
|
var initBlockProducer = /* @__PURE__ */ __name(async (params) => {
|
|
1413
1313
|
if (serviceSingleton2) return serviceSingleton2;
|
|
1414
|
-
return await
|
|
1314
|
+
return await timeBudget8("initBlockProducer", params.logger, async () => {
|
|
1415
1315
|
serviceSingleton2 = await BaseBlockProducerService2.create(params);
|
|
1416
1316
|
return serviceSingleton2;
|
|
1417
1317
|
}, 2e3, true);
|
|
1418
1318
|
}, "initBlockProducer");
|
|
1419
1319
|
|
|
1420
1320
|
// src/orchestration/services/implementation/reward.ts
|
|
1421
|
-
import { assertEx as
|
|
1321
|
+
import { assertEx as assertEx16 } from "@xylabs/sdk-js";
|
|
1422
1322
|
import { EvmBlockRewardService, MemoryBlockRewardService } from "@xyo-network/chain-services";
|
|
1423
|
-
import { timeBudget as
|
|
1323
|
+
import { timeBudget as timeBudget9 } from "@xyo-network/xl1-protocol-sdk";
|
|
1424
1324
|
var rewardServiceSingleton;
|
|
1425
1325
|
var initBlockRewardService = /* @__PURE__ */ __name((params) => {
|
|
1426
1326
|
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1427
|
-
return
|
|
1327
|
+
return timeBudget9("initBlockRewardService", params.logger, () => {
|
|
1428
1328
|
const { config: config2 } = params;
|
|
1429
1329
|
rewardServiceSingleton = canUseEvmBlockRewardService({
|
|
1430
1330
|
config: config2
|
|
@@ -1434,7 +1334,7 @@ var initBlockRewardService = /* @__PURE__ */ __name((params) => {
|
|
|
1434
1334
|
}, "initBlockRewardService");
|
|
1435
1335
|
var initXyoBlockRewardService = /* @__PURE__ */ __name((params) => {
|
|
1436
1336
|
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1437
|
-
return
|
|
1337
|
+
return timeBudget9("initXyoBlockRewardService", params.logger, () => {
|
|
1438
1338
|
rewardServiceSingleton = MemoryBlockRewardService.create(params);
|
|
1439
1339
|
return rewardServiceSingleton;
|
|
1440
1340
|
}, 2e3, true);
|
|
@@ -1444,10 +1344,10 @@ var canUseEvmBlockRewardService = /* @__PURE__ */ __name((params) => canUseEvmPr
|
|
|
1444
1344
|
}), "canUseEvmBlockRewardService");
|
|
1445
1345
|
var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
|
|
1446
1346
|
if (rewardServiceSingleton) return rewardServiceSingleton;
|
|
1447
|
-
return await
|
|
1347
|
+
return await timeBudget9("initEvmBlockRewardService", params.logger, async () => {
|
|
1448
1348
|
const { account: paramsAccount } = params;
|
|
1449
|
-
const account =
|
|
1450
|
-
const provider2 =
|
|
1349
|
+
const account = assertEx16(paramsAccount, () => "Account is required");
|
|
1350
|
+
const provider2 = assertEx16(await initEvmProvider(params));
|
|
1451
1351
|
const evmBlockRewardServiceParams = {
|
|
1452
1352
|
...params,
|
|
1453
1353
|
provider: provider2,
|
|
@@ -1460,19 +1360,18 @@ var initEvmBlockRewardService = /* @__PURE__ */ __name(async (params) => {
|
|
|
1460
1360
|
|
|
1461
1361
|
// src/orchestration/services/implementation/time.ts
|
|
1462
1362
|
import { BaseTimeSyncService } from "@xyo-network/chain-services";
|
|
1463
|
-
import { timeBudget as
|
|
1363
|
+
import { timeBudget as timeBudget10 } from "@xyo-network/xl1-protocol-sdk";
|
|
1464
1364
|
var timeSyncServiceSingleton;
|
|
1465
|
-
var initTimeService = /* @__PURE__ */ __name(async ({
|
|
1365
|
+
var initTimeService = /* @__PURE__ */ __name(async ({ blockViewer, config: config2, logger, meterProvider, traceProvider }) => {
|
|
1466
1366
|
if (timeSyncServiceSingleton) return timeSyncServiceSingleton;
|
|
1467
|
-
return await
|
|
1367
|
+
return await timeBudget10("initTimeService", logger, async () => {
|
|
1468
1368
|
const ethProvider = canUseEvmProvider({
|
|
1469
1369
|
config: config2
|
|
1470
1370
|
}) ? await initEvmProvider({
|
|
1471
1371
|
config: config2
|
|
1472
1372
|
}) : void 0;
|
|
1473
1373
|
timeSyncServiceSingleton = BaseTimeSyncService.create({
|
|
1474
|
-
|
|
1475
|
-
chainIterator,
|
|
1374
|
+
blockViewer,
|
|
1476
1375
|
ethProvider,
|
|
1477
1376
|
logger,
|
|
1478
1377
|
meterProvider,
|
|
@@ -1484,11 +1383,11 @@ var initTimeService = /* @__PURE__ */ __name(async ({ chainArchivist, chainItera
|
|
|
1484
1383
|
|
|
1485
1384
|
// src/orchestration/services/implementation/transfer.ts
|
|
1486
1385
|
import { BaseAccountTransfersService } from "@xyo-network/chain-services";
|
|
1487
|
-
import { timeBudget as
|
|
1386
|
+
import { timeBudget as timeBudget11 } from "@xyo-network/xl1-protocol-sdk";
|
|
1488
1387
|
var transferServiceSingleton;
|
|
1489
1388
|
var initTransferService = /* @__PURE__ */ __name(async (params) => {
|
|
1490
1389
|
if (transferServiceSingleton) return transferServiceSingleton;
|
|
1491
|
-
return await
|
|
1390
|
+
return await timeBudget11("initTransferService", params.logger, async () => {
|
|
1492
1391
|
transferServiceSingleton = await BaseAccountTransfersService.create(params);
|
|
1493
1392
|
return transferServiceSingleton;
|
|
1494
1393
|
}, 2e3, true);
|
|
@@ -1595,7 +1494,7 @@ var RuntimeStatusMonitor = class extends LoggerStatusReporter {
|
|
|
1595
1494
|
// src/orchestration/initServices.ts
|
|
1596
1495
|
var isStartable = /* @__PURE__ */ __name((value) => {
|
|
1597
1496
|
const possibleStartable = value;
|
|
1598
|
-
return
|
|
1497
|
+
return isDefined17(possibleStartable.start) && typeof possibleStartable.start === "function" && possibleStartable.status === "created";
|
|
1599
1498
|
}, "isStartable");
|
|
1600
1499
|
var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
1601
1500
|
const { config: config2, logger } = context;
|
|
@@ -1611,7 +1510,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1611
1510
|
logger.error("Producer encountered an unhandled error!");
|
|
1612
1511
|
process.exit(1);
|
|
1613
1512
|
});
|
|
1614
|
-
await
|
|
1513
|
+
await startupSpanAsync7("initHealthEndpoints", () => initHealthEndpoints({
|
|
1615
1514
|
...context,
|
|
1616
1515
|
statusReporter
|
|
1617
1516
|
}));
|
|
@@ -1629,8 +1528,8 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1629
1528
|
}
|
|
1630
1529
|
};
|
|
1631
1530
|
const [{ traceProvider, meterProvider }, account] = await Promise.all([
|
|
1632
|
-
|
|
1633
|
-
|
|
1531
|
+
startupSpanAsync7("initTelemetry", () => initTelemetry(telemetryConfig)),
|
|
1532
|
+
startupSpanAsync7("initProducerAccount", () => initProducerAccount(context))
|
|
1634
1533
|
]);
|
|
1635
1534
|
const allowedRewardRedeemers = config2.validation?.allowedRewardRedeemers ?? [];
|
|
1636
1535
|
const allowedRewardEscrowAccountSigners = config2.validation?.allowedRewardEscrowAccountSigners ?? [];
|
|
@@ -1646,32 +1545,23 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1646
1545
|
statusReporter,
|
|
1647
1546
|
traceProvider
|
|
1648
1547
|
};
|
|
1649
|
-
const [
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
startupSpanAsync8("ChainService", () => initChainService({
|
|
1548
|
+
const [[pendingBundledTransactionsArchivist, pendingBundledTransactionsArchivistWrite], rejectedTransactionsArchivist, chainSubmissionsArchivistWrite, stakeIntentStateArchivist, chainService, balanceSummaryMap] = await Promise.all([
|
|
1549
|
+
startupSpanAsync7("PendingBundledTransactionsArchivist", () => initPendingBundledTransactionsArchivist(initParams)),
|
|
1550
|
+
startupSpanAsync7("RejectedTransactionsArchivist", () => initRejectedTransactionsArchivist(initParams)),
|
|
1551
|
+
startupSpanAsync7("ChainSubmissionsArchivist", () => initChainSubmissionsArchivist(initParams)),
|
|
1552
|
+
startupSpanAsync7("StakeIntentStateArchivist", () => initStakeIntentStateArchivist(initParams)),
|
|
1553
|
+
startupSpanAsync7("ChainService", () => initChainService({
|
|
1656
1554
|
...initParams,
|
|
1657
1555
|
account,
|
|
1658
1556
|
name: "ChainService"
|
|
1659
1557
|
})),
|
|
1660
|
-
|
|
1661
|
-
|
|
1558
|
+
startupSpanAsync7("BalanceSummaryMap", () => initBalanceSummaryMap(initParams)),
|
|
1559
|
+
startupSpanAsync7("TransferSummaryMap", () => initTransferSummaryMap(initParams))
|
|
1662
1560
|
]);
|
|
1663
|
-
const chainId = chainService.chainId;
|
|
1664
|
-
const chainMap = readPayloadMapFromStore(chainArchivist);
|
|
1561
|
+
const chainId = await chainService.chainId();
|
|
1665
1562
|
const chainContractViewer = chainService;
|
|
1666
1563
|
const chainStakeViewer = chainService;
|
|
1667
1564
|
const chainStaker = chainService;
|
|
1668
|
-
const head = await startupSpanAsync8("initHead", () => initHead({
|
|
1669
|
-
...initParams,
|
|
1670
|
-
account,
|
|
1671
|
-
chainArchivist,
|
|
1672
|
-
chainSubmissionsArchivistWrite,
|
|
1673
|
-
chainService
|
|
1674
|
-
}));
|
|
1675
1565
|
const additionalPendingTransactionValidators = [
|
|
1676
1566
|
TransactionTransfersValidatorFactory([
|
|
1677
1567
|
SelfSignerValidator,
|
|
@@ -1679,98 +1569,48 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1679
1569
|
DerivedReceiveAddressValidatorFactory(allowedRewardEscrowAccountSigners, "reward-escrow")
|
|
1680
1570
|
])
|
|
1681
1571
|
];
|
|
1682
|
-
const [pendingTransactionsService, rewardService
|
|
1683
|
-
|
|
1684
|
-
|
|
1685
|
-
|
|
1686
|
-
|
|
1687
|
-
|
|
1688
|
-
|
|
1689
|
-
|
|
1690
|
-
|
|
1572
|
+
const [pendingTransactionsService, rewardService] = await Promise.all([
|
|
1573
|
+
startupSpanAsync7("PendingTransactions", () => initPendingTransactions({
|
|
1574
|
+
config: config2,
|
|
1575
|
+
params: {
|
|
1576
|
+
name: "PendingTransactionsService",
|
|
1577
|
+
chainId,
|
|
1578
|
+
pendingBundledTransactionsArchivist,
|
|
1579
|
+
rejectedTransactionsArchivist,
|
|
1580
|
+
additionalPendingTransactionValidators,
|
|
1581
|
+
...initParams
|
|
1582
|
+
}
|
|
1691
1583
|
})),
|
|
1692
|
-
|
|
1584
|
+
startupSpanAsync7("RewardService", () => initBlockRewardService({
|
|
1693
1585
|
name: "RewardService",
|
|
1694
1586
|
account,
|
|
1695
1587
|
chainService,
|
|
1696
1588
|
...initParams
|
|
1697
|
-
})),
|
|
1698
|
-
startupSpanAsync8("ChainIterator", () => initChainIterator({
|
|
1699
|
-
name: "ChainIterator",
|
|
1700
|
-
chainMap,
|
|
1701
|
-
head,
|
|
1702
|
-
...initParams
|
|
1703
|
-
}))
|
|
1704
|
-
]);
|
|
1705
|
-
const blockViewer = blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist);
|
|
1706
|
-
const balanceContext = {
|
|
1707
|
-
stepSemaphores: StepSizes.map(() => new Semaphore2(20)),
|
|
1708
|
-
store: {
|
|
1709
|
-
chainMap
|
|
1710
|
-
},
|
|
1711
|
-
head: /* @__PURE__ */ __name(async () => {
|
|
1712
|
-
const head2 = await chainIterator.head();
|
|
1713
|
-
return [
|
|
1714
|
-
head2._hash,
|
|
1715
|
-
head2.block
|
|
1716
|
-
];
|
|
1717
|
-
}, "head"),
|
|
1718
|
-
chainId,
|
|
1719
|
-
summaryMap: balanceSummaryMap
|
|
1720
|
-
};
|
|
1721
|
-
const transferContext = {
|
|
1722
|
-
stepSemaphores: StepSizes.map(() => new Semaphore2(20)),
|
|
1723
|
-
store: {
|
|
1724
|
-
chainMap
|
|
1725
|
-
},
|
|
1726
|
-
head: /* @__PURE__ */ __name(async () => {
|
|
1727
|
-
const head2 = await chainIterator.head();
|
|
1728
|
-
return [
|
|
1729
|
-
head2._hash,
|
|
1730
|
-
head2.block
|
|
1731
|
-
];
|
|
1732
|
-
}, "head"),
|
|
1733
|
-
chainId,
|
|
1734
|
-
summaryMap: transferSummaryMap
|
|
1735
|
-
};
|
|
1736
|
-
const [balanceService] = await Promise.all([
|
|
1737
|
-
startupSpanAsync8("BalanceService", () => initAccountBalanceService({
|
|
1738
|
-
params: {
|
|
1739
|
-
name: "BalanceService",
|
|
1740
|
-
config: {},
|
|
1741
|
-
context: balanceContext,
|
|
1742
|
-
blockViewer,
|
|
1743
|
-
chainArchivist,
|
|
1744
|
-
chainIterator,
|
|
1745
|
-
transferContext
|
|
1746
|
-
},
|
|
1747
|
-
...initParams
|
|
1748
|
-
})),
|
|
1749
|
-
startupSpanAsync8("TransferService", () => initTransferService({
|
|
1750
|
-
name: "TransferService",
|
|
1751
|
-
context: transferContext,
|
|
1752
|
-
...initParams
|
|
1753
1589
|
}))
|
|
1754
1590
|
]);
|
|
1591
|
+
const blockViewer = await startupSpanAsync7("BlockViewer", () => initBlockViewer({
|
|
1592
|
+
...initParams
|
|
1593
|
+
}));
|
|
1594
|
+
const balanceService = await startupSpanAsync7("BalanceService", () => initAccountBalanceService({
|
|
1595
|
+
...initParams
|
|
1596
|
+
}));
|
|
1755
1597
|
const [stakeIntentService, time] = await Promise.all([
|
|
1756
|
-
|
|
1598
|
+
startupSpanAsync7("StakeIntentService", () => initStakeIntentService({
|
|
1757
1599
|
name: "StakeIntentService",
|
|
1758
|
-
|
|
1759
|
-
chainIterator,
|
|
1600
|
+
blockViewer,
|
|
1760
1601
|
chainStakeViewer,
|
|
1761
1602
|
stakeIntentStateArchivist,
|
|
1762
1603
|
...initParams
|
|
1763
1604
|
})),
|
|
1764
|
-
|
|
1605
|
+
startupSpanAsync7("TimeService", () => initTimeService({
|
|
1765
1606
|
name: "TimeService",
|
|
1766
|
-
|
|
1767
|
-
chainIterator,
|
|
1607
|
+
blockViewer,
|
|
1768
1608
|
...initParams
|
|
1769
1609
|
}))
|
|
1770
1610
|
]);
|
|
1771
|
-
const electionService = await
|
|
1611
|
+
const electionService = await startupSpanAsync7("ElectionService", () => initElectionService({
|
|
1772
1612
|
name: "ElectionService",
|
|
1773
|
-
|
|
1613
|
+
blockViewer,
|
|
1774
1614
|
chainStakeViewer,
|
|
1775
1615
|
stakeIntentService,
|
|
1776
1616
|
...initParams
|
|
@@ -1780,19 +1620,19 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1780
1620
|
account,
|
|
1781
1621
|
chainId,
|
|
1782
1622
|
pendingBundledTransactionsArchivist,
|
|
1783
|
-
|
|
1623
|
+
blockViewer,
|
|
1784
1624
|
electionService,
|
|
1785
1625
|
rewardService,
|
|
1786
1626
|
stakeIntentService,
|
|
1787
1627
|
validateHydratedBlockState,
|
|
1788
1628
|
...initParams
|
|
1789
1629
|
};
|
|
1790
|
-
const rewardAddress =
|
|
1630
|
+
const rewardAddress = isDefined17(config2.producer.rewardAddress) ? assertEx17(asAddress2(config2.producer.rewardAddress), () => "Invalid block reward address provided") : account.address;
|
|
1791
1631
|
const producerParams = {
|
|
1792
1632
|
...validatorParams,
|
|
1793
1633
|
name: "Producer",
|
|
1794
1634
|
balanceService,
|
|
1795
|
-
|
|
1635
|
+
blockViewer,
|
|
1796
1636
|
pendingBundledTransactionsArchivist,
|
|
1797
1637
|
pendingTransactionsService,
|
|
1798
1638
|
rejectedTransactionsArchivist,
|
|
@@ -1800,13 +1640,12 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1800
1640
|
time,
|
|
1801
1641
|
...initParams
|
|
1802
1642
|
};
|
|
1803
|
-
const producer = await
|
|
1643
|
+
const producer = await startupSpanAsync7("Producer", () => initBlockProducer(producerParams));
|
|
1804
1644
|
const services = {
|
|
1805
1645
|
account,
|
|
1806
1646
|
balance: balanceService,
|
|
1807
|
-
chainArchivist,
|
|
1808
1647
|
chainContractViewer,
|
|
1809
|
-
|
|
1648
|
+
blockViewer,
|
|
1810
1649
|
chainStaker,
|
|
1811
1650
|
chainStakeViewer,
|
|
1812
1651
|
chainSubmissionsArchivistWrite,
|
|
@@ -1822,7 +1661,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1822
1661
|
balanceSummaryMap,
|
|
1823
1662
|
...Object.values(services)
|
|
1824
1663
|
].filter(isStartable);
|
|
1825
|
-
|
|
1664
|
+
assertEx17((await Promise.all(startableServices.map((service) => service.start()))).every(Boolean), () => "One or more services failed to start");
|
|
1826
1665
|
logger?.log("All services started successfully.");
|
|
1827
1666
|
return {
|
|
1828
1667
|
...services,
|
|
@@ -1831,7 +1670,7 @@ var initServices = /* @__PURE__ */ __name(async (context) => {
|
|
|
1831
1670
|
}, "initServices");
|
|
1832
1671
|
|
|
1833
1672
|
// src/runCLI.ts
|
|
1834
|
-
import { deepMerge, isDefined as
|
|
1673
|
+
import { deepMerge, isDefined as isDefined21 } from "@xylabs/sdk-js";
|
|
1835
1674
|
import { ConfigZod } from "@xyo-network/xl1-protocol-sdk";
|
|
1836
1675
|
import yargs from "yargs";
|
|
1837
1676
|
import { hideBin } from "yargs/helpers";
|
|
@@ -1859,6 +1698,7 @@ function runMempool(context) {
|
|
|
1859
1698
|
__name(runMempool, "runMempool");
|
|
1860
1699
|
|
|
1861
1700
|
// src/commands/producer/runProducer.ts
|
|
1701
|
+
import { exists, isDefined as isDefined18 } from "@xylabs/sdk-js";
|
|
1862
1702
|
var runProducer = /* @__PURE__ */ __name(async (context) => {
|
|
1863
1703
|
const { config: config2, logger, orchestrator } = context;
|
|
1864
1704
|
logger?.log("Services: Initializing...");
|
|
@@ -1868,11 +1708,8 @@ var runProducer = /* @__PURE__ */ __name(async (context) => {
|
|
|
1868
1708
|
...services,
|
|
1869
1709
|
config: config2
|
|
1870
1710
|
};
|
|
1871
|
-
const
|
|
1872
|
-
|
|
1873
|
-
name: "ChainHeadUpdateActor"
|
|
1874
|
-
});
|
|
1875
|
-
const balances = await BalanceActor.create({
|
|
1711
|
+
const apiEndpoint = config2.services.apiEndpoint;
|
|
1712
|
+
const balances = isDefined18(apiEndpoint) ? void 0 : await BalanceActor.create({
|
|
1876
1713
|
...params,
|
|
1877
1714
|
name: "BalanceActor"
|
|
1878
1715
|
});
|
|
@@ -1881,10 +1718,9 @@ var runProducer = /* @__PURE__ */ __name(async (context) => {
|
|
|
1881
1718
|
name: "ProducerActor"
|
|
1882
1719
|
});
|
|
1883
1720
|
const actors = [
|
|
1884
|
-
chainHeadUpdate,
|
|
1885
1721
|
balances,
|
|
1886
1722
|
producer
|
|
1887
|
-
];
|
|
1723
|
+
].filter(exists);
|
|
1888
1724
|
for (const actor of actors) {
|
|
1889
1725
|
await orchestrator.registerActor(actor);
|
|
1890
1726
|
}
|
|
@@ -1919,16 +1755,16 @@ var XL1LogoColorizedAscii = `\x1B[38;2;128;128;128m\xA0\xA0\xA0\xA0\xA0\xA0\xA0\
|
|
|
1919
1755
|
\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`;
|
|
1920
1756
|
|
|
1921
1757
|
// src/initLogger.ts
|
|
1922
|
-
import { Base as Base2, ConsoleLogger, isDefined as
|
|
1758
|
+
import { Base as Base2, ConsoleLogger, isDefined as isDefined19, LogLevel, SilentLogger } from "@xylabs/sdk-js";
|
|
1923
1759
|
var initLogger = /* @__PURE__ */ __name((config2) => {
|
|
1924
1760
|
let logger;
|
|
1925
1761
|
if (config2.silent) {
|
|
1926
1762
|
logger = new SilentLogger();
|
|
1927
1763
|
} else {
|
|
1928
1764
|
let level;
|
|
1929
|
-
if (
|
|
1765
|
+
if (isDefined19(config2.logLevel)) {
|
|
1930
1766
|
const parsed = LogLevel[config2.logLevel.toLowerCase()];
|
|
1931
|
-
if (
|
|
1767
|
+
if (isDefined19(parsed)) level = parsed;
|
|
1932
1768
|
}
|
|
1933
1769
|
logger = new ConsoleLogger(level);
|
|
1934
1770
|
}
|
|
@@ -1954,7 +1790,7 @@ var optionsFromGlobalZodRegistry = /* @__PURE__ */ __name(() => {
|
|
|
1954
1790
|
}, "optionsFromGlobalZodRegistry");
|
|
1955
1791
|
|
|
1956
1792
|
// src/tryParseConfig.ts
|
|
1957
|
-
import { isDefined as
|
|
1793
|
+
import { isDefined as isDefined20, isNull } from "@xylabs/sdk-js";
|
|
1958
1794
|
import { cosmiconfigSync } from "cosmiconfig";
|
|
1959
1795
|
var configName = "xyo";
|
|
1960
1796
|
var configSection = "xl1";
|
|
@@ -1963,7 +1799,7 @@ var tryParseConfig = /* @__PURE__ */ __name(() => {
|
|
|
1963
1799
|
const result = explorer.search();
|
|
1964
1800
|
if (!isNull(result)) {
|
|
1965
1801
|
const section = result?.config?.[configSection];
|
|
1966
|
-
if (
|
|
1802
|
+
if (isDefined20(section) && typeof section === "object") {
|
|
1967
1803
|
return section;
|
|
1968
1804
|
}
|
|
1969
1805
|
}
|
|
@@ -1993,7 +1829,7 @@ var waitForHostPort = /* @__PURE__ */ __name((host, port) => {
|
|
|
1993
1829
|
|
|
1994
1830
|
// src/runCLI.ts
|
|
1995
1831
|
var configuration;
|
|
1996
|
-
var version =
|
|
1832
|
+
var version = isDefined21("1.16.26") ? "1.16.26" : "unknown";
|
|
1997
1833
|
var getContextFromConfig = /* @__PURE__ */ __name((configuration2) => {
|
|
1998
1834
|
const logger = initLogger(configuration2);
|
|
1999
1835
|
const orchestrator = new Orchestrator(logger);
|
|
@@ -2119,7 +1955,6 @@ var start = /* @__PURE__ */ __name(async () => {
|
|
|
2119
1955
|
export {
|
|
2120
1956
|
Actor,
|
|
2121
1957
|
BalanceActor,
|
|
2122
|
-
ChainHeadUpdateActor,
|
|
2123
1958
|
LoggerStatusReporter,
|
|
2124
1959
|
Orchestrator,
|
|
2125
1960
|
ProducerActor,
|
|
@@ -2129,6 +1964,7 @@ export {
|
|
|
2129
1964
|
initAccountBalanceService,
|
|
2130
1965
|
initBlockProducer,
|
|
2131
1966
|
initBlockRewardService,
|
|
1967
|
+
initBlockViewer,
|
|
2132
1968
|
initChainService,
|
|
2133
1969
|
initEvmProvider,
|
|
2134
1970
|
initHead,
|