@xyo-network/chain-sdk 5.2.3 → 5.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/modules/ethereum/indexing/index.d.ts +1 -2
- package/dist/browser/modules/ethereum/indexing/index.d.ts.map +1 -1
- package/dist/browser/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts.map +1 -1
- package/dist/browser/modules/validation/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -1
- package/dist/browser/modules/validation/elevatedPayload/payloads/index.d.ts +1 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/index.d.ts.map +1 -1
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateClaimInBlock.d.ts +4 -0
- package/dist/browser/modules/validation/elevatedPayload/payloads/validateClaimInBlock.d.ts.map +1 -0
- package/dist/browser/modules/validation/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
- package/dist/neutral/ethereum.mjs +11 -365
- package/dist/neutral/ethereum.mjs.map +4 -4
- package/dist/neutral/modules/ethereum/indexing/index.d.ts +1 -2
- package/dist/neutral/modules/ethereum/indexing/index.d.ts.map +1 -1
- package/dist/neutral/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts.map +1 -1
- package/dist/neutral/modules/validation/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -1
- package/dist/neutral/modules/validation/elevatedPayload/payloads/index.d.ts +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/index.d.ts.map +1 -1
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateClaimInBlock.d.ts +4 -0
- package/dist/neutral/modules/validation/elevatedPayload/payloads/validateClaimInBlock.d.ts.map +1 -0
- package/dist/neutral/modules/validation/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
- package/dist/neutral/validation.mjs +209 -82
- package/dist/neutral/validation.mjs.map +4 -4
- package/dist/node/modules/ethereum/indexing/index.d.ts +1 -2
- package/dist/node/modules/ethereum/indexing/index.d.ts.map +1 -1
- package/dist/node/modules/validation/elevatedPayload/lib/findElevatingTransaction.d.ts.map +1 -1
- package/dist/node/modules/validation/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -1
- package/dist/node/modules/validation/elevatedPayload/payloads/index.d.ts +1 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/index.d.ts.map +1 -1
- package/dist/node/modules/validation/elevatedPayload/payloads/validateClaimInBlock.d.ts +4 -0
- package/dist/node/modules/validation/elevatedPayload/payloads/validateClaimInBlock.d.ts.map +1 -0
- package/dist/node/modules/validation/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
- package/package.json +9 -9
- package/dist/browser/modules/ethereum/indexing/RestStakeEventsViewer.d.ts +0 -52
- package/dist/browser/modules/ethereum/indexing/RestStakeEventsViewer.d.ts.map +0 -1
- package/dist/browser/modules/ethereum/indexing/RestStakeViewer.d.ts +0 -60
- package/dist/browser/modules/ethereum/indexing/RestStakeViewer.d.ts.map +0 -1
- package/dist/neutral/modules/ethereum/indexing/RestStakeEventsViewer.d.ts +0 -52
- package/dist/neutral/modules/ethereum/indexing/RestStakeEventsViewer.d.ts.map +0 -1
- package/dist/neutral/modules/ethereum/indexing/RestStakeViewer.d.ts +0 -60
- package/dist/neutral/modules/ethereum/indexing/RestStakeViewer.d.ts.map +0 -1
- package/dist/node/modules/ethereum/indexing/RestStakeEventsViewer.d.ts +0 -52
- package/dist/node/modules/ethereum/indexing/RestStakeEventsViewer.d.ts.map +0 -1
- package/dist/node/modules/ethereum/indexing/RestStakeViewer.d.ts +0 -60
- package/dist/node/modules/ethereum/indexing/RestStakeViewer.d.ts.map +0 -1
|
@@ -95,8 +95,8 @@ import { ZERO_HASH as ZERO_HASH4 } from "@ariestools/sdk";
|
|
|
95
95
|
import { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError as BlockValidationError4 } from "@xyo-network/xl1-sdk";
|
|
96
96
|
import { Ajv } from "ajv";
|
|
97
97
|
var BlockJsonSchemaValidator = (jsonSchema = BlockBoundWitnessWithStorageMetaJsonSchema) => {
|
|
98
|
-
const
|
|
99
|
-
const validate =
|
|
98
|
+
const ajv2 = new Ajv({ allErrors: true, strict: true });
|
|
99
|
+
const validate = ajv2.compile(jsonSchema);
|
|
100
100
|
return async (context, block) => {
|
|
101
101
|
const errors = [];
|
|
102
102
|
try {
|
|
@@ -105,7 +105,7 @@ var BlockJsonSchemaValidator = (jsonSchema = BlockBoundWitnessWithStorageMetaJso
|
|
|
105
105
|
const error2 = new BlockValidationError4(
|
|
106
106
|
block?._hash ?? ZERO_HASH4,
|
|
107
107
|
block,
|
|
108
|
-
`failed JSON schema validation: ${
|
|
108
|
+
`failed JSON schema validation: ${ajv2.errorsText(validate.errors, { separator: "\n" })}`
|
|
109
109
|
);
|
|
110
110
|
error2.cause = validate.errors;
|
|
111
111
|
errors.push(error2);
|
|
@@ -174,23 +174,24 @@ var validateBlock = async (context, block, chainId, additionalValidators = []) =
|
|
|
174
174
|
};
|
|
175
175
|
|
|
176
176
|
// src/modules/validation/hydratedBlock/validateHydratedBlock.ts
|
|
177
|
-
import { ZERO_HASH as
|
|
177
|
+
import { ZERO_HASH as ZERO_HASH25 } from "@ariestools/sdk";
|
|
178
178
|
import { BoundWitnessReferencesValidator, HydratedBlockValidationError as HydratedBlockValidationError3 } from "@xyo-network/xl1-sdk";
|
|
179
179
|
|
|
180
180
|
// src/modules/validation/hydratedBlock/validators/Payloads.ts
|
|
181
|
-
import { ZERO_HASH as
|
|
181
|
+
import { ZERO_HASH as ZERO_HASH23 } from "@ariestools/sdk";
|
|
182
182
|
import { HydratedBlockValidationError } from "@xyo-network/xl1-sdk";
|
|
183
183
|
|
|
184
184
|
// src/modules/validation/elevatedPayload/validatePayloadInBlock.ts
|
|
185
|
-
import { ZERO_HASH as
|
|
185
|
+
import { ZERO_HASH as ZERO_HASH22 } from "@ariestools/sdk";
|
|
186
186
|
import { BoundWitnessSchema as BoundWitnessSchema2, SchemaSchema } from "@xyo-network/sdk";
|
|
187
187
|
import {
|
|
188
188
|
BridgeDestinationObservationSchema,
|
|
189
189
|
BridgeIntentSchema,
|
|
190
190
|
BridgeSourceObservationSchema,
|
|
191
191
|
ChainStakeIntentSchema,
|
|
192
|
+
ClaimSchema as ClaimSchema2,
|
|
192
193
|
HashSchema,
|
|
193
|
-
InBlockPayloadValidationError as
|
|
194
|
+
InBlockPayloadValidationError as InBlockPayloadValidationError18,
|
|
194
195
|
SlashAdjudicationSchema,
|
|
195
196
|
SlashChallengeSchema,
|
|
196
197
|
SlashCommitSchema,
|
|
@@ -201,9 +202,10 @@ import {
|
|
|
201
202
|
} from "@xyo-network/xl1-sdk";
|
|
202
203
|
|
|
203
204
|
// src/modules/validation/elevatedPayload/lib/findElevatingTransaction.ts
|
|
204
|
-
import { isTransactionBoundWitnessWithHashMeta } from "@xyo-network/xl1-sdk";
|
|
205
|
+
import { ELEVATE_OPCODE, isTransactionBoundWitnessWithHashMeta } from "@xyo-network/xl1-sdk";
|
|
205
206
|
function findElevatingTransaction(payload, [, payloads]) {
|
|
206
|
-
|
|
207
|
+
const elevateOperation = `${ELEVATE_OPCODE}|${payload._hash}`;
|
|
208
|
+
return payloads.filter((candidate) => isTransactionBoundWitnessWithHashMeta(candidate)).find((tx) => tx.payload_hashes.includes(payload._hash) && tx.script?.includes(elevateOperation) === true);
|
|
207
209
|
}
|
|
208
210
|
|
|
209
211
|
// src/modules/validation/elevatedPayload/lib/isElevatedFromBlock.ts
|
|
@@ -303,7 +305,11 @@ var validateTransactionInBlock = async (context, payload, block) => {
|
|
|
303
305
|
const errors = [];
|
|
304
306
|
try {
|
|
305
307
|
if (isTransactionBoundWitness2(payload) && isHashMeta2(payload)) {
|
|
306
|
-
const
|
|
308
|
+
const transactionPayloads = [...new Set(payload.payload_hashes)].flatMap((hash) => {
|
|
309
|
+
const referencedPayload = block[1].find((candidate) => isHashMeta2(candidate) && (candidate._hash === hash || candidate._dataHash === hash));
|
|
310
|
+
return referencedPayload === void 0 ? [] : [referencedPayload];
|
|
311
|
+
});
|
|
312
|
+
const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, transactionPayloads]);
|
|
307
313
|
for (const txError of txErrors) {
|
|
308
314
|
errors.push(new InBlockPayloadValidationError3(
|
|
309
315
|
payload._hash,
|
|
@@ -440,19 +446,139 @@ var validateChainStakeIntentInBlock = async (context, payload, block) => {
|
|
|
440
446
|
return errors;
|
|
441
447
|
};
|
|
442
448
|
|
|
443
|
-
// src/modules/validation/elevatedPayload/payloads/
|
|
449
|
+
// src/modules/validation/elevatedPayload/payloads/validateClaimInBlock.ts
|
|
444
450
|
import { ZERO_HASH as ZERO_HASH12 } from "@ariestools/sdk";
|
|
445
|
-
import {
|
|
451
|
+
import { PayloadBuilder } from "@xyo-network/sdk";
|
|
452
|
+
import {
|
|
453
|
+
ClaimPayloadJsonSchema,
|
|
454
|
+
ClaimSchema,
|
|
455
|
+
ELEVATE_OPCODE as ELEVATE_OPCODE2,
|
|
456
|
+
InBlockPayloadValidationError as InBlockPayloadValidationError8,
|
|
457
|
+
isClaimPayload,
|
|
458
|
+
isTransactionBoundWitnessWithHashMeta as isTransactionBoundWitnessWithHashMeta2
|
|
459
|
+
} from "@xyo-network/xl1-sdk";
|
|
460
|
+
import { Ajv as Ajv2 } from "ajv";
|
|
461
|
+
var ajv = new Ajv2({ allErrors: true, strict: true });
|
|
462
|
+
var validateClaimJsonSchema = ajv.compile(ClaimPayloadJsonSchema);
|
|
463
|
+
function claimError(payload, block, message, cause) {
|
|
464
|
+
return new InBlockPayloadValidationError8(
|
|
465
|
+
payload._hash ?? block[0]?._hash ?? ZERO_HASH12,
|
|
466
|
+
block,
|
|
467
|
+
payload,
|
|
468
|
+
message,
|
|
469
|
+
cause
|
|
470
|
+
);
|
|
471
|
+
}
|
|
472
|
+
function indexesOf(values, value) {
|
|
473
|
+
const indexes = [];
|
|
474
|
+
for (const [index, candidate] of values.entries()) {
|
|
475
|
+
if (candidate === value) indexes.push(index);
|
|
476
|
+
}
|
|
477
|
+
return indexes;
|
|
478
|
+
}
|
|
479
|
+
function validateClaimSchemaPairs(payload, block, transaction) {
|
|
480
|
+
const carrier = transaction ?? block[0];
|
|
481
|
+
const carrierName = transaction === void 0 ? "Block" : `Transaction ${transaction._hash}`;
|
|
482
|
+
const indexes = indexesOf(carrier.payload_hashes, payload._hash);
|
|
483
|
+
if (indexes.length === 0) {
|
|
484
|
+
return [claimError(payload, block, `${carrierName} does not commit Claim root hash ${payload._hash}`)];
|
|
485
|
+
}
|
|
486
|
+
if (indexes.some((index) => carrier.payload_schemas[index] !== ClaimSchema)) {
|
|
487
|
+
return [claimError(payload, block, `${carrierName} does not pair every Claim root hash with ${ClaimSchema}`)];
|
|
488
|
+
}
|
|
489
|
+
return [];
|
|
490
|
+
}
|
|
491
|
+
function claimElevationAttempts(payload, [, payloads]) {
|
|
492
|
+
const exactOperation = `${ELEVATE_OPCODE2}|${payload._hash}`;
|
|
493
|
+
const operationPrefix = `${exactOperation}|`;
|
|
494
|
+
const transactions = payloads.filter((candidate) => isTransactionBoundWitnessWithHashMeta2(candidate));
|
|
495
|
+
return transactions.flatMap((transaction) => {
|
|
496
|
+
const operations = transaction.script ?? [];
|
|
497
|
+
const validOperationCount = operations.filter((operation) => operation === exactOperation).length;
|
|
498
|
+
const malformedOperations = operations.filter((operation) => operation.startsWith(operationPrefix));
|
|
499
|
+
return validOperationCount === 0 && malformedOperations.length === 0 ? [] : [{
|
|
500
|
+
malformedOperations,
|
|
501
|
+
transaction,
|
|
502
|
+
validOperationCount
|
|
503
|
+
}];
|
|
504
|
+
});
|
|
505
|
+
}
|
|
506
|
+
function validateElevatingTransaction(claim, payload, block, attempt) {
|
|
507
|
+
const errors = [];
|
|
508
|
+
const {
|
|
509
|
+
malformedOperations,
|
|
510
|
+
transaction,
|
|
511
|
+
validOperationCount
|
|
512
|
+
} = attempt;
|
|
513
|
+
if (malformedOperations.length > 0) {
|
|
514
|
+
errors.push(claimError(
|
|
515
|
+
payload,
|
|
516
|
+
block,
|
|
517
|
+
`Transaction ${transaction._hash} contains malformed Claim elevation operations: ${malformedOperations.join(", ")}`
|
|
518
|
+
));
|
|
519
|
+
}
|
|
520
|
+
if (validOperationCount > 1) {
|
|
521
|
+
errors.push(claimError(payload, block, `Transaction ${transaction._hash} contains duplicate Claim elevation operations`));
|
|
522
|
+
}
|
|
523
|
+
if (validOperationCount !== 1) return errors;
|
|
524
|
+
errors.push(...validateClaimSchemaPairs(payload, block, transaction));
|
|
525
|
+
if (!transaction.addresses.includes(claim.source)) {
|
|
526
|
+
errors.push(claimError(payload, block, `Claim source ${claim.source} is not a signer of transaction ${transaction._hash}`));
|
|
527
|
+
}
|
|
528
|
+
const committedHashes = new Set(transaction.payload_hashes);
|
|
529
|
+
const missingHashes = claim.hashes.filter((hash) => !committedHashes.has(hash));
|
|
530
|
+
if (missingHashes.length > 0) {
|
|
531
|
+
errors.push(claimError(
|
|
532
|
+
payload,
|
|
533
|
+
block,
|
|
534
|
+
`Transaction ${transaction._hash} does not commit every Claim hash: ${missingHashes.join(", ")}`
|
|
535
|
+
));
|
|
536
|
+
}
|
|
537
|
+
return errors;
|
|
538
|
+
}
|
|
539
|
+
var validateClaimInBlock = async (_context, payload, block) => {
|
|
540
|
+
try {
|
|
541
|
+
const canonicalPayload = PayloadBuilder.omitStorageMeta(payload);
|
|
542
|
+
if (canonicalPayload.schema !== ClaimSchema || !isClaimPayload(canonicalPayload)) {
|
|
543
|
+
return [claimError(payload, block, "Claim failed its complete payload identity check")];
|
|
544
|
+
}
|
|
545
|
+
const isStrictClaim = validateClaimJsonSchema(canonicalPayload);
|
|
546
|
+
if (!isStrictClaim) {
|
|
547
|
+
const details = ajv.errorsText(validateClaimJsonSchema.errors, { separator: "; " });
|
|
548
|
+
return [claimError(payload, block, `Claim failed strict JSON schema validation: ${details}`, validateClaimJsonSchema.errors)];
|
|
549
|
+
}
|
|
550
|
+
const canonicalHash = await PayloadBuilder.hash(canonicalPayload);
|
|
551
|
+
if (canonicalHash !== payload._hash) {
|
|
552
|
+
return [claimError(payload, block, `Claim canonical root hash ${canonicalHash} does not match asserted hash ${payload._hash}`)];
|
|
553
|
+
}
|
|
554
|
+
const errors = validateClaimSchemaPairs(payload, block);
|
|
555
|
+
const attempts = claimElevationAttempts(payload, block);
|
|
556
|
+
const exactAttempts = attempts.filter((attempt) => attempt.validOperationCount > 0);
|
|
557
|
+
for (const attempt of attempts) {
|
|
558
|
+
errors.push(...validateElevatingTransaction(canonicalPayload, payload, block, attempt));
|
|
559
|
+
}
|
|
560
|
+
if (exactAttempts.length === 0) {
|
|
561
|
+
errors.push(claimError(payload, block, "Claim must be elevated from a transaction with an exact elevate operation"));
|
|
562
|
+
}
|
|
563
|
+
return errors;
|
|
564
|
+
} catch (ex) {
|
|
565
|
+
return [claimError(payload, block, `Failed validateClaimInBlock: ${String(ex)}`, ex)];
|
|
566
|
+
}
|
|
567
|
+
};
|
|
568
|
+
|
|
569
|
+
// src/modules/validation/elevatedPayload/payloads/validateHashInBlock.ts
|
|
570
|
+
import { ZERO_HASH as ZERO_HASH13 } from "@ariestools/sdk";
|
|
571
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError9, isHashPayload } from "@xyo-network/xl1-sdk";
|
|
446
572
|
var validateHashInBlock = async (context, payload, block) => {
|
|
447
573
|
const errors = [];
|
|
448
574
|
try {
|
|
449
575
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isHashPayload);
|
|
450
576
|
for (const typedError of typedErrors) {
|
|
451
|
-
errors.push(new
|
|
577
|
+
errors.push(new InBlockPayloadValidationError9(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
452
578
|
}
|
|
453
579
|
} catch (ex) {
|
|
454
|
-
errors.push(new
|
|
455
|
-
block?.[0]?._hash ??
|
|
580
|
+
errors.push(new InBlockPayloadValidationError9(
|
|
581
|
+
block?.[0]?._hash ?? ZERO_HASH13,
|
|
456
582
|
block,
|
|
457
583
|
payload,
|
|
458
584
|
`validation excepted: ${String(ex)}`,
|
|
@@ -463,19 +589,19 @@ var validateHashInBlock = async (context, payload, block) => {
|
|
|
463
589
|
};
|
|
464
590
|
|
|
465
591
|
// src/modules/validation/elevatedPayload/payloads/validateSchemaInBlock.ts
|
|
466
|
-
import { ZERO_HASH as
|
|
592
|
+
import { ZERO_HASH as ZERO_HASH14 } from "@ariestools/sdk";
|
|
467
593
|
import { isSchemaPayload } from "@xyo-network/sdk";
|
|
468
|
-
import { InBlockPayloadValidationError as
|
|
594
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError10 } from "@xyo-network/xl1-sdk";
|
|
469
595
|
var validateSchemaInBlock = async (context, payload, block) => {
|
|
470
596
|
const errors = [];
|
|
471
597
|
try {
|
|
472
598
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isSchemaPayload);
|
|
473
599
|
for (const typedError of typedErrors) {
|
|
474
|
-
errors.push(new
|
|
600
|
+
errors.push(new InBlockPayloadValidationError10(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
475
601
|
}
|
|
476
602
|
} catch (ex) {
|
|
477
|
-
errors.push(new
|
|
478
|
-
block?.[0]?._hash ??
|
|
603
|
+
errors.push(new InBlockPayloadValidationError10(
|
|
604
|
+
block?.[0]?._hash ?? ZERO_HASH14,
|
|
479
605
|
block,
|
|
480
606
|
payload,
|
|
481
607
|
`Failed validateSchemaInBlock: ${String(ex)}`,
|
|
@@ -486,21 +612,21 @@ var validateSchemaInBlock = async (context, payload, block) => {
|
|
|
486
612
|
};
|
|
487
613
|
|
|
488
614
|
// src/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.ts
|
|
489
|
-
import { ZERO_HASH as
|
|
490
|
-
import { InBlockPayloadValidationError as
|
|
615
|
+
import { ZERO_HASH as ZERO_HASH15 } from "@ariestools/sdk";
|
|
616
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError11, isSlashAdjudication } from "@xyo-network/xl1-sdk";
|
|
491
617
|
var validateSlashAdjudicationInBlock = async (context, payload, block) => {
|
|
492
618
|
const errors = [];
|
|
493
619
|
try {
|
|
494
620
|
const { errors: sharedErrors, params } = await validateSlashPayloadInBlock(context, payload, block, isSlashAdjudication, (adjudication) => adjudication.from, "slash adjudication");
|
|
495
621
|
for (const sharedError of sharedErrors) {
|
|
496
|
-
errors.push(new
|
|
622
|
+
errors.push(new InBlockPayloadValidationError11(payload._hash, block, payload, sharedError.message, sharedError));
|
|
497
623
|
}
|
|
498
624
|
if (sharedErrors.length === 0 && isSlashAdjudication(payload) && (params?.arbiter === void 0 || payload.from !== params.arbiter)) {
|
|
499
|
-
errors.push(new
|
|
625
|
+
errors.push(new InBlockPayloadValidationError11(payload._hash, block, payload, "slash adjudication from must equal the register arbiter"));
|
|
500
626
|
}
|
|
501
627
|
} catch (ex) {
|
|
502
|
-
errors.push(new
|
|
503
|
-
block[0]?._hash ??
|
|
628
|
+
errors.push(new InBlockPayloadValidationError11(
|
|
629
|
+
block[0]?._hash ?? ZERO_HASH15,
|
|
504
630
|
block,
|
|
505
631
|
payload,
|
|
506
632
|
`validation excepted: ${String(ex)}`,
|
|
@@ -511,18 +637,18 @@ var validateSlashAdjudicationInBlock = async (context, payload, block) => {
|
|
|
511
637
|
};
|
|
512
638
|
|
|
513
639
|
// src/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.ts
|
|
514
|
-
import { ZERO_HASH as
|
|
515
|
-
import { InBlockPayloadValidationError as
|
|
640
|
+
import { ZERO_HASH as ZERO_HASH16 } from "@ariestools/sdk";
|
|
641
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError12, isSlashChallenge } from "@xyo-network/xl1-sdk";
|
|
516
642
|
var validateSlashChallengeInBlock = async (context, payload, block) => {
|
|
517
643
|
const errors = [];
|
|
518
644
|
try {
|
|
519
645
|
const { errors: sharedErrors } = await validateSlashPayloadInBlock(context, payload, block, isSlashChallenge, (subject) => subject.from, "slash challenge");
|
|
520
646
|
for (const sharedError of sharedErrors) {
|
|
521
|
-
errors.push(new
|
|
647
|
+
errors.push(new InBlockPayloadValidationError12(payload._hash, block, payload, sharedError.message, sharedError));
|
|
522
648
|
}
|
|
523
649
|
} catch (ex) {
|
|
524
|
-
errors.push(new
|
|
525
|
-
block[0]?._hash ??
|
|
650
|
+
errors.push(new InBlockPayloadValidationError12(
|
|
651
|
+
block[0]?._hash ?? ZERO_HASH16,
|
|
526
652
|
block,
|
|
527
653
|
payload,
|
|
528
654
|
`validation excepted: ${String(ex)}`,
|
|
@@ -533,10 +659,10 @@ var validateSlashChallengeInBlock = async (context, payload, block) => {
|
|
|
533
659
|
};
|
|
534
660
|
|
|
535
661
|
// src/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.ts
|
|
536
|
-
import { ZERO_HASH as
|
|
662
|
+
import { ZERO_HASH as ZERO_HASH17 } from "@ariestools/sdk";
|
|
537
663
|
import {
|
|
538
664
|
derivedReceiveAddress,
|
|
539
|
-
InBlockPayloadValidationError as
|
|
665
|
+
InBlockPayloadValidationError as InBlockPayloadValidationError13,
|
|
540
666
|
isRuleActiveAt,
|
|
541
667
|
isSlashCommit,
|
|
542
668
|
isTransferPayload
|
|
@@ -561,7 +687,7 @@ var validateSlashCommitInBlock = async (context, payload, block) => {
|
|
|
561
687
|
transaction
|
|
562
688
|
} = await validateSlashPayloadInBlock(context, payload, block, isSlashCommit, (commit) => commit.from, "slash commit");
|
|
563
689
|
for (const sharedError of sharedErrors) {
|
|
564
|
-
errors.push(new
|
|
690
|
+
errors.push(new InBlockPayloadValidationError13(payload._hash, block, payload, sharedError.message, sharedError));
|
|
565
691
|
}
|
|
566
692
|
if (sharedErrors.length > 0 || params === void 0 || transaction === void 0 || !isSlashCommit(payload)) {
|
|
567
693
|
return errors;
|
|
@@ -571,7 +697,7 @@ var validateSlashCommitInBlock = async (context, payload, block) => {
|
|
|
571
697
|
const required = toAmount(params.reporterDepositAtto ?? "0x0");
|
|
572
698
|
const deposited = depositedInTransaction(payload, transaction, block[1]);
|
|
573
699
|
if (deposited < required) {
|
|
574
|
-
errors.push(new
|
|
700
|
+
errors.push(new InBlockPayloadValidationError13(
|
|
575
701
|
payload._hash,
|
|
576
702
|
block,
|
|
577
703
|
payload,
|
|
@@ -580,8 +706,8 @@ var validateSlashCommitInBlock = async (context, payload, block) => {
|
|
|
580
706
|
}
|
|
581
707
|
}
|
|
582
708
|
} catch (ex) {
|
|
583
|
-
errors.push(new
|
|
584
|
-
block[0]?._hash ??
|
|
709
|
+
errors.push(new InBlockPayloadValidationError13(
|
|
710
|
+
block[0]?._hash ?? ZERO_HASH17,
|
|
585
711
|
block,
|
|
586
712
|
payload,
|
|
587
713
|
`validation excepted: ${String(ex)}`,
|
|
@@ -592,18 +718,18 @@ var validateSlashCommitInBlock = async (context, payload, block) => {
|
|
|
592
718
|
};
|
|
593
719
|
|
|
594
720
|
// src/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.ts
|
|
595
|
-
import { ZERO_HASH as
|
|
596
|
-
import { InBlockPayloadValidationError as
|
|
721
|
+
import { ZERO_HASH as ZERO_HASH18 } from "@ariestools/sdk";
|
|
722
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError14, isSlashEvidence } from "@xyo-network/xl1-sdk";
|
|
597
723
|
var validateSlashEvidenceInBlock = async (context, payload, block) => {
|
|
598
724
|
const errors = [];
|
|
599
725
|
try {
|
|
600
726
|
const { errors: sharedErrors } = await validateSlashPayloadInBlock(context, payload, block, isSlashEvidence, (subject) => subject.from, "slash evidence");
|
|
601
727
|
for (const sharedError of sharedErrors) {
|
|
602
|
-
errors.push(new
|
|
728
|
+
errors.push(new InBlockPayloadValidationError14(payload._hash, block, payload, sharedError.message, sharedError));
|
|
603
729
|
}
|
|
604
730
|
} catch (ex) {
|
|
605
|
-
errors.push(new
|
|
606
|
-
block[0]?._hash ??
|
|
731
|
+
errors.push(new InBlockPayloadValidationError14(
|
|
732
|
+
block[0]?._hash ?? ZERO_HASH18,
|
|
607
733
|
block,
|
|
608
734
|
payload,
|
|
609
735
|
`validation excepted: ${String(ex)}`,
|
|
@@ -614,10 +740,10 @@ var validateSlashEvidenceInBlock = async (context, payload, block) => {
|
|
|
614
740
|
};
|
|
615
741
|
|
|
616
742
|
// src/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.ts
|
|
617
|
-
import { ZERO_HASH as
|
|
618
|
-
import { PayloadBuilder } from "@xyo-network/sdk";
|
|
743
|
+
import { ZERO_HASH as ZERO_HASH19 } from "@ariestools/sdk";
|
|
744
|
+
import { PayloadBuilder as PayloadBuilder2 } from "@xyo-network/sdk";
|
|
619
745
|
import {
|
|
620
|
-
InBlockPayloadValidationError as
|
|
746
|
+
InBlockPayloadValidationError as InBlockPayloadValidationError15,
|
|
621
747
|
isRuleObservedAt,
|
|
622
748
|
isSlashEvidence as isSlashEvidence2,
|
|
623
749
|
isSlashRequest,
|
|
@@ -626,7 +752,7 @@ import {
|
|
|
626
752
|
async function carriedArtifactHashes(transaction, payloads) {
|
|
627
753
|
const inTransaction = new Set(transaction.payload_hashes);
|
|
628
754
|
const artifacts = payloads.filter((candidate) => inTransaction.has(candidate._hash)).filter((candidate) => isSlashEvidence2(candidate)).flatMap((container) => container.artifacts);
|
|
629
|
-
return new Set(await Promise.all(artifacts.map((artifact) =>
|
|
755
|
+
return new Set(await Promise.all(artifacts.map((artifact) => PayloadBuilder2.dataHash(artifact))));
|
|
630
756
|
}
|
|
631
757
|
async function evidenceResolutionErrors(context, request, carried, height) {
|
|
632
758
|
const missing = request.evidence.filter((hash) => !carried.has(hash));
|
|
@@ -643,7 +769,7 @@ function isOffenseReportable(params, request) {
|
|
|
643
769
|
}
|
|
644
770
|
var validateSlashRequestInBlock = async (context, payload, block) => {
|
|
645
771
|
const errors = [];
|
|
646
|
-
const fail = (message) => errors.push(new
|
|
772
|
+
const fail = (message) => errors.push(new InBlockPayloadValidationError15(payload._hash, block, payload, message));
|
|
647
773
|
try {
|
|
648
774
|
const {
|
|
649
775
|
errors: sharedErrors,
|
|
@@ -651,7 +777,7 @@ var validateSlashRequestInBlock = async (context, payload, block) => {
|
|
|
651
777
|
transaction
|
|
652
778
|
} = await validateSlashPayloadInBlock(context, payload, block, isSlashRequest, (request) => request.from, "slash request");
|
|
653
779
|
for (const sharedError of sharedErrors) {
|
|
654
|
-
errors.push(new
|
|
780
|
+
errors.push(new InBlockPayloadValidationError15(payload._hash, block, payload, sharedError.message, sharedError));
|
|
655
781
|
}
|
|
656
782
|
if (sharedErrors.length > 0 || params === void 0 || transaction === void 0 || !isSlashRequest(payload)) {
|
|
657
783
|
return errors;
|
|
@@ -664,8 +790,8 @@ var validateSlashRequestInBlock = async (context, payload, block) => {
|
|
|
664
790
|
fail(problem);
|
|
665
791
|
}
|
|
666
792
|
} catch (ex) {
|
|
667
|
-
errors.push(new
|
|
668
|
-
block[0]?._hash ??
|
|
793
|
+
errors.push(new InBlockPayloadValidationError15(
|
|
794
|
+
block[0]?._hash ?? ZERO_HASH19,
|
|
669
795
|
block,
|
|
670
796
|
payload,
|
|
671
797
|
`validation excepted: ${String(ex)}`,
|
|
@@ -676,18 +802,18 @@ var validateSlashRequestInBlock = async (context, payload, block) => {
|
|
|
676
802
|
};
|
|
677
803
|
|
|
678
804
|
// src/modules/validation/elevatedPayload/payloads/validateTimeInBlock.ts
|
|
679
|
-
import { ZERO_HASH as
|
|
680
|
-
import { InBlockPayloadValidationError as
|
|
805
|
+
import { ZERO_HASH as ZERO_HASH20 } from "@ariestools/sdk";
|
|
806
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError16, isTimePayload } from "@xyo-network/xl1-sdk";
|
|
681
807
|
var validateTimeInBlock = async (context, payload, block) => {
|
|
682
808
|
const errors = [];
|
|
683
809
|
try {
|
|
684
810
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload);
|
|
685
811
|
for (const typedError of typedErrors) {
|
|
686
|
-
errors.push(new
|
|
812
|
+
errors.push(new InBlockPayloadValidationError16(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
687
813
|
}
|
|
688
814
|
} catch (ex) {
|
|
689
|
-
errors.push(new
|
|
690
|
-
block?.[0]?._hash ??
|
|
815
|
+
errors.push(new InBlockPayloadValidationError16(
|
|
816
|
+
block?.[0]?._hash ?? ZERO_HASH20,
|
|
691
817
|
block,
|
|
692
818
|
payload,
|
|
693
819
|
`Failed validateTimeInBlock: ${String(ex)}`,
|
|
@@ -698,18 +824,18 @@ var validateTimeInBlock = async (context, payload, block) => {
|
|
|
698
824
|
};
|
|
699
825
|
|
|
700
826
|
// src/modules/validation/elevatedPayload/payloads/validateTransferInBlock.ts
|
|
701
|
-
import { ZERO_HASH as
|
|
702
|
-
import { InBlockPayloadValidationError as
|
|
827
|
+
import { ZERO_HASH as ZERO_HASH21 } from "@ariestools/sdk";
|
|
828
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError17, isTransferPayload as isTransferPayload2 } from "@xyo-network/xl1-sdk";
|
|
703
829
|
var validateTransferInBlock = async (context, payload, block) => {
|
|
704
830
|
const errors = [];
|
|
705
831
|
try {
|
|
706
832
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTransferPayload2);
|
|
707
833
|
for (const typedError of typedErrors) {
|
|
708
|
-
errors.push(new
|
|
834
|
+
errors.push(new InBlockPayloadValidationError17(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
709
835
|
}
|
|
710
836
|
} catch (ex) {
|
|
711
|
-
errors.push(new
|
|
712
|
-
block?.[0]?._hash ??
|
|
837
|
+
errors.push(new InBlockPayloadValidationError17(
|
|
838
|
+
block?.[0]?._hash ?? ZERO_HASH21,
|
|
713
839
|
block,
|
|
714
840
|
payload,
|
|
715
841
|
`Failed validateTransferInBlock: ${String(ex)}`,
|
|
@@ -726,6 +852,7 @@ var payloadValidators = {
|
|
|
726
852
|
[BridgeIntentSchema]: validateBridgeIntentInBlock,
|
|
727
853
|
[BridgeSourceObservationSchema]: validateBridgeSourceObservationInBlock,
|
|
728
854
|
[ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
|
|
855
|
+
[ClaimSchema2]: validateClaimInBlock,
|
|
729
856
|
[HashSchema]: validateHashInBlock,
|
|
730
857
|
[SchemaSchema]: validateSchemaInBlock,
|
|
731
858
|
[SlashAdjudicationSchema]: validateSlashAdjudicationInBlock,
|
|
@@ -743,11 +870,11 @@ var validatePayloadInBlock = async (context, payload, block) => {
|
|
|
743
870
|
if (validator) {
|
|
744
871
|
errors.push(...await validator(context, payload, block));
|
|
745
872
|
} else {
|
|
746
|
-
errors.push(new
|
|
873
|
+
errors.push(new InBlockPayloadValidationError18(block?.[0]?._hash ?? ZERO_HASH22, block, payload, `Unsupported payload schema: ${payload.schema}`));
|
|
747
874
|
}
|
|
748
875
|
} catch (ex) {
|
|
749
|
-
const error2 = new
|
|
750
|
-
block?.[0]?._hash ??
|
|
876
|
+
const error2 = new InBlockPayloadValidationError18(
|
|
877
|
+
block?.[0]?._hash ?? ZERO_HASH22,
|
|
751
878
|
block,
|
|
752
879
|
payload,
|
|
753
880
|
`validation excepted: ${String(ex)}`,
|
|
@@ -776,7 +903,7 @@ var PayloadsInBlockValidator = async (context, [block, payloads]) => {
|
|
|
776
903
|
const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [block, payloads]);
|
|
777
904
|
for (const payloadInBlockError of payloadInBlockErrors) {
|
|
778
905
|
errors.push(new HydratedBlockValidationError(
|
|
779
|
-
block?._hash ??
|
|
906
|
+
block?._hash ?? ZERO_HASH23,
|
|
780
907
|
[block, payloads],
|
|
781
908
|
`validatePayloadInBlock error: ${payloadInBlockError}`,
|
|
782
909
|
payloadInBlockError
|
|
@@ -784,15 +911,15 @@ var PayloadsInBlockValidator = async (context, [block, payloads]) => {
|
|
|
784
911
|
}
|
|
785
912
|
delete remainingPayloads[propertyKey];
|
|
786
913
|
} else {
|
|
787
|
-
errors.push(new HydratedBlockValidationError(block?._hash ??
|
|
914
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH23, [block, payloads], `missing payload ${propertyKey} ${schema}`));
|
|
788
915
|
}
|
|
789
916
|
}
|
|
790
917
|
if (Object.keys(remainingPayloads).length > 0) {
|
|
791
|
-
errors.push(new HydratedBlockValidationError(block?._hash ??
|
|
918
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH23, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(", ")}`));
|
|
792
919
|
}
|
|
793
920
|
} catch (ex) {
|
|
794
921
|
errors.push(new HydratedBlockValidationError(
|
|
795
|
-
block?._hash ??
|
|
922
|
+
block?._hash ?? ZERO_HASH23,
|
|
796
923
|
[block, payloads],
|
|
797
924
|
`Failed PayloadsInBlockValidator: ${String(ex)}`,
|
|
798
925
|
ex
|
|
@@ -802,7 +929,7 @@ var PayloadsInBlockValidator = async (context, [block, payloads]) => {
|
|
|
802
929
|
};
|
|
803
930
|
|
|
804
931
|
// src/modules/validation/hydratedBlock/validators/TransactionTransfersInBlock.ts
|
|
805
|
-
import { ZERO_HASH as
|
|
932
|
+
import { ZERO_HASH as ZERO_HASH24 } from "@ariestools/sdk";
|
|
806
933
|
import { isHashMeta as isHashMeta4 } from "@xyo-network/sdk";
|
|
807
934
|
import { HydratedBlockValidationError as HydratedBlockValidationError2, isTransactionBoundWitness as isTransactionBoundWitness3 } from "@xyo-network/xl1-sdk";
|
|
808
935
|
function TransactionTransfersInBlockValidatorFactory(transfersValidator) {
|
|
@@ -820,7 +947,7 @@ function TransactionTransfersInBlockValidatorFactory(transfersValidator) {
|
|
|
820
947
|
}
|
|
821
948
|
} catch (ex) {
|
|
822
949
|
errors.push(new HydratedBlockValidationError2(
|
|
823
|
-
block?._hash ??
|
|
950
|
+
block?._hash ?? ZERO_HASH24,
|
|
824
951
|
hydratedBlock,
|
|
825
952
|
`Failed TransactionTransfersInBlockValidator: ${String(ex)}`,
|
|
826
953
|
ex
|
|
@@ -856,7 +983,7 @@ var validateHydratedBlock = async (context, hydratedBlock, chainIdAtBlockNumber,
|
|
|
856
983
|
}
|
|
857
984
|
} catch (ex) {
|
|
858
985
|
errors.push(new HydratedBlockValidationError3(
|
|
859
|
-
hydratedBlock?.[0]?._hash ??
|
|
986
|
+
hydratedBlock?.[0]?._hash ?? ZERO_HASH25,
|
|
860
987
|
hydratedBlock,
|
|
861
988
|
`Failed validateHydratedBlock: ${String(ex)}`,
|
|
862
989
|
ex
|
|
@@ -866,11 +993,11 @@ var validateHydratedBlock = async (context, hydratedBlock, chainIdAtBlockNumber,
|
|
|
866
993
|
};
|
|
867
994
|
|
|
868
995
|
// src/modules/validation/hydratedBlockState/validateHydratedBlockState.ts
|
|
869
|
-
import { spanRootAsync as spanRootAsync2, ZERO_HASH as
|
|
996
|
+
import { spanRootAsync as spanRootAsync2, ZERO_HASH as ZERO_HASH27 } from "@ariestools/sdk";
|
|
870
997
|
import { HydratedBlockStateValidationError as HydratedBlockStateValidationError2 } from "@xyo-network/xl1-sdk";
|
|
871
998
|
|
|
872
999
|
// src/modules/validation/hydratedBlockState/validators/RequiredBalance.ts
|
|
873
|
-
import { spanRootAsync, ZERO_HASH as
|
|
1000
|
+
import { spanRootAsync, ZERO_HASH as ZERO_HASH26 } from "@ariestools/sdk";
|
|
874
1001
|
import {
|
|
875
1002
|
AttoXL1,
|
|
876
1003
|
HydratedBlockStateValidationError,
|
|
@@ -904,7 +1031,7 @@ var RequiredBalanceBlockStateValidator = async (context, block) => {
|
|
|
904
1031
|
}
|
|
905
1032
|
const previous = block[0].previous;
|
|
906
1033
|
if (previous === null) return [new HydratedBlockStateValidationError(
|
|
907
|
-
block?.[0]?._hash ??
|
|
1034
|
+
block?.[0]?._hash ?? ZERO_HASH26,
|
|
908
1035
|
"00",
|
|
909
1036
|
block,
|
|
910
1037
|
"Insufficient funds because first block"
|
|
@@ -918,7 +1045,7 @@ var RequiredBalanceBlockStateValidator = async (context, block) => {
|
|
|
918
1045
|
if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
|
|
919
1046
|
const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address);
|
|
920
1047
|
errors.push(new HydratedBlockStateValidationError(
|
|
921
|
-
block?.[0]?._hash ??
|
|
1048
|
+
block?.[0]?._hash ?? ZERO_HASH26,
|
|
922
1049
|
chainId,
|
|
923
1050
|
block,
|
|
924
1051
|
`insufficient balance for ${address} ${balance} < ${reqBalance}`,
|
|
@@ -930,7 +1057,7 @@ var RequiredBalanceBlockStateValidator = async (context, block) => {
|
|
|
930
1057
|
}, context);
|
|
931
1058
|
} catch (ex) {
|
|
932
1059
|
errors.push(new HydratedBlockStateValidationError(
|
|
933
|
-
block?.[0]?._hash ??
|
|
1060
|
+
block?.[0]?._hash ?? ZERO_HASH26,
|
|
934
1061
|
chainId,
|
|
935
1062
|
block,
|
|
936
1063
|
`Failed RequiredBalanceBlockStateValidator: ${String(ex)}`,
|
|
@@ -967,7 +1094,7 @@ var validateHydratedBlockState = async (context, hydratedBlock, additionalValida
|
|
|
967
1094
|
}
|
|
968
1095
|
} catch (ex) {
|
|
969
1096
|
errors.push(new HydratedBlockStateValidationError2(
|
|
970
|
-
hydratedBlock?.[0]?._hash ??
|
|
1097
|
+
hydratedBlock?.[0]?._hash ?? ZERO_HASH27,
|
|
971
1098
|
chainId ?? "00",
|
|
972
1099
|
hydratedBlock,
|
|
973
1100
|
`Failed validateHydratedBlockState: ${String(ex)}`,
|
|
@@ -979,11 +1106,11 @@ var validateHydratedBlockState = async (context, hydratedBlock, additionalValida
|
|
|
979
1106
|
};
|
|
980
1107
|
|
|
981
1108
|
// src/modules/validation/hydratedTransactionState/validateHydratedTransactionState.ts
|
|
982
|
-
import { spanRootAsync as spanRootAsync4, ZERO_HASH as
|
|
1109
|
+
import { spanRootAsync as spanRootAsync4, ZERO_HASH as ZERO_HASH29 } from "@ariestools/sdk";
|
|
983
1110
|
import { HydratedTransactionValidationError as HydratedTransactionValidationError2 } from "@xyo-network/xl1-sdk";
|
|
984
1111
|
|
|
985
1112
|
// src/modules/validation/hydratedTransactionState/validators/RequiredBalance.ts
|
|
986
|
-
import { spanRootAsync as spanRootAsync3, ZERO_HASH as
|
|
1113
|
+
import { spanRootAsync as spanRootAsync3, ZERO_HASH as ZERO_HASH28 } from "@ariestools/sdk";
|
|
987
1114
|
import {
|
|
988
1115
|
AttoXL1 as AttoXL12,
|
|
989
1116
|
HydratedTransactionValidationError,
|
|
@@ -1008,7 +1135,7 @@ async function balanceShortfallErrors(context, tx, requiredBalances) {
|
|
|
1008
1135
|
const balance = balancesByKey[propertyKey] ?? AttoXL12(0n);
|
|
1009
1136
|
if (address !== XYO_ZERO_ADDRESS2 && reqBalance > balance) {
|
|
1010
1137
|
errors.push(new HydratedTransactionValidationError(
|
|
1011
|
-
tx?.[0]?._hash ??
|
|
1138
|
+
tx?.[0]?._hash ?? ZERO_HASH28,
|
|
1012
1139
|
tx,
|
|
1013
1140
|
`insufficient balance for ${address} ${balance} < ${reqBalance}`
|
|
1014
1141
|
));
|
|
@@ -1026,7 +1153,7 @@ var RequiredBalanceTransactionStateValidator = async (context, tx) => {
|
|
|
1026
1153
|
const gasRequired = transactionRequiredGas(tx);
|
|
1027
1154
|
if (wrapper.fees.gasLimit < gasRequired) {
|
|
1028
1155
|
errors.push(new HydratedTransactionValidationError(
|
|
1029
|
-
tx?.[0]?._hash ??
|
|
1156
|
+
tx?.[0]?._hash ?? ZERO_HASH28,
|
|
1030
1157
|
tx,
|
|
1031
1158
|
`fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`
|
|
1032
1159
|
));
|
|
@@ -1044,7 +1171,7 @@ var RequiredBalanceTransactionStateValidator = async (context, tx) => {
|
|
|
1044
1171
|
errors.push(...await balanceShortfallErrors(context, tx, requiredBalances));
|
|
1045
1172
|
} catch (ex) {
|
|
1046
1173
|
errors.push(new HydratedTransactionValidationError(
|
|
1047
|
-
tx?.[0]?._hash ??
|
|
1174
|
+
tx?.[0]?._hash ?? ZERO_HASH28,
|
|
1048
1175
|
tx,
|
|
1049
1176
|
`Failed RequiredBalanceTransactionStateValidator: ${String(ex)}`,
|
|
1050
1177
|
ex
|
|
@@ -1067,7 +1194,7 @@ var validateHydratedTransactionState = async (context, tx) => {
|
|
|
1067
1194
|
}
|
|
1068
1195
|
} catch (ex) {
|
|
1069
1196
|
errors.push(new HydratedTransactionValidationError2(
|
|
1070
|
-
tx?.[0]?._hash ??
|
|
1197
|
+
tx?.[0]?._hash ?? ZERO_HASH29,
|
|
1071
1198
|
tx,
|
|
1072
1199
|
`Failed validateHydratedTransactionState: ${String(ex)}`,
|
|
1073
1200
|
ex
|