@xyo-network/chain-validation 1.11.0 → 1.12.1

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.
@@ -1,5 +1,4 @@
1
- import type { Hex } from '@xylabs/hex';
2
- import type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol';
1
+ import type { BlockBoundWitness, BlockValidatorFunction, Chain } from '@xyo-network/xl1-protocol';
3
2
  import { BlockValidationError } from '@xyo-network/xl1-protocol';
4
- export declare const validateBlock: (block: BlockBoundWitness, chainId?: Hex, additionalValidators?: BlockValidatorFunction[]) => Promise<BlockValidationError[]>;
3
+ export declare const validateBlock: (block: BlockBoundWitness, chainId?: Chain, additionalValidators?: BlockValidatorFunction[]) => Promise<BlockValidationError[]>;
5
4
  //# sourceMappingURL=validateBlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validateBlock.d.ts","sourceRoot":"","sources":["../../../src/block/validateBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAGtC,OAAO,KAAK,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAC1F,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAQhE,eAAO,MAAM,aAAa,GACxB,OAAO,iBAAiB,EACxB,UAAU,GAAG,EACb,uBAAsB,sBAAsB,EAAO,KAClD,OAAO,CAAC,oBAAoB,EAAE,CAoBhC,CAAA"}
1
+ {"version":3,"file":"validateBlock.d.ts","sourceRoot":"","sources":["../../../src/block/validateBlock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EAAE,sBAAsB,EAAE,KAAK,EACjD,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAQhE,eAAO,MAAM,aAAa,GACxB,OAAO,iBAAiB,EACxB,UAAU,KAAK,EACf,uBAAsB,sBAAsB,EAAO,KAClD,OAAO,CAAC,oBAAoB,EAAE,CAoBhC,CAAA"}
@@ -1,3 +1,3 @@
1
- import { type BlockValidatorFunction } from '@xyo-network/xl1-protocol';
1
+ import type { BlockValidatorFunction } from '@xyo-network/xl1-protocol';
2
2
  export declare const BlockFieldsValidator: BlockValidatorFunction;
3
3
  //# sourceMappingURL=Fields.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/Fields.ts"],"names":[],"mappings":"AAKA,OAAO,EACyC,KAAK,sBAAsB,EAC1E,MAAM,2BAA2B,CAAA;AAElC,eAAO,MAAM,oBAAoB,EAAE,sBAmClC,CAAA"}
1
+ {"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/Fields.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACS,sBAAsB,EAC1C,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,oBAAoB,EAAE,sBAmClC,CAAA"}
@@ -1,5 +1,4 @@
1
- import type { Hex } from '@xylabs/hex';
2
- import type { BlockValidatorFunction, HydratedBlock, HydratedBlockValidationFunction } from '@xyo-network/xl1-protocol';
1
+ import type { BlockValidatorFunction, Chain, HydratedBlock, HydratedBlockValidationFunction } from '@xyo-network/xl1-protocol';
3
2
  import { HydratedBlockValidationError } from '@xyo-network/xl1-protocol';
4
- export declare const validateHydratedBlock: (hydratedBlock: HydratedBlock, chainId?: Hex, additionalValidators?: HydratedBlockValidationFunction[], additionalBlockValidators?: BlockValidatorFunction[]) => Promise<HydratedBlockValidationError[]>;
3
+ export declare const validateHydratedBlock: (hydratedBlock: HydratedBlock, chainId?: Chain, additionalValidators?: HydratedBlockValidationFunction[], additionalBlockValidators?: BlockValidatorFunction[]) => Promise<HydratedBlockValidationError[]>;
5
4
  //# sourceMappingURL=validateHydratedBlock.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validateHydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlock/validateHydratedBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAA;AAEtC,OAAO,KAAK,EACV,sBAAsB,EAAE,aAAa,EAAE,+BAA+B,EACvE,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAMxE,eAAO,MAAM,qBAAqB,GAChC,eAAe,aAAa,EAC5B,UAAU,GAAG,EACb,uBAAsB,+BAA+B,EAAO,EAC5D,4BAA2B,sBAAsB,EAAO,4CA0BzD,CAAA"}
1
+ {"version":3,"file":"validateHydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlock/validateHydratedBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,+BAA+B,EAC9E,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAMxE,eAAO,MAAM,qBAAqB,GAChC,eAAe,aAAa,EAC5B,UAAU,KAAK,EACf,uBAAsB,+BAA+B,EAAO,EAC5D,4BAA2B,sBAAsB,EAAO,4CA0BzD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,sCAAsC,EACvC,MAAM,2BAA2B,CAAA;AAMlC,eAAO,MAAM,0BAA0B,EAAE,sCAiCxC,CAAA"}
1
+ {"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,sCAAsC,EACvC,MAAM,2BAA2B,CAAA;AAMlC,eAAO,MAAM,0BAA0B,EAAE,sCAiCxC,CAAA"}
@@ -1,3 +1,6 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
1
4
  // src/block/validateBlock.ts
2
5
  import { ZERO_HASH as ZERO_HASH5 } from "@xylabs/hex";
3
6
  import { BlockValidationError as BlockValidationError5 } from "@xyo-network/xl1-protocol";
@@ -5,41 +8,27 @@ import { BoundWitnessSignaturesValidator } from "@xyo-network/xl1-validation";
5
8
 
6
9
  // src/block/validators/AllowedPayloadSchemas.ts
7
10
  import { ZERO_HASH } from "@xylabs/hex";
8
- import {
9
- BlockValidationError,
10
- isAllowedBlockPayloadSchema
11
- } from "@xyo-network/xl1-protocol";
12
- var BlockAllowedPayloadSchemasValidator = (block) => {
11
+ import { BlockValidationError, isAllowedBlockPayloadSchema } from "@xyo-network/xl1-protocol";
12
+ var BlockAllowedPayloadSchemasValidator = /* @__PURE__ */ __name((block) => {
13
13
  const errors = [];
14
14
  try {
15
15
  for (const schema of block.payload_schemas) {
16
16
  if (!isAllowedBlockPayloadSchema(schema)) {
17
- errors.push(new BlockValidationError(
18
- block?._hash ?? ZERO_HASH,
19
- block,
20
- `payload schema not allowed in block: ${schema}`
21
- ));
17
+ errors.push(new BlockValidationError(block?._hash ?? ZERO_HASH, block, `payload schema not allowed in block: ${schema}`));
22
18
  }
23
19
  }
24
20
  } catch (ex) {
25
- errors.push(new BlockValidationError(
26
- block?._hash ?? ZERO_HASH,
27
- block,
28
- `validation excepted: ${ex}`,
29
- ex
30
- ));
21
+ errors.push(new BlockValidationError(block?._hash ?? ZERO_HASH, block, `validation excepted: ${ex}`, ex));
31
22
  }
32
23
  return errors;
33
- };
24
+ }, "BlockAllowedPayloadSchemasValidator");
34
25
 
35
26
  // src/block/validators/Fields.ts
36
27
  import { ZERO_HASH as ZERO_HASH2 } from "@xylabs/hex";
37
28
  import { isDefined } from "@xylabs/typeof";
38
29
  import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
39
- import {
40
- BlockValidationError as BlockValidationError2
41
- } from "@xyo-network/xl1-protocol";
42
- var BlockFieldsValidator = (block, chainId) => {
30
+ import { BlockValidationError as BlockValidationError2 } from "@xyo-network/xl1-protocol";
31
+ var BlockFieldsValidator = /* @__PURE__ */ __name((block, chainId) => {
43
32
  const errors = [];
44
33
  try {
45
34
  if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {
@@ -52,63 +41,49 @@ var BlockFieldsValidator = (block, chainId) => {
52
41
  }
53
42
  }
54
43
  if (new Set(txHashes).size < txHashes.length) {
55
- errors.push(new BlockValidationError2(
56
- block?._hash ?? ZERO_HASH2,
57
- block,
58
- `Duplicate Transaction Hashes: ${txHashes}`
59
- ));
44
+ errors.push(new BlockValidationError2(block?._hash ?? ZERO_HASH2, block, `Duplicate Transaction Hashes: ${txHashes}`));
60
45
  }
61
46
  } catch (ex) {
62
- errors.push(new BlockValidationError2(
63
- block?._hash ?? ZERO_HASH2,
64
- block,
65
- `validation excepted: ${ex}`,
66
- ex
67
- ));
47
+ errors.push(new BlockValidationError2(block?._hash ?? ZERO_HASH2, block, `validation excepted: ${ex}`, ex));
68
48
  }
69
49
  return errors;
70
- };
50
+ }, "BlockFieldsValidator");
71
51
 
72
52
  // src/block/validators/JsonSchema.ts
73
53
  import { ZERO_HASH as ZERO_HASH3 } from "@xylabs/hex";
74
- import {
75
- BlockValidationError as BlockValidationError3
76
- } from "@xyo-network/xl1-protocol";
54
+ import { BlockValidationError as BlockValidationError3 } from "@xyo-network/xl1-protocol";
77
55
  import { BlockBoundWitnessWithStorageMetaJsonSchema } from "@xyo-network/xl1-schema";
78
56
  import { Ajv } from "ajv";
79
- var BlockJsonSchemaValidator = (jsonSchema = BlockBoundWitnessWithStorageMetaJsonSchema) => {
80
- const ajv = new Ajv({ allErrors: true, strict: true });
57
+ var BlockJsonSchemaValidator = /* @__PURE__ */ __name((jsonSchema = BlockBoundWitnessWithStorageMetaJsonSchema) => {
58
+ const ajv = new Ajv({
59
+ allErrors: true,
60
+ strict: true
61
+ });
81
62
  const validate = ajv.compile(jsonSchema);
82
63
  return async (block) => {
83
64
  const errors = [];
84
65
  try {
85
66
  await validate(block);
86
67
  if ((validate.errors ?? []).length > 0) {
87
- const error = new BlockValidationError3(
88
- block?._hash ?? ZERO_HASH3,
89
- block,
90
- `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: "\n" })}`
91
- );
68
+ const error = new BlockValidationError3(block?._hash ?? ZERO_HASH3, block, `failed JSON schema validation: ${ajv.errorsText(validate.errors, {
69
+ separator: "\n"
70
+ })}`);
92
71
  error.cause = validate.errors;
93
72
  errors.push(error);
94
73
  }
95
74
  } catch (ex) {
96
- const error = new BlockValidationError3(
97
- block?._hash ?? ZERO_HASH3,
98
- block,
99
- `validation excepted: ${ex}`
100
- );
75
+ const error = new BlockValidationError3(block?._hash ?? ZERO_HASH3, block, `validation excepted: ${ex}`);
101
76
  error.cause = ex;
102
77
  errors.push(error);
103
78
  }
104
79
  return errors;
105
80
  };
106
- };
81
+ }, "BlockJsonSchemaValidator");
107
82
 
108
83
  // src/block/validators/PreviousHash.ts
109
84
  import { isHash, ZERO_HASH as ZERO_HASH4 } from "@xylabs/hex";
110
85
  import { BlockValidationError as BlockValidationError4 } from "@xyo-network/xl1-protocol";
111
- var BlockPreviousHashValidator = (block) => {
86
+ var BlockPreviousHashValidator = /* @__PURE__ */ __name((block) => {
112
87
  const errors = [];
113
88
  try {
114
89
  const blockNumber = block.block;
@@ -124,19 +99,15 @@ var BlockPreviousHashValidator = (block) => {
124
99
  errors.push(new BlockValidationError4(block?._hash ?? ZERO_HASH4, block, "invalid block number"));
125
100
  }
126
101
  } catch (ex) {
127
- const error = new BlockValidationError4(
128
- block?._hash ?? ZERO_HASH4,
129
- block,
130
- `Failed BlockPreviousHashValidator: ${ex}`
131
- );
102
+ const error = new BlockValidationError4(block?._hash ?? ZERO_HASH4, block, `Failed BlockPreviousHashValidator: ${ex}`);
132
103
  error.cause = ex;
133
104
  errors.push(error);
134
105
  }
135
106
  return errors;
136
- };
107
+ }, "BlockPreviousHashValidator");
137
108
 
138
109
  // src/block/validateBlock.ts
139
- var validateBlock = async (block, chainId, additionalValidators = []) => {
110
+ var validateBlock = /* @__PURE__ */ __name(async (block, chainId, additionalValidators = []) => {
140
111
  const errors = [];
141
112
  try {
142
113
  const bwErrors = await BoundWitnessSignaturesValidator(block);
@@ -149,14 +120,12 @@ var validateBlock = async (block, chainId, additionalValidators = []) => {
149
120
  BlockAllowedPayloadSchemasValidator,
150
121
  ...additionalValidators
151
122
  ];
152
- errors.push(...(await Promise.all(
153
- validators.map((validator) => validator(block, chainId))
154
- )).flat());
123
+ errors.push(...(await Promise.all(validators.map((validator) => validator(block, chainId)))).flat());
155
124
  } catch (ex) {
156
125
  errors.push(new BlockValidationError5(block?._hash ?? ZERO_HASH5, block, "validation excepted", ex));
157
126
  }
158
127
  return errors;
159
- };
128
+ }, "validateBlock");
160
129
 
161
130
  // src/hydratedBlock/validateHydratedBlock.ts
162
131
  import { ZERO_HASH as ZERO_HASH13 } from "@xylabs/hex";
@@ -171,16 +140,11 @@ import { HydratedBlockValidationError } from "@xyo-network/xl1-protocol";
171
140
  import { ZERO_HASH as ZERO_HASH11 } from "@xylabs/hex";
172
141
  import { BoundWitnessSchema as BoundWitnessSchema2 } from "@xyo-network/boundwitness-model";
173
142
  import { SchemaSchema } from "@xyo-network/schema-payload-plugin";
174
- import {
175
- ChainStakeIntentSchema,
176
- HashSchema,
177
- InBlockPayloadValidationError as InBlockPayloadValidationError8,
178
- TransferSchema
179
- } from "@xyo-network/xl1-protocol";
143
+ import { ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError as InBlockPayloadValidationError8, TransferSchema } from "@xyo-network/xl1-protocol";
180
144
 
181
145
  // src/elevatedPayload/lib/isElevatedFromBlock.ts
182
146
  import { isTransactionBoundWitness } from "@xyo-network/xl1-protocol";
183
- var isElevatedFromBlock = (payload, [, payloads]) => {
147
+ var isElevatedFromBlock = /* @__PURE__ */ __name((payload, [, payloads]) => {
184
148
  const txs = payloads.filter((p) => isTransactionBoundWitness(p));
185
149
  for (const tx of txs) {
186
150
  if (tx.payload_hashes.includes(payload._hash)) {
@@ -188,34 +152,29 @@ var isElevatedFromBlock = (payload, [, payloads]) => {
188
152
  }
189
153
  }
190
154
  return true;
191
- };
155
+ }, "isElevatedFromBlock");
192
156
 
193
157
  // src/elevatedPayload/lib/validateElevatedFromBlock.ts
194
158
  import { InBlockPayloadValidationError } from "@xyo-network/xl1-protocol";
195
159
  import { transactionsFromHydratedBlock } from "@xyo-network/xl1-protocol-sdk";
196
- var validateElevatedFromBlock = (payload, block) => {
160
+ var validateElevatedFromBlock = /* @__PURE__ */ __name((payload, block) => {
197
161
  const errors = [];
198
162
  try {
199
163
  const txs = transactionsFromHydratedBlock(block);
200
164
  const allTxPayloadHashes = new Set(txs.flatMap((tx) => tx.payload_hashes));
201
165
  if (allTxPayloadHashes.has(payload._hash)) {
202
- errors.push(new InBlockPayloadValidationError(
203
- block[0]?._hash,
204
- block,
205
- payload,
206
- `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`
207
- ));
166
+ errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`));
208
167
  }
209
168
  } catch (ex) {
210
169
  errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${ex}`, ex));
211
170
  }
212
171
  return errors;
213
- };
172
+ }, "validateElevatedFromBlock");
214
173
 
215
174
  // src/elevatedPayload/lib/validateElevatedFromTransaction.ts
216
175
  import { InBlockPayloadValidationError as InBlockPayloadValidationError2 } from "@xyo-network/xl1-protocol";
217
176
  import { transactionsFromHydratedBlock as transactionsFromHydratedBlock2 } from "@xyo-network/xl1-protocol-sdk";
218
- var validateElevatedFromTransaction = (payload, block) => {
177
+ var validateElevatedFromTransaction = /* @__PURE__ */ __name((payload, block) => {
219
178
  const errors = [];
220
179
  try {
221
180
  const txs = transactionsFromHydratedBlock2(block);
@@ -228,23 +187,17 @@ var validateElevatedFromTransaction = (payload, block) => {
228
187
  errors.push(new InBlockPayloadValidationError2(payload._hash, block, payload, "No Transactions in block"));
229
188
  }
230
189
  } catch (ex) {
231
- errors.push(new InBlockPayloadValidationError2(
232
- payload._hash,
233
- block,
234
- payload,
235
- `Failed validateElevatedFromTransaction: ${ex}`,
236
- ex
237
- ));
190
+ errors.push(new InBlockPayloadValidationError2(payload._hash, block, payload, `Failed validateElevatedFromTransaction: ${ex}`, ex));
238
191
  }
239
192
  return errors;
240
- };
193
+ }, "validateElevatedFromTransaction");
241
194
 
242
195
  // src/elevatedPayload/lib/validateTransactionInBlock.ts
243
196
  import { ZERO_HASH as ZERO_HASH6 } from "@xylabs/hex";
244
197
  import { isStorageMeta } from "@xyo-network/payload-model";
245
198
  import { InBlockPayloadValidationError as InBlockPayloadValidationError3, isTransactionBoundWitness as isTransactionBoundWitness2 } from "@xyo-network/xl1-protocol";
246
199
  import { BoundWitnessSignaturesValidator as BoundWitnessSignaturesValidator2 } from "@xyo-network/xl1-validation";
247
- var validateTransactionInBlock = async (payload, block) => {
200
+ var validateTransactionInBlock = /* @__PURE__ */ __name(async (payload, block) => {
248
201
  const errors = [];
249
202
  try {
250
203
  if (isTransactionBoundWitness2(payload) && isStorageMeta(payload)) {
@@ -259,11 +212,11 @@ var validateTransactionInBlock = async (payload, block) => {
259
212
  errors.push(new InBlockPayloadValidationError3(payload._hash ?? ZERO_HASH6, block, payload, `validation excepted: ${ex}`, ex));
260
213
  }
261
214
  return errors;
262
- };
215
+ }, "validateTransactionInBlock");
263
216
 
264
217
  // src/elevatedPayload/lib/validateTypedPayloadInBlock.ts
265
218
  import { isStorageMeta as isStorageMeta2 } from "@xyo-network/payload-model";
266
- var validateTypedPayloadInBlock = async (payload, block, identityFunction) => {
219
+ var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (payload, block, identityFunction) => {
267
220
  const errors = [];
268
221
  try {
269
222
  if (identityFunction(payload) && isStorageMeta2(payload)) {
@@ -279,12 +232,12 @@ var validateTypedPayloadInBlock = async (payload, block, identityFunction) => {
279
232
  errors.push(new Error(`Failed validateTypedPayloadInBlock: ${ex}`));
280
233
  }
281
234
  return errors;
282
- };
235
+ }, "validateTypedPayloadInBlock");
283
236
 
284
237
  // src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts
285
238
  import { ZERO_HASH as ZERO_HASH7 } from "@xylabs/hex";
286
239
  import { InBlockPayloadValidationError as InBlockPayloadValidationError4, isChainStakeIntent } from "@xyo-network/xl1-protocol";
287
- var validateChainStakeIntentInBlock = async (payload, block) => {
240
+ var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (payload, block) => {
288
241
  const errors = [];
289
242
  try {
290
243
  const typedErrors = await validateTypedPayloadInBlock(payload, block, isChainStakeIntent);
@@ -292,21 +245,15 @@ var validateChainStakeIntentInBlock = async (payload, block) => {
292
245
  errors.push(new InBlockPayloadValidationError4(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
293
246
  }
294
247
  } catch (ex) {
295
- errors.push(new InBlockPayloadValidationError4(
296
- block[0]?._hash ?? ZERO_HASH7,
297
- block,
298
- payload,
299
- `validation excepted: ${ex}`,
300
- ex
301
- ));
248
+ errors.push(new InBlockPayloadValidationError4(block[0]?._hash ?? ZERO_HASH7, block, payload, `validation excepted: ${ex}`, ex));
302
249
  }
303
250
  return errors;
304
- };
251
+ }, "validateChainStakeIntentInBlock");
305
252
 
306
253
  // src/elevatedPayload/payloads/validateHashInBlock.ts
307
254
  import { ZERO_HASH as ZERO_HASH8 } from "@xylabs/hex";
308
255
  import { InBlockPayloadValidationError as InBlockPayloadValidationError5, isHashPayload } from "@xyo-network/xl1-protocol";
309
- var validateHashInBlock = async (payload, block) => {
256
+ var validateHashInBlock = /* @__PURE__ */ __name(async (payload, block) => {
310
257
  const errors = [];
311
258
  try {
312
259
  const typedErrors = await validateTypedPayloadInBlock(payload, block, isHashPayload);
@@ -314,22 +261,16 @@ var validateHashInBlock = async (payload, block) => {
314
261
  errors.push(new InBlockPayloadValidationError5(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
315
262
  }
316
263
  } catch (ex) {
317
- errors.push(new InBlockPayloadValidationError5(
318
- block?.[0]?._hash ?? ZERO_HASH8,
319
- block,
320
- payload,
321
- `validation excepted: ${ex}`,
322
- ex
323
- ));
264
+ errors.push(new InBlockPayloadValidationError5(block?.[0]?._hash ?? ZERO_HASH8, block, payload, `validation excepted: ${ex}`, ex));
324
265
  }
325
266
  return errors;
326
- };
267
+ }, "validateHashInBlock");
327
268
 
328
269
  // src/elevatedPayload/payloads/validateSchemaInBlock.ts
329
270
  import { ZERO_HASH as ZERO_HASH9 } from "@xylabs/hex";
330
271
  import { isSchemaPayload } from "@xyo-network/schema-payload-plugin";
331
272
  import { InBlockPayloadValidationError as InBlockPayloadValidationError6 } from "@xyo-network/xl1-protocol";
332
- var validateSchemaInBlock = async (payload, block) => {
273
+ var validateSchemaInBlock = /* @__PURE__ */ __name(async (payload, block) => {
333
274
  const errors = [];
334
275
  try {
335
276
  const typedErrors = await validateTypedPayloadInBlock(payload, block, isSchemaPayload);
@@ -337,21 +278,15 @@ var validateSchemaInBlock = async (payload, block) => {
337
278
  errors.push(new InBlockPayloadValidationError6(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
338
279
  }
339
280
  } catch (ex) {
340
- errors.push(new InBlockPayloadValidationError6(
341
- block?.[0]?._hash ?? ZERO_HASH9,
342
- block,
343
- payload,
344
- `Failed validateSchemaInBlock: ${ex}`,
345
- ex
346
- ));
281
+ errors.push(new InBlockPayloadValidationError6(block?.[0]?._hash ?? ZERO_HASH9, block, payload, `Failed validateSchemaInBlock: ${ex}`, ex));
347
282
  }
348
283
  return errors;
349
- };
284
+ }, "validateSchemaInBlock");
350
285
 
351
286
  // src/elevatedPayload/payloads/validateTransferInBlock.ts
352
287
  import { ZERO_HASH as ZERO_HASH10 } from "@xylabs/hex";
353
288
  import { InBlockPayloadValidationError as InBlockPayloadValidationError7, isTransfer } from "@xyo-network/xl1-protocol";
354
- var validateTransferInBlock = async (payload, block) => {
289
+ var validateTransferInBlock = /* @__PURE__ */ __name(async (payload, block) => {
355
290
  const errors = [];
356
291
  try {
357
292
  const typedErrors = await validateTypedPayloadInBlock(payload, block, isTransfer);
@@ -359,16 +294,10 @@ var validateTransferInBlock = async (payload, block) => {
359
294
  errors.push(new InBlockPayloadValidationError7(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
360
295
  }
361
296
  } catch (ex) {
362
- errors.push(new InBlockPayloadValidationError7(
363
- block?.[0]?._hash ?? ZERO_HASH10,
364
- block,
365
- payload,
366
- `Failed validateTransferInBlock: ${ex}`,
367
- ex
368
- ));
297
+ errors.push(new InBlockPayloadValidationError7(block?.[0]?._hash ?? ZERO_HASH10, block, payload, `Failed validateTransferInBlock: ${ex}`, ex));
369
298
  }
370
299
  return errors;
371
- };
300
+ }, "validateTransferInBlock");
372
301
 
373
302
  // src/elevatedPayload/validatePayloadInBlock.ts
374
303
  var payloadValidators = {
@@ -378,7 +307,7 @@ var payloadValidators = {
378
307
  [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
379
308
  [BoundWitnessSchema2]: validateTransactionInBlock
380
309
  };
381
- var validatePayloadInBlock = async (payload, block) => {
310
+ var validatePayloadInBlock = /* @__PURE__ */ __name(async (payload, block) => {
382
311
  const errors = [];
383
312
  try {
384
313
  const validator = payloadValidators[payload.schema];
@@ -388,62 +317,64 @@ var validatePayloadInBlock = async (payload, block) => {
388
317
  errors.push(new InBlockPayloadValidationError8(block?.[0]?._hash ?? ZERO_HASH11, block, payload, `Unsupported payload schema: ${payload.schema}`));
389
318
  }
390
319
  } catch (ex) {
391
- const error = new InBlockPayloadValidationError8(
392
- block?.[0]?._hash ?? ZERO_HASH11,
393
- block,
394
- payload,
395
- `validation excepted: ${ex}`
396
- );
320
+ const error = new InBlockPayloadValidationError8(block?.[0]?._hash ?? ZERO_HASH11, block, payload, `validation excepted: ${ex}`);
397
321
  error.cause = ex;
398
322
  errors.push(error);
399
323
  }
400
324
  return errors;
401
- };
325
+ }, "validatePayloadInBlock");
402
326
 
403
327
  // src/hydratedBlock/validators/Payloads.ts
404
- var PayloadsInBlockValidator = async ([block, payloads]) => {
328
+ var PayloadsInBlockValidator = /* @__PURE__ */ __name(async ([block, payloads]) => {
405
329
  const errors = [];
406
330
  try {
407
331
  const payloadMap = {};
408
332
  for (const payload of payloads) {
409
333
  payloadMap[payload._hash] = payload;
410
334
  }
411
- const remainingPayloads = { ...payloadMap };
335
+ const remainingPayloads = {
336
+ ...payloadMap
337
+ };
412
338
  for (let i = 0; i < block.payload_hashes.length; i++) {
413
339
  const hash = block.payload_hashes[i];
414
340
  const schema = block.payload_schemas[i];
415
341
  const payload = payloadMap[hash];
416
342
  if (payload) {
417
- const payloadInBlockErrors = await validatePayloadInBlock(payload, [block, payloads]);
343
+ const payloadInBlockErrors = await validatePayloadInBlock(payload, [
344
+ block,
345
+ payloads
346
+ ]);
418
347
  for (const payloadInBlockError of payloadInBlockErrors) {
419
- errors.push(new HydratedBlockValidationError(
420
- block?._hash ?? ZERO_HASH12,
421
- [block, payloads],
422
- `validatePayloadInBlock error: ${payloadInBlockError}`,
423
- payloadInBlockError
424
- ));
348
+ errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
349
+ block,
350
+ payloads
351
+ ], `validatePayloadInBlock error: ${payloadInBlockError}`, payloadInBlockError));
425
352
  }
426
353
  delete remainingPayloads[hash];
427
354
  } else {
428
- errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [block, payloads], `missing payload ${hash} ${schema}`));
355
+ errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
356
+ block,
357
+ payloads
358
+ ], `missing payload ${hash} ${schema}`));
429
359
  }
430
360
  }
431
361
  if (Object.keys(remainingPayloads).length > 0) {
432
- errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(", ")}`));
362
+ errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
363
+ block,
364
+ payloads
365
+ ], `extra payloads ${Object.keys(payloadMap).join(", ")}`));
433
366
  }
434
367
  } catch (ex) {
435
- errors.push(new HydratedBlockValidationError(
436
- block?._hash ?? ZERO_HASH12,
437
- [block, payloads],
438
- `Failed PayloadsInBlockValidator: ${ex}`,
439
- ex
440
- ));
368
+ errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
369
+ block,
370
+ payloads
371
+ ], `Failed PayloadsInBlockValidator: ${ex}`, ex));
441
372
  }
442
373
  return errors;
443
- };
374
+ }, "PayloadsInBlockValidator");
444
375
 
445
376
  // src/hydratedBlock/validateHydratedBlock.ts
446
- var validateHydratedBlock = async (hydratedBlock, chainId, additionalValidators = [], additionalBlockValidators = []) => {
377
+ var validateHydratedBlock = /* @__PURE__ */ __name(async (hydratedBlock, chainId, additionalValidators = [], additionalBlockValidators = []) => {
447
378
  const errors = [];
448
379
  try {
449
380
  const validateBlockErrors = await validateBlock(hydratedBlock[0], chainId, additionalBlockValidators);
@@ -460,15 +391,10 @@ var validateHydratedBlock = async (hydratedBlock, chainId, additionalValidators
460
391
  ];
461
392
  errors.push(...(await Promise.all(validators.map((v) => v(hydratedBlock, chainId)))).flat());
462
393
  } catch (ex) {
463
- errors.push(new HydratedBlockValidationError2(
464
- hydratedBlock?.[0]?._hash ?? ZERO_HASH13,
465
- hydratedBlock,
466
- `Failed validateHydratedBlock: ${ex}`,
467
- ex
468
- ));
394
+ errors.push(new HydratedBlockValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH13, hydratedBlock, `Failed validateHydratedBlock: ${ex}`, ex));
469
395
  }
470
396
  return errors;
471
- };
397
+ }, "validateHydratedBlock");
472
398
 
473
399
  // src/hydratedBlockState/validateHydratedBlockState.ts
474
400
  import { ZERO_HASH as ZERO_HASH15 } from "@xylabs/hex";
@@ -476,13 +402,9 @@ import { HydratedBlockStateValidationError as HydratedBlockStateValidationError2
476
402
 
477
403
  // src/hydratedBlockState/validators/RequiredBalance.ts
478
404
  import { ZERO_HASH as ZERO_HASH14 } from "@xylabs/hex";
479
- import {
480
- AttoXL1,
481
- HydratedBlockStateValidationError,
482
- XYO_ZERO_ADDRESS
483
- } from "@xyo-network/xl1-protocol";
405
+ import { AttoXL1, HydratedBlockStateValidationError, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
484
406
  import { netBalancesForPayloads } from "@xyo-network/xl1-protocol-sdk";
485
- var RequiredBalanceBlockStateValidator = async (block, chainId, services) => {
407
+ var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (block, chainId, services) => {
486
408
  const errors = [];
487
409
  try {
488
410
  const netBalances = netBalancesForPayloads(block[1]);
@@ -494,49 +416,31 @@ var RequiredBalanceBlockStateValidator = async (block, chainId, services) => {
494
416
  }
495
417
  }
496
418
  const previous = block[0].previous;
497
- if (previous === null) return [new HydratedBlockStateValidationError(
498
- block?.[0]?._hash ?? ZERO_HASH14,
499
- chainId,
500
- block,
501
- "Insufficient funds because first block"
502
- )];
419
+ if (previous === null) return [
420
+ new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH14, chainId, block, "Insufficient funds because first block")
421
+ ];
503
422
  for (const [address, reqBalance] of Object.entries(requiredBalances)) {
504
- const result = await services.accountBalance.balances(previous, [address]);
423
+ const result = await services.accountBalance.balances(previous, [
424
+ address
425
+ ]);
505
426
  const balance = result[address] ?? AttoXL1(0n);
506
427
  if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
507
- errors.push(new HydratedBlockStateValidationError(
508
- block?.[0]?._hash ?? ZERO_HASH14,
509
- chainId,
510
- block,
511
- `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`
512
- ));
428
+ errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH14, chainId, block, `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`));
513
429
  }
514
430
  }
515
431
  } catch (ex) {
516
- errors.push(new HydratedBlockStateValidationError(
517
- block?.[0]?._hash ?? ZERO_HASH14,
518
- chainId,
519
- block,
520
- `Failed RequiredBalanceBlockStateValidator: ${ex}`,
521
- ex
522
- ));
432
+ errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH14, chainId, block, `Failed RequiredBalanceBlockStateValidator: ${ex}`, ex));
523
433
  }
524
434
  return await Promise.resolve(errors);
525
- };
435
+ }, "RequiredBalanceBlockStateValidator");
526
436
 
527
437
  // src/hydratedBlockState/validateHydratedBlockState.ts
528
- var validateHydratedBlockState = async (hydratedBlock, chainId, services, additionalValidators = []) => {
438
+ var validateHydratedBlockState = /* @__PURE__ */ __name(async (hydratedBlock, chainId, services, additionalValidators = []) => {
529
439
  const errors = [];
530
440
  try {
531
441
  const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId);
532
442
  for (const validateHydratedBlockError of validateHydratedBlockErrors) {
533
- errors.push(new HydratedBlockStateValidationError2(
534
- hydratedBlock[0]._hash,
535
- chainId,
536
- hydratedBlock,
537
- `validateBlock error: ${validateHydratedBlockError}`,
538
- validateHydratedBlockError
539
- ));
443
+ errors.push(new HydratedBlockStateValidationError2(hydratedBlock[0]._hash, chainId, hydratedBlock, `validateBlock error: ${validateHydratedBlockError}`, validateHydratedBlockError));
540
444
  }
541
445
  const validators = [
542
446
  RequiredBalanceBlockStateValidator,
@@ -544,16 +448,10 @@ var validateHydratedBlockState = async (hydratedBlock, chainId, services, additi
544
448
  ];
545
449
  errors.push(...(await Promise.all(validators.map((v) => v(hydratedBlock, chainId, services)))).flat());
546
450
  } catch (ex) {
547
- errors.push(new HydratedBlockStateValidationError2(
548
- hydratedBlock?.[0]?._hash ?? ZERO_HASH15,
549
- chainId,
550
- hydratedBlock,
551
- `Failed validateHydratedBlockState: ${ex}`,
552
- ex
553
- ));
451
+ errors.push(new HydratedBlockStateValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH15, chainId, hydratedBlock, `Failed validateHydratedBlockState: ${ex}`, ex));
554
452
  }
555
453
  return errors;
556
- };
454
+ }, "validateHydratedBlockState");
557
455
  export {
558
456
  BlockAllowedPayloadSchemasValidator,
559
457
  BlockFieldsValidator,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/block/validateBlock.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/Fields.ts","../../src/block/validators/JsonSchema.ts","../../src/block/validators/PreviousHash.ts","../../src/hydratedBlock/validateHydratedBlock.ts","../../src/hydratedBlock/validators/Payloads.ts","../../src/elevatedPayload/validatePayloadInBlock.ts","../../src/elevatedPayload/lib/isElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromTransaction.ts","../../src/elevatedPayload/lib/validateTransactionInBlock.ts","../../src/elevatedPayload/lib/validateTypedPayloadInBlock.ts","../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateHashInBlock.ts","../../src/elevatedPayload/payloads/validateSchemaInBlock.ts","../../src/elevatedPayload/payloads/validateTransferInBlock.ts","../../src/hydratedBlockState/validateHydratedBlockState.ts","../../src/hydratedBlockState/validators/RequiredBalance.ts"],"sourcesContent":["import type { Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n block: BlockBoundWitness,\n chainId?: Hex,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const bwErrors = await BoundWitnessSignaturesValidator(block)\n for (const bwError of bwErrors) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'BoundWitness validation failed', bwError))\n }\n const validators: BlockValidatorFunction[] = [\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(\n validators.map(validator => validator(block, chainId)),\n )).flat())\n } catch (ex) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted', ex))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction, isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: BlockValidationError[] = []\n try {\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `payload schema not allowed in block: ${schema}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Hash, Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n chainId?: Hex,\n) => {\n const errors: BlockValidationError[] = []\n try {\n if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))\n }\n\n // get transaction hashes\n const txHashes: Hash[] = []\n for (let i = 0; i < block.payload_hashes.length; i++) {\n if (block.payload_schemas[i] === BoundWitnessSchema) {\n txHashes.push(block.payload_hashes[i])\n }\n }\n\n // check if transaction hashes are unique\n if (new Set(txHashes).size < txHashes.length) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Duplicate Transaction Hashes: ${txHashes}`,\n ))\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema } from '@xyo-network/xl1-schema'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => {\n const ajv = new Ajv({ allErrors: true, strict: true })\n const validate = ajv.compile(jsonSchema)\n return async (\n block: BlockBoundWitness,\n ) => {\n const errors: BlockValidationError[] = []\n try {\n await validate(block)\n if ((validate.errors ?? []).length > 0) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\\n' })}`,\n )\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n }\n}\n","import { isHash, ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import type { Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type {\n BlockValidatorFunction, HydratedBlock, HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessReferencesValidator } from '@xyo-network/xl1-validation'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n hydratedBlock: HydratedBlock,\n chainId?: Hex,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(hydratedBlock[0], chainId, additionalBlockValidators)\n for (const validateBlockError of validateBlockErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))\n }\n const bwRefErrors = await BoundWitnessReferencesValidator()(hydratedBlock)\n for (const bwRefError of bwRefErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `boundwitness reference error: ${bwRefError}`, bwRefError))\n }\n const validators: HydratedBlockValidationFunction[] = [\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed validateHydratedBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { type Hash, ZERO_HASH } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n HydratedBlock,\n HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n [block, payloads]: HydratedBlock,\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashStorageMeta<Payload>>> = {}\n for (const payload of payloads) {\n payloadMap[payload._hash] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const hash = block.payload_hashes[i]\n const schema = block.payload_schemas[i]\n const payload = payloadMap[hash]\n if (payload) {\n const payloadInBlockErrors = await validatePayloadInBlock(payload, [block, payloads])\n for (const payloadInBlockError of payloadInBlockErrors) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `validatePayloadInBlock error: ${payloadInBlockError}`,\n payloadInBlockError,\n ))\n }\n delete remainingPayloads[hash]\n } else {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `missing payload ${hash} ${schema}`))\n }\n }\n\n if (Object.keys(remainingPayloads).length > 0) {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `Failed PayloadsInBlockValidator: ${ex}`,\n ex,\n ))\n }\n\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { SchemaSchema } from '@xyo-network/schema-payload-plugin'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport {\n ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [HashSchema]: validateHashInBlock,\n [TransferSchema]: validateTransferInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [BoundWitnessSchema]: validateTransactionInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...await validator(payload, block))\n } else {\n errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (ex) {\n const error = new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport const isElevatedFromBlock = (payload: WithStorageMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\nimport { transactionsFromHydratedBlock } from '@xyo-network/xl1-protocol-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n const allTxPayloadHashes = new Set(txs.flatMap(tx => tx.payload_hashes))\n if (allTxPayloadHashes.has(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash,\n block,\n payload,\n `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`,\n ))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${ex}`, ex))\n }\n return errors\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\nimport { transactionsFromHydratedBlock } from '@xyo-network/xl1-protocol-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n if (txs.length > 0) {\n const hashes = txs.flatMap(tx => tx.payload_hashes)\n if (!hashes.includes(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Transaction does not include payload'))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'No Transactions in block'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `Failed validateElevatedFromTransaction: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {\n const txErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `BoundWitnessSignaturesValidator error: ${txError}`, txError))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(payload._hash ?? ZERO_HASH, block, payload, `validation excepted: ${ex}`, ex))\n }\n return errors\n}\n","import type { IdentityFunction } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n payload: Payload,\n block: HydratedBlock,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isStorageMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...await validateElevatedFromBlock(payload, block))\n } else {\n errors.push(...await validateElevatedFromTransaction(payload, block))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${ex}`))\n }\n return errors\n}\n//\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isChainStakeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isHashPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isSchemaPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateSchemaInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isTransfer)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTransferInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type {\n AccountBalanceServiceV2, HydratedBlock,\n HydratedBlockStateValidationFunctionV2,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunctionV2 = async (\n hydratedBlock: HydratedBlock,\n chainId: Hex,\n services: { accountBalance: AccountBalanceServiceV2 },\n additionalValidators: HydratedBlockStateValidationFunctionV2[] = [],\n) => {\n const errors: HydratedBlockStateValidationError[] = []\n try {\n const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId)\n for (const validateHydratedBlockError of validateHydratedBlockErrors) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock[0]._hash,\n chainId,\n hydratedBlock,\n `validateBlock error: ${validateHydratedBlockError}`,\n validateHydratedBlockError,\n ))\n }\n const validators: HydratedBlockStateValidationFunctionV2[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Address, Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type {\n AccountBalanceServiceV2, HydratedBlock,\n HydratedBlockStateValidationFunctionV2,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1, HydratedBlockStateValidationError, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-protocol'\nimport { netBalancesForPayloads } from '@xyo-network/xl1-protocol-sdk'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunctionV2 = async (\n block: HydratedBlock,\n chainId: Hex,\n services: { accountBalance: AccountBalanceServiceV2 },\n) => {\n const errors: HydratedBlockStateValidationError[] = []\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads(block[1])\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<Address, bigint> = {}\n for (const address of netBalanceAddresses) {\n if (netBalances[address] < 0n) {\n requiredBalances[address] = -netBalances[address]\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n 'Insufficient funds because first block',\n )]\n\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const result = await services.accountBalance.balances(previous, [address])\n const balance = result[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${ex}`,\n ex,\n ))\n }\n return await Promise.resolve(errors)\n}\n"],"mappings":";AACA,SAAS,aAAAA,kBAAiB;AAG1B,SAAS,wBAAAC,6BAA4B;AACrC,SAAS,uCAAuC;;;ACLhD,SAAS,iBAAiB;AAE1B;AAAA,EAC0B;AAAA,EAAmD;AAAA,OACtE;AAEA,IAAM,sCAA8D,CACzE,UACG;AACH,QAAM,SAAiC,CAAC;AACxC,MAAI;AACF,eAAW,UAAU,MAAM,iBAAiB;AAC1C,UAAI,CAAC,4BAA4B,MAAM,GAAG;AACxC,eAAO,KAAK,IAAI;AAAA,UACb,OAA8C,SAAS;AAAA,UACxD;AAAA,UACA,wCAAwC,MAAM;AAAA,QAChD,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAI;AAAA,MACb,OAA8C,SAAS;AAAA,MACxD;AAAA,MACA,wBAAwB,EAAE;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC5BA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,iBAAiB;AAC1B,SAAS,0BAA0B;AAEnC;AAAA,EAC0B,wBAAAC;AAAA,OACnB;AAEA,IAAM,uBAA+C,CAC1D,OACA,YACG;AACH,QAAM,SAAiC,CAAC;AACxC,MAAI;AACF,QAAI,UAAU,OAAO,KAAK,MAAM,UAAU,QAAQ,YAAY,GAAG;AAC/D,aAAO,KAAK,IAAIA,sBAAsB,OAA8C,SAASD,YAAW,OAAO,kBAAkB,CAAC;AAAA,IACpI;AAGA,UAAM,WAAmB,CAAC;AAC1B,aAAS,IAAI,GAAG,IAAI,MAAM,eAAe,QAAQ,KAAK;AACpD,UAAI,MAAM,gBAAgB,CAAC,MAAM,oBAAoB;AACnD,iBAAS,KAAK,MAAM,eAAe,CAAC,CAAC;AAAA,MACvC;AAAA,IACF;AAGA,QAAI,IAAI,IAAI,QAAQ,EAAE,OAAO,SAAS,QAAQ;AAC5C,aAAO,KAAK,IAAIC;AAAA,QACb,OAA8C,SAASD;AAAA,QACxD;AAAA,QACA,iCAAiC,QAAQ;AAAA,MAC3C,CAAC;AAAA,IACH;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAIC;AAAA,MACb,OAA8C,SAASD;AAAA,MACxD;AAAA,MACA,wBAAwB,EAAE;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC5CA,SAAS,aAAAE,kBAAiB;AAE1B;AAAA,EAC0B,wBAAAC;AAAA,OACnB;AACP,SAAS,kDAAkD;AAE3D,SAAS,WAAW;AAEb,IAAM,2BAA2B,CAAC,aAAwB,+CAAuE;AACtI,QAAM,MAAM,IAAI,IAAI,EAAE,WAAW,MAAM,QAAQ,KAAK,CAAC;AACrD,QAAM,WAAW,IAAI,QAAQ,UAAU;AACvC,SAAO,OACL,UACG;AACH,UAAM,SAAiC,CAAC;AACxC,QAAI;AACF,YAAM,SAAS,KAAK;AACpB,WAAK,SAAS,UAAU,CAAC,GAAG,SAAS,GAAG;AACtC,cAAM,QAAQ,IAAIA;AAAA,UACf,OAA8C,SAASD;AAAA,UACxD;AAAA,UACA,kCAAkC,IAAI,WAAW,SAAS,QAAQ,EAAE,WAAW,KAAK,CAAC,CAAC;AAAA,QACxF;AACA,cAAM,QAAQ,SAAS;AACvB,eAAO,KAAK,KAAK;AAAA,MACnB;AAAA,IACF,SAAS,IAAI;AACX,YAAM,QAAQ,IAAIC;AAAA,QACf,OAA8C,SAASD;AAAA,QACxD;AAAA,QACA,wBAAwB,EAAE;AAAA,MAC5B;AACA,YAAM,QAAQ;AACd,aAAO,KAAK,KAAK;AAAA,IACnB;AACA,WAAO;AAAA,EACT;AACF;;;ACtCA,SAAS,QAAQ,aAAAE,kBAAiB;AAGlC,SAAS,wBAAAC,6BAA4B;AAE9B,IAAM,6BAAqD,CAChE,UACG;AACH,QAAM,SAAiC,CAAC;AACxC,MAAI;AACF,UAAM,cAAc,MAAM;AAC1B,QAAI,cAAc,IAAI;AAEpB,UAAI,CAAC,OAAO,MAAM,QAAQ,GAAG;AAC3B,eAAO,KAAK,IAAIA,sBAAsB,OAA8C,SAASD,YAAW,OAAO,qCAAqC,CAAC;AAAA,MACvJ;AAAA,IACF,WAAW,gBAAgB,GAAG;AAE5B,UAAI,MAAM,aAAa,MAAM;AAC3B,eAAO,KAAK,IAAIC,sBAAsB,OAA8C,SAASD,YAAW,OAAO,iCAAiC,CAAC;AAAA,MACnJ;AAAA,IACF,OAAO;AAEL,aAAO,KAAK,IAAIC,sBAAsB,OAA8C,SAASD,YAAW,OAAO,sBAAsB,CAAC;AAAA,IACxI;AAAA,EACF,SAAS,IAAI;AACX,UAAM,QAAQ,IAAIC;AAAA,MACf,OAA8C,SAASD;AAAA,MACxD;AAAA,MACA,sCAAsC,EAAE;AAAA,IAC1C;AACA,UAAM,QAAQ;AACd,WAAO,KAAK,KAAK;AAAA,EACnB;AACA,SAAO;AACT;;;AJvBO,IAAM,gBAAgB,OAC3B,OACA,SACA,uBAAiD,CAAC,MACd;AACpC,QAAM,SAAiC,CAAC;AACxC,MAAI;AACF,UAAM,WAAW,MAAM,gCAAgC,KAAK;AAC5D,eAAW,WAAW,UAAU;AAC9B,aAAO,KAAK,IAAIE,sBAAsB,OAA8C,SAASC,YAAW,OAAO,kCAAkC,OAAO,CAAC;AAAA,IAC3J;AACA,UAAM,aAAuC;AAAA,MAC3C;AAAA,MACA;AAAA,MACA;AAAA,MACA,GAAG;AAAA,IACL;AACA,WAAO,KAAK,IAAI,MAAM,QAAQ;AAAA,MAC5B,WAAW,IAAI,eAAa,UAAU,OAAO,OAAO,CAAC;AAAA,IACvD,GAAG,KAAK,CAAC;AAAA,EACX,SAAS,IAAI;AACX,WAAO,KAAK,IAAID,sBAAsB,OAA8C,SAASC,YAAW,OAAO,uBAAuB,EAAE,CAAC;AAAA,EAC3I;AACA,SAAO;AACT;;;AKnCA,SAAS,aAAAC,mBAAiB;AAI1B,SAAS,gCAAAC,qCAAoC;AAC7C,SAAS,uCAAuC;;;ACNhD,SAAoB,aAAAC,mBAAiB;AAMrC,SAAS,oCAAoC;;;ACN7C,SAAS,aAAAC,mBAAiB;AAC1B,SAAS,sBAAAC,2BAA0B;AAEnC,SAAS,oBAAoB;AAK7B;AAAA,EACE;AAAA,EAAwB;AAAA,EAAY,iCAAAC;AAAA,EACpC;AAAA,OACK;;;ACVP,SAA6B,iCAAiC;AAEvD,IAAM,sBAAsB,CAAC,SAAmC,CAAC,EAAE,QAAQ,MAA8B;AAC9G,QAAM,MAAM,SAAS,OAAO,OAAK,0BAA0B,CAAC,CAAC;AAC7D,aAAW,MAAM,KAAK;AACpB,QAAI,GAAG,eAAe,SAAS,QAAQ,KAAK,GAAG;AAC7C,aAAO;AAAA,IACT;AAAA,EACF;AACA,SAAO;AACT;;;ACVA,SAAS,qCAAqC;AAC9C,SAAS,qCAAqC;AAEvC,IAAM,4BAA8D,CACzE,SACA,UACG;AACH,QAAM,SAA0C,CAAC;AACjD,MAAI;AACF,UAAM,MAAM,8BAA8B,KAAK;AAC/C,UAAM,qBAAqB,IAAI,IAAI,IAAI,QAAQ,QAAM,GAAG,cAAc,CAAC;AACvE,QAAI,mBAAmB,IAAI,QAAQ,KAAK,GAAG;AACzC,aAAO,KAAK,IAAI;AAAA,QACd,MAAM,CAAC,GAAG;AAAA,QACV;AAAA,QACA;AAAA,QACA,mDAAmD,QAAQ,MAAM,MAAM,QAAQ,KAAK;AAAA,MACtF,CAAC;AAAA,IACH;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAI,8BAA8B,MAAM,CAAC,GAAG,OAAO,OAAO,SAAS,wBAAwB,EAAE,IAAI,EAAE,CAAC;AAAA,EAClH;AACA,SAAO;AACT;;;ACvBA,SAAS,iCAAAC,sCAAqC;AAC9C,SAAS,iCAAAC,sCAAqC;AAEvC,IAAM,kCAAoE,CAC/E,SACA,UACG;AACH,QAAM,SAA0C,CAAC;AACjD,MAAI;AACF,UAAM,MAAMA,+BAA8B,KAAK;AAC/C,QAAI,IAAI,SAAS,GAAG;AAClB,YAAM,SAAS,IAAI,QAAQ,QAAM,GAAG,cAAc;AAClD,UAAI,CAAC,OAAO,SAAS,QAAQ,KAAK,GAAG;AACnC,eAAO,KAAK,IAAID,+BAA8B,QAAQ,OAAO,OAAO,SAAS,sCAAsC,CAAC;AAAA,MACtH;AAAA,IACF,OAAO;AACL,aAAO,KAAK,IAAIA,+BAA8B,QAAQ,OAAO,OAAO,SAAS,0BAA0B,CAAC;AAAA,IAC1G;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAIA;AAAA,MACd,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,2CAA2C,EAAE;AAAA,MAC7C;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC7BA,SAAS,aAAAE,kBAAiB;AAC1B,SAAS,qBAAqB;AAE9B,SAAS,iCAAAC,gCAA+B,6BAAAC,kCAAiC;AACzE,SAAS,mCAAAC,wCAAuC;AAEzC,IAAM,6BAA+D,OAC1E,SACA,UAC6C;AAC7C,QAAM,SAA0C,CAAC;AACjD,MAAI;AACF,QAAID,2BAA0B,OAAO,KAAK,cAAc,OAAO,GAAG;AAChE,YAAM,WAAW,MAAMC,iCAAgC,OAAO;AAC9D,iBAAW,WAAW,UAAU;AAC9B,eAAO,KAAK,IAAIF,+BAA8B,QAAQ,OAAO,OAAO,SAAS,0CAA0C,OAAO,IAAI,OAAO,CAAC;AAAA,MAC5I;AAAA,IACF,OAAO;AACL,aAAO,KAAK,IAAIA,+BAA8B,QAAQ,OAAO,OAAO,SAAS,2DAA2D,CAAC;AAAA,IAC3I;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAIA,+BAA8B,QAAQ,SAASD,YAAW,OAAO,SAAS,wBAAwB,EAAE,IAAI,EAAE,CAAC;AAAA,EAC7H;AACA,SAAO;AACT;;;ACtBA,SAAS,iBAAAI,sBAAqB;AAOvB,IAAM,8BAA8B,OACzC,SACA,OACA,qBACqB;AACrB,QAAM,SAAkB,CAAC;AACzB,MAAI;AACF,QAAI,iBAAiB,OAAO,KAAKC,eAAc,OAAO,GAAG;AACvD,UAAI,oBAAoB,SAAS,KAAK,GAAG;AACvC,eAAO,KAAK,GAAG,MAAM,0BAA0B,SAAS,KAAK,CAAC;AAAA,MAChE,OAAO;AACL,eAAO,KAAK,GAAG,MAAM,gCAAgC,SAAS,KAAK,CAAC;AAAA,MACtE;AAAA,IACF,OAAO;AACL,aAAO,KAAK,IAAI,MAAM,gEAAgE,CAAC;AAAA,IACzF;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAI,MAAM,uCAAuC,EAAE,EAAE,CAAC;AAAA,EACpE;AACA,SAAO;AACT;;;AC7BA,SAAS,aAAAC,kBAAiB;AAE1B,SAAS,iCAAAC,gCAA+B,0BAA0B;AAI3D,IAAM,kCAAoE,OAC/E,SACA,UACG;AACH,QAAM,SAA0C,CAAC;AACjD,MAAI;AACF,UAAM,cAAc,MAAM,4BAA4B,SAAS,OAAO,kBAAkB;AACxF,eAAW,cAAc,aAAa;AACpC,aAAO,KAAK,IAAIC,+BAA8B,QAAQ,OAAO,OAAO,SAAS,sCAAsC,UAAU,IAAI,UAAU,CAAC;AAAA,IAC9I;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAIA;AAAA,MACd,MAAM,CAAC,GAAG,SAASC;AAAA,MACnB;AAAA,MACA;AAAA,MACA,wBAAwB,EAAE;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC1BA,SAAS,aAAAC,kBAAiB;AAE1B,SAAS,iCAAAC,gCAA+B,qBAAqB;AAItD,IAAM,sBAAwD,OACnE,SACA,UACG;AACH,QAAM,SAA4C,CAAC;AACnD,MAAI;AACF,UAAM,cAAc,MAAM,4BAA4B,SAAS,OAAO,aAAa;AACnF,eAAW,cAAc,aAAa;AACpC,aAAO,KAAK,IAAIC,+BAA8B,QAAQ,OAAO,OAAO,SAAS,sCAAsC,UAAU,IAAI,UAAU,CAAC;AAAA,IAC9I;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAIA;AAAA,MACb,QAAQ,CAAC,GAAI,SAASC;AAAA,MACvB;AAAA,MACA;AAAA,MACA,wBAAwB,EAAE;AAAA,MAC1B;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC1BA,SAAS,aAAAC,kBAAiB;AAC1B,SAAS,uBAAuB;AAEhC,SAAS,iCAAAC,sCAAqC;AAIvC,IAAM,wBAA0D,OACrE,SACA,UACG;AACH,QAAM,SAA0C,CAAC;AACjD,MAAI;AACF,UAAM,cAAc,MAAM,4BAA4B,SAAS,OAAO,eAAe;AACrF,eAAW,cAAc,aAAa;AACpC,aAAO,KAAK,IAAIC,+BAA8B,QAAQ,OAAO,OAAO,SAAS,sCAAsC,UAAU,IAAI,UAAU,CAAC;AAAA,IAC9I;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAIA;AAAA,MACb,QAAQ,CAAC,GAAI,SAASC;AAAA,MACvB;AAAA,MACA;AAAA,MACA,iCAAiC,EAAE;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AC3BA,SAAS,aAAAC,mBAAiB;AAK1B,SAAS,iCAAAC,gCAA+B,kBAAkB;AAInD,IAAM,0BAA4D,OACvE,SACA,UACG;AACH,QAAM,SAA0C,CAAC;AACjD,MAAI;AACF,UAAM,cAAc,MAAM,4BAA4B,SAAS,OAAO,UAAU;AAChF,eAAW,cAAc,aAAa;AACpC,aAAO,KAAK,IAAIC,+BAA8B,QAAQ,OAAO,OAAO,SAAS,sCAAsC,UAAU,IAAI,UAAU,CAAC;AAAA,IAC9I;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAIA;AAAA,MACb,QAAQ,CAAC,GAAI,SAASC;AAAA,MACvB;AAAA,MACA;AAAA,MACA,mCAAmC,EAAE;AAAA,MACrC;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;ATXA,IAAM,oBAA+E;AAAA,EACnF,CAAC,UAAU,GAAG;AAAA,EACd,CAAC,cAAc,GAAG;AAAA,EAClB,CAAC,YAAY,GAAG;AAAA,EAChB,CAAC,sBAAsB,GAAG;AAAA,EAC1B,CAACC,mBAAkB,GAAG;AACxB;AAEO,IAAM,yBAA2D,OACtE,SACA,UAC6C;AAC7C,QAAM,SAA0C,CAAC;AACjD,MAAI;AACF,UAAM,YAAY,kBAAkB,QAAQ,MAAM;AAClD,QAAI,WAAW;AACb,aAAO,KAAK,GAAG,MAAM,UAAU,SAAS,KAAK,CAAC;AAAA,IAChD,OAAO;AACL,aAAO,KAAK,IAAIC,+BAA+B,QAAQ,CAAC,GAAI,SAASC,aAAW,OAAO,SAAS,+BAA+B,QAAQ,MAAM,EAAE,CAAC;AAAA,IAClJ;AAAA,EACF,SAAS,IAAI;AACX,UAAM,QAAQ,IAAID;AAAA,MACf,QAAQ,CAAC,GAAI,SAASC;AAAA,MACvB;AAAA,MACA;AAAA,MACA,wBAAwB,EAAE;AAAA,IAC5B;AACA,UAAM,QAAQ;AACd,WAAO,KAAK,KAAK;AAAA,EACnB;AACA,SAAO;AACT;;;ADvCO,IAAM,2BAA4D,OACvE,CAAC,OAAO,QAAQ,MACb;AACH,QAAM,SAAyC,CAAC;AAChD,MAAI;AACF,UAAM,aAAkE,CAAC;AACzE,eAAW,WAAW,UAAU;AAC9B,iBAAW,QAAQ,KAAK,IAAI;AAAA,IAC9B;AAEA,UAAM,oBAAoB,EAAE,GAAG,WAAW;AAE1C,aAAS,IAAI,GAAG,IAAI,MAAM,eAAe,QAAQ,KAAK;AACpD,YAAM,OAAO,MAAM,eAAe,CAAC;AACnC,YAAM,SAAS,MAAM,gBAAgB,CAAC;AACtC,YAAM,UAAU,WAAW,IAAI;AAC/B,UAAI,SAAS;AACX,cAAM,uBAAuB,MAAM,uBAAuB,SAAS,CAAC,OAAO,QAAQ,CAAC;AACpF,mBAAW,uBAAuB,sBAAsB;AACtD,iBAAO,KAAK,IAAI;AAAA,YACd,OAAO,SAASC;AAAA,YAChB,CAAC,OAAO,QAAQ;AAAA,YAChB,iCAAiC,mBAAmB;AAAA,YACpD;AAAA,UACF,CAAC;AAAA,QACH;AACA,eAAO,kBAAkB,IAAI;AAAA,MAC/B,OAAO;AACL,eAAO,KAAK,IAAI,6BAA6B,OAAO,SAASA,aAAW,CAAC,OAAO,QAAQ,GAAG,mBAAmB,IAAI,IAAI,MAAM,EAAE,CAAC;AAAA,MACjI;AAAA,IACF;AAEA,QAAI,OAAO,KAAK,iBAAiB,EAAE,SAAS,GAAG;AAC7C,aAAO,KAAK,IAAI,6BAA6B,OAAO,SAASA,aAAW,CAAC,OAAO,QAAQ,GAAG,kBAAkB,OAAO,KAAK,UAAU,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;AAAA,IACpJ;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAI;AAAA,MACd,OAAO,SAASA;AAAA,MAChB,CAAC,OAAO,QAAQ;AAAA,MAChB,oCAAoC,EAAE;AAAA,MACtC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,SAAO;AACT;;;AD5CO,IAAM,wBAAwB,OACnC,eACA,SACA,uBAA0D,CAAC,GAC3D,4BAAsD,CAAC,MACpD;AACH,QAAM,SAAyC,CAAC;AAChD,MAAI;AACF,UAAM,sBAAsB,MAAM,cAAc,cAAc,CAAC,GAAG,SAAS,yBAAyB;AACpG,eAAW,sBAAsB,qBAAqB;AACpD,aAAO,KAAK,IAAIC,8BAA6B,cAAc,CAAC,EAAE,OAAO,eAAe,wBAAwB,kBAAkB,IAAI,kBAAkB,CAAC;AAAA,IACvJ;AACA,UAAM,cAAc,MAAM,gCAAgC,EAAE,aAAa;AACzE,eAAW,cAAc,aAAa;AACpC,aAAO,KAAK,IAAIA,8BAA6B,cAAc,CAAC,EAAE,OAAO,eAAe,iCAAiC,UAAU,IAAI,UAAU,CAAC;AAAA,IAChJ;AACA,UAAM,aAAgD;AAAA,MACpD;AAAA,MACA,GAAG;AAAA,IACL;AACA,WAAO,KAAK,IAAI,MAAM,QAAQ,IAAI,WAAW,IAAI,OAAK,EAAE,eAAe,OAAO,CAAC,CAAC,GAAG,KAAK,CAAC;AAAA,EAC3F,SAAS,IAAI;AACX,WAAO,KAAK,IAAIA;AAAA,MACd,gBAAgB,CAAC,GAAG,SAASC;AAAA,MAC7B;AAAA,MACA,iCAAiC,EAAE;AAAA,MACnC;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;;;AYxCA,SAAS,aAAAC,mBAAiB;AAK1B,SAAS,qCAAAC,0CAAyC;;;ACLlD,SAAS,aAAAC,mBAAiB;AAK1B;AAAA,EACE;AAAA,EAAS;AAAA,EAAmC;AAAA,OACvC;AACP,SAAS,8BAA8B;AAEhC,IAAM,qCAA6E,OACxF,OACA,SACA,aACG;AACH,QAAM,SAA8C,CAAC;AACrD,MAAI;AAGF,UAAM,cAAc,uBAAuB,MAAM,CAAC,CAAC;AACnD,UAAM,sBAAsB,OAAO,KAAK,WAAW;AACnD,UAAM,mBAA4C,CAAC;AACnD,eAAW,WAAW,qBAAqB;AACzC,UAAI,YAAY,OAAO,IAAI,IAAI;AAC7B,yBAAiB,OAAO,IAAI,CAAC,YAAY,OAAO;AAAA,MAClD;AAAA,IACF;AACA,UAAM,WAAW,MAAM,CAAC,EAAE;AAC1B,QAAI,aAAa,KAAM,QAAO,CAAC,IAAI;AAAA,MACjC,QAAQ,CAAC,GAAG,SAASA;AAAA,MACrB;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,eAAW,CAAC,SAAS,UAAU,KAAK,OAAO,QAAQ,gBAAgB,GAA0B;AAC3F,YAAM,SAAS,MAAM,SAAS,eAAe,SAAS,UAAU,CAAC,OAAO,CAAC;AACzE,YAAM,UAAU,OAAO,OAAO,KAAK,QAAQ,EAAE;AAC7C,UAAI,YAAY,oBAAoB,aAAa,SAAS;AACxD,eAAO,KAAK,IAAI;AAAA,UACd,QAAQ,CAAC,GAAG,SAASA;AAAA,UACrB;AAAA,UACA;AAAA,UACA,4BAA4B,OAAO,IAAI,OAAO,MAAM,iBAAiB,OAAO,CAAC;AAAA,QAC/E,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF,SAAS,IAAI;AACX,WAAO,KAAK,IAAI;AAAA,MACd,QAAQ,CAAC,GAAG,SAASA;AAAA,MACrB;AAAA,MACA;AAAA,MACA,8CAA8C,EAAE;AAAA,MAChD;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO,MAAM,QAAQ,QAAQ,MAAM;AACrC;;;AD/CO,IAAM,6BAAqE,OAChF,eACA,SACA,UACA,uBAAiE,CAAC,MAC/D;AACH,QAAM,SAA8C,CAAC;AACrD,MAAI;AACF,UAAM,8BAA8B,MAAM,sBAAsB,eAAe,OAAO;AACtF,eAAW,8BAA8B,6BAA6B;AACpE,aAAO,KAAK,IAAIC;AAAA,QACd,cAAc,CAAC,EAAE;AAAA,QACjB;AAAA,QACA;AAAA,QACA,wBAAwB,0BAA0B;AAAA,QAClD;AAAA,MACF,CAAC;AAAA,IACH;AACA,UAAM,aAAuD;AAAA,MAC3D;AAAA,MACA,GAAG;AAAA,IACL;AACA,WAAO,KAAK,IAAI,MAAM,QAAQ,IAAI,WAAW,IAAI,OAAK,EAAE,eAAe,SAAS,QAAQ,CAAC,CAAC,GAAG,KAAK,CAAC;AAAA,EACrG,SAAS,IAAI;AACX,WAAO,KAAK,IAAIA;AAAA,MACd,gBAAgB,CAAC,GAAG,SAASC;AAAA,MAC7B;AAAA,MACA;AAAA,MACA,sCAAsC,EAAE;AAAA,MACxC;AAAA,IACF,CAAC;AAAA,EACH;AACA,SAAO;AACT;","names":["ZERO_HASH","BlockValidationError","ZERO_HASH","BlockValidationError","ZERO_HASH","BlockValidationError","ZERO_HASH","BlockValidationError","BlockValidationError","ZERO_HASH","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","ZERO_HASH","BoundWitnessSchema","InBlockPayloadValidationError","InBlockPayloadValidationError","transactionsFromHydratedBlock","ZERO_HASH","InBlockPayloadValidationError","isTransactionBoundWitness","BoundWitnessSignaturesValidator","isStorageMeta","isStorageMeta","ZERO_HASH","InBlockPayloadValidationError","InBlockPayloadValidationError","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","InBlockPayloadValidationError","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","InBlockPayloadValidationError","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","InBlockPayloadValidationError","ZERO_HASH","BoundWitnessSchema","InBlockPayloadValidationError","ZERO_HASH","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","ZERO_HASH","HydratedBlockStateValidationError","ZERO_HASH","HydratedBlockStateValidationError","ZERO_HASH"]}
1
+ {"version":3,"sources":["../../src/block/validateBlock.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/Fields.ts","../../src/block/validators/JsonSchema.ts","../../src/block/validators/PreviousHash.ts","../../src/hydratedBlock/validateHydratedBlock.ts","../../src/hydratedBlock/validators/Payloads.ts","../../src/elevatedPayload/validatePayloadInBlock.ts","../../src/elevatedPayload/lib/isElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromTransaction.ts","../../src/elevatedPayload/lib/validateTransactionInBlock.ts","../../src/elevatedPayload/lib/validateTypedPayloadInBlock.ts","../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateHashInBlock.ts","../../src/elevatedPayload/payloads/validateSchemaInBlock.ts","../../src/elevatedPayload/payloads/validateTransferInBlock.ts","../../src/hydratedBlockState/validateHydratedBlockState.ts","../../src/hydratedBlockState/validators/RequiredBalance.ts"],"sourcesContent":["import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BlockBoundWitness, BlockValidatorFunction, Chain,\n} from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n block: BlockBoundWitness,\n chainId?: Chain,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const bwErrors = await BoundWitnessSignaturesValidator(block)\n for (const bwError of bwErrors) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'BoundWitness validation failed', bwError))\n }\n const validators: BlockValidatorFunction[] = [\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(\n validators.map(validator => validator(block, chainId)),\n )).flat())\n } catch (ex) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted', ex))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction, isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: BlockValidationError[] = []\n try {\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `payload schema not allowed in block: ${schema}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Hash } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BlockBoundWitness, BlockValidatorFunction, Chain,\n} from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n chainId?: Chain,\n) => {\n const errors: BlockValidationError[] = []\n try {\n if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))\n }\n\n // get transaction hashes\n const txHashes: Hash[] = []\n for (let i = 0; i < block.payload_hashes.length; i++) {\n if (block.payload_schemas[i] === BoundWitnessSchema) {\n txHashes.push(block.payload_hashes[i])\n }\n }\n\n // check if transaction hashes are unique\n if (new Set(txHashes).size < txHashes.length) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Duplicate Transaction Hashes: ${txHashes}`,\n ))\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema } from '@xyo-network/xl1-schema'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => {\n const ajv = new Ajv({ allErrors: true, strict: true })\n const validate = ajv.compile(jsonSchema)\n return async (\n block: BlockBoundWitness,\n ) => {\n const errors: BlockValidationError[] = []\n try {\n await validate(block)\n if ((validate.errors ?? []).length > 0) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\\n' })}`,\n )\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n }\n}\n","import { isHash, ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n BlockValidatorFunction, Chain, HydratedBlock, HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessReferencesValidator } from '@xyo-network/xl1-validation'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n hydratedBlock: HydratedBlock,\n chainId?: Chain,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(hydratedBlock[0], chainId, additionalBlockValidators)\n for (const validateBlockError of validateBlockErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))\n }\n const bwRefErrors = await BoundWitnessReferencesValidator()(hydratedBlock)\n for (const bwRefError of bwRefErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `boundwitness reference error: ${bwRefError}`, bwRefError))\n }\n const validators: HydratedBlockValidationFunction[] = [\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed validateHydratedBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { type Hash, ZERO_HASH } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n HydratedBlock,\n HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n [block, payloads]: HydratedBlock,\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashStorageMeta<Payload>>> = {}\n for (const payload of payloads) {\n payloadMap[payload._hash] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const hash = block.payload_hashes[i]\n const schema = block.payload_schemas[i]\n const payload = payloadMap[hash]\n if (payload) {\n const payloadInBlockErrors = await validatePayloadInBlock(payload, [block, payloads])\n for (const payloadInBlockError of payloadInBlockErrors) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `validatePayloadInBlock error: ${payloadInBlockError}`,\n payloadInBlockError,\n ))\n }\n delete remainingPayloads[hash]\n } else {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `missing payload ${hash} ${schema}`))\n }\n }\n\n if (Object.keys(remainingPayloads).length > 0) {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `Failed PayloadsInBlockValidator: ${ex}`,\n ex,\n ))\n }\n\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { SchemaSchema } from '@xyo-network/schema-payload-plugin'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport {\n ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [HashSchema]: validateHashInBlock,\n [TransferSchema]: validateTransferInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [BoundWitnessSchema]: validateTransactionInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...await validator(payload, block))\n } else {\n errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (ex) {\n const error = new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport const isElevatedFromBlock = (payload: WithStorageMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\nimport { transactionsFromHydratedBlock } from '@xyo-network/xl1-protocol-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n const allTxPayloadHashes = new Set(txs.flatMap(tx => tx.payload_hashes))\n if (allTxPayloadHashes.has(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash,\n block,\n payload,\n `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`,\n ))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${ex}`, ex))\n }\n return errors\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\nimport { transactionsFromHydratedBlock } from '@xyo-network/xl1-protocol-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n if (txs.length > 0) {\n const hashes = txs.flatMap(tx => tx.payload_hashes)\n if (!hashes.includes(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Transaction does not include payload'))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'No Transactions in block'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `Failed validateElevatedFromTransaction: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {\n const txErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `BoundWitnessSignaturesValidator error: ${txError}`, txError))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(payload._hash ?? ZERO_HASH, block, payload, `validation excepted: ${ex}`, ex))\n }\n return errors\n}\n","import type { IdentityFunction } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n payload: Payload,\n block: HydratedBlock,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isStorageMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...await validateElevatedFromBlock(payload, block))\n } else {\n errors.push(...await validateElevatedFromTransaction(payload, block))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${ex}`))\n }\n return errors\n}\n//\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isChainStakeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isHashPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isSchemaPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateSchemaInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isTransfer)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTransferInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n AccountBalanceServiceV2, Chain, HydratedBlock,\n HydratedBlockStateValidationFunctionV2,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunctionV2 = async (\n hydratedBlock: HydratedBlock,\n chainId: Chain,\n services: { accountBalance: AccountBalanceServiceV2 },\n additionalValidators: HydratedBlockStateValidationFunctionV2[] = [],\n) => {\n const errors: HydratedBlockStateValidationError[] = []\n try {\n const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId)\n for (const validateHydratedBlockError of validateHydratedBlockErrors) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock[0]._hash,\n chainId,\n hydratedBlock,\n `validateBlock error: ${validateHydratedBlockError}`,\n validateHydratedBlockError,\n ))\n }\n const validators: HydratedBlockStateValidationFunctionV2[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type {\n AccountBalanceServiceV2, Chain, HydratedBlock,\n HydratedBlockStateValidationFunctionV2,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1, HydratedBlockStateValidationError, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-protocol'\nimport { netBalancesForPayloads } from '@xyo-network/xl1-protocol-sdk'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunctionV2 = async (\n block: HydratedBlock,\n chainId: Chain,\n services: { accountBalance: AccountBalanceServiceV2 },\n) => {\n const errors: HydratedBlockStateValidationError[] = []\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads(block[1])\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<Address, bigint> = {}\n for (const address of netBalanceAddresses) {\n if (netBalances[address] < 0n) {\n requiredBalances[address] = -netBalances[address]\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n 'Insufficient funds because first block',\n )]\n\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const result = await services.accountBalance.balances(previous, [address])\n const balance = result[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${ex}`,\n ex,\n ))\n }\n return await Promise.resolve(errors)\n}\n"],"mappings":"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","names":["ZERO_HASH","BlockValidationError","BoundWitnessSignaturesValidator","ZERO_HASH","BlockValidationError","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","BlockValidationError","_hash","ZERO_HASH","ex","ZERO_HASH","isDefined","BoundWitnessSchema","BlockValidationError","BlockFieldsValidator","block","chainId","errors","isDefined","chain","toLowerCase","push","BlockValidationError","_hash","ZERO_HASH","txHashes","i","payload_hashes","length","payload_schemas","BoundWitnessSchema","Set","size","ex","ZERO_HASH","BlockValidationError","BlockBoundWitnessWithStorageMetaJsonSchema","Ajv","BlockJsonSchemaValidator","jsonSchema","BlockBoundWitnessWithStorageMetaJsonSchema","ajv","Ajv","allErrors","strict","validate","compile","block","errors","length","error","BlockValidationError","_hash","ZERO_HASH","errorsText","separator","cause","push","ex","isHash","ZERO_HASH","BlockValidationError","BlockPreviousHashValidator","block","errors","blockNumber","isHash","previous","push","BlockValidationError","_hash","ZERO_HASH","ex","error","cause","validateBlock","block","chainId","additionalValidators","errors","bwErrors","BoundWitnessSignaturesValidator","bwError","push","BlockValidationError","_hash","ZERO_HASH","validators","BlockFieldsValidator","BlockPreviousHashValidator","BlockAllowedPayloadSchemasValidator","Promise","all","map","validator","flat","ex","ZERO_HASH","HydratedBlockValidationError","BoundWitnessReferencesValidator","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","BoundWitnessSchema","SchemaSchema","ChainStakeIntentSchema","HashSchema","InBlockPayloadValidationError","TransferSchema","isTransactionBoundWitness","isElevatedFromBlock","payload","payloads","txs","filter","p","isTransactionBoundWitness","tx","payload_hashes","includes","_hash","InBlockPayloadValidationError","transactionsFromHydratedBlock","validateElevatedFromBlock","payload","block","errors","txs","transactionsFromHydratedBlock","allTxPayloadHashes","Set","flatMap","tx","payload_hashes","has","_hash","push","InBlockPayloadValidationError","schema","ex","InBlockPayloadValidationError","transactionsFromHydratedBlock","validateElevatedFromTransaction","payload","block","errors","txs","transactionsFromHydratedBlock","length","hashes","flatMap","tx","payload_hashes","includes","_hash","push","InBlockPayloadValidationError","ex","ZERO_HASH","isStorageMeta","InBlockPayloadValidationError","isTransactionBoundWitness","BoundWitnessSignaturesValidator","validateTransactionInBlock","payload","block","errors","isTransactionBoundWitness","isStorageMeta","txErrors","BoundWitnessSignaturesValidator","txError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","isStorageMeta","validateTypedPayloadInBlock","payload","block","identityFunction","errors","isStorageMeta","isElevatedFromBlock","push","validateElevatedFromBlock","validateElevatedFromTransaction","Error","ex","ZERO_HASH","InBlockPayloadValidationError","isChainStakeIntent","validateChainStakeIntentInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isChainStakeIntent","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isHashPayload","validateHashInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isHashPayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","isSchemaPayload","InBlockPayloadValidationError","validateSchemaInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isSchemaPayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isTransfer","validateTransferInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isTransfer","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","payloadValidators","HashSchema","validateHashInBlock","TransferSchema","validateTransferInBlock","SchemaSchema","validateSchemaInBlock","ChainStakeIntentSchema","validateChainStakeIntentInBlock","BoundWitnessSchema","validateTransactionInBlock","validatePayloadInBlock","payload","block","errors","validator","schema","push","InBlockPayloadValidationError","_hash","ZERO_HASH","ex","error","cause","PayloadsInBlockValidator","block","payloads","errors","payloadMap","payload","_hash","remainingPayloads","i","payload_hashes","length","hash","schema","payload_schemas","payloadInBlockErrors","validatePayloadInBlock","payloadInBlockError","push","HydratedBlockValidationError","ZERO_HASH","Object","keys","join","ex","validateHydratedBlock","hydratedBlock","chainId","additionalValidators","additionalBlockValidators","errors","validateBlockErrors","validateBlock","validateBlockError","push","HydratedBlockValidationError","_hash","bwRefErrors","BoundWitnessReferencesValidator","bwRefError","validators","PayloadsInBlockValidator","Promise","all","map","v","flat","ex","ZERO_HASH","ZERO_HASH","HydratedBlockStateValidationError","ZERO_HASH","AttoXL1","HydratedBlockStateValidationError","XYO_ZERO_ADDRESS","netBalancesForPayloads","RequiredBalanceBlockStateValidator","block","chainId","services","errors","netBalances","netBalancesForPayloads","netBalanceAddresses","Object","keys","requiredBalances","address","previous","HydratedBlockStateValidationError","_hash","ZERO_HASH","reqBalance","entries","result","accountBalance","balances","balance","AttoXL1","XYO_ZERO_ADDRESS","push","ex","Promise","resolve","validateHydratedBlockState","hydratedBlock","chainId","services","additionalValidators","errors","validateHydratedBlockErrors","validateHydratedBlock","validateHydratedBlockError","push","HydratedBlockStateValidationError","_hash","validators","RequiredBalanceBlockStateValidator","Promise","all","map","v","flat","ex","ZERO_HASH"]}
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.11.0",
4
+ "version": "1.12.1",
5
5
  "description": "XYO Layer One SDK Validation",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -36,30 +36,29 @@
36
36
  "src"
37
37
  ],
38
38
  "dependencies": {
39
- "@xylabs/hex": "~5.0.3",
40
- "@xylabs/typeof": "~5.0.3",
41
- "@xyo-network/boundwitness-model": "~5.0.2",
42
- "@xyo-network/chain-protocol": "~1.11.0",
43
- "@xyo-network/payload-model": "~5.0.2",
44
- "@xyo-network/schema-payload-plugin": "~5.0.2",
45
- "@xyo-network/xl1-protocol": "~1.10.3",
46
- "@xyo-network/xl1-protocol-sdk": "~1.11.0",
47
- "@xyo-network/xl1-schema": "~1.11.0",
48
- "@xyo-network/xl1-validation": "~1.11.0",
39
+ "@xylabs/hex": "~5.0.8",
40
+ "@xylabs/typeof": "~5.0.8",
41
+ "@xyo-network/boundwitness-model": "~5.0.5",
42
+ "@xyo-network/chain-protocol": "~1.12.1",
43
+ "@xyo-network/payload-model": "~5.0.5",
44
+ "@xyo-network/schema-payload-plugin": "~5.0.5",
45
+ "@xyo-network/xl1-protocol": "~1.10.13",
46
+ "@xyo-network/xl1-protocol-sdk": "~1.12.1",
47
+ "@xyo-network/xl1-schema": "~1.12.1",
48
+ "@xyo-network/xl1-validation": "~1.12.1",
49
49
  "ajv": "~8.17.1"
50
50
  },
51
51
  "devDependencies": {
52
- "@types/node": "~24.2.0",
53
- "@xylabs/assert": "~5.0.3",
54
- "@xylabs/promise": "~5.0.3",
55
- "@xylabs/ts-scripts-yarn3": "~7.1.0",
56
- "@xylabs/tsconfig": "~7.1.0",
57
- "@xyo-network/account": "~5.0.2",
58
- "@xyo-network/account-model": "~5.0.2",
59
- "@xyo-network/archivist-memory": "~5.0.2",
60
- "@xyo-network/archivist-model": "~5.0.2",
61
- "@xyo-network/wallet": "~5.0.2",
62
- "@xyo-network/xl1-protocol-sdk": "~1.11.0",
52
+ "@types/node": "~24.2.1",
53
+ "@xylabs/assert": "~5.0.8",
54
+ "@xylabs/promise": "~5.0.8",
55
+ "@xylabs/ts-scripts-yarn3": "~7.1.2",
56
+ "@xylabs/tsconfig": "~7.1.2",
57
+ "@xyo-network/account": "~5.0.5",
58
+ "@xyo-network/account-model": "~5.0.5",
59
+ "@xyo-network/archivist-memory": "~5.0.5",
60
+ "@xyo-network/archivist-model": "~5.0.5",
61
+ "@xyo-network/wallet": "~5.0.5",
63
62
  "typescript": "~5.9.2",
64
63
  "vitest": "~3.2.4"
65
64
  },
@@ -1,7 +1,8 @@
1
- import type { Hex } from '@xylabs/hex'
2
1
  import { ZERO_HASH } from '@xylabs/hex'
3
2
  import type { WithStorageMeta } from '@xyo-network/payload-model'
4
- import type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'
3
+ import type {
4
+ BlockBoundWitness, BlockValidatorFunction, Chain,
5
+ } from '@xyo-network/xl1-protocol'
5
6
  import { BlockValidationError } from '@xyo-network/xl1-protocol'
6
7
  import { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'
7
8
 
@@ -12,7 +13,7 @@ import {
12
13
 
13
14
  export const validateBlock = async (
14
15
  block: BlockBoundWitness,
15
- chainId?: Hex,
16
+ chainId?: Chain,
16
17
  additionalValidators: BlockValidatorFunction[] = [],
17
18
  ): Promise<BlockValidationError[]> => {
18
19
  const errors: BlockValidationError[] = []
@@ -1,15 +1,16 @@
1
- import type { Hash, Hex } from '@xylabs/hex'
1
+ import type { Hash } from '@xylabs/hex'
2
2
  import { ZERO_HASH } from '@xylabs/hex'
3
3
  import { isDefined } from '@xylabs/typeof'
4
4
  import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
5
5
  import type { WithStorageMeta } from '@xyo-network/payload-model'
6
- import {
7
- type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,
6
+ import type {
7
+ BlockBoundWitness, BlockValidatorFunction, Chain,
8
8
  } from '@xyo-network/xl1-protocol'
9
+ import { BlockValidationError } from '@xyo-network/xl1-protocol'
9
10
 
10
11
  export const BlockFieldsValidator: BlockValidatorFunction = (
11
12
  block: BlockBoundWitness,
12
- chainId?: Hex,
13
+ chainId?: Chain,
13
14
  ) => {
14
15
  const errors: BlockValidationError[] = []
15
16
  try {
@@ -1,7 +1,6 @@
1
- import type { Hex } from '@xylabs/hex'
2
1
  import { ZERO_HASH } from '@xylabs/hex'
3
2
  import type {
4
- BlockValidatorFunction, HydratedBlock, HydratedBlockValidationFunction,
3
+ BlockValidatorFunction, Chain, HydratedBlock, HydratedBlockValidationFunction,
5
4
  } from '@xyo-network/xl1-protocol'
6
5
  import { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'
7
6
  import { BoundWitnessReferencesValidator } from '@xyo-network/xl1-validation'
@@ -11,7 +10,7 @@ import { PayloadsInBlockValidator } from './validators/index.ts'
11
10
 
12
11
  export const validateHydratedBlock = async (
13
12
  hydratedBlock: HydratedBlock,
14
- chainId?: Hex,
13
+ chainId?: Chain,
15
14
  additionalValidators: HydratedBlockValidationFunction[] = [],
16
15
  additionalBlockValidators: BlockValidatorFunction[] = [],
17
16
  ) => {
@@ -1,7 +1,6 @@
1
- import type { Hex } from '@xylabs/hex'
2
1
  import { ZERO_HASH } from '@xylabs/hex'
3
2
  import type {
4
- AccountBalanceServiceV2, HydratedBlock,
3
+ AccountBalanceServiceV2, Chain, HydratedBlock,
5
4
  HydratedBlockStateValidationFunctionV2,
6
5
  } from '@xyo-network/xl1-protocol'
7
6
  import { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'
@@ -11,7 +10,7 @@ import { RequiredBalanceBlockStateValidator } from './validators/index.ts'
11
10
 
12
11
  export const validateHydratedBlockState: HydratedBlockStateValidationFunctionV2 = async (
13
12
  hydratedBlock: HydratedBlock,
14
- chainId: Hex,
13
+ chainId: Chain,
15
14
  services: { accountBalance: AccountBalanceServiceV2 },
16
15
  additionalValidators: HydratedBlockStateValidationFunctionV2[] = [],
17
16
  ) => {
@@ -1,7 +1,7 @@
1
- import type { Address, Hex } from '@xylabs/hex'
1
+ import type { Address } from '@xylabs/hex'
2
2
  import { ZERO_HASH } from '@xylabs/hex'
3
3
  import type {
4
- AccountBalanceServiceV2, HydratedBlock,
4
+ AccountBalanceServiceV2, Chain, HydratedBlock,
5
5
  HydratedBlockStateValidationFunctionV2,
6
6
  } from '@xyo-network/xl1-protocol'
7
7
  import {
@@ -11,7 +11,7 @@ import { netBalancesForPayloads } from '@xyo-network/xl1-protocol-sdk'
11
11
 
12
12
  export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunctionV2 = async (
13
13
  block: HydratedBlock,
14
- chainId: Hex,
14
+ chainId: Chain,
15
15
  services: { accountBalance: AccountBalanceServiceV2 },
16
16
  ) => {
17
17
  const errors: HydratedBlockStateValidationError[] = []