@xyo-network/xl1-protocol-sdk 1.26.11 → 1.26.13

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 (316) hide show
  1. package/package.json +29 -16
  2. package/src/ChainContextHelpers.ts +0 -50
  3. package/src/CreatableProvider/AbstractCreatableProvider.ts +0 -97
  4. package/src/CreatableProvider/CreatableProvider.ts +0 -102
  5. package/src/CreatableProvider/CreatableProviderRegistry.ts +0 -94
  6. package/src/CreatableProvider/GetInstanceOptions.ts +0 -11
  7. package/src/CreatableProvider/LabeledCreatableProviderFactory.ts +0 -24
  8. package/src/CreatableProvider/ProviderFactory.ts +0 -138
  9. package/src/CreatableProvider/ProviderFactoryLocator.ts +0 -170
  10. package/src/CreatableProvider/ProviderFactoryLocatorInstance.ts +0 -70
  11. package/src/CreatableProvider/index.ts +0 -8
  12. package/src/SignedBigInt.ts +0 -59
  13. package/src/_internal/context/getTestProviderContext.ts +0 -13
  14. package/src/_internal/context/index.ts +0 -1
  15. package/src/_internal/index.ts +0 -2
  16. package/src/actor/ActorV3.ts +0 -177
  17. package/src/actor/index.ts +0 -1
  18. package/src/amount/ShiftedBigInt.ts +0 -73
  19. package/src/amount/XL1Amount.ts +0 -103
  20. package/src/amount/index.ts +0 -4
  21. package/src/amount/splitOnDecimal.ts +0 -6
  22. package/src/amount/splitOnDecimalToString.ts +0 -40
  23. package/src/block/hydrate/allHashesPresent.ts +0 -8
  24. package/src/block/hydrate/blockPayloadsFromHydratedBlock.ts +0 -12
  25. package/src/block/hydrate/flattenHydratedBlock.ts +0 -28
  26. package/src/block/hydrate/flattenHydratedBlocks.ts +0 -7
  27. package/src/block/hydrate/hydrateBlock.ts +0 -43
  28. package/src/block/hydrate/index.ts +0 -7
  29. package/src/block/hydrate/transactionsFromHydratedBlock.ts +0 -7
  30. package/src/block/hydrate/tryHydrateBlock.ts +0 -26
  31. package/src/block/index.ts +0 -2
  32. package/src/block/primitives/blockFromBlockNumber.ts +0 -69
  33. package/src/block/primitives/frames/calculateFramesFromRange.ts +0 -30
  34. package/src/block/primitives/frames/deepCalculateFramesFromRange.ts +0 -28
  35. package/src/block/primitives/frames/index.ts +0 -2
  36. package/src/block/primitives/hashFromBlockNumber.ts +0 -9
  37. package/src/block/primitives/index.ts +0 -7
  38. package/src/block/primitives/model.ts +0 -18
  39. package/src/block/primitives/payloads/ChainWindow.ts +0 -7
  40. package/src/block/primitives/payloads/index.ts +0 -1
  41. package/src/block/primitives/toStepIdentityString.ts +0 -6
  42. package/src/block/primitives/validateTransactionOpcodes.ts +0 -45
  43. package/src/config/Actor.ts +0 -32
  44. package/src/config/Actors.ts +0 -9
  45. package/src/config/Base.ts +0 -27
  46. package/src/config/Chain.ts +0 -23
  47. package/src/config/Config.ts +0 -24
  48. package/src/config/DataLake/DataLake.ts +0 -12
  49. package/src/config/DataLake/DataLakeRemoteConfig.ts +0 -11
  50. package/src/config/DataLake/RestDataLakeConfig.ts +0 -18
  51. package/src/config/DataLake/RouterDataLakeConfig.ts +0 -22
  52. package/src/config/DataLake/index.ts +0 -4
  53. package/src/config/DeepPartial.ts +0 -4
  54. package/src/config/Evm.ts +0 -38
  55. package/src/config/HostActor.ts +0 -32
  56. package/src/config/Log.ts +0 -25
  57. package/src/config/Provider.ts +0 -20
  58. package/src/config/Providers.ts +0 -9
  59. package/src/config/Remote.ts +0 -59
  60. package/src/config/Telemetry.ts +0 -49
  61. package/src/config/UsageMeta.ts +0 -46
  62. package/src/config/Validation.ts +0 -29
  63. package/src/config/index.ts +0 -12
  64. package/src/config/storage/Storage.ts +0 -16
  65. package/src/config/storage/driver/Mongo.ts +0 -53
  66. package/src/config/storage/driver/index.ts +0 -1
  67. package/src/config/storage/index.ts +0 -2
  68. package/src/constants.ts +0 -4
  69. package/src/context/Actor.ts +0 -20
  70. package/src/context/HostActor.ts +0 -20
  71. package/src/context/getEmptyProviderContext.ts +0 -19
  72. package/src/context/index.ts +0 -3
  73. package/src/createDeclarationPayload.ts +0 -15
  74. package/src/createTransferPayload.ts +0 -16
  75. package/src/driver/cache/LruCacheMap.ts +0 -48
  76. package/src/driver/cache/index.ts +0 -1
  77. package/src/driver/index.ts +0 -2
  78. package/src/driver/memory/MemoryMap.ts +0 -48
  79. package/src/driver/memory/index.ts +0 -1
  80. package/src/eip-712/Payloads/EIP712Data.ts +0 -35
  81. package/src/eip-712/Payloads/EIP712Signature.ts +0 -32
  82. package/src/eip-712/Payloads/index.ts +0 -2
  83. package/src/eip-712/Types.ts +0 -41
  84. package/src/eip-712/index.ts +0 -4
  85. package/src/eip-712/sign.ts +0 -19
  86. package/src/eip-712/spec/fixtures.ts +0 -27
  87. package/src/eip-712/verify.ts +0 -20
  88. package/src/getFileConfig.ts +0 -36
  89. package/src/index.ts +0 -27
  90. package/src/instances/Address.ts +0 -16
  91. package/src/instances/BoundWitness.ts +0 -13
  92. package/src/instances/Data.ts +0 -4
  93. package/src/instances/Fees.ts +0 -9
  94. package/src/instances/HydratedBoundWitness.ts +0 -16
  95. package/src/instances/Object.ts +0 -6
  96. package/src/instances/Payload.ts +0 -7
  97. package/src/instances/Signature.ts +0 -12
  98. package/src/instances/block/BlockFields.ts +0 -18
  99. package/src/instances/block/HydratedBlock.ts +0 -10
  100. package/src/instances/block/index.ts +0 -1
  101. package/src/instances/index.ts +0 -10
  102. package/src/instances/modifiers/BlockWindowInstance.ts +0 -8
  103. package/src/instances/modifiers/BlockWindowState.ts +0 -6
  104. package/src/instances/modifiers/Signed.ts +0 -9
  105. package/src/instances/modifiers/Validatable.ts +0 -6
  106. package/src/instances/modifiers/index.ts +0 -4
  107. package/src/instances/transaction/HydratedTransaction.ts +0 -9
  108. package/src/instances/transaction/TransactionFields.ts +0 -22
  109. package/src/instances/transaction/index.ts +0 -1
  110. package/src/isInternetAvailable.ts +0 -11
  111. package/src/model/ChainFork/ChainForkStatic.ts +0 -9
  112. package/src/model/ChainFork/index.ts +0 -1
  113. package/src/model/ChainIdentity.ts +0 -6
  114. package/src/model/ChainStore.ts +0 -16
  115. package/src/model/CreatableProviderContext.ts +0 -6
  116. package/src/model/CreatableProviderContext.zod.ts +0 -55
  117. package/src/model/PayloadBundle/bundledPayloadToHydratedBlock.ts +0 -15
  118. package/src/model/PayloadBundle/bundledPayloadToHydratedTransaction.ts +0 -15
  119. package/src/model/PayloadBundle/hydratedBlockToPayloadBundle.ts +0 -19
  120. package/src/model/PayloadBundle/hydratedTransactionToPayloadBundle.ts +0 -19
  121. package/src/model/PayloadBundle/index.ts +0 -4
  122. package/src/model/index.ts +0 -6
  123. package/src/multipliers.ts +0 -18
  124. package/src/payloads/AddressPairPayload.ts +0 -27
  125. package/src/payloads/index.ts +0 -4
  126. package/src/payloads/netBalancesForPayloads.ts +0 -24
  127. package/src/payloads/netSchemasForPayloads.ts +0 -24
  128. package/src/payloads/netTransfersForPayloads.ts +0 -27
  129. package/src/primitives/block/index.ts +0 -2
  130. package/src/primitives/block/range/blockRangeSteps.ts +0 -23
  131. package/src/primitives/block/range/index.ts +0 -1
  132. package/src/primitives/block/rate/blockRate.ts +0 -77
  133. package/src/primitives/block/rate/index.ts +0 -4
  134. package/src/primitives/block/rate/stepRate.ts +0 -37
  135. package/src/primitives/block/rate/timeHelpers.ts +0 -61
  136. package/src/primitives/block/rate/timeRate.ts +0 -121
  137. package/src/primitives/chain/getWindowedChain.ts +0 -50
  138. package/src/primitives/chain/index.ts +0 -3
  139. package/src/primitives/chain/step/chainStepRewardAddress.ts +0 -30
  140. package/src/primitives/chain/step/index.ts +0 -4
  141. package/src/primitives/chain/step/stepRewardBlock.ts +0 -13
  142. package/src/primitives/chain/step/stepRewardTotal.ts +0 -46
  143. package/src/primitives/chain/step/stepsRewardTotal.ts +0 -37
  144. package/src/primitives/chain/time/externalBlockNumberFromXL1BlockNumber.ts +0 -32
  145. package/src/primitives/chain/time/externalBlockRangeFromStep.ts +0 -21
  146. package/src/primitives/chain/time/externalBlockRangeFromXL1BlockRange.ts +0 -17
  147. package/src/primitives/chain/time/index.ts +0 -3
  148. package/src/primitives/datalake/addDataLakePayloads.ts +0 -18
  149. package/src/primitives/datalake/addDataLakePayloadsToPayloads.ts +0 -24
  150. package/src/primitives/datalake/index.ts +0 -2
  151. package/src/primitives/index.ts +0 -13
  152. package/src/primitives/mapToMapType.ts +0 -35
  153. package/src/primitives/payload/index.ts +0 -1
  154. package/src/primitives/payload/mergeTransfers.ts +0 -16
  155. package/src/primitives/readPayloadMapFromStore.ts +0 -58
  156. package/src/primitives/rewardFromBlockNumber.ts +0 -19
  157. package/src/primitives/rewards/index.ts +0 -1
  158. package/src/primitives/rewards/networkStakeStepRewardPositionWeight.ts +0 -26
  159. package/src/primitives/stake/activeStakeAtTimeByAddress.ts +0 -27
  160. package/src/primitives/stake/activeStakeAtTimeByPosition.ts +0 -25
  161. package/src/primitives/stake/allStakersForRange.ts +0 -32
  162. package/src/primitives/stake/allStakersForStep.ts +0 -24
  163. package/src/primitives/stake/index.ts +0 -6
  164. package/src/primitives/stake/mergedAddRemoveStakeEventsByPosition.ts +0 -15
  165. package/src/primitives/stake/mergedAddRemoveStakeEventsByStaker.ts +0 -17
  166. package/src/primitives/stake/weightedStakeForRangeByPosition.ts +0 -69
  167. package/src/primitives/state/findMostRecentBlock.ts +0 -44
  168. package/src/primitives/state/hydratedBlockByNumber.ts +0 -25
  169. package/src/primitives/state/index.ts +0 -2
  170. package/src/primitives/step/completedStepRewardAddress.ts +0 -10
  171. package/src/primitives/step/derivedReceiveAddress.ts +0 -9
  172. package/src/primitives/step/index.ts +0 -4
  173. package/src/primitives/step/stepBlockRange.ts +0 -9
  174. package/src/primitives/step/stepTransferIndex.ts +0 -19
  175. package/src/primitives/transaction/elevatedPayloads.ts +0 -24
  176. package/src/primitives/transaction/index.ts +0 -1
  177. package/src/primitives/uncle/findBestUncle.ts +0 -9
  178. package/src/primitives/uncle/findUncles.ts +0 -75
  179. package/src/primitives/uncle/index.ts +0 -3
  180. package/src/primitives/uncle/scoreUncle.ts +0 -7
  181. package/src/services/AccountTransfersService.ts +0 -13
  182. package/src/services/BlockProducerService.ts +0 -11
  183. package/src/services/Chain/BaseChainService.ts +0 -4
  184. package/src/services/Chain/ChainHeadService.ts +0 -8
  185. package/src/services/Chain/ChainService.ts +0 -6
  186. package/src/services/Chain/index.ts +0 -3
  187. package/src/services/Election.ts +0 -14
  188. package/src/services/NetworkStakeService.ts +0 -4
  189. package/src/services/Params.ts +0 -13
  190. package/src/services/PendingTransactionsService.ts +0 -7
  191. package/src/services/SchemasService.ts +0 -11
  192. package/src/services/StakeIntentService/ChainIndexingServiceStateSchema.ts +0 -50
  193. package/src/services/StakeIntentService/StakeIntentService.ts +0 -35
  194. package/src/services/StakeIntentService/index.ts +0 -2
  195. package/src/services/index.ts +0 -8
  196. package/src/simple/StakeEventsViewer/SimpleStakeEventsViewer.ts +0 -93
  197. package/src/simple/StakeEventsViewer/index.ts +0 -1
  198. package/src/simple/StakeTotalsViewer/SimpleStakeTotalsViewer.ts +0 -116
  199. package/src/simple/StakeTotalsViewer/index.ts +0 -1
  200. package/src/simple/StakeViewer/SimpleStakeViewer.ts +0 -164
  201. package/src/simple/StakeViewer/index.ts +0 -1
  202. package/src/simple/TransactionViewer/SimpleTransactionViewer.ts +0 -100
  203. package/src/simple/TransactionViewer/index.ts +0 -1
  204. package/src/simple/accountBalance/SimpleAccountBalanceViewer.ts +0 -271
  205. package/src/simple/accountBalance/index.ts +0 -1
  206. package/src/simple/block/SimpleBlockViewer.ts +0 -231
  207. package/src/simple/block/index.ts +0 -1
  208. package/src/simple/blockInvalidation/SimpleBlockInvalidationViewer.ts +0 -197
  209. package/src/simple/blockInvalidation/index.ts +0 -1
  210. package/src/simple/blockReward/SimpleBlockRewardViewer.ts +0 -27
  211. package/src/simple/blockReward/index.ts +0 -1
  212. package/src/simple/blockValidation/SimpleBlockValidationViewer.ts +0 -194
  213. package/src/simple/blockValidation/index.ts +0 -1
  214. package/src/simple/chainContractViewer/SimpleChainContractViewer.ts +0 -92
  215. package/src/simple/chainContractViewer/index.ts +0 -1
  216. package/src/simple/client/SimpleXyoClient.ts +0 -14
  217. package/src/simple/client/index.ts +0 -1
  218. package/src/simple/datalake/AbstractRestDataLake.ts +0 -70
  219. package/src/simple/datalake/AbstractSimpleDataLake.ts +0 -62
  220. package/src/simple/datalake/RestDataLakeRunner.ts +0 -54
  221. package/src/simple/datalake/RestDataLakeViewer.ts +0 -22
  222. package/src/simple/datalake/SimpleDataLakeRunner.ts +0 -44
  223. package/src/simple/datalake/SimpleDataLakeViewer.ts +0 -24
  224. package/src/simple/datalake/index.ts +0 -4
  225. package/src/simple/finalization/SimpleFinalizationRunner.ts +0 -45
  226. package/src/simple/finalization/SimpleFinalizationViewer.ts +0 -123
  227. package/src/simple/finalization/index.ts +0 -2
  228. package/src/simple/gateway/SimpleXyoGateway.ts +0 -30
  229. package/src/simple/gateway/SimpleXyoGatewayRunner.ts +0 -137
  230. package/src/simple/gateway/index.ts +0 -2
  231. package/src/simple/index.ts +0 -22
  232. package/src/simple/mempool/SimpleMempoolRunner.ts +0 -390
  233. package/src/simple/mempool/SimpleMempoolViewer.ts +0 -215
  234. package/src/simple/mempool/index.ts +0 -2
  235. package/src/simple/network/SimpleXyoNetwork.ts +0 -48
  236. package/src/simple/network/index.ts +0 -1
  237. package/src/simple/network/lib/FailedNetworkStatusPayloads.ts +0 -16
  238. package/src/simple/network/lib/StatusNetworks.ts +0 -32
  239. package/src/simple/network/lib/index.ts +0 -2
  240. package/src/simple/permissions/SimpleXyoPermissions.ts +0 -82
  241. package/src/simple/permissions/index.ts +0 -2
  242. package/src/simple/permissions/store/MemoryPermissions.ts +0 -32
  243. package/src/simple/permissions/store/PermissionsStore.ts +0 -17
  244. package/src/simple/permissions/store/index.ts +0 -2
  245. package/src/simple/runner/SimpleXyoRunner.ts +0 -41
  246. package/src/simple/runner/index.ts +0 -1
  247. package/src/simple/signer/SimpleXyoSigner.ts +0 -78
  248. package/src/simple/signer/index.ts +0 -1
  249. package/src/simple/timeSync2/SimpleTimeSyncViewer.ts +0 -132
  250. package/src/simple/timeSync2/index.ts +0 -1
  251. package/src/simple/transactionInvalidation/SimpleTransactionInvalidationViewer.ts +0 -197
  252. package/src/simple/transactionInvalidation/index.ts +0 -1
  253. package/src/simple/transactionValidation/SimpleTransactionValidationViewer.ts +0 -173
  254. package/src/simple/transactionValidation/index.ts +0 -1
  255. package/src/simple/windowedBlock/SimpleWindowedBlockViewer.ts +0 -207
  256. package/src/simple/windowedBlock/index.ts +0 -1
  257. package/src/status/RuntimeStatusMonitor.ts +0 -120
  258. package/src/status/ServiceStatus.ts +0 -21
  259. package/src/status/index.ts +0 -2
  260. package/src/summary/index.ts +0 -2
  261. package/src/summary/model/BalancesStepSummary.ts +0 -35
  262. package/src/summary/model/SchemasStepSummary.ts +0 -33
  263. package/src/summary/model/StepSummary.ts +0 -20
  264. package/src/summary/model/TransfersSummary.ts +0 -36
  265. package/src/summary/model/index.ts +0 -4
  266. package/src/summary/primitives/balances/balancesStepSummaryFromRange.ts +0 -94
  267. package/src/summary/primitives/balances/balancesSummary.ts +0 -48
  268. package/src/summary/primitives/balances/index.ts +0 -2
  269. package/src/summary/primitives/index.ts +0 -3
  270. package/src/summary/primitives/schemas/index.ts +0 -2
  271. package/src/summary/primitives/schemas/schemasStepSummaryFromRange.ts +0 -86
  272. package/src/summary/primitives/schemas/schemasSummary.ts +0 -44
  273. package/src/summary/primitives/transfers/index.ts +0 -2
  274. package/src/summary/primitives/transfers/transfersStepSummaryFromRange.ts +0 -109
  275. package/src/summary/primitives/transfers/transfersSummary.ts +0 -52
  276. package/src/test/BuildBlockOptions.ts +0 -81
  277. package/src/test/buildBlock.ts +0 -105
  278. package/src/test/buildGenesisBlock.ts +0 -29
  279. package/src/test/buildNextBlock.ts +0 -37
  280. package/src/test/buildRandomChain.ts +0 -92
  281. package/src/test/buildRandomGenesisBlock.ts +0 -47
  282. package/src/test/createGenesisBlock.ts +0 -41
  283. package/src/test/createProducerChainStakeIntentTransaction.ts +0 -48
  284. package/src/test/getSimpleBlockViewerLocator.ts +0 -41
  285. package/src/test/getTestProviderContext.ts +0 -8
  286. package/src/test/index.ts +0 -2
  287. package/src/time/index.ts +0 -1
  288. package/src/time/primitives/index.ts +0 -1
  289. package/src/time/primitives/xl1BlockNumberToEthBlockNumber.ts +0 -13
  290. package/src/transaction/TransactionBuilder.ts +0 -164
  291. package/src/transaction/buildRandomTransaction.ts +0 -38
  292. package/src/transaction/buildTransaction.ts +0 -68
  293. package/src/transaction/buildUnsignedTransaction.ts +0 -56
  294. package/src/transaction/confirmSubmittedTransaction.ts +0 -42
  295. package/src/transaction/hydrateTransaction.ts +0 -117
  296. package/src/transaction/index.ts +0 -9
  297. package/src/transaction/primitives/index.ts +0 -4
  298. package/src/transaction/primitives/transactionBlockByteCount.ts +0 -10
  299. package/src/transaction/primitives/transactionElevatedPayloads.ts +0 -18
  300. package/src/transaction/primitives/transactionOperations.ts +0 -13
  301. package/src/transaction/primitives/transactionRequiredGas.ts +0 -22
  302. package/src/transaction/script.ts +0 -48
  303. package/src/transaction/signTransaction.ts +0 -32
  304. package/src/utils/HydratedCache.ts +0 -39
  305. package/src/utils/index.ts +0 -2
  306. package/src/utils/isZodError.ts +0 -11
  307. package/src/validation/index.ts +0 -2
  308. package/src/validation/lib/getUrl.ts +0 -7
  309. package/src/validation/lib/index.ts +0 -2
  310. package/src/validation/lib/isLocalhost.ts +0 -9
  311. package/src/validation/schema/Address.ts +0 -2
  312. package/src/validation/schema/Mnemonic.ts +0 -21
  313. package/src/validation/schema/index.ts +0 -2
  314. package/src/wallet/generateXyoBaseWalletFromPhrase.ts +0 -13
  315. package/src/wallet/index.ts +0 -2
  316. package/src/wallet/paths.ts +0 -17
@@ -1,231 +0,0 @@
1
- import type { Hash } from '@xylabs/sdk-js'
2
- import {
3
- assertEx, exists, isUndefined,
4
- } from '@xylabs/sdk-js'
5
- import type {
6
- Payload, ReadArchivist, WithHashMeta,
7
- } from '@xyo-network/sdk-js'
8
- import {
9
- asSignedHydratedBlockWithHashMeta, asSignedHydratedBlockWithStorageMeta, asXL1BlockNumber,
10
- BlockContextRead,
11
- BlockRate, BlockViewer, BlockViewerMoniker, ChainContextRead,
12
- ChainId, DataLakeViewer, DataLakeViewerMoniker, FinalizationViewer, FinalizationViewerMoniker, type SignedHydratedBlockWithHashMeta,
13
- SignedHydratedBlockWithStorageMeta, SingleTimeConfig, TimeDurations, type XL1BlockNumber, XL1BlockRange,
14
- } from '@xyo-network/xl1-protocol-lib'
15
-
16
- import { hydrateBlock } from '../../block/index.ts'
17
- import type { CreatableProviderParams } from '../../CreatableProvider/index.ts'
18
- import { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'
19
- import { LruCacheMap } from '../../driver/index.ts'
20
- import { ChainStoreRead } from '../../model/index.ts'
21
- import {
22
- addDataLakePayloads,
23
- addDataLakePayloadsToPayloads,
24
- calculateBlockRate, calculateStepSizeRate, calculateTimeRate, hydratedBlockByNumber,
25
- } from '../../primitives/index.ts'
26
- import { HydratedCache } from '../../utils/index.ts'
27
-
28
- /** Parameters for SimpleBlockViewer. */
29
- export interface SimpleBlockViewerParams extends CreatableProviderParams {
30
- finalizedArchivist: ReadArchivist
31
- }
32
-
33
- /** SimpleBlockViewer implementation. */
34
- @creatableProvider()
35
- export class SimpleBlockViewer extends AbstractCreatableProvider<SimpleBlockViewerParams> implements BlockViewer {
36
- static readonly defaultMoniker = BlockViewerMoniker
37
- static readonly dependencies = [FinalizationViewerMoniker]
38
- static readonly monikers = [BlockViewerMoniker]
39
- moniker = SimpleBlockViewer.defaultMoniker
40
-
41
- protected _store?: ChainStoreRead
42
- protected dataLakeViewer?: DataLakeViewer
43
- protected finalizationViewer!: FinalizationViewer
44
- protected payloadCache = new LruCacheMap<Hash, WithHashMeta<Payload>>({ max: 10_000 })
45
- protected signedHydratedBlockWithDataLakePayloadsCache = new LruCacheMap<Hash, SignedHydratedBlockWithHashMeta>({ max: 2000, ttl: 1000 * 60 * 60 })
46
-
47
- private _signedHydratedBlockCache: HydratedCache<SignedHydratedBlockWithStorageMeta> | undefined
48
-
49
- get finalizedArchivist(): ReadArchivist {
50
- return this.params.finalizedArchivist
51
- }
52
-
53
- protected get hydratedBlockCache(): HydratedCache<SignedHydratedBlockWithStorageMeta> {
54
- if (this._signedHydratedBlockCache) return this._signedHydratedBlockCache
55
- const context = this.getBlockContextRead()
56
- this._signedHydratedBlockCache = new HydratedCache<SignedHydratedBlockWithStorageMeta>(context, async (
57
- context,
58
- hash: Hash,
59
- maxDepth?: number,
60
- minDepth?: number,
61
- ) => {
62
- const result = await hydrateBlock(context, hash, maxDepth, minDepth)
63
- return asSignedHydratedBlockWithStorageMeta(result, true)
64
- }, 20_000)
65
- return this._signedHydratedBlockCache
66
- }
67
-
68
- protected get store() {
69
- return this._store!
70
- }
71
-
72
- static override async paramsHandler(params: Partial<SimpleBlockViewerParams>) {
73
- return {
74
- ...await super.paramsHandler(params),
75
- finalizedArchivist: assertEx(params.finalizedArchivist, () => 'finalizedArchivist is required'),
76
- } satisfies SimpleBlockViewerParams
77
- }
78
-
79
- async blockByHash(hash: Hash): Promise<SignedHydratedBlockWithHashMeta | null> {
80
- return await this.spanAsync('blockByHash', async () => {
81
- const cachedBlock = this.signedHydratedBlockWithDataLakePayloadsCache.get(hash)
82
- if (cachedBlock) {
83
- return cachedBlock
84
- }
85
-
86
- const cache = this.hydratedBlockCache
87
- const block = await cache.get(hash)
88
- const [result] = block ? await addDataLakePayloads(block, this.dataLakeViewer) : [null, []]
89
- if (result) {
90
- this.signedHydratedBlockWithDataLakePayloadsCache.set(hash, result)
91
- }
92
- return result
93
- }, { ...this.context, timeBudgetLimit: 100 })
94
- }
95
-
96
- async blockByNumber(blockNumber: XL1BlockNumber): Promise<SignedHydratedBlockWithHashMeta | null> {
97
- return await this.spanAsync('blockByNumber', async () => {
98
- const chainContext = await this.getChainContextRead()
99
- if (isUndefined(chainContext.head)) {
100
- return null
101
- }
102
- return await this.blockByNumberWithContext(chainContext, blockNumber)
103
- }, { ...this.context, timeBudgetLimit: 100 })
104
- }
105
-
106
- async blocksByHash(hash: Hash, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {
107
- return await this.spanAsync('blocksByHash', async () => {
108
- assertEx(limit > 0, () => 'limit must be greater than 0')
109
- assertEx(limit <= 100, () => 'limit must be less than 100')
110
- const blocks: SignedHydratedBlockWithHashMeta[] = []
111
- let current = await this.blockByHash(hash)
112
- while (current && blocks.length < limit) {
113
- blocks.push(current)
114
- const previousHash = current[0].previous
115
- if (previousHash === null) break
116
- current = await this.blockByHash(previousHash)
117
- }
118
- return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))
119
- }, { ...this.context, timeBudgetLimit: 300 })
120
- }
121
-
122
- async blocksByNumber(blockNumber: XL1BlockNumber, limit = 50): Promise<SignedHydratedBlockWithHashMeta[]> {
123
- return await this.spanAsync('blocksByNumber', async () => {
124
- assertEx(limit > 0, () => 'limit must be greater than 0')
125
- assertEx(limit <= 100, () => 'limit must be less than 100')
126
- const chainContext = await this.getChainContextRead()
127
- if (isUndefined(chainContext.head)) {
128
- return []
129
- }
130
- const blocks: SignedHydratedBlockWithHashMeta[] = []
131
- let current = await this.blockByNumberWithContext(chainContext, blockNumber)
132
- while (current && blocks.length < limit) {
133
- blocks.push(current)
134
- if (current[0].block === 0) break
135
- const previousNumber = asXL1BlockNumber(current[0].block - 1, true)
136
- current = await this.blockByNumberWithContext(chainContext, previousNumber)
137
- }
138
- return blocks.map(b => asSignedHydratedBlockWithHashMeta(b, true))
139
- }, this.context)
140
- }
141
-
142
- chainId(): Promise<ChainId>
143
- chainId(blockNumber: XL1BlockNumber): Promise<ChainId>
144
- chainId(blockNumber: 'latest'): Promise<ChainId>
145
- async chainId(blockNumber: XL1BlockNumber | 'latest' = 'latest'): Promise<ChainId> {
146
- return await this.spanAsync('chainId', async () => {
147
- return blockNumber === 'latest' ? (await this.finalizationViewer.headBlock()).chain : assertEx((await this.blockByNumber(blockNumber)), () => `Block not found [${blockNumber}]`)[0].chain
148
- }, this.context)
149
- }
150
-
151
- override async createHandler() {
152
- await super.createHandler()
153
- this.dataLakeViewer = await this.locator.tryGetInstance<DataLakeViewer>(DataLakeViewerMoniker)
154
- this.finalizationViewer = await this.locator.getInstance<FinalizationViewer>(FinalizationViewerMoniker)
155
- this._store = { chainMap: this.params.finalizedArchivist }
156
- }
157
-
158
- async currentBlock(): Promise<SignedHydratedBlockWithHashMeta> {
159
- const [result] = await addDataLakePayloads(await this.finalizationViewer.head(), this.dataLakeViewer)
160
- return result
161
- }
162
-
163
- async currentBlockHash(): Promise<Hash> {
164
- return await this.finalizationViewer.headHash()
165
- }
166
-
167
- async currentBlockNumber(): Promise<XL1BlockNumber> {
168
- return await this.finalizationViewer.headNumber()
169
- }
170
-
171
- async payloadByHash(hash: Hash): Promise<WithHashMeta<Payload> | null> {
172
- const [payload] = await this.payloadsByHash([hash])
173
- return payload ?? null
174
- }
175
-
176
- async payloadsByHash(hashes: Hash[]): Promise<WithHashMeta<Payload>[]> {
177
- let remainingHashes = [...hashes]
178
- const cachedPayloads = this.payloadCache.getMany(remainingHashes)
179
- const cachedHashes = new Set(cachedPayloads.map(p => p._hash))
180
- remainingHashes = remainingHashes.filter(h => !cachedHashes.has(h))
181
- const finalizedPayloads = remainingHashes.length > 0
182
- ? await this.finalizedArchivist.get(remainingHashes)
183
- : []
184
- const [resultPayloads] = await addDataLakePayloadsToPayloads(hashes, [...cachedPayloads, ...finalizedPayloads.filter(exists)], this.dataLakeViewer)
185
- resultPayloads.map((payload) => {
186
- this.payloadCache.set(payload._hash, payload)
187
- })
188
- return resultPayloads
189
- }
190
-
191
- async rate(range: XL1BlockRange, timeUnit?: keyof TimeDurations): Promise<BlockRate> {
192
- return await calculateBlockRate(this, range, timeUnit)
193
- }
194
-
195
- async stepSizeRate(start: XL1BlockNumber, stepIndex: number, count = 1, timeUnit?: keyof TimeDurations): Promise<BlockRate> {
196
- return await calculateStepSizeRate(this, start, stepIndex, count, timeUnit)
197
- }
198
-
199
- async timeDurationRate(
200
- timeConfig: SingleTimeConfig,
201
- startBlockNumber?: XL1BlockNumber,
202
- timeUnit?: keyof TimeDurations,
203
- toleranceMs?: number,
204
- maxAttempts?: number,
205
- ): Promise<BlockRate> {
206
- return await calculateTimeRate(this, timeConfig, startBlockNumber, timeUnit, toleranceMs, maxAttempts)
207
- }
208
-
209
- protected getBlockContextRead(): BlockContextRead {
210
- return {
211
- ...this.context,
212
- chainMap: this.store.chainMap,
213
- }
214
- }
215
-
216
- protected async getChainContextRead(): Promise<ChainContextRead> {
217
- return {
218
- ...this.getBlockContextRead(),
219
- head: (await this.finalizationViewer.head())[0],
220
- }
221
- }
222
-
223
- private async blockByNumberWithContext(
224
- chainContext: ChainContextRead,
225
- blockNumber: XL1BlockNumber,
226
- ): Promise<SignedHydratedBlockWithHashMeta | null> {
227
- const block = asSignedHydratedBlockWithHashMeta(await hydratedBlockByNumber(chainContext, blockNumber)) ?? null
228
- const [result] = block ? await addDataLakePayloads(block, this.dataLakeViewer) : [null, []]
229
- return result
230
- }
231
- }
@@ -1 +0,0 @@
1
- export * from './SimpleBlockViewer.ts'
@@ -1,197 +0,0 @@
1
- import { assertEx, Promisable } from '@xylabs/sdk-js'
2
- import { PayloadBuilder } from '@xyo-network/sdk-js'
3
- import {
4
- AccountBalanceViewer,
5
- AccountBalanceViewerMoniker,
6
- asXL1BlockRange,
7
- BlockInvalidationConfig,
8
- BlockInvalidationQualification,
9
- BlockInvalidationViewer,
10
- BlockInvalidationViewerMoniker,
11
- BlockViewer,
12
- BlockViewerMoniker,
13
- ChainContractViewer,
14
- ChainContractViewerMoniker,
15
- ChainId,
16
- HydratedBlockStateValidationFunction,
17
- HydratedBlockValidationError,
18
- HydratedBlockValidationFunction,
19
- isChainQualifiedHeadConfig,
20
- isHydratedBlock,
21
- SignedHydratedBlock,
22
- type SignedHydratedBlockWithHashMeta,
23
- XL1BlockNumber,
24
- } from '@xyo-network/xl1-protocol-lib'
25
-
26
- import type { CreatableProviderParams } from '../../CreatableProvider/index.ts'
27
- import { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'
28
- import { findUncles, getWindowedChain } from '../../primitives/index.ts'
29
-
30
- /** Parameters for SimpleBlockInvalidationViewer. */
31
- export interface SimpleBlockInvalidationViewerParams extends CreatableProviderParams {
32
- maxUncleWindowSize?: number
33
- state?: HydratedBlockStateValidationFunction
34
- value?: HydratedBlockValidationFunction
35
- }
36
-
37
- /** SimpleBlockInvalidationViewer implementation. */
38
- @creatableProvider()
39
- export class SimpleBlockInvalidationViewer extends AbstractCreatableProvider<SimpleBlockInvalidationViewerParams> implements BlockInvalidationViewer {
40
- static readonly defaultMoniker = BlockInvalidationViewerMoniker
41
- static readonly dependencies = [AccountBalanceViewerMoniker, BlockViewerMoniker, ChainContractViewerMoniker]
42
- static readonly monikers = [BlockInvalidationViewerMoniker]
43
- moniker = SimpleBlockInvalidationViewer.defaultMoniker
44
-
45
- private _accountBalanceViewer!: AccountBalanceViewer
46
- private _blockViewer!: BlockViewer
47
- private _chainContractViewer!: ChainContractViewer
48
- private _uncleWindowedChainCache: SignedHydratedBlockWithHashMeta[] | null = null
49
-
50
- protected get blockViewer() {
51
- return this._blockViewer
52
- }
53
-
54
- protected get chainContractViewer() {
55
- return this._chainContractViewer
56
- }
57
-
58
- protected get maxUncleWindowSize() {
59
- return this.params.maxUncleWindowSize!
60
- }
61
-
62
- static override async paramsHandler(params: Partial<SimpleBlockInvalidationViewerParams>): Promise<SimpleBlockInvalidationViewerParams> {
63
- return {
64
- ...await super.paramsHandler(params),
65
- value: params.value,
66
- state: params.state,
67
- maxUncleWindowSize: params.maxUncleWindowSize ?? 100,
68
- } satisfies SimpleBlockInvalidationViewerParams
69
- }
70
-
71
- override async createHandler() {
72
- await super.createHandler()
73
- this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)
74
- this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)
75
- this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)
76
- }
77
-
78
- async invalidateBlock(
79
- block: SignedHydratedBlock,
80
- config?: BlockInvalidationConfig,
81
- ): Promise<HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta> {
82
- return (await this.invalidateBlocks([block], config))[0]
83
- }
84
-
85
- async invalidateBlocks(
86
- blocks: SignedHydratedBlock[],
87
- config?: BlockInvalidationConfig,
88
- ): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {
89
- return (await this.qualifiedInvalidateBlocks(blocks, config))[0]
90
- }
91
-
92
- async invalidateUncle(
93
- blocks: SignedHydratedBlock[],
94
- config?: BlockInvalidationConfig,
95
- ): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {
96
- return (await this.qualifiedInvalidateUncle(blocks, config))[0]
97
- }
98
-
99
- async qualifiedInvalidateBlock(
100
- block: SignedHydratedBlockWithHashMeta,
101
- config?: BlockInvalidationConfig,
102
- ): Promise<[HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta, BlockInvalidationQualification]> {
103
- const result = (await this.qualifiedInvalidateBlocks([block], config))
104
- return [result[0][0], result[1]]
105
- }
106
-
107
- async qualifiedInvalidateBlocks(
108
- blocks: SignedHydratedBlock[],
109
- config?: BlockInvalidationConfig,
110
- ): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockInvalidationQualification]> {
111
- const { value, state } = config ?? {
112
- shape: true, links: true, state: true, head: undefined,
113
- }
114
-
115
- const blocksWithMeta = await Promise.all(blocks.map(b => Promise.all([PayloadBuilder.addHashMeta(b[0]), PayloadBuilder.addHashMeta(b[1])])))
116
-
117
- const head = isChainQualifiedHeadConfig(config)
118
- ? assertEx(
119
- (await this.blockViewer.blockByHash(config.head))?.[0],
120
- () => `Specified a head that is not in the chain [${config.head}]`,
121
- )
122
- : undefined
123
-
124
- const headBlock = head ?? (await this.blockViewer.currentBlock())[0]
125
-
126
- const validateProtocol = value ? this.doInvalidateProtocol.bind(this) : undefined
127
- const validateState = state ? this.doInvalidateState.bind(this) : undefined
128
-
129
- const chainIdAtBlockNumber = (blockNumber: XL1BlockNumber) => this.chainContractViewer.chainIdAtBlockNumber(blockNumber)
130
-
131
- const qualification = { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }
132
- const [protocolResults, stateResults] = await Promise.all([
133
- validateProtocol?.(blocksWithMeta, chainIdAtBlockNumber), validateState?.(blocksWithMeta, chainIdAtBlockNumber),
134
- ])
135
- const blockResults = blocksWithMeta.map((r, i) => {
136
- const errors = []
137
- if (protocolResults && !isHydratedBlock(protocolResults[i])) {
138
- errors.push(...(protocolResults[i]))
139
- }
140
- if (stateResults && !isHydratedBlock(stateResults[i])) {
141
- errors.push(...(stateResults[i]))
142
- }
143
- return errors.length === 0 ? r : errors
144
- })
145
- return [blockResults, qualification]
146
- }
147
-
148
- qualifiedInvalidateUncle(
149
- _blocks: SignedHydratedBlock[],
150
- _config?: BlockInvalidationConfig,
151
- ): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockInvalidationQualification]> {
152
- throw new Error('Method not implemented.')
153
- }
154
-
155
- private async doInvalidateProtocol(
156
- blocks: SignedHydratedBlockWithHashMeta[],
157
- chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,
158
- ): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {
159
- return (await Promise.all(blocks.map(async (block) => {
160
- const errors = await this.params.value!(
161
- this.context,
162
- block,
163
- chainIdAtBlockNumber,
164
- )
165
- return (errors.length === 0) ? block : errors
166
- })))
167
- }
168
-
169
- private async doInvalidateState(
170
- blocks: SignedHydratedBlockWithHashMeta[],
171
- chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,
172
- ): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {
173
- const windowedUncleChain = await this.updateWindowedChainCache()
174
-
175
- const uncles = findUncles(this.context, windowedUncleChain, blocks)
176
-
177
- if (uncles.length !== 1) {
178
- this.logger?.warn(JSON.stringify({ uncles, blocks }, null, 2))
179
- this.logger?.warn(JSON.stringify(windowedUncleChain, null, 2))
180
- throw new Error(`No uncles or greater than one uncle found in block validation, which is not supported [${uncles.length}, ${blocks.length}]`)
181
- }
182
- return (await Promise.all(uncles[0].map(async (block) => {
183
- const errors = await this.params.state!(
184
- {
185
- ...this.context, chainIdAtBlockNumber, accountBalance: this._accountBalanceViewer,
186
- },
187
- block,
188
- )
189
- return (errors.length === 0) ? block : errors
190
- })))
191
- }
192
-
193
- private async updateWindowedChainCache() {
194
- this._uncleWindowedChainCache = await getWindowedChain(this.context, this.blockViewer, this.maxUncleWindowSize, this._uncleWindowedChainCache ?? [])
195
- return [...this._uncleWindowedChainCache]
196
- }
197
- }
@@ -1 +0,0 @@
1
- export * from './SimpleBlockInvalidationViewer.ts'
@@ -1,27 +0,0 @@
1
- import { Promisable } from '@xylabs/sdk-js'
2
- import {
3
- AttoXL1, BlockRewardViewer, BlockRewardViewerMoniker, XL1BlockNumber,
4
- } from '@xyo-network/xl1-protocol-lib'
5
-
6
- import {
7
- AbstractCreatableProvider, creatableProvider, CreatableProviderParams,
8
- } from '../../CreatableProvider/index.ts'
9
- import { rewardFromBlockNumber } from '../../primitives/index.ts'
10
-
11
- /** Parameters for SimpleBlockRewardViewer. */
12
- export interface SimpleBlockRewardViewerParams extends CreatableProviderParams {}
13
-
14
- /** SimpleBlockRewardViewer implementation. */
15
- @creatableProvider()
16
- export class SimpleBlockRewardViewer extends AbstractCreatableProvider<SimpleBlockRewardViewerParams> implements BlockRewardViewer {
17
- static readonly defaultMoniker = BlockRewardViewerMoniker
18
- static readonly dependencies = []
19
- static readonly monikers = [BlockRewardViewerMoniker]
20
- moniker = SimpleBlockRewardViewer.defaultMoniker
21
-
22
- allowedRewardForBlock(block: XL1BlockNumber): Promisable<AttoXL1> {
23
- return rewardFromBlockNumber(
24
- block,
25
- )
26
- }
27
- }
@@ -1 +0,0 @@
1
- export * from './SimpleBlockRewardViewer.ts'
@@ -1,194 +0,0 @@
1
- import { assertEx, Promisable } from '@xylabs/sdk-js'
2
- import { PayloadBuilder } from '@xyo-network/sdk-js'
3
- import {
4
- AccountBalanceViewer,
5
- AccountBalanceViewerMoniker,
6
- asXL1BlockRange,
7
- BlockValidationConfig,
8
- BlockValidationQualification,
9
- BlockValidationViewer,
10
- BlockValidationViewerMoniker,
11
- BlockViewer,
12
- BlockViewerMoniker,
13
- ChainContractViewer,
14
- ChainContractViewerMoniker,
15
- ChainId,
16
- HydratedBlockStateValidationFunction,
17
- HydratedBlockValidationError,
18
- HydratedBlockValidationFunction,
19
- isChainQualifiedHeadConfig,
20
- isHydratedBlock,
21
- SignedHydratedBlock,
22
- type SignedHydratedBlockWithHashMeta,
23
- XL1BlockNumber,
24
- } from '@xyo-network/xl1-protocol-lib'
25
-
26
- import type { CreatableProviderParams } from '../../CreatableProvider/index.ts'
27
- import { AbstractCreatableProvider, creatableProvider } from '../../CreatableProvider/index.ts'
28
- import { findUncles, getWindowedChain } from '../../primitives/index.ts'
29
-
30
- /** Parameters for SimpleBlockValidationViewer. */
31
- export interface SimpleBlockValidationViewerParams extends CreatableProviderParams {
32
- maxUncleWindowSize?: number
33
- protocol?: HydratedBlockValidationFunction
34
- state?: HydratedBlockStateValidationFunction
35
- }
36
-
37
- /** SimpleBlockValidationViewer implementation. */
38
- @creatableProvider()
39
- export class SimpleBlockValidationViewer extends AbstractCreatableProvider<SimpleBlockValidationViewerParams> implements BlockValidationViewer {
40
- static readonly defaultMoniker = BlockValidationViewerMoniker
41
- static readonly dependencies = [AccountBalanceViewerMoniker, BlockViewerMoniker, ChainContractViewerMoniker]
42
- static readonly monikers = [BlockValidationViewerMoniker]
43
- moniker = SimpleBlockValidationViewer.defaultMoniker
44
-
45
- private _accountBalanceViewer!: AccountBalanceViewer
46
- private _blockViewer!: BlockViewer
47
- private _chainContractViewer!: ChainContractViewer
48
- private _uncleWindowedChainCache: SignedHydratedBlockWithHashMeta[] | null = null
49
-
50
- protected get blockViewer() {
51
- return this._blockViewer
52
- }
53
-
54
- protected get chainContractViewer() {
55
- return this._chainContractViewer
56
- }
57
-
58
- protected get maxUncleWindowSize() {
59
- return this.params.maxUncleWindowSize!
60
- }
61
-
62
- static override async paramsHandler(params: Partial<SimpleBlockValidationViewerParams>): Promise<SimpleBlockValidationViewerParams> {
63
- return {
64
- ...await super.paramsHandler(params),
65
- protocol: params.protocol,
66
- state: params.state,
67
- maxUncleWindowSize: params.maxUncleWindowSize ?? 100,
68
- } satisfies SimpleBlockValidationViewerParams
69
- }
70
-
71
- override async createHandler() {
72
- await super.createHandler()
73
- this._accountBalanceViewer = await this.locator.getInstance<AccountBalanceViewer>(AccountBalanceViewerMoniker)
74
- this._blockViewer = await this.locator.getInstance<BlockViewer>(BlockViewerMoniker)
75
- this._chainContractViewer = await this.locator.getInstance<ChainContractViewer>(ChainContractViewerMoniker)
76
- }
77
-
78
- async qualifiedValidateBlock(
79
- block: SignedHydratedBlockWithHashMeta,
80
- config?: BlockValidationConfig,
81
- ): Promise<[HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta, BlockValidationQualification]> {
82
- const result = (await this.qualifiedValidateBlocks([block], config))
83
- return [result[0][0], result[1]]
84
- }
85
-
86
- async qualifiedValidateBlocks(
87
- blocks: SignedHydratedBlock[],
88
- config?: BlockValidationConfig,
89
- ): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockValidationQualification]> {
90
- const { value, state } = config ?? {
91
- shape: true, links: true, state: true, head: undefined,
92
- }
93
-
94
- const blocksWithMeta = await Promise.all(blocks.map(b => Promise.all([PayloadBuilder.addHashMeta(b[0]), PayloadBuilder.addHashMeta(b[1])])))
95
-
96
- const head = isChainQualifiedHeadConfig(config)
97
- ? assertEx(
98
- (await this.blockViewer.blockByHash(config.head))?.[0],
99
- () => `Specified a head that is not in the chain [${config.head}]`,
100
- )
101
- : undefined
102
-
103
- const headBlock = head ?? (await this.blockViewer.currentBlock())[0]
104
-
105
- const validateProtocol = value ? this.doValidateProtocol.bind(this) : undefined
106
- const validateState = state ? this.doValidateState.bind(this) : undefined
107
-
108
- const chainIdAtBlockNumber = (blockNumber: XL1BlockNumber) => this.chainContractViewer.chainIdAtBlockNumber(blockNumber)
109
-
110
- const qualification = { head: headBlock._hash, range: asXL1BlockRange([0, headBlock.block], true) }
111
- const [protocolResults, stateResults] = await Promise.all([
112
- validateProtocol?.(blocksWithMeta, chainIdAtBlockNumber), validateState?.(blocksWithMeta, chainIdAtBlockNumber),
113
- ])
114
- const blockResults = blocksWithMeta.map((r, i) => {
115
- const errors = []
116
- if (protocolResults && !isHydratedBlock(protocolResults[i])) {
117
- errors.push(...(protocolResults[i]))
118
- }
119
- if (stateResults && !isHydratedBlock(stateResults[i])) {
120
- errors.push(...(stateResults[i]))
121
- }
122
- return errors.length === 0 ? r : errors
123
- })
124
- return [blockResults, qualification]
125
- }
126
-
127
- qualifiedValidateUncle(
128
- _blocks: SignedHydratedBlock[],
129
- _config?: BlockValidationConfig,
130
- ): Promise<[(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[], BlockValidationQualification]> {
131
- throw new Error('Method not implemented.')
132
- }
133
-
134
- async validateBlock(block: SignedHydratedBlock, config?: BlockValidationConfig): Promise<HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta> {
135
- return (await this.validateBlocks([block], config))[0]
136
- }
137
-
138
- async validateBlocks(
139
- blocks: SignedHydratedBlock[],
140
- config?: BlockValidationConfig,
141
- ): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {
142
- return (await this.qualifiedValidateBlocks(blocks, config))[0]
143
- }
144
-
145
- async validateUncle(
146
- blocks: SignedHydratedBlock[],
147
- config?: BlockValidationConfig,
148
- ): Promise<(HydratedBlockValidationError[] | SignedHydratedBlockWithHashMeta)[]> {
149
- return (await this.qualifiedValidateUncle(blocks, config))[0]
150
- }
151
-
152
- private async doValidateProtocol(
153
- blocks: SignedHydratedBlockWithHashMeta[],
154
- chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,
155
- ): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {
156
- return (await Promise.all(blocks.map(async (block) => {
157
- const errors = await this.params.protocol!(
158
- this.context,
159
- block,
160
- chainIdAtBlockNumber,
161
- )
162
- return (errors.length === 0) ? block : errors
163
- })))
164
- }
165
-
166
- private async doValidateState(
167
- blocks: SignedHydratedBlockWithHashMeta[],
168
- chainIdAtBlockNumber: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,
169
- ): Promise<(SignedHydratedBlockWithHashMeta | HydratedBlockValidationError[])[]> {
170
- const windowedUncleChain = await this.updateWindowedChainCache()
171
-
172
- const uncles = findUncles(this.context, windowedUncleChain, blocks)
173
-
174
- if (uncles.length !== 1) {
175
- this.logger?.warn(JSON.stringify({ uncles, blocks }, null, 2))
176
- this.logger?.warn(JSON.stringify(windowedUncleChain, null, 2))
177
- throw new Error(`No uncles or greater than one uncle found in block validation, which is not supported [${uncles.length}, ${blocks.length}]`)
178
- }
179
- return (await Promise.all(uncles[0].map(async (block) => {
180
- const errors = await this.params.state!(
181
- {
182
- ...this.context, chainIdAtBlockNumber, accountBalance: this._accountBalanceViewer,
183
- },
184
- block,
185
- )
186
- return (errors.length === 0) ? block : errors
187
- })))
188
- }
189
-
190
- private async updateWindowedChainCache() {
191
- this._uncleWindowedChainCache = await getWindowedChain(this.context, this.blockViewer, this.maxUncleWindowSize, this._uncleWindowedChainCache ?? [])
192
- return [...this._uncleWindowedChainCache]
193
- }
194
- }
@@ -1 +0,0 @@
1
- export * from './SimpleBlockValidationViewer.ts'