@xyo-network/chain-validation 1.22.0 → 1.23.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.
@@ -1 +1 @@
1
- {"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlockState/validators/RequiredBalance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,oCAAoC,EAAE,MAAM,sBAAsB,CAAA;AAKzF,eAAO,MAAM,kCAAkC,EAAE,oCAmDhD,CAAA"}
1
+ {"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlockState/validators/RequiredBalance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,oCAAoC,EAAE,MAAM,sBAAsB,CAAA;AAiBzF,eAAO,MAAM,kCAAkC,EAAE,oCAsDhD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedTransactionState/validators/RequiredBalance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,sBAAsB,CAAA;AAUtF,eAAO,MAAM,wCAAwC,EAAE,0CAkDtD,CAAA"}
1
+ {"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedTransactionState/validators/RequiredBalance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,0CAA0C,EAAE,MAAM,sBAAsB,CAAA;AA6CtF,eAAO,MAAM,wCAAwC,EAAE,0CA4CtD,CAAA"}
@@ -499,7 +499,17 @@ import { HydratedBlockStateValidationError as HydratedBlockStateValidationError2
499
499
 
500
500
  // src/hydratedBlockState/validators/RequiredBalance.ts
501
501
  import { spanRootAsync, ZERO_HASH as ZERO_HASH19 } from "@xylabs/sdk-js";
502
- import { AttoXL1, HydratedBlockStateValidationError, netBalancesForPayloads, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-sdk";
502
+ import { AttoXL1, HydratedBlockStateValidationError, isSignedTransactionBoundWitnessWithHashMeta, netBalancesForPayloads, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-sdk";
503
+ function offendingTransactionHashesForAddress(block, address) {
504
+ const hashes = [];
505
+ for (const payload of block[1]) {
506
+ if (isSignedTransactionBoundWitnessWithHashMeta(payload) && payload.from === address) {
507
+ hashes.push(payload._hash);
508
+ }
509
+ }
510
+ return hashes;
511
+ }
512
+ __name(offendingTransactionHashesForAddress, "offendingTransactionHashesForAddress");
503
513
  var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context, block) => {
504
514
  return await spanRootAsync("RequiredBalanceBlockStateValidator", async () => {
505
515
  const errors = [];
@@ -529,7 +539,8 @@ var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context,
529
539
  });
530
540
  const balance = result[address] ?? AttoXL1(0n);
531
541
  if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
532
- errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH19, chainId, block, `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`));
542
+ 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));
533
544
  }
534
545
  }
535
546
  }, context);
@@ -570,6 +581,24 @@ import { HydratedTransactionValidationError as HydratedTransactionValidationErro
570
581
  // src/hydratedTransactionState/validators/RequiredBalance.ts
571
582
  import { spanRootAsync as spanRootAsync3, ZERO_HASH as ZERO_HASH21 } from "@xylabs/sdk-js";
572
583
  import { AttoXL1 as AttoXL12, HydratedTransactionValidationError, HydratedTransactionWrapper, netBalancesForPayloads as netBalancesForPayloads2, transactionRequiredGas, XYO_ZERO_ADDRESS as XYO_ZERO_ADDRESS2 } from "@xyo-network/xl1-sdk";
584
+ async function balanceShortfallErrors(context, tx, requiredBalances) {
585
+ const errors = [];
586
+ const requiredAddresses = Object.keys(requiredBalances);
587
+ if (requiredAddresses.length === 0) return errors;
588
+ const headBlock = (await context.blockViewer.currentBlock())[0];
589
+ const balances = await context.accountBalanceViewer.accountBalances(requiredAddresses, {
590
+ head: headBlock._hash
591
+ });
592
+ for (const address of requiredAddresses) {
593
+ const reqBalance = requiredBalances[address];
594
+ const balance = balances[address] ?? AttoXL12(0n);
595
+ if (address !== XYO_ZERO_ADDRESS2 && reqBalance > balance) {
596
+ errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH21, tx, `insufficient balance for ${address} ${balance} < ${reqBalance}`));
597
+ }
598
+ }
599
+ return errors;
600
+ }
601
+ __name(balanceShortfallErrors, "balanceShortfallErrors");
573
602
  var RequiredBalanceTransactionStateValidator = /* @__PURE__ */ __name(async (context, tx) => {
574
603
  return await spanRootAsync3("RequiredBalanceTransactionStateValidator", async () => {
575
604
  const errors = [];
@@ -579,26 +608,18 @@ var RequiredBalanceTransactionStateValidator = /* @__PURE__ */ __name(async (con
579
608
  }, tx[1]);
580
609
  const wrapper = await HydratedTransactionWrapper.parse(tx);
581
610
  const from = wrapper.boundWitness.from;
582
- const gasCost = transactionRequiredGas(tx) * wrapper.fees.gasPrice;
611
+ const gasRequired = transactionRequiredGas(tx);
612
+ if (wrapper.fees.gasLimit < gasRequired) {
613
+ errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH21, tx, `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`));
614
+ }
615
+ const gasCost = gasRequired * wrapper.fees.gasPrice;
583
616
  const baseCost = wrapper.fees.base;
584
617
  netBalances[from] = (netBalances[from] ?? 0n) - gasCost - baseCost;
585
618
  const requiredBalances = {};
586
619
  for (const [address, net] of Object.entries(netBalances)) {
587
620
  if (net < 0n) requiredBalances[address] = -net;
588
621
  }
589
- const requiredAddresses = Object.keys(requiredBalances);
590
- if (requiredAddresses.length === 0) return errors;
591
- const headBlock = (await context.blockViewer.currentBlock())[0];
592
- const balances = await context.accountBalanceViewer.accountBalances(requiredAddresses, {
593
- head: headBlock._hash
594
- });
595
- for (const address of requiredAddresses) {
596
- const reqBalance = requiredBalances[address];
597
- const balance = balances[address] ?? AttoXL12(0n);
598
- if (address !== XYO_ZERO_ADDRESS2 && reqBalance > balance) {
599
- errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH21, tx, `insufficient balance for ${address} ${balance} < ${reqBalance}`));
600
- }
601
- }
622
+ errors.push(...await balanceShortfallErrors(context, tx, requiredBalances));
602
623
  } catch (ex) {
603
624
  errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH21, tx, `Failed RequiredBalanceTransactionStateValidator: ${ex}`, ex));
604
625
  }
@@ -1 +1 @@
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 } 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, netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\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 errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n ))\n }\n }\n }, 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\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 gasCost = transactionRequiredGas(tx) * 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 const requiredAddresses = Object.keys(requiredBalances) as Address[]\n if (requiredAddresses.length === 0) return errors\n\n const headBlock = (await context.blockViewer.currentBlock())[0]\n const balances = await context.accountBalanceViewer.accountBalances(\n requiredAddresses,\n { head: headBlock._hash },\n )\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 } 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","netBalancesForPayloads","XYO_ZERO_ADDRESS","RequiredBalanceBlockStateValidator","context","block","spanRootAsync","errors","chainId","netBalances","netBalancesForPayloads","singletons","netBalanceAddresses","Object","keys","requiredBalances","address","previous","HydratedBlockStateValidationError","_hash","ZERO_HASH","chainIdAtBlockNumber","reqBalance","entries","result","accountBalance","accountBalances","head","balance","AttoXL1","XYO_ZERO_ADDRESS","push","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","RequiredBalanceTransactionStateValidator","context","tx","spanRootAsync","errors","netBalances","netBalancesForPayloads","singletons","wrapper","HydratedTransactionWrapper","parse","from","boundWitness","gasCost","transactionRequiredGas","fees","gasPrice","baseCost","base","requiredBalances","address","net","Object","entries","requiredAddresses","keys","length","headBlock","blockViewer","currentBlock","balances","accountBalanceViewer","accountBalances","head","_hash","reqBalance","balance","AttoXL1","XYO_ZERO_ADDRESS","push","HydratedTransactionValidationError","ZERO_HASH","ex","validateHydratedTransactionState","context","tx","spanRootAsync","errors","validators","RequiredBalanceTransactionStateValidator","push","Promise","all","map","v","flat","ex","HydratedTransactionValidationError","_hash","ZERO_HASH"]}
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"]}
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.22.0",
4
+ "version": "1.23.0",
5
5
  "description": "XYO Layer One SDK Validation",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -36,20 +36,20 @@
36
36
  ],
37
37
  "devDependencies": {
38
38
  "@bitauth/libauth": "~3.0.0",
39
- "@metamask/json-rpc-engine": "^10.4.0",
39
+ "@metamask/json-rpc-engine": "^10.5.0",
40
40
  "@metamask/providers": "^22.1.1",
41
41
  "@metamask/utils": "~11.11.0",
42
42
  "@opentelemetry/api": "^1.9.1",
43
43
  "@opentelemetry/sdk-trace-base": "^2.7.1",
44
44
  "@scure/base": "~2.2.0",
45
45
  "@scure/bip39": "~2.2.0",
46
- "@types/node": ">=18",
47
46
  "@xylabs/fetch": "~5.1.2",
48
47
  "@xylabs/geo": "^5.1.2",
49
48
  "@xylabs/sdk-js": "^5.1.2",
50
49
  "@xylabs/threads": "~5.1.2",
51
- "@xylabs/toolchain": "~7.13.22",
52
- "@xylabs/tsconfig": "~7.13.22",
50
+ "@xylabs/toolchain": "~7.13.24",
51
+ "@xylabs/tsconfig": "~7.13.24",
52
+ "@xylabs/vitest-extended": "~5.1.2",
53
53
  "@xyo-network/account": "~5.6.2",
54
54
  "@xyo-network/account-model": "~5.6.3",
55
55
  "@xyo-network/api": "~5.6.2",
@@ -69,11 +69,9 @@
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.28.5",
73
- "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0",
72
+ "@xyo-network/xl1-sdk": "^1.30.1",
74
73
  "ajv": "^8.20.0",
75
74
  "async-mutex": "^0.5.0",
76
- "axios": "^1",
77
75
  "bn.js": "^5.2.3",
78
76
  "buffer": "^6.0.3",
79
77
  "chalk": "^5.6.2",
@@ -81,24 +79,22 @@
81
79
  "debug": "~4.4.3",
82
80
  "eslint": "^10.3.0",
83
81
  "ethers": "^6.16.0",
84
- "firebase": "^12",
85
82
  "hash-wasm": "~4.12.0",
86
83
  "idb": "^8.0.3",
87
84
  "lru-cache": "^11.3.6",
88
85
  "mapbox-gl": "^3.23.1",
89
86
  "observable-fns": "~0.6.1",
90
87
  "pako": "^2.1.0",
91
- "rollup": "^3.29.4 || ^4",
92
88
  "store2": "~2.14.4",
93
89
  "typescript": "~5.9.3",
94
90
  "uuid": "~14.0.0",
95
- "vite": "^8.0.11",
96
- "vitest": "^4.1.5",
91
+ "vite": "^8.0.12",
92
+ "vitest": "^4.1.6",
97
93
  "wasm-feature-detect": "~1.8.0",
98
94
  "webextension-polyfill": "^0.12.0",
99
95
  "zod": "~4.4.3",
100
- "@xyo-network/chain-protocol": "~1.22.0",
101
- "@xyo-network/chain-protocol-test": "~1.22.0"
96
+ "@xyo-network/chain-protocol": "~1.23.0",
97
+ "@xyo-network/chain-protocol-test": "~1.23.0"
102
98
  },
103
99
  "peerDependencies": {
104
100
  "@bitauth/libauth": "~3.0",
@@ -135,14 +131,12 @@
135
131
  "@xyo-network/xl1-sdk": "^1.28",
136
132
  "ajv": "^8.20",
137
133
  "async-mutex": "^0.5",
138
- "axios": "^1",
139
134
  "bn.js": "^5.2",
140
135
  "buffer": "^6.0",
141
136
  "chalk": "^5.6",
142
137
  "cosmiconfig": "^9.0",
143
138
  "debug": "~4.4",
144
139
  "ethers": "^6.16",
145
- "firebase": "^12",
146
140
  "hash-wasm": "~4.12",
147
141
  "idb": "^8.0",
148
142
  "lru-cache": "^11.3",