@xyo-network/chain-validation 1.23.0 → 1.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,44 +1,49 @@
1
- var __defProp = Object.defineProperty;
2
- var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
-
4
1
  // src/block/validateBlock.ts
5
2
  import { ZERO_HASH as ZERO_HASH6 } from "@xylabs/sdk-js";
6
3
  import { BlockValidationError as BlockValidationError6 } from "@xyo-network/xl1-sdk";
7
4
 
8
5
  // src/block/validators/AllowedPayloadSchemas.ts
9
6
  import { ZERO_HASH } from "@xylabs/sdk-js";
10
- import { BlockValidationError, isAllowedBlockPayloadSchema } from "@xyo-network/xl1-sdk";
11
- var BlockAllowedPayloadSchemasValidator = /* @__PURE__ */ __name((context, block) => {
7
+ import {
8
+ BlockValidationError,
9
+ isAllowedBlockPayloadSchema
10
+ } from "@xyo-network/xl1-sdk";
11
+ var BlockAllowedPayloadSchemasValidator = (context, block) => {
12
12
  const errors = [];
13
13
  try {
14
14
  for (const schema of block.payload_schemas) {
15
15
  if (!isAllowedBlockPayloadSchema(schema)) {
16
- errors.push(new BlockValidationError(block?._hash ?? ZERO_HASH, block, `payload schema not allowed in block: ${schema}`));
16
+ errors.push(new BlockValidationError(
17
+ block?._hash ?? ZERO_HASH,
18
+ block,
19
+ `payload schema not allowed in block: ${schema}`
20
+ ));
17
21
  }
18
22
  }
19
23
  } catch (ex) {
20
- errors.push(new BlockValidationError(block?._hash ?? ZERO_HASH, block, `validation excepted: ${ex}`, ex));
24
+ errors.push(new BlockValidationError(
25
+ block?._hash ?? ZERO_HASH,
26
+ block,
27
+ `validation excepted: ${ex}`,
28
+ ex
29
+ ));
21
30
  }
22
31
  return errors;
23
- }, "BlockAllowedPayloadSchemasValidator");
32
+ };
24
33
 
25
34
  // src/block/validators/BoundWitness.ts
26
35
  import { ZERO_HASH as ZERO_HASH2 } from "@xylabs/sdk-js";
27
36
  import { BoundWitnessValidator } from "@xyo-network/sdk-js";
28
37
  import { BlockValidationError as BlockValidationError2 } from "@xyo-network/xl1-sdk";
29
- var error = /* @__PURE__ */ __name((block, message) => new BlockValidationError2(block?._hash ?? ZERO_HASH2, block, message), "error");
30
- var checkSignaturesShape = /* @__PURE__ */ __name((block) => {
38
+ var error = (block, message) => new BlockValidationError2(block?._hash ?? ZERO_HASH2, block, message);
39
+ var checkSignaturesShape = (block) => {
31
40
  const bw = block;
32
41
  if (bw.$signatures === void 0) {
33
- return Array.isArray(bw.signatures) ? [
34
- error(block, "BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)")
35
- ] : [
36
- error(block, "BoundWitness is missing `$signatures`")
37
- ];
42
+ return Array.isArray(bw.signatures) ? [error(block, "BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)")] : [error(block, "BoundWitness is missing `$signatures`")];
38
43
  }
39
44
  return [];
40
- }, "checkSignaturesShape");
41
- var BlockBoundWitnessValidator = /* @__PURE__ */ __name(async (_context, block) => {
45
+ };
46
+ var BlockBoundWitnessValidator = async (_context, block) => {
42
47
  try {
43
48
  const shapeErrors = checkSignaturesShape(block);
44
49
  if (shapeErrors.length > 0) return shapeErrors;
@@ -46,17 +51,15 @@ var BlockBoundWitnessValidator = /* @__PURE__ */ __name(async (_context, block)
46
51
  const bwErrors = await bwValidator.validate();
47
52
  return bwErrors.map((e) => error(block, `BoundWitness validation: ${e.message}`));
48
53
  } catch (ex) {
49
- return [
50
- error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)
51
- ];
54
+ return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)];
52
55
  }
53
- }, "BlockBoundWitnessValidator");
56
+ };
54
57
 
55
58
  // src/block/validators/Fields.ts
56
59
  import { isDefined, ZERO_HASH as ZERO_HASH3 } from "@xylabs/sdk-js";
57
60
  import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
58
61
  import { BlockValidationError as BlockValidationError3 } from "@xyo-network/xl1-sdk";
59
- var BlockFieldsValidator = /* @__PURE__ */ __name((context, block, chainId) => {
62
+ var BlockFieldsValidator = (context, block, chainId) => {
60
63
  const errors = [];
61
64
  try {
62
65
  if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {
@@ -69,48 +72,60 @@ var BlockFieldsValidator = /* @__PURE__ */ __name((context, block, chainId) => {
69
72
  }
70
73
  }
71
74
  if (new Set(txHashes).size < txHashes.length) {
72
- errors.push(new BlockValidationError3(block?._hash ?? ZERO_HASH3, block, `Duplicate Transaction Hashes: ${txHashes}`));
75
+ errors.push(new BlockValidationError3(
76
+ block?._hash ?? ZERO_HASH3,
77
+ block,
78
+ `Duplicate Transaction Hashes: ${txHashes}`
79
+ ));
73
80
  }
74
81
  } catch (ex) {
75
- errors.push(new BlockValidationError3(block?._hash ?? ZERO_HASH3, block, `validation excepted: ${ex}`, ex));
82
+ errors.push(new BlockValidationError3(
83
+ block?._hash ?? ZERO_HASH3,
84
+ block,
85
+ `validation excepted: ${ex}`,
86
+ ex
87
+ ));
76
88
  }
77
89
  return errors;
78
- }, "BlockFieldsValidator");
90
+ };
79
91
 
80
92
  // src/block/validators/JsonSchema.ts
81
93
  import { ZERO_HASH as ZERO_HASH4 } from "@xylabs/sdk-js";
82
94
  import { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError as BlockValidationError4 } from "@xyo-network/xl1-sdk";
83
95
  import { Ajv } from "ajv";
84
- var BlockJsonSchemaValidator = /* @__PURE__ */ __name((jsonSchema = BlockBoundWitnessWithStorageMetaJsonSchema) => {
85
- const ajv = new Ajv({
86
- allErrors: true,
87
- strict: true
88
- });
96
+ var BlockJsonSchemaValidator = (jsonSchema = BlockBoundWitnessWithStorageMetaJsonSchema) => {
97
+ const ajv = new Ajv({ allErrors: true, strict: true });
89
98
  const validate = ajv.compile(jsonSchema);
90
99
  return async (context, block) => {
91
100
  const errors = [];
92
101
  try {
93
102
  await validate(block);
94
103
  if ((validate.errors ?? []).length > 0) {
95
- const error2 = new BlockValidationError4(block?._hash ?? ZERO_HASH4, block, `failed JSON schema validation: ${ajv.errorsText(validate.errors, {
96
- separator: "\n"
97
- })}`);
104
+ const error2 = new BlockValidationError4(
105
+ block?._hash ?? ZERO_HASH4,
106
+ block,
107
+ `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: "\n" })}`
108
+ );
98
109
  error2.cause = validate.errors;
99
110
  errors.push(error2);
100
111
  }
101
112
  } catch (ex) {
102
- const error2 = new BlockValidationError4(block?._hash ?? ZERO_HASH4, block, `validation excepted: ${ex}`);
113
+ const error2 = new BlockValidationError4(
114
+ block?._hash ?? ZERO_HASH4,
115
+ block,
116
+ `validation excepted: ${ex}`
117
+ );
103
118
  error2.cause = ex;
104
119
  errors.push(error2);
105
120
  }
106
121
  return errors;
107
122
  };
108
- }, "BlockJsonSchemaValidator");
123
+ };
109
124
 
110
125
  // src/block/validators/PreviousHash.ts
111
126
  import { isHash, ZERO_HASH as ZERO_HASH5 } from "@xylabs/sdk-js";
112
127
  import { BlockValidationError as BlockValidationError5 } from "@xyo-network/xl1-sdk";
113
- var BlockPreviousHashValidator = /* @__PURE__ */ __name((context, block) => {
128
+ var BlockPreviousHashValidator = (context, block) => {
114
129
  const errors = [];
115
130
  try {
116
131
  const blockNumber = block.block;
@@ -126,15 +141,19 @@ var BlockPreviousHashValidator = /* @__PURE__ */ __name((context, block) => {
126
141
  errors.push(new BlockValidationError5(block?._hash ?? ZERO_HASH5, block, "invalid block number"));
127
142
  }
128
143
  } catch (ex) {
129
- const error2 = new BlockValidationError5(block?._hash ?? ZERO_HASH5, block, `Failed BlockPreviousHashValidator: ${ex}`);
144
+ const error2 = new BlockValidationError5(
145
+ block?._hash ?? ZERO_HASH5,
146
+ block,
147
+ `Failed BlockPreviousHashValidator: ${ex}`
148
+ );
130
149
  error2.cause = ex;
131
150
  errors.push(error2);
132
151
  }
133
152
  return errors;
134
- }, "BlockPreviousHashValidator");
153
+ };
135
154
 
136
155
  // src/block/validateBlock.ts
137
- var validateBlock = /* @__PURE__ */ __name(async (context, block, chainId, additionalValidators = []) => {
156
+ var validateBlock = async (context, block, chainId, additionalValidators = []) => {
138
157
  const errors = [];
139
158
  try {
140
159
  const validators = [
@@ -144,12 +163,14 @@ var validateBlock = /* @__PURE__ */ __name(async (context, block, chainId, addit
144
163
  BlockAllowedPayloadSchemasValidator,
145
164
  ...additionalValidators
146
165
  ];
147
- errors.push(...(await Promise.all(validators.map((validator) => validator(context, block, chainId)))).flat());
166
+ errors.push(...(await Promise.all(
167
+ validators.map((validator) => validator(context, block, chainId))
168
+ )).flat());
148
169
  } catch (ex) {
149
170
  errors.push(new BlockValidationError6(block?._hash ?? ZERO_HASH6, block, "validation excepted", ex));
150
171
  }
151
172
  return errors;
152
- }, "validateBlock");
173
+ };
153
174
 
154
175
  // src/hydratedBlock/validateHydratedBlock.ts
155
176
  import { ZERO_HASH as ZERO_HASH18 } from "@xylabs/sdk-js";
@@ -163,11 +184,20 @@ import { HydratedBlockValidationError } from "@xyo-network/xl1-sdk";
163
184
  import { ZERO_HASH as ZERO_HASH16 } from "@xylabs/sdk-js";
164
185
  import { BoundWitnessSchema as BoundWitnessSchema2 } from "@xyo-network/boundwitness-model";
165
186
  import { SchemaSchema } from "@xyo-network/sdk-js";
166
- import { BridgeDestinationObservationSchema, BridgeIntentSchema, BridgeSourceObservationSchema, ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError as InBlockPayloadValidationError12, TimeSchema, TransferSchema } from "@xyo-network/xl1-sdk";
187
+ import {
188
+ BridgeDestinationObservationSchema,
189
+ BridgeIntentSchema,
190
+ BridgeSourceObservationSchema,
191
+ ChainStakeIntentSchema,
192
+ HashSchema,
193
+ InBlockPayloadValidationError as InBlockPayloadValidationError12,
194
+ TimeSchema,
195
+ TransferSchema
196
+ } from "@xyo-network/xl1-sdk";
167
197
 
168
198
  // src/elevatedPayload/lib/isElevatedFromBlock.ts
169
199
  import { isTransactionBoundWitness } from "@xyo-network/xl1-sdk";
170
- var isElevatedFromBlock = /* @__PURE__ */ __name((payload, [, payloads]) => {
200
+ var isElevatedFromBlock = (payload, [, payloads]) => {
171
201
  const txs = payloads.filter((p) => isTransactionBoundWitness(p));
172
202
  for (const tx of txs) {
173
203
  if (tx.payload_hashes.includes(payload._hash)) {
@@ -175,27 +205,32 @@ var isElevatedFromBlock = /* @__PURE__ */ __name((payload, [, payloads]) => {
175
205
  }
176
206
  }
177
207
  return true;
178
- }, "isElevatedFromBlock");
208
+ };
179
209
 
180
210
  // src/elevatedPayload/lib/validateElevatedFromBlock.ts
181
211
  import { InBlockPayloadValidationError, transactionsFromHydratedBlock } from "@xyo-network/xl1-sdk";
182
- var validateElevatedFromBlock = /* @__PURE__ */ __name((context, payload, block) => {
212
+ var validateElevatedFromBlock = (context, payload, block) => {
183
213
  const errors = [];
184
214
  try {
185
215
  const txs = transactionsFromHydratedBlock(block);
186
216
  const allTxPayloadHashes = new Set(txs.flatMap((tx) => tx.payload_hashes));
187
217
  if (allTxPayloadHashes.has(payload._hash)) {
188
- errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`));
218
+ errors.push(new InBlockPayloadValidationError(
219
+ block[0]?._hash,
220
+ block,
221
+ payload,
222
+ `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`
223
+ ));
189
224
  }
190
225
  } catch (ex) {
191
226
  errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${ex}`, ex));
192
227
  }
193
228
  return errors;
194
- }, "validateElevatedFromBlock");
229
+ };
195
230
 
196
231
  // src/elevatedPayload/lib/validateElevatedFromTransaction.ts
197
232
  import { InBlockPayloadValidationError as InBlockPayloadValidationError2, transactionsFromHydratedBlock as transactionsFromHydratedBlock2 } from "@xyo-network/xl1-sdk";
198
- var validateElevatedFromTransaction = /* @__PURE__ */ __name((context, payload, block) => {
233
+ var validateElevatedFromTransaction = (context, payload, block) => {
199
234
  const errors = [];
200
235
  try {
201
236
  const txs = transactionsFromHydratedBlock2(block);
@@ -208,32 +243,49 @@ var validateElevatedFromTransaction = /* @__PURE__ */ __name((context, payload,
208
243
  errors.push(new InBlockPayloadValidationError2(payload._hash, block, payload, "No Transactions in block"));
209
244
  }
210
245
  } catch (ex) {
211
- errors.push(new InBlockPayloadValidationError2(payload._hash, block, payload, `Failed validateElevatedFromTransaction: ${ex}`, ex));
246
+ errors.push(new InBlockPayloadValidationError2(
247
+ payload._hash,
248
+ block,
249
+ payload,
250
+ `Failed validateElevatedFromTransaction: ${ex}`,
251
+ ex
252
+ ));
212
253
  }
213
254
  return errors;
214
- }, "validateElevatedFromTransaction");
255
+ };
215
256
 
216
257
  // src/elevatedPayload/lib/validateTransactionInBlock.ts
217
258
  import { ZERO_HASH as ZERO_HASH7 } from "@xylabs/sdk-js";
218
259
  import { isHashMeta } from "@xyo-network/sdk-js";
219
- import { BoundWitnessSignaturesValidator, InBlockPayloadValidationError as InBlockPayloadValidationError3, isTransactionBoundWitness as isTransactionBoundWitness2, validateTransaction } from "@xyo-network/xl1-sdk";
220
- var validateTransactionInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
260
+ import {
261
+ BoundWitnessSignaturesValidator,
262
+ InBlockPayloadValidationError as InBlockPayloadValidationError3,
263
+ isTransactionBoundWitness as isTransactionBoundWitness2,
264
+ validateTransaction
265
+ } from "@xyo-network/xl1-sdk";
266
+ var validateTransactionInBlock = async (context, payload, block) => {
221
267
  const errors = [];
222
268
  try {
223
269
  if (isTransactionBoundWitness2(payload) && isHashMeta(payload)) {
224
- const txErrors = await validateTransaction({
225
- ...context,
226
- chainId: block[0].chain
227
- }, [
228
- payload,
229
- block[1]
230
- ]);
270
+ const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, block[1]]);
231
271
  for (const txError of txErrors) {
232
- errors.push(new InBlockPayloadValidationError3(payload._hash, block, payload, `TransactionValidation error: ${txError}`, txError));
272
+ errors.push(new InBlockPayloadValidationError3(
273
+ payload._hash,
274
+ block,
275
+ payload,
276
+ `TransactionValidation error: ${txError}`,
277
+ txError
278
+ ));
233
279
  }
234
280
  const txSignatureErrors = await BoundWitnessSignaturesValidator(payload);
235
281
  for (const txSignatureError of txSignatureErrors) {
236
- errors.push(new InBlockPayloadValidationError3(payload._hash, block, payload, `BoundWitnessSignaturesValidator error: ${txSignatureError}`, txSignatureError));
282
+ errors.push(new InBlockPayloadValidationError3(
283
+ payload._hash,
284
+ block,
285
+ payload,
286
+ `BoundWitnessSignaturesValidator error: ${txSignatureError}`,
287
+ txSignatureError
288
+ ));
237
289
  }
238
290
  } else {
239
291
  errors.push(new InBlockPayloadValidationError3(payload._hash, block, payload, "Payload failed isTransactionBoundWitness or isHashMeta"));
@@ -242,11 +294,11 @@ var validateTransactionInBlock = /* @__PURE__ */ __name(async (context, payload,
242
294
  errors.push(new InBlockPayloadValidationError3(payload._hash ?? ZERO_HASH7, block, payload, `validation excepted: ${ex}`, ex));
243
295
  }
244
296
  return errors;
245
- }, "validateTransactionInBlock");
297
+ };
246
298
 
247
299
  // src/elevatedPayload/lib/validateTypedPayloadInBlock.ts
248
300
  import { isHashMeta as isHashMeta2 } from "@xyo-network/sdk-js";
249
- var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (context, payload, block, identityFunction) => {
301
+ var validateTypedPayloadInBlock = async (context, payload, block, identityFunction) => {
250
302
  const errors = [];
251
303
  try {
252
304
  if (identityFunction(payload) && isHashMeta2(payload)) {
@@ -262,12 +314,12 @@ var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (context, payload
262
314
  errors.push(new Error(`Failed validateTypedPayloadInBlock: ${ex}`));
263
315
  }
264
316
  return errors;
265
- }, "validateTypedPayloadInBlock");
317
+ };
266
318
 
267
319
  // src/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts
268
320
  import { ZERO_HASH as ZERO_HASH8 } from "@xylabs/sdk-js";
269
321
  import { InBlockPayloadValidationError as InBlockPayloadValidationError4, isBridgeDestinationObservation } from "@xyo-network/xl1-sdk";
270
- var validateBridgeDestinationObservationInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
322
+ var validateBridgeDestinationObservationInBlock = async (context, payload, block) => {
271
323
  const errors = [];
272
324
  try {
273
325
  const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation);
@@ -275,15 +327,21 @@ var validateBridgeDestinationObservationInBlock = /* @__PURE__ */ __name(async (
275
327
  errors.push(new InBlockPayloadValidationError4(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
276
328
  }
277
329
  } catch (ex) {
278
- errors.push(new InBlockPayloadValidationError4(block?.[0]?._hash ?? ZERO_HASH8, block, payload, `Failed validateBridgeObservationInBlock: ${ex}`, ex));
330
+ errors.push(new InBlockPayloadValidationError4(
331
+ block?.[0]?._hash ?? ZERO_HASH8,
332
+ block,
333
+ payload,
334
+ `Failed validateBridgeObservationInBlock: ${ex}`,
335
+ ex
336
+ ));
279
337
  }
280
338
  return errors;
281
- }, "validateBridgeDestinationObservationInBlock");
339
+ };
282
340
 
283
341
  // src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts
284
342
  import { ZERO_HASH as ZERO_HASH9 } from "@xylabs/sdk-js";
285
343
  import { InBlockPayloadValidationError as InBlockPayloadValidationError5, isBridgeIntent } from "@xyo-network/xl1-sdk";
286
- var validateBridgeIntentInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
344
+ var validateBridgeIntentInBlock = async (context, payload, block) => {
287
345
  const errors = [];
288
346
  try {
289
347
  const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent);
@@ -291,15 +349,21 @@ var validateBridgeIntentInBlock = /* @__PURE__ */ __name(async (context, payload
291
349
  errors.push(new InBlockPayloadValidationError5(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
292
350
  }
293
351
  } catch (ex) {
294
- errors.push(new InBlockPayloadValidationError5(block?.[0]?._hash ?? ZERO_HASH9, block, payload, `Failed validateBridgeIntentInBlock: ${ex}`, ex));
352
+ errors.push(new InBlockPayloadValidationError5(
353
+ block?.[0]?._hash ?? ZERO_HASH9,
354
+ block,
355
+ payload,
356
+ `Failed validateBridgeIntentInBlock: ${ex}`,
357
+ ex
358
+ ));
295
359
  }
296
360
  return errors;
297
- }, "validateBridgeIntentInBlock");
361
+ };
298
362
 
299
363
  // src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts
300
364
  import { ZERO_HASH as ZERO_HASH10 } from "@xylabs/sdk-js";
301
365
  import { InBlockPayloadValidationError as InBlockPayloadValidationError6, isBridgeSourceObservation } from "@xyo-network/xl1-sdk";
302
- var validateBridgeSourceObservationInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
366
+ var validateBridgeSourceObservationInBlock = async (context, payload, block) => {
303
367
  const errors = [];
304
368
  try {
305
369
  const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation);
@@ -307,15 +371,21 @@ var validateBridgeSourceObservationInBlock = /* @__PURE__ */ __name(async (conte
307
371
  errors.push(new InBlockPayloadValidationError6(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
308
372
  }
309
373
  } catch (ex) {
310
- errors.push(new InBlockPayloadValidationError6(block?.[0]?._hash ?? ZERO_HASH10, block, payload, `Failed validateBridgeObservationInBlock: ${ex}`, ex));
374
+ errors.push(new InBlockPayloadValidationError6(
375
+ block?.[0]?._hash ?? ZERO_HASH10,
376
+ block,
377
+ payload,
378
+ `Failed validateBridgeObservationInBlock: ${ex}`,
379
+ ex
380
+ ));
311
381
  }
312
382
  return errors;
313
- }, "validateBridgeSourceObservationInBlock");
383
+ };
314
384
 
315
385
  // src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts
316
386
  import { ZERO_HASH as ZERO_HASH11 } from "@xylabs/sdk-js";
317
387
  import { InBlockPayloadValidationError as InBlockPayloadValidationError7, isChainStakeIntent } from "@xyo-network/xl1-sdk";
318
- var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
388
+ var validateChainStakeIntentInBlock = async (context, payload, block) => {
319
389
  const errors = [];
320
390
  try {
321
391
  const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isChainStakeIntent);
@@ -323,15 +393,21 @@ var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (context, pay
323
393
  errors.push(new InBlockPayloadValidationError7(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
324
394
  }
325
395
  } catch (ex) {
326
- errors.push(new InBlockPayloadValidationError7(block[0]?._hash ?? ZERO_HASH11, block, payload, `validation excepted: ${ex}`, ex));
396
+ errors.push(new InBlockPayloadValidationError7(
397
+ block[0]?._hash ?? ZERO_HASH11,
398
+ block,
399
+ payload,
400
+ `validation excepted: ${ex}`,
401
+ ex
402
+ ));
327
403
  }
328
404
  return errors;
329
- }, "validateChainStakeIntentInBlock");
405
+ };
330
406
 
331
407
  // src/elevatedPayload/payloads/validateHashInBlock.ts
332
408
  import { ZERO_HASH as ZERO_HASH12 } from "@xylabs/sdk-js";
333
409
  import { InBlockPayloadValidationError as InBlockPayloadValidationError8, isHashPayload } from "@xyo-network/xl1-sdk";
334
- var validateHashInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
410
+ var validateHashInBlock = async (context, payload, block) => {
335
411
  const errors = [];
336
412
  try {
337
413
  const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isHashPayload);
@@ -339,16 +415,22 @@ var validateHashInBlock = /* @__PURE__ */ __name(async (context, payload, block)
339
415
  errors.push(new InBlockPayloadValidationError8(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
340
416
  }
341
417
  } catch (ex) {
342
- errors.push(new InBlockPayloadValidationError8(block?.[0]?._hash ?? ZERO_HASH12, block, payload, `validation excepted: ${ex}`, ex));
418
+ errors.push(new InBlockPayloadValidationError8(
419
+ block?.[0]?._hash ?? ZERO_HASH12,
420
+ block,
421
+ payload,
422
+ `validation excepted: ${ex}`,
423
+ ex
424
+ ));
343
425
  }
344
426
  return errors;
345
- }, "validateHashInBlock");
427
+ };
346
428
 
347
429
  // src/elevatedPayload/payloads/validateSchemaInBlock.ts
348
430
  import { ZERO_HASH as ZERO_HASH13 } from "@xylabs/sdk-js";
349
431
  import { isSchemaPayload } from "@xyo-network/sdk-js";
350
432
  import { InBlockPayloadValidationError as InBlockPayloadValidationError9 } from "@xyo-network/xl1-sdk";
351
- var validateSchemaInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
433
+ var validateSchemaInBlock = async (context, payload, block) => {
352
434
  const errors = [];
353
435
  try {
354
436
  const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isSchemaPayload);
@@ -356,15 +438,21 @@ var validateSchemaInBlock = /* @__PURE__ */ __name(async (context, payload, bloc
356
438
  errors.push(new InBlockPayloadValidationError9(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
357
439
  }
358
440
  } catch (ex) {
359
- errors.push(new InBlockPayloadValidationError9(block?.[0]?._hash ?? ZERO_HASH13, block, payload, `Failed validateSchemaInBlock: ${ex}`, ex));
441
+ errors.push(new InBlockPayloadValidationError9(
442
+ block?.[0]?._hash ?? ZERO_HASH13,
443
+ block,
444
+ payload,
445
+ `Failed validateSchemaInBlock: ${ex}`,
446
+ ex
447
+ ));
360
448
  }
361
449
  return errors;
362
- }, "validateSchemaInBlock");
450
+ };
363
451
 
364
452
  // src/elevatedPayload/payloads/validateTimeInBlock.ts
365
453
  import { ZERO_HASH as ZERO_HASH14 } from "@xylabs/sdk-js";
366
454
  import { InBlockPayloadValidationError as InBlockPayloadValidationError10, isTimePayload } from "@xyo-network/xl1-sdk";
367
- var validateTimeInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
455
+ var validateTimeInBlock = async (context, payload, block) => {
368
456
  const errors = [];
369
457
  try {
370
458
  const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload);
@@ -372,15 +460,21 @@ var validateTimeInBlock = /* @__PURE__ */ __name(async (context, payload, block)
372
460
  errors.push(new InBlockPayloadValidationError10(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
373
461
  }
374
462
  } catch (ex) {
375
- errors.push(new InBlockPayloadValidationError10(block?.[0]?._hash ?? ZERO_HASH14, block, payload, `Failed validateTimeInBlock: ${ex}`, ex));
463
+ errors.push(new InBlockPayloadValidationError10(
464
+ block?.[0]?._hash ?? ZERO_HASH14,
465
+ block,
466
+ payload,
467
+ `Failed validateTimeInBlock: ${ex}`,
468
+ ex
469
+ ));
376
470
  }
377
471
  return errors;
378
- }, "validateTimeInBlock");
472
+ };
379
473
 
380
474
  // src/elevatedPayload/payloads/validateTransferInBlock.ts
381
475
  import { ZERO_HASH as ZERO_HASH15 } from "@xylabs/sdk-js";
382
476
  import { InBlockPayloadValidationError as InBlockPayloadValidationError11, isTransfer } from "@xyo-network/xl1-sdk";
383
- var validateTransferInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
477
+ var validateTransferInBlock = async (context, payload, block) => {
384
478
  const errors = [];
385
479
  try {
386
480
  const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTransfer);
@@ -388,10 +482,16 @@ var validateTransferInBlock = /* @__PURE__ */ __name(async (context, payload, bl
388
482
  errors.push(new InBlockPayloadValidationError11(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
389
483
  }
390
484
  } catch (ex) {
391
- errors.push(new InBlockPayloadValidationError11(block?.[0]?._hash ?? ZERO_HASH15, block, payload, `Failed validateTransferInBlock: ${ex}`, ex));
485
+ errors.push(new InBlockPayloadValidationError11(
486
+ block?.[0]?._hash ?? ZERO_HASH15,
487
+ block,
488
+ payload,
489
+ `Failed validateTransferInBlock: ${ex}`,
490
+ ex
491
+ ));
392
492
  }
393
493
  return errors;
394
- }, "validateTransferInBlock");
494
+ };
395
495
 
396
496
  // src/elevatedPayload/validatePayloadInBlock.ts
397
497
  var payloadValidators = {
@@ -405,7 +505,7 @@ var payloadValidators = {
405
505
  [TimeSchema]: validateTimeInBlock,
406
506
  [TransferSchema]: validateTransferInBlock
407
507
  };
408
- var validatePayloadInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
508
+ var validatePayloadInBlock = async (context, payload, block) => {
409
509
  const errors = [];
410
510
  try {
411
511
  const validator = payloadValidators[payload.schema];
@@ -415,66 +515,70 @@ var validatePayloadInBlock = /* @__PURE__ */ __name(async (context, payload, blo
415
515
  errors.push(new InBlockPayloadValidationError12(block?.[0]?._hash ?? ZERO_HASH16, block, payload, `Unsupported payload schema: ${payload.schema}`));
416
516
  }
417
517
  } catch (ex) {
418
- const error2 = new InBlockPayloadValidationError12(block?.[0]?._hash ?? ZERO_HASH16, block, payload, `validation excepted: ${ex}`, ex);
518
+ const error2 = new InBlockPayloadValidationError12(
519
+ block?.[0]?._hash ?? ZERO_HASH16,
520
+ block,
521
+ payload,
522
+ `validation excepted: ${ex}`,
523
+ ex
524
+ );
419
525
  errors.push(error2);
420
526
  }
421
527
  return errors;
422
- }, "validatePayloadInBlock");
528
+ };
423
529
 
424
530
  // src/hydratedBlock/validators/Payloads.ts
425
- var PayloadsInBlockValidator = /* @__PURE__ */ __name(async (context, [block, payloads]) => {
531
+ var PayloadsInBlockValidator = async (context, [block, payloads]) => {
426
532
  const errors = [];
427
533
  try {
428
534
  const payloadMap = {};
429
535
  for (const payload of payloads) {
430
536
  payloadMap[payload._hash] = payload;
431
537
  }
432
- const remainingPayloads = {
433
- ...payloadMap
434
- };
538
+ const remainingPayloads = { ...payloadMap };
435
539
  for (let i = 0; i < block.payload_hashes.length; i++) {
436
540
  const hash = block.payload_hashes[i];
437
541
  const schema = block.payload_schemas[i];
438
542
  const payload = payloadMap[hash];
439
543
  if (payload) {
440
- const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [
441
- block,
442
- payloads
443
- ]);
544
+ const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [block, payloads]);
444
545
  for (const payloadInBlockError of payloadInBlockErrors) {
445
- errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [
446
- block,
447
- payloads
448
- ], `validatePayloadInBlock error: ${payloadInBlockError}`, payloadInBlockError));
546
+ errors.push(new HydratedBlockValidationError(
547
+ block?._hash ?? ZERO_HASH17,
548
+ [block, payloads],
549
+ `validatePayloadInBlock error: ${payloadInBlockError}`,
550
+ payloadInBlockError
551
+ ));
449
552
  }
450
553
  delete remainingPayloads[hash];
451
554
  } else {
452
- errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [
453
- block,
454
- payloads
455
- ], `missing payload ${hash} ${schema}`));
555
+ errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [block, payloads], `missing payload ${hash} ${schema}`));
456
556
  }
457
557
  }
458
558
  if (Object.keys(remainingPayloads).length > 0) {
459
- errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [
460
- block,
461
- payloads
462
- ], `extra payloads ${Object.keys(payloadMap).join(", ")}`));
559
+ errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(", ")}`));
463
560
  }
464
561
  } catch (ex) {
465
- errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [
466
- block,
467
- payloads
468
- ], `Failed PayloadsInBlockValidator: ${ex}`, ex));
562
+ errors.push(new HydratedBlockValidationError(
563
+ block?._hash ?? ZERO_HASH17,
564
+ [block, payloads],
565
+ `Failed PayloadsInBlockValidator: ${ex}`,
566
+ ex
567
+ ));
469
568
  }
470
569
  return errors;
471
- }, "PayloadsInBlockValidator");
570
+ };
472
571
 
473
572
  // src/hydratedBlock/validateHydratedBlock.ts
474
- var validateHydratedBlock = /* @__PURE__ */ __name(async (context, hydratedBlock, chainIdAtBlockNumber, additionalValidators = [], additionalBlockValidators = []) => {
573
+ var validateHydratedBlock = async (context, hydratedBlock, chainIdAtBlockNumber, additionalValidators = [], additionalBlockValidators = []) => {
475
574
  const errors = [];
476
575
  try {
477
- const validateBlockErrors = await validateBlock(context, hydratedBlock[0], chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : void 0, additionalBlockValidators);
576
+ const validateBlockErrors = await validateBlock(
577
+ context,
578
+ hydratedBlock[0],
579
+ chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : void 0,
580
+ additionalBlockValidators
581
+ );
478
582
  for (const validateBlockError of validateBlockErrors) {
479
583
  errors.push(new HydratedBlockValidationError2(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError));
480
584
  }
@@ -488,10 +592,15 @@ var validateHydratedBlock = /* @__PURE__ */ __name(async (context, hydratedBlock
488
592
  ];
489
593
  errors.push(...(await Promise.all(validators.map((v) => v(context, hydratedBlock, chainIdAtBlockNumber)))).flat());
490
594
  } catch (ex) {
491
- errors.push(new HydratedBlockValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH18, hydratedBlock, `Failed validateHydratedBlock: ${ex}`, ex));
595
+ errors.push(new HydratedBlockValidationError2(
596
+ hydratedBlock?.[0]?._hash ?? ZERO_HASH18,
597
+ hydratedBlock,
598
+ `Failed validateHydratedBlock: ${ex}`,
599
+ ex
600
+ ));
492
601
  }
493
602
  return errors;
494
- }, "validateHydratedBlock");
603
+ };
495
604
 
496
605
  // src/hydratedBlockState/validateHydratedBlockState.ts
497
606
  import { spanRootAsync as spanRootAsync2, ZERO_HASH as ZERO_HASH20 } from "@xylabs/sdk-js";
@@ -499,7 +608,13 @@ import { HydratedBlockStateValidationError as HydratedBlockStateValidationError2
499
608
 
500
609
  // src/hydratedBlockState/validators/RequiredBalance.ts
501
610
  import { spanRootAsync, ZERO_HASH as ZERO_HASH19 } from "@xylabs/sdk-js";
502
- import { AttoXL1, HydratedBlockStateValidationError, isSignedTransactionBoundWitnessWithHashMeta, netBalancesForPayloads, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-sdk";
611
+ import {
612
+ AttoXL1,
613
+ HydratedBlockStateValidationError,
614
+ isSignedTransactionBoundWitnessWithHashMeta,
615
+ netBalancesForPayloads,
616
+ XYO_ZERO_ADDRESS
617
+ } from "@xyo-network/xl1-sdk";
503
618
  function offendingTransactionHashesForAddress(block, address) {
504
619
  const hashes = [];
505
620
  for (const payload of block[1]) {
@@ -509,15 +624,12 @@ function offendingTransactionHashesForAddress(block, address) {
509
624
  }
510
625
  return hashes;
511
626
  }
512
- __name(offendingTransactionHashesForAddress, "offendingTransactionHashesForAddress");
513
- var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context, block) => {
627
+ var RequiredBalanceBlockStateValidator = async (context, block) => {
514
628
  return await spanRootAsync("RequiredBalanceBlockStateValidator", async () => {
515
629
  const errors = [];
516
630
  let chainId = "00";
517
631
  try {
518
- const netBalances = netBalancesForPayloads({
519
- singletons: {}
520
- }, block[1]);
632
+ const netBalances = netBalancesForPayloads({ singletons: {} }, block[1]);
521
633
  const netBalanceAddresses = Object.keys(netBalances);
522
634
  const requiredBalances = {};
523
635
  for (const address of netBalanceAddresses) {
@@ -526,33 +638,45 @@ var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context,
526
638
  }
527
639
  }
528
640
  const previous = block[0].previous;
529
- if (previous === null) return [
530
- new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH19, "00", block, "Insufficient funds because first block")
531
- ];
641
+ if (previous === null) return [new HydratedBlockStateValidationError(
642
+ block?.[0]?._hash ?? ZERO_HASH19,
643
+ "00",
644
+ block,
645
+ "Insufficient funds because first block"
646
+ )];
532
647
  chainId = await context.chainIdAtBlockNumber(block[0].block);
533
648
  await spanRootAsync("RequiredBalanceBlockStateValidator|balancesLoop", async () => {
534
649
  for (const [address, reqBalance] of Object.entries(requiredBalances)) {
535
- const result = await context.accountBalance.accountBalances([
536
- address
537
- ], {
538
- head: previous
539
- });
650
+ const result = await context.accountBalance.accountBalances([address], { head: previous });
540
651
  const balance = result[address] ?? AttoXL1(0n);
541
652
  if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
542
653
  const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address);
543
- errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH19, chainId, block, `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`, void 0, offendingTransactionHashes.length > 0 ? offendingTransactionHashes : void 0));
654
+ errors.push(new HydratedBlockStateValidationError(
655
+ block?.[0]?._hash ?? ZERO_HASH19,
656
+ chainId,
657
+ block,
658
+ `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,
659
+ void 0,
660
+ offendingTransactionHashes.length > 0 ? offendingTransactionHashes : void 0
661
+ ));
544
662
  }
545
663
  }
546
664
  }, context);
547
665
  } catch (ex) {
548
- errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH19, chainId, block, `Failed RequiredBalanceBlockStateValidator: ${ex}`, ex));
666
+ errors.push(new HydratedBlockStateValidationError(
667
+ block?.[0]?._hash ?? ZERO_HASH19,
668
+ chainId,
669
+ block,
670
+ `Failed RequiredBalanceBlockStateValidator: ${ex}`,
671
+ ex
672
+ ));
549
673
  }
550
674
  return await Promise.resolve(errors);
551
675
  }, context);
552
- }, "RequiredBalanceBlockStateValidator");
676
+ };
553
677
 
554
678
  // src/hydratedBlockState/validateHydratedBlockState.ts
555
- var validateHydratedBlockState = /* @__PURE__ */ __name(async (context, hydratedBlock, additionalValidators = []) => {
679
+ var validateHydratedBlockState = async (context, hydratedBlock, additionalValidators = []) => {
556
680
  return await spanRootAsync2("validateHydratedBlockState", async () => {
557
681
  const errors = [];
558
682
  let chainId;
@@ -560,7 +684,13 @@ var validateHydratedBlockState = /* @__PURE__ */ __name(async (context, hydrated
560
684
  chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block);
561
685
  const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber);
562
686
  for (const validateHydratedBlockError of validateHydratedBlockErrors) {
563
- errors.push(new HydratedBlockStateValidationError2(hydratedBlock[0]._hash, chainId, hydratedBlock, `validateBlock error: ${validateHydratedBlockError}`, validateHydratedBlockError));
687
+ errors.push(new HydratedBlockStateValidationError2(
688
+ hydratedBlock[0]._hash,
689
+ chainId,
690
+ hydratedBlock,
691
+ `validateBlock error: ${validateHydratedBlockError}`,
692
+ validateHydratedBlockError
693
+ ));
564
694
  }
565
695
  const validators = [
566
696
  RequiredBalanceBlockStateValidator,
@@ -568,11 +698,17 @@ var validateHydratedBlockState = /* @__PURE__ */ __name(async (context, hydrated
568
698
  ];
569
699
  errors.push(...(await Promise.all(validators.map((v) => v(context, hydratedBlock)))).flat());
570
700
  } catch (ex) {
571
- errors.push(new HydratedBlockStateValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH20, chainId ?? "00", hydratedBlock, `Failed validateHydratedBlockState: ${ex}`, ex));
701
+ errors.push(new HydratedBlockStateValidationError2(
702
+ hydratedBlock?.[0]?._hash ?? ZERO_HASH20,
703
+ chainId ?? "00",
704
+ hydratedBlock,
705
+ `Failed validateHydratedBlockState: ${ex}`,
706
+ ex
707
+ ));
572
708
  }
573
709
  return errors;
574
710
  }, context);
575
- }, "validateHydratedBlockState");
711
+ };
576
712
 
577
713
  // src/hydratedTransactionState/validateHydratedTransactionState.ts
578
714
  import { spanRootAsync as spanRootAsync4, ZERO_HASH as ZERO_HASH22 } from "@xylabs/sdk-js";
@@ -580,37 +716,50 @@ import { HydratedTransactionValidationError as HydratedTransactionValidationErro
580
716
 
581
717
  // src/hydratedTransactionState/validators/RequiredBalance.ts
582
718
  import { spanRootAsync as spanRootAsync3, ZERO_HASH as ZERO_HASH21 } from "@xylabs/sdk-js";
583
- import { AttoXL1 as AttoXL12, HydratedTransactionValidationError, HydratedTransactionWrapper, netBalancesForPayloads as netBalancesForPayloads2, transactionRequiredGas, XYO_ZERO_ADDRESS as XYO_ZERO_ADDRESS2 } from "@xyo-network/xl1-sdk";
719
+ import {
720
+ AttoXL1 as AttoXL12,
721
+ HydratedTransactionValidationError,
722
+ HydratedTransactionWrapper,
723
+ netBalancesForPayloads as netBalancesForPayloads2,
724
+ transactionRequiredGas,
725
+ XYO_ZERO_ADDRESS as XYO_ZERO_ADDRESS2
726
+ } from "@xyo-network/xl1-sdk";
584
727
  async function balanceShortfallErrors(context, tx, requiredBalances) {
585
728
  const errors = [];
586
729
  const requiredAddresses = Object.keys(requiredBalances);
587
730
  if (requiredAddresses.length === 0) return errors;
588
731
  const headBlock = (await context.blockViewer.currentBlock())[0];
589
- const balances = await context.accountBalanceViewer.accountBalances(requiredAddresses, {
590
- head: headBlock._hash
591
- });
732
+ const balances = await context.accountBalanceViewer.accountBalances(
733
+ requiredAddresses,
734
+ { head: headBlock._hash }
735
+ );
592
736
  for (const address of requiredAddresses) {
593
737
  const reqBalance = requiredBalances[address];
594
738
  const balance = balances[address] ?? AttoXL12(0n);
595
739
  if (address !== XYO_ZERO_ADDRESS2 && reqBalance > balance) {
596
- errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH21, tx, `insufficient balance for ${address} ${balance} < ${reqBalance}`));
740
+ errors.push(new HydratedTransactionValidationError(
741
+ tx?.[0]?._hash ?? ZERO_HASH21,
742
+ tx,
743
+ `insufficient balance for ${address} ${balance} < ${reqBalance}`
744
+ ));
597
745
  }
598
746
  }
599
747
  return errors;
600
748
  }
601
- __name(balanceShortfallErrors, "balanceShortfallErrors");
602
- var RequiredBalanceTransactionStateValidator = /* @__PURE__ */ __name(async (context, tx) => {
749
+ var RequiredBalanceTransactionStateValidator = async (context, tx) => {
603
750
  return await spanRootAsync3("RequiredBalanceTransactionStateValidator", async () => {
604
751
  const errors = [];
605
752
  try {
606
- const netBalances = netBalancesForPayloads2({
607
- singletons: {}
608
- }, tx[1]);
753
+ const netBalances = netBalancesForPayloads2({ singletons: {} }, tx[1]);
609
754
  const wrapper = await HydratedTransactionWrapper.parse(tx);
610
755
  const from = wrapper.boundWitness.from;
611
756
  const gasRequired = transactionRequiredGas(tx);
612
757
  if (wrapper.fees.gasLimit < gasRequired) {
613
- errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH21, tx, `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`));
758
+ errors.push(new HydratedTransactionValidationError(
759
+ tx?.[0]?._hash ?? ZERO_HASH21,
760
+ tx,
761
+ `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`
762
+ ));
614
763
  }
615
764
  const gasCost = gasRequired * wrapper.fees.gasPrice;
616
765
  const baseCost = wrapper.fees.base;
@@ -621,14 +770,19 @@ var RequiredBalanceTransactionStateValidator = /* @__PURE__ */ __name(async (con
621
770
  }
622
771
  errors.push(...await balanceShortfallErrors(context, tx, requiredBalances));
623
772
  } catch (ex) {
624
- errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH21, tx, `Failed RequiredBalanceTransactionStateValidator: ${ex}`, ex));
773
+ errors.push(new HydratedTransactionValidationError(
774
+ tx?.[0]?._hash ?? ZERO_HASH21,
775
+ tx,
776
+ `Failed RequiredBalanceTransactionStateValidator: ${ex}`,
777
+ ex
778
+ ));
625
779
  }
626
780
  return errors;
627
781
  }, context);
628
- }, "RequiredBalanceTransactionStateValidator");
782
+ };
629
783
 
630
784
  // src/hydratedTransactionState/validateHydratedTransactionState.ts
631
- var validateHydratedTransactionState = /* @__PURE__ */ __name(async (context, tx) => {
785
+ var validateHydratedTransactionState = async (context, tx) => {
632
786
  return await spanRootAsync4("validateHydratedTransactionState", async () => {
633
787
  const errors = [];
634
788
  try {
@@ -637,11 +791,16 @@ var validateHydratedTransactionState = /* @__PURE__ */ __name(async (context, tx
637
791
  ];
638
792
  errors.push(...(await Promise.all(validators.map((v) => v(context, tx)))).flat());
639
793
  } catch (ex) {
640
- errors.push(new HydratedTransactionValidationError2(tx?.[0]?._hash ?? ZERO_HASH22, tx, `Failed validateHydratedTransactionState: ${ex}`, ex));
794
+ errors.push(new HydratedTransactionValidationError2(
795
+ tx?.[0]?._hash ?? ZERO_HASH22,
796
+ tx,
797
+ `Failed validateHydratedTransactionState: ${ex}`,
798
+ ex
799
+ ));
641
800
  }
642
801
  return errors;
643
802
  }, context);
644
- }, "validateHydratedTransactionState");
803
+ };
645
804
  export {
646
805
  BlockAllowedPayloadSchemasValidator,
647
806
  BlockBoundWitnessValidator,
@@ -656,4 +815,4 @@ export {
656
815
  validateHydratedBlockState,
657
816
  validateHydratedTransactionState
658
817
  };
659
- //# sourceMappingURL=index.mjs.map
818
+ //# sourceMappingURL=index.mjs.map
@@ -1 +1,7 @@
1
- {"version":3,"sources":["../../src/block/validateBlock.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/BoundWitness.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/validateBridgeDestinationObservationInBlock.ts","../../src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts","../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateHashInBlock.ts","../../src/elevatedPayload/payloads/validateSchemaInBlock.ts","../../src/elevatedPayload/payloads/validateTimeInBlock.ts","../../src/elevatedPayload/payloads/validateTransferInBlock.ts","../../src/hydratedBlockState/validateHydratedBlockState.ts","../../src/hydratedBlockState/validators/RequiredBalance.ts","../../src/hydratedTransactionState/validateHydratedTransactionState.ts","../../src/hydratedTransactionState/validators/RequiredBalance.ts"],"sourcesContent":["import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockBoundWitnessValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const validators: BlockValidatorFunction[] = [\n BlockBoundWitnessValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(\n validators.map(validator => validator(context, 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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport {\n BlockValidationError,\n isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-sdk'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n context,\n block,\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 { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport { BoundWitnessValidator } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nconst error = (block: BlockBoundWitness, message: string): BlockValidationError =>\n new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, message)\n\n// Friendly pre-check for the same wallet/producer bug surfaced on the\n// transaction side: signatures emitted under `signatures` instead of\n// `$signatures`. Mirrors TransactionBoundWitnessValidator.\nconst checkSignaturesShape = (block: BlockBoundWitness): BlockValidationError[] => {\n const bw = block as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(block, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(block, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the block's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. Mirrors TransactionBoundWitnessValidator\n * for blocks. Covers signatures (length parity + per-address elliptic-curve\n * verification against the BW data hash), addresses uniqueness,\n * payload_hashes/payload_schemas length parity, schemas, and top-level\n * schema check.\n */\nexport const BlockBoundWitnessValidator: BlockValidatorFunction = async (\n _context,\n block,\n) => {\n try {\n const shapeErrors = checkSignaturesShape(block)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(block)\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(block, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)]\n }\n}\n","import type { Hash } from '@xylabs/sdk-js'\nimport { isDefined, ZERO_HASH } from '@xylabs/sdk-js'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseContext, BlockBoundWitness, BlockValidatorFunction,\n} from '@xyo-network/xl1-sdk'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError } from '@xyo-network/xl1-sdk'\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 context: BaseContext,\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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n context,\n block,\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 { Promisable } from '@xylabs/sdk-js'\nimport { ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n BaseContext,\n BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n context: BaseContext,\n hydratedBlock: HydratedBlockWithHashMeta,\n chainIdAtBlockNumber?: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(\n context,\n hydratedBlock[0],\n chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,\n additionalBlockValidators,\n )\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(context, hydratedBlock, chainIdAtBlockNumber)))).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/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n context,\n [block, payloads],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashMeta<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(context, 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/sdk-js'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/sdk-js'\nimport { SchemaSchema } from '@xyo-network/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, BridgeIntentSchema, BridgeSourceObservationSchema, ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TimeSchema, TransferSchema,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateBridgeDestinationObservationInBlock, validateBridgeIntentInBlock, validateBridgeSourceObservationInBlock, validateChainStakeIntentInBlock,\n validateHashInBlock, validateSchemaInBlock, validateTimeInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [BoundWitnessSchema]: validateTransactionInBlock,\n [BridgeDestinationObservationSchema]: validateBridgeDestinationObservationInBlock,\n [BridgeIntentSchema]: validateBridgeIntentInBlock,\n [BridgeSourceObservationSchema]: validateBridgeSourceObservationInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [HashSchema]: validateHashInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [TimeSchema]: validateTimeInBlock,\n [TransferSchema]: validateTransferInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...(await validator(context, 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 ex,\n )\n errors.push(error)\n }\n return errors\n}\n","import type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport const isElevatedFromBlock = (payload: WithHashMeta<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 { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\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 { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\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/sdk-js'\nimport { isHashMeta } from '@xyo-network/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BoundWitnessSignaturesValidator, InBlockPayloadValidationError, isTransactionBoundWitness, validateTransaction,\n} from '@xyo-network/xl1-sdk'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, block[1]])\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `TransactionValidation error: ${txError}`,\n txError,\n ))\n }\n const txSignatureErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txSignatureError of txSignatureErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `BoundWitnessSignaturesValidator error: ${txSignatureError}`,\n txSignatureError,\n ))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isHashMeta'))\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 '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport { isHashMeta } from '@xyo-network/sdk-js'\nimport type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext } from '@xyo-network/xl1-sdk'\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 context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isHashMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...(await validateElevatedFromBlock(context, payload, block)))\n } else {\n errors.push(...(await validateElevatedFromTransaction(context, 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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeDestinationObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeDestinationObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation)\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 validateBridgeObservationInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent)\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 validateBridgeIntentInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeSourceObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeSourceObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation)\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 validateBridgeObservationInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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/sdk-js'\nimport { isSchemaPayload } from '@xyo-network/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTimeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload)\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 validateTimeInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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 { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n context,\n hydratedBlock,\n additionalValidators = [],\n) => {\n return await spanRootAsync('validateHydratedBlockState', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId: ChainId | undefined\n try {\n chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block)\n const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber)\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: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(context, hydratedBlock)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId ?? '00' as ChainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n","import type { Address, Hash } from '@xylabs/sdk-js'\nimport { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1, HydratedBlockStateValidationError,\n isSignedTransactionBoundWitnessWithHashMeta,\n netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nfunction offendingTransactionHashesForAddress(block: Parameters<HydratedBlockStateValidationFunction>[1], address: Address): Hash[] {\n const hashes: Hash[] = []\n for (const payload of block[1]) {\n if (isSignedTransactionBoundWitnessWithHashMeta(payload) && payload.from === address) {\n hashes.push(payload._hash)\n }\n }\n return hashes\n}\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n context,\n block,\n) => {\n return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId = '00' as ChainId\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads({ singletons: {} }, (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 '00' as ChainId,\n block,\n 'Insufficient funds because first block',\n )]\n chainId = await context.chainIdAtBlockNumber(block[0].block)\n await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const result = await context.accountBalance.accountBalances([address], { head: previous })\n const balance = result[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address)\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n undefined,\n offendingTransactionHashes.length > 0 ? offendingTransactionHashes : undefined,\n ))\n }\n }\n }, context)\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 }, context)\n}\n","import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-sdk'\n\nimport { RequiredBalanceTransactionStateValidator } from './validators/index.ts'\n\nexport const validateHydratedTransactionState: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('validateHydratedTransactionState', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const validators: HydratedTransactionStateValidationFunction[] = [\n RequiredBalanceTransactionStateValidator,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(context, tx)))).flat())\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed validateHydratedTransactionState: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n HydratedTransactionWrapper,\n netBalancesForPayloads,\n transactionRequiredGas,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\ntype ValidatorContext = Parameters<HydratedTransactionStateValidationFunction>[0]\ntype ValidatorTx = Parameters<HydratedTransactionStateValidationFunction>[1]\n\n/**\n * For each address with a negative net balance, look up the actual on-chain\n * balance at the current head and emit an `insufficient balance` error if it\n * can't cover the required amount.\n */\nasync function balanceShortfallErrors(\n context: ValidatorContext,\n tx: ValidatorTx,\n requiredBalances: Record<Address, bigint>,\n): Promise<HydratedTransactionValidationError[]> {\n const errors: HydratedTransactionValidationError[] = []\n const requiredAddresses = Object.keys(requiredBalances) as Address[]\n if (requiredAddresses.length === 0) return errors\n const headBlock = (await context.blockViewer.currentBlock())[0]\n const balances = await context.accountBalanceViewer.accountBalances(\n requiredAddresses,\n { head: headBlock._hash },\n )\n for (const address of requiredAddresses) {\n const reqBalance = requiredBalances[address]\n const balance = balances[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n ))\n }\n }\n return errors\n}\n\nexport const RequiredBalanceTransactionStateValidator: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('RequiredBalanceTransactionStateValidator', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const netBalances = netBalancesForPayloads({ singletons: {} }, tx[1])\n\n const wrapper = await HydratedTransactionWrapper.parse(tx)\n const from = wrapper.boundWitness.from as Address\n const gasRequired = transactionRequiredGas(tx)\n // Declared gas limit must cover the gas the tx will actually consume.\n // Without this check a tx could pass admission with `gasLimit < required`\n // and either fail at execution or get unfairly under-charged for the\n // resources it actually uses. Reported alongside any balance shortfall\n // so the caller sees every reason the tx was rejected.\n if (wrapper.fees.gasLimit < gasRequired) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`,\n ))\n }\n const gasCost = gasRequired * wrapper.fees.gasPrice\n const baseCost = wrapper.fees.base\n netBalances[from] = (netBalances[from] ?? 0n) - gasCost - baseCost\n\n const requiredBalances: Record<Address, bigint> = {}\n for (const [address, net] of Object.entries(netBalances) as [Address, bigint][]) {\n if (net < 0n) requiredBalances[address] = -net\n }\n\n errors.push(...(await balanceShortfallErrors(context, tx, requiredBalances)))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed RequiredBalanceTransactionStateValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n"],"mappings":"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","names":["ZERO_HASH","BlockValidationError","ZERO_HASH","BlockValidationError","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","context","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","BlockValidationError","_hash","ZERO_HASH","ex","ZERO_HASH","BoundWitnessValidator","BlockValidationError","error","block","message","BlockValidationError","_hash","ZERO_HASH","checkSignaturesShape","bw","$signatures","undefined","Array","isArray","signatures","BlockBoundWitnessValidator","_context","shapeErrors","length","bwValidator","BoundWitnessValidator","bwErrors","validate","map","e","ex","String","isDefined","ZERO_HASH","BoundWitnessSchema","BlockValidationError","BlockFieldsValidator","context","block","chainId","errors","isDefined","chain","toLowerCase","push","BlockValidationError","_hash","ZERO_HASH","txHashes","i","payload_hashes","length","payload_schemas","BoundWitnessSchema","Set","size","ex","ZERO_HASH","BlockBoundWitnessWithStorageMetaJsonSchema","BlockValidationError","Ajv","BlockJsonSchemaValidator","jsonSchema","BlockBoundWitnessWithStorageMetaJsonSchema","ajv","Ajv","allErrors","strict","validate","compile","context","block","errors","length","error","BlockValidationError","_hash","ZERO_HASH","errorsText","separator","cause","push","ex","isHash","ZERO_HASH","BlockValidationError","BlockPreviousHashValidator","context","block","errors","blockNumber","isHash","previous","push","BlockValidationError","_hash","ZERO_HASH","ex","error","cause","validateBlock","context","block","chainId","additionalValidators","errors","validators","BlockBoundWitnessValidator","BlockFieldsValidator","BlockPreviousHashValidator","BlockAllowedPayloadSchemasValidator","push","Promise","all","map","validator","flat","ex","BlockValidationError","_hash","ZERO_HASH","ZERO_HASH","BoundWitnessReferencesValidator","HydratedBlockValidationError","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","BoundWitnessSchema","SchemaSchema","BridgeDestinationObservationSchema","BridgeIntentSchema","BridgeSourceObservationSchema","ChainStakeIntentSchema","HashSchema","InBlockPayloadValidationError","TimeSchema","TransferSchema","isTransactionBoundWitness","isElevatedFromBlock","payload","payloads","txs","filter","p","isTransactionBoundWitness","tx","payload_hashes","includes","_hash","InBlockPayloadValidationError","transactionsFromHydratedBlock","validateElevatedFromBlock","context","payload","block","errors","txs","transactionsFromHydratedBlock","allTxPayloadHashes","Set","flatMap","tx","payload_hashes","has","_hash","push","InBlockPayloadValidationError","schema","ex","InBlockPayloadValidationError","transactionsFromHydratedBlock","validateElevatedFromTransaction","context","payload","block","errors","txs","transactionsFromHydratedBlock","length","hashes","flatMap","tx","payload_hashes","includes","_hash","push","InBlockPayloadValidationError","ex","ZERO_HASH","isHashMeta","BoundWitnessSignaturesValidator","InBlockPayloadValidationError","isTransactionBoundWitness","validateTransaction","validateTransactionInBlock","context","payload","block","errors","isTransactionBoundWitness","isHashMeta","txErrors","validateTransaction","chainId","chain","txError","push","InBlockPayloadValidationError","_hash","txSignatureErrors","BoundWitnessSignaturesValidator","txSignatureError","ex","ZERO_HASH","isHashMeta","validateTypedPayloadInBlock","context","payload","block","identityFunction","errors","isHashMeta","isElevatedFromBlock","push","validateElevatedFromBlock","validateElevatedFromTransaction","Error","ex","ZERO_HASH","InBlockPayloadValidationError","isBridgeDestinationObservation","validateBridgeDestinationObservationInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeDestinationObservation","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isBridgeIntent","validateBridgeIntentInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeIntent","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isBridgeSourceObservation","validateBridgeSourceObservationInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeSourceObservation","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isChainStakeIntent","validateChainStakeIntentInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isChainStakeIntent","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isHashPayload","validateHashInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isHashPayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","isSchemaPayload","InBlockPayloadValidationError","validateSchemaInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isSchemaPayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isTimePayload","validateTimeInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isTimePayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isTransfer","validateTransferInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isTransfer","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","payloadValidators","BoundWitnessSchema","validateTransactionInBlock","BridgeDestinationObservationSchema","validateBridgeDestinationObservationInBlock","BridgeIntentSchema","validateBridgeIntentInBlock","BridgeSourceObservationSchema","validateBridgeSourceObservationInBlock","ChainStakeIntentSchema","validateChainStakeIntentInBlock","HashSchema","validateHashInBlock","SchemaSchema","validateSchemaInBlock","TimeSchema","validateTimeInBlock","TransferSchema","validateTransferInBlock","validatePayloadInBlock","context","payload","block","errors","validator","schema","push","InBlockPayloadValidationError","_hash","ZERO_HASH","ex","error","PayloadsInBlockValidator","context","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","context","hydratedBlock","chainIdAtBlockNumber","additionalValidators","additionalBlockValidators","errors","validateBlockErrors","validateBlock","block","undefined","validateBlockError","push","HydratedBlockValidationError","_hash","bwRefErrors","BoundWitnessReferencesValidator","bwRefError","validators","PayloadsInBlockValidator","Promise","all","map","v","flat","ex","ZERO_HASH","spanRootAsync","ZERO_HASH","HydratedBlockStateValidationError","spanRootAsync","ZERO_HASH","AttoXL1","HydratedBlockStateValidationError","isSignedTransactionBoundWitnessWithHashMeta","netBalancesForPayloads","XYO_ZERO_ADDRESS","offendingTransactionHashesForAddress","block","address","hashes","payload","isSignedTransactionBoundWitnessWithHashMeta","from","push","_hash","RequiredBalanceBlockStateValidator","context","spanRootAsync","errors","chainId","netBalances","netBalancesForPayloads","singletons","netBalanceAddresses","Object","keys","requiredBalances","previous","HydratedBlockStateValidationError","ZERO_HASH","chainIdAtBlockNumber","reqBalance","entries","result","accountBalance","accountBalances","head","balance","AttoXL1","XYO_ZERO_ADDRESS","offendingTransactionHashes","undefined","length","ex","Promise","resolve","validateHydratedBlockState","context","hydratedBlock","additionalValidators","spanRootAsync","errors","chainId","chainIdAtBlockNumber","block","validateHydratedBlockErrors","validateHydratedBlock","validateHydratedBlockError","push","HydratedBlockStateValidationError","_hash","validators","RequiredBalanceBlockStateValidator","Promise","all","map","v","flat","ex","ZERO_HASH","spanRootAsync","ZERO_HASH","HydratedTransactionValidationError","spanRootAsync","ZERO_HASH","AttoXL1","HydratedTransactionValidationError","HydratedTransactionWrapper","netBalancesForPayloads","transactionRequiredGas","XYO_ZERO_ADDRESS","balanceShortfallErrors","context","tx","requiredBalances","errors","requiredAddresses","Object","keys","length","headBlock","blockViewer","currentBlock","balances","accountBalanceViewer","accountBalances","head","_hash","address","reqBalance","balance","AttoXL1","XYO_ZERO_ADDRESS","push","HydratedTransactionValidationError","ZERO_HASH","RequiredBalanceTransactionStateValidator","spanRootAsync","netBalances","netBalancesForPayloads","singletons","wrapper","HydratedTransactionWrapper","parse","from","boundWitness","gasRequired","transactionRequiredGas","fees","gasLimit","gasCost","gasPrice","baseCost","base","net","entries","ex","validateHydratedTransactionState","context","tx","spanRootAsync","errors","validators","RequiredBalanceTransactionStateValidator","push","Promise","all","map","v","flat","ex","HydratedTransactionValidationError","_hash","ZERO_HASH"]}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/block/validateBlock.ts", "../../src/block/validators/AllowedPayloadSchemas.ts", "../../src/block/validators/BoundWitness.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/validateBridgeDestinationObservationInBlock.ts", "../../src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts", "../../src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts", "../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts", "../../src/elevatedPayload/payloads/validateHashInBlock.ts", "../../src/elevatedPayload/payloads/validateSchemaInBlock.ts", "../../src/elevatedPayload/payloads/validateTimeInBlock.ts", "../../src/elevatedPayload/payloads/validateTransferInBlock.ts", "../../src/hydratedBlockState/validateHydratedBlockState.ts", "../../src/hydratedBlockState/validators/RequiredBalance.ts", "../../src/hydratedTransactionState/validateHydratedTransactionState.ts", "../../src/hydratedTransactionState/validators/RequiredBalance.ts"],
4
+ "sourcesContent": ["import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockBoundWitnessValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const validators: BlockValidatorFunction[] = [\n BlockBoundWitnessValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(\n validators.map(validator => validator(context, 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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport {\n BlockValidationError,\n isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-sdk'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n context,\n block,\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 { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport { BoundWitnessValidator } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nconst error = (block: BlockBoundWitness, message: string): BlockValidationError =>\n new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, message)\n\n// Friendly pre-check for the same wallet/producer bug surfaced on the\n// transaction side: signatures emitted under `signatures` instead of\n// `$signatures`. Mirrors TransactionBoundWitnessValidator.\nconst checkSignaturesShape = (block: BlockBoundWitness): BlockValidationError[] => {\n const bw = block as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(block, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(block, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the block's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. Mirrors TransactionBoundWitnessValidator\n * for blocks. Covers signatures (length parity + per-address elliptic-curve\n * verification against the BW data hash), addresses uniqueness,\n * payload_hashes/payload_schemas length parity, schemas, and top-level\n * schema check.\n */\nexport const BlockBoundWitnessValidator: BlockValidatorFunction = async (\n _context,\n block,\n) => {\n try {\n const shapeErrors = checkSignaturesShape(block)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(block)\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(block, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)]\n }\n}\n", "import type { Hash } from '@xylabs/sdk-js'\nimport { isDefined, ZERO_HASH } from '@xylabs/sdk-js'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseContext, BlockBoundWitness, BlockValidatorFunction,\n} from '@xyo-network/xl1-sdk'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError } from '@xyo-network/xl1-sdk'\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 context: BaseContext,\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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n context,\n block,\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 { Promisable } from '@xylabs/sdk-js'\nimport { ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n BaseContext,\n BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n context: BaseContext,\n hydratedBlock: HydratedBlockWithHashMeta,\n chainIdAtBlockNumber?: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(\n context,\n hydratedBlock[0],\n chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,\n additionalBlockValidators,\n )\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(context, hydratedBlock, chainIdAtBlockNumber)))).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/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n context,\n [block, payloads],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashMeta<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(context, 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/sdk-js'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/sdk-js'\nimport { SchemaSchema } from '@xyo-network/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, BridgeIntentSchema, BridgeSourceObservationSchema, ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TimeSchema, TransferSchema,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateBridgeDestinationObservationInBlock, validateBridgeIntentInBlock, validateBridgeSourceObservationInBlock, validateChainStakeIntentInBlock,\n validateHashInBlock, validateSchemaInBlock, validateTimeInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [BoundWitnessSchema]: validateTransactionInBlock,\n [BridgeDestinationObservationSchema]: validateBridgeDestinationObservationInBlock,\n [BridgeIntentSchema]: validateBridgeIntentInBlock,\n [BridgeSourceObservationSchema]: validateBridgeSourceObservationInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [HashSchema]: validateHashInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [TimeSchema]: validateTimeInBlock,\n [TransferSchema]: validateTransferInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...(await validator(context, 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 ex,\n )\n errors.push(error)\n }\n return errors\n}\n", "import type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport const isElevatedFromBlock = (payload: WithHashMeta<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 { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\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 { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\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/sdk-js'\nimport { isHashMeta } from '@xyo-network/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BoundWitnessSignaturesValidator, InBlockPayloadValidationError, isTransactionBoundWitness, validateTransaction,\n} from '@xyo-network/xl1-sdk'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, block[1]])\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `TransactionValidation error: ${txError}`,\n txError,\n ))\n }\n const txSignatureErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txSignatureError of txSignatureErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `BoundWitnessSignaturesValidator error: ${txSignatureError}`,\n txSignatureError,\n ))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isHashMeta'))\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 '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/sdk-js'\nimport { isHashMeta } from '@xyo-network/sdk-js'\nimport type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext } from '@xyo-network/xl1-sdk'\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 context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isHashMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...(await validateElevatedFromBlock(context, payload, block)))\n } else {\n errors.push(...(await validateElevatedFromTransaction(context, 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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeDestinationObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeDestinationObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation)\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 validateBridgeObservationInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent)\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 validateBridgeIntentInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeSourceObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeSourceObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation)\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 validateBridgeObservationInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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/sdk-js'\nimport { isSchemaPayload } from '@xyo-network/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTimeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload)\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 validateTimeInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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 { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n context,\n hydratedBlock,\n additionalValidators = [],\n) => {\n return await spanRootAsync('validateHydratedBlockState', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId: ChainId | undefined\n try {\n chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block)\n const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber)\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: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(context, hydratedBlock)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId ?? '00' as ChainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address, Hash } from '@xylabs/sdk-js'\nimport { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1, HydratedBlockStateValidationError,\n isSignedTransactionBoundWitnessWithHashMeta,\n netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nfunction offendingTransactionHashesForAddress(block: Parameters<HydratedBlockStateValidationFunction>[1], address: Address): Hash[] {\n const hashes: Hash[] = []\n for (const payload of block[1]) {\n if (isSignedTransactionBoundWitnessWithHashMeta(payload) && payload.from === address) {\n hashes.push(payload._hash)\n }\n }\n return hashes\n}\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n context,\n block,\n) => {\n return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId = '00' as ChainId\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads({ singletons: {} }, (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 '00' as ChainId,\n block,\n 'Insufficient funds because first block',\n )]\n chainId = await context.chainIdAtBlockNumber(block[0].block)\n await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const result = await context.accountBalance.accountBalances([address], { head: previous })\n const balance = result[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address)\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n undefined,\n offendingTransactionHashes.length > 0 ? offendingTransactionHashes : undefined,\n ))\n }\n }\n }, context)\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 }, context)\n}\n", "import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-sdk'\n\nimport { RequiredBalanceTransactionStateValidator } from './validators/index.ts'\n\nexport const validateHydratedTransactionState: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('validateHydratedTransactionState', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const validators: HydratedTransactionStateValidationFunction[] = [\n RequiredBalanceTransactionStateValidator,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(context, tx)))).flat())\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed validateHydratedTransactionState: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address } from '@xylabs/sdk-js'\nimport { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n HydratedTransactionWrapper,\n netBalancesForPayloads,\n transactionRequiredGas,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\ntype ValidatorContext = Parameters<HydratedTransactionStateValidationFunction>[0]\ntype ValidatorTx = Parameters<HydratedTransactionStateValidationFunction>[1]\n\n/**\n * For each address with a negative net balance, look up the actual on-chain\n * balance at the current head and emit an `insufficient balance` error if it\n * can't cover the required amount.\n */\nasync function balanceShortfallErrors(\n context: ValidatorContext,\n tx: ValidatorTx,\n requiredBalances: Record<Address, bigint>,\n): Promise<HydratedTransactionValidationError[]> {\n const errors: HydratedTransactionValidationError[] = []\n const requiredAddresses = Object.keys(requiredBalances) as Address[]\n if (requiredAddresses.length === 0) return errors\n const headBlock = (await context.blockViewer.currentBlock())[0]\n const balances = await context.accountBalanceViewer.accountBalances(\n requiredAddresses,\n { head: headBlock._hash },\n )\n for (const address of requiredAddresses) {\n const reqBalance = requiredBalances[address]\n const balance = balances[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n ))\n }\n }\n return errors\n}\n\nexport const RequiredBalanceTransactionStateValidator: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('RequiredBalanceTransactionStateValidator', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const netBalances = netBalancesForPayloads({ singletons: {} }, tx[1])\n\n const wrapper = await HydratedTransactionWrapper.parse(tx)\n const from = wrapper.boundWitness.from as Address\n const gasRequired = transactionRequiredGas(tx)\n // Declared gas limit must cover the gas the tx will actually consume.\n // Without this check a tx could pass admission with `gasLimit < required`\n // and either fail at execution or get unfairly under-charged for the\n // resources it actually uses. Reported alongside any balance shortfall\n // so the caller sees every reason the tx was rejected.\n if (wrapper.fees.gasLimit < gasRequired) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`,\n ))\n }\n const gasCost = gasRequired * wrapper.fees.gasPrice\n const baseCost = wrapper.fees.base\n netBalances[from] = (netBalances[from] ?? 0n) - gasCost - baseCost\n\n const requiredBalances: Record<Address, bigint> = {}\n for (const [address, net] of Object.entries(netBalances) as [Address, bigint][]) {\n if (net < 0n) requiredBalances[address] = -net\n }\n\n errors.push(...(await balanceShortfallErrors(context, tx, requiredBalances)))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed RequiredBalanceTransactionStateValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "error", "ZERO_HASH", "BlockValidationError", "error", "BlockValidationError", "ZERO_HASH", "ZERO_HASH", "HydratedBlockValidationError", "ZERO_HASH", "ZERO_HASH", "BoundWitnessSchema", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "transactionsFromHydratedBlock", "ZERO_HASH", "InBlockPayloadValidationError", "isTransactionBoundWitness", "isHashMeta", "isHashMeta", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "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", "error", "ZERO_HASH", "HydratedBlockValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedTransactionValidationError", "spanRootAsync", "ZERO_HASH", "AttoXL1", "netBalancesForPayloads", "XYO_ZERO_ADDRESS", "spanRootAsync", "HydratedTransactionValidationError", "ZERO_HASH"]
7
+ }
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.23.0",
4
+ "version": "1.23.2",
5
5
  "description": "XYO Layer One SDK Validation",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -47,8 +47,8 @@
47
47
  "@xylabs/geo": "^5.1.2",
48
48
  "@xylabs/sdk-js": "^5.1.2",
49
49
  "@xylabs/threads": "~5.1.2",
50
- "@xylabs/toolchain": "~7.13.24",
51
- "@xylabs/tsconfig": "~7.13.24",
50
+ "@xylabs/toolchain": "~8.0.4",
51
+ "@xylabs/tsconfig": "~8.0.4",
52
52
  "@xylabs/vitest-extended": "~5.1.2",
53
53
  "@xyo-network/account": "~5.6.2",
54
54
  "@xyo-network/account-model": "~5.6.3",
@@ -69,7 +69,7 @@
69
69
  "@xyo-network/sdk-protocol-js": "~5.6.3",
70
70
  "@xyo-network/wallet": "~5.6.2",
71
71
  "@xyo-network/wallet-model": "^5.6.3",
72
- "@xyo-network/xl1-sdk": "^1.30.1",
72
+ "@xyo-network/xl1-sdk": "^1.30.2",
73
73
  "ajv": "^8.20.0",
74
74
  "async-mutex": "^0.5.0",
75
75
  "bn.js": "^5.2.3",
@@ -86,15 +86,15 @@
86
86
  "observable-fns": "~0.6.1",
87
87
  "pako": "^2.1.0",
88
88
  "store2": "~2.14.4",
89
- "typescript": "~5.9.3",
89
+ "typescript": "~6.0.3",
90
90
  "uuid": "~14.0.0",
91
- "vite": "^8.0.12",
91
+ "vite": "^8.0.13",
92
92
  "vitest": "^4.1.6",
93
93
  "wasm-feature-detect": "~1.8.0",
94
94
  "webextension-polyfill": "^0.12.0",
95
95
  "zod": "~4.4.3",
96
- "@xyo-network/chain-protocol": "~1.23.0",
97
- "@xyo-network/chain-protocol-test": "~1.23.0"
96
+ "@xyo-network/chain-protocol-test": "~1.23.2",
97
+ "@xyo-network/chain-protocol": "~1.23.2"
98
98
  },
99
99
  "peerDependencies": {
100
100
  "@bitauth/libauth": "~3.0",