@xyo-network/chain-validation 1.1.7 → 1.2.0

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 (132) hide show
  1. package/dist/neutral/index.mjs +107 -97
  2. package/dist/neutral/index.mjs.map +1 -1
  3. package/dist/types/block/index.d.ts +0 -1
  4. package/dist/types/block/index.d.ts.map +1 -1
  5. package/dist/types/block/validateBlock.d.ts +1 -1
  6. package/dist/types/block/validateBlock.d.ts.map +1 -1
  7. package/dist/types/block/validators/AllowedPayloadSchemas.d.ts +1 -1
  8. package/dist/types/block/validators/AllowedPayloadSchemas.d.ts.map +1 -1
  9. package/dist/types/block/validators/Fields.d.ts +1 -1
  10. package/dist/types/block/validators/Fields.d.ts.map +1 -1
  11. package/dist/types/block/validators/JsonSchema.d.ts +1 -1
  12. package/dist/types/block/validators/JsonSchema.d.ts.map +1 -1
  13. package/dist/types/block/validators/PreviousHash.d.ts +1 -1
  14. package/dist/types/block/validators/PreviousHash.d.ts.map +1 -1
  15. package/dist/types/boundwitness/index.d.ts +0 -2
  16. package/dist/types/boundwitness/index.d.ts.map +1 -1
  17. package/dist/types/boundwitness/validators/BoundWitnessReferences.d.ts +1 -1
  18. package/dist/types/boundwitness/validators/BoundWitnessReferences.d.ts.map +1 -1
  19. package/dist/types/boundwitness/validators/BoundWitnessSignatures.d.ts +1 -1
  20. package/dist/types/boundwitness/validators/BoundWitnessSignatures.d.ts.map +1 -1
  21. package/dist/types/elevatedPayload/index.d.ts +1 -7
  22. package/dist/types/elevatedPayload/index.d.ts.map +1 -1
  23. package/dist/types/elevatedPayload/lib/index.d.ts +7 -0
  24. package/dist/types/elevatedPayload/lib/index.d.ts.map +1 -0
  25. package/dist/types/elevatedPayload/lib/isElevatedFromBlock.d.ts +4 -0
  26. package/dist/types/elevatedPayload/lib/isElevatedFromBlock.d.ts.map +1 -0
  27. package/dist/types/elevatedPayload/lib/validateElevatedFromBlock.d.ts +3 -0
  28. package/dist/types/elevatedPayload/lib/validateElevatedFromBlock.d.ts.map +1 -0
  29. package/dist/types/elevatedPayload/lib/validateElevatedFromTransaction.d.ts +3 -0
  30. package/dist/types/elevatedPayload/lib/validateElevatedFromTransaction.d.ts.map +1 -0
  31. package/dist/types/elevatedPayload/lib/validateIncludedInBlock.d.ts +4 -0
  32. package/dist/types/elevatedPayload/lib/validateIncludedInBlock.d.ts.map +1 -0
  33. package/dist/types/elevatedPayload/lib/validateTransactionInBlock.d.ts +3 -0
  34. package/dist/types/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -0
  35. package/dist/types/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts +5 -0
  36. package/dist/types/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts.map +1 -0
  37. package/dist/types/elevatedPayload/payloads/index.d.ts +5 -0
  38. package/dist/types/elevatedPayload/payloads/index.d.ts.map +1 -0
  39. package/dist/types/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts +3 -0
  40. package/dist/types/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts.map +1 -0
  41. package/dist/types/elevatedPayload/payloads/validateHashInBlock.d.ts +3 -0
  42. package/dist/types/elevatedPayload/payloads/validateHashInBlock.d.ts.map +1 -0
  43. package/dist/types/elevatedPayload/payloads/validateSchemaInBlock.d.ts +3 -0
  44. package/dist/types/elevatedPayload/payloads/validateSchemaInBlock.d.ts.map +1 -0
  45. package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts +3 -0
  46. package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts.map +1 -0
  47. package/dist/types/elevatedPayload/validatePayloadInBlock.d.ts +3 -0
  48. package/dist/types/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -0
  49. package/dist/types/hydratedBlock/index.d.ts +0 -1
  50. package/dist/types/hydratedBlock/index.d.ts.map +1 -1
  51. package/dist/types/hydratedBlock/validateHydratedBlock.d.ts +1 -1
  52. package/dist/types/hydratedBlock/validateHydratedBlock.d.ts.map +1 -1
  53. package/dist/types/hydratedBlock/validators/Payloads.d.ts +1 -1
  54. package/dist/types/hydratedBlock/validators/Payloads.d.ts.map +1 -1
  55. package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts +2 -2
  56. package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
  57. package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts +2 -2
  58. package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
  59. package/dist/types/transaction/validateTransaction.d.ts.map +1 -1
  60. package/dist/types/transaction/validators/TransactionElevation.d.ts.map +1 -1
  61. package/dist/types/transaction/validators/TransactionFromValidator.d.ts +3 -0
  62. package/dist/types/transaction/validators/TransactionFromValidator.d.ts.map +1 -0
  63. package/dist/types/transaction/validators/TransactionProtocol.d.ts.map +1 -1
  64. package/dist/types/transaction/validators/index.d.ts +1 -0
  65. package/dist/types/transaction/validators/index.d.ts.map +1 -1
  66. package/package.json +16 -16
  67. package/src/block/index.ts +0 -1
  68. package/src/block/validateBlock.ts +1 -2
  69. package/src/block/validators/AllowedPayloadSchemas.ts +1 -3
  70. package/src/block/validators/Fields.ts +1 -3
  71. package/src/block/validators/JsonSchema.ts +1 -3
  72. package/src/block/validators/PreviousHash.ts +1 -3
  73. package/src/boundwitness/index.ts +0 -2
  74. package/src/boundwitness/validators/BoundWitnessReferences.ts +1 -2
  75. package/src/boundwitness/validators/BoundWitnessSignatures.ts +1 -2
  76. package/src/elevatedPayload/index.ts +1 -7
  77. package/src/elevatedPayload/lib/index.ts +6 -0
  78. package/src/elevatedPayload/lib/isElevatedFromBlock.ts +12 -0
  79. package/src/elevatedPayload/{validateElevatedInBlock.ts → lib/validateElevatedFromBlock.ts} +2 -4
  80. package/src/elevatedPayload/lib/validateElevatedFromTransaction.ts +20 -0
  81. package/src/elevatedPayload/lib/validateIncludedInBlock.ts +10 -0
  82. package/src/elevatedPayload/lib/validateTransactionInBlock.ts +18 -0
  83. package/src/elevatedPayload/lib/validateTypedPayloadInBlock.ts +27 -0
  84. package/src/elevatedPayload/payloads/index.ts +4 -0
  85. package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +13 -0
  86. package/src/elevatedPayload/payloads/validateHashInBlock.ts +13 -0
  87. package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +13 -0
  88. package/src/elevatedPayload/payloads/validateTransferInBlock.ts +14 -0
  89. package/src/elevatedPayload/validatePayloadInBlock.ts +37 -0
  90. package/src/hydratedBlock/index.ts +0 -1
  91. package/src/hydratedBlock/validateHydratedBlock.ts +6 -3
  92. package/src/hydratedBlock/validators/Payloads.ts +9 -36
  93. package/src/hydratedBlockState/validateHydratedBlockState.ts +4 -4
  94. package/src/hydratedBlockState/validators/RequiredBalance.ts +2 -2
  95. package/src/transaction/validateTransaction.ts +3 -2
  96. package/src/transaction/validators/TransactionElevation.ts +1 -16
  97. package/src/transaction/validators/TransactionFromValidator.ts +16 -0
  98. package/src/transaction/validators/TransactionProtocol.ts +4 -6
  99. package/src/transaction/validators/index.ts +1 -0
  100. package/babel.config.json +0 -6
  101. package/dist/types/block/BlockValidationFunction.d.ts +0 -5
  102. package/dist/types/block/BlockValidationFunction.d.ts.map +0 -1
  103. package/dist/types/boundwitness/BoundWitnessValidationFunction.d.ts +0 -4
  104. package/dist/types/boundwitness/BoundWitnessValidationFunction.d.ts.map +0 -1
  105. package/dist/types/boundwitness/HydratedBoundWitnessValidationFunction.d.ts +0 -5
  106. package/dist/types/boundwitness/HydratedBoundWitnessValidationFunction.d.ts.map +0 -1
  107. package/dist/types/elevatedPayload/InBlockPayloadValidationFunction.d.ts +0 -6
  108. package/dist/types/elevatedPayload/InBlockPayloadValidationFunction.d.ts.map +0 -1
  109. package/dist/types/elevatedPayload/validateChainStakeIntentInBlock.d.ts +0 -3
  110. package/dist/types/elevatedPayload/validateChainStakeIntentInBlock.d.ts.map +0 -1
  111. package/dist/types/elevatedPayload/validateElevatedInBlock.d.ts +0 -3
  112. package/dist/types/elevatedPayload/validateElevatedInBlock.d.ts.map +0 -1
  113. package/dist/types/elevatedPayload/validateElevatedInTransaction.d.ts +0 -3
  114. package/dist/types/elevatedPayload/validateElevatedInTransaction.d.ts.map +0 -1
  115. package/dist/types/elevatedPayload/validateSchemaInBlock.d.ts +0 -3
  116. package/dist/types/elevatedPayload/validateSchemaInBlock.d.ts.map +0 -1
  117. package/dist/types/elevatedPayload/validateTransactionInBlock.d.ts +0 -3
  118. package/dist/types/elevatedPayload/validateTransactionInBlock.d.ts.map +0 -1
  119. package/dist/types/elevatedPayload/validateTransferInBlock.d.ts +0 -3
  120. package/dist/types/elevatedPayload/validateTransferInBlock.d.ts.map +0 -1
  121. package/dist/types/hydratedBlock/HydratedBlockValidationFunction.d.ts +0 -5
  122. package/dist/types/hydratedBlock/HydratedBlockValidationFunction.d.ts.map +0 -1
  123. package/src/block/BlockValidationFunction.ts +0 -8
  124. package/src/boundwitness/BoundWitnessValidationFunction.ts +0 -6
  125. package/src/boundwitness/HydratedBoundWitnessValidationFunction.ts +0 -7
  126. package/src/elevatedPayload/InBlockPayloadValidationFunction.ts +0 -8
  127. package/src/elevatedPayload/validateChainStakeIntentInBlock.ts +0 -29
  128. package/src/elevatedPayload/validateElevatedInTransaction.ts +0 -23
  129. package/src/elevatedPayload/validateSchemaInBlock.ts +0 -24
  130. package/src/elevatedPayload/validateTransactionInBlock.ts +0 -18
  131. package/src/elevatedPayload/validateTransferInBlock.ts +0 -24
  132. package/src/hydratedBlock/HydratedBlockValidationFunction.ts +0 -8
@@ -0,0 +1,37 @@
1
+ import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
2
+ import type { Schema } from '@xyo-network/payload-model'
3
+ import { SchemaSchema } from '@xyo-network/schema-payload-plugin'
4
+ import type {
5
+ HydratedBlock,
6
+ InBlockPayloadValidationFunction,
7
+ } from '@xyo-network/xl1-model'
8
+ import {
9
+ ChainStakeIntentSchema, HashSchema, TransferSchema,
10
+ } from '@xyo-network/xl1-model'
11
+
12
+ import { validateTransactionInBlock } from './lib/index.ts'
13
+ import {
14
+ validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTransferInBlock,
15
+ } from './payloads/index.ts'
16
+
17
+ const payloadValidators: Record<Schema, InBlockPayloadValidationFunction> = {
18
+ [HashSchema]: validateHashInBlock,
19
+ [TransferSchema]: validateTransferInBlock,
20
+ [SchemaSchema]: validateSchemaInBlock,
21
+ [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
22
+ [BoundWitnessSchema]: validateTransactionInBlock,
23
+ }
24
+
25
+ export const validatePayloadInBlock: InBlockPayloadValidationFunction = async (
26
+ payload,
27
+ block: HydratedBlock,
28
+ ): Promise<Error[]> => {
29
+ const errors: Error[] = []
30
+ const validator = payloadValidators[payload.schema]
31
+ if (validator) {
32
+ errors.push(...await validator(payload, block))
33
+ } else {
34
+ errors.push(new Error(`Unsupported payload schema: ${payload.schema}`))
35
+ }
36
+ return errors
37
+ }
@@ -1,3 +1,2 @@
1
- export * from './HydratedBlockValidationFunction.ts'
2
1
  export * from './validateHydratedBlock.ts'
3
2
  export * from './validators/index.ts'
@@ -1,9 +1,8 @@
1
1
  import type { Address } from '@xylabs/hex'
2
- import type { HydratedBlock } from '@xyo-network/xl1-model'
2
+ import type { HydratedBlock, HydratedBlockValidatorFunction } from '@xyo-network/xl1-model'
3
3
 
4
4
  import { validateBlock } from '../block/index.ts'
5
5
  import { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'
6
- import type { HydratedBlockValidatorFunction } from './HydratedBlockValidationFunction.ts'
7
6
  import { PayloadsInBlockValidator } from './validators/index.ts'
8
7
 
9
8
  export const validateHydratedBlock: HydratedBlockValidatorFunction = async (
@@ -12,6 +11,10 @@ export const validateHydratedBlock: HydratedBlockValidatorFunction = async (
12
11
  additionalValidators: HydratedBlockValidatorFunction[] = [],
13
12
  ): Promise<Error[]> => {
14
13
  const errors: Error[] = await validateBlock(hydratedBlock[0], chainId)
15
- const validators: HydratedBlockValidatorFunction[] = [BoundWitnessReferencesValidator(), PayloadsInBlockValidator, ...additionalValidators]
14
+ const validators: HydratedBlockValidatorFunction[] = [
15
+ BoundWitnessReferencesValidator(),
16
+ PayloadsInBlockValidator,
17
+ ...additionalValidators,
18
+ ]
16
19
  return [...errors, ...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat()]
17
20
  }
@@ -1,42 +1,18 @@
1
- import type { Address, Hash } from '@xylabs/hex'
2
- import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
1
+ import type { Hash } from '@xylabs/hex'
2
+ import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'
3
3
  import type {
4
- Payload, Schema, WithHashStorageMeta,
5
- } from '@xyo-network/payload-model'
6
- import { SchemaSchema } from '@xyo-network/schema-payload-plugin'
7
- import {
8
- ChainStakeIntentSchema,
9
- type FromFields,
10
- type HydratedBlock,
11
- TransferSchema,
4
+ HydratedBlock,
5
+ HydratedBlockValidatorFunction,
12
6
  } from '@xyo-network/xl1-model'
13
7
 
14
- import type { InBlockPayloadValidationFunction } from '../../elevatedPayload/index.ts'
15
- import {
16
- validateChainStakeIntentInBlock, validateSchemaInBlock, validateTransactionInBlock,
17
- validateTransferInBlock,
18
- } from '../../elevatedPayload/index.ts'
19
- import type { HydratedBlockValidatorFunction } from '../HydratedBlockValidationFunction.ts'
8
+ import { validatePayloadInBlock } from '../../elevatedPayload/validatePayloadInBlock.ts'
20
9
 
21
10
  export const PayloadsInBlockValidator: HydratedBlockValidatorFunction = async (
22
11
  [block, payloads]: HydratedBlock,
23
- chainId: Address,
24
12
  ) => {
25
13
  const errors: Error[] = []
26
14
 
27
- const validators: Record<Schema, InBlockPayloadValidationFunction> = {
28
- [TransferSchema]: validateTransferInBlock,
29
- [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
30
- [BoundWitnessSchema]: (payload) => {
31
- // TODO: Fix first block check with dual step singing
32
- console.error('TODO: Fix first block check with dual step singing')
33
- return block.block === 0 ? [] : validateTransactionInBlock(payload, [block, payloads], chainId)
34
- },
35
- [SchemaSchema]: validateSchemaInBlock,
36
- }
37
- const allowedSchemas = Object.keys(validators)
38
-
39
- const payloadMap: Record<Hash, WithHashStorageMeta<Payload & FromFields>> = {}
15
+ const payloadMap: Record<Hash, WithHashStorageMeta<Payload>> = {}
40
16
  for (const payload of payloads) {
41
17
  payloadMap[payload._hash] = payload
42
18
  }
@@ -44,12 +20,9 @@ export const PayloadsInBlockValidator: HydratedBlockValidatorFunction = async (
44
20
  for (let i = 0; i < block.payload_hashes.length; i++) {
45
21
  const hash = block.payload_hashes[i]
46
22
  const schema = block.payload_schemas[i]
47
- if (payloadMap[hash]) {
48
- if (allowedSchemas.includes(schema)) {
49
- errors.push(...(await validators[schema](payloadMap[hash], [block, payloads], chainId)))
50
- } else {
51
- errors.push(new Error(`invalid payload schema ${hash} ${schema}`))
52
- }
23
+ const payload = payloadMap[hash]
24
+ if (payload) {
25
+ errors.push(...await validatePayloadInBlock(payload, [block, payloads]))
53
26
  delete payloadMap[hash]
54
27
  } else {
55
28
  errors.push(new Error(`missing payload ${hash} ${schema}`))
@@ -1,17 +1,17 @@
1
1
  import type { Address } from '@xylabs/hex'
2
2
  import type { ReadArchivist } from '@xyo-network/archivist-model'
3
- import type { HydratedBlock, HydratedBlockStateValidatorFunction } from '@xyo-network/xl1-model'
3
+ import type { HydratedBlock, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-model'
4
4
 
5
5
  import { validateHydratedBlock } from '../hydratedBlock/index.ts'
6
6
  import { RequiredBalanceBlockStateValidator } from './validators/index.ts'
7
7
 
8
- export const validateHydratedBlockState: HydratedBlockStateValidatorFunction = async (
8
+ export const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (
9
9
  hydratedBlock: HydratedBlock,
10
10
  chainId: Address,
11
11
  archivist: ReadArchivist,
12
- additionalValidators: HydratedBlockStateValidatorFunction[] = [],
12
+ additionalValidators: HydratedBlockStateValidationFunction[] = [],
13
13
  ): Promise<Error[]> => {
14
14
  const errors: Error[] = await validateHydratedBlock(hydratedBlock, chainId)
15
- const validators: HydratedBlockStateValidatorFunction[] = [RequiredBalanceBlockStateValidator, ...additionalValidators]
15
+ const validators: HydratedBlockStateValidationFunction[] = [RequiredBalanceBlockStateValidator, ...additionalValidators]
16
16
  return [...errors, ...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, archivist)))).flat()]
17
17
  }
@@ -4,9 +4,9 @@ import type { ReadArchivist } from '@xyo-network/archivist-model'
4
4
  import {
5
5
  analyzeChain, BalanceAnalyzer, isChainSummaryBalances, netBalancesForPayloads,
6
6
  } from '@xyo-network/chain-protocol'
7
- import type { HydratedBlock, HydratedBlockStateValidatorFunction } from '@xyo-network/xl1-model'
7
+ import type { HydratedBlock, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-model'
8
8
 
9
- export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidatorFunction = async (
9
+ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (
10
10
  block: HydratedBlock,
11
11
  chainId: Address,
12
12
  archivist: ReadArchivist,
@@ -6,7 +6,7 @@ import { isTransactionBoundWitness } from '@xyo-network/xl1-model'
6
6
 
7
7
  import { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'
8
8
  import {
9
- TransactionElevationValidator, TransactionJsonSchemaValidator, TransactionProtocolValidator,
9
+ TransactionElevationValidator, TransactionFromValidator, TransactionJsonSchemaValidator, TransactionProtocolValidator,
10
10
  } from './validators/index.ts'
11
11
 
12
12
  export async function validateTransaction(
@@ -21,9 +21,10 @@ export async function validateTransaction(
21
21
  const validators: HydratedTransactionValidatorFunction[] = [
22
22
  TransactionProtocolValidator,
23
23
  TransactionJsonSchemaValidator,
24
+ TransactionFromValidator,
24
25
  TransactionElevationValidator,
25
26
  BoundWitnessReferencesValidator(),
26
27
  ...additionalValidators,
27
28
  ]
28
- return (await Promise.all(validators.map(v => v(tx, chainIdentification)))).flat()
29
+ return (await Promise.all(validators.map(v => v(tx, chainIdentification.id)))).flat()
29
30
  }
@@ -8,21 +8,6 @@ export const TransactionElevationValidator: HydratedTransactionValidatorFunction
8
8
  [tx, txPayloads]: HydratedTransactionWithStorageMeta,
9
9
  ): Promisable<Error[]> => {
10
10
  const errors: Error[] = []
11
- try {
12
- const elevatedHashes = (tx.$operations ?? [])
13
- .filter(operation => operation[0] === 'elevate')
14
-
15
- const elevatedPayloads = elevatedHashes
16
- .map(([,hash]) => txPayloads.find(p => p._hash === hash)).filter(exists)
17
-
18
- if (elevatedPayloads.length < elevatedHashes.length) {
19
- errors.push(new Error('missing elevated payload'))
20
- }
21
- if (elevatedPayloads.length > elevatedHashes.length) {
22
- errors.push(new Error('extra elevated payload'))
23
- }
24
- } catch (ex) {
25
- errors.push(new Error('validation excepted'), ex as Error)
26
- }
11
+ // TODO: Add validation for transaction elevation
27
12
  return errors
28
13
  }
@@ -0,0 +1,16 @@
1
+ import { type Address, asAddress } from '@xylabs/hex'
2
+ import { addressesContains } from '@xyo-network/boundwitness-validator'
3
+ import type {
4
+ HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,
5
+ } from '@xyo-network/xl1-model'
6
+
7
+ export const TransactionFromValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = (
8
+ [tx]: HydratedTransaction,
9
+ _chainId: Address,
10
+ ): Error[] => {
11
+ const errors: Error[] = []
12
+ const from = asAddress(tx.from)
13
+ if (from === undefined)errors.push(new Error('Transaction from is not a valid address'))
14
+ else if (!addressesContains(tx, from)) errors.push(new Error('Transaction from address must be listed in addresses'))
15
+ return errors
16
+ }
@@ -1,23 +1,21 @@
1
+ import type { Address } from '@xylabs/hex'
1
2
  import { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'
2
3
  import type {
3
- ChainIdentification, HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,
4
+ HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,
4
5
  } from '@xyo-network/xl1-model'
5
6
 
6
7
  export const TransactionProtocolValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = async (
7
8
  [tx]: HydratedTransaction,
8
- chainIdentification?: ChainIdentification,
9
+ chainId: Address,
9
10
  ): Promise<Error[]> => {
10
11
  const errors: Error[] = []
11
12
  try {
12
13
  if (!await BoundWitnessWrapper.parse(tx).getValid()) {
13
14
  errors.push(new Error('failed basic boundwitness parse'))
14
15
  }
15
- if (chainIdentification && tx.chain !== chainIdentification.id) {
16
+ if (chainId && tx.chain !== chainId) {
16
17
  errors.push(new Error('invalid chain id'))
17
18
  }
18
- if (tx.nonce.length !== tx.addresses.length) {
19
- errors.push(new Error('invalid nonce length'))
20
- }
21
19
  } catch (ex) {
22
20
  errors.push(new Error('validation excepted'), ex as Error)
23
21
  }
@@ -1,3 +1,4 @@
1
1
  export * from './TransactionElevation.ts'
2
+ export * from './TransactionFromValidator.ts'
2
3
  export * from './TransactionJsonSchema.ts'
3
4
  export * from './TransactionProtocol.ts'
package/babel.config.json DELETED
@@ -1,6 +0,0 @@
1
- {
2
- "presets": [
3
- ["@babel/preset-env", { "modules": false, "targets": { "node": "current" } }],
4
- "@babel/preset-typescript"
5
- ]
6
- }
@@ -1,5 +0,0 @@
1
- import type { Address } from '@xylabs/hex';
2
- import type { Promisable } from '@xylabs/promise';
3
- import type { BlockBoundWitness } from '@xyo-network/xl1-model';
4
- export type BlockValidatorFunction = (block: BlockBoundWitness, chainId?: Address) => Promisable<Error[]>;
5
- //# sourceMappingURL=BlockValidationFunction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BlockValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/block/BlockValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,OAAO,KACd,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
@@ -1,4 +0,0 @@
1
- import type { Promisable } from '@xylabs/promise';
2
- import type { BoundWitness } from '@xyo-network/boundwitness-model';
3
- export type BoundWitnessValidationFunction<T extends BoundWitness = BoundWitness> = (bw: T) => Promisable<Error[]>;
4
- //# sourceMappingURL=BoundWitnessValidationFunction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BoundWitnessValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/boundwitness/BoundWitnessValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAEnE,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,CAClF,EAAE,EAAE,CAAC,KACF,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
@@ -1,5 +0,0 @@
1
- import type { Promisable } from '@xylabs/promise';
2
- import type { HydratedBoundWitnessWithStorageMeta } from '@xyo-network/archivist-model';
3
- import type { BoundWitness } from '@xyo-network/boundwitness-model';
4
- export type HydratedBoundWitnessValidationFunction<T extends BoundWitness = BoundWitness> = (bw: HydratedBoundWitnessWithStorageMeta<T>) => Promisable<Error[]>;
5
- //# sourceMappingURL=HydratedBoundWitnessValidationFunction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HydratedBoundWitnessValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/boundwitness/HydratedBoundWitnessValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,8BAA8B,CAAA;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAEnE,MAAM,MAAM,sCAAsC,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,CAC1F,EAAE,EAAE,mCAAmC,CAAC,CAAC,CAAC,KACvC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
@@ -1,6 +0,0 @@
1
- import type { Address } from '@xylabs/hex';
2
- import type { Promisable } from '@xylabs/promise';
3
- import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model';
4
- import type { FromFields, HydratedBlock } from '@xyo-network/xl1-model';
5
- export type InBlockPayloadValidationFunction = (payload: WithHashStorageMeta<Payload<FromFields>>, block: HydratedBlock, chainId: Address) => Promisable<Error[]>;
6
- //# sourceMappingURL=InBlockPayloadValidationFunction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"InBlockPayloadValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/InBlockPayloadValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEvE,MAAM,MAAM,gCAAgC,GAAG,CAC7C,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,KACtF,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts';
2
- export declare const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction;
3
- //# sourceMappingURL=validateChainStakeIntentInBlock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateChainStakeIntentInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateChainStakeIntentInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAI7F,eAAO,MAAM,+BAA+B,EAAE,gCAoB7C,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts';
2
- export declare const validateElevatedInBlock: InBlockPayloadValidationFunction;
3
- //# sourceMappingURL=validateElevatedInBlock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateElevatedInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateElevatedInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAE7F,eAAO,MAAM,uBAAuB,EAAE,gCAUrC,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts';
2
- export declare const validateElevatedInTransaction: InBlockPayloadValidationFunction;
3
- //# sourceMappingURL=validateElevatedInTransaction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateElevatedInTransaction.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateElevatedInTransaction.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAE7F,eAAO,MAAM,6BAA6B,EAAE,gCAgB3C,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts';
2
- export declare const validateSchemaInBlock: InBlockPayloadValidationFunction;
3
- //# sourceMappingURL=validateSchemaInBlock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateSchemaInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateSchemaInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAI7F,eAAO,MAAM,qBAAqB,EAAE,gCAenC,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts';
2
- export declare const validateTransactionInBlock: InBlockPayloadValidationFunction;
3
- //# sourceMappingURL=validateTransactionInBlock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateTransactionInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateTransactionInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAE7F,eAAO,MAAM,0BAA0B,EAAE,gCAWxC,CAAA"}
@@ -1,3 +0,0 @@
1
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts';
2
- export declare const validateTransferInBlock: InBlockPayloadValidationFunction;
3
- //# sourceMappingURL=validateTransferInBlock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validateTransferInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateTransferInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAI7F,eAAO,MAAM,uBAAuB,EAAE,gCAerC,CAAA"}
@@ -1,5 +0,0 @@
1
- import type { Address } from '@xylabs/hex';
2
- import type { Promisable } from '@xylabs/promise';
3
- import type { HydratedBlock } from '@xyo-network/xl1-model';
4
- export type HydratedBlockValidatorFunction = (hydratedBlock: HydratedBlock, chainId: Address) => Promisable<Error[]>;
5
- //# sourceMappingURL=HydratedBlockValidationFunction.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HydratedBlockValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlock/HydratedBlockValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D,MAAM,MAAM,8BAA8B,GAAG,CAC3C,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,KACb,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
@@ -1,8 +0,0 @@
1
- import type { Address } from '@xylabs/hex'
2
- import type { Promisable } from '@xylabs/promise'
3
- import type { BlockBoundWitness } from '@xyo-network/xl1-model'
4
-
5
- export type BlockValidatorFunction = (
6
- block: BlockBoundWitness,
7
- chainId?: Address,
8
- ) => Promisable<Error[]>
@@ -1,6 +0,0 @@
1
- import type { Promisable } from '@xylabs/promise'
2
- import type { BoundWitness } from '@xyo-network/boundwitness-model'
3
-
4
- export type BoundWitnessValidationFunction<T extends BoundWitness = BoundWitness> = (
5
- bw: T
6
- ) => Promisable<Error[]>
@@ -1,7 +0,0 @@
1
- import type { Promisable } from '@xylabs/promise'
2
- import type { HydratedBoundWitnessWithStorageMeta } from '@xyo-network/archivist-model'
3
- import type { BoundWitness } from '@xyo-network/boundwitness-model'
4
-
5
- export type HydratedBoundWitnessValidationFunction<T extends BoundWitness = BoundWitness> = (
6
- bw: HydratedBoundWitnessWithStorageMeta<T>
7
- ) => Promisable<Error[]>
@@ -1,8 +0,0 @@
1
- import type { Address } from '@xylabs/hex'
2
- import type { Promisable } from '@xylabs/promise'
3
- import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'
4
- import type { FromFields, HydratedBlock } from '@xyo-network/xl1-model'
5
-
6
- export type InBlockPayloadValidationFunction = (
7
- payload: WithHashStorageMeta<Payload<FromFields>>, block: HydratedBlock, chainId: Address
8
- ) => Promisable<Error[]>
@@ -1,29 +0,0 @@
1
- import type { Address } from '@xylabs/hex'
2
- import type { HydratedBlock } from '@xyo-network/xl1-model'
3
- import { isChainStakeIntent } from '@xyo-network/xl1-model'
4
-
5
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
6
- import { validateElevatedInBlock } from './validateElevatedInBlock.ts'
7
- import { validateElevatedInTransaction } from './validateElevatedInTransaction.ts'
8
-
9
- export const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (
10
- payload,
11
- block: HydratedBlock,
12
- chainId: Address,
13
- ): Promise<Error[]> => {
14
- const errors: Error[] = []
15
- if (!isChainStakeIntent(payload)) {
16
- errors.push(new Error('Payload is not a chain stake intent'))
17
- }
18
-
19
- if (!block[0].payload_hashes.includes(payload._hash)) {
20
- errors.push(new Error('ChainStakeIntent not included in block'))
21
- }
22
-
23
- if (block[0].addresses.includes(payload.from)) {
24
- errors.push(...await validateElevatedInBlock(payload, block, chainId))
25
- } else {
26
- errors.push(...await validateElevatedInTransaction(payload, block, chainId))
27
- }
28
- return errors
29
- }
@@ -1,23 +0,0 @@
1
- import type { Promisable } from '@xylabs/promise'
2
- import { transactionsFromHydratedBlock } from '@xyo-network/chain-protocol'
3
- import type { HydratedBlock } from '@xyo-network/xl1-model'
4
-
5
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
6
-
7
- export const validateElevatedInTransaction: InBlockPayloadValidationFunction = (
8
- payload,
9
- block: HydratedBlock,
10
- ): Promisable<Error[]> => {
11
- const errors: Error[] = []
12
- const txs = transactionsFromHydratedBlock(block)
13
- const fromTxs = txs.filter(tx => tx.addresses.includes(payload.from))
14
- if (fromTxs.length > 0) {
15
- const hashes = fromTxs.flatMap(tx => tx.payload_hashes)
16
- if (!hashes.includes(payload._hash)) {
17
- errors.push(new Error('Transaction does not include payload'))
18
- }
19
- } else {
20
- errors.push(new Error(`Missing transaction for from address ${payload.from} [${payload.schema}]`))
21
- }
22
- return errors
23
- }
@@ -1,24 +0,0 @@
1
- import type { Address } from '@xylabs/hex'
2
- import { isSchemaPayload } from '@xyo-network/schema-payload-plugin'
3
- import type { HydratedBlock } from '@xyo-network/xl1-model'
4
-
5
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
6
- import { validateElevatedInBlock } from './validateElevatedInBlock.ts'
7
- import { validateElevatedInTransaction } from './validateElevatedInTransaction.ts'
8
-
9
- export const validateSchemaInBlock: InBlockPayloadValidationFunction = async (
10
- payload,
11
- block: HydratedBlock,
12
- chainId: Address,
13
- ): Promise<Error[]> => {
14
- const errors: Error[] = []
15
- if (!isSchemaPayload(payload)) {
16
- errors.push(new Error('Payload is not a schema'))
17
- }
18
- if (payload.from === chainId || block[0].addresses.includes(payload.from)) {
19
- errors.push(...await validateElevatedInBlock(payload, block, chainId))
20
- } else {
21
- errors.push(...await validateElevatedInTransaction(payload, block, chainId))
22
- }
23
- return errors
24
- }
@@ -1,18 +0,0 @@
1
- import type { HydratedBlock } from '@xyo-network/xl1-model'
2
- import { isTransactionBoundWitness } from '@xyo-network/xl1-model'
3
-
4
- import { BoundWitnessSignaturesValidator } from '../boundwitness/index.ts'
5
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
6
-
7
- export const validateTransactionInBlock: InBlockPayloadValidationFunction = async (
8
- payload,
9
- _block: HydratedBlock,
10
- ): Promise<Error[]> => {
11
- const errors: Error[] = []
12
- if (isTransactionBoundWitness(payload)) {
13
- errors.push(...await BoundWitnessSignaturesValidator(payload))
14
- } else {
15
- errors.push(new Error('Payload is not a transaction'))
16
- }
17
- return errors
18
- }
@@ -1,24 +0,0 @@
1
- import type { Address } from '@xylabs/hex'
2
- import type { HydratedBlock } from '@xyo-network/xl1-model'
3
- import { isTransfer } from '@xyo-network/xl1-model'
4
-
5
- import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
6
- import { validateElevatedInBlock } from './validateElevatedInBlock.ts'
7
- import { validateElevatedInTransaction } from './validateElevatedInTransaction.ts'
8
-
9
- export const validateTransferInBlock: InBlockPayloadValidationFunction = async (
10
- payload,
11
- block: HydratedBlock,
12
- chainId: Address,
13
- ): Promise<Error[]> => {
14
- const errors: Error[] = []
15
- if (!isTransfer(payload)) {
16
- errors.push(new Error('Payload is not a transfer'))
17
- }
18
- if (payload.from === chainId || block[0].addresses.includes(payload.from)) {
19
- errors.push(...await validateElevatedInBlock(payload, block, chainId))
20
- } else {
21
- errors.push(...await validateElevatedInTransaction(payload, block, chainId))
22
- }
23
- return errors
24
- }
@@ -1,8 +0,0 @@
1
- import type { Address } from '@xylabs/hex'
2
- import type { Promisable } from '@xylabs/promise'
3
- import type { HydratedBlock } from '@xyo-network/xl1-model'
4
-
5
- export type HydratedBlockValidatorFunction = (
6
- hydratedBlock: HydratedBlock,
7
- chainId: Address,
8
- ) => Promisable<Error[]>