@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.
Files changed (82) hide show
  1. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts +15 -5
  2. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts.map +1 -1
  3. package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts +1 -1
  4. package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts.map +1 -1
  5. package/dist/neutral/AccountTransfers/index.d.ts +0 -1
  6. package/dist/neutral/AccountTransfers/index.d.ts.map +1 -1
  7. package/dist/neutral/BaseService.d.ts +2 -3
  8. package/dist/neutral/BaseService.d.ts.map +1 -1
  9. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +4 -8
  10. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +1 -1
  11. package/dist/neutral/BlockProducer/generateTransactionFeeTransfers.d.ts +1 -1
  12. package/dist/neutral/BlockProducer/generateTransactionFeeTransfers.d.ts.map +1 -1
  13. package/dist/neutral/BlockProducer/spec/BaseBlockProducerService.spec.d.ts.map +1 -1
  14. package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts +1 -2
  15. package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts.map +1 -1
  16. package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts +1 -1
  17. package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts.map +1 -1
  18. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +1 -1
  19. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
  20. package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts +1 -1
  21. package/dist/neutral/ChainBlockNumberIteration/model/BlockNumberIteration.d.ts.map +1 -1
  22. package/dist/neutral/ChainService/Evm/Evm.d.ts +1 -1
  23. package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
  24. package/dist/neutral/ChainService/Memory/Memory.d.ts +1 -1
  25. package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
  26. package/dist/neutral/ChainValidator/XyoValidator.d.ts +4 -9
  27. package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
  28. package/dist/neutral/ChainValidator/model/Validator.d.ts +1 -1
  29. package/dist/neutral/ChainValidator/model/Validator.d.ts.map +1 -1
  30. package/dist/neutral/Election/BaseElectionService.d.ts +1 -1
  31. package/dist/neutral/Election/BaseElectionService.d.ts.map +1 -1
  32. package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts +1 -2
  33. package/dist/neutral/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.d.ts.map +1 -1
  34. package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +1 -1
  35. package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
  36. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +2 -4
  37. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
  38. package/dist/neutral/StakeIntent/lib/getBlockSignedStakeDeclarations.d.ts.map +1 -1
  39. package/dist/neutral/StepStake/BaseStepStakeService.d.ts +1 -2
  40. package/dist/neutral/StepStake/BaseStepStakeService.d.ts.map +1 -1
  41. package/dist/neutral/Time/BaseTimeSyncService.d.ts +8 -11
  42. package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +1 -1
  43. package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts +4 -0
  44. package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -0
  45. package/dist/neutral/index.mjs +194 -261
  46. package/dist/neutral/index.mjs.map +1 -1
  47. package/dist/neutral/model/Params.d.ts +1 -2
  48. package/dist/neutral/model/Params.d.ts.map +1 -1
  49. package/package.json +26 -36
  50. package/src/AccountBalance/BaseAccountBalanceService.ts +34 -7
  51. package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +2 -2
  52. package/src/AccountTransfers/BaseAccountTransfersService.ts +3 -2
  53. package/src/AccountTransfers/index.ts +0 -1
  54. package/src/BaseService.ts +2 -3
  55. package/src/BlockProducer/BaseBlockProducerService.ts +8 -7
  56. package/src/BlockProducer/generateTransactionFeeTransfers.ts +2 -2
  57. package/src/BlockProducer/spec/BaseBlockProducerService.spec.ts +10 -13
  58. package/src/BlockProducer/spec/generateTransactionTransfer.spec.ts +5 -5
  59. package/src/BlockReward/BaseBlockRewardService.ts +3 -3
  60. package/src/BlockReward/EvmBlockRewardService.ts +3 -3
  61. package/src/BlockReward/MemoryBlockRewardService.ts +3 -4
  62. package/src/BlockReward/spec/MemoryBlockRewardService.spec.ts +1 -1
  63. package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +3 -3
  64. package/src/ChainBlockNumberIteration/model/BlockNumberIteration.ts +1 -1
  65. package/src/ChainService/Evm/Evm.ts +4 -3
  66. package/src/ChainService/Memory/Memory.ts +2 -2
  67. package/src/ChainValidator/XyoValidator.ts +4 -4
  68. package/src/ChainValidator/model/Validator.ts +1 -1
  69. package/src/Election/BaseElectionService.ts +3 -3
  70. package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +3 -3
  71. package/src/PendingTransactions/BasePendingTransactions.ts +6 -7
  72. package/src/PendingTransactions/hydratedTransactionToPayloadBundle.ts +1 -1
  73. package/src/PendingTransactions/spec/BasePendingTransactions.spec.ts +4 -4
  74. package/src/StakeIntent/XyoStakeIntentService.ts +5 -8
  75. package/src/StakeIntent/lib/getBlockSignedStakeDeclarations.ts +2 -3
  76. package/src/StepStake/BaseStepStakeService.ts +3 -3
  77. package/src/Time/BaseTimeSyncService.ts +25 -80
  78. package/src/blockViewerFromChainIteratorAndArchivist.ts +61 -0
  79. package/src/model/Params.ts +1 -2
  80. package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts +0 -6
  81. package/dist/neutral/AccountTransfers/accountTransfersServiceFromArchivist.d.ts.map +0 -1
  82. package/src/AccountTransfers/accountTransfersServiceFromArchivist.ts +0 -39
@@ -1,24 +1,15 @@
1
- import { assertEx } from '@xylabs/assert'
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 { PayloadBuilder } from '@xyo-network/payload-builder'
3
+ import { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'
8
4
  import {
9
- asTimePayload,
10
- TimeDomain, TimePayload, TimeSchema,
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
- get chainArchivist() {
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
- switch (fromDomain) {
44
- case 'xl1': {
45
- const block = assertEx(await this.chainIterator.get(from), () => 'Block not found')
46
- const timeSchemaIndex = block.payload_schemas.indexOf(TimeSchema)
47
- const hash = timeSchemaIndex === -1 ? undefined : block.payload_hashes[timeSchemaIndex]
48
- const [payload] = hash === undefined ? [] : await this.chainArchivist.get([hash])
49
- const timePayload = asTimePayload(payload)
50
- if (timePayload === undefined) return 0
51
- switch (toDomain) {
52
- case 'xl1': {
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
- switch (domain) {
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, Hash | null]> {
90
- switch (domain) {
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(): Promisable<TimePayload> {
112
- throw new Error('Method not implemented.')
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
+ }
@@ -1,5 +1,4 @@
1
- import type { CreatableParams } from '@xylabs/creatable'
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
- }