@xyo-network/chain-services 1.17.0 → 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 (182) 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 +4 -2
  12. package/dist/neutral/ChainBlockNumberIteration/ChainBlockNumberIterationService.d.ts.map +1 -1
  13. package/dist/neutral/ChainService/Evm/Evm.d.ts +2 -1
  14. package/dist/neutral/ChainService/Evm/Evm.d.ts.map +1 -1
  15. package/dist/neutral/ChainService/Memory/Memory.d.ts +2 -0
  16. package/dist/neutral/ChainService/Memory/Memory.d.ts.map +1 -1
  17. package/dist/neutral/ChainValidator/XyoValidator.d.ts +2 -16
  18. package/dist/neutral/ChainValidator/XyoValidator.d.ts.map +1 -1
  19. package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts +7 -6
  20. package/dist/neutral/PendingTransactions/BasePendingTransactions.d.ts.map +1 -1
  21. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts +5 -4
  22. package/dist/neutral/StakeIntent/XyoStakeIntentService.d.ts.map +1 -1
  23. package/dist/neutral/blockViewerFromChainIteratorAndArchivist.d.ts.map +1 -1
  24. package/dist/neutral/implementation/accountBalance.d.ts +7 -0
  25. package/dist/neutral/implementation/accountBalance.d.ts.map +1 -0
  26. package/dist/neutral/implementation/blockViewer.d.ts +7 -0
  27. package/dist/neutral/implementation/blockViewer.d.ts.map +1 -0
  28. package/dist/neutral/implementation/chain/evm.d.ts +7 -0
  29. package/dist/neutral/implementation/chain/evm.d.ts.map +1 -0
  30. package/dist/neutral/implementation/chain/index.d.ts +7 -0
  31. package/dist/neutral/implementation/chain/index.d.ts.map +1 -0
  32. package/dist/neutral/implementation/evm/index.d.ts +2 -0
  33. package/dist/neutral/implementation/evm/index.d.ts.map +1 -0
  34. package/dist/neutral/implementation/evm/initChainId.d.ts +4 -0
  35. package/dist/neutral/implementation/evm/initChainId.d.ts.map +1 -0
  36. package/dist/neutral/implementation/evm/initEvmProvider.d.ts +11 -0
  37. package/dist/neutral/implementation/evm/initEvmProvider.d.ts.map +1 -0
  38. package/dist/neutral/implementation/evm/initInfuraProvider.d.ts +6 -0
  39. package/dist/neutral/implementation/evm/initInfuraProvider.d.ts.map +1 -0
  40. package/dist/neutral/implementation/evm/initJsonRpcProvider.d.ts +6 -0
  41. package/dist/neutral/implementation/evm/initJsonRpcProvider.d.ts.map +1 -0
  42. package/dist/neutral/implementation/head/createBootstrapHead.d.ts +5 -0
  43. package/dist/neutral/implementation/head/createBootstrapHead.d.ts.map +1 -0
  44. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts +8 -0
  45. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeDestinationDetails.d.ts.map +1 -0
  46. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts +9 -0
  47. package/dist/neutral/implementation/head/createForkedHead/config/getBridgeSourceDetails.d.ts.map +1 -0
  48. package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts +4 -0
  49. package/dist/neutral/implementation/head/createForkedHead/config/getForkDetails.d.ts.map +1 -0
  50. package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts +4 -0
  51. package/dist/neutral/implementation/head/createForkedHead/config/index.d.ts.map +1 -0
  52. package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts +5 -0
  53. package/dist/neutral/implementation/head/createForkedHead/createForkedHead.d.ts.map +1 -0
  54. package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts +11 -0
  55. package/dist/neutral/implementation/head/createForkedHead/getBridgeDestinationObservation.d.ts.map +1 -0
  56. package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts +11 -0
  57. package/dist/neutral/implementation/head/createForkedHead/getBridgeIntent.d.ts.map +1 -0
  58. package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts +11 -0
  59. package/dist/neutral/implementation/head/createForkedHead/getBridgeSourceObservation.d.ts.map +1 -0
  60. package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts +13 -0
  61. package/dist/neutral/implementation/head/createForkedHead/getFirstBlockForNewChain.d.ts.map +1 -0
  62. package/dist/neutral/implementation/head/createForkedHead/index.d.ts +2 -0
  63. package/dist/neutral/implementation/head/createForkedHead/index.d.ts.map +1 -0
  64. package/dist/neutral/implementation/head/getForkFromBlock.d.ts +12 -0
  65. package/dist/neutral/implementation/head/getForkFromBlock.d.ts.map +1 -0
  66. package/dist/neutral/implementation/head/head.d.ts +11 -0
  67. package/dist/neutral/implementation/head/head.d.ts.map +1 -0
  68. package/dist/neutral/implementation/head/index.d.ts +2 -0
  69. package/dist/neutral/implementation/head/index.d.ts.map +1 -0
  70. package/dist/neutral/implementation/head/submitNewChain.d.ts +10 -0
  71. package/dist/neutral/implementation/head/submitNewChain.d.ts.map +1 -0
  72. package/dist/neutral/implementation/index.d.ts +13 -0
  73. package/dist/neutral/implementation/index.d.ts.map +1 -0
  74. package/dist/neutral/implementation/mempoolRunner.d.ts +7 -0
  75. package/dist/neutral/implementation/mempoolRunner.d.ts.map +1 -0
  76. package/dist/neutral/implementation/mempoolViewer.d.ts +7 -0
  77. package/dist/neutral/implementation/mempoolViewer.d.ts.map +1 -0
  78. package/dist/neutral/implementation/pendingTransactions.d.ts +9 -0
  79. package/dist/neutral/implementation/pendingTransactions.d.ts.map +1 -0
  80. package/dist/neutral/implementation/producer.d.ts +5 -0
  81. package/dist/neutral/implementation/producer.d.ts.map +1 -0
  82. package/dist/neutral/implementation/reward.d.ts +14 -0
  83. package/dist/neutral/implementation/reward.d.ts.map +1 -0
  84. package/dist/neutral/implementation/time.d.ts +6 -0
  85. package/dist/neutral/implementation/time.d.ts.map +1 -0
  86. package/dist/neutral/implementation/validator.d.ts +5 -0
  87. package/dist/neutral/implementation/validator.d.ts.map +1 -0
  88. package/dist/neutral/index.d.ts +2 -2
  89. package/dist/neutral/index.d.ts.map +1 -1
  90. package/dist/neutral/index.mjs +1565 -1140
  91. package/dist/neutral/index.mjs.map +1 -1
  92. package/dist/neutral/simple/block/index.d.ts +2 -0
  93. package/dist/neutral/simple/block/index.d.ts.map +1 -0
  94. package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts +117 -0
  95. package/dist/neutral/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -0
  96. package/dist/neutral/simple/block/runner/generateTransactionFeeTransfers.d.ts.map +1 -0
  97. package/dist/neutral/simple/block/runner/index.d.ts +2 -0
  98. package/dist/neutral/simple/block/runner/index.d.ts.map +1 -0
  99. package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts +2 -0
  100. package/dist/neutral/simple/block/runner/spec/SimpleBlockRewardViewer.d.ts.map +1 -0
  101. package/dist/neutral/simple/index.d.ts +2 -0
  102. package/dist/neutral/simple/index.d.ts.map +1 -0
  103. package/package.json +30 -27
  104. package/src/AccountBalance/accountBalanceServiceFromArchivist.ts +35 -8
  105. package/src/AccountBalance/index.ts +0 -1
  106. package/src/BaseService.ts +0 -13
  107. package/src/BlockReward/EvmBlockRewardViewer.ts +50 -0
  108. package/src/BlockReward/index.ts +1 -3
  109. package/src/ChainBlockNumberIteration/ChainBlockNumberIterationService.ts +14 -2
  110. package/src/ChainService/Evm/Evm.ts +5 -4
  111. package/src/ChainService/Memory/Memory.ts +5 -0
  112. package/src/ChainValidator/XyoValidator.ts +25 -30
  113. package/src/NetworkStakeStepReward/BaseNetworkStakeStepRewardService.ts +18 -18
  114. package/src/PendingTransactions/BasePendingTransactions.ts +10 -5
  115. package/src/Schemas/BaseSchemasService.ts +1 -1
  116. package/src/StakeIntent/XyoStakeIntentService.ts +18 -8
  117. package/src/StepStake/BaseStepStakeService.ts +2 -2
  118. package/src/blockViewerFromChainIteratorAndArchivist.ts +8 -1
  119. package/src/implementation/accountBalance.ts +29 -0
  120. package/src/implementation/blockViewer.ts +29 -0
  121. package/src/implementation/chain/evm.ts +39 -0
  122. package/src/implementation/chain/index.ts +46 -0
  123. package/src/implementation/evm/index.ts +1 -0
  124. package/src/implementation/evm/initChainId.ts +20 -0
  125. package/src/implementation/evm/initEvmProvider.ts +24 -0
  126. package/src/implementation/evm/initInfuraProvider.ts +26 -0
  127. package/src/implementation/evm/initJsonRpcProvider.ts +20 -0
  128. package/src/implementation/head/createBootstrapHead.ts +31 -0
  129. package/src/implementation/head/createForkedHead/config/getBridgeDestinationDetails.ts +27 -0
  130. package/src/implementation/head/createForkedHead/config/getBridgeSourceDetails.ts +19 -0
  131. package/src/implementation/head/createForkedHead/config/getForkDetails.ts +10 -0
  132. package/src/implementation/head/createForkedHead/config/index.ts +3 -0
  133. package/src/implementation/head/createForkedHead/createForkedHead.ts +29 -0
  134. package/src/implementation/head/createForkedHead/getBridgeDestinationObservation.ts +42 -0
  135. package/src/implementation/head/createForkedHead/getBridgeIntent.ts +51 -0
  136. package/src/implementation/head/createForkedHead/getBridgeSourceObservation.ts +46 -0
  137. package/src/implementation/head/createForkedHead/getFirstBlockForNewChain.ts +41 -0
  138. package/src/implementation/head/createForkedHead/index.ts +1 -0
  139. package/src/implementation/head/getForkFromBlock.ts +43 -0
  140. package/src/implementation/head/head.ts +49 -0
  141. package/src/implementation/head/index.ts +1 -0
  142. package/src/implementation/head/submitNewChain.ts +27 -0
  143. package/src/implementation/index.ts +12 -0
  144. package/src/implementation/mempoolRunner.ts +29 -0
  145. package/src/implementation/mempoolViewer.ts +29 -0
  146. package/src/implementation/pendingTransactions.ts +36 -0
  147. package/src/implementation/producer.ts +16 -0
  148. package/src/implementation/reward.ts +53 -0
  149. package/src/implementation/time.ts +26 -0
  150. package/src/implementation/validator.ts +15 -0
  151. package/src/index.ts +2 -2
  152. package/src/simple/block/index.ts +1 -0
  153. package/src/{BlockProducer/BaseBlockProducerService.ts → simple/block/runner/SimpleBlockRunner.ts} +111 -74
  154. package/src/simple/block/runner/index.ts +1 -0
  155. package/src/simple/block/runner/spec/SimpleBlockRewardViewer.ts +413 -0
  156. package/src/simple/index.ts +1 -0
  157. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts +0 -35
  158. package/dist/neutral/AccountBalance/BaseAccountBalanceService.d.ts.map +0 -1
  159. package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts +0 -13
  160. package/dist/neutral/AccountTransfers/BaseAccountTransfersService.d.ts.map +0 -1
  161. package/dist/neutral/AccountTransfers/index.d.ts +0 -2
  162. package/dist/neutral/AccountTransfers/index.d.ts.map +0 -1
  163. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts +0 -85
  164. package/dist/neutral/BlockProducer/BaseBlockProducerService.d.ts.map +0 -1
  165. package/dist/neutral/BlockProducer/generateTransactionFeeTransfers.d.ts.map +0 -1
  166. package/dist/neutral/BlockProducer/index.d.ts +0 -2
  167. package/dist/neutral/BlockProducer/index.d.ts.map +0 -1
  168. package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts +0 -10
  169. package/dist/neutral/BlockReward/BaseBlockRewardService.d.ts.map +0 -1
  170. package/dist/neutral/BlockReward/EvmBlockRewardService.d.ts +0 -18
  171. package/dist/neutral/BlockReward/EvmBlockRewardService.d.ts.map +0 -1
  172. package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts +0 -23
  173. package/dist/neutral/BlockReward/MemoryBlockRewardService.d.ts.map +0 -1
  174. package/src/AccountBalance/BaseAccountBalanceService.ts +0 -98
  175. package/src/AccountTransfers/BaseAccountTransfersService.ts +0 -36
  176. package/src/AccountTransfers/index.ts +0 -1
  177. package/src/BlockProducer/index.ts +0 -1
  178. package/src/BlockReward/BaseBlockRewardService.ts +0 -17
  179. package/src/BlockReward/EvmBlockRewardService.ts +0 -49
  180. package/src/BlockReward/MemoryBlockRewardService.ts +0 -72
  181. /package/dist/neutral/{BlockProducer → simple/block/runner}/generateTransactionFeeTransfers.d.ts +0 -0
  182. /package/src/{BlockProducer → simple/block/runner}/generateTransactionFeeTransfers.ts +0 -0
@@ -0,0 +1,413 @@
1
+ import '@xylabs/vitest-extended'
2
+
3
+ import type {
4
+ Address, CreatableName, Hash, Promisable,
5
+ } from '@xylabs/sdk-js'
6
+ import {
7
+ asAddress, assertEx,
8
+ delay,
9
+ exists,
10
+ filterAs,
11
+ hexToBigInt, ZERO_HASH,
12
+ } from '@xylabs/sdk-js'
13
+ import { Account } from '@xyo-network/account'
14
+ import type { AccountInstance } from '@xyo-network/account-model'
15
+ import { MemoryArchivist } from '@xyo-network/archivist-memory'
16
+ import type { ArchivistInstance } from '@xyo-network/archivist-model'
17
+ import {
18
+ buildRandomChain, buildRandomTransaction, createGenesisBlock,
19
+ } from '@xyo-network/chain-protocol'
20
+ import { validateHydratedBlockState } from '@xyo-network/chain-validation'
21
+ import type { PayloadBundle, WithHashMeta } from '@xyo-network/payload-model'
22
+ import { PayloadBundleSchema } from '@xyo-network/payload-model'
23
+ import { HDWallet } from '@xyo-network/wallet'
24
+ import type {
25
+ BlockBoundWitness, ChainId,
26
+ HydratedBlock,
27
+ TimeDomain, TimePayload,
28
+ } from '@xyo-network/xl1-protocol'
29
+ import {
30
+ asBlockBoundWitness,
31
+ asChainStakeIntent,
32
+ asTransactionBoundWitness,
33
+ asTransfer,
34
+ TimeSchema,
35
+ XYO_ZERO_ADDRESS,
36
+ } from '@xyo-network/xl1-protocol'
37
+ import type {
38
+ BlockRewardViewer,
39
+ Config, ElectionService,
40
+ HydratedBlockStateValidationFunction, MempoolRunner, MempoolViewer, StakeIntentService,
41
+ TimeSyncViewer,
42
+ } from '@xyo-network/xl1-protocol-sdk'
43
+ import {
44
+ flattenHydratedBlock, flattenHydratedTransaction, getDefaultConfig,
45
+ HydratedBlockStateValidationError,
46
+ SimpleBlockRewardViewer,
47
+ SimpleMempoolRunner,
48
+ SimpleMempoolViewer,
49
+ } from '@xyo-network/xl1-protocol-sdk'
50
+ import {
51
+ beforeAll, beforeEach, describe, expect, it,
52
+ } from 'vitest'
53
+ import { mock } from 'vitest-mock-extended'
54
+
55
+ import { accountBalancesViewerFromArchivist } from '../../../../AccountBalance/index.ts'
56
+ import type { SimpleBlockRunnerParams } from '../SimpleBlockRunner.ts'
57
+ import { SimpleBlockRunner } from '../SimpleBlockRunner.ts'
58
+
59
+ describe('XyoBlockProducer', () => {
60
+ const leaderCount = 3
61
+ let mempoolViewer: MempoolViewer
62
+ let mempoolRunner: MempoolRunner
63
+ let account: AccountInstance
64
+ let blockProducer: SimpleBlockRunner
65
+ let chainArchivist: ArchivistInstance
66
+ // let chainIterator: EventingChainBlockNumberIteratorService
67
+ let electionService: ReturnType<typeof mock<ElectionService>>
68
+ let pendingTransactionsArchivist: ArchivistInstance
69
+ let pendingBlocksArchivist: ArchivistInstance
70
+ let rejectedTransactionsArchivist: ArchivistInstance
71
+ let rewardAddress = '1111111111111111111111111111111111111111' as Address
72
+ let blockRewardViewer: BlockRewardViewer
73
+ let stakeIntentService: ReturnType<typeof mock<StakeIntentService>>
74
+ let time: TimeSyncViewer
75
+ let transactionAccount: AccountInstance
76
+ const validPendingTransactions = Math.ceil(SimpleBlockRunner.DefaultBlockSize)
77
+ let config: Config
78
+
79
+ let currentBlock: WithHashMeta<BlockBoundWitness>
80
+
81
+ const chainId = assertEx(asAddress('Be17531fec6fEc55f3EAc3f1c187c87e4C47F81E'))
82
+
83
+ beforeAll(async () => {
84
+ account = await Account.random()
85
+ transactionAccount = await HDWallet.fromPhrase('room maximum palace fragile man pyramid school indoor base business want bronze assume marble report')
86
+ })
87
+
88
+ beforeEach(async () => {
89
+ config = getDefaultConfig()
90
+ config.producer.disableIntentRedeclaration = false
91
+ chainArchivist = await MemoryArchivist.create({ account: 'random' })
92
+ const genesisBlock = await createGenesisBlock(account, chainId, 0n, account.address)
93
+ await chainArchivist.insert([...genesisBlock[1], genesisBlock[0]])
94
+ // const chainMap = readPayloadMapFromStore<WithStorageMeta<Payload>>(chainArchivist)
95
+ // chainIterator = await ChainBlockNumberIterationService.create({
96
+ // chainMap,
97
+ // config,
98
+ // })
99
+ rejectedTransactionsArchivist = await MemoryArchivist.create({ account: 'random' })
100
+ electionService = mock<ElectionService>()
101
+ pendingTransactionsArchivist = await MemoryArchivist.create({ account: 'random' })
102
+ pendingBlocksArchivist = await MemoryArchivist.create({ account: 'random' })
103
+ mempoolViewer = await SimpleMempoolViewer.create({ pendingBlocksArchivist, pendingTransactionsArchivist })
104
+ mempoolRunner = await SimpleMempoolRunner.create({ pendingBlocksArchivist, pendingTransactionsArchivist })
105
+ // const BasePendingTransactionsServiceParams = {
106
+ // name: 'TestBasePendingTransactionsServiceParams' as CreatableName,
107
+ // chainArchivist,
108
+ // chainId,
109
+ // config,
110
+ // pendingTransactionsArchivist,
111
+ // rejectedTransactionsArchivist,
112
+ // } satisfies BasePendingTransactionsServiceParams
113
+ // pendingTransactionsService = await BasePendingTransactionsService.create(BasePendingTransactionsServiceParams)
114
+ await addPendingTransactions(validPendingTransactions)
115
+
116
+ stakeIntentService = mock<StakeIntentService>()
117
+ stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([])
118
+ time = {
119
+ currentTimeAndHash(domain: TimeDomain): Promisable<[number, Hash | null]> {
120
+ switch (domain) {
121
+ case 'epoch': {
122
+ return [Date.now(), null]
123
+ }
124
+ case 'xl1': {
125
+ return [1, '00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff' as Hash]
126
+ }
127
+ case 'ethereum': {
128
+ return [1, '00112233445566778899aabbccddeeff00112233445566778899aabbccddeeff' as Hash]
129
+ }
130
+ // No default
131
+ }
132
+ },
133
+ currentTime(domain: TimeDomain): Promisable<[string, number]> {
134
+ switch (domain) {
135
+ case 'epoch': {
136
+ return ['epoch', Date.now()]
137
+ }
138
+ case 'xl1': {
139
+ return ['xl1', 1]
140
+ }
141
+ case 'ethereum': {
142
+ return ['ethereum', 1]
143
+ }
144
+ // No default
145
+ }
146
+ },
147
+ currentTimePayload(): Promisable<TimePayload> {
148
+ return {
149
+ schema: TimeSchema, epoch: Date.now(), xl1: 1,
150
+ }
151
+ },
152
+ /** Convert time between different domains */
153
+ convertTime(fromDomain: TimeDomain, toDomain: TimeDomain, from: number): Promisable<number> {
154
+ if (fromDomain === toDomain) {
155
+ return from
156
+ }
157
+ if (fromDomain === 'epoch' && toDomain === 'xl1') {
158
+ return 1
159
+ }
160
+ if (fromDomain === 'xl1' && toDomain === 'epoch') {
161
+ return Date.now()
162
+ }
163
+ return from
164
+ },
165
+ }
166
+ blockRewardViewer = await SimpleBlockRewardViewer.create()
167
+ const payloads = await chainArchivist.next({ limit: 1000 })
168
+ expect(payloads.length).toBe(9)
169
+ const balanceViewer = await accountBalancesViewerFromArchivist(chainId, chainArchivist)
170
+ const params: SimpleBlockRunnerParams = {
171
+ name: 'TestXyoBlockProducerParams' as CreatableName,
172
+ account,
173
+ balanceViewer,
174
+ chainId,
175
+ config,
176
+ mempoolRunner,
177
+ mempoolViewer,
178
+ // electionService,
179
+ // pendingTransactionsService,
180
+ // pendingBundledTransactionsArchivist,
181
+ rejectedTransactionsArchivist,
182
+ rewardAddress,
183
+ blockRewardViewer,
184
+ // stakeIntentService,
185
+ time,
186
+ validateHydratedBlockState,
187
+ }
188
+ blockProducer = await SimpleBlockRunner.create(params)
189
+ })
190
+
191
+ const addPendingTransactions = async (count: number = validPendingTransactions) => {
192
+ for (let i = 0; i < count; i++) {
193
+ const transaction = await buildRandomTransaction(chainId, [], transactionAccount)
194
+ const bundledPayload: PayloadBundle = {
195
+ schema: PayloadBundleSchema, payloads: flattenHydratedTransaction(transaction), root: transaction[0]._hash,
196
+ }
197
+ await pendingTransactionsArchivist.insert([bundledPayload])
198
+ }
199
+ }
200
+
201
+ describe('next', () => {
202
+ describe('block production', () => {
203
+ describe('when not current block leader', () => {
204
+ beforeEach(async () => {
205
+ const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
206
+ currentBlock = hydratedBlock[0]
207
+ await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
208
+ const leaders = await Promise.all(Array.from({ length: leaderCount }, async () => (await Account.random()).address))
209
+ electionService.getCreatorCommitteeForNextBlock.mockResolvedValue(leaders)
210
+ stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([])
211
+ })
212
+ it('should return undefined', async () => {
213
+ // Arrange
214
+
215
+ // Act
216
+ const result = await blockProducer.next(currentBlock)
217
+
218
+ // Assert
219
+ expect(result).toBeUndefined()
220
+ })
221
+ })
222
+ describe('when current block leader', () => {
223
+ beforeEach(async () => {
224
+ const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
225
+ currentBlock = hydratedBlock[0]
226
+ await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
227
+ await delay(1000)
228
+ electionService.getCreatorCommitteeForNextBlock.mockResolvedValue([account.address])
229
+ })
230
+ it('should return a valid block', async () => {
231
+ // Arrange
232
+
233
+ // Act
234
+ const result = await blockProducer.next(currentBlock)
235
+
236
+ // Assert
237
+ expect(result).toBeDefined()
238
+ expect(result).toBeArrayOfSize(2)
239
+ const [block, transactionsAndData] = result ?? []
240
+ expect(block).toBeDefined()
241
+ expect(asBlockBoundWitness(block)).toBeDefined()
242
+ expect(transactionsAndData).toBeDefined()
243
+ expect(transactionsAndData).toBeArray()
244
+ const transactions = transactionsAndData?.filter(asTransactionBoundWitness).filter(exists)
245
+ expect(transactions).toBeArrayOfSize(validPendingTransactions)
246
+ })
247
+ it('should remove invalid transactions', async () => {
248
+ // Arrange
249
+ let rejectBlock = true
250
+ const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (
251
+ hydratedBlock: HydratedBlock,
252
+ chainId: ChainId,
253
+ ) => {
254
+ return rejectBlock ? [await Promise.resolve(new HydratedBlockStateValidationError(ZERO_HASH, chainId, hydratedBlock, 'Invalid block'))] : []
255
+ }
256
+ // const blockViewer = blockViewerFromChainIteratorAndArchivist(chainIterator, chainArchivist)
257
+ const balanceViewer = await accountBalancesViewerFromArchivist(chainId, chainArchivist)
258
+ const params: SimpleBlockRunnerParams = {
259
+ name: 'TestXyoBlockProducerParams' as CreatableName,
260
+ account,
261
+ balanceViewer,
262
+ chainId,
263
+ config,
264
+ // electionService,
265
+ mempoolRunner,
266
+ mempoolViewer,
267
+ // pendingBundledTransactionsArchivist,
268
+ // pendingTransactionsService,
269
+ rejectedTransactionsArchivist,
270
+ rewardAddress,
271
+ blockRewardViewer,
272
+ // stakeIntentService,
273
+ time,
274
+ validateHydratedBlockState,
275
+ }
276
+ blockProducer = await SimpleBlockRunner.create(params)
277
+
278
+ // Act
279
+ // Force producer to reject first block
280
+ rejectBlock = true
281
+ const invalidTransactionCount = Math.floor(validPendingTransactions / 2)
282
+ await addPendingTransactions(invalidTransactionCount)
283
+
284
+ // Ensure bad block is not produced
285
+ const firstResult = await blockProducer.next(currentBlock)
286
+ expect(firstResult).toBeUndefined()
287
+ // Do not reject second block
288
+ rejectBlock = false
289
+ // Add more pending transactions
290
+ const newTransactionCount = Math.floor(validPendingTransactions / 2)
291
+ await addPendingTransactions(newTransactionCount)
292
+ // Ensure producer recovers from bad block
293
+ const result = await blockProducer.next(currentBlock)
294
+
295
+ // Assert
296
+ expect(result).toBeDefined()
297
+ expect(result).toBeArrayOfSize(2)
298
+ const [block, transactionsAndData] = result ?? []
299
+ expect(block).toBeDefined()
300
+ if (block) {
301
+ expect(asBlockBoundWitness(block)).toBeDefined()
302
+ expect(transactionsAndData).toBeDefined()
303
+ expect(transactionsAndData).toBeArray()
304
+ const transactions = transactionsAndData?.filter(asTransactionBoundWitness).filter(exists) ?? []
305
+ expect(transactions).toBeArrayOfSize(newTransactionCount)
306
+ const transfers = filterAs(assertEx(transactionsAndData), asTransfer)
307
+ const blockRewardTransfer = transfers.find(transfer => transfer.from === XYO_ZERO_ADDRESS)
308
+ expect(blockRewardTransfer).toBeDefined()
309
+ let totalTransfer = 0n
310
+ for (const value of Object.values(blockRewardTransfer?.transfers ?? {})) {
311
+ const bigIntValue = hexToBigInt(value)
312
+ totalTransfer += bigIntValue
313
+ }
314
+ expect(totalTransfer).toEqual(3_000_000_000_000_000_000_000n)
315
+ }
316
+ })
317
+ })
318
+ })
319
+ describe('producer re-declare intent', () => {
320
+ describe('when within re-declare intent window', () => {
321
+ beforeEach(async () => {
322
+ const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
323
+ currentBlock = hydratedBlock[0]
324
+ await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
325
+ electionService.getCreatorCommitteeForNextBlock.mockResolvedValue([account.address])
326
+ stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([[0, 10]])
327
+ })
328
+ it('should re-declare intent if configured for re-declaration', async () => {
329
+ // Arrange
330
+ config.producer.disableIntentRedeclaration = false
331
+
332
+ // Act
333
+ const result = await blockProducer.next(currentBlock)
334
+
335
+ // Assert
336
+ expect(result).toBeDefined()
337
+ expect(result).toBeArrayOfSize(2)
338
+ const [block, payloads] = result ?? []
339
+ expect(block).toBeDefined()
340
+ expect(asBlockBoundWitness(block)).toBeDefined()
341
+ expect(payloads).toBeArray()
342
+ const allData = flattenHydratedBlock(assertEx(result))
343
+ const declaration = filterAs(allData, asChainStakeIntent).at(0)
344
+ expect(declaration).toBeDefined()
345
+ expect(declaration?.from).toEqual(blockProducer.address)
346
+ })
347
+ it('should not re-declare intent if not configured for re-declaration', async () => {
348
+ // Arrange
349
+ config.producer.disableIntentRedeclaration = true
350
+
351
+ // Act
352
+ const result = await blockProducer.next(currentBlock)
353
+
354
+ // Assert
355
+ expect(result).toBeDefined()
356
+ expect(result).toBeArrayOfSize(2)
357
+ const [block, payloads] = result ?? []
358
+ expect(block).toBeDefined()
359
+ expect(asBlockBoundWitness(block)).toBeDefined()
360
+ expect(payloads).toBeArray()
361
+ const allData = flattenHydratedBlock(assertEx(result))
362
+ const declaration = filterAs(allData, asChainStakeIntent).at(0)
363
+ expect(declaration).toBeUndefined()
364
+ })
365
+ })
366
+ describe('when not within re-declare intent window', () => {
367
+ beforeEach(async () => {
368
+ const [hydratedBlock] = await buildRandomChain(account, 1, undefined, chainId, transactionAccount)
369
+ currentBlock = hydratedBlock[0]
370
+ await chainArchivist.insert(flattenHydratedBlock(hydratedBlock))
371
+ electionService.getCreatorCommitteeForNextBlock.mockResolvedValue([account.address])
372
+ stakeIntentService.getDeclaredCandidateRanges.mockResolvedValue([[0, 1_000_000_000]])
373
+ })
374
+ it('should not re-declare intent if configured for re-declaration', async () => {
375
+ // Arrange
376
+ config.producer.disableIntentRedeclaration = false
377
+
378
+ // Act
379
+ const result = await blockProducer.next(currentBlock)
380
+
381
+ // Assert
382
+ expect(result).toBeDefined()
383
+ expect(result).toBeArrayOfSize(2)
384
+ const [block, payloads] = result ?? []
385
+ expect(block).toBeDefined()
386
+ expect(asBlockBoundWitness(block)).toBeDefined()
387
+ expect(payloads).toBeArray()
388
+ const allData = flattenHydratedBlock(assertEx(result))
389
+ const declaration = filterAs(allData, asChainStakeIntent).at(0)
390
+ expect(declaration).toBeUndefined()
391
+ })
392
+ it('should not re-declare intent if not configured for re-declaration', async () => {
393
+ // Arrange
394
+ config.producer.disableIntentRedeclaration = true
395
+
396
+ // Act
397
+ const result = await blockProducer.next(currentBlock)
398
+
399
+ // Assert
400
+ expect(result).toBeDefined()
401
+ expect(result).toBeArrayOfSize(2)
402
+ const [block, payloads] = result ?? []
403
+ expect(block).toBeDefined()
404
+ expect(asBlockBoundWitness(block)).toBeDefined()
405
+ expect(payloads).toBeArray()
406
+ const allData = flattenHydratedBlock(assertEx(result))
407
+ const declaration = filterAs(allData, asChainStakeIntent).at(0)
408
+ expect(declaration).toBeUndefined()
409
+ })
410
+ })
411
+ })
412
+ })
413
+ })
@@ -0,0 +1 @@
1
+ export * from './block/index.ts'
@@ -1,35 +0,0 @@
1
- import { Address, Hash } from '@xylabs/sdk-js';
2
- import { ReadArchivist } from '@xyo-network/archivist-model';
3
- import { AttoXL1, XL1BlockRange } from '@xyo-network/xl1-protocol';
4
- import { AccountBalanceHistoryItem, AccountBalanceViewer, BalanceStepSummaryContext, BlockViewer, TransfersStepSummaryContext } from '@xyo-network/xl1-protocol-sdk';
5
- import z from 'zod';
6
- import { BaseService } from '../BaseService.ts';
7
- import { BaseServiceParams } from '../model/index.ts';
8
- export declare const BaseAccountBalanceServiceParamsZod: z.ZodObject<{
9
- blockViewer: z.ZodObject<{}, z.z.core.$loose>;
10
- chainArchivist: z.ZodObject<{}, z.z.core.$loose>;
11
- chainIterator: z.ZodObject<{}, z.z.core.$loose>;
12
- context: z.ZodObject<{}, z.z.core.$loose>;
13
- transferContext: z.ZodObject<{}, z.z.core.$loose>;
14
- }, z.z.core.$strip>;
15
- export interface BaseAccountBalanceServiceParams extends BaseServiceParams {
16
- blockViewer: BlockViewer;
17
- chainArchivist: ReadArchivist;
18
- context: BalanceStepSummaryContext;
19
- transfersSummaryContext: TransfersStepSummaryContext;
20
- }
21
- export declare class BaseAccountBalanceService extends BaseService<BaseAccountBalanceServiceParams> implements AccountBalanceViewer {
22
- protected accountBalanceViewer: AccountBalanceViewer;
23
- protected get blockViewer(): BlockViewer;
24
- static paramsHandler(params?: Partial<BaseAccountBalanceServiceParams> | undefined): Promise<BaseAccountBalanceServiceParams>;
25
- accountBalance(address: Address, headOrRange?: XL1BlockRange | Hash): Promise<AttoXL1>;
26
- accountBalanceHistory(address: Address): Promise<AccountBalanceHistoryItem[]>;
27
- accountBalanceHistory(address: Address, head: Hash): Promise<AccountBalanceHistoryItem[]>;
28
- accountBalanceHistory(address: Address, range: XL1BlockRange): Promise<AccountBalanceHistoryItem[]>;
29
- accountsBalances(address: Address[], _headOrRange?: Hash | XL1BlockRange): Promise<Partial<Record<Address, AttoXL1>>>;
30
- accountsBalancesHistory(addresses: Address[]): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>>;
31
- accountsBalancesHistory(addresses: Address[], head: Hash): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>>;
32
- accountsBalancesHistory(addresses: Address[], range: XL1BlockRange): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>>;
33
- createHandler(): Promise<void>;
34
- }
35
- //# sourceMappingURL=BaseAccountBalanceService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseAccountBalanceService.d.ts","sourceRoot":"","sources":["../../../src/AccountBalance/BaseAccountBalanceService.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAAuB,IAAI,EACnC,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAA;AAC5D,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAA;AAClE,OAAO,EACL,yBAAyB,EACzB,oBAAoB,EAEpB,yBAAyB,EACzB,WAAW,EAEX,2BAA2B,EAC5B,MAAM,+BAA+B,CAAA;AACtC,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,eAAO,MAAM,kCAAkC;;;;;;mBAM7C,CAAA;AAEF,MAAM,WAAW,+BAAgC,SAAQ,iBAAiB;IACxE,WAAW,EAAE,WAAW,CAAA;IACxB,cAAc,EAAE,aAAa,CAAA;IAC7B,OAAO,EAAE,yBAAyB,CAAA;IAClC,uBAAuB,EAAE,2BAA2B,CAAA;CACrD;AAED,qBACa,yBAA0B,SAAQ,WAAW,CAAC,+BAA+B,CAAE,YAAW,oBAAoB;IACzH,SAAS,CAAC,oBAAoB,EAAG,oBAAoB,CAAA;IAErD,SAAS,KAAK,WAAW,gBAExB;WAEqB,aAAa,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,+BAA+B,CAAC,GAAG,SAAS,GAAG,OAAO,CAAC,+BAA+B,CAAC;IAOtI,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,EAAE,aAAa,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC;IAKtF,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAC7E,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IACzF,qBAAqB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,yBAAyB,EAAE,CAAC;IAKnG,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,YAAY,CAAC,EAAE,IAAI,GAAG,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;IAqBrH,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAC7G,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;IACzH,uBAAuB,CAAC,SAAS,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC,CAAC;IAK1H,aAAa;CAO7B"}
@@ -1,13 +0,0 @@
1
- import { Address, Hash } from '@xylabs/sdk-js';
2
- import { AttoXL1 } from '@xyo-network/xl1-protocol';
3
- import { AccountTransfersService, TransfersStepSummaryContext } from '@xyo-network/xl1-protocol-sdk';
4
- import { BaseService } from '../BaseService.ts';
5
- import { BaseServiceParams } from '../model/index.ts';
6
- export interface BaseAccountTransferServiceParams extends BaseServiceParams {
7
- context: TransfersStepSummaryContext;
8
- }
9
- export declare class BaseAccountTransfersService extends BaseService<BaseAccountTransferServiceParams> implements AccountTransfersService {
10
- transfer(head: Hash, address: Address): Promise<AttoXL1>;
11
- transfers(head: Hash, addresses: Address[]): Promise<Partial<Record<Address, AttoXL1>>>;
12
- }
13
- //# sourceMappingURL=BaseAccountTransfersService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseAccountTransfersService.d.ts","sourceRoot":"","sources":["../../../src/AccountTransfers/BaseAccountTransfersService.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EAAa,IAAI,EACzB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACnD,OAAO,EACL,uBAAuB,EACvB,2BAA2B,EAE5B,MAAM,+BAA+B,CAAA;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,gCAAiC,SAAQ,iBAAiB;IACzE,OAAO,EAAE,2BAA2B,CAAA;CACrC;AAED,qBACa,2BAA4B,SAAQ,WAAW,CAAC,gCAAgC,CAAE,YAAW,uBAAuB;IACzH,QAAQ,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAIxD,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;CAW9F"}
@@ -1,2 +0,0 @@
1
- export * from './BaseAccountTransfersService.ts';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/AccountTransfers/index.ts"],"names":[],"mappings":"AAAA,cAAc,kCAAkC,CAAA"}
@@ -1,85 +0,0 @@
1
- import { Address, Hex } from '@xylabs/sdk-js';
2
- import { ArchivistInstance } from '@xyo-network/archivist-model';
3
- import { BlockRewardDiviner } from '@xyo-network/chain-modules';
4
- import { WithHashMeta } from '@xyo-network/payload-model';
5
- import { BlockBoundWitness, ChainStakeIntent, HydratedBlockWithHashMeta, Transfer } from '@xyo-network/xl1-protocol';
6
- import { AccountBalanceViewer, BlockProducerService, Config, MempoolViewer, StakeIntentService, TimeSyncViewer } from '@xyo-network/xl1-protocol-sdk';
7
- import z from 'zod';
8
- import { BaseService } from '../BaseService.ts';
9
- import { XyoValidatorParams } from '../ChainValidator/index.ts';
10
- /**
11
- * The default block size for a block
12
- */
13
- export declare const DEFAULT_BLOCK_SIZE = 10;
14
- /**
15
- * The amount of time for which a producer will restake their intent
16
- */
17
- export declare const XYO_PRODUCER_REDECLARATION_DURATION = 10000;
18
- /**
19
- * The number of blocks within which a producer will redeclare
20
- * their intent to produce blocks
21
- */
22
- export declare const XYO_PRODUCER_REDECLARATION_WINDOW = 500;
23
- export declare const BaseBlockProducerServiceParamsZod: z.ZodObject<{
24
- balanceService: z.ZodObject<{}, z.z.core.$loose>;
25
- pendingTransactionsService: z.ZodObject<{}, z.z.core.$loose>;
26
- rejectedTransactionsArchivist: z.ZodObject<{}, z.z.core.$loose>;
27
- rewardAddress: z.ZodPipe<z.ZodString, z.ZodTransform<Address, string>>;
28
- time: z.ZodObject<{}, z.z.core.$loose>;
29
- }, z.z.core.$strip>;
30
- export interface BaseBlockProducerServiceParams extends XyoValidatorParams<Pick<Config, 'producer'>> {
31
- balanceService: AccountBalanceViewer;
32
- pendingTransactionsService: MempoolViewer;
33
- rejectedTransactionsArchivist: ArchivistInstance;
34
- rewardAddress: Address;
35
- time: TimeSyncViewer;
36
- }
37
- export declare class BaseBlockProducerService extends BaseService<BaseBlockProducerServiceParams> implements BlockProducerService {
38
- protected _blockRewardDiviner: BlockRewardDiviner | undefined;
39
- /**
40
- * The default block size for a block
41
- */
42
- static get DefaultBlockSize(): number;
43
- /**
44
- * The amount of time for which the producer will redeclare
45
- * their intent to continue producing blocks
46
- */
47
- static get RedeclarationDuration(): number;
48
- /**
49
- * The number of blocks within which the producer will redeclare
50
- * their intent to continue producing blocks
51
- */
52
- static get RedeclarationWindow(): number;
53
- get address(): Address;
54
- protected get account(): import("@xyo-network/account-model").AccountInstance;
55
- protected get balanceService(): AccountBalanceViewer;
56
- protected get blockViewer(): import("@xyo-network/xl1-protocol-sdk").BlockViewer;
57
- protected get chainId(): Hex;
58
- protected get electionService(): import("@xyo-network/xl1-protocol-sdk").ElectionService;
59
- protected get pendingTransactionsService(): MempoolViewer;
60
- protected get rejectedTransactionsArchivist(): 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, import("@xyo-network/payload-model").Payload>;
61
- protected get rewardAddress(): Address;
62
- protected get rewardService(): import("@xyo-network/xl1-protocol-sdk").BlockRewardService;
63
- protected get stakeIntentService(): StakeIntentService;
64
- protected get time(): TimeSyncViewer;
65
- protected get validateHydratedBlockState(): import("@xyo-network/xl1-protocol-sdk").HydratedBlockStateValidationFunction;
66
- static paramsHandler(params?: Partial<BaseBlockProducerServiceParams> | undefined): Promise<BaseBlockProducerServiceParams>;
67
- next(head: WithHashMeta<BlockBoundWitness>): Promise<HydratedBlockWithHashMeta | undefined>;
68
- protected getBlockRewardTransfers(block: number): Promise<Transfer[]>;
69
- /**
70
- * Handles the producer redeclaration logic
71
- * @param head The current head block
72
- * @returns chain stake intent for the producer redeclaration, or undefined if no redeclaration is needed
73
- */
74
- protected getProducerRedeclaration(head: WithHashMeta<BlockBoundWitness>): Promise<ChainStakeIntent | undefined>;
75
- protected proposeNextValidBlock(head: WithHashMeta<BlockBoundWitness>, validateBalances?: boolean): Promise<HydratedBlockWithHashMeta | undefined>;
76
- private filterByFunded;
77
- private generateTimePayload;
78
- /**
79
- * Check if a heartbeat block is required based on network activity.
80
- * @param head The current head block
81
- * @returns True if a heartbeat is required, false otherwise
82
- */
83
- private heartbeatRequired;
84
- }
85
- //# sourceMappingURL=BaseBlockProducerService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseBlockProducerService.d.ts","sourceRoot":"","sources":["../../../src/BlockProducer/BaseBlockProducerService.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"generateTransactionFeeTransfers.d.ts","sourceRoot":"","sources":["../../../src/BlockProducer/generateTransactionFeeTransfers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAiB,MAAM,gBAAgB,CAAA;AAG5D,OAAO,KAAK,EACV,yBAAyB,EACzB,QAAQ,EAET,MAAM,2BAA2B,CAAA;AAKlC,wBAAsB,+BAA+B,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,yBAAyB,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC,CA0CtI"}
@@ -1,2 +0,0 @@
1
- export * from './BaseBlockProducerService.ts';
2
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/BlockProducer/index.ts"],"names":[],"mappings":"AAAA,cAAc,+BAA+B,CAAA"}
@@ -1,10 +0,0 @@
1
- import { EmptyObject, Promisable } from '@xylabs/sdk-js';
2
- import { BlockRewardService } from '@xyo-network/xl1-protocol-sdk';
3
- import { BaseService } from '../BaseService.ts';
4
- import { BaseServiceParams } from '../model/index.ts';
5
- export interface BaseBlockRewardServiceParams<TConfig extends EmptyObject = EmptyObject> extends BaseServiceParams<TConfig> {
6
- }
7
- export declare class BaseBlockRewardService<TParams extends BaseBlockRewardServiceParams = BaseBlockRewardServiceParams> extends BaseService<TParams> implements BlockRewardService {
8
- getRewardForBlock(_blockNumber: bigint): Promisable<bigint>;
9
- }
10
- //# sourceMappingURL=BaseBlockRewardService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BaseBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/BaseBlockRewardService.ts"],"names":[],"mappings":"AAAA,OAAO,EACM,WAAW,EAAE,UAAU,EACnC,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AAErD,MAAM,WAAW,4BAA4B,CAAC,OAAO,SAAS,WAAW,GAAG,WAAW,CAAE,SAAQ,iBAAiB,CAAC,OAAO,CAAC;CAAG;AAE9H,qBACa,sBAAsB,CAAC,OAAO,SAAS,4BAA4B,GAAG,4BAA4B,CAC7G,SAAQ,WAAW,CAAC,OAAO,CAAE,YAAW,kBAAkB;IAC1D,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;CAG5D"}
@@ -1,18 +0,0 @@
1
- import { AccountInstance } from '@xyo-network/account-model';
2
- import { BlockRewardService, ChainService, Config } from '@xyo-network/xl1-protocol-sdk';
3
- import { Provider } from 'ethers/providers';
4
- import { BaseBlockRewardService, BaseBlockRewardServiceParams } from './BaseBlockRewardService.ts';
5
- export interface EvmBlockRewardServiceParams extends BaseBlockRewardServiceParams<Pick<Config, 'evm'>> {
6
- account: AccountInstance;
7
- chainService?: ChainService;
8
- provider?: Provider;
9
- }
10
- export declare class EvmBlockRewardService extends BaseBlockRewardService<EvmBlockRewardServiceParams> implements BlockRewardService {
11
- protected _contractAddress: string | undefined;
12
- protected get chainService(): ChainService;
13
- protected get contractAddress(): string;
14
- protected get provider(): Provider;
15
- createHandler(): Promise<void>;
16
- getRewardForBlock(blockNumber: bigint): Promise<bigint>;
17
- }
18
- //# sourceMappingURL=EvmBlockRewardService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"EvmBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/EvmBlockRewardService.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAE5D,OAAO,EACL,kBAAkB,EAAE,YAAY,EAAE,MAAM,EACzC,MAAM,+BAA+B,CAAA;AACtC,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAE3C,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAElG,MAAM,WAAW,2BAA4B,SAAQ,4BAA4B,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACpG,OAAO,EAAE,eAAe,CAAA;IACxB,YAAY,CAAC,EAAE,YAAY,CAAA;IAC3B,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB;AAED,qBACa,qBAAsB,SAAQ,sBAAsB,CAAC,2BAA2B,CAAE,YAAW,kBAAkB;IAC1H,SAAS,CAAC,gBAAgB,EAAE,MAAM,GAAG,SAAS,CAAA;IAE9C,SAAS,KAAK,YAAY,iBAEzB;IAED,SAAS,KAAK,eAAe,WAE5B;IAED,SAAS,KAAK,QAAQ,aAErB;IAEc,aAAa;IAUb,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAIvE"}
@@ -1,23 +0,0 @@
1
- import { Promisable } from '@xylabs/sdk-js';
2
- import { BlockRewardService } from '@xyo-network/xl1-protocol-sdk';
3
- import { BaseBlockRewardService, BaseBlockRewardServiceParams } from './BaseBlockRewardService.ts';
4
- export interface MemoryBlockRewardServiceParams extends BaseBlockRewardServiceParams {
5
- creatorReward?: bigint;
6
- initialStepReward?: bigint;
7
- minRewardPerBlock?: bigint;
8
- stepFactorDenominator?: bigint;
9
- stepFactorNumerator?: bigint;
10
- stepSize?: bigint;
11
- }
12
- export declare class MemoryBlockRewardService<TParams extends MemoryBlockRewardServiceParams = MemoryBlockRewardServiceParams> extends BaseBlockRewardService<TParams> implements BlockRewardService {
13
- protected readonly rewardFromBlockNumber: (blockNumber: bigint, startingReward?: bigint, blocksPerStep?: bigint, stepFactorNumerator?: bigint, stepFactorDenominator?: bigint, minBlockReward?: bigint, creatorReward?: bigint) => bigint;
14
- get creatorReward(): bigint;
15
- get initialReward(): bigint;
16
- get minRewardPerBlock(): bigint;
17
- get stepFactorDenominator(): bigint;
18
- get stepFactorNumerator(): bigint;
19
- get stepSize(): bigint;
20
- static paramsHandler<T extends MemoryBlockRewardService['params']>(inParams?: Partial<T>): Promise<T>;
21
- getRewardForBlock(blockNumber: bigint): Promisable<bigint>;
22
- }
23
- //# sourceMappingURL=MemoryBlockRewardService.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryBlockRewardService.d.ts","sourceRoot":"","sources":["../../../src/BlockReward/MemoryBlockRewardService.ts"],"names":[],"mappings":"AAAA,OAAO,EACgB,UAAU,EAChC,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAA;AAElE,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,6BAA6B,CAAA;AAElG,MAAM,WAAW,8BAA+B,SAAQ,4BAA4B;IAClF,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,qBACa,wBAAwB,CAAC,OAAO,SAAS,8BAA8B,GAAG,8BAA8B,CACnH,SAAQ,sBAAsB,CAAC,OAAO,CAAE,YAAW,kBAAkB;IACrE,SAAS,CAAC,QAAQ,CAAC,qBAAqB,kMAA4B;IAEpE,IAAI,aAAa,WAEhB;IAED,IAAI,aAAa,WAEhB;IAED,IAAI,iBAAiB,WAEpB;IAED,IAAI,qBAAqB,WAExB;IAED,IAAI,mBAAmB,WAEtB;IAED,IAAI,QAAQ,WAEX;WAEqB,aAAa,CAAC,CAAC,SAAS,wBAAwB,CAAC,QAAQ,CAAC,EAC9E,QAAQ,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GACpB,OAAO,CAAC,CAAC,CAAC;IAYJ,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;CAWpE"}