@xyo-network/xl1-protocol-sdk 1.16.21 → 1.16.23

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 (137) hide show
  1. package/dist/neutral/ChainServiceCollectionV2.d.ts +3 -3
  2. package/dist/neutral/ChainServiceCollectionV2.d.ts.map +1 -1
  3. package/dist/neutral/block/primitives/index.d.ts +0 -1
  4. package/dist/neutral/block/primitives/index.d.ts.map +1 -1
  5. package/dist/neutral/config/Chain.d.ts +1 -0
  6. package/dist/neutral/config/Chain.d.ts.map +1 -1
  7. package/dist/neutral/config/Config.d.ts +2 -0
  8. package/dist/neutral/config/Config.d.ts.map +1 -1
  9. package/dist/neutral/config/Producer.d.ts +1 -0
  10. package/dist/neutral/config/Producer.d.ts.map +1 -1
  11. package/dist/neutral/index.d.ts +2 -0
  12. package/dist/neutral/index.d.ts.map +1 -1
  13. package/dist/neutral/index.mjs +794 -240
  14. package/dist/neutral/index.mjs.map +1 -1
  15. package/dist/neutral/model/summary.d.ts +5 -0
  16. package/dist/neutral/model/summary.d.ts.map +1 -1
  17. package/dist/neutral/payloads/index.d.ts +1 -0
  18. package/dist/neutral/payloads/index.d.ts.map +1 -1
  19. package/dist/neutral/payloads/netSchemasForPayloads.d.ts +4 -0
  20. package/dist/neutral/payloads/netSchemasForPayloads.d.ts.map +1 -0
  21. package/dist/neutral/payloads/summary/SchemasStepSummary.d.ts +18 -0
  22. package/dist/neutral/payloads/summary/SchemasStepSummary.d.ts.map +1 -0
  23. package/dist/neutral/payloads/summary/index.d.ts +1 -0
  24. package/dist/neutral/payloads/summary/index.d.ts.map +1 -1
  25. package/dist/neutral/primitives/summary/index.d.ts +2 -1
  26. package/dist/neutral/primitives/summary/index.d.ts.map +1 -1
  27. package/dist/neutral/primitives/summary/schemas/index.d.ts +3 -0
  28. package/dist/neutral/primitives/summary/schemas/index.d.ts.map +1 -0
  29. package/dist/neutral/primitives/summary/schemas/schemasStepSummaryFromRange.d.ts +6 -0
  30. package/dist/neutral/primitives/summary/schemas/schemasStepSummaryFromRange.d.ts.map +1 -0
  31. package/dist/neutral/primitives/summary/schemas/schemasSummary.d.ts +4 -0
  32. package/dist/neutral/primitives/summary/schemas/schemasSummary.d.ts.map +1 -0
  33. package/dist/neutral/primitives/summary/transfers/transfersStepSummaryFromRange.d.ts.map +1 -1
  34. package/dist/neutral/primitives/summary/transfers/transfersSummary.d.ts +3 -2
  35. package/dist/neutral/primitives/summary/transfers/transfersSummary.d.ts.map +1 -1
  36. package/dist/neutral/primitives/timeBudget.d.ts +1 -1
  37. package/dist/neutral/primitives/timeBudget.d.ts.map +1 -1
  38. package/dist/neutral/services/SchemasService.d.ts +9 -0
  39. package/dist/neutral/services/SchemasService.d.ts.map +1 -0
  40. package/dist/neutral/services/StakeIntentService/ChainIndexingServiceStateSchema.d.ts +2 -2
  41. package/dist/neutral/services/StakeIntentService/ChainIndexingServiceStateSchema.d.ts.map +1 -1
  42. package/dist/neutral/services/index.d.ts +1 -1
  43. package/dist/neutral/services/index.d.ts.map +1 -1
  44. package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts +2 -2
  45. package/dist/neutral/simple/accountBalance/SimpleAccountBalanceViewer.d.ts.map +1 -1
  46. package/dist/neutral/utils/index.d.ts +2 -0
  47. package/dist/neutral/utils/index.d.ts.map +1 -0
  48. package/dist/neutral/utils/isZodError.d.ts +4 -0
  49. package/dist/neutral/utils/isZodError.d.ts.map +1 -0
  50. package/dist/neutral/validation/block/HydratedBlockStateValidationFunction.d.ts +2 -2
  51. package/dist/neutral/validation/block/HydratedBlockStateValidationFunction.d.ts.map +1 -1
  52. package/dist/neutral/viewers/AccountBalance.d.ts +60 -12
  53. package/dist/neutral/viewers/AccountBalance.d.ts.map +1 -1
  54. package/dist/neutral/zod/ArrayBuffer.d.ts +4 -0
  55. package/dist/neutral/zod/ArrayBuffer.d.ts.map +1 -0
  56. package/dist/neutral/zod/BlockBoundWitness.d.ts +44 -0
  57. package/dist/neutral/zod/BlockBoundWitness.d.ts.map +1 -0
  58. package/dist/neutral/zod/BoundWitness.d.ts +123 -0
  59. package/dist/neutral/zod/BoundWitness.d.ts.map +1 -0
  60. package/dist/neutral/zod/Chain.d.ts +4 -0
  61. package/dist/neutral/zod/Chain.d.ts.map +1 -0
  62. package/dist/neutral/zod/HydratedBlock.d.ts +133 -0
  63. package/dist/neutral/zod/HydratedBlock.d.ts.map +1 -0
  64. package/dist/neutral/zod/HydratedTransaction.d.ts +210 -0
  65. package/dist/neutral/zod/HydratedTransaction.d.ts.map +1 -0
  66. package/dist/neutral/zod/Permission.d.ts +53 -0
  67. package/dist/neutral/zod/Permission.d.ts.map +1 -0
  68. package/dist/neutral/zod/RewardsRangeOptions.d.ts +11 -0
  69. package/dist/neutral/zod/RewardsRangeOptions.d.ts.map +1 -0
  70. package/dist/neutral/zod/Sequence.d.ts +9 -0
  71. package/dist/neutral/zod/Sequence.d.ts.map +1 -0
  72. package/dist/neutral/zod/Stake.d.ts +62 -0
  73. package/dist/neutral/zod/Stake.d.ts.map +1 -0
  74. package/dist/neutral/zod/TimeDomain.d.ts +3 -0
  75. package/dist/neutral/zod/TimeDomain.d.ts.map +1 -0
  76. package/dist/neutral/zod/TransactionBoundWitness.d.ts +75 -0
  77. package/dist/neutral/zod/TransactionBoundWitness.d.ts.map +1 -0
  78. package/dist/neutral/zod/TransactionFees.d.ts +53 -0
  79. package/dist/neutral/zod/TransactionFees.d.ts.map +1 -0
  80. package/dist/neutral/zod/TransferPair.d.ts +3 -0
  81. package/dist/neutral/zod/TransferPair.d.ts.map +1 -0
  82. package/dist/neutral/zod/index.d.ts +15 -0
  83. package/dist/neutral/zod/index.d.ts.map +1 -0
  84. package/package.json +4 -4
  85. package/src/ChainServiceCollectionV2.ts +3 -3
  86. package/src/block/primitives/index.ts +0 -1
  87. package/src/config/Chain.ts +8 -0
  88. package/src/config/Producer.ts +6 -0
  89. package/src/index.ts +2 -0
  90. package/src/model/summary.ts +5 -0
  91. package/src/payloads/index.ts +1 -0
  92. package/src/payloads/netSchemasForPayloads.ts +22 -0
  93. package/src/payloads/summary/SchemasStepSummary.ts +26 -0
  94. package/src/payloads/summary/index.ts +1 -0
  95. package/src/primitives/summary/balances/balancesSummary.ts +1 -1
  96. package/src/primitives/summary/index.ts +2 -1
  97. package/src/primitives/summary/schemas/index.ts +2 -0
  98. package/src/primitives/summary/schemas/schemasStepSummaryFromRange.ts +83 -0
  99. package/src/primitives/summary/schemas/schemasSummary.ts +33 -0
  100. package/src/primitives/summary/transfers/transfersStepSummaryFromRange.ts +8 -6
  101. package/src/primitives/summary/transfers/transfersSummary.ts +11 -7
  102. package/src/primitives/timeBudget.ts +21 -2
  103. package/src/services/SchemasService.ts +9 -0
  104. package/src/services/index.ts +1 -1
  105. package/src/simple/accountBalance/SimpleAccountBalanceViewer.ts +5 -5
  106. package/src/simple/chainStake/SimpleChainStakeViewer.ts +1 -1
  107. package/src/utils/index.ts +1 -0
  108. package/src/utils/isZodError.ts +9 -0
  109. package/src/validation/block/HydratedBlockStateValidationFunction.ts +2 -2
  110. package/src/viewers/AccountBalance.ts +17 -15
  111. package/src/zod/ArrayBuffer.ts +42 -0
  112. package/src/zod/BlockBoundWitness.ts +36 -0
  113. package/src/zod/BoundWitness.ts +56 -0
  114. package/src/zod/Chain.ts +5 -0
  115. package/src/zod/HydratedBlock.ts +32 -0
  116. package/src/zod/HydratedTransaction.ts +37 -0
  117. package/src/zod/Permission.ts +23 -0
  118. package/src/zod/RewardsRangeOptions.ts +10 -0
  119. package/src/zod/Sequence.ts +15 -0
  120. package/src/zod/Stake.ts +43 -0
  121. package/src/zod/TimeDomain.ts +7 -0
  122. package/src/zod/TransactionBoundWitness.ts +42 -0
  123. package/src/zod/TransactionFees.ts +45 -0
  124. package/src/zod/TransferPair.ts +6 -0
  125. package/src/zod/index.ts +14 -0
  126. package/dist/neutral/block/primitives/transfers/index.d.ts +0 -3
  127. package/dist/neutral/block/primitives/transfers/index.d.ts.map +0 -1
  128. package/dist/neutral/block/primitives/transfers/transfersStepSummaryFromRange.d.ts +0 -6
  129. package/dist/neutral/block/primitives/transfers/transfersStepSummaryFromRange.d.ts.map +0 -1
  130. package/dist/neutral/block/primitives/transfers/transfersSummary.d.ts +0 -5
  131. package/dist/neutral/block/primitives/transfers/transfersSummary.d.ts.map +0 -1
  132. package/dist/neutral/services/AccountBalanceService.d.ts +0 -4
  133. package/dist/neutral/services/AccountBalanceService.d.ts.map +0 -1
  134. package/src/block/primitives/transfers/index.ts +0 -2
  135. package/src/block/primitives/transfers/transfersStepSummaryFromRange.ts +0 -98
  136. package/src/block/primitives/transfers/transfersSummary.ts +0 -44
  137. package/src/services/AccountBalanceService.ts +0 -4
@@ -0,0 +1,53 @@
1
+ import * as z from 'zod';
2
+ export declare const AttoZod: z.ZodBigInt;
3
+ export declare const JsonToAttoZod: z.ZodPipe<z.ZodPipe<z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Hex, string>>, z.ZodTransform<bigint, import("@xylabs/sdk-js").Hex>>, z.ZodTransform<import("@xyo-network/xl1-protocol").AttoXL1, bigint>>;
4
+ export declare const AttoToJsonZod: z.ZodPipe<z.ZodBigInt, z.ZodTransform<import("@xylabs/sdk-js").Hex, bigint>>;
5
+ export declare const TransactionFeesHexZod: z.ZodObject<{
6
+ base: z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Hex, string>>;
7
+ gasLimit: z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Hex, string>>;
8
+ gasPrice: z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Hex, string>>;
9
+ priority: z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Hex, string>>;
10
+ }, z.core.$strip>;
11
+ export type TransactionFeesHexZodType = z.infer<typeof TransactionFeesHexZod>;
12
+ export declare const TransactionFeesBigIntZod: z.ZodObject<{
13
+ base: z.ZodBigInt;
14
+ gasLimit: z.ZodBigInt;
15
+ gasPrice: z.ZodBigInt;
16
+ priority: z.ZodBigInt;
17
+ }, z.core.$strip>;
18
+ export type TransactionFeesBigIntZodType = z.infer<typeof TransactionFeesBigIntZod>;
19
+ export declare const TransactionFeesJsonToBigIntZod: z.ZodPipe<z.ZodObject<{
20
+ base: z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Hex, string>>;
21
+ gasLimit: z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Hex, string>>;
22
+ gasPrice: z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Hex, string>>;
23
+ priority: z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Hex, string>>;
24
+ }, z.core.$strip>, z.ZodTransform<{
25
+ base: bigint;
26
+ gasLimit: bigint;
27
+ gasPrice: bigint;
28
+ priority: bigint;
29
+ }, {
30
+ base: import("@xylabs/sdk-js").Hex;
31
+ gasLimit: import("@xylabs/sdk-js").Hex;
32
+ gasPrice: import("@xylabs/sdk-js").Hex;
33
+ priority: import("@xylabs/sdk-js").Hex;
34
+ }>>;
35
+ export declare const TransactionFeesBigIntToJsonZod: z.ZodPipe<z.ZodObject<{
36
+ base: z.ZodBigInt;
37
+ gasLimit: z.ZodBigInt;
38
+ gasPrice: z.ZodBigInt;
39
+ priority: z.ZodBigInt;
40
+ }, z.core.$strip>, z.ZodTransform<{
41
+ base: import("@xylabs/sdk-js").Hex;
42
+ gasLimit: import("@xylabs/sdk-js").Hex;
43
+ gasPrice: import("@xylabs/sdk-js").Hex;
44
+ priority: import("@xylabs/sdk-js").Hex;
45
+ }, {
46
+ base: bigint;
47
+ gasLimit: bigint;
48
+ gasPrice: bigint;
49
+ priority: bigint;
50
+ }>>;
51
+ export type TransactionFeesJsonToBigIntZodType = z.infer<typeof TransactionFeesJsonToBigIntZod>;
52
+ export type TransactionFeesBigIntToJsonZodType = z.infer<typeof TransactionFeesBigIntToJsonZod>;
53
+ //# sourceMappingURL=TransactionFees.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransactionFees.d.ts","sourceRoot":"","sources":["../../../src/zod/TransactionFees.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAA;AAExB,eAAO,MAAM,OAAO,aAAa,CAAA;AACjC,eAAO,MAAM,aAAa,+NAA+C,CAAA;AAEzE,eAAO,MAAM,aAAa,8EAAkB,CAAA;AAE5C,eAAO,MAAM,qBAAqB;;;;;iBAKhC,CAAA;AAEF,MAAM,MAAM,yBAAyB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAA;AAE7E,eAAO,MAAM,wBAAwB;;;;;iBAKnC,CAAA;AAEF,MAAM,MAAM,4BAA4B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAEnF,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;GAKxC,CAAA;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;GAKxC,CAAA;AAEH,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA;AAC/F,MAAM,MAAM,kCAAkC,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ import z from 'zod';
2
+ export declare const TransferPairZod: z.ZodTuple<[z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Address, string>>, z.ZodPipe<z.ZodString, z.ZodTransform<import("@xylabs/sdk-js").Address, string>>], null>;
3
+ //# sourceMappingURL=TransferPair.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TransferPair.d.ts","sourceRoot":"","sources":["../../../src/zod/TransferPair.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,KAAK,CAAA;AAEnB,eAAO,MAAM,eAAe,wLAE1B,CAAA"}
@@ -0,0 +1,15 @@
1
+ export * from './ArrayBuffer.ts';
2
+ export * from './BlockBoundWitness.ts';
3
+ export * from './BoundWitness.ts';
4
+ export * from './Chain.ts';
5
+ export * from './HydratedBlock.ts';
6
+ export * from './HydratedTransaction.ts';
7
+ export * from './Permission.ts';
8
+ export * from './RewardsRangeOptions.ts';
9
+ export * from './Sequence.ts';
10
+ export * from './Stake.ts';
11
+ export * from './TimeDomain.ts';
12
+ export * from './TransactionBoundWitness.ts';
13
+ export * from './TransactionFees.ts';
14
+ export * from './TransferPair.ts';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/zod/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA;AAChC,cAAc,wBAAwB,CAAA;AACtC,cAAc,mBAAmB,CAAA;AACjC,cAAc,YAAY,CAAA;AAC1B,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA;AACxC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,0BAA0B,CAAA;AACxC,cAAc,eAAe,CAAA;AAC7B,cAAc,YAAY,CAAA;AAC1B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,8BAA8B,CAAA;AAC5C,cAAc,sBAAsB,CAAA;AACpC,cAAc,mBAAmB,CAAA"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/xl1-protocol-sdk",
4
- "version": "1.16.21",
4
+ "version": "1.16.23",
5
5
  "description": "XYO Layer One SDK Protocol",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -39,8 +39,8 @@
39
39
  "!**/*.test.*"
40
40
  ],
41
41
  "dependencies": {
42
- "@xylabs/sdk-js": "~5.0.37",
43
- "@xylabs/telemetry": "~5.0.37",
42
+ "@xylabs/sdk-js": "~5.0.39",
43
+ "@xylabs/telemetry": "~5.0.39",
44
44
  "@xyo-network/account": "~5.1.24",
45
45
  "@xyo-network/account-model": "~5.1.24",
46
46
  "@xyo-network/archivist-memory": "~5.1.24",
@@ -51,7 +51,7 @@
51
51
  "@xyo-network/payload-model": "~5.1.24",
52
52
  "@xyo-network/wallet": "~5.1.24",
53
53
  "@xyo-network/wallet-model": "~5.1.24",
54
- "@xyo-network/xl1-protocol": "~1.13.11",
54
+ "@xyo-network/xl1-protocol": "~1.13.13",
55
55
  "async-mutex": "~0.5.0",
56
56
  "ethers": "~6.15.0",
57
57
  "lru-cache": "^11.2.2",
@@ -2,12 +2,12 @@ import type { ArchivistInstance, WriteArchivist } from '@xyo-network/archivist-m
2
2
  import type { WalletInstance } from '@xyo-network/wallet-model'
3
3
 
4
4
  import type {
5
- AccountBalanceService, BlockProducerService, BlockRewardService,
5
+ BlockProducerService, BlockRewardService,
6
6
  ChainStaker, ChainStakeViewer, ElectionService, EventingChainBlockNumberIteratorService,
7
7
  PendingTransactionsService,
8
8
  StakeIntentService,
9
9
  } from './services/index.ts'
10
- import type { ChainContractViewer } from './viewers/index.ts'
10
+ import type { AccountBalanceViewer, ChainContractViewer } from './viewers/index.ts'
11
11
 
12
12
  export interface ChainServiceCollectionV2 {
13
13
 
@@ -18,7 +18,7 @@ export interface ChainServiceCollectionV2 {
18
18
  /**
19
19
  * Services for working with account balances
20
20
  */
21
- balance: AccountBalanceService
21
+ balance: AccountBalanceViewer
22
22
  /**
23
23
  * The archivist which the chain data is stored in
24
24
  */
@@ -4,4 +4,3 @@ export * from './hashFromBlockNumber.ts'
4
4
  export * from './model.ts'
5
5
  export * from './payloads/index.ts'
6
6
  export * from './toStepIdentityString.ts'
7
- export * from './transfers/index.ts'
@@ -1,3 +1,4 @@
1
+ import { AddressZod } from '@xylabs/sdk-js'
1
2
  import { globalRegistry } from 'zod'
2
3
  import * as z from 'zod'
3
4
 
@@ -9,6 +10,13 @@ export const ChainConfigZod = z.object({
9
10
  title: 'chain.id',
10
11
  type: 'string',
11
12
  }),
13
+ genesisRewardAddress: AddressZod.optional()
14
+ .register(globalRegistry, {
15
+ description:
16
+ 'Address to send the initial genesis rewards to, if a new chain is being created.',
17
+ title: 'chain.genesisRewardAddress',
18
+ type: 'Address',
19
+ }),
12
20
  })
13
21
 
14
22
  export type ChainConfig = z.infer<typeof ChainConfigZod>
@@ -16,6 +16,12 @@ export const ProducerConfigZod = z.object({
16
16
  type: 'array',
17
17
  })),
18
18
 
19
+ apiEndpoint: z.string().optional().register(globalRegistry, {
20
+ description: 'Endpoint of the API to use for chain data',
21
+ title: 'producer.apiEndpoint',
22
+ type: 'string',
23
+ }),
24
+
19
25
  disableIntentRedeclaration: z.boolean().optional().register(globalRegistry, {
20
26
  description: 'Should the producer skip redeclaring their intent to continue producing blocks',
21
27
  title: 'producer.disableIntentRedeclaration',
package/src/index.ts CHANGED
@@ -16,6 +16,8 @@ export * from './SignedBigInt.ts'
16
16
  export * from './simple/index.ts'
17
17
  export * from './time/index.ts'
18
18
  export * from './transaction/index.ts'
19
+ export * from './utils/index.ts'
19
20
  export * from './validation/index.ts'
20
21
  export * from './viewers/index.ts'
21
22
  export * from './wallet/index.ts'
23
+ export * from './zod/index.ts'
@@ -2,6 +2,7 @@ import type { Payload } from '@xyo-network/payload-model'
2
2
  import type { Semaphore } from 'async-mutex'
3
3
 
4
4
  import type { MapTypeRead, MapTypeWrite } from '../map/index.ts'
5
+ import type { SchemasStepSummary } from '../payloads/index.ts'
5
6
  import type { BalancesStepSummary, TransfersStepSummary } from '../payloads/summary/index.ts'
6
7
  import type { BaseContext, ChainContextRead } from './index.ts'
7
8
 
@@ -25,3 +26,7 @@ export interface BalanceStepSummaryContext extends ChainSummaryContext<BalancesS
25
26
  export interface TransfersStepSummaryContextRead extends ChainSummaryContextRead<TransfersStepSummary> {}
26
27
 
27
28
  export interface TransfersStepSummaryContext extends ChainSummaryContext<TransfersStepSummary> {}
29
+
30
+ export interface SchemasStepSummaryContextRead extends ChainSummaryContextRead<SchemasStepSummary> {}
31
+
32
+ export interface SchemasStepSummaryContext extends ChainSummaryContext<SchemasStepSummary> {}
@@ -1,4 +1,5 @@
1
1
  export * from './AddressPairPayload.ts'
2
2
  export * from './netBalancesForPayloads.ts'
3
+ export * from './netSchemasForPayloads.ts'
3
4
  export * from './netTransfersForPayloads.ts'
4
5
  export * from './summary/index.ts'
@@ -0,0 +1,22 @@
1
+ import {
2
+ type Address, type Hex, hexToBigInt, toAddress,
3
+ } from '@xylabs/sdk-js'
4
+ import { span } from '@xylabs/telemetry'
5
+ import type { Payload } from '@xyo-network/payload-model'
6
+ import { isTransfer } from '@xyo-network/xl1-protocol'
7
+
8
+ export const netSchemasForPayloads = (payloads: Payload[]) => {
9
+ return span('netSchemasForPayloads', () => {
10
+ const balances: Record<Address, bigint> = {}
11
+ for (const payload of payloads) {
12
+ if (isTransfer(payload)) {
13
+ const { from } = payload
14
+ for (let [address, amount] of Object.entries(payload.transfers) as [Address, Hex][]) {
15
+ balances[toAddress(address)] = (balances[toAddress(address)] ?? 0n) + hexToBigInt(amount)
16
+ balances[toAddress(from)] = (balances[toAddress(from)] ?? 0n) - hexToBigInt(amount)
17
+ }
18
+ }
19
+ }
20
+ return balances
21
+ })
22
+ }
@@ -0,0 +1,26 @@
1
+ import { AsObjectFactory } from '@xylabs/sdk-js'
2
+ import type { Schema, WithStorageMeta } from '@xyo-network/payload-model'
3
+ import { isPayloadOfSchemaType, isStorageMeta } from '@xyo-network/payload-model'
4
+
5
+ import type { StepSummary } from './StepSummary.ts'
6
+
7
+ export const SchemasStepSummarySchema: Schema = 'network.xyo.step.summary.schemas'
8
+ export type SchemasStepSummarySchema = typeof SchemasStepSummarySchema
9
+
10
+ export type SchemasStepSummary = StepSummary<{
11
+ schemas: Record<Schema, number>
12
+ }, SchemasStepSummarySchema>
13
+
14
+ /**
15
+ * Identity function for determining if an object is an SchemasStepSummary
16
+ */
17
+ export const isSchemasStepSummary = isPayloadOfSchemaType<SchemasStepSummary>(SchemasStepSummarySchema)
18
+ export const asSchemasStepSummary = AsObjectFactory.create<SchemasStepSummary>(isSchemasStepSummary)
19
+
20
+ /**
21
+ * Identity function for determining if an object is an SchemasStepSummary with Storage Meta
22
+ */
23
+ export const isSchemasStepSummaryWithStorageMeta = (value: unknown): value is WithStorageMeta<SchemasStepSummary> => {
24
+ return isSchemasStepSummary(value) && isStorageMeta(value)
25
+ }
26
+ export const asSchemasStepSummaryWithStorageMeta = AsObjectFactory.create<WithStorageMeta<SchemasStepSummary>>(isSchemasStepSummaryWithStorageMeta)
@@ -1,3 +1,4 @@
1
1
  export * from './BalancesStepSummary.ts'
2
+ export * from './SchemasStepSummary.ts'
2
3
  export * from './StepSummary.ts'
3
4
  export * from './TransfersSummary.ts'
@@ -13,7 +13,7 @@ import { balancesStepSummaryFromRange } from './balancesStepSummaryFromRange.ts'
13
13
  export async function balancesSummary(
14
14
  context: BalanceStepSummaryContext,
15
15
  ): Promise<Partial<Record<Address, bigint>>> {
16
- return await spanRootAsync('balanceSummary', async () => {
16
+ return await spanRootAsync('balancesSummary', async () => {
17
17
  const [headHash] = await context.head()
18
18
  const headResult = await context.store.chainMap.get(headHash)
19
19
  const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`, { required: true })
@@ -1,2 +1,3 @@
1
1
  export * from './balances/index.ts'
2
- export * from './balances/index.ts'
2
+ export * from './schemas/index.ts'
3
+ export * from './transfers/index.ts'
@@ -0,0 +1,2 @@
1
+ export * from './schemasStepSummaryFromRange.ts'
2
+ export * from './schemasSummary.ts'
@@ -0,0 +1,83 @@
1
+ /* eslint-disable max-statements */
2
+ import { assertEx } from '@xylabs/sdk-js'
3
+ import { isBoundWitnessWithStorageMeta } from '@xyo-network/boundwitness-model'
4
+ import { PayloadBuilder } from '@xyo-network/payload-builder'
5
+ import type { Schema, WithStorageMeta } from '@xyo-network/payload-model'
6
+ import { isAnyPayload } from '@xyo-network/payload-model'
7
+ import type { XL1BlockRange } from '@xyo-network/xl1-protocol'
8
+ import { StepSizes } from '@xyo-network/xl1-protocol'
9
+
10
+ import {
11
+ deepCalculateFramesFromRange, hashFromBlockNumber,
12
+ hydrateBlock,
13
+ } from '../../../block/index.ts'
14
+ import type { SchemasStepSummaryContext } from '../../../model/index.ts'
15
+ import type { SchemasStepSummary } from '../../../payloads/index.ts'
16
+ import { SchemasStepSummarySchema } from '../../../payloads/index.ts'
17
+
18
+ export async function schemasStepSummaryFromRange(
19
+ context: SchemasStepSummaryContext,
20
+ range: XL1BlockRange,
21
+ ): Promise<WithStorageMeta<SchemasStepSummary>> {
22
+ // console.log(`balanceStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)
23
+ const frameHeadHash = await hashFromBlockNumber(context, range[1])
24
+ const frameSize = range[1] - range[0] + 1
25
+ const [headHash] = await context.head()
26
+
27
+ let result: SchemasStepSummary | undefined = undefined
28
+
29
+ if (frameSize === 1) {
30
+ const hash = await hashFromBlockNumber(context, range[0])
31
+ const [block, payloads] = await hydrateBlock(context.store, hash)
32
+ const boundWitnesses = [block, ...payloads.filter(isBoundWitnessWithStorageMeta)]
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 = {
41
+ schema: SchemasStepSummarySchema, hash: headHash, 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 context.summaryMap.get(`${frameHeadHash}|${frameSize}`)
49
+ if (isAnyPayload(summaryResult)) {
50
+ result = summaryResult as WithStorageMeta<SchemasStepSummary>
51
+ } else {
52
+ // We do not have it, so lets build it
53
+ await context.stepSemaphores[step].acquire()
54
+ try {
55
+ const subRanges = deepCalculateFramesFromRange(range, step - 1)
56
+ const promises = subRanges.map(subRange => schemasStepSummaryFromRange(
57
+ context,
58
+ subRange,
59
+ ))
60
+ const subResults = await Promise.all(promises)
61
+
62
+ // add them all up
63
+ const schemas: Record<Schema, number> = {}
64
+ for (const subResult of subResults) {
65
+ for (const [schema, count] of Object.entries(subResult.schemas)) {
66
+ schemas[schema] = (schemas[schema] ?? 0) + count
67
+ }
68
+ }
69
+
70
+ result = {
71
+ schema: SchemasStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, schemas: schemas,
72
+ }
73
+
74
+ await context.summaryMap.set(`${frameHeadHash}|${frameSize}`, result)
75
+ } finally {
76
+ context.stepSemaphores[step].release()
77
+ }
78
+ }
79
+ }
80
+ // console.log(`balanceStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)
81
+ const finalResult = await PayloadBuilder.addStorageMeta(result)
82
+ return finalResult
83
+ }
@@ -0,0 +1,33 @@
1
+ import { isDefined } from '@xylabs/sdk-js'
2
+ import { spanRootAsync } from '@xylabs/telemetry'
3
+ import type { Schema } from '@xyo-network/payload-model'
4
+ import {
5
+ asBlockBoundWitnessWithStorageMeta, asXL1BlockNumber, asXL1BlockRange,
6
+ } from '@xyo-network/xl1-protocol'
7
+
8
+ import { deepCalculateFramesFromRange } from '../../../block/index.ts'
9
+ import type { SchemasStepSummaryContext } from '../../../model/index.ts'
10
+ import { schemasStepSummaryFromRange } from './schemasStepSummaryFromRange.ts'
11
+
12
+ export async function schemasSummary(
13
+ context: SchemasStepSummaryContext,
14
+ ): Promise<Partial<Record<Schema, number>>> {
15
+ return await spanRootAsync('schemasSummary', async () => {
16
+ const [headHash] = await context.head()
17
+ const headResult = await context.store.chainMap.get(headHash)
18
+ const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`, { required: true })
19
+ const rangeStart = asXL1BlockNumber(isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0)
20
+ const ranges = deepCalculateFramesFromRange(asXL1BlockRange(
21
+ [rangeStart, headBoundWitness.block],
22
+ { name: 'schemasSummary' },
23
+ ))
24
+ const summaries = await Promise.all(ranges.map(range => schemasStepSummaryFromRange(context, range)))
25
+ const schemas: Partial<Record<Schema, number>> = {}
26
+ for (let summary of summaries) {
27
+ for (const [schema, count] of Object.entries(summary.schemas)) {
28
+ schemas[schema] = (schemas[schema] ?? 0) + count
29
+ }
30
+ }
31
+ return schemas
32
+ })
33
+ }
@@ -8,8 +8,7 @@ import type { XL1BlockRange } from '@xyo-network/xl1-protocol'
8
8
  import { StepSizes } from '@xyo-network/xl1-protocol'
9
9
 
10
10
  import {
11
- deepCalculateFramesFromRange,
12
- hashFromBlockNumber, hydrateBlock,
11
+ deepCalculateFramesFromRange, hashFromBlockNumber, hydrateBlock,
13
12
  } from '../../../block/index.ts'
14
13
  import type { TransfersStepSummaryContext } from '../../../model/index.ts'
15
14
  import type { TransfersStepSummary } from '../../../payloads/index.ts'
@@ -17,12 +16,13 @@ import { netTransfersForPayloads, TransfersStepSummarySchema } from '../../../pa
17
16
  import {
18
17
  parseSignedBigInt, type SignedBigInt, toSignedBigInt,
19
18
  } from '../../../SignedBigInt.ts'
19
+ import { transfersSummaryKey } from './transfersSummary.ts'
20
20
 
21
21
  export async function transfersStepSummaryFromRange(
22
22
  context: TransfersStepSummaryContext,
23
23
  range: XL1BlockRange,
24
24
  ): Promise<WithStorageMeta<TransfersStepSummary>> {
25
- // console.log(`transfersStepSummaryFromRange: head=${head}, range=${range[0]}-${range[1]}`)
25
+ // console.log(`transfersStepSummaryFromRange: head=${context.head}, range=${range[0]}-${range[1]}`)
26
26
  const frameHeadHash = await hashFromBlockNumber(context, range[1])
27
27
  const frameSize = range[1] - range[0] + 1
28
28
  const [headHash] = await context.head()
@@ -47,7 +47,9 @@ export async function transfersStepSummaryFromRange(
47
47
  const step = (StepSizes as any).indexOf(frameSize)
48
48
  assertEx(step !== -1, () => `Invalid step size: ${frameSize}. Must be one of ${StepSizes.join(', ')}`)
49
49
 
50
- const summaryResult = await context.summaryMap.get(`${frameHeadHash}|${frameSize}`)
50
+ const key = transfersSummaryKey(frameHeadHash, frameSize)
51
+
52
+ const summaryResult = await context.summaryMap.get(key)
51
53
  if (isAnyPayload(summaryResult)) {
52
54
  result = summaryResult as WithStorageMeta<TransfersStepSummary>
53
55
  } else {
@@ -84,13 +86,13 @@ export async function transfersStepSummaryFromRange(
84
86
  schema: TransfersStepSummarySchema, hash: frameHeadHash, stepSize: frameSize, transfers,
85
87
  }
86
88
 
87
- await context.summaryMap.set(`${frameHeadHash}|${frameSize}`, result)
89
+ await context.summaryMap.set(key, result)
88
90
  } finally {
89
91
  context.stepSemaphores[step].release()
90
92
  }
91
93
  }
92
94
  }
93
- // console.log(`transfersStepSummaryFromRange-result: head=${head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)
95
+ // console.log(`transfersStepSummaryFromRange-result: head=${context.head}, range=${range[0]}-${range[1]}: ${toSafeJsonString(result, 10)}`)
94
96
  const finalResult = await PayloadBuilder.addStorageMeta(result)
95
97
  return finalResult
96
98
  }
@@ -1,4 +1,4 @@
1
- import type { Address } from '@xylabs/sdk-js'
1
+ import type { Address, Hash } from '@xylabs/sdk-js'
2
2
  import { asAddress, isDefined } from '@xylabs/sdk-js'
3
3
  import { spanRootAsync } from '@xylabs/telemetry'
4
4
  import {
@@ -12,18 +12,18 @@ import { transfersStepSummaryFromRange } from './transfersStepSummaryFromRange.t
12
12
 
13
13
  // the summary of amount of rewards claimed from the step reward pool by addresses
14
14
  export async function transfersSummary(
15
- context: TransfersStepSummaryContext,
15
+ transferContext: TransfersStepSummaryContext,
16
16
  ): Promise<Partial<Record<Address, Partial<Record<Address, bigint>>>>> {
17
17
  return await spanRootAsync('transferSummary', async () => {
18
- const [headHash] = await context.head()
19
- const headResult = await context.store.chainMap.get(headHash)
20
- const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${headHash}`, { required: true })
21
- const rangeStart = asXL1BlockNumber(isDefined(context.windowSize) ? Math.max(headBoundWitness.block - context.windowSize + 1, 0) : 0)
18
+ const [headHash] = await transferContext.head()
19
+ const headResult = await transferContext.store.chainMap.get(headHash)
20
+ const headBoundWitness = asBlockBoundWitnessWithStorageMeta(headResult, () => `Head block not found for hash: ${transferContext.head}`, { required: true })
21
+ const rangeStart = asXL1BlockNumber(isDefined(transferContext.windowSize) ? Math.max(headBoundWitness.block - transferContext.windowSize + 1, 0) : 0)
22
22
  const ranges = deepCalculateFramesFromRange(asXL1BlockRange(
23
23
  [rangeStart, headBoundWitness.block],
24
24
  { name: 'transfersSummary' },
25
25
  ))
26
- const summaries = await Promise.all(ranges.map(range => transfersStepSummaryFromRange(context, range)))
26
+ const summaries = await Promise.all(ranges.map(range => transfersStepSummaryFromRange(transferContext, range)))
27
27
  const transfers: Partial<Record<Address, Partial<Record<Address, bigint>>>> = {}
28
28
  for (let summary of summaries) {
29
29
  for (const [from, toMap] of Object.entries(summary.transfers)) {
@@ -38,3 +38,7 @@ export async function transfersSummary(
38
38
  return transfers
39
39
  })
40
40
  }
41
+
42
+ export function transfersSummaryKey(frameHeadHash: Hash, frameSize: number) {
43
+ return `${frameHeadHash}|${frameSize}`
44
+ }
@@ -1,11 +1,30 @@
1
1
  import { type Logger } from '@xylabs/sdk-js'
2
2
 
3
- export async function timeBudget<TResult>(name: string, logger: Logger | undefined, func: () => Promise<TResult>, budget: number): Promise<TResult> {
3
+ export async function timeBudget<TResult>(
4
+ name: string,
5
+ logger: Logger | undefined,
6
+ func: () => Promise<TResult>,
7
+ budget: number,
8
+ status = false,
9
+ ): Promise<TResult> {
4
10
  const start = Date.now()
11
+ const timer = status
12
+ ? setInterval(() => {
13
+ const duration = Date.now() - start
14
+ if ((budget > 0) && (duration > budget)) {
15
+ logger?.warn(`Function [${name}] execution is exceeding budget: ${duration}ms > ${budget}ms`)
16
+ }
17
+ }, Math.max(100, budget))
18
+ : undefined
19
+
5
20
  const result = await func()
6
21
  const duration = Date.now() - start
7
- if ((budget > 0) && (duration > budget)) {
22
+
23
+ if (!timer && (budget > 0) && (duration > budget)) {
8
24
  logger?.warn(`Function [${name}] execution exceeded budget: ${duration}ms > ${budget}ms`)
9
25
  }
26
+ if (timer) {
27
+ clearInterval(timer)
28
+ }
10
29
  return result
11
30
  }
@@ -0,0 +1,9 @@
1
+ import type { Hash, Promisable } from '@xylabs/sdk-js'
2
+ import type { Schema } from '@xyo-network/payload-model'
3
+
4
+ export interface SchemasProvider {
5
+ schema(head: Hash, schema: Schema): Promisable<number>
6
+ schemas(head: Hash, schemas: Schema[]): Promisable<Partial<Record<Schema, number>>>
7
+ }
8
+
9
+ export interface SchemasService extends SchemasProvider {}
@@ -1,4 +1,3 @@
1
- export * from './AccountBalanceService.ts'
2
1
  export * from './AccountTransfersService.ts'
3
2
  export * from './BlockProducerService.ts'
4
3
  export * from './BlockRewardService.ts'
@@ -8,4 +7,5 @@ export * from './ChainIterator/index.ts'
8
7
  export * from './Election.ts'
9
8
  export * from './NetworkStakeService.ts'
10
9
  export * from './PendingTransactionsService.ts'
10
+ export * from './SchemasService.ts'
11
11
  export * from './StakeIntentService/index.ts'
@@ -14,10 +14,10 @@ import {
14
14
  TransferSchema,
15
15
  } from '@xyo-network/xl1-protocol'
16
16
 
17
- import { deepCalculateFramesFromRange, transfersStepSummaryFromRange } from '../../block/index.ts'
17
+ import { deepCalculateFramesFromRange } from '../../block/index.ts'
18
18
  import type { BalanceStepSummaryContext, TransfersStepSummaryContext } from '../../model/index.ts'
19
19
  import type { TransfersStepSummary } from '../../payloads/index.ts'
20
- import { balancesSummary } from '../../primitives/index.ts'
20
+ import { balancesSummary, transfersStepSummaryFromRange } from '../../primitives/index.ts'
21
21
  import type {
22
22
  AccountBalanceHistoryItem, AccountBalanceViewer, BlockViewer,
23
23
  } from '../../viewers/index.ts'
@@ -34,7 +34,7 @@ export class SimpleAccountBalanceViewer implements AccountBalanceViewer {
34
34
  }
35
35
 
36
36
  async accountBalance(address: Address, headOrRange?: XL1BlockRange | Hash): Promise<AttoXL1> {
37
- const balances = await this.accountBalances([address], headOrRange)
37
+ const balances = await this.accountsBalances([address], headOrRange)
38
38
  return balances[address] ?? AttoXL1(0n)
39
39
  }
40
40
 
@@ -66,7 +66,7 @@ export class SimpleAccountBalanceViewer implements AccountBalanceViewer {
66
66
  return result
67
67
  }
68
68
 
69
- async accountBalances(address: Address[], _headOrRange?: XL1BlockRange | Hash): Promise<Partial<Record<Address, AttoXL1>>> {
69
+ async accountsBalances(address: Address[], _headOrRange?: XL1BlockRange | Hash): Promise<Partial<Record<Address, AttoXL1>>> {
70
70
  return await spanRootAsync('balances', async () => {
71
71
  const summary = await balancesSummary(
72
72
  this.context,
@@ -80,7 +80,7 @@ export class SimpleAccountBalanceViewer implements AccountBalanceViewer {
80
80
  })
81
81
  }
82
82
 
83
- accountBalancesHistories(_addresses: Address[], _rangeOrHash?: XL1BlockRange | Hash): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>> {
83
+ accountsBalancesHistory(_addresses: Address[], _rangeOrHash?: XL1BlockRange | Hash): Promise<Partial<Record<Address, AccountBalanceHistoryItem[]>>> {
84
84
  throw new Error('Method not implemented.')
85
85
  }
86
86
 
@@ -36,7 +36,7 @@ export class SimpleChainStakeViewer extends AbstractCreatable<SimpleChainStakePa
36
36
  }
37
37
 
38
38
  get rewardsContract(): Address {
39
- return toAddress('0x000000000000000000000000000000')
39
+ return toAddress(toAddress(1n))
40
40
  }
41
41
 
42
42
  get stakeEvents() {
@@ -0,0 +1 @@
1
+ export * from './isZodError.ts'
@@ -0,0 +1,9 @@
1
+ import * as z from 'zod'
2
+
3
+ export const isZodError = (error: unknown): error is z.ZodError => {
4
+ return error instanceof z.ZodError
5
+ }
6
+
7
+ export const prettifyZodError = (error: z.ZodError): string => {
8
+ return z.prettifyError(error)
9
+ }
@@ -1,7 +1,7 @@
1
1
  import type { Promisable } from '@xylabs/sdk-js'
2
2
  import type { ChainId, HydratedBlock } from '@xyo-network/xl1-protocol'
3
3
 
4
- import type { AccountBalanceService } from '../../services/index.ts'
4
+ import type { AccountBalanceViewer } from '../../viewers/index.ts'
5
5
  import type { HydratedBlockStateValidationError } from './error.ts'
6
6
 
7
7
  /**
@@ -14,5 +14,5 @@ import type { HydratedBlockStateValidationError } from './error.ts'
14
14
  export type HydratedBlockStateValidationFunction = (
15
15
  hydratedBlock: HydratedBlock,
16
16
  chainId: ChainId,
17
- services: { accountBalance: AccountBalanceService },
17
+ services: { accountBalance: AccountBalanceViewer },
18
18
  ) => Promisable<HydratedBlockStateValidationError[]>