@xyo-network/chain-sdk 5.4.0 → 5.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +19 -0
- package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.d.ts +1 -1
- package/dist/browser/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.d.ts.map +1 -1
- package/dist/browser/modules/slashing/index/foldSlashIndex.d.ts +24 -8
- package/dist/browser/modules/slashing/index/foldSlashIndex.d.ts.map +1 -1
- package/dist/browser/modules/slashing/verify/verifyInvalidBlock.d.ts.map +1 -1
- package/dist/browser/modules/validation/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
- package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +19 -0
- package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.d.ts +1 -1
- package/dist/neutral/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.d.ts.map +1 -1
- package/dist/neutral/modules/slashing/index/foldSlashIndex.d.ts +24 -8
- package/dist/neutral/modules/slashing/index/foldSlashIndex.d.ts.map +1 -1
- package/dist/neutral/modules/slashing/verify/verifyInvalidBlock.d.ts.map +1 -1
- package/dist/neutral/modules/validation/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
- package/dist/neutral/services.mjs +38 -12
- package/dist/neutral/services.mjs.map +2 -2
- package/dist/neutral/slashing.mjs +52 -20
- package/dist/neutral/slashing.mjs.map +3 -3
- package/dist/neutral/validation.mjs +6 -4
- package/dist/neutral/validation.mjs.map +2 -2
- package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts +19 -0
- package/dist/node/modules/services/simple/block/runner/SimpleBlockRunner.d.ts.map +1 -1
- package/dist/node/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.d.ts +1 -1
- package/dist/node/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.d.ts.map +1 -1
- package/dist/node/modules/slashing/index/foldSlashIndex.d.ts +24 -8
- package/dist/node/modules/slashing/index/foldSlashIndex.d.ts.map +1 -1
- package/dist/node/modules/slashing/verify/verifyInvalidBlock.d.ts.map +1 -1
- package/dist/node/modules/validation/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
- package/package.json +5 -5
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/modules/validation/block/validateBlock.ts", "../../src/modules/validation/block/validators/AllowedPayloadSchemas.ts", "../../src/modules/validation/block/validators/BoundWitness.ts", "../../src/modules/validation/block/validators/Fields.ts", "../../src/modules/validation/block/validators/PreviousHash.ts", "../../src/modules/validation/hydratedBlock/validateHydratedBlock.ts", "../../src/modules/validation/hydratedBlock/validators/Payloads.ts", "../../src/modules/validation/elevatedPayload/validatePayloadInBlock.ts", "../../src/modules/validation/elevatedPayload/lib/findElevatingTransaction.ts", "../../src/modules/validation/elevatedPayload/lib/isElevatedFromBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateElevatedFromBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateElevatedFromTransaction.ts", "../../src/modules/validation/elevatedPayload/lib/validateSlashPayloadInBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateTransactionInBlock.ts", "../../src/modules/validation/elevatedPayload/lib/validateTypedPayloadInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateBridgeIntentInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateClaimInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateHashInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSchemaInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashAdjudicationInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashChallengeInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashCommitInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashEvidenceInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateSlashRequestInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateTimeInBlock.ts", "../../src/modules/validation/elevatedPayload/payloads/validateTransferInBlock.ts", "../../src/modules/validation/hydratedBlock/validators/TransactionTransfersInBlock.ts", "../../src/modules/validation/hydratedBlockState/validateHydratedBlockState.ts", "../../src/modules/validation/hydratedBlockState/validators/RequiredBalance.ts", "../../src/modules/validation/hydratedTransactionState/validateHydratedTransactionState.ts", "../../src/modules/validation/hydratedTransactionState/validators/RequiredBalance.ts"],
|
|
4
|
-
"sourcesContent": ["import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockBoundWitnessValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const validators: BlockValidatorFunction[] = [\n BlockBoundWitnessValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, block, chainId))))\n }\n } catch (ex) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted', ex))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport {\n BlockValidationError,\n isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-sdk'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `payload schema not allowed in block: ${String(schema)}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport { BoundWitnessValidator } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nconst error = (block: BlockBoundWitness, message: string): BlockValidationError =>\n new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, message)\n\n// Friendly pre-check for the same wallet/producer bug surfaced on the\n// transaction side: signatures emitted under `signatures` instead of\n// `$signatures`. Mirrors TransactionBoundWitnessValidator.\nconst checkSignaturesShape = (block: BlockBoundWitness): BlockValidationError[] => {\n const bw = block as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(block, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(block, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the block's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. Mirrors TransactionBoundWitnessValidator\n * for blocks. Covers signatures (length parity + per-address elliptic-curve\n * verification against the BW data hash), addresses uniqueness,\n * payload_hashes/payload_schemas length parity, schemas, and top-level\n * schema check.\n */\nexport const BlockBoundWitnessValidator: BlockValidatorFunction = async (\n _context,\n block,\n) => {\n try {\n const shapeErrors = checkSignaturesShape(block)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(block)\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(block, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)]\n }\n}\n", "import type { Hash } from '@ariestools/sdk'\nimport { isDefined, ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport { BoundWitnessSchema } from '@xyo-network/sdk'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n) => {\n const errors: BlockValidationError[] = []\n try {\n if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))\n }\n\n // get transaction hashes\n const txHashes: Hash[] = []\n for (let i = 0; i < block.payload_hashes.length; i++) {\n if (block.payload_schemas[i] === BoundWitnessSchema) {\n txHashes.push(block.payload_hashes[i])\n }\n }\n\n // check if transaction hashes are unique\n const uniqueTxHashes = new Set(txHashes)\n if (uniqueTxHashes.size < txHashes.length) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Duplicate Transaction Hashes: ${txHashes.join(', ')}`,\n ))\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { isHash, ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${String(ex)}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n", "import type { Promisable } from '@ariestools/sdk'\nimport { ZERO_HASH } from '@ariestools/sdk'\nimport type {\n BaseContext,\n BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n context: BaseContext,\n hydratedBlock: HydratedBlockWithHashMeta,\n chainIdAtBlockNumber?: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(\n context,\n hydratedBlock[0],\n chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,\n additionalBlockValidators,\n )\n for (const validateBlockError of validateBlockErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))\n }\n const bwRefErrors = await BoundWitnessReferencesValidator()(hydratedBlock)\n for (const bwRefError of bwRefErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `boundwitness reference error: ${bwRefError}`, bwRefError))\n }\n const validators: HydratedBlockValidationFunction[] = [\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, hydratedBlock, chainIdAtBlockNumber))))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed validateHydratedBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n context,\n [block, payloads],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<string, WithHashMeta<Payload>>> = {}\n for (const payload of payloads) {\n const propertyKey = String(payload._hash)\n payloadMap[propertyKey] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const propertyKey = String(block.payload_hashes[i])\n const schema = block.payload_schemas[i]\n const payload = payloadMap[propertyKey]\n if (payload) {\n const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [block, payloads])\n for (const payloadInBlockError of payloadInBlockErrors) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `validatePayloadInBlock error: ${payloadInBlockError}`,\n payloadInBlockError,\n ))\n }\n delete remainingPayloads[propertyKey]\n } else {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `missing payload ${propertyKey} ${schema}`))\n }\n }\n\n if (Object.keys(remainingPayloads).length > 0) {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `Failed PayloadsInBlockValidator: ${String(ex)}`,\n ex,\n ))\n }\n\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Schema } from '@xyo-network/sdk'\nimport { BoundWitnessSchema, SchemaSchema } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, BridgeIntentSchema, BridgeSourceObservationSchema, ChainStakeIntentSchema, ClaimSchema, HashSchema,\n InBlockPayloadValidationError,\n SlashAdjudicationSchema, SlashChallengeSchema, SlashCommitSchema, SlashEvidenceSchema, SlashRequestSchema,\n TimeSchema, TransferSchema,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateBridgeDestinationObservationInBlock, validateBridgeIntentInBlock, validateBridgeSourceObservationInBlock, validateChainStakeIntentInBlock,\n validateClaimInBlock,\n validateHashInBlock, validateSchemaInBlock,\n validateSlashAdjudicationInBlock, validateSlashChallengeInBlock, validateSlashCommitInBlock,\n validateSlashEvidenceInBlock, validateSlashRequestInBlock,\n validateTimeInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [BoundWitnessSchema]: validateTransactionInBlock,\n [BridgeDestinationObservationSchema]: validateBridgeDestinationObservationInBlock,\n [BridgeIntentSchema]: validateBridgeIntentInBlock,\n [BridgeSourceObservationSchema]: validateBridgeSourceObservationInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [ClaimSchema]: validateClaimInBlock,\n [HashSchema]: validateHashInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [SlashAdjudicationSchema]: validateSlashAdjudicationInBlock,\n [SlashChallengeSchema]: validateSlashChallengeInBlock,\n [SlashCommitSchema]: validateSlashCommitInBlock,\n [SlashEvidenceSchema]: validateSlashEvidenceInBlock,\n [SlashRequestSchema]: validateSlashRequestInBlock,\n [TimeSchema]: validateTimeInBlock,\n [TransferSchema]: validateTransferInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...(await validator(context, payload, block)))\n } else {\n errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (ex) {\n const error = new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n )\n errors.push(error)\n }\n return errors\n}\n", "import type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockWithHashMeta, TransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-sdk'\nimport { ELEVATE_OPCODE, isTransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-sdk'\n\n/**\n * The transaction in this block that elevated the payload, when one did.\n *\n * A payload can also ride directly in the block, elevated by the block signer rather than by a\n * transaction. Callers that need a signer to bind against must be able to tell the two apart,\n * because those two paths attribute the payload to entirely different addresses.\n * @param payload The payload being validated\n * @param block The hydrated block carrying it\n * @returns The elevating transaction, or undefined when the payload rode directly\n */\nexport function findElevatingTransaction(\n payload: WithHashMeta<Payload>,\n [, payloads]: HydratedBlockWithHashMeta,\n): TransactionBoundWitnessWithHashMeta | undefined {\n const elevateOperation = `${ELEVATE_OPCODE}|${payload._hash}`\n return payloads\n .filter(candidate => isTransactionBoundWitnessWithHashMeta(candidate))\n .find(tx => tx.payload_hashes.includes(payload._hash) && tx.script?.includes(elevateOperation) === true)\n}\n", "import type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport const isElevatedFromBlock = (payload: WithHashMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n", "import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n const allTxPayloadHashes = new Set(txs.flatMap(tx => tx.payload_hashes))\n if (allTxPayloadHashes.has(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash,\n block,\n payload,\n `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`,\n ))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${String(ex)}`, ex))\n }\n return errors\n}\n", "import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n if (txs.length > 0) {\n const hashes = txs.flatMap(tx => tx.payload_hashes)\n if (!hashes.includes(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Transaction does not include payload'))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'No Transactions in block'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `Failed validateElevatedFromTransaction: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import type { IdentityFunction } from '@ariestools/sdk'\nimport type { Payload, XyoAddress } from '@xyo-network/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type {\n HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext, InBlockRuleParams,\n TransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport { requireRuleActive, resolveRuleParams } from '@xyo-network/xl1-sdk'\n\nimport { findElevatingTransaction } from './findElevatingTransaction.ts'\n\n/** What the shared slash-payload checks concluded, plus the rules the caller still needs. */\nexport interface SlashPayloadGateResult {\n /** Reasons the payload is not admissible; empty when the shared checks passed. */\n errors: Error[]\n /** The rules in force at the carrying height, when they resolved. */\n params?: InBlockRuleParams\n /** The transaction that elevated the payload, once binding has confirmed it. */\n transaction?: TransactionBoundWitnessWithHashMeta\n}\n\n/**\n * The checks every slash payload shares: the activation gate, then signer binding.\n *\n * Every slash payload is transaction-elevation-only. A payload riding directly in the block would\n * bind to the block signer instead of a transaction sender, and nothing in the design says what\n * that would mean \u2014 so that path is refused rather than guessed at. Binding `from` to the\n * elevating transaction's sender gets self-signing discipline transitively, since the transaction\n * validator has already tied `tx.from` to a verified bound-witness signer.\n *\n * The resolved rules come back so a caller can ask its own questions of them without resolving\n * the register a second time, and so the gate stays the only place that decides admissibility.\n * @param context The validation context, which may carry no register at all\n * @param payload The payload being validated\n * @param block The hydrated block carrying it\n * @param identityFunction Guard establishing the payload is the type expected\n * @param fromOf Reads the address the payload claims to be from\n * @param subject What is being gated, named for the error message\n * @returns The shared verdict and the rules in force\n */\nexport async function validateSlashPayloadInBlock<T extends Payload>(\n context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\n identityFunction: IdentityFunction<T>,\n fromOf: (payload: T) => XyoAddress,\n subject: string,\n): Promise<SlashPayloadGateResult> {\n const height = block[0].block\n const params = await resolveRuleParams(context, height)\n const gateError = requireRuleActive(params, 'slash-payloads', height, subject)\n if (gateError !== undefined) return { errors: [new Error(gateError)], params }\n\n if (!identityFunction(payload) || !isHashMeta(payload)) {\n return { errors: [new Error(`${subject} failed its identity check`)], params }\n }\n\n const transaction = findElevatingTransaction(payload, block)\n if (transaction === undefined) {\n return { errors: [new Error(`${subject} must be elevated from a transaction`)], params }\n }\n if (fromOf(payload) !== transaction.from) {\n return { errors: [new Error(`${subject} from must equal elevating transaction from`)], params }\n }\n\n return {\n errors: [], params, transaction,\n }\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BoundWitnessSignaturesValidator, InBlockPayloadValidationError, isTransactionBoundWitness, validateTransaction,\n} from '@xyo-network/xl1-sdk'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n // Hydrate this transaction from its own commitments only. Passing the entire block payload\n // set lets one transaction resolve an elevation body committed by another transaction, and\n // duplicate block bodies make an otherwise valid repeated elevation appear duplicated.\n const transactionPayloads = [...new Set(payload.payload_hashes)].flatMap((hash) => {\n const referencedPayload = block[1].find(candidate => isHashMeta(candidate)\n && (candidate._hash === hash || candidate._dataHash === hash))\n return referencedPayload === undefined ? [] : [referencedPayload]\n })\n const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, transactionPayloads])\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `TransactionValidation error: ${txError}`,\n txError,\n ))\n }\n const txSignatureErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txSignatureError of txSignatureErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `BoundWitnessSignaturesValidator error: ${txSignatureError}`,\n txSignatureError,\n ))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isHashMeta'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(payload._hash ?? ZERO_HASH, block, payload, `validation excepted: ${String(ex)}`, ex))\n }\n return errors\n}\n", "import type { IdentityFunction } from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext } from '@xyo-network/xl1-sdk'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isHashMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...(await validateElevatedFromBlock(context, payload, block)))\n } else {\n errors.push(...(await validateElevatedFromTransaction(context, payload, block)))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${String(ex)}`))\n }\n return errors\n}\n//\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeDestinationObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeDestinationObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeObservationInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeIntentInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeSourceObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeSourceObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeObservationInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isChainStakeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { HashRegEx, ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n Claim, HydratedBlockWithHashMeta, InBlockPayloadValidationFunction,\n TransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n ClaimSchema, ELEVATE_OPCODE, InBlockPayloadValidationError,\n isClaimPayload, isTransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\n\nconst CLAIM_FIELDS = new Set(['schema', 'hashes', 'source', 'subject', '$version', '$sources'])\n\n/** Checks signed keys and client metadata outside the complete Claim identity guard. */\nfunction validateStrictClaimFields(claim: Claim): string[] {\n const errors = Object.keys(claim)\n .filter(field => !CLAIM_FIELDS.has(field))\n .map(field => `Unknown Claim field ${field}`)\n const sources = '$sources' in claim ? claim.$sources : undefined\n\n // ClaimPayloadJsonSchema permits an optional hash array, including empty arrays and duplicates.\n if (sources !== undefined) {\n if (Array.isArray(sources)) {\n for (const [index, source] of sources.entries()) {\n if (typeof source !== 'string' || !HashRegEx.test(source)) {\n errors.push(`Claim $sources/${index} must be a hash`)\n }\n }\n } else {\n errors.push('Claim $sources must be an array of hashes')\n }\n }\n\n return errors\n}\n\nfunction claimError(\n payload: WithHashMeta<Payload>,\n block: HydratedBlockWithHashMeta,\n message: string,\n cause?: unknown,\n): InBlockPayloadValidationError {\n return new InBlockPayloadValidationError(\n payload._hash ?? block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n message,\n cause,\n )\n}\n\nfunction indexesOf<T>(values: readonly T[], value: T): number[] {\n const indexes: number[] = []\n for (const [index, candidate] of values.entries()) {\n if (candidate === value) indexes.push(index)\n }\n return indexes\n}\n\nfunction validateClaimSchemaPairs(\n payload: WithHashMeta<Payload>,\n block: HydratedBlockWithHashMeta,\n transaction?: TransactionBoundWitnessWithHashMeta,\n): InBlockPayloadValidationError[] {\n const carrier = transaction ?? block[0]\n const carrierName = transaction === undefined ? 'Block' : `Transaction ${transaction._hash}`\n const indexes = indexesOf(carrier.payload_hashes, payload._hash)\n if (indexes.length === 0) {\n return [claimError(payload, block, `${carrierName} does not commit Claim root hash ${payload._hash}`)]\n }\n if (indexes.some(index => carrier.payload_schemas[index] !== ClaimSchema)) {\n return [claimError(payload, block, `${carrierName} does not pair every Claim root hash with ${ClaimSchema}`)]\n }\n return []\n}\n\ninterface ClaimElevationAttempt {\n malformedOperations: string[]\n transaction: TransactionBoundWitnessWithHashMeta\n validOperationCount: number\n}\n\nfunction claimElevationAttempts(\n payload: WithHashMeta<Payload>,\n [, payloads]: HydratedBlockWithHashMeta,\n): ClaimElevationAttempt[] {\n const exactOperation = `${ELEVATE_OPCODE}|${payload._hash}`\n const operationPrefix = `${exactOperation}|`\n const transactions = payloads.filter(candidate => isTransactionBoundWitnessWithHashMeta(candidate))\n\n return transactions.flatMap((transaction) => {\n const operations = transaction.script ?? []\n const validOperationCount = operations.filter(operation => operation === exactOperation).length\n const malformedOperations = operations.filter(operation => operation.startsWith(operationPrefix))\n return validOperationCount === 0 && malformedOperations.length === 0\n ? []\n : [{\n malformedOperations, transaction, validOperationCount,\n }]\n })\n}\n\nfunction validateElevatingTransaction(\n claim: Claim,\n payload: WithHashMeta<Payload>,\n block: HydratedBlockWithHashMeta,\n attempt: ClaimElevationAttempt,\n): InBlockPayloadValidationError[] {\n const errors: InBlockPayloadValidationError[] = []\n const {\n malformedOperations, transaction, validOperationCount,\n } = attempt\n\n if (malformedOperations.length > 0) {\n errors.push(claimError(\n payload,\n block,\n `Transaction ${transaction._hash} contains malformed Claim elevation operations: ${malformedOperations.join(', ')}`,\n ))\n }\n if (validOperationCount > 1) {\n errors.push(claimError(payload, block, `Transaction ${transaction._hash} contains duplicate Claim elevation operations`))\n }\n if (validOperationCount !== 1) return errors\n\n errors.push(...validateClaimSchemaPairs(payload, block, transaction))\n\n if (!transaction.addresses.includes(claim.source)) {\n errors.push(claimError(payload, block, `Claim source ${claim.source} is not a signer of transaction ${transaction._hash}`))\n }\n\n const committedHashes = new Set(transaction.payload_hashes)\n const missingHashes = claim.hashes.filter(hash => !committedHashes.has(hash))\n if (missingHashes.length > 0) {\n errors.push(claimError(\n payload,\n block,\n `Transaction ${transaction._hash} does not commit every Claim hash: ${missingHashes.join(', ')}`,\n ))\n }\n\n return errors\n}\n\n/** Validates the strict, transaction-authenticated consensus contract for an elevated Claim. */\nexport const validateClaimInBlock: InBlockPayloadValidationFunction = async (\n _context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n try {\n const canonicalPayload = PayloadBuilder.omitStorageMeta(payload)\n if (canonicalPayload.schema !== ClaimSchema || !isClaimPayload(canonicalPayload)) {\n return [claimError(payload, block, 'Claim failed its complete payload identity check')]\n }\n\n const strictErrors = validateStrictClaimFields(canonicalPayload)\n if (strictErrors.length > 0) {\n return [claimError(payload, block, `Claim failed strict payload validation: ${strictErrors.join('; ')}`, strictErrors)]\n }\n\n const canonicalHash = await PayloadBuilder.hash(canonicalPayload)\n if (canonicalHash !== payload._hash) {\n return [claimError(payload, block, `Claim canonical root hash ${canonicalHash} does not match asserted hash ${payload._hash}`)]\n }\n\n const errors = validateClaimSchemaPairs(payload, block)\n const attempts = claimElevationAttempts(payload, block)\n const exactAttempts = attempts.filter(attempt => attempt.validOperationCount > 0)\n\n for (const attempt of attempts) {\n errors.push(...validateElevatingTransaction(canonicalPayload, payload, block, attempt))\n }\n\n if (exactAttempts.length === 0) {\n errors.push(claimError(payload, block, 'Claim must be elevated from a transaction with an exact elevate operation'))\n }\n\n return errors\n } catch (ex) {\n return [claimError(payload, block, `Failed validateClaimInBlock: ${String(ex)}`, ex)]\n }\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isHashPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isSchemaPayload } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isSchemaPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateSchemaInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isSlashAdjudication } from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * Validates a slash adjudication carried in a block.\n *\n * Only the arbiter named by the register may close a report, and that binding survives well past\n * the point where reporting itself opens up \u2014 an adjudication from anyone else is not a minority\n * opinion, it is a forged verdict.\n *\n * Whether a confirmed adjudication names its claimant is an arbiter duty checked when the\n * adjudication is recomputed, not a question of block validity. A block carrying a sloppy but\n * genuine verdict is still a valid block.\n */\nexport const validateSlashAdjudicationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const { errors: sharedErrors, params } = await validateSlashPayloadInBlock(context, payload, block, isSlashAdjudication, adjudication => adjudication.from, 'slash adjudication')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n if (sharedErrors.length === 0 && isSlashAdjudication(payload)\n && (params?.arbiter === undefined || payload.from !== params.arbiter)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'slash adjudication from must equal the register arbiter'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isSlashChallenge } from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * Validates a slash challenge carried in a block.\n *\n * Anyone may challenge and no bond is required, because a challenge can only exculpate. A\n * frivolous one fails to change the verdict and costs its filer the fee; there is no version of it\n * that harms the accused, so there is nothing here to deter.\n */\nexport const validateSlashChallengeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const { errors: sharedErrors } = await validateSlashPayloadInBlock(context, payload, block, isSlashChallenge, subject => subject.from, 'slash challenge')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type {\n InBlockPayloadValidationFunction, InBlockRuleParams, SlashCommit,\n TransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n derivedReceiveAddress, InBlockPayloadValidationError, isRuleActiveAt, isSlashCommit, isTransferPayload,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/** Reads a register amount, which is carried as an unprefixed hex string. */\nfunction toAmount(value: string): bigint {\n return BigInt(value.startsWith('0x') ? value : `0x${value}`)\n}\n\n/**\n * Whether a commitment has to escrow a deposit at this height.\n *\n * The deposit is what a reporter stands to lose for filing garbage, so it is only required while\n * nothing else is playing that role. Once bad reports are themselves an adjudicable offense, the\n * counter-slash is the deterrent and charging a deposit on top would just tax honest reporters.\n */\nfunction isDepositRequired(params: InBlockRuleParams, height: number): boolean {\n return isRuleActiveAt(params, 'eligibility-admission', height)\n && !isRuleActiveAt(params, 'invalid-slash-request.adjudicable', height)\n}\n\n/** Total escrowed to the reporter's deposit address by transfers in the same transaction. */\nfunction depositedInTransaction(\n commit: SlashCommit,\n transaction: TransactionBoundWitnessWithHashMeta,\n payloads: WithHashMeta<Payload>[],\n): bigint {\n const target = derivedReceiveAddress(commit.from, 'slash-deposit')\n const inTransaction = new Set(transaction.payload_hashes)\n return payloads\n .filter(candidate => inTransaction.has(candidate._hash))\n .filter(candidate => isTransferPayload(candidate))\n .reduce((total, transfer) => total + toAmount(transfer.transfers[target] ?? '0x0'), 0n)\n}\n\n/**\n * Validates a slash commitment carried in a block.\n *\n * A commitment reserves a report before its evidence is public, which is what stops a reporter's\n * work from being lifted from the mempool and re-filed under someone else's name. The commitment\n * itself is opaque here by design \u2014 checking what it hides is the reveal's job.\n */\nexport const validateSlashCommitInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const {\n errors: sharedErrors, params, transaction,\n } = await validateSlashPayloadInBlock(context, payload, block, isSlashCommit, commit => commit.from, 'slash commit')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n if (sharedErrors.length > 0 || params === undefined || transaction === undefined || !isSlashCommit(payload)) {\n return errors\n }\n\n const height = block[0].block\n if (isDepositRequired(params, height)) {\n const required = toAmount(params.reporterDepositAtto ?? '0x0')\n const deposited = depositedInTransaction(payload, transaction, block[1])\n if (deposited < required) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `slash commit escrows ${deposited} but the register requires ${required}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isSlashEvidence } from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * Validates a slash evidence carried in a block.\n *\n * A container carries artifacts and asserts nothing about them, so past the activation gate and\n * signer binding there is nothing left to check. No size ceiling is imposed: character storage is\n * already priced by gas, so an oversized container costs its sender what it costs the chain.\n */\nexport const validateSlashEvidenceInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const { errors: sharedErrors } = await validateSlashPayloadInBlock(context, payload, block, isSlashEvidence, subject => subject.from, 'slash evidence')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n InBlockPayloadValidationFunction, InBlockPayloadValidationFunctionContext, InBlockRuleParams,\n SlashRequest, TransactionBoundWitnessWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport {\n InBlockPayloadValidationError, isRuleObservedAt, isSlashEvidence, isSlashRequest, reportableRuleId,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * The artifact hashes actually carried by evidence containers in the same transaction.\n *\n * Identity is recomputed from each artifact rather than read from any claim about it. A container\n * that names a hash it does not carry proves nothing, and letting the claim stand in for the\n * artifact is exactly how a fabricated report would pass.\n */\nasync function carriedArtifactHashes(\n transaction: TransactionBoundWitnessWithHashMeta,\n payloads: WithHashMeta<Payload>[],\n): Promise<Set<string>> {\n const inTransaction = new Set(transaction.payload_hashes)\n const artifacts = payloads\n .filter(candidate => inTransaction.has(candidate._hash))\n .filter(candidate => isSlashEvidence(candidate))\n // the container types its artifacts loosely; they are payload-shaped by construction\n .flatMap(container => container.artifacts as unknown as Payload[])\n return new Set(await Promise.all(artifacts.map(artifact => PayloadBuilder.dataHash(artifact))))\n}\n\n/**\n * Why a request's evidence cannot be resolved, empty when all of it can.\n *\n * Evidence either rides along in the same transaction or was finalized earlier. When the second\n * case cannot be checked at all, this fails closed: a node that cannot verify a requirement must\n * not certify the block. That does mean a misconfigured node rejects blocks its peers accept, so\n * the resolver has to be wired before the activation height, never after.\n */\nasync function evidenceResolutionErrors(\n context: InBlockPayloadValidationFunctionContext,\n request: SlashRequest,\n carried: Set<string>,\n height: XL1BlockNumber,\n): Promise<string[]> {\n const missing = request.evidence.filter(hash => !carried.has(hash))\n if (missing.length === 0) return []\n const resolver = context.hasFinalizedEvidenceArtifact\n if (resolver === undefined) {\n return ['evidence resolver unavailable: cannot certify a block whose evidence it cannot check']\n }\n const resolved = await Promise.all(missing.map(async hash => ({ found: await resolver(hash, height), hash })))\n return resolved.filter(({ found }) => !found).map(({ hash }) => `unresolvable evidence artifact ${hash}`)\n}\n\n/**\n * Whether the offense a request names was reportable at the height the offense happened.\n *\n * Resolved through the shared rule vocabulary rather than a raw activation read so that a\n * recorded deactivation closes this gate too. Emission already honors rollbacks; if admission\n * did not, third parties could keep filing against a rule the register has switched off.\n */\nfunction isOffenseReportable(params: InBlockRuleParams, request: SlashRequest): boolean {\n return isRuleObservedAt(params, reportableRuleId(request.offense), request.block)\n}\n\n/**\n * Validates a slash request carried in a block.\n *\n * A request is a recordable transaction, not a verdict, so this checks that it is well-formed and\n * that its evidence exists \u2014 never whether the accusation is true. An unverifiable request is\n * still a valid request; deciding it is the arbiter's job.\n *\n * The reportable gate is asked of the height the offense happened at, not the height the report\n * lands at. Comparing against the carrying height would make a rule retroactive and turn conduct\n * that was legal when it occurred into an offense.\n */\nexport const validateSlashRequestInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n const fail = (message: string) =>\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, message))\n try {\n const {\n errors: sharedErrors, params, transaction,\n } = await validateSlashPayloadInBlock(context, payload, block, isSlashRequest, request => request.from, 'slash request')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n if (sharedErrors.length > 0 || params === undefined || transaction === undefined || !isSlashRequest(payload)) {\n return errors\n }\n\n if (!isOffenseReportable(params, payload)) {\n fail(`offense '${payload.offense}' was not reportable at block ${payload.block}`)\n }\n\n const carried = await carriedArtifactHashes(transaction, block[1])\n for (const problem of await evidenceResolutionErrors(context, payload, carried, block[0].block)) {\n fail(problem)\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTimeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTimeInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTransferPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTransferPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTransferInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockValidationFunction, HydratedTransactionValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\n/**\n * Builds a block-level validator that runs `transfersValidator` against every transaction\n * in the block, mapping any transaction errors to block errors. This is how the\n * reward-redemption signing gate (a `TransactionTransfersValidator`) is enforced during\n * block validation \u2014 pass the result as an `additionalValidators` entry to\n * `validateHydratedBlock`.\n */\nexport function TransactionTransfersInBlockValidatorFactory(\n transfersValidator: HydratedTransactionValidationFunction,\n): HydratedBlockValidationFunction {\n return async (context, hydratedBlock) => {\n const [block, payloads] = hydratedBlock\n const errors: HydratedBlockValidationError[] = []\n try {\n for (const payload of payloads) {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n const txErrors = await transfersValidator({ ...context, chainId: block.chain }, [payload, payloads])\n for (const txError of txErrors) {\n errors.push(new HydratedBlockValidationError(payload._hash, hydratedBlock, `transfer authorization error: ${txError}`, txError))\n }\n }\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed TransactionTransfersInBlockValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }\n}\n", "import { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n context,\n hydratedBlock,\n additionalValidators = [],\n) => {\n return await spanRootAsync('validateHydratedBlockState', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId: ChainId | undefined\n try {\n chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block)\n const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber)\n for (const validateHydratedBlockError of validateHydratedBlockErrors) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock[0]._hash,\n chainId,\n hydratedBlock,\n `validateBlock error: ${validateHydratedBlockError}`,\n validateHydratedBlockError,\n ))\n }\n const validators: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, hydratedBlock))))\n }\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId ?? '00' as ChainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1, HydratedBlockStateValidationError,\n isSignedTransactionBoundWitnessWithHashMeta,\n netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nfunction offendingTransactionHashesForAddress(block: Parameters<HydratedBlockStateValidationFunction>[1], address: Address): Hash[] {\n const hashes: Hash[] = []\n for (const payload of block[1]) {\n if (isSignedTransactionBoundWitnessWithHashMeta(payload) && payload.from === address) {\n hashes.push(payload._hash)\n }\n }\n return hashes\n}\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n context,\n block,\n) => {\n return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId = '00' as ChainId\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads({ singletons: {} }, (block[1]))\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<string, bigint> = {}\n for (const address of netBalanceAddresses) {\n const propertyKey = String(address)\n const netBalance = (netBalances as Record<string, bigint>)[propertyKey]\n if (netBalance < 0n) {\n requiredBalances[propertyKey] = -netBalance\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n '00' as ChainId,\n block,\n 'Insufficient funds because first block',\n )]\n chainId = await context.chainIdAtBlockNumber(block[0].block)\n await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {\n for (const [address, reqBalance] of Object.entries(requiredBalances)) {\n const propertyKey = String(address)\n const result = await context.accountBalance.accountBalances([address as Address], { head: previous })\n const balance = (result as Record<string, bigint>)[propertyKey] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address as Address)\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n undefined,\n offendingTransactionHashes.length > 0 ? offendingTransactionHashes : undefined,\n ))\n }\n }\n }, context)\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-sdk'\n\nimport { RequiredBalanceTransactionStateValidator } from './validators/index.ts'\n\nexport const validateHydratedTransactionState: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('validateHydratedTransactionState', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const validators: HydratedTransactionStateValidationFunction[] = [\n RequiredBalanceTransactionStateValidator,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, tx))))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed validateHydratedTransactionState: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n HydratedTransactionWrapper,\n netBalancesForPayloads,\n transactionRequiredGas,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\ntype ValidatorContext = Parameters<HydratedTransactionStateValidationFunction>[0]\ntype ValidatorTx = Parameters<HydratedTransactionStateValidationFunction>[1]\n\n/**\n * For each address with a negative net balance, look up the actual on-chain\n * balance at the current head and emit an `insufficient balance` error if it\n * can't cover the required amount.\n */\nasync function balanceShortfallErrors(\n context: ValidatorContext,\n tx: ValidatorTx,\n requiredBalances: Record<string, bigint>,\n): Promise<HydratedTransactionValidationError[]> {\n const errors: HydratedTransactionValidationError[] = []\n const requiredAddresses = Object.keys(requiredBalances)\n if (requiredAddresses.length === 0) return errors\n const [headBlock] = await context.blockViewer.currentBlock()\n const balances = await context.accountBalanceViewer.accountBalances(\n requiredAddresses as Address[],\n { head: headBlock._hash },\n )\n const balancesByKey = balances as Record<string, bigint>\n for (const address of requiredAddresses) {\n const propertyKey = String(address)\n const reqBalance = requiredBalances[propertyKey]\n const balance = balancesByKey[propertyKey] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n ))\n }\n }\n return errors\n}\n\nexport const RequiredBalanceTransactionStateValidator: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('RequiredBalanceTransactionStateValidator', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const netBalances = netBalancesForPayloads({ singletons: {} }, tx[1]) as Record<string, bigint>\n\n const wrapper = await HydratedTransactionWrapper.parse(tx)\n const from = wrapper.boundWitness.from as Address\n const gasRequired = transactionRequiredGas(tx)\n // Declared gas limit must cover the gas the tx will actually consume.\n // Without this check a tx could pass admission with `gasLimit < required`\n // and either fail at execution or get unfairly under-charged for the\n // resources it actually uses. Reported alongside any balance shortfall\n // so the caller sees every reason the tx was rejected.\n if (wrapper.fees.gasLimit < gasRequired) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`,\n ))\n }\n // Charge the MAX fee budget at admission \u2014 same rule the block validator\n // (`BlockCumulativeBalanceValidator`) uses post-submit: `base + priority\n // + gasLimit`. Using `gasRequired \u00D7 gasPrice` here (the expected cost)\n // is strictly weaker than the block validator and lets txs whose\n // declared `gasLimit` exceeds the sender's balance through admission.\n // They then fail block validation with \"Cumulative outflow ... exceeds\n // available balance\" and the chain wedges (producer self-mutes for\n // ~150s after a successful-looking submit). Tracked in the\n // api-local-mongodb-beta repro: 783 stuck pending txs of this exact\n // shape, all with gasLimit \u2248 23.6 XL1 against \u2248 12 XL1 balance.\n const baseCost = wrapper.fees.base\n const priorityCost = wrapper.fees.priority\n const maxGasCost = wrapper.fees.gasLimit\n const fromKey = String(from)\n netBalances[fromKey] = (netBalances[fromKey] ?? 0n) - baseCost - priorityCost - maxGasCost\n\n const requiredBalances: Record<string, bigint> = {}\n for (const [address, net] of Object.entries(netBalances)) {\n const propertyKey = String(address)\n if (net < 0n) requiredBalances[propertyKey] = -net\n }\n\n errors.push(...(await balanceShortfallErrors(context, tx, requiredBalances)))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed RequiredBalanceTransactionStateValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockBoundWitnessValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const validators: BlockValidatorFunction[] = [\n BlockBoundWitnessValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, block, chainId))))\n }\n } catch (ex) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted', ex))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport {\n BlockValidationError,\n isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-sdk'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `payload schema not allowed in block: ${String(schema)}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport { BoundWitnessValidator } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nconst error = (block: BlockBoundWitness, message: string): BlockValidationError =>\n new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, message)\n\n// Friendly pre-check for the same wallet/producer bug surfaced on the\n// transaction side: signatures emitted under `signatures` instead of\n// `$signatures`. Mirrors TransactionBoundWitnessValidator.\nconst checkSignaturesShape = (block: BlockBoundWitness): BlockValidationError[] => {\n const bw = block as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(block, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(block, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the block's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. Mirrors TransactionBoundWitnessValidator\n * for blocks. Covers signatures (length parity + per-address elliptic-curve\n * verification against the BW data hash), addresses uniqueness,\n * payload_hashes/payload_schemas length parity, schemas, and top-level\n * schema check.\n */\nexport const BlockBoundWitnessValidator: BlockValidatorFunction = async (\n _context,\n block,\n) => {\n try {\n const shapeErrors = checkSignaturesShape(block)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(block)\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(block, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)]\n }\n}\n", "import type { Hash } from '@ariestools/sdk'\nimport { isDefined, ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport { BoundWitnessSchema } from '@xyo-network/sdk'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\n) => {\n const errors: BlockValidationError[] = []\n try {\n if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))\n }\n\n // get transaction hashes\n const txHashes: Hash[] = []\n for (let i = 0; i < block.payload_hashes.length; i++) {\n if (block.payload_schemas[i] === BoundWitnessSchema) {\n txHashes.push(block.payload_hashes[i])\n }\n }\n\n // check if transaction hashes are unique\n const uniqueTxHashes = new Set(txHashes)\n if (uniqueTxHashes.size < txHashes.length) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Duplicate Transaction Hashes: ${txHashes.join(', ')}`,\n ))\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { isHash, ZERO_HASH } from '@ariestools/sdk'\nimport type { WithStorageMeta } from '@xyo-network/sdk'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${String(ex)}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n", "import type { Promisable } from '@ariestools/sdk'\nimport { ZERO_HASH } from '@ariestools/sdk'\nimport type {\n BaseContext,\n BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n context: BaseContext,\n hydratedBlock: HydratedBlockWithHashMeta,\n chainIdAtBlockNumber?: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(\n context,\n hydratedBlock[0],\n chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,\n additionalBlockValidators,\n )\n for (const validateBlockError of validateBlockErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))\n }\n const bwRefErrors = await BoundWitnessReferencesValidator()(hydratedBlock)\n for (const bwRefError of bwRefErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `boundwitness reference error: ${bwRefError}`, bwRefError))\n }\n const validators: HydratedBlockValidationFunction[] = [\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, hydratedBlock, chainIdAtBlockNumber))))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed validateHydratedBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n context,\n [block, payloads],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<string, WithHashMeta<Payload>>> = {}\n for (const payload of payloads) {\n const propertyKey = String(payload._hash)\n payloadMap[propertyKey] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const propertyKey = String(block.payload_hashes[i])\n const schema = block.payload_schemas[i]\n const payload = payloadMap[propertyKey]\n if (payload) {\n const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [block, payloads])\n for (const payloadInBlockError of payloadInBlockErrors) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `validatePayloadInBlock error: ${payloadInBlockError}`,\n payloadInBlockError,\n ))\n }\n delete remainingPayloads[propertyKey]\n } else {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `missing payload ${propertyKey} ${schema}`))\n }\n }\n\n if (Object.keys(remainingPayloads).length > 0) {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `Failed PayloadsInBlockValidator: ${String(ex)}`,\n ex,\n ))\n }\n\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Schema } from '@xyo-network/sdk'\nimport { BoundWitnessSchema, SchemaSchema } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, BridgeIntentSchema, BridgeSourceObservationSchema, ChainStakeIntentSchema, ClaimSchema, HashSchema,\n InBlockPayloadValidationError,\n SlashAdjudicationSchema, SlashChallengeSchema, SlashCommitSchema, SlashEvidenceSchema, SlashRequestSchema,\n TimeSchema, TransferSchema,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateBridgeDestinationObservationInBlock, validateBridgeIntentInBlock, validateBridgeSourceObservationInBlock, validateChainStakeIntentInBlock,\n validateClaimInBlock,\n validateHashInBlock, validateSchemaInBlock,\n validateSlashAdjudicationInBlock, validateSlashChallengeInBlock, validateSlashCommitInBlock,\n validateSlashEvidenceInBlock, validateSlashRequestInBlock,\n validateTimeInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [BoundWitnessSchema]: validateTransactionInBlock,\n [BridgeDestinationObservationSchema]: validateBridgeDestinationObservationInBlock,\n [BridgeIntentSchema]: validateBridgeIntentInBlock,\n [BridgeSourceObservationSchema]: validateBridgeSourceObservationInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [ClaimSchema]: validateClaimInBlock,\n [HashSchema]: validateHashInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [SlashAdjudicationSchema]: validateSlashAdjudicationInBlock,\n [SlashChallengeSchema]: validateSlashChallengeInBlock,\n [SlashCommitSchema]: validateSlashCommitInBlock,\n [SlashEvidenceSchema]: validateSlashEvidenceInBlock,\n [SlashRequestSchema]: validateSlashRequestInBlock,\n [TimeSchema]: validateTimeInBlock,\n [TransferSchema]: validateTransferInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...(await validator(context, payload, block)))\n } else {\n errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (ex) {\n const error = new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n )\n errors.push(error)\n }\n return errors\n}\n", "import type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockWithHashMeta, TransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-sdk'\nimport { ELEVATE_OPCODE, isTransactionBoundWitnessWithHashMeta } from '@xyo-network/xl1-sdk'\n\n/**\n * The transaction in this block that elevated the payload, when one did.\n *\n * A payload can also ride directly in the block, elevated by the block signer rather than by a\n * transaction. Callers that need a signer to bind against must be able to tell the two apart,\n * because those two paths attribute the payload to entirely different addresses.\n * @param payload The payload being validated\n * @param block The hydrated block carrying it\n * @returns The elevating transaction, or undefined when the payload rode directly\n */\nexport function findElevatingTransaction(\n payload: WithHashMeta<Payload>,\n [, payloads]: HydratedBlockWithHashMeta,\n): TransactionBoundWitnessWithHashMeta | undefined {\n const elevateOperation = `${ELEVATE_OPCODE}|${payload._hash}`\n return payloads\n .filter(candidate => isTransactionBoundWitnessWithHashMeta(candidate))\n .find(tx => tx.payload_hashes.includes(payload._hash) && tx.script?.includes(elevateOperation) === true)\n}\n", "import type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport const isElevatedFromBlock = (payload: WithHashMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n", "import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n const allTxPayloadHashes = new Set(txs.flatMap(tx => tx.payload_hashes))\n if (allTxPayloadHashes.has(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash,\n block,\n payload,\n `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`,\n ))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${String(ex)}`, ex))\n }\n return errors\n}\n", "import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n if (txs.length > 0) {\n const hashes = txs.flatMap(tx => tx.payload_hashes)\n if (!hashes.includes(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Transaction does not include payload'))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'No Transactions in block'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `Failed validateElevatedFromTransaction: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import type { IdentityFunction } from '@ariestools/sdk'\nimport type { Payload, XyoAddress } from '@xyo-network/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type {\n HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext, InBlockRuleParams,\n TransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport { requireRuleActive, resolveRuleParams } from '@xyo-network/xl1-sdk'\n\nimport { findElevatingTransaction } from './findElevatingTransaction.ts'\n\n/** What the shared slash-payload checks concluded, plus the rules the caller still needs. */\nexport interface SlashPayloadGateResult {\n /** Reasons the payload is not admissible; empty when the shared checks passed. */\n errors: Error[]\n /** The rules in force at the carrying height, when they resolved. */\n params?: InBlockRuleParams\n /** The transaction that elevated the payload, once binding has confirmed it. */\n transaction?: TransactionBoundWitnessWithHashMeta\n}\n\n/**\n * The checks every slash payload shares: the activation gate, then signer binding.\n *\n * Every slash payload is transaction-elevation-only. A payload riding directly in the block would\n * bind to the block signer instead of a transaction sender, and nothing in the design says what\n * that would mean \u2014 so that path is refused rather than guessed at. Binding `from` to the\n * elevating transaction's sender gets self-signing discipline transitively, since the transaction\n * validator has already tied `tx.from` to a verified bound-witness signer.\n *\n * The resolved rules come back so a caller can ask its own questions of them without resolving\n * the register a second time, and so the gate stays the only place that decides admissibility.\n * @param context The validation context, which may carry no register at all\n * @param payload The payload being validated\n * @param block The hydrated block carrying it\n * @param identityFunction Guard establishing the payload is the type expected\n * @param fromOf Reads the address the payload claims to be from\n * @param subject What is being gated, named for the error message\n * @returns The shared verdict and the rules in force\n */\nexport async function validateSlashPayloadInBlock<T extends Payload>(\n context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\n identityFunction: IdentityFunction<T>,\n fromOf: (payload: T) => XyoAddress,\n subject: string,\n): Promise<SlashPayloadGateResult> {\n const height = block[0].block\n const params = await resolveRuleParams(context, height)\n const gateError = requireRuleActive(params, 'slash-payloads', height, subject)\n if (gateError !== undefined) return { errors: [new Error(gateError)], params }\n\n if (!identityFunction(payload) || !isHashMeta(payload)) {\n return { errors: [new Error(`${subject} failed its identity check`)], params }\n }\n\n const transaction = findElevatingTransaction(payload, block)\n if (transaction === undefined) {\n return { errors: [new Error(`${subject} must be elevated from a transaction`)], params }\n }\n if (fromOf(payload) !== transaction.from) {\n return { errors: [new Error(`${subject} from must equal elevating transaction from`)], params }\n }\n\n return {\n errors: [], params, transaction,\n }\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BoundWitnessSignaturesValidator, InBlockPayloadValidationError, isTransactionBoundWitness, validateTransaction,\n} from '@xyo-network/xl1-sdk'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n // Hydrate this transaction from its own commitments only. Passing the entire block payload\n // set lets one transaction resolve an elevation body committed by another transaction, and\n // duplicate block bodies make an otherwise valid repeated elevation appear duplicated.\n const transactionPayloads = [...new Set(payload.payload_hashes)].flatMap((hash) => {\n const referencedPayload = block[1].find(candidate => isHashMeta(candidate)\n && (candidate._hash === hash || candidate._dataHash === hash))\n return referencedPayload === undefined ? [] : [referencedPayload]\n })\n const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, transactionPayloads])\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `TransactionValidation error: ${txError}`,\n txError,\n ))\n }\n const txSignatureErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txSignatureError of txSignatureErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `BoundWitnessSignaturesValidator error: ${txSignatureError}`,\n txSignatureError,\n ))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isHashMeta'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(payload._hash ?? ZERO_HASH, block, payload, `validation excepted: ${String(ex)}`, ex))\n }\n return errors\n}\n", "import type { IdentityFunction } from '@ariestools/sdk'\nimport type { Payload } from '@xyo-network/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext } from '@xyo-network/xl1-sdk'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isHashMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...(await validateElevatedFromBlock(context, payload, block)))\n } else {\n errors.push(...(await validateElevatedFromTransaction(context, payload, block)))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${String(ex)}`))\n }\n return errors\n}\n//\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeDestinationObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeDestinationObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeObservationInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeIntentInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeSourceObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeSourceObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateBridgeObservationInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isChainStakeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { HashRegEx, ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n Claim, HydratedBlockWithHashMeta, InBlockPayloadValidationFunction,\n TransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n ClaimSchema, ELEVATE_OPCODE, InBlockPayloadValidationError,\n isClaimPayload, isTransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\n\nconst CLAIM_FIELDS = new Set(['schema', 'hashes', 'source', 'subject', '$version', '$sources'])\n\n/** Checks signed keys and client metadata outside the complete Claim identity guard. */\nfunction validateStrictClaimFields(claim: Claim): string[] {\n const errors = Object.keys(claim)\n .filter(field => !CLAIM_FIELDS.has(field))\n .map(field => `Unknown Claim field ${field}`)\n const sources = '$sources' in claim ? claim.$sources : undefined\n\n // ClaimPayloadJsonSchema permits an optional hash array, including empty arrays and duplicates.\n if (sources !== undefined) {\n if (Array.isArray(sources)) {\n for (const [index, source] of sources.entries()) {\n if (typeof source !== 'string' || !HashRegEx.test(source)) {\n errors.push(`Claim $sources/${index} must be a hash`)\n }\n }\n } else {\n errors.push('Claim $sources must be an array of hashes')\n }\n }\n\n return errors\n}\n\nfunction claimError(\n payload: WithHashMeta<Payload>,\n block: HydratedBlockWithHashMeta,\n message: string,\n cause?: unknown,\n): InBlockPayloadValidationError {\n return new InBlockPayloadValidationError(\n payload._hash ?? block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n message,\n cause,\n )\n}\n\nfunction indexesOf<T>(values: readonly T[], value: T): number[] {\n const indexes: number[] = []\n for (const [index, candidate] of values.entries()) {\n if (candidate === value) indexes.push(index)\n }\n return indexes\n}\n\nfunction validateClaimSchemaPairs(\n payload: WithHashMeta<Payload>,\n block: HydratedBlockWithHashMeta,\n transaction?: TransactionBoundWitnessWithHashMeta,\n): InBlockPayloadValidationError[] {\n const carrier = transaction ?? block[0]\n const carrierName = transaction === undefined ? 'Block' : `Transaction ${transaction._hash}`\n const indexes = indexesOf(carrier.payload_hashes, payload._hash)\n if (indexes.length === 0) {\n return [claimError(payload, block, `${carrierName} does not commit Claim root hash ${payload._hash}`)]\n }\n if (indexes.some(index => carrier.payload_schemas[index] !== ClaimSchema)) {\n return [claimError(payload, block, `${carrierName} does not pair every Claim root hash with ${ClaimSchema}`)]\n }\n return []\n}\n\ninterface ClaimElevationAttempt {\n malformedOperations: string[]\n transaction: TransactionBoundWitnessWithHashMeta\n validOperationCount: number\n}\n\nfunction claimElevationAttempts(\n payload: WithHashMeta<Payload>,\n [, payloads]: HydratedBlockWithHashMeta,\n): ClaimElevationAttempt[] {\n const exactOperation = `${ELEVATE_OPCODE}|${payload._hash}`\n const operationPrefix = `${exactOperation}|`\n const transactions = payloads.filter(candidate => isTransactionBoundWitnessWithHashMeta(candidate))\n\n return transactions.flatMap((transaction) => {\n const operations = transaction.script ?? []\n const validOperationCount = operations.filter(operation => operation === exactOperation).length\n const malformedOperations = operations.filter(operation => operation.startsWith(operationPrefix))\n return validOperationCount === 0 && malformedOperations.length === 0\n ? []\n : [{\n malformedOperations, transaction, validOperationCount,\n }]\n })\n}\n\nfunction validateElevatingTransaction(\n claim: Claim,\n payload: WithHashMeta<Payload>,\n block: HydratedBlockWithHashMeta,\n attempt: ClaimElevationAttempt,\n): InBlockPayloadValidationError[] {\n const errors: InBlockPayloadValidationError[] = []\n const {\n malformedOperations, transaction, validOperationCount,\n } = attempt\n\n if (malformedOperations.length > 0) {\n errors.push(claimError(\n payload,\n block,\n `Transaction ${transaction._hash} contains malformed Claim elevation operations: ${malformedOperations.join(', ')}`,\n ))\n }\n if (validOperationCount > 1) {\n errors.push(claimError(payload, block, `Transaction ${transaction._hash} contains duplicate Claim elevation operations`))\n }\n if (validOperationCount !== 1) return errors\n\n errors.push(...validateClaimSchemaPairs(payload, block, transaction))\n\n if (!transaction.addresses.includes(claim.source)) {\n errors.push(claimError(payload, block, `Claim source ${claim.source} is not a signer of transaction ${transaction._hash}`))\n }\n\n const committedHashes = new Set(transaction.payload_hashes)\n const missingHashes = claim.hashes.filter(hash => !committedHashes.has(hash))\n if (missingHashes.length > 0) {\n errors.push(claimError(\n payload,\n block,\n `Transaction ${transaction._hash} does not commit every Claim hash: ${missingHashes.join(', ')}`,\n ))\n }\n\n return errors\n}\n\n/** Validates the strict, transaction-authenticated consensus contract for an elevated Claim. */\nexport const validateClaimInBlock: InBlockPayloadValidationFunction = async (\n _context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n try {\n const canonicalPayload = PayloadBuilder.omitStorageMeta(payload)\n if (canonicalPayload.schema !== ClaimSchema || !isClaimPayload(canonicalPayload)) {\n return [claimError(payload, block, 'Claim failed its complete payload identity check')]\n }\n\n const strictErrors = validateStrictClaimFields(canonicalPayload)\n if (strictErrors.length > 0) {\n return [claimError(payload, block, `Claim failed strict payload validation: ${strictErrors.join('; ')}`, strictErrors)]\n }\n\n const canonicalHash = await PayloadBuilder.hash(canonicalPayload)\n if (canonicalHash !== payload._hash) {\n return [claimError(payload, block, `Claim canonical root hash ${canonicalHash} does not match asserted hash ${payload._hash}`)]\n }\n\n const errors = validateClaimSchemaPairs(payload, block)\n const attempts = claimElevationAttempts(payload, block)\n const exactAttempts = attempts.filter(attempt => attempt.validOperationCount > 0)\n\n for (const attempt of attempts) {\n errors.push(...validateElevatingTransaction(canonicalPayload, payload, block, attempt))\n }\n\n if (exactAttempts.length === 0) {\n errors.push(claimError(payload, block, 'Claim must be elevated from a transaction with an exact elevate operation'))\n }\n\n return errors\n } catch (ex) {\n return [claimError(payload, block, `Failed validateClaimInBlock: ${String(ex)}`, ex)]\n }\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isHashPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isSchemaPayload } from '@xyo-network/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isSchemaPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateSchemaInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isSlashAdjudication } from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * Validates a slash adjudication carried in a block.\n *\n * Only the arbiter named by the register may close a report, and that binding survives well past\n * the point where reporting itself opens up \u2014 an adjudication from anyone else is not a minority\n * opinion, it is a forged verdict.\n *\n * Whether a confirmed adjudication names its claimant is an arbiter duty checked when the\n * adjudication is recomputed, not a question of block validity. A block carrying a sloppy but\n * genuine verdict is still a valid block.\n */\nexport const validateSlashAdjudicationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const { errors: sharedErrors, params } = await validateSlashPayloadInBlock(context, payload, block, isSlashAdjudication, adjudication => adjudication.from, 'slash adjudication')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n if (sharedErrors.length === 0 && isSlashAdjudication(payload)\n && (params?.arbiter === undefined || payload.from !== params.arbiter)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'slash adjudication from must equal the register arbiter'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isSlashChallenge } from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * Validates a slash challenge carried in a block.\n *\n * Anyone may challenge and no bond is required, because a challenge can only exculpate. A\n * frivolous one fails to change the verdict and costs its filer the fee; there is no version of it\n * that harms the accused, so there is nothing here to deter.\n */\nexport const validateSlashChallengeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const { errors: sharedErrors } = await validateSlashPayloadInBlock(context, payload, block, isSlashChallenge, subject => subject.from, 'slash challenge')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport type {\n InBlockPayloadValidationFunction, InBlockRuleParams, SlashCommit,\n TransactionBoundWitnessWithHashMeta,\n} from '@xyo-network/xl1-sdk'\nimport {\n derivedReceiveAddress, InBlockPayloadValidationError, isRuleActiveAt, isSlashCommit, isTransferPayload,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/** Reads a register amount, which is carried as an unprefixed hex string. */\nfunction toAmount(value: string): bigint {\n return BigInt(value.startsWith('0x') ? value : `0x${value}`)\n}\n\n/**\n * Whether a commitment has to escrow a deposit at this height.\n *\n * The deposit is what a reporter stands to lose for filing garbage, so it is only required while\n * nothing else is playing that role. Once bad reports are themselves an adjudicable offense, the\n * counter-slash is the deterrent and charging a deposit on top would just tax honest reporters.\n */\nfunction isDepositRequired(params: InBlockRuleParams, height: number): boolean {\n return isRuleActiveAt(params, 'eligibility-admission', height)\n && !isRuleActiveAt(params, 'invalid-slash-request.adjudicable', height)\n}\n\n/** Total escrowed to the reporter's deposit address by transfers in the same transaction. */\nfunction depositedInTransaction(\n commit: SlashCommit,\n transaction: TransactionBoundWitnessWithHashMeta,\n payloads: WithHashMeta<Payload>[],\n): bigint {\n const target = derivedReceiveAddress(commit.from, 'slash-deposit')\n const inTransaction = new Set(transaction.payload_hashes)\n return payloads\n .filter(candidate => inTransaction.has(candidate._hash))\n .filter(candidate => isTransferPayload(candidate))\n .reduce((total, transfer) => total + toAmount(transfer.transfers[target] ?? '0x0'), 0n)\n}\n\n/**\n * Validates a slash commitment carried in a block.\n *\n * A commitment reserves a report before its evidence is public, which is what stops a reporter's\n * work from being lifted from the mempool and re-filed under someone else's name. The commitment\n * itself is opaque here by design \u2014 checking what it hides is the reveal's job.\n */\nexport const validateSlashCommitInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const {\n errors: sharedErrors, params, transaction,\n } = await validateSlashPayloadInBlock(context, payload, block, isSlashCommit, commit => commit.from, 'slash commit')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n if (sharedErrors.length > 0 || params === undefined || transaction === undefined || !isSlashCommit(payload)) {\n return errors\n }\n\n const height = block[0].block\n if (isDepositRequired(params, height)) {\n const required = toAmount(params.reporterDepositAtto ?? '0x0')\n const deposited = depositedInTransaction(payload, transaction, block[1])\n if (deposited < required) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `slash commit escrows ${deposited} but the register requires ${required}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isSlashEvidence } from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * Validates a slash evidence carried in a block.\n *\n * A container carries artifacts and asserts nothing about them, so past the activation gate and\n * signer binding there is nothing left to check. No size ceiling is imposed: character storage is\n * already priced by gas, so an oversized container costs its sender what it costs the chain.\n */\nexport const validateSlashEvidenceInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const { errors: sharedErrors } = await validateSlashPayloadInBlock(context, payload, block, isSlashEvidence, subject => subject.from, 'slash evidence')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { Payload, WithHashMeta } from '@xyo-network/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type {\n InBlockPayloadValidationFunction, InBlockPayloadValidationFunctionContext, InBlockRuleParams,\n SlashRequest, TransactionBoundWitnessWithHashMeta, XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport {\n InBlockPayloadValidationError, isRuleObservedAt, isSlashEvidence, isSlashRequest, reportableRuleId,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateSlashPayloadInBlock } from '../lib/index.ts'\n\n/**\n * The artifact hashes actually carried by evidence containers in the same transaction.\n *\n * Identity is recomputed from each artifact rather than read from any claim about it. A container\n * that names a hash it does not carry proves nothing, and letting the claim stand in for the\n * artifact is exactly how a fabricated report would pass.\n */\nasync function carriedArtifactHashes(\n transaction: TransactionBoundWitnessWithHashMeta,\n payloads: WithHashMeta<Payload>[],\n): Promise<Set<string>> {\n const inTransaction = new Set(transaction.payload_hashes)\n const artifacts = payloads\n .filter(candidate => inTransaction.has(candidate._hash))\n .filter(candidate => isSlashEvidence(candidate))\n // the container types its artifacts loosely; they are payload-shaped by construction\n .flatMap(container => container.artifacts as unknown as Payload[])\n return new Set(await Promise.all(artifacts.map(artifact => PayloadBuilder.dataHash(artifact))))\n}\n\n/**\n * Why a request's evidence cannot be resolved, empty when all of it can.\n *\n * Evidence either rides along in the same transaction or was finalized earlier. When the second\n * case cannot be checked at all, this fails closed: a node that cannot verify a requirement must\n * not certify the block. That does mean a misconfigured node rejects blocks its peers accept, so\n * the resolver has to be wired before the activation height, never after.\n */\nasync function evidenceResolutionErrors(\n context: InBlockPayloadValidationFunctionContext,\n request: SlashRequest,\n carried: Set<string>,\n height: XL1BlockNumber,\n): Promise<string[]> {\n const missing = request.evidence.filter(hash => !carried.has(hash))\n if (missing.length === 0) return []\n const resolver = context.hasFinalizedEvidenceArtifact\n if (resolver === undefined) {\n return ['evidence resolver unavailable: cannot certify a block whose evidence it cannot check']\n }\n const resolved = await Promise.all(missing.map(async hash => ({ found: await resolver(hash, height), hash })))\n return resolved.filter(({ found }) => !found).map(({ hash }) => `unresolvable evidence artifact ${hash}`)\n}\n\n/**\n * Whether the offense a request names was reportable at the height the offense happened.\n *\n * Resolved through the shared rule vocabulary rather than a raw activation read so that a\n * recorded deactivation closes this gate too. Emission already honors rollbacks; if admission\n * did not, third parties could keep filing against a rule the register has switched off.\n */\nfunction isOffenseReportable(params: InBlockRuleParams, request: SlashRequest): boolean {\n return isRuleObservedAt(params, reportableRuleId(request.offense), request.block)\n}\n\n/**\n * Validates a slash request carried in a block.\n *\n * A request is a recordable transaction, not a verdict, so this checks that it is well-formed and\n * that its evidence exists \u2014 never whether the accusation is true. An unverifiable request is\n * still a valid request; deciding it is the arbiter's job.\n *\n * The reportable gate is asked of the height the offense happened at, not the height the report\n * lands at. Comparing against the carrying height would make a rule retroactive and turn conduct\n * that was legal when it occurred into an offense.\n */\nexport const validateSlashRequestInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n const fail = (message: string) =>\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, message))\n try {\n const {\n errors: sharedErrors, params, transaction,\n } = await validateSlashPayloadInBlock(context, payload, block, isSlashRequest, request => request.from, 'slash request')\n for (const sharedError of sharedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, sharedError.message, sharedError))\n }\n if (sharedErrors.length > 0 || params === undefined || transaction === undefined || !isSlashRequest(payload)) {\n return errors\n }\n\n if (!isOffenseReportable(params, payload)) {\n fail(`offense '${payload.offense}' was not reportable at block ${payload.block}`)\n }\n\n const carried = await carriedArtifactHashes(transaction, block[1])\n for (const problem of await evidenceResolutionErrors(context, payload, carried, block[0].block)) {\n fail(problem)\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTimeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTimeInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTransferPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTransferPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTransferInBlock: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { isHashMeta } from '@xyo-network/sdk'\nimport type { HydratedBlockValidationFunction, HydratedTransactionValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\n/**\n * Builds a block-level validator that runs `transfersValidator` against every transaction\n * in the block, mapping any transaction errors to block errors. This is how the\n * reward-redemption signing gate (a `TransactionTransfersValidator`) is enforced during\n * block validation \u2014 pass the result as an `additionalValidators` entry to\n * `validateHydratedBlock`.\n */\nexport function TransactionTransfersInBlockValidatorFactory(\n transfersValidator: HydratedTransactionValidationFunction,\n): HydratedBlockValidationFunction {\n return async (context, hydratedBlock) => {\n const [block, payloads] = hydratedBlock\n const errors: HydratedBlockValidationError[] = []\n try {\n for (const payload of payloads) {\n if (isTransactionBoundWitness(payload) && isHashMeta(payload)) {\n const txErrors = await transfersValidator({ ...context, chainId: block.chain }, [payload, payloads])\n for (const txError of txErrors) {\n errors.push(new HydratedBlockValidationError(payload._hash, hydratedBlock, `transfer authorization error: ${txError}`, txError))\n }\n }\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed TransactionTransfersInBlockValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }\n}\n", "import { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n context,\n hydratedBlock,\n additionalValidators = [],\n) => {\n return await spanRootAsync('validateHydratedBlockState', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId: ChainId | undefined\n try {\n chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block)\n const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber)\n for (const validateHydratedBlockError of validateHydratedBlockErrors) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock[0]._hash,\n chainId,\n hydratedBlock,\n `validateBlock error: ${validateHydratedBlockError}`,\n validateHydratedBlockError,\n ))\n }\n const validators: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, hydratedBlock))))\n }\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId ?? '00' as ChainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address, Hash } from '@ariestools/sdk'\nimport { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1, HydratedBlockStateValidationError,\n isSignedTransactionBoundWitnessWithHashMeta,\n netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nfunction offendingTransactionHashesForAddress(block: Parameters<HydratedBlockStateValidationFunction>[1], address: Address): Hash[] {\n const hashes: Hash[] = []\n for (const payload of block[1]) {\n if (isSignedTransactionBoundWitnessWithHashMeta(payload) && payload.from === address) {\n hashes.push(payload._hash)\n }\n }\n return hashes\n}\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n context,\n block,\n) => {\n return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId = '00' as ChainId\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads({ singletons: {} }, (block[1]))\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<string, bigint> = {}\n for (const address of netBalanceAddresses) {\n const propertyKey = String(address)\n const netBalance = (netBalances as Record<string, bigint>)[propertyKey]\n if (netBalance < 0n) {\n requiredBalances[propertyKey] = -netBalance\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n '00' as ChainId,\n block,\n 'Insufficient funds because first block',\n )]\n chainId = await context.chainIdAtBlockNumber(block[0].block)\n await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {\n // Every address needing a balance is known up front and the lookups are independent, so\n // they go out as one request. Awaiting one `accountBalances([address])` per address inside\n // the loop cost a full round trip each wherever the AccountBalanceViewer is bound over RPC,\n // and this validator runs once per attempt of the producer's build/validate retry loop \u2014\n // up to one attempt per transaction in the candidate.\n const requiredAddresses = Object.keys(requiredBalances) as Address[]\n if (requiredAddresses.length === 0) return\n const balances = await context.accountBalance.accountBalances(requiredAddresses, { head: previous })\n for (const address of requiredAddresses) {\n const reqBalance = requiredBalances[address]\n const balance = balances[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address)\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n undefined,\n offendingTransactionHashes.length > 0 ? offendingTransactionHashes : undefined,\n ))\n }\n }\n }, context)\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-sdk'\n\nimport { RequiredBalanceTransactionStateValidator } from './validators/index.ts'\n\nexport const validateHydratedTransactionState: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('validateHydratedTransactionState', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const validators: HydratedTransactionStateValidationFunction[] = [\n RequiredBalanceTransactionStateValidator,\n ]\n for (const validator of validators) {\n errors.push(...(await Promise.resolve(validator(context, tx))))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed validateHydratedTransactionState: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n", "import type { Address } from '@ariestools/sdk'\nimport { spanRootAsync, ZERO_HASH } from '@ariestools/sdk'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n HydratedTransactionWrapper,\n netBalancesForPayloads,\n transactionRequiredGas,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\ntype ValidatorContext = Parameters<HydratedTransactionStateValidationFunction>[0]\ntype ValidatorTx = Parameters<HydratedTransactionStateValidationFunction>[1]\n\n/**\n * For each address with a negative net balance, look up the actual on-chain\n * balance at the current head and emit an `insufficient balance` error if it\n * can't cover the required amount.\n */\nasync function balanceShortfallErrors(\n context: ValidatorContext,\n tx: ValidatorTx,\n requiredBalances: Record<string, bigint>,\n): Promise<HydratedTransactionValidationError[]> {\n const errors: HydratedTransactionValidationError[] = []\n const requiredAddresses = Object.keys(requiredBalances)\n if (requiredAddresses.length === 0) return errors\n const [headBlock] = await context.blockViewer.currentBlock()\n const balances = await context.accountBalanceViewer.accountBalances(\n requiredAddresses as Address[],\n { head: headBlock._hash },\n )\n const balancesByKey = balances as Record<string, bigint>\n for (const address of requiredAddresses) {\n const propertyKey = String(address)\n const reqBalance = requiredBalances[propertyKey]\n const balance = balancesByKey[propertyKey] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n ))\n }\n }\n return errors\n}\n\nexport const RequiredBalanceTransactionStateValidator: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('RequiredBalanceTransactionStateValidator', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const netBalances = netBalancesForPayloads({ singletons: {} }, tx[1]) as Record<string, bigint>\n\n const wrapper = await HydratedTransactionWrapper.parse(tx)\n const from = wrapper.boundWitness.from as Address\n const gasRequired = transactionRequiredGas(tx)\n // Declared gas limit must cover the gas the tx will actually consume.\n // Without this check a tx could pass admission with `gasLimit < required`\n // and either fail at execution or get unfairly under-charged for the\n // resources it actually uses. Reported alongside any balance shortfall\n // so the caller sees every reason the tx was rejected.\n if (wrapper.fees.gasLimit < gasRequired) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`,\n ))\n }\n // Charge the MAX fee budget at admission \u2014 same rule the block validator\n // (`BlockCumulativeBalanceValidator`) uses post-submit: `base + priority\n // + gasLimit`. Using `gasRequired \u00D7 gasPrice` here (the expected cost)\n // is strictly weaker than the block validator and lets txs whose\n // declared `gasLimit` exceeds the sender's balance through admission.\n // They then fail block validation with \"Cumulative outflow ... exceeds\n // available balance\" and the chain wedges (producer self-mutes for\n // ~150s after a successful-looking submit). Tracked in the\n // api-local-mongodb-beta repro: 783 stuck pending txs of this exact\n // shape, all with gasLimit \u2248 23.6 XL1 against \u2248 12 XL1 balance.\n const baseCost = wrapper.fees.base\n const priorityCost = wrapper.fees.priority\n const maxGasCost = wrapper.fees.gasLimit\n const fromKey = String(from)\n netBalances[fromKey] = (netBalances[fromKey] ?? 0n) - baseCost - priorityCost - maxGasCost\n\n const requiredBalances: Record<string, bigint> = {}\n for (const [address, net] of Object.entries(netBalances)) {\n const propertyKey = String(address)\n if (net < 0n) requiredBalances[propertyKey] = -net\n }\n\n errors.push(...(await balanceShortfallErrors(context, tx, requiredBalances)))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed RequiredBalanceTransactionStateValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "error", "BlockValidationError", "ZERO_HASH", "ZERO_HASH", "HydratedBlockValidationError", "ZERO_HASH", "ZERO_HASH", "BoundWitnessSchema", "ClaimSchema", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "transactionsFromHydratedBlock", "ZERO_HASH", "isHashMeta", "InBlockPayloadValidationError", "isTransactionBoundWitness", "isHashMeta", "isHashMeta", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "ELEVATE_OPCODE", "InBlockPayloadValidationError", "isTransactionBoundWitnessWithHashMeta", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "PayloadBuilder", "InBlockPayloadValidationError", "isSlashEvidence", "isSlashEvidence", "PayloadBuilder", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "isTransferPayload", "isTransferPayload", "InBlockPayloadValidationError", "ZERO_HASH", "BoundWitnessSchema", "ClaimSchema", "InBlockPayloadValidationError", "ZERO_HASH", "error", "ZERO_HASH", "ZERO_HASH", "isHashMeta", "HydratedBlockValidationError", "isTransactionBoundWitness", "HydratedBlockValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedTransactionValidationError", "spanRootAsync", "ZERO_HASH", "AttoXL1", "netBalancesForPayloads", "XYO_ZERO_ADDRESS", "spanRootAsync", "HydratedTransactionValidationError", "ZERO_HASH"]
|
|
7
7
|
}
|
|
@@ -225,6 +225,25 @@ export declare class SimpleBlockRunner extends AbstractCreatableProvider<SimpleB
|
|
|
225
225
|
* @returns The prior candidate's signed data hash, or undefined when there is none
|
|
226
226
|
*/
|
|
227
227
|
private previousOwnCandidateHash;
|
|
228
|
+
/**
|
|
229
|
+
* Balances for every distinct sender that has a paired transfer, read at `head` in one request.
|
|
230
|
+
*
|
|
231
|
+
* Senders are all known before any balance is needed and the lookups are independent, so they go
|
|
232
|
+
* out together. The previous shape awaited one `accountBalances([from])` per distinct sender
|
|
233
|
+
* inside the filter loop — a full round trip each wherever the viewer is bound over RPC, so the
|
|
234
|
+
* filter slowed in proportion to how busy the chain was, worst when candidates are contested.
|
|
235
|
+
*
|
|
236
|
+
* Reads are qualified to the parent `head`, matching the post-submit block validator
|
|
237
|
+
* (`RequiredBalanceBlockStateValidator` reads at `block[0].previous`). Unqualified reads resolved
|
|
238
|
+
* the viewer's *current* head per call, so the producer could admit a tx against a balance the
|
|
239
|
+
* validator would then reject — the wedge this filter exists to prevent — and successive senders
|
|
240
|
+
* could be read at different heads if the head moved mid-loop.
|
|
241
|
+
* @param head Hash of the parent block the candidate builds on
|
|
242
|
+
* @param txs The candidate transactions, in inclusion order
|
|
243
|
+
* @param transferByFrom Fee transfers keyed by sender, first transfer per sender
|
|
244
|
+
* @returns Balance at `head` per distinct sender, zero when the viewer omits one
|
|
245
|
+
*/
|
|
246
|
+
private readSenderBalances;
|
|
228
247
|
private rejectExhaustedBlock;
|
|
229
248
|
private rejectWrongChainTransactions;
|
|
230
249
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleBlockRunner.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/services/simple/block/runner/SimpleBlockRunner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SimpleBlockRunner.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/services/simple/block/runner/SimpleBlockRunner.ts"],"names":[],"mappings":"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"}
|
package/dist/node/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const SIMPLE_BLOCK_RUNNER_INSTRUMENTATION_SINGLETON = "simpleBlockRunnerInstrumentation";
|
|
2
|
-
export declare const SimpleBlockRunnerTimingNames: readonly ["mempoolPendingBlocksFetch", "mempoolPendingTransactionsFetch"];
|
|
2
|
+
export declare const SimpleBlockRunnerTimingNames: readonly ["blockRewardTransfers", "mempoolPendingBlocksFetch", "mempoolPendingTransactionsFetch", "timePayloadGeneration"];
|
|
3
3
|
export type SimpleBlockRunnerTimingName = typeof SimpleBlockRunnerTimingNames[number];
|
|
4
4
|
/** Optional process-local observer for timings owned by SimpleBlockRunner. */
|
|
5
5
|
export interface SimpleBlockRunnerInstrumentation {
|
package/dist/node/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SimpleBlockRunnerInstrumentation.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6CAA6C,qCAAqC,CAAA;AAE/F,eAAO,MAAM,4BAA4B,
|
|
1
|
+
{"version":3,"file":"SimpleBlockRunnerInstrumentation.d.ts","sourceRoot":"","sources":["../../../../../../../src/modules/services/simple/block/runner/SimpleBlockRunnerInstrumentation.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,6CAA6C,qCAAqC,CAAA;AAE/F,eAAO,MAAM,4BAA4B,4HAK/B,CAAA;AAEV,MAAM,MAAM,2BAA2B,GAAG,OAAO,4BAA4B,CAAC,MAAM,CAAC,CAAA;AAErF,8EAA8E;AAC9E,MAAM,WAAW,gCAAgC;IAC/C,YAAY,CAAC,IAAI,EAAE,2BAA2B,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAC1E;AAED,MAAM,WAAW,uCAAuC;IACtD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC7C;AAED,wBAAgB,wCAAwC,CACtD,OAAO,EAAE,uCAAuC,EAChD,eAAe,EAAE,gCAAgC,GAChD,IAAI,CAEN;AAED,wBAAgB,sCAAsC,CACpD,OAAO,EAAE,uCAAuC,GAC/C,gCAAgC,GAAG,SAAS,CAI9C"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Hash, JsonObject } from '@ariestools/sdk';
|
|
2
|
-
import type { SignedHydratedBlockWithHashMeta, SlashIndexKeyRecord } from '@xyo-network/xl1-sdk';
|
|
2
|
+
import type { SignedHydratedBlockWithHashMeta, SlashIndexKeyRecord, SlashOutcome } from '@xyo-network/xl1-sdk';
|
|
3
3
|
/** One object to write, and whether it may ever be rewritten. */
|
|
4
4
|
export interface SlashIndexWrite {
|
|
5
5
|
/** True when the object is content-addressed and must never change once written. */
|
|
@@ -9,6 +9,23 @@ export interface SlashIndexWrite {
|
|
|
9
9
|
/** What goes there. */
|
|
10
10
|
value: JsonObject;
|
|
11
11
|
}
|
|
12
|
+
/**
|
|
13
|
+
* A challenge or adjudication, and the report it answers.
|
|
14
|
+
*
|
|
15
|
+
* An adjudication carries its outcome. When the report is in an earlier batch, the writing pass
|
|
16
|
+
* files the verdict and its outcome together, and no later pass reads that verdict again, so an
|
|
17
|
+
* outcome left behind here could never be recovered.
|
|
18
|
+
*/
|
|
19
|
+
export type SlashIndexPendingLink = {
|
|
20
|
+
hash: Hash;
|
|
21
|
+
kind: 'adjudication';
|
|
22
|
+
outcome: SlashOutcome;
|
|
23
|
+
request: Hash;
|
|
24
|
+
} | {
|
|
25
|
+
hash: Hash;
|
|
26
|
+
kind: 'challenge';
|
|
27
|
+
request: Hash;
|
|
28
|
+
};
|
|
12
29
|
/** Everything one batch of finalized blocks contributes to the index. */
|
|
13
30
|
export interface SlashIndexDelta {
|
|
14
31
|
/** Producer aggregates: path to the offense keys seen for that producer. */
|
|
@@ -16,16 +33,15 @@ export interface SlashIndexDelta {
|
|
|
16
33
|
/** Per-offense aggregates, keyed by their path. */
|
|
17
34
|
keys: Map<string, SlashIndexKeyRecord>;
|
|
18
35
|
/**
|
|
19
|
-
*
|
|
36
|
+
* What the writing pass has to attach, in the order it was finalized: adjudications and
|
|
37
|
+
* challenges whose report was not in this batch, and every adjudication after the first such
|
|
38
|
+
* adjudication.
|
|
20
39
|
*
|
|
21
40
|
* Their offense cannot be resolved from the blocks alone — the report that names it is further
|
|
22
|
-
* back — so the writing pass resolves them against the published request records.
|
|
41
|
+
* back — so the writing pass resolves them against the published request records. Later
|
|
42
|
+
* adjudications wait behind the first so that every verdict is settled in finalized order.
|
|
23
43
|
*/
|
|
24
|
-
pending:
|
|
25
|
-
hash: Hash;
|
|
26
|
-
kind: 'adjudication' | 'challenge';
|
|
27
|
-
request: Hash;
|
|
28
|
-
}[];
|
|
44
|
+
pending: SlashIndexPendingLink[];
|
|
29
45
|
/** Content-addressed records, safe to skip when already present. */
|
|
30
46
|
records: SlashIndexWrite[];
|
|
31
47
|
}
|