@xyo-network/chain-services 1.16.26 → 1.17.1

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 (188) hide show
  1. package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts +1 -1
  2. package/dist/neutral/AccountBalance/accountBalanceServiceFromArchivist.d.ts.map +1 -1
  3. package/dist/neutral/AccountBalance/index.d.ts +0 -1
  4. package/dist/neutral/AccountBalance/index.d.ts.map +1 -1
  5. package/dist/neutral/BaseService.d.ts +0 -3
  6. package/dist/neutral/BaseService.d.ts.map +1 -1
  7. package/dist/neutral/BlockReward/EvmBlockRewardViewer.d.ts +17 -0
  8. package/dist/neutral/BlockReward/EvmBlockRewardViewer.d.ts.map +1 -0
  9. package/dist/neutral/BlockReward/index.d.ts +1 -3
  10. package/dist/neutral/BlockReward/index.d.ts.map +1 -1
  11. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts +23 -11
  12. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
  13. package/dist/neutral/ChainService/Evm/Evm.d.ts +6 -5
  14. package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
  15. package/dist/neutral/ChainService/Memory/Memory.d.ts +6 -4
  16. package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
  17. package/dist/neutral/ChainValidator/XyoValidator.d.ts +4 -18
  18. package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
  19. package/dist/neutral/Election/BaseElectionService.d.ts +3 -3
  20. package/dist/neutral/Election/BaseElectionService.d.ts.map +1 -1
  21. package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +9 -9
  22. package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
  23. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +7 -6
  24. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
  25. package/dist/neutral/Time/BaseTimeSyncService.d.ts +3 -6
  26. package/dist/neutral/Time/BaseTimeSyncService.d.ts.map +1 -1
  27. package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -1
  28. package/dist/neutral/implementation/accountBalance.d.ts +7 -0
  29. package/dist/neutral/implementation/accountBalance.d.ts.map +1 -0
  30. package/dist/neutral/implementation/blockViewer.d.ts +7 -0
  31. package/dist/neutral/implementation/blockViewer.d.ts.map +1 -0
  32. package/dist/neutral/implementation/chain/evm.d.ts +7 -0
  33. package/dist/neutral/implementation/chain/evm.d.ts.map +1 -0
  34. package/dist/neutral/implementation/chain/index.d.ts +7 -0
  35. package/dist/neutral/implementation/chain/index.d.ts.map +1 -0
  36. package/dist/neutral/implementation/evm/index.d.ts +2 -0
  37. package/dist/neutral/implementation/evm/index.d.ts.map +1 -0
  38. package/dist/neutral/implementation/evm/initChainId.d.ts +4 -0
  39. package/dist/neutral/implementation/evm/initChainId.d.ts.map +1 -0
  40. package/dist/neutral/implementation/evm/initEvmProvider.d.ts +11 -0
  41. package/dist/neutral/implementation/evm/initEvmProvider.d.ts.map +1 -0
  42. package/dist/neutral/implementation/evm/initInfuraProvider.d.ts +6 -0
  43. package/dist/neutral/implementation/evm/initInfuraProvider.d.ts.map +1 -0
  44. package/dist/neutral/implementation/evm/initJsonRpcProvider.d.ts +6 -0
  45. package/dist/neutral/implementation/evm/initJsonRpcProvider.d.ts.map +1 -0
  46. package/dist/neutral/implementation/head/createBootstrapHead.d.ts +5 -0
  47. package/dist/neutral/implementation/head/createBootstrapHead.d.ts.map +1 -0
  48. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts +8 -0
  49. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts.map +1 -0
  50. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +9 -0
  51. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +1 -0
  52. package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts +4 -0
  53. package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts.map +1 -0
  54. package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts +4 -0
  55. package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts.map +1 -0
  56. package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts +5 -0
  57. package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts.map +1 -0
  58. package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts +11 -0
  59. package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts.map +1 -0
  60. package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts +11 -0
  61. package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts.map +1 -0
  62. package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts +11 -0
  63. package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts.map +1 -0
  64. package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts +13 -0
  65. package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts.map +1 -0
  66. package/dist/neutral/implementation/head/createForkedHead/index.d.ts +2 -0
  67. package/dist/neutral/implementation/head/createForkedHead/index.d.ts.map +1 -0
  68. package/dist/neutral/implementation/head/getForkFromBlock.d.ts +12 -0
  69. package/dist/neutral/implementation/head/getForkFromBlock.d.ts.map +1 -0
  70. package/dist/neutral/implementation/head/head.d.ts +11 -0
  71. package/dist/neutral/implementation/head/head.d.ts.map +1 -0
  72. package/dist/neutral/implementation/head/index.d.ts +2 -0
  73. package/dist/neutral/implementation/head/index.d.ts.map +1 -0
  74. package/dist/neutral/implementation/head/submitNewChain.d.ts +10 -0
  75. package/dist/neutral/implementation/head/submitNewChain.d.ts.map +1 -0
  76. package/dist/neutral/implementation/index.d.ts +13 -0
  77. package/dist/neutral/implementation/index.d.ts.map +1 -0
  78. package/dist/neutral/implementation/mempoolRunner.d.ts +7 -0
  79. package/dist/neutral/implementation/mempoolRunner.d.ts.map +1 -0
  80. package/dist/neutral/implementation/mempoolViewer.d.ts +7 -0
  81. package/dist/neutral/implementation/mempoolViewer.d.ts.map +1 -0
  82. package/dist/neutral/implementation/pendingTransactions.d.ts +9 -0
  83. package/dist/neutral/implementation/pendingTransactions.d.ts.map +1 -0
  84. package/dist/neutral/implementation/producer.d.ts +5 -0
  85. package/dist/neutral/implementation/producer.d.ts.map +1 -0
  86. package/dist/neutral/implementation/reward.d.ts +14 -0
  87. package/dist/neutral/implementation/reward.d.ts.map +1 -0
  88. package/dist/neutral/implementation/time.d.ts +6 -0
  89. package/dist/neutral/implementation/time.d.ts.map +1 -0
  90. package/dist/neutral/implementation/validator.d.ts +5 -0
  91. package/dist/neutral/implementation/validator.d.ts.map +1 -0
  92. package/dist/neutral/index.d.ts +2 -2
  93. package/dist/neutral/index.d.ts.map +1 -1
  94. package/dist/neutral/index.mjs +1623 -1150
  95. package/dist/neutral/index.mjs.map +1 -1
  96. package/dist/neutral/simple/block/index.d.ts +2 -0
  97. package/dist/neutral/simple/block/index.d.ts.map +1 -0
  98. package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts +117 -0
  99. package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -0
  100. package/dist/neutral/simple/block/runner/generateTransactionFeeTransfers.d.ts.map +1 -0
  101. package/dist/neutral/simple/block/runner/index.d.ts +2 -0
  102. package/dist/neutral/simple/block/runner/index.d.ts.map +1 -0
  103. package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts +2 -0
  104. package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts.map +1 -0
  105. package/dist/neutral/simple/index.d.ts +2 -0
  106. package/dist/neutral/simple/index.d.ts.map +1 -0
  107. package/package.json +30 -27
  108. package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +38 -10
  109. package/src/AccountBalance/index.ts +0 -1
  110. package/src/BaseService.ts +0 -13
  111. package/src/BlockReward/EvmBlockRewardViewer.ts +50 -0
  112. package/src/BlockReward/index.ts +1 -3
  113. package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +74 -6
  114. package/src/ChainService/Evm/Evm.ts +39 -36
  115. package/src/ChainService/Memory/Memory.ts +14 -7
  116. package/src/ChainValidator/XyoValidator.ts +29 -34
  117. package/src/Election/BaseElectionService.ts +5 -4
  118. package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +18 -18
  119. package/src/PendingTransactions/BasePendingTransactions.ts +15 -9
  120. package/src/Schemas/BaseSchemasService.ts +1 -1
  121. package/src/StakeIntent/XyoStakeIntentService.ts +24 -18
  122. package/src/StepStake/BaseStepStakeService.ts +2 -2
  123. package/src/Time/BaseTimeSyncService.ts +6 -16
  124. package/src/blockViewerFromChainIteratorAndArchivist.ts +20 -1
  125. package/src/implementation/accountBalance.ts +29 -0
  126. package/src/implementation/blockViewer.ts +29 -0
  127. package/src/implementation/chain/evm.ts +39 -0
  128. package/src/implementation/chain/index.ts +46 -0
  129. package/src/implementation/evm/index.ts +1 -0
  130. package/src/implementation/evm/initChainId.ts +20 -0
  131. package/src/implementation/evm/initEvmProvider.ts +24 -0
  132. package/src/implementation/evm/initInfuraProvider.ts +26 -0
  133. package/src/implementation/evm/initJsonRpcProvider.ts +20 -0
  134. package/src/implementation/head/createBootstrapHead.ts +31 -0
  135. package/src/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts +27 -0
  136. package/src/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +19 -0
  137. package/src/implementation/head/createForkedHead/config/getForkDetails.ts +10 -0
  138. package/src/implementation/head/createForkedHead/config/index.ts +3 -0
  139. package/src/implementation/head/createForkedHead/createForkedHead.ts +29 -0
  140. package/src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +42 -0
  141. package/src/implementation/head/createForkedHead/getBridgeIntent.ts +51 -0
  142. package/src/implementation/head/createForkedHead/getBridgeSourceObservation.ts +46 -0
  143. package/src/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +41 -0
  144. package/src/implementation/head/createForkedHead/index.ts +1 -0
  145. package/src/implementation/head/getForkFromBlock.ts +43 -0
  146. package/src/implementation/head/head.ts +49 -0
  147. package/src/implementation/head/index.ts +1 -0
  148. package/src/implementation/head/submitNewChain.ts +27 -0
  149. package/src/implementation/index.ts +12 -0
  150. package/src/implementation/mempoolRunner.ts +29 -0
  151. package/src/implementation/mempoolViewer.ts +29 -0
  152. package/src/implementation/pendingTransactions.ts +36 -0
  153. package/src/implementation/producer.ts +16 -0
  154. package/src/implementation/reward.ts +53 -0
  155. package/src/implementation/time.ts +26 -0
  156. package/src/implementation/validator.ts +15 -0
  157. package/src/index.ts +2 -2
  158. package/src/simple/block/index.ts +1 -0
  159. package/src/{BlockProducer/BaseBlockProducerService.ts → simple/block/runner/SimpleBlockRunner.ts} +111 -74
  160. package/src/simple/block/runner/index.ts +1 -0
  161. package/src/simple/block/runner/spec/SimpleBlockRewardViewer.ts +413 -0
  162. package/src/simple/index.ts +1 -0
  163. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts +0 -36
  164. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts.map +0 -1
  165. package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts +0 -13
  166. package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts.map +0 -1
  167. package/dist/neutral/AccountTransfers/index.d.ts +0 -2
  168. package/dist/neutral/AccountTransfers/index.d.ts.map +0 -1
  169. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +0 -85
  170. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +0 -1
  171. package/dist/neutral/BlockProducer/generateTransactionFeeTransfers.d.ts.map +0 -1
  172. package/dist/neutral/BlockProducer/index.d.ts +0 -2
  173. package/dist/neutral/BlockProducer/index.d.ts.map +0 -1
  174. package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts +0 -10
  175. package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts.map +0 -1
  176. package/dist/neutral/BlockReward/EvmBlockRewardService.d.ts +0 -18
  177. package/dist/neutral/BlockReward/EvmBlockRewardService.d.ts.map +0 -1
  178. package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts +0 -23
  179. package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts.map +0 -1
  180. package/src/AccountBalance/BaseAccountBalanceService.ts +0 -100
  181. package/src/AccountTransfers/BaseAccountTransfersService.ts +0 -36
  182. package/src/AccountTransfers/index.ts +0 -1
  183. package/src/BlockProducer/index.ts +0 -1
  184. package/src/BlockReward/BaseBlockRewardService.ts +0 -17
  185. package/src/BlockReward/EvmBlockRewardService.ts +0 -49
  186. package/src/BlockReward/MemoryBlockRewardService.ts +0 -72
  187. /package/dist/neutral/{BlockProducer → simple/block/runner}/generateTransactionFeeTransfers.d.ts +0 -0
  188. /package/src/{BlockProducer → simple/block/runner}/generateTransactionFeeTransfers.ts +0 -0
@@ -0,0 +1,49 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import { assertEx, isDefined } from '@xylabs/sdk-js'
3
+ import type { ArchivistInstance } from '@xyo-network/archivist-model'
4
+ import type { WalletInstance } from '@xyo-network/wallet-model'
5
+ import type { Initializable, SignedBlockBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'
6
+ import { type ChainService, findMostRecentBlock } from '@xyo-network/xl1-protocol-sdk'
7
+
8
+ import { createBootstrapHead } from './createBootstrapHead.ts'
9
+ import { createForkedHead } from './createForkedHead/index.ts'
10
+ import { getForkFromBlock } from './getForkFromBlock.ts'
11
+ import { submitNewChain } from './submitNewChain.ts'
12
+
13
+ let headSingleton: Promisable<SignedBlockBoundWitnessWithHashMeta> | undefined
14
+
15
+ export const initHead: Initializable<{
16
+ account: WalletInstance
17
+ chainArchivist: ArchivistInstance
18
+ chainService: ChainService
19
+ chainSubmissionsArchivistWrite: ArchivistInstance
20
+ }, SignedBlockBoundWitnessWithHashMeta>
21
+ = async (params): Promise<SignedBlockBoundWitnessWithHashMeta> => {
22
+ const {
23
+ account, chainArchivist, chainSubmissionsArchivistWrite, chainService,
24
+ } = params
25
+ if (headSingleton) return headSingleton
26
+ let head = await findMostRecentBlock(chainArchivist)
27
+
28
+ // If there is a head
29
+ if (head) {
30
+ // If there is a head but check if it matches our chainId or we should fork from it
31
+ const forkFromBlock = await getForkFromBlock(head, chainService, chainArchivist)
32
+ // If we should fork form a block in the current chain
33
+ if (isDefined(forkFromBlock)) {
34
+ // Create a new chain from the fork from block
35
+ const chain = await createForkedHead(forkFromBlock, account, chainService)
36
+ await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite)
37
+ const newBlock = assertEx(chain.at(-1), () => new Error('Failed to get new head after forking'))
38
+ head = newBlock[0]
39
+ }
40
+ } else {
41
+ // If there is no head, create one
42
+ const chain = await createBootstrapHead(account, chainService)
43
+ await submitNewChain(chain, chainArchivist, chainSubmissionsArchivistWrite)
44
+ const newBlock = assertEx(chain.at(-1), () => new Error('Failed to get new head after genesis'))
45
+ head = newBlock[0]
46
+ }
47
+ headSingleton = head
48
+ return headSingleton
49
+ }
@@ -0,0 +1 @@
1
+ export * from './head.ts'
@@ -0,0 +1,27 @@
1
+ import { delay } from '@xylabs/sdk-js'
2
+ import type { ArchivistInstance, WriteArchivist } from '@xyo-network/archivist-model'
3
+ import type { SignedHydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'
4
+ import { flattenHydratedBlock } from '@xyo-network/xl1-protocol-sdk'
5
+
6
+ /**
7
+ * Submit a new chain to the archivist.
8
+ * @param chain The new chain to submit
9
+ * @param chainArchivist The chain archivist instance
10
+ * @param chainSubmissionsArchivistWrite The chain submissions archivist instance
11
+ */
12
+ export const submitNewChain = async (
13
+ chain: SignedHydratedBlockWithHashMeta[],
14
+ chainArchivist: ArchivistInstance,
15
+ chainSubmissionsArchivistWrite: WriteArchivist,
16
+ ): Promise<void> => {
17
+ for (const block of chain) {
18
+ const [bw] = block
19
+ await chainSubmissionsArchivistWrite.insert(flattenHydratedBlock(block))
20
+ // Wait for block to show up in finalized archivist
21
+ while (true) {
22
+ const result = await chainArchivist.get([bw._hash])
23
+ if (result.length > 0) break
24
+ await delay(1000) // Wait 1 second before retrying
25
+ }
26
+ }
27
+ }
@@ -0,0 +1,12 @@
1
+ export * from './accountBalance.ts'
2
+ export * from './blockViewer.ts'
3
+ export * from './chain/index.ts'
4
+ export * from './evm/index.ts'
5
+ export * from './head/index.ts'
6
+ export * from './mempoolRunner.ts'
7
+ export * from './mempoolViewer.ts'
8
+ export * from './pendingTransactions.ts'
9
+ export * from './producer.ts'
10
+ export * from './reward.ts'
11
+ export * from './time.ts'
12
+ export * from './validator.ts'
@@ -0,0 +1,29 @@
1
+ import { isDefined, type Promisable } from '@xylabs/sdk-js'
2
+ import type { Initializable, InitializableParams } from '@xyo-network/xl1-protocol'
3
+ import type { Config, MempoolRunner } from '@xyo-network/xl1-protocol-sdk'
4
+ import {
5
+ HttpRpcTransport,
6
+ JsonRpcMempoolRunner,
7
+ MempoolRunnerRpcSchemas,
8
+ } from '@xyo-network/xl1-rpc'
9
+
10
+ let mempoolRunnerSingleton: Promisable<MempoolRunner> | undefined
11
+
12
+ export type InitMempoolRunnerParams = InitializableParams<{
13
+ config: Config
14
+ }>
15
+
16
+ export const initMempoolRunner: Initializable<InitMempoolRunnerParams, MempoolRunner>
17
+ = (params): Promisable<MempoolRunner> => {
18
+ const { config, logger } = params
19
+ if (mempoolRunnerSingleton) return mempoolRunnerSingleton
20
+ const endpoint = config.services?.apiEndpoint
21
+ if (isDefined(endpoint)) {
22
+ const transport = new HttpRpcTransport(endpoint, { ...MempoolRunnerRpcSchemas })
23
+ const runner = new JsonRpcMempoolRunner(transport)
24
+ logger?.log('Using mempoolRunner RPC service at', endpoint)
25
+ return runner
26
+ } else {
27
+ throw new Error('No MempoolRunner endpoint configured')
28
+ }
29
+ }
@@ -0,0 +1,29 @@
1
+ import { isDefined, type Promisable } from '@xylabs/sdk-js'
2
+ import type { Initializable, InitializableParams } from '@xyo-network/xl1-protocol'
3
+ import type { Config, MempoolViewer } from '@xyo-network/xl1-protocol-sdk'
4
+ import {
5
+ HttpRpcTransport,
6
+ JsonRpcMempoolViewer,
7
+ MempoolViewerRpcSchemas,
8
+ } from '@xyo-network/xl1-rpc'
9
+
10
+ let mempoolViewerSingleton: Promisable<MempoolViewer> | undefined
11
+
12
+ export type InitMempoolViewerParams = InitializableParams<{
13
+ config: Config
14
+ }>
15
+
16
+ export const initMempoolViewer: Initializable<InitMempoolViewerParams, MempoolViewer>
17
+ = (params): Promisable<MempoolViewer> => {
18
+ const { config, logger } = params
19
+ if (mempoolViewerSingleton) return mempoolViewerSingleton
20
+ const endpoint = config.services?.apiEndpoint
21
+ if (isDefined(endpoint)) {
22
+ const transport = new HttpRpcTransport(endpoint, { ...MempoolViewerRpcSchemas })
23
+ const viewer = new JsonRpcMempoolViewer(transport)
24
+ logger?.log('Using MempoolViewer RPC service at', endpoint)
25
+ return viewer
26
+ } else {
27
+ throw new Error('No MempoolViewer endpoint configured')
28
+ }
29
+ }
@@ -0,0 +1,36 @@
1
+ import { isDefined, type Promisable } from '@xylabs/sdk-js'
2
+ import type { Initializable, InitializableParams } from '@xyo-network/xl1-protocol'
3
+ import type { Config, MempoolViewer } from '@xyo-network/xl1-protocol-sdk'
4
+ import { timeBudget } from '@xyo-network/xl1-protocol-sdk'
5
+ import {
6
+ HttpRpcTransport, JsonRpcMempoolViewer, MempoolViewerRpcSchemas,
7
+ } from '@xyo-network/xl1-rpc'
8
+
9
+ import { BasePendingTransactionsService, type BasePendingTransactionsServiceParams } from '../PendingTransactions/index.ts'
10
+
11
+ let serviceSingleton: Promisable<MempoolViewer> | undefined
12
+
13
+ export type InitPendingTransactionsServiceParams = InitializableParams<{
14
+ config: Config
15
+ params?: BasePendingTransactionsServiceParams
16
+ }>
17
+
18
+ export const initPendingTransactions: Initializable<InitPendingTransactionsServiceParams, MempoolViewer> = async (
19
+ {
20
+ config, params, logger,
21
+ }: InitPendingTransactionsServiceParams,
22
+ ): Promise<MempoolViewer> => {
23
+ if (serviceSingleton) return serviceSingleton
24
+ return await timeBudget('initPendingTransactions', logger, async () => {
25
+ const endpoint = config.services?.apiEndpoint
26
+ if (isDefined(endpoint)) {
27
+ const transport = new HttpRpcTransport(endpoint, { ...MempoolViewerRpcSchemas })
28
+ const viewer = new JsonRpcMempoolViewer(transport)
29
+ logger?.log('Using MempoolViewer RPC service at', endpoint)
30
+ return viewer
31
+ } else {
32
+ serviceSingleton = await BasePendingTransactionsService.create(params)
33
+ }
34
+ return serviceSingleton
35
+ }, 2000, true)
36
+ }
@@ -0,0 +1,16 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import type { Initializable } from '@xyo-network/xl1-protocol'
3
+ import { type BlockProducerService, timeBudget } from '@xyo-network/xl1-protocol-sdk'
4
+
5
+ import { SimpleBlockRunner, type SimpleBlockRunnerParams } from '../simple/index.ts'
6
+
7
+ let serviceSingleton: Promisable<BlockProducerService> | undefined
8
+
9
+ export const initBlockProducer: Initializable<SimpleBlockRunnerParams, BlockProducerService>
10
+ = async (params: SimpleBlockRunnerParams): Promise<BlockProducerService> => {
11
+ if (serviceSingleton) return serviceSingleton
12
+ return await timeBudget('initBlockProducer', params.logger, async () => {
13
+ serviceSingleton = await SimpleBlockRunner.create(params)
14
+ return serviceSingleton
15
+ }, 2000, true)
16
+ }
@@ -0,0 +1,53 @@
1
+ import type { Logger } from '@xylabs/sdk-js'
2
+ import { assertEx } from '@xylabs/sdk-js'
3
+ import type { Initializable } from '@xyo-network/xl1-protocol'
4
+ import type {
5
+ BlockRewardViewer, ChainContractViewer, Config, SimpleBlockRewardViewerParams,
6
+ } from '@xyo-network/xl1-protocol-sdk'
7
+ import { SimpleBlockRewardViewer, timeBudget } from '@xyo-network/xl1-protocol-sdk'
8
+
9
+ import { EvmBlockRewardViewer, type EvmBlockRewardViewerParams } from '../BlockReward/EvmBlockRewardViewer.ts'
10
+ import { canUseEvmProvider, initEvmProvider } from './evm/index.ts'
11
+
12
+ let rewardServiceSingleton: Promise<BlockRewardViewer> | undefined
13
+
14
+ export const initBlockRewardViewer: Initializable<
15
+ Partial<SimpleBlockRewardViewerParams> & {
16
+ chainContractViewer: ChainContractViewer
17
+ config: Pick<Config, 'evm'>
18
+ },
19
+ BlockRewardViewer
20
+ > = (params): Promise<BlockRewardViewer> => {
21
+ if (rewardServiceSingleton) return rewardServiceSingleton
22
+ return timeBudget('initBlockRewardViewer', params.logger, () => {
23
+ const { config } = params
24
+ rewardServiceSingleton = canUseEvmBlockRewardViewer({ config })
25
+ ? initEvmBlockRewardViewer(params)
26
+ : initXyoBlockRewardViewer(params as SimpleBlockRewardViewerParams)
27
+ return rewardServiceSingleton
28
+ }, 2000, true)
29
+ }
30
+
31
+ export const initXyoBlockRewardViewer = (params: SimpleBlockRewardViewerParams): Promise<BlockRewardViewer> => {
32
+ if (rewardServiceSingleton) return rewardServiceSingleton
33
+ return timeBudget('initXyoBlockRewardViewer', params.logger, () => {
34
+ rewardServiceSingleton = SimpleBlockRewardViewer.create(params)
35
+ return rewardServiceSingleton
36
+ }, 2000, true)
37
+ }
38
+
39
+ const canUseEvmBlockRewardViewer = (params: { config: Pick<Config, 'evm'> }) => canUseEvmProvider({ config: params.config })
40
+
41
+ export const initEvmBlockRewardViewer = async (params: ({
42
+ chainContractViewer: ChainContractViewer
43
+ config: Pick<Config, 'evm'>
44
+ logger?: Logger
45
+ })): Promise<BlockRewardViewer> => {
46
+ if (rewardServiceSingleton) return rewardServiceSingleton
47
+ return await timeBudget('initEvmBlockRewardViewer', params.logger, async () => {
48
+ const provider = assertEx(await initEvmProvider(params))
49
+ const evmBlockRewardViewerParams: EvmBlockRewardViewerParams = { ...params, provider }
50
+ rewardServiceSingleton = EvmBlockRewardViewer.create(evmBlockRewardViewerParams)
51
+ return rewardServiceSingleton
52
+ }, 2000, true)
53
+ }
@@ -0,0 +1,26 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import type { Initializable } from '@xyo-network/xl1-protocol'
3
+ import { timeBudget, type TimeSyncViewer } from '@xyo-network/xl1-protocol-sdk'
4
+ import type { Config } from 'cosmiconfig'
5
+
6
+ import { type BaseTimeServiceParams, BaseTimeSyncService } from '../Time/index.ts'
7
+ import { canUseEvmProvider, initEvmProvider } from './evm/index.ts'
8
+
9
+ let timeSyncServiceSingleton: Promisable<TimeSyncViewer> | undefined
10
+
11
+ export const initTimeService: Initializable<BaseTimeServiceParams<Pick<Config, 'evm'>>, TimeSyncViewer> = async ({
12
+ blockViewer, config, logger, meterProvider, traceProvider,
13
+ }) => {
14
+ if (timeSyncServiceSingleton) return timeSyncServiceSingleton
15
+
16
+ return await timeBudget('initTimeService', logger, async () => {
17
+ // Configure provider for optional Ethereum time sync
18
+ const ethProvider = canUseEvmProvider({ config }) ? await initEvmProvider({ config }) : undefined
19
+
20
+ // Create service
21
+ timeSyncServiceSingleton = BaseTimeSyncService.create({
22
+ blockViewer, ethProvider, logger, meterProvider, traceProvider,
23
+ })
24
+ return await timeSyncServiceSingleton
25
+ }, 2000, true)
26
+ }
@@ -0,0 +1,15 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import type { Initializable } from '@xyo-network/xl1-protocol'
3
+ import type { BlockProducerService } from '@xyo-network/xl1-protocol-sdk'
4
+
5
+ import type { SimpleBlockRunnerParams } from '../simple/index.ts'
6
+ import { initBlockProducer } from './producer.ts'
7
+
8
+ let serviceSingleton: Promisable<BlockProducerService> | undefined
9
+
10
+ export const initValidator: Initializable<SimpleBlockRunnerParams, BlockProducerService>
11
+ = (params: SimpleBlockRunnerParams): Promisable<BlockProducerService> => {
12
+ if (serviceSingleton) return serviceSingleton
13
+ serviceSingleton = initBlockProducer(params)
14
+ return serviceSingleton
15
+ }
package/src/index.ts CHANGED
@@ -1,17 +1,17 @@
1
1
  export * from './AccountBalance/index.ts'
2
- export * from './AccountTransfers/index.ts'
3
2
  export * from './BaseService.ts'
4
- export * from './BlockProducer/index.ts'
5
3
  export * from './BlockReward/index.ts'
6
4
  export * from './blockViewerFromChainIteratorAndArchivist.ts'
7
5
  export * from './ChainBlockNumberIteration/index.ts'
8
6
  export * from './ChainService/index.ts'
9
7
  export * from './ChainValidator/index.ts'
10
8
  export * from './Election/index.ts'
9
+ export * from './implementation/index.ts'
11
10
  export * from './model/index.ts'
12
11
  export * from './NetworkStakeStepReward/index.ts'
13
12
  export * from './PendingTransactions/index.ts'
14
13
  export * from './Schemas/index.ts'
14
+ export * from './simple/index.ts'
15
15
  export * from './StakeIntent/index.ts'
16
16
  export * from './StepStake/index.ts'
17
17
  export * from './Time/index.ts'
@@ -0,0 +1 @@
1
+ export * from './runner/index.ts'