@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
|
@@ -1,16 +1,35 @@
|
|
|
1
|
-
import type
|
|
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 {
|
|
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<
|
|
10
|
+
let serviceSingleton: Promisable<MempoolViewer> | undefined
|
|
7
11
|
|
|
8
|
-
export
|
|
9
|
-
|
|
10
|
-
|
|
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',
|
|
13
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
}
|