@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.
Files changed (52) hide show
  1. package/dist/node/commands/producer/runProducer.d.ts +1 -1
  2. package/dist/node/commands/producer/runProducer.d.ts.map +1 -1
  3. package/dist/node/commands/validator/runValidator.d.ts.map +1 -1
  4. package/dist/node/index.mjs +345 -509
  5. package/dist/node/index.mjs.map +1 -1
  6. package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts +2 -2
  7. package/dist/node/orchestration/actor/implementation/BalanceActor.d.ts.map +1 -1
  8. package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts +2 -2
  9. package/dist/node/orchestration/actor/implementation/ProducerActor.d.ts.map +1 -1
  10. package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts +2 -2
  11. package/dist/node/orchestration/actor/implementation/ValidatorActor.d.ts.map +1 -1
  12. package/dist/node/orchestration/actor/implementation/index.d.ts +0 -1
  13. package/dist/node/orchestration/actor/implementation/index.d.ts.map +1 -1
  14. package/dist/node/orchestration/initServices.d.ts.map +1 -1
  15. package/dist/node/orchestration/services/implementation/accountBalance.d.ts +0 -2
  16. package/dist/node/orchestration/services/implementation/accountBalance.d.ts.map +1 -1
  17. package/dist/node/orchestration/services/implementation/blockViewer.d.ts +7 -0
  18. package/dist/node/orchestration/services/implementation/blockViewer.d.ts.map +1 -0
  19. package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +3 -3
  20. package/dist/node/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +1 -1
  21. package/dist/node/orchestration/services/implementation/head/head.d.ts +1 -1
  22. package/dist/node/orchestration/services/implementation/head/head.d.ts.map +1 -1
  23. package/dist/node/orchestration/services/implementation/index.d.ts +1 -0
  24. package/dist/node/orchestration/services/implementation/index.d.ts.map +1 -1
  25. package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts +7 -3
  26. package/dist/node/orchestration/services/implementation/pendingTransactions.d.ts.map +1 -1
  27. package/dist/node/xl1.mjs +295 -704
  28. package/dist/node/xl1.mjs.map +1 -1
  29. package/package.json +18 -16
  30. package/src/commands/producer/runProducer.ts +7 -5
  31. package/src/commands/validator/runValidator.ts +2 -3
  32. package/src/orchestration/actor/implementation/BalanceActor.ts +4 -7
  33. package/src/orchestration/actor/implementation/ProducerActor.ts +6 -6
  34. package/src/orchestration/actor/implementation/ValidatorActor.ts +4 -4
  35. package/src/orchestration/actor/implementation/index.ts +0 -1
  36. package/src/orchestration/initServices.ts +30 -101
  37. package/src/orchestration/services/implementation/accountBalance.ts +10 -17
  38. package/src/orchestration/services/implementation/blockViewer.ts +29 -0
  39. package/src/orchestration/services/implementation/head/createBootstrapHead.ts +1 -1
  40. package/src/orchestration/services/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +5 -5
  41. package/src/orchestration/services/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +1 -1
  42. package/src/orchestration/services/implementation/head/createForkedHead/getBridgeIntent.ts +1 -1
  43. package/src/orchestration/services/implementation/head/createForkedHead/getBridgeSourceObservation.ts +1 -1
  44. package/src/orchestration/services/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +1 -1
  45. package/src/orchestration/services/implementation/head/getForkFromBlock.ts +1 -1
  46. package/src/orchestration/services/implementation/head/head.ts +1 -2
  47. package/src/orchestration/services/implementation/index.ts +1 -0
  48. package/src/orchestration/services/implementation/pendingTransactions.ts +28 -9
  49. package/src/orchestration/services/implementation/time.ts +2 -2
  50. package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts +0 -20
  51. package/dist/node/orchestration/actor/implementation/ChainHeadUpdateActor.d.ts.map +0 -1
  52. package/src/orchestration/actor/implementation/ChainHeadUpdateActor.ts +0 -72
@@ -1,16 +1,35 @@
1
- import type { Promisable } from '@xylabs/sdk-js'
1
+ import { isDefined, type Promisable } from '@xylabs/sdk-js'
2
2
  import { BasePendingTransactionsService, type BasePendingTransactionsServiceParams } from '@xyo-network/chain-services'
3
- import type { Initializable } from '@xyo-network/xl1-protocol'
4
- import { type PendingTransactionsService, timeBudget } from '@xyo-network/xl1-protocol-sdk'
3
+ import type { Initializable, InitializableParams } from '@xyo-network/xl1-protocol'
4
+ import type { Config, MempoolViewer } from '@xyo-network/xl1-protocol-sdk'
5
+ import { timeBudget } from '@xyo-network/xl1-protocol-sdk'
6
+ import {
7
+ HttpRpcTransport, JsonRpcMempoolViewer, MempoolViewerRpcSchemas,
8
+ } from '@xyo-network/xl1-rpc'
5
9
 
6
- let serviceSingleton: Promisable<PendingTransactionsService> | undefined
10
+ let serviceSingleton: Promisable<MempoolViewer> | undefined
7
11
 
8
- export const initPendingTransactions: Initializable<BasePendingTransactionsServiceParams, PendingTransactionsService> = async (
9
- params: BasePendingTransactionsServiceParams,
10
- ): Promise<PendingTransactionsService> => {
12
+ export type InitPendingTransactionsServiceParams = InitializableParams<{
13
+ config: Config
14
+ params?: BasePendingTransactionsServiceParams
15
+ }>
16
+
17
+ export const initPendingTransactions: Initializable<InitPendingTransactionsServiceParams, MempoolViewer> = async (
18
+ {
19
+ config, params, logger,
20
+ }: InitPendingTransactionsServiceParams,
21
+ ): Promise<MempoolViewer> => {
11
22
  if (serviceSingleton) return serviceSingleton
12
- return await timeBudget('initPendingTransactions', params.logger, async () => {
13
- serviceSingleton = await BasePendingTransactionsService.create(params)
23
+ return await timeBudget('initPendingTransactions', logger, async () => {
24
+ const endpoint = config.services?.apiEndpoint
25
+ if (isDefined(endpoint)) {
26
+ const transport = new HttpRpcTransport(endpoint, { ...MempoolViewerRpcSchemas })
27
+ const viewer = new JsonRpcMempoolViewer(transport)
28
+ logger?.log('Using MempoolViewer RPC service at', endpoint)
29
+ return viewer
30
+ } else {
31
+ serviceSingleton = await BasePendingTransactionsService.create(params)
32
+ }
14
33
  return serviceSingleton
15
34
  }, 2000, true)
16
35
  }
@@ -9,7 +9,7 @@ import { canUseEvmProvider, initEvmProvider } from './evm/index.ts'
9
9
  let timeSyncServiceSingleton: Promisable<TimeSyncViewer> | undefined
10
10
 
11
11
  export const initTimeService: Initializable<BaseTimeServiceParams<Pick<Config, 'evm'>>, TimeSyncViewer> = async ({
12
- chainArchivist, chainIterator, config, logger, meterProvider, traceProvider,
12
+ blockViewer, config, logger, meterProvider, traceProvider,
13
13
  }) => {
14
14
  if (timeSyncServiceSingleton) return timeSyncServiceSingleton
15
15
 
@@ -19,7 +19,7 @@ export const initTimeService: Initializable<BaseTimeServiceParams<Pick<Config, '
19
19
 
20
20
  // Create service
21
21
  timeSyncServiceSingleton = BaseTimeSyncService.create({
22
- chainArchivist, chainIterator, ethProvider, logger, meterProvider, traceProvider,
22
+ blockViewer, ethProvider, logger, meterProvider, traceProvider,
23
23
  })
24
24
  return await timeSyncServiceSingleton
25
25
  }, 2000, true)
@@ -1,20 +0,0 @@
1
- import type { Promisable } from '@xylabs/sdk-js';
2
- import type { Payload } from '@xyo-network/payload-model';
3
- import type { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk';
4
- import type { ActorParams } from '../model/index.ts';
5
- import { Actor } from '../model/index.ts';
6
- export type ChainHeadUpdateActorParams = ActorParams<Pick<ChainServiceCollectionV2, 'chainIterator' | 'chainArchivist'> & {
7
- config: Config;
8
- }>;
9
- export declare class ChainHeadUpdateActor extends Actor<ChainHeadUpdateActorParams> {
10
- private _pollForNewHeadMutex;
11
- protected constructor(params: ChainHeadUpdateActorParams);
12
- protected get chainFinalizedArchivist(): import("@xyo-network/archivist-model").ArchivistInstance<import("@xyo-network/archivist-model").ArchivistParams<import("@xyo-network/module-model").AnyConfigSchema<import("@xyo-network/archivist-model").ArchivistConfig>>, import("@xyo-network/archivist-model").ArchivistModuleEventData, Payload>;
13
- protected get chainIterator(): import("@xyo-network/xl1-protocol-sdk").EventingChainBlockNumberIteratorService;
14
- static create(params: ChainHeadUpdateActorParams): Promisable<ChainHeadUpdateActor>;
15
- start(): Promise<void>;
16
- private checkInsertedForNewHead;
17
- private pollForNewHead;
18
- private updateHeadIfNewer;
19
- }
20
- //# sourceMappingURL=ChainHeadUpdateActor.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ChainHeadUpdateActor.d.ts","sourceRoot":"","sources":["../../../../../src/orchestration/actor/implementation/ChainHeadUpdateActor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAGhD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGzD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAA;AAGrF,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AACpD,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEzC,MAAM,MAAM,0BAA0B,GAAG,WAAW,CAAC,IAAI,CAAC,wBAAwB,EAAE,eAAe,GAAG,gBAAgB,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAAA;AAE7I,qBAAa,oBAAqB,SAAQ,KAAK,CAAC,0BAA0B,CAAC;IACzE,OAAO,CAAC,oBAAoB,CAAc;IAE1C,SAAS,aAAa,MAAM,EAAE,0BAA0B;IAIxD,SAAS,KAAK,uBAAuB,4SAEpC;IAED,SAAS,KAAK,aAAa,oFAE1B;IAED,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,0BAA0B,GAAG,UAAU,CAAC,oBAAoB,CAAC;IAIpE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YAUvB,uBAAuB;YAKvB,cAAc;YAWd,iBAAiB;CAYhC"}
@@ -1,72 +0,0 @@
1
- import type { Promisable } from '@xylabs/sdk-js'
2
- import { assertEx, toHex } from '@xylabs/sdk-js'
3
- import { findMostRecentBlock, sortBlocks } from '@xyo-network/chain-protocol'
4
- import type { Payload } from '@xyo-network/payload-model'
5
- import type { BlockBoundWitness } from '@xyo-network/xl1-protocol'
6
- import { isBlockBoundWitness } from '@xyo-network/xl1-protocol'
7
- import type { ChainServiceCollectionV2, Config } from '@xyo-network/xl1-protocol-sdk'
8
- import { Mutex } from 'async-mutex'
9
-
10
- import type { ActorParams } from '../model/index.ts'
11
- import { Actor } from '../model/index.ts'
12
-
13
- export type ChainHeadUpdateActorParams = ActorParams<Pick<ChainServiceCollectionV2, 'chainIterator' | 'chainArchivist'> & { config: Config }>
14
-
15
- export class ChainHeadUpdateActor extends Actor<ChainHeadUpdateActorParams> {
16
- private _pollForNewHeadMutex = new Mutex()
17
-
18
- protected constructor(params: ChainHeadUpdateActorParams) {
19
- super('ChainHeadUpdate', 'ChainHeadUpdate', params)
20
- }
21
-
22
- protected get chainFinalizedArchivist() {
23
- return assertEx(this.params.chainArchivist, () => 'ChainArchivist not set')
24
- }
25
-
26
- protected get chainIterator() {
27
- return assertEx(this.params.chainIterator, () => 'chainIterator not set')
28
- }
29
-
30
- static create(params: ChainHeadUpdateActorParams): Promisable<ChainHeadUpdateActor> {
31
- return new ChainHeadUpdateActor(params)
32
- }
33
-
34
- override async start(): Promise<void> {
35
- await super.start()
36
- // Register event handler on all insert event to check for new head
37
- this.chainFinalizedArchivist.on('inserted', async (data: { payloads: Payload[] }) => {
38
- await this.checkInsertedForNewHead(data)
39
- })
40
- // Poll in case we missed an event
41
- this.registerTimer('ChainHeadUpdateTimer', async () => await this.pollForNewHead(), 0, 2500/* 250 */)
42
- }
43
-
44
- private async checkInsertedForNewHead(data: { payloads: Payload[] }) {
45
- const candidateBlock = sortBlocks(data.payloads.filter(isBlockBoundWitness)).at(-1)
46
- await this.updateHeadIfNewer(candidateBlock)
47
- }
48
-
49
- private async pollForNewHead() {
50
- if (this._pollForNewHeadMutex.isLocked()) {
51
- this.logger?.log('Skipping poll for new head, previous poll still in progress')
52
- return
53
- }
54
- await this._pollForNewHeadMutex.runExclusive(async () => {
55
- const candidateBlock = await findMostRecentBlock(this.chainFinalizedArchivist)
56
- await this.updateHeadIfNewer(candidateBlock)
57
- })
58
- }
59
-
60
- private async updateHeadIfNewer(candidateBlock?: BlockBoundWitness) {
61
- if (!candidateBlock) return
62
- const currentHead = await this.chainIterator.head()
63
- const candidateBlockNumber = candidateBlock.block
64
- const candidateBlockNumberDisplay = `0x${toHex(candidateBlockNumber)}`
65
- const currentBlockNumber = currentHead?.block ?? -1
66
- if (candidateBlockNumber > currentBlockNumber) {
67
- this.logger?.log('Found more recent head:', candidateBlockNumber, candidateBlockNumberDisplay)
68
- await this.chainIterator.updateHead(candidateBlock)
69
- this.logger?.log('Updated head:', candidateBlockNumber, candidateBlockNumberDisplay)
70
- }
71
- }
72
- }