@xyo-network/chain-validation 1.5.32 → 1.5.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/dist/neutral/index.mjs +81 -61
  2. package/dist/neutral/index.mjs.map +1 -1
  3. package/dist/types/block/validateBlock.d.ts.map +1 -1
  4. package/dist/types/block/validators/AllowedPayloadSchemas.d.ts.map +1 -1
  5. package/dist/types/block/validators/Fields.d.ts.map +1 -1
  6. package/dist/types/block/validators/JsonSchema.d.ts.map +1 -1
  7. package/dist/types/block/validators/PreviousHash.d.ts.map +1 -1
  8. package/dist/types/boundwitness/validators/BoundWitnessReferences.d.ts.map +1 -1
  9. package/dist/types/boundwitness/validators/BoundWitnessSignatures.d.ts.map +1 -1
  10. package/dist/types/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts.map +1 -1
  11. package/dist/types/elevatedPayload/payloads/validateHashInBlock.d.ts.map +1 -1
  12. package/dist/types/elevatedPayload/payloads/validateSchemaInBlock.d.ts.map +1 -1
  13. package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts.map +1 -1
  14. package/dist/types/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
  15. package/dist/types/hydratedBlock/validateHydratedBlock.d.ts.map +1 -1
  16. package/dist/types/hydratedBlock/validators/Payloads.d.ts.map +1 -1
  17. package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
  18. package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
  19. package/dist/types/transaction/validators/TransactionDurationValidator.d.ts.map +1 -1
  20. package/dist/types/transaction/validators/TransactionElevationValidator.d.ts.map +1 -1
  21. package/dist/types/transaction/validators/TransactionFromValidator.d.ts.map +1 -1
  22. package/dist/types/transaction/validators/TransactionGasValidator.d.ts.map +1 -1
  23. package/dist/types/transaction/validators/TransactionJsonSchemaValidator.d.ts.map +1 -1
  24. package/package.json +11 -11
  25. package/src/block/validateBlock.ts +3 -2
  26. package/src/block/validators/AllowedPayloadSchemas.ts +12 -2
  27. package/src/block/validators/Fields.ts +15 -4
  28. package/src/block/validators/JsonSchema.ts +13 -2
  29. package/src/block/validators/PreviousHash.ts +10 -5
  30. package/src/boundwitness/validators/BoundWitnessReferences.ts +8 -7
  31. package/src/boundwitness/validators/BoundWitnessSignatures.ts +3 -2
  32. package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +7 -1
  33. package/src/elevatedPayload/payloads/validateHashInBlock.ts +7 -1
  34. package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +7 -1
  35. package/src/elevatedPayload/payloads/validateTransferInBlock.ts +7 -1
  36. package/src/elevatedPayload/validatePayloadInBlock.ts +8 -2
  37. package/src/hydratedBlock/validateHydratedBlock.ts +6 -2
  38. package/src/hydratedBlock/validators/Payloads.ts +8 -4
  39. package/src/hydratedBlockState/validateHydratedBlockState.ts +2 -1
  40. package/src/hydratedBlockState/validators/RequiredBalance.ts +11 -2
  41. package/src/transaction/validators/TransactionDurationValidator.ts +15 -5
  42. package/src/transaction/validators/TransactionElevationValidator.ts +7 -2
  43. package/src/transaction/validators/TransactionFromValidator.ts +16 -4
  44. package/src/transaction/validators/TransactionGasValidator.ts +28 -5
  45. package/src/transaction/validators/TransactionJsonSchemaValidator.ts +8 -2
  46. package/src/transaction/validators/TransactionProtocolValidator.ts +3 -3
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/block/validateBlock.ts","../../src/boundwitness/validators/BoundWitnessReferences.ts","../../src/boundwitness/validators/BoundWitnessSignatures.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/Fields.ts","../../src/block/validators/JsonSchema.ts","../../src/block/validators/PreviousHash.ts","../../src/hydratedBlock/validateHydratedBlock.ts","../../src/hydratedBlock/validators/Payloads.ts","../../src/elevatedPayload/validatePayloadInBlock.ts","../../src/elevatedPayload/lib/isElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromTransaction.ts","../../src/elevatedPayload/lib/validateTransactionInBlock.ts","../../src/elevatedPayload/lib/validateTypedPayloadInBlock.ts","../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateHashInBlock.ts","../../src/elevatedPayload/payloads/validateSchemaInBlock.ts","../../src/elevatedPayload/payloads/validateTransferInBlock.ts","../../src/hydratedBlockState/validateHydratedBlockState.ts","../../src/hydratedBlockState/validators/RequiredBalance.ts","../../src/transaction/validateTransaction.ts","../../src/transaction/validators/TransactionDurationValidator.ts","../../src/transaction/validators/TransactionElevationValidator.ts","../../src/transaction/validators/TransactionFromValidator.ts","../../src/transaction/validators/TransactionGasValidator.ts","../../src/transaction/validators/TransactionJsonSchemaValidator.ts","../../src/transaction/validators/TransactionProtocolValidator.ts"],"sourcesContent":["import type { Address } from '@xylabs/hex'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { BoundWitnessSignaturesValidator } from '../boundwitness/index.ts'\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockJsonSchemaValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock: BlockValidatorFunction = async (\n block: BlockBoundWitness,\n chainId?: Address,\n): Promise<(BlockValidationError | Error)[]> => {\n const errors: Error[] = []\n try {\n const validators: BlockValidatorFunction[] = [\n BoundWitnessSignaturesValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockJsonSchemaValidator(),\n BlockAllowedPayloadSchemasValidator,\n ]\n errors.push(...(await Promise.all(\n validators.map(validator => validator(block, chainId)),\n )).flat())\n } catch (ex) {\n errors.push(new BlockValidationError(block, 'validation excepted'), ex as Error)\n }\n return errors\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type {\n Payload,\n Schema,\n WithHashStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { HydratedBoundWitnessValidationFunction, HydratedBoundWitnessWithHashStorageMeta } from '@xyo-network/xl1-protocol'\nimport { HydratedBoundWitnessValidationError } from '@xyo-network/xl1-protocol'\n\nfunction getPayloadsFromPayloadArray(payloads: WithHashStorageMeta<Payload>[], hashes: Hash[]): (WithHashStorageMeta<Payload> | undefined)[] {\n return hashes.map(hash => payloads.find(payload => payload._hash === hash || payload._dataHash === hash))\n}\n\nexport const BoundWitnessReferencesValidator\n= <T extends BoundWitness = BoundWitness>(allowedSchemas?: Schema[]): HydratedBoundWitnessValidationFunction<T> => (\n [bw, payloadSet]: HydratedBoundWitnessWithHashStorageMeta<T>,\n): Promisable<(HydratedBoundWitnessValidationError | Error)[]> => {\n const errors: (HydratedBoundWitnessValidationError | Error)[] = []\n try {\n const payloads = getPayloadsFromPayloadArray(payloadSet, bw.payload_hashes)\n if (payloads.length !== bw.payload_hashes.length) {\n errors.push(new HydratedBoundWitnessValidationError([bw, payloadSet], 'unable to locate payloads'))\n }\n\n // check if payloads are valid and if their schemas match the declared schemas\n for (let payload of payloads) {\n if (isAnyPayload(payload)) {\n const payloadHashIndex = bw.payload_hashes.indexOf(payload._hash)\n const payloadDataHashIndex = bw.payload_hashes.indexOf(payload._dataHash)\n const payloadIndex = Math.max(payloadHashIndex, payloadDataHashIndex)\n if (payloadIndex === -1) {\n errors.push(new HydratedBoundWitnessValidationError([bw, payloadSet], 'payload hash not found'))\n }\n\n const declaredSchema = bw.payload_schemas[payloadIndex]\n if (declaredSchema !== payload.schema) {\n errors.push(new HydratedBoundWitnessValidationError([bw, payloadSet], 'mismatched schema'))\n }\n\n if (allowedSchemas && !allowedSchemas.includes(payload.schema)) {\n errors.push(new HydratedBoundWitnessValidationError([bw, payloadSet], `disallowed schema [${payload.schema}]`))\n }\n } else {\n errors.push(new HydratedBoundWitnessValidationError([bw, payloadSet], 'invalid payload'))\n }\n }\n } catch (ex) {\n errors.push(new HydratedBoundWitnessValidationError([bw, payloadSet], 'validation excepted'), ex as Error)\n }\n return errors\n}\n","import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport type { Address } from '@xylabs/hex'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport type { BoundWitnessValidationFunction } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BoundWitnessSignaturesValidator: BoundWitnessValidationFunction = async (\n bw: BoundWitness,\n) => {\n const errors: (BoundWitnessValidationError | Error)[] = []\n try {\n const dataHash = await BoundWitnessBuilder.dataHash(bw)\n const results: [Address, (Error | BoundWitnessValidationError)[]][] = await Promise.all(bw.addresses.map(async (address, index) => {\n return [address, await BoundWitnessValidator.validateSignature(toArrayBuffer(dataHash), toArrayBuffer(address), toArrayBuffer(bw.$signatures[index]))]\n }))\n for (const [, bwErrors] of results) {\n errors.push(...bwErrors)\n }\n } catch (ex) {\n errors.push(new BoundWitnessValidationError(bw, 'validation excepted'), ex as Error)\n }\n return errors\n}\n","import {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction, isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: (BlockValidationError | Error)[] = []\n try {\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new BlockValidationError(block, `payload schema not allowed in block: ${schema}`))\n }\n }\n } catch (e) {\n errors.push(new BlockValidationError(block, `Failed BlockAllowedPayloadSchemasValidator: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { Address, Hash } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n chainId?: Address,\n) => {\n const errors: (BlockValidationError | Error)[] = []\n try {\n if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {\n errors.push(new BlockValidationError(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(block, `Duplicate Transaction Hashes: ${txHashes}`))\n }\n } catch (e) {\n errors.push(new BlockValidationError(block, `Failed BlockFieldsValidator: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import { BlockBoundWitnessWithStorageMetaJsonSchema } from '@xyo-network/chain-schema'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => async (\n block: BlockBoundWitness,\n) => {\n const errors: (BlockValidationError | Error)[] = []\n try {\n const ajv = new Ajv({ allErrors: true, strict: true })\n // see if you can export the super set\n const validate = ajv.compile(jsonSchema)\n await validate(block)\n if ((validate.errors ?? []).length > 0) {\n const error = new BlockValidationError(block, 'failed JSON schema validation: ')\n errors.push(error, ...validate.errors?.map(e => new Error(` ${e.instancePath} ${e.message ?? ''}`)) ?? [])\n }\n } catch (e) {\n errors.push(new BlockValidationError(block, `Failed BlockJsonSchemaValidator: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import { isHash } from '@xylabs/hex'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: (BlockValidationError | Error)[] = []\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, '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, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError(block, 'invalid block number'))\n }\n } catch (e) {\n errors.push(new BlockValidationError(block, `Failed BlockPreviousHashValidator: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { HydratedBlock, HydratedBlockValidationFunction } from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateBlock } from '../block/index.ts'\nimport { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock: HydratedBlockValidationFunction = async (\n hydratedBlock: HydratedBlock,\n chainId?: Address,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n): Promise<(HydratedBlockValidationError | Error)[]> => {\n const errors: Error[] = []\n try {\n errors.push(...await validateBlock(hydratedBlock[0], chainId))\n const validators: HydratedBlockValidationFunction[] = [\n BoundWitnessReferencesValidator(),\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat())\n } catch (e) {\n errors.push(new HydratedBlockValidationError(hydratedBlock, `Failed validateHydratedBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n HydratedBlock,\n HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/validatePayloadInBlock.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n [block, payloads]: HydratedBlock,\n) => {\n const errors: (HydratedBlockValidationError | Error)[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashStorageMeta<Payload>>> = {}\n for (const payload of payloads) {\n payloadMap[payload._hash] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const hash = block.payload_hashes[i]\n const schema = block.payload_schemas[i]\n const payload = payloadMap[hash]\n if (payload) {\n errors.push(...await validatePayloadInBlock(payload, [block, payloads]))\n delete remainingPayloads[hash]\n } else {\n errors.push(new HydratedBlockValidationError([block, payloads], `missing payload ${hash} ${schema}`))\n }\n }\n\n if (Object.keys(remainingPayloads).length > 0) {\n errors.push(new HydratedBlockValidationError([block, payloads], `extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n } catch (e) {\n errors.push(new HydratedBlockValidationError([block, payloads], `Failed PayloadsInBlockValidator: ${e instanceof Error ? e.message : String(e)}`))\n }\n\n return errors\n}\n","import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { SchemaSchema } from '@xyo-network/schema-payload-plugin'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport {\n ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [HashSchema]: validateHashInBlock,\n [TransferSchema]: validateTransferInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [BoundWitnessSchema]: validateTransactionInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<(InBlockPayloadValidationError | Error)[]> => {\n const errors: (InBlockPayloadValidationError | Error)[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...await validator(payload, block))\n } else {\n errors.push(new InBlockPayloadValidationError(block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(block, payload, `Failed validatePayloadInBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport const isElevatedFromBlock = (payload: WithStorageMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { transactionsFromHydratedBlock } from '@xyo-network/chain-protocol'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n): Promisable<Error[]> => {\n const errors: Error[] = []\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 Error(`Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`))\n }\n } catch (e) {\n errors.push(new Error(`Failed validateElevatedFromBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { transactionsFromHydratedBlock } from '@xyo-network/chain-protocol'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n): Promisable<Error[]> => {\n const errors: Error[] = []\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 Error('Transaction does not include payload'))\n }\n } else {\n errors.push(new Error('No Transactions in block'))\n }\n } catch (e) {\n errors.push(new Error(`Failed validateElevatedFromTransaction: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport { BoundWitnessSignaturesValidator } from '../../boundwitness/index.ts'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n payload,\n _block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {\n errors.push(...await BoundWitnessSignaturesValidator(payload))\n } else {\n errors.push(new Error('Payload failed isTransactionBoundWitness or isStorageMeta'))\n }\n } catch (e) {\n errors.push(new Error(`Failed validateTransactionInBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { IdentityFunction } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n payload: Payload,\n block: HydratedBlock,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isStorageMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...await validateElevatedFromBlock(payload, block))\n } else {\n errors.push(...await validateElevatedFromTransaction(payload, block))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (e) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n//\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<(InBlockPayloadValidationError | Error)[]> => {\n const errors: (InBlockPayloadValidationError | Error)[] = []\n try {\n errors.push(...await validateTypedPayloadInBlock(payload, block, isChainStakeIntent))\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(block, payload, `Failed validateChainStakeIntentInBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<(InBlockPayloadValidationError | Error)[]> => {\n const errors: (InBlockPayloadValidationError | Error)[] = []\n try {\n errors.push(...await validateTypedPayloadInBlock(payload, block, isHashPayload))\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(block, payload, `Failed validateHashInBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<(InBlockPayloadValidationError | Error)[]> => {\n const errors: Error[] = []\n try {\n errors.push(...await validateTypedPayloadInBlock(payload, block, isSchemaPayload))\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(block, payload, `Failed validateSchemaInBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: (InBlockPayloadValidationError | Error)[] = []\n try {\n errors.push(...await validateTypedPayloadInBlock(payload, block, isTransfer))\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(block, payload, `Failed validateTransferInBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type {\n AccountBalanceService, HydratedBlock, HydratedBlockStateValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n hydratedBlock: HydratedBlock,\n chainId: Address,\n services: { accountBalance: AccountBalanceService },\n additionalValidators: HydratedBlockStateValidationFunction[] = [],\n): Promise<(HydratedBlockStateValidationError | Error)[]> => {\n const errors: Error[] = []\n try {\n errors.push(...await validateHydratedBlock(hydratedBlock, chainId))\n const validators: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())\n } catch (e) {\n errors.push(new HydratedBlockStateValidationError(\n chainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { type Address, hexToBigInt } from '@xylabs/hex'\nimport { netBalancesForPayloads } from '@xyo-network/chain-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport type {\n AccountBalanceService, HydratedBlock, HydratedBlockStateValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n block: HydratedBlock,\n chainId: Address,\n services: { accountBalance: AccountBalanceService },\n) => {\n const errors: (HydratedBlockStateValidationError | Error)[] = []\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads(block[1])\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<Address, bigint> = {}\n for (const address of netBalanceAddresses) {\n if (netBalances[address] < 0n) {\n requiredBalances[address] = -netBalances[address]\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(chainId, block, 'Insufficient funds because first block')]\n\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const balance = hexToBigInt(services.accountBalance.getBalance(address))\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedBlockStateValidationError(\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n ))\n }\n }\n } catch (e) {\n errors.push(new HydratedBlockStateValidationError(\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return await Promise.resolve(errors)\n}\n","import type { Address } from '@xylabs/hex'\nimport type { HydratedTransaction, HydratedTransactionValidationFunction } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport {\n TransactionDurationValidator,\n TransactionElevationValidator, TransactionFromValidator, TransactionGasValidator, TransactionJsonSchemaValidator, TransactionProtocolValidator,\n} from './validators/index.ts'\n\nexport async function validateTransaction(\n tx: HydratedTransaction,\n chainId?: Address,\n additionalValidators: HydratedTransactionValidationFunction[] = [],\n) {\n try {\n if (!isTransactionBoundWitness(tx[0])) {\n return [new Error('failed isTransactionBoundWitness identity check')]\n }\n\n const validators: HydratedTransactionValidationFunction[] = [\n TransactionProtocolValidator,\n TransactionJsonSchemaValidator,\n TransactionDurationValidator,\n TransactionFromValidator,\n TransactionGasValidator,\n TransactionElevationValidator,\n ...additionalValidators,\n ]\n return (await Promise.all(validators.map(v => v(tx, chainId)))).flat()\n } catch (e) {\n return [(new Error(`Failed TransactionGasValidator: ${e instanceof Error ? e.message : String(e)}`))]\n }\n}\n","import type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionDurationValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n const { exp, nbf } = tx[0]\n if (nbf < 0) errors.push(new HydratedTransactionValidationError(tx, 'Transaction nbf must be positive'))\n\n if (exp < 0) errors.push(new HydratedTransactionValidationError(tx, 'Transaction exp must be positive'))\n if (exp <= nbf) errors.push(new HydratedTransactionValidationError(tx, 'Transaction exp must greater than nbf'))\n if (exp - nbf > 10_000) errors.push(new HydratedTransactionValidationError(tx, 'Transaction exp must not be too far in the future'))\n } catch (e) {\n errors.push(new HydratedTransactionValidationError(tx, `Failed TransactionDurationValidator: ${e instanceof Error ? e.message : String(e)}`))\n }\n\n return errors\n}\n","import { extractElevatedHashes } from '@xyo-network/chain-protocol'\nimport type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionElevationValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n try {\n extractElevatedHashes(tx)\n } catch {\n errors.push(new HydratedTransactionValidationError(tx, 'Hydrated transaction does not include all script hashes'))\n }\n } catch (e) {\n errors.push(new HydratedTransactionValidationError(tx, `Failed TransactionElevationValidator: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import { asAddress } from '@xylabs/hex'\nimport { addressesContains } from '@xyo-network/boundwitness-validator'\nimport type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionFromValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n const from = asAddress(tx[0].from)\n if (from === undefined)errors.push(new HydratedTransactionValidationError(tx, 'Transaction from is not a valid address'))\n else if (!addressesContains(tx[0], from)) errors.push(new HydratedTransactionValidationError(tx, 'Transaction from address must be listed in addresses'))\n } catch (e) {\n errors.push(new HydratedTransactionValidationError(tx, `Failed TransactionFromValidator: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import { hexToBigInt } from '@xylabs/hex'\nimport type {\n HydratedTransaction,\n HydratedTransactionValidationFunction,\n TransactionBoundWitness, TransactionFeesBigInt, TransactionFeesHex,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n minTransactionFees,\n} from '@xyo-network/xl1-protocol'\n\nexport const TransactionGasValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n if (tx?.[0].fees === undefined) {\n errors.push(new HydratedTransactionValidationError(tx, 'Missing fees'))\n } else {\n const {\n base, gasLimit, gasPrice, priority,\n } = parseFees(tx[0].fees)\n\n if (base === undefined) errors.push(new HydratedTransactionValidationError(\n tx,\n 'fees.base must be defined and a valid number',\n ))\n else if (base < minTransactionFees.base) errors.push(new HydratedTransactionValidationError(\n tx,\n `fees.base must be >= ${minTransactionFees.base}`,\n ))\n\n if (gasLimit === undefined) errors.push(new HydratedTransactionValidationError(tx, 'fees.gasLimit must be defined and a valid number'))\n else if (gasLimit < minTransactionFees.gasLimit) errors.push(new HydratedTransactionValidationError(\n tx,\n `fees.gasLimit must be >= ${minTransactionFees.gasLimit}`,\n ))\n\n if (gasPrice === undefined) errors.push(\n new HydratedTransactionValidationError(tx, 'fees.gasPrice must be defined and a valid number'),\n )\n else if (gasPrice < minTransactionFees.gasPrice) errors.push(new HydratedTransactionValidationError(\n tx,\n `fees.gasPrice must be >= ${minTransactionFees.gasPrice}`,\n ))\n\n if (priority === undefined) errors.push(new HydratedTransactionValidationError(\n tx,\n 'fees.priority must be defined and a valid number',\n ))\n else if (priority < minTransactionFees.priority) errors.push(new HydratedTransactionValidationError(\n tx,\n `fees.priority must be >= ${minTransactionFees.priority}`,\n ))\n }\n } catch (e) {\n errors.push(new HydratedTransactionValidationError(tx, `Failed TransactionGasValidator: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n\nconst parseFees = (fees: TransactionFeesHex): Partial<TransactionFeesBigInt> => {\n const ret: Partial<TransactionFeesBigInt> = {}\n const {\n base, gasLimit, gasPrice, priority,\n } = fees\n if (base !== undefined) ret.base = AttoXL1(hexToBigInt(base))\n if (gasLimit !== undefined) ret.gasLimit = AttoXL1(hexToBigInt(gasLimit))\n if (gasPrice !== undefined) ret.gasPrice = AttoXL1(hexToBigInt(gasPrice))\n if (priority !== undefined) ret.priority = AttoXL1(hexToBigInt(priority))\n return ret\n}\n","import { TransactionBoundWitnessJsonSchema } from '@xyo-network/chain-schema'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\nimport type { ValidateFunction } from 'ajv'\nimport { Ajv } from 'ajv'\n\nconst ajv = new Ajv({ allErrors: true, strict: true })\n\nlet validate: ValidateFunction<TransactionBoundWitness> | undefined\n\nexport const TransactionJsonSchemaValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n if (validate === undefined) validate = ajv.compile(TransactionBoundWitnessJsonSchema)\n // see if you can export the super set\n if (!validate(PayloadBuilder.omitStorageMeta(tx[0]))) {\n const error = new HydratedTransactionValidationError(tx, 'failed JSON schema validation')\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx, 'validation excepted'), ex as Error)\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionProtocolValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = async (\n tx: HydratedTransaction,\n chainId?: Address,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n if (chainId !== undefined && tx[0].chain !== chainId) {\n errors.push(new HydratedTransactionValidationError(tx, 'invalid chain id'))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx, 'validation excepted'), ex as Error)\n }\n return await Promise.resolve(errors)\n}\n"],"mappings":"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","names":["BlockValidationError","isAnyPayload","HydratedBoundWitnessValidationError","getPayloadsFromPayloadArray","payloads","hashes","map","hash","find","payload","_hash","_dataHash","BoundWitnessReferencesValidator","allowedSchemas","bw","payloadSet","errors","payload_hashes","length","push","HydratedBoundWitnessValidationError","isAnyPayload","payloadHashIndex","indexOf","payloadDataHashIndex","payloadIndex","Math","max","declaredSchema","payload_schemas","schema","includes","ex","toArrayBuffer","BoundWitnessBuilder","BoundWitnessValidator","BoundWitnessValidationError","BoundWitnessSignaturesValidator","bw","errors","dataHash","BoundWitnessBuilder","results","Promise","all","addresses","map","address","index","BoundWitnessValidator","validateSignature","toArrayBuffer","$signatures","bwErrors","push","ex","BoundWitnessValidationError","BlockValidationError","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","BlockValidationError","e","Error","message","String","isDefined","BoundWitnessSchema","BlockValidationError","BlockFieldsValidator","block","chainId","errors","isDefined","chain","toLowerCase","push","BlockValidationError","txHashes","i","payload_hashes","length","payload_schemas","BoundWitnessSchema","Set","size","e","Error","message","String","BlockBoundWitnessWithStorageMetaJsonSchema","BlockValidationError","Ajv","BlockJsonSchemaValidator","jsonSchema","BlockBoundWitnessWithStorageMetaJsonSchema","block","errors","ajv","Ajv","allErrors","strict","validate","compile","length","error","BlockValidationError","push","map","e","Error","instancePath","message","String","isHash","BlockValidationError","BlockPreviousHashValidator","block","errors","blockNumber","isHash","previous","push","BlockValidationError","e","Error","message","String","validateBlock","block","chainId","errors","validators","BoundWitnessSignaturesValidator","BlockFieldsValidator","BlockPreviousHashValidator","BlockJsonSchemaValidator","BlockAllowedPayloadSchemasValidator","push","Promise","all","map","validator","flat","ex","BlockValidationError","HydratedBlockValidationError","HydratedBlockValidationError","BoundWitnessSchema","SchemaSchema","ChainStakeIntentSchema","HashSchema","InBlockPayloadValidationError","TransferSchema","isTransactionBoundWitness","isElevatedFromBlock","payload","payloads","txs","filter","p","isTransactionBoundWitness","tx","payload_hashes","includes","_hash","transactionsFromHydratedBlock","validateElevatedFromBlock","payload","block","errors","txs","transactionsFromHydratedBlock","allTxPayloadHashes","Set","flatMap","tx","payload_hashes","has","_hash","push","Error","schema","e","message","String","transactionsFromHydratedBlock","validateElevatedFromTransaction","payload","block","errors","txs","transactionsFromHydratedBlock","length","hashes","flatMap","tx","payload_hashes","includes","_hash","push","Error","e","message","String","isStorageMeta","isTransactionBoundWitness","validateTransactionInBlock","payload","_block","errors","isTransactionBoundWitness","isStorageMeta","push","BoundWitnessSignaturesValidator","Error","e","message","String","isStorageMeta","validateTypedPayloadInBlock","payload","block","identityFunction","errors","isStorageMeta","isElevatedFromBlock","push","validateElevatedFromBlock","validateElevatedFromTransaction","Error","e","message","String","InBlockPayloadValidationError","isChainStakeIntent","validateChainStakeIntentInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isChainStakeIntent","e","InBlockPayloadValidationError","Error","message","String","InBlockPayloadValidationError","isHashPayload","validateHashInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isHashPayload","e","InBlockPayloadValidationError","Error","message","String","isSchemaPayload","InBlockPayloadValidationError","validateSchemaInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isSchemaPayload","e","InBlockPayloadValidationError","Error","message","String","InBlockPayloadValidationError","isTransfer","validateTransferInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isTransfer","e","InBlockPayloadValidationError","Error","message","String","payloadValidators","HashSchema","validateHashInBlock","TransferSchema","validateTransferInBlock","SchemaSchema","validateSchemaInBlock","ChainStakeIntentSchema","validateChainStakeIntentInBlock","BoundWitnessSchema","validateTransactionInBlock","validatePayloadInBlock","payload","block","errors","validator","schema","push","InBlockPayloadValidationError","e","Error","message","String","PayloadsInBlockValidator","block","payloads","errors","payloadMap","payload","_hash","remainingPayloads","i","payload_hashes","length","hash","schema","payload_schemas","push","validatePayloadInBlock","HydratedBlockValidationError","Object","keys","join","e","Error","message","String","validateHydratedBlock","hydratedBlock","chainId","additionalValidators","errors","push","validateBlock","validators","BoundWitnessReferencesValidator","PayloadsInBlockValidator","Promise","all","map","v","flat","e","HydratedBlockValidationError","Error","message","String","HydratedBlockStateValidationError","hexToBigInt","netBalancesForPayloads","XYO_ZERO_ADDRESS","HydratedBlockStateValidationError","RequiredBalanceBlockStateValidator","block","chainId","services","errors","netBalances","netBalancesForPayloads","netBalanceAddresses","Object","keys","requiredBalances","address","previous","HydratedBlockStateValidationError","reqBalance","entries","balance","hexToBigInt","accountBalance","getBalance","XYO_ZERO_ADDRESS","push","e","Error","message","String","Promise","resolve","validateHydratedBlockState","hydratedBlock","chainId","services","additionalValidators","errors","push","validateHydratedBlock","validators","RequiredBalanceBlockStateValidator","Promise","all","map","v","flat","e","HydratedBlockStateValidationError","Error","message","String","isTransactionBoundWitness","HydratedTransactionValidationError","TransactionDurationValidator","tx","errors","exp","nbf","push","HydratedTransactionValidationError","e","Error","message","String","extractElevatedHashes","HydratedTransactionValidationError","TransactionElevationValidator","tx","errors","extractElevatedHashes","push","HydratedTransactionValidationError","e","Error","message","String","asAddress","addressesContains","HydratedTransactionValidationError","TransactionFromValidator","tx","errors","from","asAddress","undefined","push","HydratedTransactionValidationError","addressesContains","e","Error","message","String","hexToBigInt","AttoXL1","HydratedTransactionValidationError","minTransactionFees","TransactionGasValidator","tx","errors","fees","undefined","push","HydratedTransactionValidationError","base","gasLimit","gasPrice","priority","parseFees","minTransactionFees","e","Error","message","String","ret","AttoXL1","hexToBigInt","TransactionBoundWitnessJsonSchema","PayloadBuilder","HydratedTransactionValidationError","Ajv","ajv","Ajv","allErrors","strict","validate","TransactionJsonSchemaValidator","tx","errors","undefined","compile","TransactionBoundWitnessJsonSchema","PayloadBuilder","omitStorageMeta","error","HydratedTransactionValidationError","cause","push","ex","HydratedTransactionValidationError","TransactionProtocolValidator","tx","chainId","errors","undefined","chain","push","HydratedTransactionValidationError","ex","Promise","resolve","validateTransaction","tx","chainId","additionalValidators","isTransactionBoundWitness","Error","validators","TransactionProtocolValidator","TransactionJsonSchemaValidator","TransactionDurationValidator","TransactionFromValidator","TransactionGasValidator","TransactionElevationValidator","Promise","all","map","v","flat","e","message","String"]}
1
+ {"version":3,"sources":["../../src/block/validateBlock.ts","../../src/boundwitness/validators/BoundWitnessReferences.ts","../../src/boundwitness/validators/BoundWitnessSignatures.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/Fields.ts","../../src/block/validators/JsonSchema.ts","../../src/block/validators/PreviousHash.ts","../../src/hydratedBlock/validateHydratedBlock.ts","../../src/hydratedBlock/validators/Payloads.ts","../../src/elevatedPayload/validatePayloadInBlock.ts","../../src/elevatedPayload/lib/isElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromTransaction.ts","../../src/elevatedPayload/lib/validateTransactionInBlock.ts","../../src/elevatedPayload/lib/validateTypedPayloadInBlock.ts","../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateHashInBlock.ts","../../src/elevatedPayload/payloads/validateSchemaInBlock.ts","../../src/elevatedPayload/payloads/validateTransferInBlock.ts","../../src/hydratedBlockState/validateHydratedBlockState.ts","../../src/hydratedBlockState/validators/RequiredBalance.ts","../../src/transaction/validateTransaction.ts","../../src/transaction/validators/TransactionDurationValidator.ts","../../src/transaction/validators/TransactionElevationValidator.ts","../../src/transaction/validators/TransactionFromValidator.ts","../../src/transaction/validators/TransactionGasValidator.ts","../../src/transaction/validators/TransactionJsonSchemaValidator.ts","../../src/transaction/validators/TransactionProtocolValidator.ts"],"sourcesContent":["import { type Address, ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { BoundWitnessSignaturesValidator } from '../boundwitness/index.ts'\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockJsonSchemaValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock: BlockValidatorFunction = async (\n block: BlockBoundWitness,\n chainId?: Address,\n): Promise<(BlockValidationError | Error)[]> => {\n const errors: Error[] = []\n try {\n const validators: BlockValidatorFunction[] = [\n BoundWitnessSignaturesValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockJsonSchemaValidator(),\n BlockAllowedPayloadSchemasValidator,\n ]\n errors.push(...(await Promise.all(\n validators.map(validator => validator(block, chainId)),\n )).flat())\n } catch (ex) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted'), ex as Error)\n }\n return errors\n}\n","import { type Hash, ZERO_HASH } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type {\n Payload,\n Schema,\n WithHashStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { HydratedBoundWitnessValidationFunction, HydratedBoundWitnessWithHashStorageMeta } from '@xyo-network/xl1-protocol'\nimport { HydratedBoundWitnessValidationError } from '@xyo-network/xl1-protocol'\n\nfunction getPayloadsFromPayloadArray(payloads: WithHashStorageMeta<Payload>[], hashes: Hash[]): (WithHashStorageMeta<Payload> | undefined)[] {\n return hashes.map(hash => payloads.find(payload => payload._hash === hash || payload._dataHash === hash))\n}\n\nexport const BoundWitnessReferencesValidator\n// eslint-disable-next-line complexity\n= <T extends BoundWitness = BoundWitness>(allowedSchemas?: Schema[]): HydratedBoundWitnessValidationFunction<T> => (\n [bw, payloadSet]: HydratedBoundWitnessWithHashStorageMeta<T>,\n): Promisable<(HydratedBoundWitnessValidationError | Error)[]> => {\n const errors: (HydratedBoundWitnessValidationError | Error)[] = []\n try {\n const payloads = getPayloadsFromPayloadArray(payloadSet, bw.payload_hashes)\n if (payloads.length !== bw.payload_hashes.length) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'unable to locate payloads'))\n }\n\n // check if payloads are valid and if their schemas match the declared schemas\n for (let payload of payloads) {\n if (isAnyPayload(payload)) {\n const payloadHashIndex = bw.payload_hashes.indexOf(payload._hash)\n const payloadDataHashIndex = bw.payload_hashes.indexOf(payload._dataHash)\n const payloadIndex = Math.max(payloadHashIndex, payloadDataHashIndex)\n if (payloadIndex === -1) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'payload hash not found'))\n }\n\n const declaredSchema = bw.payload_schemas[payloadIndex]\n if (declaredSchema !== payload.schema) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'mismatched schema'))\n }\n\n if (allowedSchemas && !allowedSchemas.includes(payload.schema)) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], `disallowed schema [${payload.schema}]`))\n }\n } else {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'invalid payload'))\n }\n }\n } catch (ex) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'validation excepted'), ex as Error)\n }\n return errors\n}\n","import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport { type Address, ZERO_HASH } from '@xylabs/hex'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BoundWitnessValidationFunction } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BoundWitnessSignaturesValidator: BoundWitnessValidationFunction = async (\n bw: BoundWitness,\n) => {\n const errors: (BoundWitnessValidationError | Error)[] = []\n try {\n const dataHash = await BoundWitnessBuilder.dataHash(bw)\n const results: [Address, (Error | BoundWitnessValidationError)[]][] = await Promise.all(bw.addresses.map(async (address, index) => {\n return [address, await BoundWitnessValidator.validateSignature(toArrayBuffer(dataHash), toArrayBuffer(address), toArrayBuffer(bw.$signatures[index]))]\n }))\n for (const [, bwErrors] of results) {\n errors.push(...bwErrors)\n }\n } catch (ex) {\n errors.push(new BoundWitnessValidationError((bw as WithStorageMeta<BoundWitness>)?._hash ?? ZERO_HASH, bw, 'validation excepted'), ex as Error)\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction, isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: (BlockValidationError | Error)[] = []\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 (e) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockAllowedPayloadSchemasValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import {\n type Address, type Hash, ZERO_HASH,\n} from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n chainId?: Address,\n) => {\n const errors: (BlockValidationError | Error)[] = []\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 (e) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockFieldsValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema } from '@xyo-network/chain-schema'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => async (\n block: BlockBoundWitness,\n) => {\n const errors: (BlockValidationError | Error)[] = []\n try {\n const ajv = new Ajv({ allErrors: true, strict: true })\n // see if you can export the super set\n const validate = ajv.compile(jsonSchema)\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: ${toJsonString(block, 10)} ${toJsonString(validate.errors, 10)}`,\n )\n errors.push(error, ...validate.errors?.map(e => new Error(` ${e.instancePath} ${e.message ?? ''}`)) ?? [])\n }\n } catch (e) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockJsonSchemaValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { isHash, ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: (BlockValidationError | Error)[] = []\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 (e) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { type Address, ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, HydratedBlockValidationFunction } from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateBlock } from '../block/index.ts'\nimport { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock: HydratedBlockValidationFunction = async (\n hydratedBlock: HydratedBlock,\n chainId?: Address,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n): Promise<(HydratedBlockValidationError | Error)[]> => {\n const errors: Error[] = []\n try {\n errors.push(...await validateBlock(hydratedBlock[0], chainId))\n const validators: HydratedBlockValidationFunction[] = [\n BoundWitnessReferencesValidator(),\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat())\n } catch (e) {\n errors.push(new HydratedBlockValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed validateHydratedBlock: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { type Hash, ZERO_HASH } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n HydratedBlock,\n HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/validatePayloadInBlock.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n [block, payloads]: HydratedBlock,\n) => {\n const errors: (HydratedBlockValidationError | Error)[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashStorageMeta<Payload>>> = {}\n for (const payload of payloads) {\n payloadMap[payload._hash] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const hash = block.payload_hashes[i]\n const schema = block.payload_schemas[i]\n const payload = payloadMap[hash]\n if (payload) {\n errors.push(...await validatePayloadInBlock(payload, [block, payloads]))\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 (e) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `Failed PayloadsInBlockValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { SchemaSchema } from '@xyo-network/schema-payload-plugin'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport {\n ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [HashSchema]: validateHashInBlock,\n [TransferSchema]: validateTransferInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [BoundWitnessSchema]: validateTransactionInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<(InBlockPayloadValidationError | Error)[]> => {\n const errors: (InBlockPayloadValidationError | Error)[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...await validator(payload, block))\n } else {\n errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validatePayloadInBlock: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport const isElevatedFromBlock = (payload: WithStorageMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { transactionsFromHydratedBlock } from '@xyo-network/chain-protocol'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n): Promisable<Error[]> => {\n const errors: Error[] = []\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 Error(`Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`))\n }\n } catch (e) {\n errors.push(new Error(`Failed validateElevatedFromBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { transactionsFromHydratedBlock } from '@xyo-network/chain-protocol'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n): Promisable<Error[]> => {\n const errors: Error[] = []\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 Error('Transaction does not include payload'))\n }\n } else {\n errors.push(new Error('No Transactions in block'))\n }\n } catch (e) {\n errors.push(new Error(`Failed validateElevatedFromTransaction: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport { BoundWitnessSignaturesValidator } from '../../boundwitness/index.ts'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n payload,\n _block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {\n errors.push(...await BoundWitnessSignaturesValidator(payload))\n } else {\n errors.push(new Error('Payload failed isTransactionBoundWitness or isStorageMeta'))\n }\n } catch (e) {\n errors.push(new Error(`Failed validateTransactionInBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n","import type { IdentityFunction } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n payload: Payload,\n block: HydratedBlock,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isStorageMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...await validateElevatedFromBlock(payload, block))\n } else {\n errors.push(...await validateElevatedFromTransaction(payload, block))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (e) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${e instanceof Error ? e.message : String(e)}`))\n }\n return errors\n}\n//\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<(InBlockPayloadValidationError | Error)[]> => {\n const errors: (InBlockPayloadValidationError | Error)[] = []\n try {\n errors.push(...await validateTypedPayloadInBlock(payload, block, isChainStakeIntent))\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateChainStakeIntentInBlock: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<(InBlockPayloadValidationError | Error)[]> => {\n const errors: (InBlockPayloadValidationError | Error)[] = []\n try {\n errors.push(...await validateTypedPayloadInBlock(payload, block, isHashPayload))\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateHashInBlock: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<(InBlockPayloadValidationError | Error)[]> => {\n const errors: Error[] = []\n try {\n errors.push(...await validateTypedPayloadInBlock(payload, block, isSchemaPayload))\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateSchemaInBlock: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: (InBlockPayloadValidationError | Error)[] = []\n try {\n errors.push(...await validateTypedPayloadInBlock(payload, block, isTransfer))\n } catch (e) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTransferInBlock: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { type Address, ZERO_HASH } from '@xylabs/hex'\nimport type {\n AccountBalanceService, HydratedBlock, HydratedBlockStateValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n hydratedBlock: HydratedBlock,\n chainId: Address,\n services: { accountBalance: AccountBalanceService },\n additionalValidators: HydratedBlockStateValidationFunction[] = [],\n): Promise<(HydratedBlockStateValidationError | Error)[]> => {\n const errors: Error[] = []\n try {\n errors.push(...await validateHydratedBlock(hydratedBlock, chainId))\n const validators: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())\n } catch (e) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import {\n type Address, hexToBigInt, ZERO_HASH,\n} from '@xylabs/hex'\nimport { netBalancesForPayloads } from '@xyo-network/chain-protocol'\nimport { XYO_ZERO_ADDRESS } from '@xyo-network/chain-utils'\nimport type {\n AccountBalanceService, HydratedBlock, HydratedBlockStateValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n block: HydratedBlock,\n chainId: Address,\n services: { accountBalance: AccountBalanceService },\n) => {\n const errors: (HydratedBlockStateValidationError | Error)[] = []\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads(block[1])\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<Address, bigint> = {}\n for (const address of netBalanceAddresses) {\n if (netBalances[address] < 0n) {\n requiredBalances[address] = -netBalances[address]\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n 'Insufficient funds because first block',\n )]\n\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const balance = hexToBigInt(services.accountBalance.getBalance(address))\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n ))\n }\n }\n } catch (e) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return await Promise.resolve(errors)\n}\n","import type { Address } from '@xylabs/hex'\nimport type { HydratedTransaction, HydratedTransactionValidationFunction } from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport {\n TransactionDurationValidator,\n TransactionElevationValidator, TransactionFromValidator, TransactionGasValidator, TransactionJsonSchemaValidator, TransactionProtocolValidator,\n} from './validators/index.ts'\n\nexport async function validateTransaction(\n tx: HydratedTransaction,\n chainId?: Address,\n additionalValidators: HydratedTransactionValidationFunction[] = [],\n) {\n try {\n if (!isTransactionBoundWitness(tx[0])) {\n return [new Error('failed isTransactionBoundWitness identity check')]\n }\n\n const validators: HydratedTransactionValidationFunction[] = [\n TransactionProtocolValidator,\n TransactionJsonSchemaValidator,\n TransactionDurationValidator,\n TransactionFromValidator,\n TransactionGasValidator,\n TransactionElevationValidator,\n ...additionalValidators,\n ]\n return (await Promise.all(validators.map(v => v(tx, chainId)))).flat()\n } catch (e) {\n return [(new Error(`Failed TransactionGasValidator: ${e instanceof Error ? e.message : String(e)}`))]\n }\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\n// eslint-disable-next-line complexity\nexport const TransactionDurationValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n const { exp, nbf } = tx[0]\n if (nbf < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction nbf must be positive'))\n\n if (exp < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must be positive'))\n if (exp <= nbf) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must greater than nbf'))\n if (exp - nbf > 10_000) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction exp must not be too far in the future',\n ))\n } catch (e) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionDurationValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { extractElevatedHashes } from '@xyo-network/chain-protocol'\nimport type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionElevationValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n try {\n extractElevatedHashes(tx)\n } catch {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Hydrated transaction does not include all script hashes'))\n }\n } catch (e) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionElevationValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { asAddress, ZERO_HASH } from '@xylabs/hex'\nimport { addressesContains } from '@xyo-network/boundwitness-validator'\nimport type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionFromValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n const from = asAddress(tx[0].from)\n if (from === undefined)errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from is not a valid address',\n ))\n else if (!addressesContains(tx[0], from)) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from address must be listed in addresses',\n ))\n } catch (e) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionFromValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n","import { hexToBigInt, ZERO_HASH } from '@xylabs/hex'\nimport type {\n HydratedTransaction,\n HydratedTransactionValidationFunction,\n TransactionBoundWitness, TransactionFeesBigInt, TransactionFeesHex,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n minTransactionFees,\n} from '@xyo-network/xl1-protocol'\n\n// eslint-disable-next-line complexity\nexport const TransactionGasValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n if (tx?.[0].fees === undefined) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Missing fees',\n ))\n } else {\n const {\n base, gasLimit, gasPrice, priority,\n } = parseFees(tx[0].fees)\n\n if (base === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.base must be defined and a valid number',\n ))\n else if (base < minTransactionFees.base) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.base must be >= ${minTransactionFees.base}`,\n ))\n\n if (gasLimit === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasLimit must be defined and a valid number',\n ))\n else if (gasLimit < minTransactionFees.gasLimit) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit must be >= ${minTransactionFees.gasLimit}`,\n ))\n\n if (gasPrice === undefined) errors.push(\n new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasPrice must be defined and a valid number',\n ),\n )\n else if (gasPrice < minTransactionFees.gasPrice) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasPrice must be >= ${minTransactionFees.gasPrice}`,\n ))\n\n if (priority === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.priority must be defined and a valid number',\n ))\n else if (priority < minTransactionFees.priority) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.priority must be >= ${minTransactionFees.priority}`,\n ))\n }\n } catch (e) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionGasValidator: ${e instanceof Error ? e.message : String(e)}`,\n ))\n }\n return errors\n}\n\nconst parseFees = (fees: TransactionFeesHex): Partial<TransactionFeesBigInt> => {\n const ret: Partial<TransactionFeesBigInt> = {}\n const {\n base, gasLimit, gasPrice, priority,\n } = fees\n if (base !== undefined) ret.base = AttoXL1(hexToBigInt(base))\n if (gasLimit !== undefined) ret.gasLimit = AttoXL1(hexToBigInt(gasLimit))\n if (gasPrice !== undefined) ret.gasPrice = AttoXL1(hexToBigInt(gasPrice))\n if (priority !== undefined) ret.priority = AttoXL1(hexToBigInt(priority))\n return ret\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { toJsonString } from '@xylabs/object'\nimport { TransactionBoundWitnessJsonSchema } from '@xyo-network/chain-schema'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\nimport type { ValidateFunction } from 'ajv'\nimport { Ajv } from 'ajv'\n\nconst ajv = new Ajv({ allErrors: true, strict: true })\n\nlet validate: ValidateFunction<TransactionBoundWitness> | undefined\n\nexport const TransactionJsonSchemaValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (\n tx: HydratedTransaction,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n if (validate === undefined) validate = ajv.compile(TransactionBoundWitnessJsonSchema)\n // see if you can export the super set\n if (!validate(PayloadBuilder.omitStorageMeta(tx[0]))) {\n const error = new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `failed JSON schema validation: ${toJsonString(tx, 10)} ${toJsonString(validate.errors, 10)}`,\n )\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted'), ex as Error)\n }\n return errors\n}\n","import { type Address, ZERO_HASH } from '@xylabs/hex'\nimport type {\n HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionProtocolValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = async (\n tx: HydratedTransaction,\n chainId?: Address,\n) => {\n const errors: (HydratedTransactionValidationError | Error)[] = []\n try {\n if (chainId !== undefined && tx[0].chain !== chainId) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'invalid chain id'))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted'), ex as Error)\n }\n return await Promise.resolve(errors)\n}\n"],"mappings":"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","names":["ZERO_HASH","BlockValidationError","ZERO_HASH","isAnyPayload","HydratedBoundWitnessValidationError","getPayloadsFromPayloadArray","payloads","hashes","map","hash","find","payload","_hash","_dataHash","BoundWitnessReferencesValidator","allowedSchemas","bw","payloadSet","errors","payload_hashes","length","push","HydratedBoundWitnessValidationError","ZERO_HASH","isAnyPayload","payloadHashIndex","indexOf","payloadDataHashIndex","payloadIndex","Math","max","declaredSchema","payload_schemas","schema","includes","ex","toArrayBuffer","ZERO_HASH","BoundWitnessBuilder","BoundWitnessValidator","BoundWitnessValidationError","BoundWitnessSignaturesValidator","bw","errors","dataHash","BoundWitnessBuilder","results","Promise","all","addresses","map","address","index","BoundWitnessValidator","validateSignature","toArrayBuffer","$signatures","bwErrors","push","ex","BoundWitnessValidationError","_hash","ZERO_HASH","ZERO_HASH","BlockValidationError","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","BlockValidationError","_hash","ZERO_HASH","e","Error","message","String","ZERO_HASH","isDefined","BoundWitnessSchema","BlockValidationError","BlockFieldsValidator","block","chainId","errors","isDefined","chain","toLowerCase","push","BlockValidationError","_hash","ZERO_HASH","txHashes","i","payload_hashes","length","payload_schemas","BoundWitnessSchema","Set","size","e","Error","message","String","ZERO_HASH","toJsonString","BlockBoundWitnessWithStorageMetaJsonSchema","BlockValidationError","Ajv","BlockJsonSchemaValidator","jsonSchema","BlockBoundWitnessWithStorageMetaJsonSchema","block","errors","ajv","Ajv","allErrors","strict","validate","compile","length","error","BlockValidationError","_hash","ZERO_HASH","toJsonString","push","map","e","Error","instancePath","message","String","isHash","ZERO_HASH","BlockValidationError","BlockPreviousHashValidator","block","errors","blockNumber","isHash","previous","push","BlockValidationError","_hash","ZERO_HASH","e","Error","message","String","validateBlock","block","chainId","errors","validators","BoundWitnessSignaturesValidator","BlockFieldsValidator","BlockPreviousHashValidator","BlockJsonSchemaValidator","BlockAllowedPayloadSchemasValidator","push","Promise","all","map","validator","flat","ex","BlockValidationError","_hash","ZERO_HASH","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","BoundWitnessSchema","SchemaSchema","ChainStakeIntentSchema","HashSchema","InBlockPayloadValidationError","TransferSchema","isTransactionBoundWitness","isElevatedFromBlock","payload","payloads","txs","filter","p","isTransactionBoundWitness","tx","payload_hashes","includes","_hash","transactionsFromHydratedBlock","validateElevatedFromBlock","payload","block","errors","txs","transactionsFromHydratedBlock","allTxPayloadHashes","Set","flatMap","tx","payload_hashes","has","_hash","push","Error","schema","e","message","String","transactionsFromHydratedBlock","validateElevatedFromTransaction","payload","block","errors","txs","transactionsFromHydratedBlock","length","hashes","flatMap","tx","payload_hashes","includes","_hash","push","Error","e","message","String","isStorageMeta","isTransactionBoundWitness","validateTransactionInBlock","payload","_block","errors","isTransactionBoundWitness","isStorageMeta","push","BoundWitnessSignaturesValidator","Error","e","message","String","isStorageMeta","validateTypedPayloadInBlock","payload","block","identityFunction","errors","isStorageMeta","isElevatedFromBlock","push","validateElevatedFromBlock","validateElevatedFromTransaction","Error","e","message","String","ZERO_HASH","InBlockPayloadValidationError","isChainStakeIntent","validateChainStakeIntentInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isChainStakeIntent","e","InBlockPayloadValidationError","_hash","ZERO_HASH","Error","message","String","ZERO_HASH","InBlockPayloadValidationError","isHashPayload","validateHashInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isHashPayload","e","InBlockPayloadValidationError","_hash","ZERO_HASH","Error","message","String","ZERO_HASH","isSchemaPayload","InBlockPayloadValidationError","validateSchemaInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isSchemaPayload","e","InBlockPayloadValidationError","_hash","ZERO_HASH","Error","message","String","ZERO_HASH","InBlockPayloadValidationError","isTransfer","validateTransferInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isTransfer","e","InBlockPayloadValidationError","_hash","ZERO_HASH","Error","message","String","payloadValidators","HashSchema","validateHashInBlock","TransferSchema","validateTransferInBlock","SchemaSchema","validateSchemaInBlock","ChainStakeIntentSchema","validateChainStakeIntentInBlock","BoundWitnessSchema","validateTransactionInBlock","validatePayloadInBlock","payload","block","errors","validator","schema","push","InBlockPayloadValidationError","_hash","ZERO_HASH","e","Error","message","String","PayloadsInBlockValidator","block","payloads","errors","payloadMap","payload","_hash","remainingPayloads","i","payload_hashes","length","hash","schema","payload_schemas","push","validatePayloadInBlock","HydratedBlockValidationError","ZERO_HASH","Object","keys","join","e","Error","message","String","validateHydratedBlock","hydratedBlock","chainId","additionalValidators","errors","push","validateBlock","validators","BoundWitnessReferencesValidator","PayloadsInBlockValidator","Promise","all","map","v","flat","e","HydratedBlockValidationError","_hash","ZERO_HASH","Error","message","String","ZERO_HASH","HydratedBlockStateValidationError","hexToBigInt","ZERO_HASH","netBalancesForPayloads","XYO_ZERO_ADDRESS","HydratedBlockStateValidationError","RequiredBalanceBlockStateValidator","block","chainId","services","errors","netBalances","netBalancesForPayloads","netBalanceAddresses","Object","keys","requiredBalances","address","previous","HydratedBlockStateValidationError","_hash","ZERO_HASH","reqBalance","entries","balance","hexToBigInt","accountBalance","getBalance","XYO_ZERO_ADDRESS","push","e","Error","message","String","Promise","resolve","validateHydratedBlockState","hydratedBlock","chainId","services","additionalValidators","errors","push","validateHydratedBlock","validators","RequiredBalanceBlockStateValidator","Promise","all","map","v","flat","e","HydratedBlockStateValidationError","_hash","ZERO_HASH","Error","message","String","isTransactionBoundWitness","ZERO_HASH","HydratedTransactionValidationError","TransactionDurationValidator","tx","errors","exp","nbf","push","HydratedTransactionValidationError","_hash","ZERO_HASH","e","Error","message","String","ZERO_HASH","extractElevatedHashes","HydratedTransactionValidationError","TransactionElevationValidator","tx","errors","extractElevatedHashes","push","HydratedTransactionValidationError","_hash","ZERO_HASH","e","Error","message","String","asAddress","ZERO_HASH","addressesContains","HydratedTransactionValidationError","TransactionFromValidator","tx","errors","from","asAddress","undefined","push","HydratedTransactionValidationError","_hash","ZERO_HASH","addressesContains","e","Error","message","String","hexToBigInt","ZERO_HASH","AttoXL1","HydratedTransactionValidationError","minTransactionFees","TransactionGasValidator","tx","errors","fees","undefined","push","HydratedTransactionValidationError","_hash","ZERO_HASH","base","gasLimit","gasPrice","priority","parseFees","minTransactionFees","e","Error","message","String","ret","AttoXL1","hexToBigInt","ZERO_HASH","toJsonString","TransactionBoundWitnessJsonSchema","PayloadBuilder","HydratedTransactionValidationError","Ajv","ajv","Ajv","allErrors","strict","validate","TransactionJsonSchemaValidator","tx","errors","undefined","compile","TransactionBoundWitnessJsonSchema","PayloadBuilder","omitStorageMeta","error","HydratedTransactionValidationError","_hash","ZERO_HASH","toJsonString","cause","push","ex","ZERO_HASH","HydratedTransactionValidationError","TransactionProtocolValidator","tx","chainId","errors","undefined","chain","push","HydratedTransactionValidationError","_hash","ZERO_HASH","ex","Promise","resolve","validateTransaction","tx","chainId","additionalValidators","isTransactionBoundWitness","Error","validators","TransactionProtocolValidator","TransactionJsonSchemaValidator","TransactionDurationValidator","TransactionFromValidator","TransactionGasValidator","TransactionElevationValidator","Promise","all","map","v","flat","e","message","String"]}
@@ -1 +1 @@
1
- {"version":3,"file":"validateBlock.d.ts","sourceRoot":"","sources":["../../../src/block/validateBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAS1F,eAAO,MAAM,aAAa,EAAE,sBAoB3B,CAAA"}
1
+ {"version":3,"file":"validateBlock.d.ts","sourceRoot":"","sources":["../../../src/block/validateBlock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAqB,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAS1F,eAAO,MAAM,aAAa,EAAE,sBAoB3B,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"AllowedPayloadSchemas.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/AllowedPayloadSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EACyC,KAAK,sBAAsB,EAC1E,MAAM,2BAA2B,CAAA;AAElC,eAAO,MAAM,mCAAmC,EAAE,sBAcjD,CAAA"}
1
+ {"version":3,"file":"AllowedPayloadSchemas.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/AllowedPayloadSchemas.ts"],"names":[],"mappings":"AAEA,OAAO,EACyC,KAAK,sBAAsB,EAC1E,MAAM,2BAA2B,CAAA;AAElC,eAAO,MAAM,mCAAmC,EAAE,sBAsBjD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/Fields.ts"],"names":[],"mappings":"AAGA,OAAO,EACyC,KAAK,sBAAsB,EAC1E,MAAM,2BAA2B,CAAA;AAElC,eAAO,MAAM,oBAAoB,EAAE,sBA0BlC,CAAA"}
1
+ {"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/Fields.ts"],"names":[],"mappings":"AAMA,OAAO,EACyC,KAAK,sBAAsB,EAC1E,MAAM,2BAA2B,CAAA;AAElC,eAAO,MAAM,oBAAoB,EAAE,sBAkClC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"JsonSchema.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/JsonSchema.ts"],"names":[],"mappings":"AACA,OAAO,EACyC,KAAK,sBAAsB,EAC1E,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAGpC,eAAO,MAAM,wBAAwB,GAAI,aAAY,SAAsD,KAAG,sBAiB7G,CAAA"}
1
+ {"version":3,"file":"JsonSchema.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/JsonSchema.ts"],"names":[],"mappings":"AAIA,OAAO,EACyC,KAAK,sBAAsB,EAC1E,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAGpC,eAAO,MAAM,wBAAwB,GAAI,aAAY,SAAsD,KAAG,sBAyB7G,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"PreviousHash.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/PreviousHash.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAG1F,eAAO,MAAM,0BAA0B,EAAE,sBAwBxC,CAAA"}
1
+ {"version":3,"file":"PreviousHash.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/PreviousHash.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAqB,sBAAsB,EAAE,MAAM,2BAA2B,CAAA;AAG1F,eAAO,MAAM,0BAA0B,EAAE,sBA4BxC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"BoundWitnessReferences.d.ts","sourceRoot":"","sources":["../../../../src/boundwitness/validators/BoundWitnessReferences.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAEV,MAAM,EAEP,MAAM,4BAA4B,CAAA;AAEnC,OAAO,KAAK,EAAE,sCAAsC,EAA2C,MAAM,2BAA2B,CAAA;AAOhI,eAAO,MAAM,+BAA+B,GACzC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,iBAAiB,MAAM,EAAE,KAAG,sCAAsC,CAAC,CAAC,CAoC7G,CAAA"}
1
+ {"version":3,"file":"BoundWitnessReferences.d.ts","sourceRoot":"","sources":["../../../../src/boundwitness/validators/BoundWitnessReferences.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AACnE,OAAO,KAAK,EAEV,MAAM,EAEP,MAAM,4BAA4B,CAAA;AAEnC,OAAO,KAAK,EAAE,sCAAsC,EAA2C,MAAM,2BAA2B,CAAA;AAOhI,eAAO,MAAM,+BAA+B,GAEzC,CAAC,SAAS,YAAY,GAAG,YAAY,EAAE,iBAAiB,MAAM,EAAE,KAAG,sCAAsC,CAAC,CAAC,CAoC7G,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"BoundWitnessSignatures.d.ts","sourceRoot":"","sources":["../../../../src/boundwitness/validators/BoundWitnessSignatures.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAA;AAG/E,eAAO,MAAM,+BAA+B,EAAE,8BAgB7C,CAAA"}
1
+ {"version":3,"file":"BoundWitnessSignatures.d.ts","sourceRoot":"","sources":["../../../../src/boundwitness/validators/BoundWitnessSignatures.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,8BAA8B,EAAE,MAAM,2BAA2B,CAAA;AAG/E,eAAO,MAAM,+BAA+B,EAAE,8BAgB7C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateChainStakeIntentInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAKhG,eAAO,MAAM,+BAA+B,EAAE,gCAW7C,CAAA"}
1
+ {"version":3,"file":"validateChainStakeIntentInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAKhG,eAAO,MAAM,+BAA+B,EAAE,gCAgB7C,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateHashInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateHashInBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAiB,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAKhG,eAAO,MAAM,mBAAmB,EAAE,gCAWjC,CAAA"}
1
+ {"version":3,"file":"validateHashInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateHashInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAKhG,eAAO,MAAM,mBAAmB,EAAE,gCAgBjC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateSchemaInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateSchemaInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAKhG,eAAO,MAAM,qBAAqB,EAAE,gCAWnC,CAAA"}
1
+ {"version":3,"file":"validateSchemaInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateSchemaInBlock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAiB,gCAAgC,EAAE,MAAM,2BAA2B,CAAA;AAKhG,eAAO,MAAM,qBAAqB,EAAE,gCAgBnC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateTransferInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateTransferInBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AAKlC,eAAO,MAAM,uBAAuB,EAAE,gCAWrC,CAAA"}
1
+ {"version":3,"file":"validateTransferInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateTransferInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AAKlC,eAAO,MAAM,uBAAuB,EAAE,gCAgBrC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"validatePayloadInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validatePayloadInBlock.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AAmBlC,eAAO,MAAM,sBAAsB,EAAE,gCAgBpC,CAAA"}
1
+ {"version":3,"file":"validatePayloadInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validatePayloadInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AAmBlC,eAAO,MAAM,sBAAsB,EAAE,gCAqBpC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateHydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlock/validateHydratedBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAO/F,eAAO,MAAM,qBAAqB,EAAE,+BAkBnC,CAAA"}
1
+ {"version":3,"file":"validateHydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlock/validateHydratedBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAiB,+BAA+B,EAAE,MAAM,2BAA2B,CAAA;AAO/F,eAAO,MAAM,qBAAqB,EAAE,+BAsBnC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"Payloads.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlock/validators/Payloads.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,+BAA+B,EAChC,MAAM,2BAA2B,CAAA;AAKlC,eAAO,MAAM,wBAAwB,EAAE,+BAgCtC,CAAA"}
1
+ {"version":3,"file":"Payloads.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlock/validators/Payloads.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,+BAA+B,EAChC,MAAM,2BAA2B,CAAA;AAKlC,eAAO,MAAM,wBAAwB,EAAE,+BAoCtC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAC4B,oCAAoC,EAC3E,MAAM,2BAA2B,CAAA;AAMlC,eAAO,MAAM,0BAA0B,EAAE,oCAsBxC,CAAA"}
1
+ {"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAC4B,oCAAoC,EAC3E,MAAM,2BAA2B,CAAA;AAMlC,eAAO,MAAM,0BAA0B,EAAE,oCAuBxC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlockState/validators/RequiredBalance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAC4B,oCAAoC,EAC3E,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,kCAAkC,EAAE,oCAsChD,CAAA"}
1
+ {"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlockState/validators/RequiredBalance.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAC4B,oCAAoC,EAC3E,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,kCAAkC,EAAE,oCA6ChD,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionDurationValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionDurationValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACW,qCAAqC,EAAE,uBAAuB,EACpF,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,4BAA4B,EAAE,qCAAqC,CAAC,uBAAuB,CAgBvG,CAAA"}
1
+ {"version":3,"file":"TransactionDurationValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionDurationValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACW,qCAAqC,EAAE,uBAAuB,EACpF,MAAM,2BAA2B,CAAA;AAIlC,eAAO,MAAM,4BAA4B,EAAE,qCAAqC,CAAC,uBAAuB,CAwBvG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionElevationValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionElevationValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACW,qCAAqC,EAAE,uBAAuB,EACpF,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,6BAA6B,EAAE,qCAAqC,CAAC,uBAAuB,CAcxG,CAAA"}
1
+ {"version":3,"file":"TransactionElevationValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionElevationValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACW,qCAAqC,EAAE,uBAAuB,EACpF,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,6BAA6B,EAAE,qCAAqC,CAAC,uBAAuB,CAkBxG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionFromValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionFromValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACW,qCAAqC,EAAE,uBAAuB,EACpF,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,wBAAwB,EAAE,qCAAqC,CAAC,uBAAuB,CAYnG,CAAA"}
1
+ {"version":3,"file":"TransactionFromValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionFromValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACW,qCAAqC,EAAE,uBAAuB,EACpF,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,wBAAwB,EAAE,qCAAqC,CAAC,uBAAuB,CAwBnG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionGasValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionGasValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,qCAAqC,EACrC,uBAAuB,EACxB,MAAM,2BAA2B,CAAA;AAOlC,eAAO,MAAM,uBAAuB,EAAE,qCAAqC,CAAC,uBAAuB,CAgDlG,CAAA"}
1
+ {"version":3,"file":"TransactionGasValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionGasValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,qCAAqC,EACrC,uBAAuB,EACxB,MAAM,2BAA2B,CAAA;AAQlC,eAAO,MAAM,uBAAuB,EAAE,qCAAqC,CAAC,uBAAuB,CAsElG,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"TransactionJsonSchemaValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionJsonSchemaValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACW,qCAAqC,EAAE,uBAAuB,EACpF,MAAM,2BAA2B,CAAA;AASlC,eAAO,MAAM,8BAA8B,EAAE,qCAAqC,CAAC,uBAAuB,CAgBzG,CAAA"}
1
+ {"version":3,"file":"TransactionJsonSchemaValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionJsonSchemaValidator.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACW,qCAAqC,EAAE,uBAAuB,EACpF,MAAM,2BAA2B,CAAA;AASlC,eAAO,MAAM,8BAA8B,EAAE,qCAAqC,CAAC,uBAAuB,CAoBzG,CAAA"}
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.5.32",
4
+ "version": "1.5.34",
5
5
  "description": "XYO Layer One SDK Validation",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -34,25 +34,25 @@
34
34
  "deploy3": "echo Deploy3 not allowed!"
35
35
  },
36
36
  "dependencies": {
37
- "@xylabs/arraybuffer": "^4.11.20",
38
- "@xylabs/hex": "^4.11.20",
39
- "@xylabs/typeof": "^4.11.20",
37
+ "@xylabs/arraybuffer": "^4.11.21",
38
+ "@xylabs/hex": "^4.11.21",
39
+ "@xylabs/typeof": "^4.11.21",
40
40
  "@xyo-network/boundwitness-builder": "^3.18.8",
41
41
  "@xyo-network/boundwitness-model": "^3.18.8",
42
42
  "@xyo-network/boundwitness-validator": "^3.18.8",
43
- "@xyo-network/chain-protocol": "^1.5.32",
44
- "@xyo-network/chain-schema": "^1.5.32",
45
- "@xyo-network/chain-utils": "^1.5.32",
43
+ "@xyo-network/chain-protocol": "^1.5.34",
44
+ "@xyo-network/chain-schema": "^1.5.34",
45
+ "@xyo-network/chain-utils": "^1.5.34",
46
46
  "@xyo-network/payload-builder": "^3.18.8",
47
47
  "@xyo-network/payload-model": "^3.18.8",
48
48
  "@xyo-network/schema-payload-plugin": "^3.18.8",
49
- "@xyo-network/xl1-protocol": "^1.4.34",
49
+ "@xyo-network/xl1-protocol": "^1.4.36",
50
50
  "ajv": "^8.17.1"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@types/node": "^24.0.1",
54
- "@xylabs/assert": "^4.11.20",
55
- "@xylabs/promise": "^4.11.20",
54
+ "@xylabs/assert": "^4.11.21",
55
+ "@xylabs/promise": "^4.11.21",
56
56
  "@xylabs/ts-scripts-yarn3": "^6.5.8",
57
57
  "@xylabs/tsconfig": "^6.5.8",
58
58
  "@xyo-network/account": "^3.18.8",
@@ -60,7 +60,7 @@
60
60
  "@xyo-network/archivist-memory": "^3.18.8",
61
61
  "@xyo-network/archivist-model": "^3.18.8",
62
62
  "@xyo-network/wallet": "^3.18.8",
63
- "@xyo-network/xl1-protocol-sdk": "^1.5.32",
63
+ "@xyo-network/xl1-protocol-sdk": "^1.5.34",
64
64
  "knip": "^5.61.0",
65
65
  "typescript": "^5.8.3",
66
66
  "vitest": "^3.2.3"
@@ -1,4 +1,5 @@
1
- import type { Address } from '@xylabs/hex'
1
+ import { type Address, ZERO_HASH } from '@xylabs/hex'
2
+ import type { WithStorageMeta } from '@xyo-network/payload-model'
2
3
  import type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'
3
4
  import { BlockValidationError } from '@xyo-network/xl1-protocol'
4
5
 
@@ -25,7 +26,7 @@ export const validateBlock: BlockValidatorFunction = async (
25
26
  validators.map(validator => validator(block, chainId)),
26
27
  )).flat())
27
28
  } catch (ex) {
28
- errors.push(new BlockValidationError(block, 'validation excepted'), ex as Error)
29
+ errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted'), ex as Error)
29
30
  }
30
31
  return errors
31
32
  }
@@ -1,3 +1,5 @@
1
+ import { ZERO_HASH } from '@xylabs/hex'
2
+ import type { WithStorageMeta } from '@xyo-network/payload-model'
1
3
  import {
2
4
  type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction, isAllowedBlockPayloadSchema,
3
5
  } from '@xyo-network/xl1-protocol'
@@ -9,11 +11,19 @@ export const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (
9
11
  try {
10
12
  for (const schema of block.payload_schemas) {
11
13
  if (!isAllowedBlockPayloadSchema(schema)) {
12
- errors.push(new BlockValidationError(block, `payload schema not allowed in block: ${schema}`))
14
+ errors.push(new BlockValidationError(
15
+ (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
16
+ block,
17
+ `payload schema not allowed in block: ${schema}`,
18
+ ))
13
19
  }
14
20
  }
15
21
  } catch (e) {
16
- errors.push(new BlockValidationError(block, `Failed BlockAllowedPayloadSchemasValidator: ${e instanceof Error ? e.message : String(e)}`))
22
+ errors.push(new BlockValidationError(
23
+ (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
24
+ block,
25
+ `Failed BlockAllowedPayloadSchemasValidator: ${e instanceof Error ? e.message : String(e)}`,
26
+ ))
17
27
  }
18
28
  return errors
19
29
  }
@@ -1,6 +1,9 @@
1
- import type { Address, Hash } from '@xylabs/hex'
1
+ import {
2
+ type Address, type Hash, ZERO_HASH,
3
+ } from '@xylabs/hex'
2
4
  import { isDefined } from '@xylabs/typeof'
3
5
  import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
6
+ import type { WithStorageMeta } from '@xyo-network/payload-model'
4
7
  import {
5
8
  type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,
6
9
  } from '@xyo-network/xl1-protocol'
@@ -12,7 +15,7 @@ export const BlockFieldsValidator: BlockValidatorFunction = (
12
15
  const errors: (BlockValidationError | Error)[] = []
13
16
  try {
14
17
  if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {
15
- errors.push(new BlockValidationError(block, 'Invalid chain id'))
18
+ errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))
16
19
  }
17
20
 
18
21
  // get transaction hashes
@@ -25,10 +28,18 @@ export const BlockFieldsValidator: BlockValidatorFunction = (
25
28
 
26
29
  // check if transaction hashes are unique
27
30
  if (new Set(txHashes).size < txHashes.length) {
28
- errors.push(new BlockValidationError(block, `Duplicate Transaction Hashes: ${txHashes}`))
31
+ errors.push(new BlockValidationError(
32
+ (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
33
+ block,
34
+ `Duplicate Transaction Hashes: ${txHashes}`,
35
+ ))
29
36
  }
30
37
  } catch (e) {
31
- errors.push(new BlockValidationError(block, `Failed BlockFieldsValidator: ${e instanceof Error ? e.message : String(e)}`))
38
+ errors.push(new BlockValidationError(
39
+ (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,
40
+ block,
41
+ `Failed BlockFieldsValidator: ${e instanceof Error ? e.message : String(e)}`,
42
+ ))
32
43
  }
33
44
  return errors
34
45
  }