@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
@@ -1,9 +1,12 @@
1
- import type { Address } from '@xylabs/sdk-js'
1
+ import type {
2
+ Address, Hex, Promisable,
3
+ } from '@xylabs/sdk-js'
2
4
  import {
3
5
  assertEx, toAddress, toEthAddress,
4
6
  } from '@xylabs/sdk-js'
5
7
  import type { StakedXyoChain } from '@xyo-network/typechain'
6
8
  import { StakedXyoChain__factory as StakedXyoChainFactory } from '@xyo-network/typechain'
9
+ import type { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'
7
10
  import type { ChainService } from '@xyo-network/xl1-protocol-sdk'
8
11
  import { getAddress } from 'ethers/address'
9
12
  import type { ContractRunner } from 'ethers/providers'
@@ -13,7 +16,7 @@ import type { BaseServiceParams } from '../../model/index.ts'
13
16
 
14
17
  export interface EvmChainServiceParams extends BaseServiceParams {
15
18
  contract: StakedXyoChain
16
- id: Address
19
+ id: Hex
17
20
  runner: ContractRunner
18
21
  }
19
22
 
@@ -21,91 +24,91 @@ export interface EvmChainServiceParams extends BaseServiceParams {
21
24
  * A class that represents a chain stake as backed by an EVM smart contract
22
25
  */
23
26
  export class EvmChainService extends BaseService<EvmChainServiceParams> implements ChainService {
24
- get chainId(): Address {
25
- return assertEx(this.params.id)
26
- }
27
-
28
- get contract() {
29
- if (this.params.contract === undefined) {
30
- this.params.contract = StakedXyoChainFactory.connect(
31
- toEthAddress(this.chainId),
32
- this.params.runner,
33
- ) as StakedXyoChain
34
- }
35
- return assertEx(this.params.contract)
36
- }
37
-
38
- get runner(): ContractRunner {
39
- return assertEx(this.params.runner)
40
- }
41
-
42
27
  async active(): Promise<bigint> {
43
- return await this.contract.active()
28
+ return await (await this.contract()).active()
44
29
  }
45
30
 
46
31
  async activeByStaked(staked: Address): Promise<bigint> {
47
- return await this.contract.activeByAddressStaked(getAddress(toEthAddress(staked)))
32
+ return await (await this.contract()).activeByAddressStaked(getAddress(toEthAddress(staked)))
48
33
  }
49
34
 
50
35
  async activeByStaker(address: Address): Promise<bigint> {
51
- return await this.contract.activeByStaker(getAddress(toEthAddress(address)))
36
+ return await (await this.contract()).activeByStaker(getAddress(toEthAddress(address)))
52
37
  }
53
38
 
54
39
  async addStake(staked: Address, amount: bigint): Promise<boolean> {
55
- const result = await this.contract.addStake(getAddress(toEthAddress(staked)), amount)
40
+ const result = await (await this.contract()).addStake(getAddress(toEthAddress(staked)), amount)
56
41
  await result.wait()
57
42
  return true
58
43
  }
59
44
 
45
+ chainId(): Promisable<Hex> {
46
+ return assertEx(this.params.id)
47
+ }
48
+
49
+ async contract() {
50
+ if (this.params.contract === undefined) {
51
+ this.params.contract = StakedXyoChainFactory.connect(
52
+ toEthAddress(await this.chainId()),
53
+ this.params.runner,
54
+ ) as StakedXyoChain
55
+ }
56
+ return assertEx(this.params.contract)
57
+ }
58
+
60
59
  async forkedAtBlockNumber(): Promise<bigint> {
61
- return await this.contract.forkedAtBlockNumber()
60
+ return await (await this.contract()).forkedAtBlockNumber()
62
61
  }
63
62
 
64
63
  async forkedAtHash(): Promise<bigint> {
65
- return await this.contract.forkedAtHash()
64
+ return await (await this.contract()).forkedAtHash()
66
65
  }
67
66
 
68
67
  async forkedChainId(): Promise<Address> {
69
- return toAddress(await this.contract.forkedChainId())
68
+ return toAddress(await (await this.contract()).forkedChainId())
70
69
  }
71
70
 
72
71
  async minWithdrawalBlocks(): Promise<bigint> {
73
- return await this.contract.minWithdrawalBlocks()
72
+ return await (await this.contract()).minWithdrawalBlocks()
74
73
  }
75
74
 
76
75
  async pending(): Promise<bigint> {
77
- return await this.contract.pending()
76
+ return await (await this.contract()).pending()
78
77
  }
79
78
 
80
79
  async pendingByStaker(staker: Address): Promise<bigint> {
81
- return await this.contract.pendingByStaker(getAddress(toEthAddress(staker)))
80
+ return await (await this.contract()).pendingByStaker(getAddress(toEthAddress(staker)))
82
81
  }
83
82
 
84
83
  async removeStake(slot: bigint): Promise<boolean> {
85
- const result = await this.contract.removeStake(slot)
84
+ const result = await (await this.contract()).removeStake(slot)
86
85
  await result.wait()
87
86
  return true
88
87
  }
89
88
 
89
+ rewardForBlock(_block: XL1BlockNumber): Promisable<AttoXL1> {
90
+ throw new Error('Method not implemented.')
91
+ }
92
+
90
93
  async rewardsContract(): Promise<string> {
91
- return await this.contract.rewardsContract()
94
+ return await (await this.contract()).rewardsContract()
92
95
  }
93
96
 
94
97
  async stakingTokenAddress(): Promise<string> {
95
- return await this.contract.stakingTokenAddress()
98
+ return await (await this.contract()).stakingTokenAddress()
96
99
  }
97
100
 
98
101
  async withdrawStake(slot: bigint): Promise<boolean> {
99
- const result = await this.contract.withdrawStake(slot)
102
+ const result = await (await this.contract()).withdrawStake(slot)
100
103
  await result.wait()
101
104
  return true
102
105
  }
103
106
 
104
107
  async withdrawn(): Promise<bigint> {
105
- return await this.contract.withdrawn()
108
+ return await (await this.contract()).withdrawn()
106
109
  }
107
110
 
108
111
  async withdrawnByStaker(staker: string): Promise<bigint> {
109
- return await this.contract.withdrawnByStaker(getAddress(staker))
112
+ return await (await this.contract()).withdrawnByStaker(getAddress(staker))
110
113
  }
111
114
  }
@@ -1,27 +1,26 @@
1
- import type { Address } from '@xylabs/sdk-js'
1
+ import type {
2
+ Address, Hex, Promisable,
3
+ } from '@xylabs/sdk-js'
2
4
  import {
3
5
  assertEx, toAddress, ZERO_ADDRESS,
4
6
  } from '@xylabs/sdk-js'
7
+ import type { AttoXL1, XL1BlockNumber } from '@xyo-network/xl1-protocol'
5
8
  import type { ChainService, Config } from '@xyo-network/xl1-protocol-sdk'
6
9
 
7
10
  import { BaseService } from '../../BaseService.ts'
8
11
  import type { BaseServiceParams } from '../../model/index.ts'
9
12
 
10
13
  export interface MemoryChainServiceParams extends BaseServiceParams<Pick<Config, 'producer'>> {
11
- chainId: Address
14
+ chainId: Hex
12
15
  }
13
16
 
14
17
  /**
15
18
  * A class that represents a chain stake as backed in memory
16
19
  */
17
20
  export class MemoryChainService extends BaseService<MemoryChainServiceParams> implements ChainService {
18
- protected _chainId: Address | undefined
21
+ protected _chainId: Hex | undefined
19
22
  protected _simulatedStake: bigint = 1n
20
23
 
21
- get chainId(): Address {
22
- return assertEx(this._chainId, () => 'Chain ID not set')
23
- }
24
-
25
24
  async active(): Promise<bigint> {
26
25
  return await Promise.resolve(this._simulatedStake)
27
26
  }
@@ -38,6 +37,10 @@ export class MemoryChainService extends BaseService<MemoryChainServiceParams> im
38
37
  return await Promise.resolve(true)
39
38
  }
40
39
 
40
+ chainId(): Promisable<Hex> {
41
+ return assertEx(this._chainId, () => 'Chain ID not set')
42
+ }
43
+
41
44
  override createHandler(): void {
42
45
  const { minStake = 1 } = this.params.config.producer ?? {}
43
46
  this._simulatedStake = BigInt(minStake)
@@ -71,6 +74,10 @@ export class MemoryChainService extends BaseService<MemoryChainServiceParams> im
71
74
  return await Promise.resolve(true)
72
75
  }
73
76
 
77
+ rewardForBlock(_block: XL1BlockNumber): Promisable<AttoXL1> {
78
+ throw new Error('Method not implemented.')
79
+ }
80
+
74
81
  async rewardsContract(): Promise<string> {
75
82
  return await Promise.resolve('')
76
83
  }
@@ -2,61 +2,56 @@ import {
2
2
  assertEx, creatable, EmptyObject,
3
3
  Promisable,
4
4
  } from '@xylabs/sdk-js'
5
- import { AccountInstance } from '@xyo-network/account-model'
6
- import { ArchivistInstance, ReadArchivist } from '@xyo-network/archivist-model'
7
5
  import {
8
6
  BlockBoundWitness,
9
- ChainId,
10
7
  SignedHydratedTransactionWithStorageMeta,
11
8
  } from '@xyo-network/xl1-protocol'
12
- import {
13
- BlockRewardService, ElectionService, HydratedBlockStateValidationFunction, StakeIntentService,
14
- } from '@xyo-network/xl1-protocol-sdk'
9
+ import { BlockViewer, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-protocol-sdk'
15
10
 
16
11
  import { BaseService } from '../BaseService.ts'
17
12
  import { BaseServiceParams } from '../model/index.ts'
18
13
  import { Validator } from './model/index.ts'
19
14
 
20
15
  export interface XyoValidatorParams<TConfig extends EmptyObject = EmptyObject> extends BaseServiceParams<TConfig> {
21
- account: AccountInstance
22
- chainArchivist: ReadArchivist
23
- chainId: ChainId
24
- electionService: ElectionService
25
- pendingBundledTransactionsArchivist: ArchivistInstance
26
- rewardService: BlockRewardService
27
- stakeIntentService: StakeIntentService
16
+ // account: AccountInstance
17
+ // blockRewardService: BlockRewardService
18
+ blockViewer: BlockViewer
19
+ // chainId: ChainId
20
+ // electionService: ElectionService
21
+ // pendingBundledTransactionsArchivist: ArchivistInstance
22
+ // stakeIntentService: StakeIntentService
28
23
  validateHydratedBlockState: HydratedBlockStateValidationFunction
29
24
  }
30
25
 
31
26
  @creatable()
32
27
  export class XyoValidator<TParams extends XyoValidatorParams = XyoValidatorParams> extends BaseService<TParams> implements Validator {
33
- get address() {
34
- return this.account.address
35
- }
28
+ // get address() {
29
+ // return this.account.address
30
+ // }
36
31
 
37
- protected get account() {
38
- return assertEx(this.params.account, () => 'account is required')
39
- }
32
+ // protected get account() {
33
+ // return assertEx(this.params.account, () => 'account is required')
34
+ // }
40
35
 
41
- protected get chainArchivist() {
42
- return assertEx(this.params.chainArchivist, () => 'chainArchivist is required')
36
+ protected get blockViewer() {
37
+ return assertEx(this.params.blockViewer, () => 'blockViewer is required')
43
38
  }
44
39
 
45
- protected get chainInfo() {
46
- return assertEx(this.params.chainId, () => 'chainInfo is required')
47
- }
40
+ // protected get chainInfo() {
41
+ // return assertEx(this.params.chainId, () => 'chainInfo is required')
42
+ // }
48
43
 
49
- protected get electionService() {
50
- return assertEx(this.params.electionService, () => 'electionService is required')
51
- }
44
+ // protected get electionService() {
45
+ // return assertEx(this.params.electionService, () => 'electionService is required')
46
+ // }
52
47
 
53
- protected get pendingBundledTransactionsArchivist() {
54
- return assertEx(this.params.pendingBundledTransactionsArchivist, () => 'pendingBundledTransactions is required')
55
- }
48
+ // protected get pendingBundledTransactionsArchivist() {
49
+ // return assertEx(this.params.pendingBundledTransactionsArchivist, () => 'pendingBundledTransactions is required')
50
+ // }
56
51
 
57
- protected get rewardService() {
58
- return assertEx(this.params.rewardService, () => 'rewardService is required')
59
- }
52
+ // protected get blockRewardService() {
53
+ // return assertEx(this.params.blockRewardService, () => 'blockRewardService is required')
54
+ // }
60
55
 
61
56
  validatePendingBlock(_block: BlockBoundWitness): Promisable<Error[]> {
62
57
  return [] // await validateBlockProtocol(block, this.chainInfo)
@@ -66,7 +61,7 @@ export class XyoValidator<TParams extends XyoValidatorParams = XyoValidatorParam
66
61
  async validatePendingTransaction(hydratedTransaction: SignedHydratedTransactionWithStorageMeta): Promise<boolean> {
67
62
  const [tx] = hydratedTransaction
68
63
  // Ensure not confirmed already (replay attack)
69
- if ((await this.chainArchivist.get([tx._hash])).length > 0) return false
64
+ if ((await this.blockViewer.blockByHash(tx._hash)) !== undefined) return false
70
65
  // TODO: Ensure transaction is valid (double spend, has voucher, has required stake, etc.)
71
66
  // TODO: Ensure validator stake is valid
72
67
  return await Promise.resolve(true)
@@ -5,22 +5,23 @@ import { hexToLast4BytesInt, shuffleWithSeed } from '@xyo-network/chain-utils'
5
5
  import { WithHashMeta } from '@xyo-network/payload-model'
6
6
  import { BlockBoundWitness } from '@xyo-network/xl1-protocol'
7
7
  import type {
8
- ChainBlockNumberIteratorService, ChainStakeViewer, ElectionService, StakeIntentService,
8
+ BlockViewer,
9
+ ChainStakeViewer, ElectionService, StakeIntentService,
9
10
  } from '@xyo-network/xl1-protocol-sdk'
10
11
 
11
12
  import { BaseService } from '../BaseService.ts'
12
13
  import { BaseServiceParams } from '../model/index.ts'
13
14
 
14
15
  export interface BaseElectionServicesParams extends BaseServiceParams {
15
- chainIterator?: ChainBlockNumberIteratorService
16
+ blockViewer?: BlockViewer
16
17
  chainStakeViewer?: ChainStakeViewer
17
18
  stakeIntentService?: StakeIntentService
18
19
  }
19
20
 
20
21
  @creatable()
21
22
  export class BaseElectionService extends BaseService<BaseElectionServicesParams> implements ElectionService {
22
- get chainIterator() {
23
- return assertEx(this.params.chainIterator, () => 'No chain iterator')
23
+ get blockViewer() {
24
+ return assertEx(this.params.blockViewer, () => 'No block viewer')
24
25
  }
25
26
 
26
27
  get chainStakeViewer() {
@@ -21,74 +21,74 @@ export interface BaseNetworkStakeStepRewardServiceParams extends BaseServicePara
21
21
  @creatable()
22
22
  export class BaseNetworkStakeStepRewardService extends BaseService<BaseNetworkStakeStepRewardServiceParams> implements NetworkStakeStepRewardService {
23
23
  networkStakeStepRewardAddressHistory(_address: Address): Promisable<Record<Address, bigint>> {
24
- throw new Error('Method not implemented.')
24
+ throw new Error('Method [networkStakeStepRewardAddressHistory] not implemented.')
25
25
  }
26
26
 
27
27
  networkStakeStepRewardAddressReward(_context: StepIdentity, _address: Address): Promisable<Record<Address, bigint>> {
28
- throw new Error('Method not implemented.')
28
+ throw new Error('Method [networkStakeStepRewardAddressReward] not implemented.')
29
29
  }
30
30
 
31
31
  networkStakeStepRewardAddressShare(_context: StepIdentity, _address: Address): Promisable<[bigint, bigint]> {
32
- throw new Error('Method not implemented.')
32
+ throw new Error('Method [networkStakeStepRewardAddressShare] not implemented.')
33
33
  }
34
34
 
35
35
  networkStakeStepRewardClaimedByAddress(_address: Address): Promisable<bigint> {
36
- throw new Error('Method not implemented.')
36
+ throw new Error('Method [networkStakeStepRewardClaimedByAddress] not implemented.')
37
37
  }
38
38
 
39
39
  networkStakeStepRewardForPosition(_position: number, _range: [number, number]): Promisable<[bigint, bigint]> {
40
- throw new Error('Method not implemented.')
40
+ throw new Error('Method [networkStakeStepRewardForPosition] not implemented.')
41
41
  }
42
42
 
43
43
  networkStakeStepRewardForStep(_context: StepIdentity): Promisable<bigint> {
44
- throw new Error('Method not implemented.')
44
+ throw new Error('Method [networkStakeStepRewardForStep] not implemented.')
45
45
  }
46
46
 
47
47
  networkStakeStepRewardForStepForPosition(_context: StepIdentity, _position: number): Promisable<[bigint, bigint]> {
48
- throw new Error('Method not implemented.')
48
+ throw new Error('Method [networkStakeStepRewardForStepForPosition] not implemented.')
49
49
  }
50
50
 
51
51
  networkStakeStepRewardPoolRewards(_context: StepIdentity): Promisable<Record<Address, bigint>> {
52
- throw new Error('Method not implemented.')
52
+ throw new Error('Method [networkStakeStepRewardPoolRewards] not implemented.')
53
53
  }
54
54
 
55
55
  networkStakeStepRewardPoolShares(_context: StepIdentity): Promisable<Record<Address, bigint>> {
56
- throw new Error('Method not implemented.')
56
+ throw new Error('Method [networkStakeStepRewardPoolShares] not implemented.')
57
57
  }
58
58
 
59
59
  networkStakeStepRewardPositionWeight(_context: StepIdentity, _position: number): Promisable<bigint> {
60
- throw new Error('Method not implemented.')
60
+ throw new Error('Method [networkStakeStepRewardPositionWeight] not implemented.')
61
61
  }
62
62
 
63
63
  networkStakeStepRewardPotentialPositionLoss(_context: StepIdentity, _position: number): Promisable<bigint> {
64
- throw new Error('Method not implemented.')
64
+ throw new Error('Method [networkStakeStepRewardPotentialPositionLoss] not implemented.')
65
65
  }
66
66
 
67
67
  networkStakeStepRewardRandomizer(_context: StepIdentity): Promisable<bigint> {
68
- throw new Error('Method not implemented.')
68
+ throw new Error('Method [networkStakeStepRewardRandomizer] not implemented.')
69
69
  }
70
70
 
71
71
  networkStakeStepRewardStakerCount(_context: StepIdentity): Promisable<number> {
72
- throw new Error('Method not implemented.')
72
+ throw new Error('Method [networkStakeStepRewardStakerCount] not implemented.')
73
73
  }
74
74
 
75
75
  networkStakeStepRewardUnclaimedByAddress(_address: Address): Promisable<bigint> {
76
- throw new Error('Method not implemented.')
76
+ throw new Error('Method [networkStakeStepRewardUnclaimedByAddress] not implemented.')
77
77
  }
78
78
 
79
79
  networkStakeStepRewardWeightForAddress(_context: StepIdentity, _address: Address): Promisable<bigint> {
80
- throw new Error('Method not implemented.')
80
+ throw new Error('Method [networkStakeStepRewardWeightForAddress] not implemented.')
81
81
  }
82
82
 
83
83
  networkStakeStepRewardsForPosition(_position: number, _range: [number, number]): Promisable<Record<StepIdentityString, [bigint, bigint]>> {
84
- throw new Error('Method not implemented.')
84
+ throw new Error('Method [networkStakeStepRewardsForPosition] not implemented.')
85
85
  }
86
86
 
87
87
  networkStakeStepRewardsForRange(_range: [number, number]): Promisable<bigint> {
88
- throw new Error('Method not implemented.')
88
+ throw new Error('Method [networkStakeStepRewardsForRange] not implemented.')
89
89
  }
90
90
 
91
91
  networkStakeStepRewardsForStepLevel(_stepLevel: number, _range: [number, number]): Promisable<bigint> {
92
- throw new Error('Method not implemented.')
92
+ throw new Error('Method [networkStakeStepRewardsForStepLevel] not implemented.')
93
93
  }
94
94
  }
@@ -7,17 +7,19 @@ import {
7
7
  } from '@xylabs/sdk-js'
8
8
  import { MemoryArchivist } from '@xyo-network/archivist-memory'
9
9
  import { ArchivistInstance } from '@xyo-network/archivist-model'
10
- import { findMostRecentBlock } from '@xyo-network/chain-protocol'
11
10
  import {
12
11
  Payload, PayloadBundle, Sequence, WithStorageMeta,
13
12
  } from '@xyo-network/payload-model'
14
13
  import {
15
14
  asBlockBoundWitnessWithHashMeta, asXL1BlockNumber, ChainId, HydratedTransactionValidationFunction, isTransactionBoundWitnessWithStorageMeta,
15
+ SignedHydratedBlockWithHashMeta,
16
16
  SignedHydratedTransactionWithHashMeta,
17
17
  SignedHydratedTransactionWithStorageMeta,
18
18
  XL1BlockNumber,
19
19
  } from '@xyo-network/xl1-protocol'
20
- import { PendingTransactionsService } from '@xyo-network/xl1-protocol-sdk'
20
+ import {
21
+ findMostRecentBlock, MempoolViewer, PendingBlocksOptions, PendingTransactionsOptions,
22
+ } from '@xyo-network/xl1-protocol-sdk'
21
23
  import { TransactionJsonSchemaValidator, validateTransaction } from '@xyo-network/xl1-validation'
22
24
  import { Mutex } from 'async-mutex'
23
25
 
@@ -28,14 +30,14 @@ import { hydratedTransactionToPayloadBundle } from './hydratedTransactionToPaylo
28
30
 
29
31
  export interface BasePendingTransactionsServiceParams extends BaseServiceParams {
30
32
  additionalPendingTransactionValidators?: HydratedTransactionValidationFunction[]
31
- chainArchivist?: ArchivistInstance
32
- chainId?: ChainId
33
- pendingBundledTransactionsArchivist?: ArchivistInstance
34
- rejectedTransactionsArchivist?: ArchivistInstance
33
+ chainArchivist: ArchivistInstance
34
+ chainId: ChainId
35
+ pendingBundledTransactionsArchivist: ArchivistInstance
36
+ rejectedTransactionsArchivist: ArchivistInstance
35
37
  }
36
38
 
37
39
  @creatable()
38
- export class BasePendingTransactionsService extends BaseService<BasePendingTransactionsServiceParams> implements PendingTransactionsService {
40
+ export class BasePendingTransactionsService extends BaseService<BasePendingTransactionsServiceParams> implements MempoolViewer {
39
41
  private static readonly MutexPriority = {
40
42
  /**
41
43
  * Priority for inserting new transactions
@@ -142,12 +144,16 @@ export class BasePendingTransactionsService extends BaseService<BasePendingTrans
142
144
  })
143
145
  }
144
146
 
145
- async getPendingTransactions(head: Hash, limit: number): Promise<SignedHydratedTransactionWithStorageMeta[]> {
147
+ pendingBlocks(_options?: PendingBlocksOptions): Promise<SignedHydratedBlockWithHashMeta[]> {
148
+ throw new Error('Method [pendingBlocks] not implemented.')
149
+ }
150
+
151
+ async pendingTransactions({ limit = 100 }: PendingTransactionsOptions = {}): Promise<SignedHydratedTransactionWithStorageMeta[]> {
146
152
  return await this.spanAsync('getPendingTransactions', async () => {
147
153
  // Acquires an exclusive mutex to ensure no race conditions while accessing pending transactions.
148
154
  return await this._updateCuratedPendingTransactionsArchivistMutex.runExclusive(async () => {
149
155
  // Find the supplied head
150
- let [lastHead] = filterAs(await this.chainArchivist.get([head]), x => asBlockBoundWitnessWithHashMeta(x))
156
+ let lastHead = (filterAs(await this.chainArchivist.next({ limit: 100 }), x => asBlockBoundWitnessWithHashMeta(x))).at(-1)
151
157
  if (isUndefined(lastHead)) return []
152
158
 
153
159
  await this.pruneCuratedPendingTransactionsArchivist(lastHead._hash)
@@ -22,7 +22,7 @@ export class BaseSchemasService extends BaseService<BaseSchemasServiceParams> im
22
22
 
23
23
  async schemas(head: Hash, schemas: Schema[]): Promise<Partial<Record<Schema, number>>> {
24
24
  return await spanRootAsync('transfers', async () => {
25
- const summary = await schemasSummary(this.params.context)
25
+ const [summary] = await schemasSummary(this.params.context)
26
26
  const result: Record<Schema, number> = {}
27
27
  for (const schema of schemas) {
28
28
  const count = summary[schema] ?? 0
@@ -19,9 +19,9 @@ import {
19
19
  } from '@xyo-network/xl1-protocol'
20
20
  import {
21
21
  asChainIndexingServiceStateWithStorageMeta,
22
+ BlockViewer,
22
23
  ChainIndexingServiceState, ChainIndexingServiceStateSchema, ChainStakeViewer,
23
24
  Config,
24
- EventingChainBlockNumberIteratorService,
25
25
  isChainIndexingServiceState,
26
26
  readPayloadMapFromStore,
27
27
  StakeIntentService,
@@ -34,10 +34,10 @@ import { BaseService } from '../BaseService.ts'
34
34
  import { BaseServiceParams } from '../model/index.ts'
35
35
 
36
36
  export interface XyoStakeIntentServiceParams extends BaseServiceParams<Pick<Config, 'producer'>> {
37
- chainArchivist?: ArchivistInstance
38
- chainIterator?: EventingChainBlockNumberIteratorService
39
- chainStakeViewer?: ChainStakeViewer
40
- stakeIntentStateArchivist?: ArchivistInstance
37
+ blockViewer: BlockViewer
38
+ chainArchivist: ArchivistInstance
39
+ chainStakeViewer: ChainStakeViewer
40
+ stakeIntentStateArchivist: ArchivistInstance
41
41
  }
42
42
 
43
43
  /**
@@ -65,30 +65,36 @@ export class XyoStakeIntentService extends BaseService<XyoStakeIntentServicePara
65
65
  protected _stakeCache = new LRUCache<Address, bigint>({ max: STAKE_CACHE_MAX_ENTRIES })
66
66
  protected _updateMutex = new Mutex()
67
67
 
68
- protected get chainArchivist() {
69
- return assertEx(this.params.chainArchivist, () => 'chainArchivist not set')
68
+ protected get blockViewer() {
69
+ return this.params.blockViewer
70
70
  }
71
71
 
72
- protected get chainIterator() {
73
- return assertEx(this.params.chainIterator, () => 'chainIterator not set')
72
+ protected get chainArchivist() {
73
+ return assertEx(this.params.chainArchivist!, () => 'chainArchivist not set')
74
74
  }
75
75
 
76
76
  protected get chainStakeViewer() {
77
- return assertEx(this.params.chainStakeViewer, () => 'chainStakeViewer not set')
77
+ return assertEx(this.params.chainStakeViewer!, () => 'chainStakeViewer not set')
78
78
  }
79
79
 
80
80
  protected get stakeIntentStateArchivist() {
81
- return assertEx(this.params.stakeIntentStateArchivist, () => 'stakeIntentStateArchivist not set')
81
+ return assertEx(this.params.stakeIntentStateArchivist!, () => 'stakeIntentStateArchivist not set')
82
+ }
83
+
84
+ static override async paramsHandler(params?: Partial<XyoStakeIntentServiceParams>): Promise<XyoStakeIntentServiceParams> {
85
+ return {
86
+ ...await super.paramsHandler(params),
87
+ blockViewer: assertEx(params?.blockViewer, () => 'blockViewer is required'),
88
+ chainArchivist: assertEx(params?.chainArchivist, () => 'chainArchivist is required'),
89
+ chainStakeViewer: assertEx(params?.chainStakeViewer, () => 'chainStakeViewer is required'),
90
+ stakeIntentStateArchivist: assertEx(params?.stakeIntentStateArchivist, () => 'stakeIntentStateArchivist is required'),
91
+ } as XyoStakeIntentServiceParams
82
92
  }
83
93
 
84
94
  override async createHandler() {
85
- this.chainIterator.on('headUpdated', async () => {
86
- await this.updateIndex()
87
- })
88
- const head = await this.chainIterator.head()
95
+ const head = await this.blockViewer.currentBlock()
89
96
  if (isUndefined(head)) return
90
- const headHash = await PayloadBuilder.hash(head)
91
- await this.recoverState(headHash)
97
+ await this.recoverState(head[0]._hash)
92
98
  }
93
99
 
94
100
  async getDeclaredCandidateRanges(address: Address, intent: Intent): Promise<Readonly<Readonly<[number, number]>[]>> {
@@ -208,7 +214,7 @@ export class XyoStakeIntentService extends BaseService<XyoStakeIntentServicePara
208
214
  }
209
215
  await this._updateMutex.runExclusive(async () => {
210
216
  return await this.spanAsync('updateIndex', async () => {
211
- const currentHead = await this.chainIterator.head()
217
+ const currentHead = (await this.blockViewer.currentBlock())[0]
212
218
  if (isUndefined(currentHead)) return
213
219
  return await timeBudget('XyoStakeIntentService.updateIndex', console, async () => {
214
220
  const currentHeadHash = currentHead._hash
@@ -15,10 +15,10 @@ export interface BaseStepStakeServiceParams extends BaseServiceParams {
15
15
  @creatable()
16
16
  export class BaseStepStakeService extends BaseService<BaseStepStakeServiceParams> implements StepStakeViewer {
17
17
  stepStake(_step: StepIdentity): Promisable<Record<Address, bigint>> {
18
- throw new Error('Method not implemented.')
18
+ throw new Error('Method [stepStake] not implemented.')
19
19
  }
20
20
 
21
21
  stepStakeForAddress(_address: Address, _step: StepIdentity): Promisable<bigint> {
22
- throw new Error('Method not implemented.')
22
+ throw new Error('Method [stepStakeForAddress] not implemented.')
23
23
  }
24
24
  }
@@ -1,18 +1,16 @@
1
1
  import { creatable, EmptyObject } from '@xylabs/sdk-js'
2
- import { ReadArchivist } from '@xyo-network/archivist-model'
3
2
  import { TimeDomain, TimePayload } from '@xyo-network/xl1-protocol'
4
3
  import {
5
- EventingChainBlockNumberIteratorService, SimpleTimeSyncViewer, TimeSyncViewer,
4
+ BlockViewer,
5
+ SimpleTimeSyncViewer, TimeSyncViewer,
6
6
  } from '@xyo-network/xl1-protocol-sdk'
7
7
  import { Provider } from 'ethers'
8
8
 
9
9
  import { BaseService } from '../BaseService.ts'
10
- import { blockViewerFromChainIteratorAndArchivist } from '../blockViewerFromChainIteratorAndArchivist.ts'
11
10
  import { BaseServiceParams } from '../model/index.ts'
12
11
 
13
12
  export interface BaseTimeServiceParams<TConfig extends EmptyObject = EmptyObject> extends BaseServiceParams<TConfig> {
14
- chainArchivist: ReadArchivist
15
- chainIterator: EventingChainBlockNumberIteratorService
13
+ blockViewer: BlockViewer
16
14
  ethProvider?: Provider
17
15
  }
18
16
 
@@ -20,12 +18,8 @@ export interface BaseTimeServiceParams<TConfig extends EmptyObject = EmptyObject
20
18
  export class BaseTimeSyncService extends BaseService<BaseTimeServiceParams> implements TimeSyncViewer {
21
19
  protected timeSyncViewer!: TimeSyncViewer
22
20
 
23
- protected get chainArchivist() {
24
- return this.params.chainArchivist
25
- }
26
-
27
- protected get chainIterator() {
28
- return this.params.chainIterator
21
+ protected get blockViewer() {
22
+ return this.params.blockViewer
29
23
  }
30
24
 
31
25
  protected get ethProvider() {
@@ -38,11 +32,7 @@ export class BaseTimeSyncService extends BaseService<BaseTimeServiceParams> impl
38
32
 
39
33
  override async createHandler(): Promise<void> {
40
34
  await super.createHandler()
41
- const blockViewer = blockViewerFromChainIteratorAndArchivist(
42
- this.chainIterator,
43
- this.chainArchivist,
44
- )
45
- this.timeSyncViewer = new SimpleTimeSyncViewer(blockViewer, this.ethProvider)
35
+ this.timeSyncViewer = new SimpleTimeSyncViewer(this.blockViewer, this.ethProvider)
46
36
  }
47
37
 
48
38
  async currentTime(domain: TimeDomain): Promise<[string, number]> {