@xyo-network/chain-validation 1.20.14 → 1.20.16

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 (36) hide show
  1. package/README.md +9 -200
  2. package/package.json +116 -24
  3. package/src/block/index.ts +0 -2
  4. package/src/block/validateBlock.ts +0 -39
  5. package/src/block/validators/AllowedPayloadSchemas.ts +0 -33
  6. package/src/block/validators/Fields.ts +0 -47
  7. package/src/block/validators/JsonSchema.ts +0 -40
  8. package/src/block/validators/PreviousHash.ts +0 -37
  9. package/src/block/validators/index.ts +0 -4
  10. package/src/elevatedPayload/index.ts +0 -1
  11. package/src/elevatedPayload/lib/index.ts +0 -6
  12. package/src/elevatedPayload/lib/isElevatedFromBlock.ts +0 -12
  13. package/src/elevatedPayload/lib/validateElevatedFromBlock.ts +0 -25
  14. package/src/elevatedPayload/lib/validateElevatedFromTransaction.ts +0 -30
  15. package/src/elevatedPayload/lib/validateIncludedInBlock.ts +0 -14
  16. package/src/elevatedPayload/lib/validateTransactionInBlock.ts +0 -43
  17. package/src/elevatedPayload/lib/validateTypedPayloadInBlock.ts +0 -32
  18. package/src/elevatedPayload/payloads/index.ts +0 -8
  19. package/src/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts +0 -28
  20. package/src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts +0 -28
  21. package/src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts +0 -28
  22. package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +0 -28
  23. package/src/elevatedPayload/payloads/validateHashInBlock.ts +0 -28
  24. package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +0 -29
  25. package/src/elevatedPayload/payloads/validateTimeInBlock.ts +0 -28
  26. package/src/elevatedPayload/payloads/validateTransferInBlock.ts +0 -28
  27. package/src/elevatedPayload/validatePayloadInBlock.ts +0 -53
  28. package/src/hydratedBlock/index.ts +0 -2
  29. package/src/hydratedBlock/validateHydratedBlock.ts +0 -49
  30. package/src/hydratedBlock/validators/Payloads.ts +0 -54
  31. package/src/hydratedBlock/validators/index.ts +0 -1
  32. package/src/hydratedBlockState/index.ts +0 -2
  33. package/src/hydratedBlockState/validateHydratedBlockState.ts +0 -44
  34. package/src/hydratedBlockState/validators/RequiredBalance.ts +0 -59
  35. package/src/hydratedBlockState/validators/index.ts +0 -1
  36. package/src/index.ts +0 -3
package/README.md CHANGED
@@ -1,215 +1,24 @@
1
1
  # @xyo-network/chain-validation
2
2
 
3
- [![logo][]](https://xyo.network)
3
+ [![npm][npm-badge]][npm-link]
4
+ [![license][license-badge]][license-link]
4
5
 
5
- [![npm-badge][]][npm-link]
6
- [![npm-downloads-badge][]][npm-link]
7
- [![jsdelivr-badge][]][jsdelivr-link]
8
- [![npm-license-badge][]](LICENSE)
9
- [![socket-badge][]][socket-link]
6
+ > XYO Layer One SDK Validation
10
7
 
11
- XYO Layer One SDK Validation
8
+ ## Install
12
9
 
13
-
14
-
15
- ## Reference
16
-
17
- **@xyo-network/chain-validation**
18
-
19
- ***
20
-
21
- ## Variables
22
-
23
- - [BlockAllowedPayloadSchemasValidator](#variables/BlockAllowedPayloadSchemasValidator)
24
- - [BlockFieldsValidator](#variables/BlockFieldsValidator)
25
- - [BlockPreviousHashValidator](#variables/BlockPreviousHashValidator)
26
- - [PayloadsInBlockValidator](#variables/PayloadsInBlockValidator)
27
- - [validateHydratedBlockState](#variables/validateHydratedBlockState)
28
- - [RequiredBalanceBlockStateValidator](#variables/RequiredBalanceBlockStateValidator)
29
-
30
- ## Functions
31
-
32
- - [validateBlock](#functions/validateBlock)
33
- - [BlockJsonSchemaValidator](#functions/BlockJsonSchemaValidator)
34
- - [validateHydratedBlock](#functions/validateHydratedBlock)
35
-
36
- ### functions
37
-
38
- ### <a id="BlockJsonSchemaValidator"></a>BlockJsonSchemaValidator
39
-
40
- [**@xyo-network/chain-validation**](#../README)
41
-
42
- ***
43
-
44
- ```ts
45
- function BlockJsonSchemaValidator(jsonSchema): BlockValidatorFunction;
10
+ ```sh
11
+ {{pm}} add {{name}}
46
12
  ```
47
13
 
48
- ## Parameters
49
-
50
- ### jsonSchema
51
-
52
- `AnySchema` = `BlockBoundWitnessWithStorageMetaJsonSchema`
53
-
54
- ## Returns
55
-
56
- `BlockValidatorFunction`
57
-
58
- ### <a id="validateBlock"></a>validateBlock
59
-
60
- [**@xyo-network/chain-validation**](#../README)
61
-
62
- ***
63
-
64
- ```ts
65
- function validateBlock(
66
- block,
67
- chainId?,
68
- additionalValidators?): Promise<BlockValidationError[]>;
69
- ```
70
-
71
- ## Parameters
72
-
73
- ### block
74
-
75
- `BlockBoundWitness`
76
-
77
- ### chainId?
78
-
79
- `ChainId`
80
-
81
- ### additionalValidators?
82
-
83
- `BlockValidatorFunction`[] = `[]`
84
-
85
- ## Returns
86
-
87
- `Promise`\<`BlockValidationError`[]\>
88
-
89
- ### <a id="validateHydratedBlock"></a>validateHydratedBlock
90
-
91
- [**@xyo-network/chain-validation**](#../README)
92
-
93
- ***
94
-
95
- ```ts
96
- function validateHydratedBlock(
97
- hydratedBlock,
98
- chainId?,
99
- additionalValidators?,
100
- additionalBlockValidators?): Promise<HydratedBlockValidationError[]>;
101
- ```
102
-
103
- ## Parameters
104
-
105
- ### hydratedBlock
106
-
107
- `HydratedBlock`
108
-
109
- ### chainId?
110
-
111
- `ChainId`
112
-
113
- ### additionalValidators?
114
-
115
- `HydratedBlockValidationFunction`[] = `[]`
116
-
117
- ### additionalBlockValidators?
118
-
119
- `BlockValidatorFunction`[] = `[]`
120
-
121
- ## Returns
122
-
123
- `Promise`\<`HydratedBlockValidationError`[]\>
124
-
125
- ### variables
126
-
127
- ### <a id="BlockAllowedPayloadSchemasValidator"></a>BlockAllowedPayloadSchemasValidator
128
-
129
- [**@xyo-network/chain-validation**](#../README)
130
-
131
- ***
132
-
133
- ```ts
134
- const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction;
135
- ```
136
-
137
- ### <a id="BlockFieldsValidator"></a>BlockFieldsValidator
138
-
139
- [**@xyo-network/chain-validation**](#../README)
140
-
141
- ***
142
-
143
- ```ts
144
- const BlockFieldsValidator: BlockValidatorFunction;
145
- ```
146
-
147
- ### <a id="BlockPreviousHashValidator"></a>BlockPreviousHashValidator
148
-
149
- [**@xyo-network/chain-validation**](#../README)
150
-
151
- ***
152
-
153
- ```ts
154
- const BlockPreviousHashValidator: BlockValidatorFunction;
155
- ```
156
-
157
- ### <a id="PayloadsInBlockValidator"></a>PayloadsInBlockValidator
158
-
159
- [**@xyo-network/chain-validation**](#../README)
160
-
161
- ***
162
-
163
- ```ts
164
- const PayloadsInBlockValidator: HydratedBlockValidationFunction;
165
- ```
166
-
167
- ### <a id="RequiredBalanceBlockStateValidator"></a>RequiredBalanceBlockStateValidator
168
-
169
- [**@xyo-network/chain-validation**](#../README)
170
-
171
- ***
172
-
173
- ```ts
174
- const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction;
175
- ```
176
-
177
- ### <a id="validateHydratedBlockState"></a>validateHydratedBlockState
178
-
179
- [**@xyo-network/chain-validation**](#../README)
180
-
181
- ***
182
-
183
- ```ts
184
- const validateHydratedBlockState: HydratedBlockStateValidationFunction;
185
- ```
186
-
187
-
188
- ## Maintainers
189
-
190
- - [Arie Trouw](https://github.com/arietrouw) ([arietrouw.com](https://arietrouw.com))
191
- - [Matt Jones](https://github.com/jonesmac)
192
- - [Joel Carter](https://github.com/JoelBCarter)
193
- - [Jordan Trouw](https://github.com/jordantrouw)
194
14
 
195
15
  ## License
196
16
 
197
- > See the [LICENSE](LICENSE) file for license details
198
-
199
- ## Credits
17
+ See the [LICENSE](LICENSE) file for license rights and limitations (LGPL-3.0-only).
200
18
 
201
- [Made with 🔥 and ❄️ by XYO](https://xyo.network)
202
19
 
203
- [logo]: https://cdn.xy.company/img/brand/XYO_full_colored.png
204
20
 
205
21
  [npm-badge]: https://img.shields.io/npm/v/@xyo-network/chain-validation.svg
206
22
  [npm-link]: https://www.npmjs.com/package/@xyo-network/chain-validation
207
-
208
- [npm-downloads-badge]: https://img.shields.io/npm/dw/@xyo-network/chain-validation
209
- [npm-license-badge]: https://img.shields.io/npm/l/@xyo-network/chain-validation
210
-
211
- [jsdelivr-badge]: https://data.jsdelivr.com/v1/package/npm/@xyo-network/chain-validation/badge
212
- [jsdelivr-link]: https://www.jsdelivr.com/package/npm/@xyo-network/chain-validation
213
-
214
- [socket-badge]: https://socket.dev/api/badge/npm/package/@xyo-network/chain-validation
215
- [socket-link]: https://socket.dev/npm/package/@xyo-network/chain-validation
23
+ [license-badge]: https://img.shields.io/npm/l/@xyo-network/chain-validation.svg
24
+ [license-link]: https://github.com/xylabs/sdk-js/blob/main/LICENSE
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/chain-validation",
4
- "version": "1.20.14",
4
+ "version": "1.20.16",
5
5
  "description": "XYO Layer One SDK Validation",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -23,52 +23,144 @@
23
23
  "exports": {
24
24
  ".": {
25
25
  "types": "./dist/neutral/index.d.ts",
26
- "source": "./src/index.ts",
27
26
  "default": "./dist/neutral/index.mjs"
28
27
  },
29
28
  "./package.json": "./package.json"
30
29
  },
31
30
  "module": "./dist/neutral/index.mjs",
32
- "source": "./src/index.ts",
33
31
  "types": "./dist/neutral/index.d.ts",
34
32
  "files": [
35
33
  "dist",
36
- "src",
37
34
  "!**/*.bench.*",
38
35
  "!**/*.spec.*",
39
- "!**/*.test.*"
36
+ "!**/*.test.*",
37
+ "README.md"
40
38
  ],
41
39
  "dependencies": {
42
- "@xylabs/sdk-js": "~5.0.90",
43
- "@xyo-network/boundwitness-model": "~5.3.20",
44
- "@xyo-network/sdk-js": "~5.3.20",
45
- "@xyo-network/xl1-sdk": "~1.26.11",
40
+ "@xylabs/sdk-js": "~5.0.95",
41
+ "@xyo-network/boundwitness-model": "~5.3.30",
42
+ "@xyo-network/sdk-js": "~5.3.30",
43
+ "@xyo-network/xl1-sdk": "~1.26.19",
46
44
  "ajv": "~8.18.0"
47
45
  },
48
46
  "devDependencies": {
49
- "@types/node": "~25.5.0",
50
- "@xylabs/sdk-js": "~5.0.90",
51
- "@xylabs/ts-scripts-common": "~7.5.11",
52
- "@xylabs/ts-scripts-yarn3": "~7.5.11",
53
- "@xylabs/tsconfig": "~7.5.11",
54
- "@xyo-network/chain-protocol": "~1.20.14",
55
- "@xyo-network/sdk-js": "~5.3.20",
56
- "axios": "^1.13.6",
47
+ "@opentelemetry/api": "^1",
48
+ "@types/node": "~25.5.2",
49
+ "@xylabs/ts-scripts-common": "~7.9.3",
50
+ "@xylabs/ts-scripts-pnpm": "~7.9.3",
51
+ "@xylabs/tsconfig": "~7.9.3",
52
+ "@xyo-network/account": "~5.3.30",
53
+ "@xyo-network/account-model": "~5.3.30",
54
+ "@xyo-network/api-models": "~5.3.30",
55
+ "@xyo-network/archivist-abstract": "~5.3.30",
56
+ "@xyo-network/archivist-generic": "~5.3.30",
57
+ "@xyo-network/archivist-memory": "~5.3.30",
58
+ "@xyo-network/archivist-model": "~5.3.30",
59
+ "@xyo-network/archivist-view": "~5.3.30",
60
+ "@xyo-network/archivist-wrapper": "~5.3",
61
+ "@xyo-network/boundwitness-builder": "~5.3.30",
62
+ "@xyo-network/boundwitness-validator": "~5.3.30",
63
+ "@xyo-network/bridge-abstract": "~5.3.30",
64
+ "@xyo-network/bridge-model": "~5.3.30",
65
+ "@xyo-network/config-payload-plugin": "~5.3.30",
66
+ "@xyo-network/data": "~5.3.30",
67
+ "@xyo-network/diviner-abstract": "~5.3",
68
+ "@xyo-network/diviner-boundwitness-memory": "~5.3.30",
69
+ "@xyo-network/diviner-identity": "~5.3.30",
70
+ "@xyo-network/diviner-model": "~5.3.30",
71
+ "@xyo-network/diviner-payload-generic": "~5.3.30",
72
+ "@xyo-network/diviner-payload-model": "~5.3.30",
73
+ "@xyo-network/diviner-wrapper": "~5.3",
74
+ "@xyo-network/dns": "~5.3.30",
75
+ "@xyo-network/domain-payload-plugin": "~5.3.30",
76
+ "@xyo-network/elliptic": "~5.3.30",
77
+ "@xyo-network/hash": "~5.3.30",
78
+ "@xyo-network/huri": "~5.3.30",
79
+ "@xyo-network/manifest-model": "~5.3.30",
80
+ "@xyo-network/module-abstract": "~5.3.30",
81
+ "@xyo-network/module-model": "~5.3.30",
82
+ "@xyo-network/module-resolver": "~5.3.30",
83
+ "@xyo-network/module-wrapper": "~5.3",
84
+ "@xyo-network/network": "~5.3.30",
85
+ "@xyo-network/node-abstract": "~5.3.30",
86
+ "@xyo-network/node-memory": "~5.3.30",
87
+ "@xyo-network/node-model": "~5.3.30",
88
+ "@xyo-network/node-view": "~5.3.30",
89
+ "@xyo-network/node-wrapper": "~5.3",
90
+ "@xyo-network/payload-builder": "~5.3.30",
91
+ "@xyo-network/payload-model": "~5.3.30",
92
+ "@xyo-network/payload-validator": "~5.3.30",
93
+ "@xyo-network/previous-hash-store-model": "~5.3.30",
94
+ "@xyo-network/sentinel-abstract": "~5.3.30",
95
+ "@xyo-network/sentinel-memory": "~5.3.30",
96
+ "@xyo-network/sentinel-model": "~5.3.30",
97
+ "@xyo-network/wallet-model": "~5.3.30",
98
+ "@xyo-network/wasm": "~5.3.30",
99
+ "@xyo-network/witness-adhoc": "~5.3.30",
100
+ "@xyo-network/witness-model": "~5.3.30",
101
+ "axios": "^1.14.0",
102
+ "esbuild": ">=0.18",
57
103
  "ethers": "^6.16.0",
104
+ "mongodb": "^7.1.1",
105
+ "pako": "~2.1.0",
58
106
  "typescript": "~5.9.3",
59
- "vitest": "^4.1.2",
60
- "zod": "^4.3.6"
107
+ "vite": "^8.0.7",
108
+ "vitest": "^4.1.3",
109
+ "zod": "^4.3.6",
110
+ "@xyo-network/chain-protocol": "~1.20.16"
61
111
  },
62
112
  "peerDependencies": {
63
- "@xyo-network/sdk-js": "~5.3.2",
64
- "axios": "^1",
65
- "zod": "^4"
113
+ "@xyo-network/account": "~5.3.30",
114
+ "@xyo-network/account-model": "~5.3.30",
115
+ "@xyo-network/api-models": "~5.3.30",
116
+ "@xyo-network/archivist-abstract": "~5.3.30",
117
+ "@xyo-network/archivist-generic": "~5.3.30",
118
+ "@xyo-network/archivist-memory": "~5.3.30",
119
+ "@xyo-network/archivist-model": "~5.3.30",
120
+ "@xyo-network/archivist-view": "~5.3.30",
121
+ "@xyo-network/boundwitness-builder": "~5.3.30",
122
+ "@xyo-network/boundwitness-validator": "~5.3.30",
123
+ "@xyo-network/bridge-abstract": "~5.3.30",
124
+ "@xyo-network/bridge-model": "~5.3.30",
125
+ "@xyo-network/config-payload-plugin": "~5.3.30",
126
+ "@xyo-network/data": "~5.3.30",
127
+ "@xyo-network/diviner-boundwitness-memory": "~5.3.30",
128
+ "@xyo-network/diviner-identity": "~5.3.30",
129
+ "@xyo-network/diviner-model": "~5.3.30",
130
+ "@xyo-network/diviner-payload-generic": "~5.3.30",
131
+ "@xyo-network/diviner-payload-model": "~5.3.30",
132
+ "@xyo-network/dns": "~5.3.30",
133
+ "@xyo-network/domain-payload-plugin": "~5.3.30",
134
+ "@xyo-network/elliptic": "~5.3.30",
135
+ "@xyo-network/hash": "~5.3.30",
136
+ "@xyo-network/huri": "~5.3.30",
137
+ "@xyo-network/manifest-model": "~5.3.30",
138
+ "@xyo-network/module-abstract": "~5.3.30",
139
+ "@xyo-network/module-model": "~5.3.30",
140
+ "@xyo-network/module-resolver": "~5.3.30",
141
+ "@xyo-network/network": "~5.3.30",
142
+ "@xyo-network/node-abstract": "~5.3.30",
143
+ "@xyo-network/node-memory": "~5.3.30",
144
+ "@xyo-network/node-model": "~5.3.30",
145
+ "@xyo-network/node-view": "~5.3.30",
146
+ "@xyo-network/payload-builder": "~5.3.30",
147
+ "@xyo-network/payload-model": "~5.3.30",
148
+ "@xyo-network/payload-validator": "~5.3.30",
149
+ "@xyo-network/previous-hash-store-model": "~5.3.30",
150
+ "@xyo-network/sentinel-abstract": "~5.3.30",
151
+ "@xyo-network/sentinel-memory": "~5.3.30",
152
+ "@xyo-network/sentinel-model": "~5.3.30",
153
+ "@xyo-network/wallet-model": "~5.3.30",
154
+ "@xyo-network/wasm": "~5.3.30",
155
+ "@xyo-network/witness-adhoc": "~5.3.30",
156
+ "@xyo-network/witness-model": "~5.3.30",
157
+ "pako": "~2.1.0"
66
158
  },
67
159
  "engines": {
68
- "node": ">=22.3 <23"
160
+ "node": ">=24"
69
161
  },
70
162
  "engineStrict": true,
71
163
  "publishConfig": {
72
164
  "access": "restricted"
73
165
  }
74
- }
166
+ }
@@ -1,2 +0,0 @@
1
- export * from './validateBlock.ts'
2
- export * from './validators/index.ts'
@@ -1,39 +0,0 @@
1
- import { ZERO_HASH } from '@xylabs/sdk-js'
2
- import type { WithStorageMeta } from '@xyo-network/sdk-js'
3
- import type {
4
- BaseContext,
5
- BlockBoundWitness, BlockValidatorFunction, ChainId,
6
- } from '@xyo-network/xl1-sdk'
7
- import { BlockValidationError, BoundWitnessSignaturesValidator } from '@xyo-network/xl1-sdk'
8
-
9
- import {
10
- BlockAllowedPayloadSchemasValidator,
11
- BlockFieldsValidator, BlockPreviousHashValidator,
12
- } from './validators/index.ts'
13
-
14
- export const validateBlock = async (
15
- context: BaseContext,
16
- block: BlockBoundWitness,
17
- chainId?: ChainId,
18
- additionalValidators: BlockValidatorFunction[] = [],
19
- ): Promise<BlockValidationError[]> => {
20
- const errors: BlockValidationError[] = []
21
- try {
22
- const bwErrors = await BoundWitnessSignaturesValidator(block)
23
- for (const bwError of bwErrors) {
24
- errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'BoundWitness validation failed', bwError))
25
- }
26
- const validators: BlockValidatorFunction[] = [
27
- BlockFieldsValidator,
28
- BlockPreviousHashValidator,
29
- BlockAllowedPayloadSchemasValidator,
30
- ...additionalValidators,
31
- ]
32
- errors.push(...(await Promise.all(
33
- validators.map(validator => validator(context, block, chainId)),
34
- )).flat())
35
- } catch (ex) {
36
- errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted', ex))
37
- }
38
- return errors
39
- }
@@ -1,33 +0,0 @@
1
- import { ZERO_HASH } from '@xylabs/sdk-js'
2
- import type { WithStorageMeta } from '@xyo-network/sdk-js'
3
- import type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'
4
- import {
5
- BlockValidationError,
6
- isAllowedBlockPayloadSchema,
7
- } from '@xyo-network/xl1-sdk'
8
-
9
- export const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (
10
- context,
11
- block,
12
- ) => {
13
- const errors: BlockValidationError[] = []
14
- try {
15
- for (const schema of block.payload_schemas) {
16
- if (!isAllowedBlockPayloadSchema(schema)) {
17
- errors.push(new BlockValidationError(
18
- (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
19
- block,
20
- `payload schema not allowed in block: ${schema}`,
21
- ))
22
- }
23
- }
24
- } catch (ex) {
25
- errors.push(new BlockValidationError(
26
- (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
27
- block,
28
- `validation excepted: ${ex}`,
29
- ex,
30
- ))
31
- }
32
- return errors
33
- }
@@ -1,47 +0,0 @@
1
- import type { Hash } from '@xylabs/sdk-js'
2
- import { isDefined, ZERO_HASH } from '@xylabs/sdk-js'
3
- import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
4
- import type { WithStorageMeta } from '@xyo-network/sdk-js'
5
- import type {
6
- BaseContext,
7
- BlockBoundWitness, BlockValidatorFunction, ChainId,
8
- } from '@xyo-network/xl1-sdk'
9
- import { BlockValidationError } from '@xyo-network/xl1-sdk'
10
-
11
- export const BlockFieldsValidator: BlockValidatorFunction = (
12
- context: BaseContext,
13
- block: BlockBoundWitness,
14
- chainId?: ChainId,
15
- ) => {
16
- const errors: BlockValidationError[] = []
17
- try {
18
- if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {
19
- errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))
20
- }
21
-
22
- // get transaction hashes
23
- const txHashes: Hash[] = []
24
- for (let i = 0; i < block.payload_hashes.length; i++) {
25
- if (block.payload_schemas[i] === BoundWitnessSchema) {
26
- txHashes.push(block.payload_hashes[i])
27
- }
28
- }
29
-
30
- // check if transaction hashes are unique
31
- if (new Set(txHashes).size < txHashes.length) {
32
- errors.push(new BlockValidationError(
33
- (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
34
- block,
35
- `Duplicate Transaction Hashes: ${txHashes}`,
36
- ))
37
- }
38
- } catch (ex) {
39
- errors.push(new BlockValidationError(
40
- (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
41
- block,
42
- `validation excepted: ${ex}`,
43
- ex,
44
- ))
45
- }
46
- return errors
47
- }
@@ -1,40 +0,0 @@
1
- import { ZERO_HASH } from '@xylabs/sdk-js'
2
- import type { WithStorageMeta } from '@xyo-network/sdk-js'
3
- import type {
4
- BaseContext, BlockBoundWitness, BlockValidatorFunction,
5
- } from '@xyo-network/xl1-sdk'
6
- import { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError } from '@xyo-network/xl1-sdk'
7
- import type { AnySchema } from 'ajv'
8
- import { Ajv } from 'ajv'
9
-
10
- export const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => {
11
- const ajv = new Ajv({ allErrors: true, strict: true })
12
- const validate = ajv.compile(jsonSchema)
13
- return async (
14
- context: BaseContext,
15
- block: BlockBoundWitness,
16
- ) => {
17
- const errors: BlockValidationError[] = []
18
- try {
19
- await validate(block)
20
- if ((validate.errors ?? []).length > 0) {
21
- const error = new BlockValidationError(
22
- (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
23
- block,
24
- `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\n' })}`,
25
- )
26
- error.cause = validate.errors
27
- errors.push(error)
28
- }
29
- } catch (ex) {
30
- const error = new BlockValidationError(
31
- (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
32
- block,
33
- `validation excepted: ${ex}`,
34
- )
35
- error.cause = ex
36
- errors.push(error)
37
- }
38
- return errors
39
- }
40
- }
@@ -1,37 +0,0 @@
1
- import { isHash, ZERO_HASH } from '@xylabs/sdk-js'
2
- import type { WithStorageMeta } from '@xyo-network/sdk-js'
3
- import type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'
4
- import { BlockValidationError } from '@xyo-network/xl1-sdk'
5
-
6
- export const BlockPreviousHashValidator: BlockValidatorFunction = (
7
- context,
8
- block,
9
- ) => {
10
- const errors: BlockValidationError[] = []
11
- try {
12
- const blockNumber = block.block
13
- if (blockNumber > 0n) {
14
- // if this is not the first block, validate previous hashes
15
- if (!isHash(block.previous)) {
16
- errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))
17
- }
18
- } else if (blockNumber === 0) {
19
- // if this is the first block, validate previous hashes
20
- if (block.previous !== null) {
21
- errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))
22
- }
23
- } else {
24
- // we have a negative block number
25
- errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))
26
- }
27
- } catch (ex) {
28
- const error = new BlockValidationError(
29
- (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
30
- block,
31
- `Failed BlockPreviousHashValidator: ${ex}`,
32
- )
33
- error.cause = ex
34
- errors.push(error)
35
- }
36
- return errors
37
- }
@@ -1,4 +0,0 @@
1
- export * from './AllowedPayloadSchemas.ts'
2
- export * from './Fields.ts'
3
- export * from './JsonSchema.ts'
4
- export * from './PreviousHash.ts'
@@ -1 +0,0 @@
1
- export * from './validatePayloadInBlock.ts'
@@ -1,6 +0,0 @@
1
- export * from './isElevatedFromBlock.ts'
2
- export * from './validateElevatedFromBlock.ts'
3
- export * from './validateElevatedFromTransaction.ts'
4
- export * from './validateIncludedInBlock.ts'
5
- export * from './validateTransactionInBlock.ts'
6
- export * from './validateTypedPayloadInBlock.ts'
@@ -1,12 +0,0 @@
1
- import type { Payload, WithHashMeta } from '@xyo-network/sdk-js'
2
- import { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'
3
-
4
- export const isElevatedFromBlock = (payload: WithHashMeta<Payload>, [, payloads]: HydratedBlock): boolean => {
5
- const txs = payloads.filter(p => isTransactionBoundWitness(p))
6
- for (const tx of txs) {
7
- if (tx.payload_hashes.includes(payload._hash)) {
8
- return false
9
- }
10
- }
11
- return true
12
- }
@@ -1,25 +0,0 @@
1
- import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'
2
- import { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'
3
-
4
- export const validateElevatedFromBlock: InBlockPayloadValidationFunction = (
5
- context,
6
- payload,
7
- block,
8
- ) => {
9
- const errors: InBlockPayloadValidationError[] = []
10
- try {
11
- const txs = transactionsFromHydratedBlock(block)
12
- const allTxPayloadHashes = new Set(txs.flatMap(tx => tx.payload_hashes))
13
- if (allTxPayloadHashes.has(payload._hash)) {
14
- errors.push(new InBlockPayloadValidationError(
15
- block[0]?._hash,
16
- block,
17
- payload,
18
- `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`,
19
- ))
20
- }
21
- } catch (ex) {
22
- errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${ex}`, ex))
23
- }
24
- return errors
25
- }