@xyo-network/chain-validation 1.5.35 → 1.5.36

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 (59) hide show
  1. package/dist/neutral/index.mjs +193 -140
  2. package/dist/neutral/index.mjs.map +1 -1
  3. package/dist/types/block/validateBlock.d.ts.map +1 -1
  4. package/dist/types/block/validators/AllowedPayloadSchemas.d.ts.map +1 -1
  5. package/dist/types/block/validators/Fields.d.ts.map +1 -1
  6. package/dist/types/block/validators/JsonSchema.d.ts.map +1 -1
  7. package/dist/types/block/validators/PreviousHash.d.ts.map +1 -1
  8. package/dist/types/boundwitness/validators/BoundWitnessReferences.d.ts.map +1 -1
  9. package/dist/types/boundwitness/validators/BoundWitnessSignatures.d.ts.map +1 -1
  10. package/dist/types/elevatedPayload/lib/validateElevatedFromBlock.d.ts.map +1 -1
  11. package/dist/types/elevatedPayload/lib/validateElevatedFromTransaction.d.ts.map +1 -1
  12. package/dist/types/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -1
  13. package/dist/types/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts.map +1 -1
  14. package/dist/types/elevatedPayload/payloads/validateHashInBlock.d.ts.map +1 -1
  15. package/dist/types/elevatedPayload/payloads/validateSchemaInBlock.d.ts.map +1 -1
  16. package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts.map +1 -1
  17. package/dist/types/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
  18. package/dist/types/hydratedBlock/validateHydratedBlock.d.ts.map +1 -1
  19. package/dist/types/hydratedBlock/validators/Payloads.d.ts.map +1 -1
  20. package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts +2 -2
  21. package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
  22. package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts +2 -2
  23. package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
  24. package/dist/types/transaction/validateTransaction.d.ts +1 -1
  25. package/dist/types/transaction/validateTransaction.d.ts.map +1 -1
  26. package/dist/types/transaction/validators/TransactionDurationValidator.d.ts.map +1 -1
  27. package/dist/types/transaction/validators/TransactionElevationValidator.d.ts.map +1 -1
  28. package/dist/types/transaction/validators/TransactionFromValidator.d.ts.map +1 -1
  29. package/dist/types/transaction/validators/TransactionGasValidator.d.ts.map +1 -1
  30. package/dist/types/transaction/validators/TransactionJsonSchemaValidator.d.ts.map +1 -1
  31. package/package.json +29 -27
  32. package/src/block/validateBlock.ts +7 -4
  33. package/src/block/validators/AllowedPayloadSchemas.ts +4 -3
  34. package/src/block/validators/Fields.ts +4 -3
  35. package/src/block/validators/JsonSchema.ts +23 -20
  36. package/src/block/validators/PreviousHash.ts +7 -5
  37. package/src/boundwitness/validators/BoundWitnessReferences.ts +5 -3
  38. package/src/boundwitness/validators/BoundWitnessSignatures.ts +6 -4
  39. package/src/elevatedPayload/lib/validateElevatedFromBlock.ts +12 -7
  40. package/src/elevatedPayload/lib/validateElevatedFromTransaction.ts +14 -8
  41. package/src/elevatedPayload/lib/validateIncludedInBlock.ts +2 -2
  42. package/src/elevatedPayload/lib/validateTransactionInBlock.ts +12 -8
  43. package/src/elevatedPayload/lib/validateTypedPayloadInBlock.ts +2 -2
  44. package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +9 -5
  45. package/src/elevatedPayload/payloads/validateHashInBlock.ts +9 -5
  46. package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +9 -5
  47. package/src/elevatedPayload/payloads/validateTransferInBlock.ts +9 -5
  48. package/src/elevatedPayload/validatePayloadInBlock.ts +8 -6
  49. package/src/hydratedBlock/validateHydratedBlock.ts +13 -6
  50. package/src/hydratedBlock/validators/Payloads.ts +13 -4
  51. package/src/hydratedBlockState/validateHydratedBlockState.ts +21 -10
  52. package/src/hydratedBlockState/validators/RequiredBalance.ts +15 -13
  53. package/src/transaction/validateTransaction.ts +2 -2
  54. package/src/transaction/validators/TransactionDurationValidator.ts +4 -3
  55. package/src/transaction/validators/TransactionElevationValidator.ts +4 -3
  56. package/src/transaction/validators/TransactionFromValidator.ts +4 -3
  57. package/src/transaction/validators/TransactionGasValidator.ts +4 -3
  58. package/src/transaction/validators/TransactionJsonSchemaValidator.ts +3 -5
  59. package/src/transaction/validators/TransactionProtocolValidator.ts +2 -2
@@ -1,32 +1,43 @@
1
1
  import { type Address, ZERO_HASH } from '@xylabs/hex'
2
2
  import type {
3
- AccountBalanceService, HydratedBlock, HydratedBlockStateValidationFunction,
3
+ AccountBalanceServiceV2, HydratedBlock,
4
+ HydratedBlockStateValidationFunctionV2,
4
5
  } from '@xyo-network/xl1-protocol'
5
6
  import { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'
6
7
 
7
8
  import { validateHydratedBlock } from '../hydratedBlock/index.ts'
8
9
  import { RequiredBalanceBlockStateValidator } from './validators/index.ts'
9
10
 
10
- export const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (
11
+ export const validateHydratedBlockState: HydratedBlockStateValidationFunctionV2 = async (
11
12
  hydratedBlock: HydratedBlock,
12
13
  chainId: Address,
13
- services: { accountBalance: AccountBalanceService },
14
- additionalValidators: HydratedBlockStateValidationFunction[] = [],
15
- ): Promise<(HydratedBlockStateValidationError | Error)[]> => {
16
- const errors: Error[] = []
14
+ services: { accountBalance: AccountBalanceServiceV2 },
15
+ additionalValidators: HydratedBlockStateValidationFunctionV2[] = [],
16
+ ) => {
17
+ const errors: HydratedBlockStateValidationError[] = []
17
18
  try {
18
- errors.push(...await validateHydratedBlock(hydratedBlock, chainId))
19
- const validators: HydratedBlockStateValidationFunction[] = [
19
+ const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId)
20
+ for (const validateHydratedBlockError of validateHydratedBlockErrors) {
21
+ errors.push(new HydratedBlockStateValidationError(
22
+ hydratedBlock[0]._hash,
23
+ chainId,
24
+ hydratedBlock,
25
+ `validateBlock error: ${validateHydratedBlockError}`,
26
+ validateHydratedBlockError,
27
+ ))
28
+ }
29
+ const validators: HydratedBlockStateValidationFunctionV2[] = [
20
30
  RequiredBalanceBlockStateValidator,
21
31
  ...additionalValidators,
22
32
  ]
23
33
  errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())
24
- } catch (e) {
34
+ } catch (ex) {
25
35
  errors.push(new HydratedBlockStateValidationError(
26
36
  hydratedBlock?.[0]?._hash ?? ZERO_HASH,
27
37
  chainId,
28
38
  hydratedBlock,
29
- `Failed validateHydratedBlockState: ${e instanceof Error ? e.message : String(e)}`,
39
+ `Failed validateHydratedBlockState: ${ex}`,
40
+ ex,
30
41
  ))
31
42
  }
32
43
  return errors
@@ -1,19 +1,18 @@
1
- import {
2
- type Address, hexToBigInt, ZERO_HASH,
3
- } from '@xylabs/hex'
4
- import { netBalancesForPayloads } from '@xyo-network/chain-protocol'
1
+ import { type Address, ZERO_HASH } from '@xylabs/hex'
5
2
  import { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'
6
3
  import type {
7
- AccountBalanceService, HydratedBlock, HydratedBlockStateValidationFunction,
4
+ AccountBalanceServiceV2, HydratedBlock,
5
+ HydratedBlockStateValidationFunctionV2,
8
6
  } from '@xyo-network/xl1-protocol'
9
- import { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'
7
+ import { AttoXL1, HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'
8
+ import { netBalancesForPayloads } from '@xyo-network/xl1-protocol-sdk'
10
9
 
11
- export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (
10
+ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunctionV2 = async (
12
11
  block: HydratedBlock,
13
12
  chainId: Address,
14
- services: { accountBalance: AccountBalanceService },
13
+ services: { accountBalance: AccountBalanceServiceV2 },
15
14
  ) => {
16
- const errors: (HydratedBlockStateValidationError | Error)[] = []
15
+ const errors: HydratedBlockStateValidationError[] = []
17
16
  try {
18
17
  // TODO: Filter by non-producer elevated payloads
19
18
  // to allow for transfers from ZERO address
@@ -34,7 +33,8 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
34
33
  )]
35
34
 
36
35
  for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {
37
- const balance = hexToBigInt(services.accountBalance.getBalance(address))
36
+ const result = await services.accountBalance.balances(previous, [address])
37
+ const balance = result[address] ?? AttoXL1(0n)
38
38
  if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
39
39
  errors.push(new HydratedBlockStateValidationError(
40
40
  block?.[0]?._hash ?? ZERO_HASH,
@@ -44,13 +44,15 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
44
44
  ))
45
45
  }
46
46
  }
47
- } catch (e) {
47
+ } /*
48
+ catch (ex) {
48
49
  errors.push(new HydratedBlockStateValidationError(
49
50
  block?.[0]?._hash ?? ZERO_HASH,
50
51
  chainId,
51
52
  block,
52
- `Failed RequiredBalanceBlockStateValidator: ${e instanceof Error ? e.message : String(e)}`,
53
+ `Failed RequiredBalanceBlockStateValidator: ${ex}`,
54
+ ex,
53
55
  ))
54
- }
56
+ } */ finally {}
55
57
  return await Promise.resolve(errors)
56
58
  }
@@ -27,7 +27,7 @@ export async function validateTransaction(
27
27
  ...additionalValidators,
28
28
  ]
29
29
  return (await Promise.all(validators.map(v => v(tx, chainId)))).flat()
30
- } catch (e) {
31
- return [(new Error(`Failed TransactionGasValidator: ${e instanceof Error ? e.message : String(e)}`))]
30
+ } catch (ex) {
31
+ return [(new Error(`Failed TransactionGasValidator: ${ex}`))]
32
32
  }
33
33
  }
@@ -8,7 +8,7 @@ import { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'
8
8
  export const TransactionDurationValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (
9
9
  tx: HydratedTransaction,
10
10
  ) => {
11
- const errors: (HydratedTransactionValidationError | Error)[] = []
11
+ const errors: HydratedTransactionValidationError[] = []
12
12
  try {
13
13
  const { exp, nbf } = tx[0]
14
14
  if (nbf < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction nbf must be positive'))
@@ -20,11 +20,12 @@ export const TransactionDurationValidator: HydratedTransactionValidationFunction
20
20
  tx,
21
21
  'Transaction exp must not be too far in the future',
22
22
  ))
23
- } catch (e) {
23
+ } catch (ex) {
24
24
  errors.push(new HydratedTransactionValidationError(
25
25
  tx?.[0]?._hash ?? ZERO_HASH,
26
26
  tx,
27
- `Failed TransactionDurationValidator: ${e instanceof Error ? e.message : String(e)}`,
27
+ `Failed TransactionDurationValidator: ${ex}`,
28
+ ex,
28
29
  ))
29
30
  }
30
31
 
@@ -8,18 +8,19 @@ import { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'
8
8
  export const TransactionElevationValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (
9
9
  tx: HydratedTransaction,
10
10
  ) => {
11
- const errors: (HydratedTransactionValidationError | Error)[] = []
11
+ const errors: HydratedTransactionValidationError[] = []
12
12
  try {
13
13
  try {
14
14
  extractElevatedHashes(tx)
15
15
  } catch {
16
16
  errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Hydrated transaction does not include all script hashes'))
17
17
  }
18
- } catch (e) {
18
+ } catch (ex) {
19
19
  errors.push(new HydratedTransactionValidationError(
20
20
  tx?.[0]?._hash ?? ZERO_HASH,
21
21
  tx,
22
- `Failed TransactionElevationValidator: ${e instanceof Error ? e.message : String(e)}`,
22
+ `Failed TransactionElevationValidator: ${ex}`,
23
+ ex,
23
24
  ))
24
25
  }
25
26
  return errors
@@ -8,7 +8,7 @@ import { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'
8
8
  export const TransactionFromValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (
9
9
  tx: HydratedTransaction,
10
10
  ) => {
11
- const errors: (HydratedTransactionValidationError | Error)[] = []
11
+ const errors: HydratedTransactionValidationError[] = []
12
12
  try {
13
13
  const from = asAddress(tx[0].from)
14
14
  if (from === undefined)errors.push(new HydratedTransactionValidationError(
@@ -21,11 +21,12 @@ export const TransactionFromValidator: HydratedTransactionValidationFunction<Tra
21
21
  tx,
22
22
  'Transaction from address must be listed in addresses',
23
23
  ))
24
- } catch (e) {
24
+ } catch (ex) {
25
25
  errors.push(new HydratedTransactionValidationError(
26
26
  tx?.[0]?._hash ?? ZERO_HASH,
27
27
  tx,
28
- `Failed TransactionFromValidator: ${e instanceof Error ? e.message : String(e)}`,
28
+ `Failed TransactionFromValidator: ${ex}`,
29
+ ex,
29
30
  ))
30
31
  }
31
32
  return errors
@@ -14,7 +14,7 @@ import {
14
14
  export const TransactionGasValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (
15
15
  tx: HydratedTransaction,
16
16
  ) => {
17
- const errors: (HydratedTransactionValidationError | Error)[] = []
17
+ const errors: HydratedTransactionValidationError[] = []
18
18
  try {
19
19
  if (tx?.[0].fees === undefined) {
20
20
  errors.push(new HydratedTransactionValidationError(
@@ -73,11 +73,12 @@ export const TransactionGasValidator: HydratedTransactionValidationFunction<Tran
73
73
  `fees.priority must be >= ${minTransactionFees.priority}`,
74
74
  ))
75
75
  }
76
- } catch (e) {
76
+ } catch (ex) {
77
77
  errors.push(new HydratedTransactionValidationError(
78
78
  tx?.[0]?._hash ?? ZERO_HASH,
79
79
  tx,
80
- `Failed TransactionGasValidator: ${e instanceof Error ? e.message : String(e)}`,
80
+ `Failed TransactionGasValidator: ${ex}`,
81
+ ex,
81
82
  ))
82
83
  }
83
84
  return errors
@@ -1,5 +1,4 @@
1
1
  import { ZERO_HASH } from '@xylabs/hex'
2
- import { toJsonString } from '@xylabs/object'
3
2
  import { TransactionBoundWitnessJsonSchema } from '@xyo-network/chain-schema'
4
3
  import { PayloadBuilder } from '@xyo-network/payload-builder'
5
4
  import type {
@@ -16,21 +15,20 @@ let validate: ValidateFunction<TransactionBoundWitness> | undefined
16
15
  export const TransactionJsonSchemaValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (
17
16
  tx: HydratedTransaction,
18
17
  ) => {
19
- const errors: (HydratedTransactionValidationError | Error)[] = []
18
+ const errors: HydratedTransactionValidationError[] = []
20
19
  try {
21
20
  if (validate === undefined) validate = ajv.compile(TransactionBoundWitnessJsonSchema)
22
- // see if you can export the super set
23
21
  if (!validate(PayloadBuilder.omitStorageMeta(tx[0]))) {
24
22
  const error = new HydratedTransactionValidationError(
25
23
  tx?.[0]?._hash ?? ZERO_HASH,
26
24
  tx,
27
- `failed JSON schema validation: ${toJsonString(tx, 10)} ${toJsonString(validate.errors, 10)}`,
25
+ `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\n' })}`,
28
26
  )
29
27
  error.cause = validate.errors
30
28
  errors.push(error)
31
29
  }
32
30
  } catch (ex) {
33
- errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted'), ex as Error)
31
+ errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))
34
32
  }
35
33
  return errors
36
34
  }
@@ -8,13 +8,13 @@ export const TransactionProtocolValidator: HydratedTransactionValidationFunction
8
8
  tx: HydratedTransaction,
9
9
  chainId?: Address,
10
10
  ) => {
11
- const errors: (HydratedTransactionValidationError | Error)[] = []
11
+ const errors: HydratedTransactionValidationError[] = []
12
12
  try {
13
13
  if (chainId !== undefined && tx[0].chain !== chainId) {
14
14
  errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'invalid chain id'))
15
15
  }
16
16
  } catch (ex) {
17
- errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted'), ex as Error)
17
+ errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))
18
18
  }
19
19
  return await Promise.resolve(errors)
20
20
  }