@xyo-network/chain-services 1.16.9 → 1.16.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts +15 -5
- package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts.map +1 -1
- package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts +1 -1
- package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts.map +1 -1
- package/dist/neutral/AccountTransfers/index.d.ts +0 -1
- package/dist/neutral/AccountTransfers/index.d.ts.map +1 -1
- package/dist/neutral/BaseService.d.ts +2 -3
- package/dist/neutral/BaseService.d.ts.map +1 -1
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +4 -8
- package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +1 -1
- package/dist/neutral/BlockProducer/generateTransactionFeeTransfers.d.ts +1 -1
- package/dist/neutral/BlockProducer/generateTransactionFeeTransfers.d.ts.map +1 -1
- package/dist/neutral/BlockProducer/spec/BaseBlockProducerService.spec.d.ts.map +1 -1
- package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts +1 -2
- package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts.map +1 -1
- package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts +1 -1
- package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts.map +1 -1
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +1 -1
- package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
- package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts +1 -1
- package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts.map +1 -1
- package/dist/neutral/ChainService/Evm/Evm.d.ts +1 -1
- package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
- package/dist/neutral/ChainService/Memory/Memory.d.ts +1 -1
- package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
- package/dist/neutral/ChainValidator/XyoValidator.d.ts +4 -9
- package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
- package/dist/neutral/ChainValidator/model/Validator.d.ts +1 -1
- package/dist/neutral/ChainValidator/model/Validator.d.ts.map +1 -1
- package/dist/neutral/Election/BaseElectionService.d.ts +1 -1
- package/dist/neutral/Election/BaseElectionService.d.ts.map +1 -1
- package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts +1 -2
- package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts.map +1 -1
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +1 -1
- package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +2 -4
- package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
- package/dist/neutral/StakeIntent/lib/getBlockSignedStakeDeclarations.d.ts.map +1 -1
- package/dist/neutral/StepStake/BaseStepStakeService.d.ts +1 -2
- package/dist/neutral/StepStake/BaseStepStakeService.d.ts.map +1 -1
- package/dist/neutral/Time/BaseTimeSyncService.d.ts +8 -11
- package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +1 -1
- package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts +4 -0
- package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -0
- package/dist/neutral/index.mjs +194 -261
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/model/Params.d.ts +1 -2
- package/dist/neutral/model/Params.d.ts.map +1 -1
- package/package.json +26 -36
- package/src/AccountBalance/BaseAccountBalanceService.ts +34 -7
- package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +2 -2
- package/src/AccountTransfers/BaseAccountTransfersService.ts +3 -2
- package/src/AccountTransfers/index.ts +0 -1
- package/src/BaseService.ts +2 -3
- package/src/BlockProducer/BaseBlockProducerService.ts +8 -7
- package/src/BlockProducer/generateTransactionFeeTransfers.ts +2 -2
- package/src/BlockProducer/spec/BaseBlockProducerService.spec.ts +10 -13
- package/src/BlockProducer/spec/generateTransactionTransfer.spec.ts +5 -5
- package/src/BlockReward/BaseBlockRewardService.ts +3 -3
- package/src/BlockReward/EvmBlockRewardService.ts +3 -3
- package/src/BlockReward/MemoryBlockRewardService.ts +3 -4
- package/src/BlockReward/spec/MemoryBlockRewardService.spec.ts +1 -1
- package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +3 -3
- package/src/ChainBlockNumberIteration/model/BlockNumberIteration.ts +1 -1
- package/src/ChainService/Evm/Evm.ts +4 -3
- package/src/ChainService/Memory/Memory.ts +2 -2
- package/src/ChainValidator/XyoValidator.ts +4 -4
- package/src/ChainValidator/model/Validator.ts +1 -1
- package/src/Election/BaseElectionService.ts +3 -3
- package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +3 -3
- package/src/PendingTransactions/BasePendingTransactions.ts +6 -7
- package/src/PendingTransactions/hydratedTransactionToPayloadBundle.ts +1 -1
- package/src/PendingTransactions/spec/BasePendingTransactions.spec.ts +4 -4
- package/src/StakeIntent/XyoStakeIntentService.ts +5 -8
- package/src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts +2 -3
- package/src/StepStake/BaseStepStakeService.ts +3 -3
- package/src/Time/BaseTimeSyncService.ts +25 -80
- package/src/blockViewerFromChainIteratorAndArchivist.ts +61 -0
- package/src/model/Params.ts +1 -2
- package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts +0 -6
- package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts.map +0 -1
- package/src/AccountTransfers/accountTransfersServiceFromArchivist.ts +0 -39
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { creatable } from '@xylabs/creatable'
|
|
3
|
-
import { asHash, Hash } from '@xylabs/hex'
|
|
4
|
-
import { EmptyObject } from '@xylabs/object'
|
|
5
|
-
import { Promisable } from '@xylabs/promise'
|
|
1
|
+
import { creatable, EmptyObject } from '@xylabs/sdk-js'
|
|
6
2
|
import { ReadArchivist } from '@xyo-network/archivist-model'
|
|
7
|
-
import {
|
|
3
|
+
import { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'
|
|
8
4
|
import {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
} from '@xyo-network/xl1-protocol'
|
|
12
|
-
import { EventingChainBlockNumberIteratorService, TimeSyncViewer } from '@xyo-network/xl1-protocol-sdk'
|
|
5
|
+
EventingChainBlockNumberIteratorService, SimpleTimeSyncViewer, TimeSyncViewer,
|
|
6
|
+
} from '@xyo-network/xl1-protocol-sdk'
|
|
13
7
|
import { Provider } from 'ethers'
|
|
14
8
|
|
|
15
9
|
import { BaseService } from '../BaseService.ts'
|
|
10
|
+
import { blockViewerFromChainIteratorAndArchivist } from '../blockViewerFromChainIteratorAndArchivist.ts'
|
|
16
11
|
import { BaseServiceParams } from '../model/index.ts'
|
|
17
12
|
|
|
18
|
-
export interface TimeProvider {
|
|
19
|
-
currentTime(): Promise<[string, number]>
|
|
20
|
-
}
|
|
21
|
-
|
|
22
13
|
export interface BaseTimeServiceParams<TConfig extends EmptyObject = EmptyObject> extends BaseServiceParams<TConfig> {
|
|
23
14
|
chainArchivist: ReadArchivist
|
|
24
15
|
chainIterator: EventingChainBlockNumberIteratorService
|
|
@@ -27,88 +18,42 @@ export interface BaseTimeServiceParams<TConfig extends EmptyObject = EmptyObject
|
|
|
27
18
|
|
|
28
19
|
@creatable()
|
|
29
20
|
export class BaseTimeSyncService extends BaseService<BaseTimeServiceParams> implements TimeSyncViewer {
|
|
30
|
-
|
|
21
|
+
protected timeSyncViewer!: TimeSyncViewer
|
|
22
|
+
|
|
23
|
+
protected get chainArchivist() {
|
|
31
24
|
return this.params.chainArchivist
|
|
32
25
|
}
|
|
33
26
|
|
|
34
|
-
get chainIterator() {
|
|
27
|
+
protected get chainIterator() {
|
|
35
28
|
return this.params.chainIterator
|
|
36
29
|
}
|
|
37
30
|
|
|
38
|
-
get ethProvider() {
|
|
31
|
+
protected get ethProvider() {
|
|
39
32
|
return this.params.ethProvider
|
|
40
33
|
}
|
|
41
34
|
|
|
42
35
|
async convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promise<number> {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
return timePayload.xl1 ?? 0
|
|
54
|
-
}
|
|
55
|
-
case 'epoch': {
|
|
56
|
-
return timePayload.epoch ?? 0
|
|
57
|
-
}
|
|
58
|
-
case 'ethereum': {
|
|
59
|
-
return timePayload.ethereum ?? 0
|
|
60
|
-
}
|
|
61
|
-
default: {
|
|
62
|
-
throw new Error(`Unsupported to toDomain: ${toDomain}`)
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
default: {
|
|
67
|
-
throw new Error(`Unsupported from fromDomain: ${fromDomain}`)
|
|
68
|
-
}
|
|
69
|
-
}
|
|
36
|
+
return await this.timeSyncViewer.convertTime(fromDomain, toDomain, from)
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override async createHandler(): Promise<void> {
|
|
40
|
+
await super.createHandler()
|
|
41
|
+
const blockViewer = blockViewerFromChainIteratorAndArchivist(
|
|
42
|
+
this.chainIterator,
|
|
43
|
+
this.chainArchivist,
|
|
44
|
+
)
|
|
45
|
+
this.timeSyncViewer = new SimpleTimeSyncViewer(blockViewer, this.ethProvider)
|
|
70
46
|
}
|
|
71
47
|
|
|
72
48
|
async currentTime(domain: TimeDomain): Promise<[string, number]> {
|
|
73
|
-
|
|
74
|
-
case 'xl1': {
|
|
75
|
-
return ['xl1', (await this.chainIterator.head()).block]
|
|
76
|
-
}
|
|
77
|
-
case 'epoch': {
|
|
78
|
-
return ['epoch', Date.now()]
|
|
79
|
-
}
|
|
80
|
-
case 'ethereum': {
|
|
81
|
-
return ['ethereum', (await this.ethProvider?.getBlockNumber()) ?? 0]
|
|
82
|
-
}
|
|
83
|
-
default: {
|
|
84
|
-
throw new Error(`Unknown time domain: ${domain}`)
|
|
85
|
-
}
|
|
86
|
-
}
|
|
49
|
+
return await this.timeSyncViewer.currentTime(domain)
|
|
87
50
|
}
|
|
88
51
|
|
|
89
|
-
async currentTimeAndHash(domain: TimeDomain): Promise<[number,
|
|
90
|
-
|
|
91
|
-
case 'xl1': {
|
|
92
|
-
const head = await this.chainIterator.head()
|
|
93
|
-
return [head.block, await PayloadBuilder.hash(head)]
|
|
94
|
-
}
|
|
95
|
-
case 'epoch': {
|
|
96
|
-
return [Date.now(), null]
|
|
97
|
-
}
|
|
98
|
-
case 'ethereum': {
|
|
99
|
-
const provider = assertEx(this.ethProvider, () => 'Ethereum provider not configured')
|
|
100
|
-
const blockNumber = (await provider.getBlockNumber()) ?? 0
|
|
101
|
-
const block = await provider.getBlock(blockNumber)
|
|
102
|
-
const blockHash = asHash(assertEx(block?.hash, () => 'Block hash not found'), true)
|
|
103
|
-
return [blockNumber, blockHash]
|
|
104
|
-
}
|
|
105
|
-
default: {
|
|
106
|
-
throw new Error(`Unknown time domain: ${domain}`)
|
|
107
|
-
}
|
|
108
|
-
}
|
|
52
|
+
async currentTimeAndHash(domain: TimeDomain): Promise<[number, string | null]> {
|
|
53
|
+
return await this.timeSyncViewer.currentTimeAndHash(domain)
|
|
109
54
|
}
|
|
110
55
|
|
|
111
|
-
currentTimePayload():
|
|
112
|
-
|
|
56
|
+
async currentTimePayload(): Promise<TimePayload> {
|
|
57
|
+
return await this.timeSyncViewer.currentTimePayload()
|
|
113
58
|
}
|
|
114
59
|
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import type { Hash } from '@xylabs/sdk-js'
|
|
2
|
+
import { isDefined } from '@xylabs/sdk-js'
|
|
3
|
+
import type { ReadArchivist } from '@xyo-network/archivist-model'
|
|
4
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
5
|
+
import type {
|
|
6
|
+
HydratedBlock,
|
|
7
|
+
XL1BlockNumber,
|
|
8
|
+
} from '@xyo-network/xl1-protocol'
|
|
9
|
+
import { asBlockBoundWitnessWithStorageMeta } from '@xyo-network/xl1-protocol'
|
|
10
|
+
import type { BlockViewer, EventingChainBlockNumberIteratorService } from '@xyo-network/xl1-protocol-sdk'
|
|
11
|
+
|
|
12
|
+
export function blockViewerFromChainIteratorAndArchivist(
|
|
13
|
+
chainIterator: EventingChainBlockNumberIteratorService,
|
|
14
|
+
chainArchivist: ReadArchivist,
|
|
15
|
+
): BlockViewer {
|
|
16
|
+
const result = {
|
|
17
|
+
blockByHash: async function (hash: Hash): Promise<HydratedBlock | null> {
|
|
18
|
+
const [payload] = await chainArchivist.get([hash])
|
|
19
|
+
const block = asBlockBoundWitnessWithStorageMeta(payload)
|
|
20
|
+
if (isDefined(block)) {
|
|
21
|
+
const payloads = await chainArchivist.get(block.payload_hashes)
|
|
22
|
+
return [block, payloads]
|
|
23
|
+
}
|
|
24
|
+
return null
|
|
25
|
+
},
|
|
26
|
+
blockByNumber: async function (blockNumber: XL1BlockNumber): Promise<HydratedBlock | null> {
|
|
27
|
+
const payload = await chainIterator.get(blockNumber)
|
|
28
|
+
const block = payload ? await PayloadBuilder.addStorageMeta(payload) : undefined
|
|
29
|
+
if (isDefined(block)) {
|
|
30
|
+
const payloads = await chainArchivist.get(block.payload_hashes)
|
|
31
|
+
return [block, payloads]
|
|
32
|
+
}
|
|
33
|
+
return null
|
|
34
|
+
},
|
|
35
|
+
blocksByHash: async function (hash: Hash, limit = 10): Promise<HydratedBlock[]> {
|
|
36
|
+
const results: HydratedBlock[] = []
|
|
37
|
+
for (let i = 0; i < limit; i++) {
|
|
38
|
+
const block = await this.blockByHash(hash)
|
|
39
|
+
if (block) {
|
|
40
|
+
results.push(block)
|
|
41
|
+
} else {
|
|
42
|
+
break
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return results
|
|
46
|
+
},
|
|
47
|
+
currentBlock: async function (): Promise<HydratedBlock> {
|
|
48
|
+
const head = await chainIterator.head()
|
|
49
|
+
return this.blockByHash(head._hash) as Promise<HydratedBlock>
|
|
50
|
+
},
|
|
51
|
+
currentBlockHash: async function (): Promise<Hash> {
|
|
52
|
+
const head = await chainIterator.head()
|
|
53
|
+
return head._hash
|
|
54
|
+
},
|
|
55
|
+
currentBlockNumber: async function (): Promise<XL1BlockNumber> {
|
|
56
|
+
const head = await chainIterator.head()
|
|
57
|
+
return head.block
|
|
58
|
+
},
|
|
59
|
+
} satisfies BlockViewer
|
|
60
|
+
return result
|
|
61
|
+
}
|
package/src/model/Params.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type { CreatableParams } from '@xylabs/
|
|
2
|
-
import type { EmptyObject } from '@xylabs/object'
|
|
1
|
+
import type { CreatableParams, EmptyObject } from '@xylabs/sdk-js'
|
|
3
2
|
import type { AccountInstance } from '@xyo-network/account-model'
|
|
4
3
|
import type { OpenTelemetryProviders } from '@xyo-network/xl1-protocol'
|
|
5
4
|
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { ReadArchivist } from '@xyo-network/archivist-model';
|
|
2
|
-
import type { Payload, WithStorageMeta } from '@xyo-network/payload-model';
|
|
3
|
-
import type { ChainId } from '@xyo-network/xl1-protocol';
|
|
4
|
-
import type { AccountTransfersService } from '@xyo-network/xl1-protocol-sdk';
|
|
5
|
-
export declare const accountTransfersServiceFromArchivist: (chainId: ChainId, archivist: ReadArchivist<WithStorageMeta<Payload>>) => Promise<AccountTransfersService>;
|
|
6
|
-
//# sourceMappingURL=accountTransfersServiceFromArchivist.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"accountTransfersServiceFromArchivist.d.ts","sourceRoot":"","sources":["../../../src/AccountTransfers/accountTransfersServiceFromArchivist.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAEjE,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC1E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AAExD,OAAO,KAAK,EAAE,uBAAuB,EAAwB,MAAM,+BAA+B,CAAA;AAMlG,eAAO,MAAM,oCAAoC,GAC/C,SAAS,OAAO,EAChB,WAAW,aAAa,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,KACjD,OAAO,CAAC,uBAAuB,CAsBjC,CAAA"}
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
import { assertEx } from '@xylabs/assert'
|
|
2
|
-
import type { Hash } from '@xylabs/hex'
|
|
3
|
-
import type { ReadArchivist } from '@xyo-network/archivist-model'
|
|
4
|
-
import { findMostRecentBlock } from '@xyo-network/chain-protocol'
|
|
5
|
-
import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'
|
|
6
|
-
import type { ChainId } from '@xyo-network/xl1-protocol'
|
|
7
|
-
import { StepSizes } from '@xyo-network/xl1-protocol'
|
|
8
|
-
import type { AccountTransfersService, TransfersStepSummary } from '@xyo-network/xl1-protocol-sdk'
|
|
9
|
-
import { LruCacheMap, readPayloadMapFromStore } from '@xyo-network/xl1-protocol-sdk'
|
|
10
|
-
import { Semaphore } from 'async-mutex'
|
|
11
|
-
|
|
12
|
-
import { BaseAccountTransfersService } from './BaseAccountTransfersService.ts'
|
|
13
|
-
|
|
14
|
-
export const accountTransfersServiceFromArchivist = async (
|
|
15
|
-
chainId: ChainId,
|
|
16
|
-
archivist: ReadArchivist<WithStorageMeta<Payload>>,
|
|
17
|
-
): Promise<AccountTransfersService> => {
|
|
18
|
-
const summaryMap = new LruCacheMap<string, TransfersStepSummary>({
|
|
19
|
-
max: 100_000,
|
|
20
|
-
allowStale: true,
|
|
21
|
-
noDisposeOnSet: false,
|
|
22
|
-
updateAgeOnGet: true,
|
|
23
|
-
})
|
|
24
|
-
const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(archivist)
|
|
25
|
-
const headFunc = async (): Promise<[Hash, number]> => {
|
|
26
|
-
const head = await findMostRecentBlock(archivist)
|
|
27
|
-
return [assertEx(head?._hash, () => 'No head found in chainArchivist'), assertEx(head?.block, () => 'No head found in chainArchivist')]
|
|
28
|
-
}
|
|
29
|
-
const service = await BaseAccountTransfersService.create({
|
|
30
|
-
context: {
|
|
31
|
-
chainId,
|
|
32
|
-
store: { chainMap },
|
|
33
|
-
stepSemaphores: StepSizes.map(() => new Semaphore(20)),
|
|
34
|
-
summaryMap,
|
|
35
|
-
head: headFunc,
|
|
36
|
-
},
|
|
37
|
-
})
|
|
38
|
-
return service
|
|
39
|
-
}
|