@xyo-network/chain-validation 1.18.0 → 1.18.2

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 (75) hide show
  1. package/dist/neutral/block/validateBlock.d.ts +2 -3
  2. package/dist/neutral/block/validateBlock.d.ts.map +1 -1
  3. package/dist/neutral/block/validators/AllowedPayloadSchemas.d.ts +1 -1
  4. package/dist/neutral/block/validators/AllowedPayloadSchemas.d.ts.map +1 -1
  5. package/dist/neutral/block/validators/Fields.d.ts +1 -1
  6. package/dist/neutral/block/validators/Fields.d.ts.map +1 -1
  7. package/dist/neutral/block/validators/JsonSchema.d.ts +1 -1
  8. package/dist/neutral/block/validators/JsonSchema.d.ts.map +1 -1
  9. package/dist/neutral/block/validators/PreviousHash.d.ts +1 -1
  10. package/dist/neutral/block/validators/PreviousHash.d.ts.map +1 -1
  11. package/dist/neutral/elevatedPayload/lib/isElevatedFromBlock.d.ts +1 -1
  12. package/dist/neutral/elevatedPayload/lib/isElevatedFromBlock.d.ts.map +1 -1
  13. package/dist/neutral/elevatedPayload/lib/validateElevatedFromBlock.d.ts +1 -1
  14. package/dist/neutral/elevatedPayload/lib/validateElevatedFromBlock.d.ts.map +1 -1
  15. package/dist/neutral/elevatedPayload/lib/validateElevatedFromTransaction.d.ts +1 -1
  16. package/dist/neutral/elevatedPayload/lib/validateElevatedFromTransaction.d.ts.map +1 -1
  17. package/dist/neutral/elevatedPayload/lib/validateIncludedInBlock.d.ts +1 -1
  18. package/dist/neutral/elevatedPayload/lib/validateIncludedInBlock.d.ts.map +1 -1
  19. package/dist/neutral/elevatedPayload/lib/validateTransactionInBlock.d.ts +1 -1
  20. package/dist/neutral/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -1
  21. package/dist/neutral/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts +1 -1
  22. package/dist/neutral/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts.map +1 -1
  23. package/dist/neutral/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.d.ts +1 -1
  24. package/dist/neutral/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.d.ts.map +1 -1
  25. package/dist/neutral/elevatedPayload/payloads/validateBridgeIntentInBlock.d.ts +1 -1
  26. package/dist/neutral/elevatedPayload/payloads/validateBridgeIntentInBlock.d.ts.map +1 -1
  27. package/dist/neutral/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.d.ts +1 -1
  28. package/dist/neutral/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.d.ts.map +1 -1
  29. package/dist/neutral/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts +1 -1
  30. package/dist/neutral/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts.map +1 -1
  31. package/dist/neutral/elevatedPayload/payloads/validateHashInBlock.d.ts +1 -1
  32. package/dist/neutral/elevatedPayload/payloads/validateHashInBlock.d.ts.map +1 -1
  33. package/dist/neutral/elevatedPayload/payloads/validateSchemaInBlock.d.ts +1 -1
  34. package/dist/neutral/elevatedPayload/payloads/validateSchemaInBlock.d.ts.map +1 -1
  35. package/dist/neutral/elevatedPayload/payloads/validateTimeInBlock.d.ts +1 -1
  36. package/dist/neutral/elevatedPayload/payloads/validateTimeInBlock.d.ts.map +1 -1
  37. package/dist/neutral/elevatedPayload/payloads/validateTransferInBlock.d.ts +1 -1
  38. package/dist/neutral/elevatedPayload/payloads/validateTransferInBlock.d.ts.map +1 -1
  39. package/dist/neutral/elevatedPayload/validatePayloadInBlock.d.ts +1 -1
  40. package/dist/neutral/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
  41. package/dist/neutral/hydratedBlock/validateHydratedBlock.d.ts +4 -4
  42. package/dist/neutral/hydratedBlock/validateHydratedBlock.d.ts.map +1 -1
  43. package/dist/neutral/hydratedBlock/validators/Payloads.d.ts +1 -1
  44. package/dist/neutral/hydratedBlock/validators/Payloads.d.ts.map +1 -1
  45. package/dist/neutral/hydratedBlockState/validateHydratedBlockState.d.ts +1 -1
  46. package/dist/neutral/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
  47. package/dist/neutral/hydratedBlockState/validators/RequiredBalance.d.ts +1 -1
  48. package/dist/neutral/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
  49. package/dist/neutral/index.mjs +44 -39
  50. package/dist/neutral/index.mjs.map +1 -1
  51. package/package.json +18 -21
  52. package/src/block/validateBlock.ts +4 -4
  53. package/src/block/validators/AllowedPayloadSchemas.ts +5 -3
  54. package/src/block/validators/Fields.ts +4 -3
  55. package/src/block/validators/JsonSchema.ts +2 -4
  56. package/src/block/validators/PreviousHash.ts +2 -3
  57. package/src/elevatedPayload/lib/isElevatedFromBlock.ts +1 -1
  58. package/src/elevatedPayload/lib/validateElevatedFromBlock.ts +2 -3
  59. package/src/elevatedPayload/lib/validateElevatedFromTransaction.ts +2 -3
  60. package/src/elevatedPayload/lib/validateIncludedInBlock.ts +1 -1
  61. package/src/elevatedPayload/lib/validateTransactionInBlock.ts +4 -3
  62. package/src/elevatedPayload/lib/validateTypedPayloadInBlock.ts +1 -1
  63. package/src/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts +2 -2
  64. package/src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts +2 -2
  65. package/src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts +2 -2
  66. package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +2 -2
  67. package/src/elevatedPayload/payloads/validateHashInBlock.ts +2 -2
  68. package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +2 -2
  69. package/src/elevatedPayload/payloads/validateTimeInBlock.ts +2 -2
  70. package/src/elevatedPayload/payloads/validateTransferInBlock.ts +2 -2
  71. package/src/elevatedPayload/validatePayloadInBlock.ts +2 -2
  72. package/src/hydratedBlock/validateHydratedBlock.ts +12 -7
  73. package/src/hydratedBlock/validators/Payloads.ts +2 -2
  74. package/src/hydratedBlockState/validateHydratedBlockState.ts +9 -7
  75. package/src/hydratedBlockState/validators/RequiredBalance.ts +13 -9
@@ -1,21 +1,26 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
1
2
  import { ZERO_HASH } from '@xylabs/sdk-js'
2
- import type { ChainId, HydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'
3
- import type { BlockValidatorFunction, HydratedBlockValidationFunction } from '@xyo-network/xl1-protocol-sdk'
4
- import { HydratedBlockValidationError } from '@xyo-network/xl1-protocol-sdk'
5
- import { BoundWitnessReferencesValidator } from '@xyo-network/xl1-validation'
3
+ import type {
4
+ BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,
5
+ } from '@xyo-network/xl1-sdk'
6
+ import { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'
6
7
 
7
8
  import { validateBlock } from '../block/index.ts'
8
9
  import { PayloadsInBlockValidator } from './validators/index.ts'
9
10
 
10
11
  export const validateHydratedBlock = async (
11
12
  hydratedBlock: HydratedBlockWithHashMeta,
12
- chainId?: ChainId,
13
+ chainIdAtBlockNumber?: (blockNumber: number) => Promisable<ChainId>,
13
14
  additionalValidators: HydratedBlockValidationFunction[] = [],
14
15
  additionalBlockValidators: BlockValidatorFunction[] = [],
15
16
  ) => {
16
17
  const errors: HydratedBlockValidationError[] = []
17
18
  try {
18
- const validateBlockErrors = await validateBlock(hydratedBlock[0], chainId, additionalBlockValidators)
19
+ const validateBlockErrors = await validateBlock(
20
+ hydratedBlock[0],
21
+ chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,
22
+ additionalBlockValidators,
23
+ )
19
24
  for (const validateBlockError of validateBlockErrors) {
20
25
  errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))
21
26
  }
@@ -27,7 +32,7 @@ export const validateHydratedBlock = async (
27
32
  PayloadsInBlockValidator,
28
33
  ...additionalValidators,
29
34
  ]
30
- errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat())
35
+ errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainIdAtBlockNumber)))).flat())
31
36
  } catch (ex) {
32
37
  errors.push(new HydratedBlockValidationError(
33
38
  hydratedBlock?.[0]?._hash ?? ZERO_HASH,
@@ -1,7 +1,7 @@
1
1
  import { type Hash, ZERO_HASH } from '@xylabs/sdk-js'
2
2
  import type { Payload, WithHashMeta } from '@xyo-network/payload-model'
3
- import type { HydratedBlockValidationFunction } from '@xyo-network/xl1-protocol-sdk'
4
- import { HydratedBlockValidationError } from '@xyo-network/xl1-protocol-sdk'
3
+ import type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'
4
+ import { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'
5
5
 
6
6
  import { validatePayloadInBlock } from '../../elevatedPayload/index.ts'
7
7
 
@@ -1,20 +1,22 @@
1
1
  import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'
2
- import type { HydratedBlockStateValidationFunction } from '@xyo-network/xl1-protocol-sdk'
3
- import { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol-sdk'
2
+ import type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'
3
+ import { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'
4
4
 
5
5
  import { validateHydratedBlock } from '../hydratedBlock/index.ts'
6
6
  import { RequiredBalanceBlockStateValidator } from './validators/index.ts'
7
7
 
8
8
  export const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (
9
9
  hydratedBlock,
10
- chainId,
10
+ chainIdAtBlockNumber,
11
11
  services,
12
12
  additionalValidators = [],
13
13
  ) => {
14
14
  return await spanRootAsync('validateHydratedBlockState', async () => {
15
15
  const errors: HydratedBlockStateValidationError[] = []
16
+ let chainId: ChainId | undefined
16
17
  try {
17
- const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId)
18
+ chainId = await chainIdAtBlockNumber(hydratedBlock[0].block)
19
+ const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainIdAtBlockNumber)
18
20
  for (const validateHydratedBlockError of validateHydratedBlockErrors) {
19
21
  errors.push(new HydratedBlockStateValidationError(
20
22
  hydratedBlock[0]._hash,
@@ -28,16 +30,16 @@ export const validateHydratedBlockState: HydratedBlockStateValidationFunction =
28
30
  RequiredBalanceBlockStateValidator,
29
31
  ...additionalValidators,
30
32
  ]
31
- errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())
33
+ errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainIdAtBlockNumber, services)))).flat())
32
34
  } catch (ex) {
33
35
  errors.push(new HydratedBlockStateValidationError(
34
36
  hydratedBlock?.[0]?._hash ?? ZERO_HASH,
35
- chainId,
37
+ chainId ?? '00' as ChainId,
36
38
  hydratedBlock,
37
39
  `Failed validateHydratedBlockState: ${ex}`,
38
40
  ex,
39
41
  ))
40
42
  }
41
43
  return errors
42
- })
44
+ }, { timeBudgetLimit: 100, logger: console })
43
45
  }
@@ -1,17 +1,20 @@
1
- import type { Address } from '@xylabs/sdk-js'
1
+ import type { Address, Promisable } from '@xylabs/sdk-js'
2
2
  import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'
3
- import type { ChainId, HydratedBlockWithHashMeta } from '@xyo-network/xl1-protocol'
4
- import { AttoXL1, XYO_ZERO_ADDRESS } from '@xyo-network/xl1-protocol'
5
- import type { AccountBalanceViewer, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-protocol-sdk'
6
- import { HydratedBlockStateValidationError, netBalancesForPayloads } from '@xyo-network/xl1-protocol-sdk'
3
+ import type {
4
+ AccountBalanceViewer, ChainId, HydratedBlockStateValidationFunction, HydratedBlockWithHashMeta,
5
+ } from '@xyo-network/xl1-sdk'
6
+ import {
7
+ AttoXL1, HydratedBlockStateValidationError, netBalancesForPayloads, XYO_ZERO_ADDRESS,
8
+ } from '@xyo-network/xl1-sdk'
7
9
 
8
10
  export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (
9
11
  block: HydratedBlockWithHashMeta,
10
- chainId: ChainId,
12
+ chainIdAtBlockNumber: (blockNumber: number) => Promisable<ChainId>,
11
13
  services: { accountBalance: AccountBalanceViewer },
12
14
  ) => {
13
15
  return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {
14
16
  const errors: HydratedBlockStateValidationError[] = []
17
+ let chainId = '00' as ChainId
15
18
  try {
16
19
  // TODO: Filter by non-producer elevated payloads
17
20
  // to allow for transfers from ZERO address
@@ -26,10 +29,11 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
26
29
  const previous = block[0].previous
27
30
  if (previous === null) return [new HydratedBlockStateValidationError(
28
31
  block?.[0]?._hash ?? ZERO_HASH,
29
- chainId,
32
+ '00' as ChainId,
30
33
  block,
31
34
  'Insufficient funds because first block',
32
35
  )]
36
+ chainId = await chainIdAtBlockNumber(block[0].block)
33
37
  await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {
34
38
  for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {
35
39
  const result = await services.accountBalance.accountBalances([address], { head: previous })
@@ -43,7 +47,7 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
43
47
  ))
44
48
  }
45
49
  }
46
- })
50
+ }, { timeBudgetLimit: 100, logger: console })
47
51
  } catch (ex) {
48
52
  errors.push(new HydratedBlockStateValidationError(
49
53
  block?.[0]?._hash ?? ZERO_HASH,
@@ -54,5 +58,5 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
54
58
  ))
55
59
  }
56
60
  return await Promise.resolve(errors)
57
- })
61
+ }, { timeBudgetLimit: 200, logger: console })
58
62
  }