@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,86 +0,0 @@
1
- import { assertEx } from '@xylabs/sdk-js'
2
- import type { Schema, WithHashMeta } from '@xyo-network/sdk-js'
3
- import {
4
- isAnyPayload, isBoundWitness,
5
- isHashMeta, PayloadBuilder,
6
- } from '@xyo-network/sdk-js'
7
- import type {
8
- BlockViewer, CachingContext, MapType, XL1BlockRange,
9
- } from '@xyo-network/xl1-protocol-lib'
10
- import { StepSizes } from '@xyo-network/xl1-protocol-lib'
11
- import type { Semaphore } from 'async-mutex'
12
-
13
- import { deepCalculateFramesFromRange } from '../../../block/index.ts'
14
- import { type SchemasStepSummary, SchemasStepSummarySchema } from '../../model/index.ts'
15
-
16
- /** SchemasStepSummaryFromRange helper function. */
17
- export async function schemasStepSummaryFromRange(
18
- context: CachingContext,
19
- semaphores: Semaphore[],
20
- blockViewer: BlockViewer,
21
- summaryMap: MapType<string, WithHashMeta<SchemasStepSummary>>,
22
- range: XL1BlockRange,
23
- ): Promise<WithHashMeta<SchemasStepSummary>> {
24
- // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)
25
- const [frameHead] = assertEx(await blockViewer.blockByNumber(range[1]), () => `Block not found for number: ${range[1]}`)
26
- const frameSize = range[1] - range[0] + 1
27
-
28
- let result: WithHashMeta<SchemasStepSummary> | undefined = undefined
29
-
30
- if (frameSize === 1) {
31
- const [block, payloads] = assertEx(await blockViewer.blockByNumber(range[0]), () => `Block not found for number: ${range[0]}`)
32
- const boundWitnesses = [block, ...payloads.filter(x => isBoundWitness(x) && isHashMeta(x))]
33
- const schemas: Record<Schema, number> = {}
34
- for (const bw of boundWitnesses) {
35
- schemas[bw.schema] = (schemas[bw.schema] ?? 0) + 1
36
- for (const schema of bw.payload_schemas) {
37
- schemas[schema] = (schemas[schema] ?? 0) + 1
38
- }
39
- }
40
- result = await PayloadBuilder.addHashMeta({
41
- schema: SchemasStepSummarySchema, hash: frameHead._hash, stepSize: -1, schemas,
42
- })
43
- } else {
44
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
45
- const step = (StepSizes as any).indexOf(frameSize)
46
- assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)
47
-
48
- const summaryResult = await summaryMap.get(`${frameHead._hash}|${frameSize}`)
49
- if (isAnyPayload(summaryResult)) {
50
- result = summaryResult as WithHashMeta<SchemasStepSummary>
51
- } else {
52
- // We do not have it, so lets build it
53
- await semaphores[step].acquire()
54
- try {
55
- const subRanges = deepCalculateFramesFromRange(range, step - 1)
56
- const promises = subRanges.map(subRange => schemasStepSummaryFromRange(
57
- context,
58
- semaphores,
59
- blockViewer,
60
- summaryMap,
61
- subRange,
62
- ))
63
- const subResults = await Promise.all(promises)
64
-
65
- // add them all up
66
- const schemas: Record<Schema, number> = {}
67
- for (const subResult of subResults) {
68
- for (const [schema, count] of Object.entries(subResult.schemas)) {
69
- const typedSchema = schema as Schema
70
- schemas[typedSchema] = (schemas[typedSchema] ?? 0) + count
71
- }
72
- }
73
-
74
- result = await PayloadBuilder.addHashMeta({
75
- schema: SchemasStepSummarySchema, hash: frameHead._hash, stepSize: frameSize, schemas: schemas,
76
- })
77
-
78
- await summaryMap.set(`${frameHead._hash}|${frameSize}`, result)
79
- } finally {
80
- semaphores[step].release()
81
- }
82
- }
83
- }
84
- // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)
85
- return await PayloadBuilder.addHashMeta(result)
86
- }
@@ -1,44 +0,0 @@
1
- import { assertEx, spanRootAsync } from '@xylabs/sdk-js'
2
- import type { Schema, WithHashMeta } from '@xyo-network/sdk-js'
3
- import type {
4
- BlockViewer, CachingContext, ChainQualified, ChainQualifiedConfig,
5
- MapType,
6
- } from '@xyo-network/xl1-protocol-lib'
7
- import {
8
- asBlockBoundWitnessWithStorageMeta, asXL1BlockRange, isChainQualifiedHeadConfig,
9
- isChainQualifiedRangeConfig,
10
- } from '@xyo-network/xl1-protocol-lib'
11
- import type { Semaphore } from 'async-mutex'
12
-
13
- import { deepCalculateFramesFromRange } from '../../../block/index.ts'
14
- import type { SchemasStepSummary } from '../../model/index.ts'
15
- import { schemasStepSummaryFromRange } from './schemasStepSummaryFromRange.ts'
16
-
17
- /** SchemasSummary helper function. */
18
- export async function schemasSummary(
19
- context: CachingContext,
20
- semaphores: Semaphore[],
21
- blockViewer: BlockViewer,
22
- summaryMap: MapType<string, WithHashMeta<SchemasStepSummary>>,
23
- config?: ChainQualifiedConfig,
24
- ): Promise<ChainQualified<Record<Schema, number>>> {
25
- return await spanRootAsync('schemasSummary', async () => {
26
- const headHash = isChainQualifiedHeadConfig(config) ? config.head : await blockViewer.currentBlockHash()
27
- const [head] = assertEx(await blockViewer.blockByHash(headHash), () => `Block not found for hash: ${headHash}`)
28
- const headBoundWitness = asBlockBoundWitnessWithStorageMeta(head, () => `Found Block not a BlockWithHashMeta: ${headHash}`)
29
- const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)
30
- const ranges = deepCalculateFramesFromRange(asXL1BlockRange(
31
- range,
32
- { name: 'schemasSummary' },
33
- ))
34
- const summaries = await Promise.all(ranges.map(range => schemasStepSummaryFromRange(context, semaphores, blockViewer, summaryMap, range)))
35
- const results: Record<Schema, number> = {}
36
- for (let summary of summaries) {
37
- for (const [schema, count] of Object.entries(summary.schemas)) {
38
- const typedSchema = schema as Schema
39
- results[typedSchema] = (results[typedSchema] ?? 0) + count
40
- }
41
- }
42
- return [results, { range, head: headHash }]
43
- }, context)
44
- }
@@ -1,2 +0,0 @@
1
- export * from './transfersStepSummaryFromRange.ts'
2
- export * from './transfersSummary.ts'
@@ -1,109 +0,0 @@
1
- /* eslint-disable max-statements */
2
- import type { Address, Hash } from '@xylabs/sdk-js'
3
- import { assertEx, spanRootAsync } from '@xylabs/sdk-js'
4
- import { isAnyPayload } from '@xyo-network/sdk-js'
5
- import type {
6
- BlockViewer, CachingContext, MapType, XL1BlockRange,
7
- } from '@xyo-network/xl1-protocol-lib'
8
- import { asXL1BlockNumber, StepSizes } from '@xyo-network/xl1-protocol-lib'
9
- import type { Semaphore } from 'async-mutex'
10
-
11
- import { deepCalculateFramesFromRange } from '../../../block/index.ts'
12
- import { withContextCacheResponse } from '../../../ChainContextHelpers.ts'
13
- import { netTransfersForPayloads } from '../../../payloads/index.ts'
14
- import {
15
- parseSignedBigInt, type SignedBigInt, toSignedBigInt,
16
- } from '../../../SignedBigInt.ts'
17
- import {
18
- asTransfersStepSummary, type TransfersStepSummary, TransfersStepSummarySchema,
19
- } from '../../model/index.ts'
20
-
21
- /** TransfersSummaryKey helper function. */
22
- export function transfersSummaryKey(frameHeadHash: Hash, frameSize: number) {
23
- return `${frameHeadHash}|${frameSize}`
24
- }
25
-
26
- /** TransfersStepSummaryFromRange helper function. */
27
- export async function transfersStepSummaryFromRange(
28
- context: CachingContext,
29
- semaphores: Semaphore[],
30
- blockViewer: BlockViewer,
31
- summaryMap: MapType<string, TransfersStepSummary>,
32
- range: XL1BlockRange,
33
- ): Promise<TransfersStepSummary> {
34
- const cacheKey = `${range[0]}|${range[1]}`
35
- return await withContextCacheResponse(context, 'transfersStepSummaryFromRange', cacheKey, async () => {
36
- return await spanRootAsync('transfersStepSummaryFromRange', async () => {
37
- const [frameHead] = assertEx(await blockViewer.blockByNumber(range[1]), () => `Block not found for number: ${range[1]}`)
38
- const frameSize = range[1] - range[0] + 1
39
-
40
- let result: TransfersStepSummary | undefined
41
-
42
- if (frameSize === 1) {
43
- const [, payloads] = assertEx(await blockViewer.blockByNumber(range[0]), () => `Block not found for number: ${range[0]}`)
44
- const transfers: Record<Address, Record<Address, SignedBigInt>> = {}
45
- for (const [from, toMap] of Object.entries(netTransfersForPayloads(context, payloads))) {
46
- transfers[from as Address] = transfers[from as Address] ?? {}
47
- for (const [to, amount] of Object.entries(toMap)) {
48
- transfers[from as Address][to as Address] = toSignedBigInt(amount)
49
- }
50
- }
51
- result = {
52
- schema: TransfersStepSummarySchema, hash: frameHead._hash, stepSize: -1, transfers,
53
- }
54
- } else {
55
- const step = (StepSizes).indexOf(asXL1BlockNumber(frameSize, true))
56
- assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)
57
-
58
- const key = transfersSummaryKey(frameHead._hash, frameSize)
59
-
60
- const summaryResult = await summaryMap.get(key)
61
- if (isAnyPayload(summaryResult)) {
62
- result = asTransfersStepSummary(summaryResult, { required: true })
63
- } else {
64
- await semaphores[step].acquire()
65
- // We do not have it, so lets build it
66
- try {
67
- const subRanges = deepCalculateFramesFromRange(range, step - 1)
68
- const promises = subRanges.map(subRange => transfersStepSummaryFromRange(
69
- context,
70
- semaphores,
71
- blockViewer,
72
- summaryMap,
73
- subRange,
74
- ))
75
- const subResults = await Promise.all(promises)
76
-
77
- // add them all up
78
- const bigIntBalances: Record<Address, Record<Address, bigint>> = {}
79
- for (const subResult of subResults) {
80
- for (const [from, toMap] of Object.entries(subResult.transfers)) {
81
- bigIntBalances[from as Address] = bigIntBalances[from as Address] ?? {}
82
- for (const [to, transfer] of Object.entries(toMap)) {
83
- bigIntBalances[from as Address][to as Address] = (bigIntBalances[from as Address][to as Address] ?? 0n) + parseSignedBigInt(transfer)
84
- }
85
- }
86
- }
87
-
88
- const transfers: Record<Address, Record<Address, SignedBigInt>> = {}
89
- for (const [from, toMap] of Object.entries(bigIntBalances)) {
90
- transfers[from as Address] = transfers[from as Address] ?? {}
91
- for (const [to, transfer] of Object.entries(toMap)) {
92
- transfers[from as Address][to as Address] = toSignedBigInt(transfer)
93
- }
94
- }
95
-
96
- result = {
97
- schema: TransfersStepSummarySchema, hash: frameHead._hash, stepSize: frameSize, transfers,
98
- }
99
-
100
- await summaryMap.set(key, result)
101
- } finally {
102
- semaphores[step].release()
103
- }
104
- }
105
- }
106
- return result
107
- }, { ...context, timeBudgetLimit: 500 })
108
- }, { max: 100_000 })
109
- }
@@ -1,52 +0,0 @@
1
- import type { Address } from '@xylabs/sdk-js'
2
- import {
3
- asAddress, assertEx, spanRootAsync,
4
- } from '@xylabs/sdk-js'
5
- import type {
6
- BlockViewer, CachingContext, ChainQualified, ChainQualifiedConfig,
7
- MapType,
8
- } from '@xyo-network/xl1-protocol-lib'
9
- import {
10
- asBlockBoundWitnessWithStorageMeta, asXL1BlockRange, isChainQualifiedHeadConfig,
11
- isChainQualifiedRangeConfig,
12
- } from '@xyo-network/xl1-protocol-lib'
13
- import type { Semaphore } from 'async-mutex'
14
-
15
- import { deepCalculateFramesFromRange } from '../../../block/index.ts'
16
- import { parseSignedBigInt } from '../../../SignedBigInt.ts'
17
- import type { TransfersStepSummary } from '../../model/index.ts'
18
- import { transfersStepSummaryFromRange } from './transfersStepSummaryFromRange.ts'
19
-
20
- // the summary of amount of rewards claimed from the step reward pool by addresses
21
- /** TransfersSummary helper function. */
22
- export async function transfersSummary(
23
- context: CachingContext,
24
- semaphores: Semaphore[],
25
- blockViewer: BlockViewer,
26
- summaryMap: MapType<string, TransfersStepSummary>,
27
- config?: ChainQualifiedConfig,
28
- ): Promise<ChainQualified<Record<Address, Record<Address, bigint>>>> {
29
- return await spanRootAsync('transferSummary', async () => {
30
- const headHash = isChainQualifiedHeadConfig(config) ? config.head : await blockViewer.currentBlockHash()
31
- const [head] = assertEx(await blockViewer.blockByHash(headHash), () => `Block not found for hash: ${headHash}`)
32
- const headBoundWitness = asBlockBoundWitnessWithStorageMeta(head, () => `Found Block not a BlockWithHashMeta: ${headHash}`)
33
- const range = isChainQualifiedRangeConfig(config) ? config.range : asXL1BlockRange([0, headBoundWitness.block], true)
34
- const ranges = deepCalculateFramesFromRange(asXL1BlockRange(
35
- range,
36
- { name: 'transfersSummary' },
37
- ))
38
- const summaries = await Promise.all(ranges.map(range => transfersStepSummaryFromRange(context, semaphores, blockViewer, summaryMap, range)))
39
- const transfers: Record<Address, Record<Address, bigint>> = {}
40
- for (let summary of summaries) {
41
- for (const [from, toMap] of Object.entries(summary.transfers)) {
42
- const validFrom = asAddress(from, () => `Invalid address: ${from}`)
43
- transfers[validFrom] = transfers[validFrom] ?? {}
44
- for (const [to, transfer] of Object.entries(toMap)) {
45
- const validTo = asAddress(to, () => `Invalid address: ${to}`)
46
- transfers[validFrom][validTo] = (transfers[validFrom][validTo] ?? 0n) + parseSignedBigInt(transfer)
47
- }
48
- }
49
- }
50
- return [transfers, { range, head: headHash }]
51
- }, { ...context, timeBudgetLimit: 500 })
52
- }
@@ -1,81 +0,0 @@
1
- import type { Address, Hash } from '@xylabs/sdk-js'
2
- import {
3
- isAddress, isArray, isHash,
4
- isNumber, isObject,
5
- } from '@xylabs/sdk-js'
6
- import type { AccountInstance } from '@xyo-network/sdk-js'
7
- import type {
8
- AllowedBlockPayload, AttoXL1, ChainId, SignedHydratedTransaction, XL1BlockNumber,
9
- } from '@xyo-network/xl1-protocol-lib'
10
-
11
- /** Options for BaseBuildBlock. */
12
- export interface BaseBuildBlockOptions {
13
- blockPayloads: AllowedBlockPayload[]
14
- chainId: ChainId
15
- chainStepRewardAddress?: Address
16
- previousBlockNumber?: XL1BlockNumber
17
- protocol?: number
18
- signers: AccountInstance[]
19
- txs: SignedHydratedTransaction[]
20
- }
21
-
22
- /** Type guard that checks if a value is a valid BaseBuildBlockOptions. */
23
- export const isBaseBuildBlockOptions = (value: unknown): value is BaseBuildBlockOptions => {
24
- if (!isObject(value)) {
25
- return false
26
- }
27
- const typedValue = value as BaseBuildBlockOptions
28
- if (!isArray(typedValue.blockPayloads) || !isAddress(typedValue.chainId) || !isArray(typedValue.signers) || !isArray(typedValue.txs)) {
29
- return false
30
- }
31
- return true
32
- }
33
-
34
- /** Options for BuildGenesisBlock. */
35
- export interface BuildGenesisBlockOptions extends BaseBuildBlockOptions {
36
- previousBlockHash: null
37
- }
38
-
39
- /** Type guard that checks if a value is a valid BuildGenesisBlockOptions. */
40
- export const isBuildGenesisBlockOptions = (value: unknown): value is BuildGenesisBlockOptions => {
41
- if (!isBaseBuildBlockOptions(value)) {
42
- return false
43
- }
44
- const typedValue = value as BuildGenesisBlockOptions
45
- if (typedValue.previousBlockHash !== null) {
46
- return false
47
- }
48
- if (typedValue.previousBlockNumber !== undefined) {
49
- return false
50
- }
51
- return true
52
- }
53
-
54
- /** Options for BuildNextBlock. */
55
- export interface BuildNextBlockOptions extends BaseBuildBlockOptions {
56
- previousBlockHash: Hash
57
- previousBlockNumber: XL1BlockNumber
58
- previousStepHashes: Hash[]
59
- stepRewardPoolBalance: AttoXL1
60
- }
61
-
62
- /** Type guard that checks if a value is a valid BuildNextBlockOptions. */
63
- export const isBuildNextBlockOptions = (value: unknown): value is BuildNextBlockOptions => {
64
- if (!isBaseBuildBlockOptions(value)) {
65
- return false
66
- }
67
- const typedValue = value as BuildNextBlockOptions
68
- if (!isHash(typedValue.previousBlockHash)) {
69
- return false
70
- }
71
- if (!isNumber(typedValue.previousBlockNumber)) {
72
- return false
73
- }
74
- if (!isArray(typedValue.previousStepHashes)) {
75
- return false
76
- }
77
- return true
78
- }
79
-
80
- /** BuildBlockOptions type. */
81
- export type BuildBlockOptions = BuildGenesisBlockOptions | BuildNextBlockOptions
@@ -1,105 +0,0 @@
1
- import type { Hex } from '@xylabs/sdk-js'
2
- import { assertEx, isDefined } from '@xylabs/sdk-js'
3
- import type { Payload, WithStorageMeta } from '@xyo-network/sdk-js'
4
- import {
5
- asAnyPayload, BoundWitnessBuilder, PayloadBuilder,
6
- } from '@xyo-network/sdk-js'
7
- import type {
8
- BlockBoundWitness, SignedHydratedBlockWithHashMeta, Transfer,
9
- } from '@xyo-network/xl1-protocol-lib'
10
- import {
11
- asXL1BlockNumber, AttoXL1, isBlockBoundWitness, StepRewardFractions,
12
- StepSizes,
13
- XL1_PROTOCOL_VERSION,
14
- XYO_STEP_REWARD_ADDRESS,
15
- XYO_ZERO_ADDRESS,
16
- } from '@xyo-network/xl1-protocol-lib'
17
-
18
- import { validateTransactionsOpcodes } from '../block/index.ts'
19
- import { createTransferPayload } from '../createTransferPayload.ts'
20
- import { completedStepRewardAddress } from '../primitives/index.ts'
21
- import {
22
- type BuildBlockOptions, isBuildGenesisBlockOptions, isBuildNextBlockOptions,
23
- } from './BuildBlockOptions.ts'
24
-
25
- /*
26
- //this is for testing only to speed up the pace
27
- export const StepRewardFractions = [
28
- [0n, 1n], // 0%
29
- [1n, 10_000n], // 0.01%
30
- [2n, 1000n], // 0.2%
31
- [3n, 100n], // 3%
32
- [45n, 100n], // 45%
33
- ] as const
34
- */
35
-
36
- function calculateCompletedStepReward(step: number, balance: AttoXL1): AttoXL1 {
37
- return AttoXL1(StepRewardFractions[step][0] * balance / StepRewardFractions[step][1])
38
- }
39
-
40
- /** Builds a Block instance. */
41
- export async function buildBlock(options: BuildBlockOptions): Promise<SignedHydratedBlockWithHashMeta> {
42
- const previousBlockNumber = isBuildGenesisBlockOptions(options) ? -1 : options.previousBlockNumber
43
- const blockNumber = asXL1BlockNumber(previousBlockNumber + 1, true)
44
- const inStepHashes = isBuildNextBlockOptions(options) ? options.previousStepHashes : []
45
- const previousBlockHash = isBuildNextBlockOptions(options) ? options.previousBlockHash : undefined
46
- const stepRewardPoolBalance = isBuildNextBlockOptions(options) ? options.stepRewardPoolBalance : AttoXL1(0n)
47
- const {
48
- chainId, txs,
49
- chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,
50
- blockPayloads, protocol = XL1_PROTOCOL_VERSION, signers,
51
- } = options
52
- const step_hashes: Hex[] = []
53
-
54
- for (const [tx] of txs) {
55
- if (tx.nbf > blockNumber) {
56
- throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - NBF is ${tx.nbf}`)
57
- }
58
- if (tx.exp < blockNumber) {
59
- throw new Error(`Transaction ${await PayloadBuilder.hash(tx)} not valid for block ${blockNumber} - EXP is ${tx.exp}`)
60
- }
61
- }
62
-
63
- const completedStepRewardTransfers: Transfer[] = []
64
-
65
- // update the step hashes
66
- for (const [i, step] of StepSizes.entries()) {
67
- if (blockNumber < step) {
68
- break
69
- }
70
- if (blockNumber % step === 0) {
71
- if (StepRewardFractions[i][0] > 0 && chainStepRewardAddress !== XYO_ZERO_ADDRESS) {
72
- const completedStepRewardHolderAddress = completedStepRewardAddress({ block: blockNumber, step })
73
- const completedStepReward = calculateCompletedStepReward(i, stepRewardPoolBalance)
74
- completedStepRewardTransfers.push(createTransferPayload(chainStepRewardAddress, { [completedStepRewardHolderAddress]: completedStepReward }))
75
- }
76
- step_hashes.push(assertEx(previousBlockHash, () => `Previous block hash is required for step ${step} at block ${blockNumber}`))
77
- } else {
78
- if (isDefined(inStepHashes.at(i))) {
79
- step_hashes.push(inStepHashes[i])
80
- }
81
- }
82
- }
83
-
84
- const previous = previousBlockHash ?? null
85
- const block = blockNumber
86
- const txElevatedPayloads = await validateTransactionsOpcodes(txs)
87
-
88
- const payloads: Payload[] = [
89
- ...txs.map(([tx]) => tx),
90
- ...blockPayloads,
91
- ...txElevatedPayloads,
92
- ...completedStepRewardTransfers,
93
- ]
94
-
95
- const [bw, txPayloads] = await new BoundWitnessBuilder<BlockBoundWitness, WithStorageMeta<Payload>>()
96
- .fields({
97
- block, chain: chainId, previous, step_hashes, protocol,
98
- })
99
- .meta({ $epoch: Date.now(), $signatures: [] })
100
- .signers(signers)
101
- .payloads(await PayloadBuilder.addStorageMeta(payloads))
102
- .build()
103
- assertEx(isBlockBoundWitness(bw), () => 'Build of BlockBoundWitness failed')
104
- return [await PayloadBuilder.addStorageMeta(bw), txPayloads.map(p => asAnyPayload(p, true))]
105
- }
@@ -1,29 +0,0 @@
1
- import type { AccountInstance } from '@xyo-network/sdk-js'
2
- import type {
3
- AllowedBlockPayload, ChainId,
4
- SignedHydratedBlockWithHashMeta,
5
- SignedHydratedTransactionWithHashMeta,
6
- } from '@xyo-network/xl1-protocol-lib'
7
- import { XYO_ZERO_ADDRESS } from '@xyo-network/xl1-protocol-lib'
8
-
9
- import { buildBlock } from './buildBlock.ts'
10
-
11
- /** Builds a GenesisBlock instance. */
12
- export async function buildGenesisBlock(
13
- chainId: ChainId,
14
- txs: SignedHydratedTransactionWithHashMeta[],
15
- blockPayloads: AllowedBlockPayload[],
16
- signers: AccountInstance[],
17
- chainStepRewardAddress = XYO_ZERO_ADDRESS,
18
- protocol?: number,
19
- ): Promise<SignedHydratedBlockWithHashMeta> {
20
- return await buildBlock({
21
- previousBlockHash: null,
22
- chainId,
23
- txs,
24
- blockPayloads,
25
- signers,
26
- chainStepRewardAddress,
27
- protocol,
28
- })
29
- }
@@ -1,37 +0,0 @@
1
- import type { AccountInstance, WithHashMeta } from '@xyo-network/sdk-js'
2
- import type {
3
- AllowedBlockPayload, BlockBoundWitness, ChainId,
4
- SignedHydratedBlockWithHashMeta,
5
- SignedHydratedTransaction,
6
- } from '@xyo-network/xl1-protocol-lib'
7
- import {
8
- AttoXL1,
9
- XYO_STEP_REWARD_ADDRESS,
10
- } from '@xyo-network/xl1-protocol-lib'
11
-
12
- import { buildBlock } from './buildBlock.ts'
13
-
14
- /** Builds a NextBlock instance. */
15
- export async function buildNextBlock(
16
- previousBlock: WithHashMeta<BlockBoundWitness>,
17
- txs: SignedHydratedTransaction[],
18
- blockPayloads: AllowedBlockPayload[],
19
- signers: AccountInstance[],
20
- chainStepRewardAddress = XYO_STEP_REWARD_ADDRESS,
21
- stepRewardPoolBalance: AttoXL1 = AttoXL1(0n),
22
- protocol?: number,
23
- chainId?: ChainId,
24
- ): Promise<SignedHydratedBlockWithHashMeta> {
25
- return await buildBlock({
26
- chainId: chainId ?? previousBlock.chain,
27
- previousBlockNumber: previousBlock.block,
28
- previousStepHashes: previousBlock.step_hashes ?? [],
29
- previousBlockHash: previousBlock._hash,
30
- txs,
31
- blockPayloads,
32
- signers,
33
- protocol,
34
- chainStepRewardAddress,
35
- stepRewardPoolBalance,
36
- })
37
- }
@@ -1,92 +0,0 @@
1
- import type { Address } from '@xylabs/sdk-js'
2
- import { asAddress, assertEx } from '@xylabs/sdk-js'
3
- import type { AccountInstance, Id } from '@xyo-network/sdk-js'
4
- import {
5
- Account, asSchema, IdSchema,
6
- MemoryArchivist,
7
- PayloadBuilder,
8
- } from '@xyo-network/sdk-js'
9
- import {
10
- asXL1BlockNumber,
11
- type ChainId, type SignedHydratedBlockWithHashMeta, type SignedHydratedTransactionWithHashMeta,
12
- } from '@xyo-network/xl1-protocol-lib'
13
-
14
- import { flattenHydratedBlocks } from '../block/index.ts'
15
- import { buildRandomTransaction } from '../transaction/index.ts'
16
- import { buildNextBlock } from './buildNextBlock.ts'
17
- import { TestChainId } from './buildRandomGenesisBlock.ts'
18
- import { createGenesisBlock } from './createGenesisBlock.ts'
19
-
20
- /** TestGenesisBlockRewardAddress constant. */
21
- export const TestGenesisBlockRewardAddress = assertEx(asAddress('fa7f0bb865a4bfff3d5e2c726d3e063297014da9'))
22
-
23
- /**
24
- * Creates a chain of blocks
25
- * @param blockProducer The producer for the chain blocks
26
- * @param count The number of blocks to build
27
- * @param previousBlock The previous block from which to build the chain (if none supplied will create genesis block)
28
- * @returns A chain of blocks
29
- */
30
- export const buildRandomChain = async (
31
- blockProducer: AccountInstance,
32
- count: number = 10,
33
- previousBlock?: SignedHydratedBlockWithHashMeta,
34
- chainId?: ChainId,
35
- transactionAccount?: AccountInstance,
36
- receiverAddresses?: Address[],
37
- ): Promise<SignedHydratedBlockWithHashMeta[]> => {
38
- const chainIdToUse = chainId ?? TestChainId
39
- const blocks: SignedHydratedBlockWithHashMeta[] = []
40
- let remaining = count
41
- let lastBlock: SignedHydratedBlockWithHashMeta | undefined = previousBlock
42
- const transactionAccountToUse = transactionAccount ?? await Account.random()
43
- if (!lastBlock) {
44
- const block = await createGenesisBlock(
45
- blockProducer,
46
- chainIdToUse,
47
- 1_000_000_000n * (10n ** 18n),
48
- transactionAccountToUse.address,
49
- )
50
- blocks.push(block)
51
- remaining = remaining - 1
52
- lastBlock = block
53
- }
54
- const resolvedReceiverAddresses = receiverAddresses ?? [((await Account.random()).address)]
55
- let saltCounter = 0
56
- while (remaining > 0) {
57
- saltCounter += 1
58
- const payloads = [new PayloadBuilder<Id>({ schema: IdSchema }).fields({ salt: `${Date.now()}-${saltCounter}` }).build()]
59
- saltCounter += 1
60
- const additionalPrivatePayloads = (remaining % 2 === 0)
61
- ? [new PayloadBuilder({ schema: asSchema('network.xyo.private', true) }).fields({ salt: `${Date.now()}-${saltCounter}` }).build()]
62
- : []
63
- const txs: SignedHydratedTransactionWithHashMeta[] = []
64
- for (const receiverAddress of resolvedReceiverAddresses) {
65
- txs.push(await buildRandomTransaction(
66
- chainIdToUse,
67
- [...payloads, ...additionalPrivatePayloads],
68
- transactionAccountToUse,
69
- asXL1BlockNumber(Math.max(count - remaining - 1000, 0), true),
70
- asXL1BlockNumber(count - remaining + 1000, true),
71
- [asSchema('network.xyo.private', true)],
72
- receiverAddress,
73
- ))
74
- }
75
- const previousBlock = assertEx(lastBlock?.[0], () => new Error('No last block'))
76
- const block = await buildNextBlock(previousBlock, txs, [], [blockProducer], transactionAccountToUse.address)
77
- blocks.push(block)
78
- remaining = remaining - 1
79
- lastBlock = block
80
- }
81
- return blocks
82
- }
83
-
84
- /** Builds a RandomChainArchivist instance. */
85
- export async function buildRandomChainArchivist(count = 20) {
86
- const producerAccount = await Account.random()
87
- const blocks = await buildRandomChain(producerAccount, count)
88
- const archivist = await MemoryArchivist.create()
89
- const payloads = flattenHydratedBlocks(blocks)
90
- await archivist.insert(payloads)
91
- return archivist
92
- }