@xyo-network/xl1-validation 1.21.11 → 1.22.1
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/neutral/index.mjs +10 -10
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/neutral/transaction/validateTransaction.d.ts +2 -6
- package/dist/neutral/transaction/validateTransaction.d.ts.map +1 -1
- package/dist/neutral/transaction/validators/TransactionDurationValidator.d.ts.map +1 -1
- package/dist/neutral/transaction/validators/TransactionElevationValidator.d.ts.map +1 -1
- package/dist/neutral/transaction/validators/TransactionFromValidator.d.ts.map +1 -1
- package/dist/neutral/transaction/validators/TransactionGasValidator.d.ts.map +1 -1
- package/dist/neutral/transaction/validators/TransactionJsonSchemaValidator.d.ts.map +1 -1
- package/dist/neutral/transaction/validators/TransactionProtocolValidator.d.ts.map +1 -1
- package/dist/neutral/transaction/validators/TransactionTransfersValidator.d.ts +1 -3
- package/dist/neutral/transaction/validators/TransactionTransfersValidator.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/transaction/validateTransaction.ts +7 -12
- package/src/transaction/validators/TransactionDurationValidator.ts +3 -2
- package/src/transaction/validators/TransactionElevationValidator.ts +3 -2
- package/src/transaction/validators/TransactionFromValidator.ts +3 -2
- package/src/transaction/validators/TransactionGasValidator.ts +2 -2
- package/src/transaction/validators/TransactionJsonSchemaValidator.ts +1 -0
- package/src/transaction/validators/TransactionProtocolValidator.ts +2 -3
- package/src/transaction/validators/TransactionTransfersValidator.ts +2 -1
package/dist/neutral/index.mjs
CHANGED
|
@@ -73,7 +73,7 @@ import { isTransactionBoundWitness } from "@xyo-network/xl1-protocol";
|
|
|
73
73
|
// src/transaction/validators/TransactionDurationValidator.ts
|
|
74
74
|
import { ZERO_HASH as ZERO_HASH3 } from "@xylabs/sdk-js";
|
|
75
75
|
import { HydratedTransactionValidationError } from "@xyo-network/xl1-protocol";
|
|
76
|
-
var TransactionDurationValidator = (tx) => {
|
|
76
|
+
var TransactionDurationValidator = (context, tx) => {
|
|
77
77
|
const errors = [];
|
|
78
78
|
try {
|
|
79
79
|
const { exp, nbf } = tx[0];
|
|
@@ -100,7 +100,7 @@ var TransactionDurationValidator = (tx) => {
|
|
|
100
100
|
import { ZERO_HASH as ZERO_HASH4 } from "@xylabs/sdk-js";
|
|
101
101
|
import { HydratedTransactionValidationError as HydratedTransactionValidationError2 } from "@xyo-network/xl1-protocol";
|
|
102
102
|
import { extractElevatedHashes } from "@xyo-network/xl1-protocol-sdk";
|
|
103
|
-
var TransactionElevationValidator = (tx) => {
|
|
103
|
+
var TransactionElevationValidator = (context, tx) => {
|
|
104
104
|
const errors = [];
|
|
105
105
|
try {
|
|
106
106
|
try {
|
|
@@ -123,7 +123,7 @@ var TransactionElevationValidator = (tx) => {
|
|
|
123
123
|
import { asAddress, ZERO_HASH as ZERO_HASH5 } from "@xylabs/sdk-js";
|
|
124
124
|
import { addressesContains } from "@xyo-network/boundwitness-validator";
|
|
125
125
|
import { HydratedTransactionValidationError as HydratedTransactionValidationError3 } from "@xyo-network/xl1-protocol";
|
|
126
|
-
var TransactionFromValidator = (tx) => {
|
|
126
|
+
var TransactionFromValidator = (context, tx) => {
|
|
127
127
|
const errors = [];
|
|
128
128
|
try {
|
|
129
129
|
const from = asAddress(tx[0].from);
|
|
@@ -155,7 +155,7 @@ import {
|
|
|
155
155
|
HydratedTransactionValidationError as HydratedTransactionValidationError4,
|
|
156
156
|
minTransactionFees
|
|
157
157
|
} from "@xyo-network/xl1-protocol";
|
|
158
|
-
var TransactionGasValidator = (tx) => {
|
|
158
|
+
var TransactionGasValidator = (context, tx) => {
|
|
159
159
|
const errors = [];
|
|
160
160
|
try {
|
|
161
161
|
if (tx?.[0].fees === void 0) {
|
|
@@ -247,7 +247,7 @@ import { TransactionBoundWitnessJsonSchema } from "@xyo-network/xl1-schema";
|
|
|
247
247
|
import { Ajv } from "ajv";
|
|
248
248
|
var ajv = new Ajv({ allErrors: true, strict: true });
|
|
249
249
|
var validate;
|
|
250
|
-
var TransactionJsonSchemaValidator = (tx) => {
|
|
250
|
+
var TransactionJsonSchemaValidator = (context, tx) => {
|
|
251
251
|
const errors = [];
|
|
252
252
|
try {
|
|
253
253
|
if (validate === void 0) validate = ajv.compile(TransactionBoundWitnessJsonSchema);
|
|
@@ -269,7 +269,7 @@ var TransactionJsonSchemaValidator = (tx) => {
|
|
|
269
269
|
// src/transaction/validators/TransactionProtocolValidator.ts
|
|
270
270
|
import { ZERO_HASH as ZERO_HASH8 } from "@xylabs/sdk-js";
|
|
271
271
|
import { HydratedTransactionValidationError as HydratedTransactionValidationError6 } from "@xyo-network/xl1-protocol";
|
|
272
|
-
var TransactionProtocolValidator = async (
|
|
272
|
+
var TransactionProtocolValidator = async (context, tx) => {
|
|
273
273
|
const errors = [];
|
|
274
274
|
try {
|
|
275
275
|
if (context?.chainId !== void 0 && tx[0].chain !== context.chainId) {
|
|
@@ -312,7 +312,7 @@ var DerivedReceiveAddressValidatorFactory = (allowedSigners, allowedScope) => (s
|
|
|
312
312
|
}
|
|
313
313
|
};
|
|
314
314
|
function TransactionTransfersValidatorFactory(signerValidators = [SelfSignerValidator]) {
|
|
315
|
-
return async (hydratedTx) => {
|
|
315
|
+
return async (context, hydratedTx) => {
|
|
316
316
|
const errors = [];
|
|
317
317
|
const signer = hydratedTx[0].from;
|
|
318
318
|
try {
|
|
@@ -335,7 +335,7 @@ function TransactionTransfersValidatorFactory(signerValidators = [SelfSignerVali
|
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
// src/transaction/validateTransaction.ts
|
|
338
|
-
async function validateTransaction(
|
|
338
|
+
async function validateTransaction(context, tx, additionalValidators) {
|
|
339
339
|
try {
|
|
340
340
|
if (!isTransactionBoundWitness(tx[0])) {
|
|
341
341
|
return [new Error("failed isTransactionBoundWitness identity check")];
|
|
@@ -346,9 +346,9 @@ async function validateTransaction(tx, context, additionalValidators = []) {
|
|
|
346
346
|
TransactionFromValidator,
|
|
347
347
|
TransactionGasValidator,
|
|
348
348
|
TransactionElevationValidator,
|
|
349
|
-
...additionalValidators
|
|
349
|
+
...additionalValidators ?? []
|
|
350
350
|
];
|
|
351
|
-
return (await Promise.all(validators.map((v) => v(
|
|
351
|
+
return (await Promise.all(validators.map((v) => v(context, tx)))).flat();
|
|
352
352
|
} catch (ex) {
|
|
353
353
|
return [new Error(`Failed TransactionGasValidator: ${ex}`)];
|
|
354
354
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/boundwitness/validators/BoundWitnessReferences.ts","../../src/boundwitness/validators/BoundWitnessSignatures.ts","../../src/transaction/validateTransaction.ts","../../src/transaction/validators/TransactionDurationValidator.ts","../../src/transaction/validators/TransactionElevationValidator.ts","../../src/transaction/validators/TransactionFromValidator.ts","../../src/transaction/validators/TransactionGasValidator.ts","../../src/transaction/validators/TransactionJsonSchemaValidator.ts","../../src/transaction/validators/TransactionProtocolValidator.ts","../../src/transaction/validators/TransactionTransfersValidator.ts"],"sourcesContent":["import type { Hash, Promisable } from '@xylabs/sdk-js'\nimport { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type {\n Payload,\n Schema,\n WithHashMeta,\n} from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { HydratedBoundWitnessValidationFunction, HydratedBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { HydratedBoundWitnessValidationError } from '@xyo-network/xl1-protocol'\n\nfunction getPayloadsFromPayloadArray(payloads: WithHashMeta<Payload>[], hashes: Hash[]): (WithHashMeta<Payload> | undefined)[] {\n return hashes.map(hash => payloads.find(payload => payload._hash === hash || payload._dataHash === hash))\n}\n\nexport const BoundWitnessReferencesValidator\n\n = <T extends BoundWitness = BoundWitness>(allowedSchemas?: Schema[]): HydratedBoundWitnessValidationFunction<T> => (\n [bw, payloadSet]: HydratedBoundWitnessWithHashMeta<T>,\n // eslint-disable-next-line complexity\n ): Promisable<HydratedBoundWitnessValidationError[]> => {\n const errors: HydratedBoundWitnessValidationError[] = []\n try {\n const payloads = getPayloadsFromPayloadArray(payloadSet, bw.payload_hashes)\n if (payloads.length !== bw.payload_hashes.length) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'unable to locate payloads'))\n }\n\n // check if payloads are valid and if their schemas match the declared schemas\n for (let payload of payloads) {\n if (isAnyPayload(payload)) {\n const payloadHashIndex = bw.payload_hashes.indexOf(payload._hash)\n const payloadDataHashIndex = bw.payload_hashes.indexOf(payload._dataHash)\n const payloadIndex = Math.max(payloadHashIndex, payloadDataHashIndex)\n if (payloadIndex === -1) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'payload hash not found'))\n }\n\n const declaredSchema = bw.payload_schemas[payloadIndex]\n if (declaredSchema !== payload.schema) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'mismatched schema'))\n }\n\n if (allowedSchemas && !allowedSchemas.includes(payload.schema)) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], `disallowed schema [${payload.schema}]`))\n }\n } else {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'invalid payload'))\n }\n }\n } catch (ex) {\n const error = new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], `validation excepted: ${ex}`)\n error.cause = ex\n errors.push(error)\n }\n return errors\n }\n","import { type Address, ZERO_HASH } from '@xylabs/sdk-js'\nimport { toArrayBuffer } from '@xylabs/sdk-js'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BoundWitnessValidationFunction } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BoundWitnessSignaturesValidator: BoundWitnessValidationFunction = async (\n bw: BoundWitness,\n) => {\n const errors: BoundWitnessValidationError[] = []\n try {\n const dataHash = await BoundWitnessBuilder.dataHash(bw)\n const results: [Address, Error[]][] = await Promise.all(bw.addresses.map(async (address, index) => {\n return [address, await BoundWitnessValidator.validateSignature(\n toArrayBuffer(dataHash),\n toArrayBuffer(address),\n toArrayBuffer(bw.$signatures[index] ?? undefined),\n )]\n }))\n for (const [, bwErrors] of results) {\n for (const bwError of bwErrors) {\n errors.push(new BoundWitnessValidationError((bw as WithStorageMeta<BoundWitness>)?._hash ?? ZERO_HASH, bw, 'validation errors', bwError))\n }\n }\n } catch (ex) {\n errors.push(new BoundWitnessValidationError((bw as WithStorageMeta<BoundWitness>)?._hash ?? ZERO_HASH, bw, 'validation excepted', ex))\n }\n return errors\n}\n","import type {\n ChainId, HydratedTransactionValidationFunction,\n HydratedTransactionWithHashMeta,\n StepIdentity,\n} from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport {\n TransactionDurationValidator,\n TransactionElevationValidator, TransactionFromValidator, TransactionGasValidator, TransactionProtocolValidator,\n} from './validators/index.ts'\n\nexport type ValidateTransactionContext = {\n chainId?: ChainId\n step?: StepIdentity\n}\n\nexport async function validateTransaction(\n tx: HydratedTransactionWithHashMeta,\n context?: ValidateTransactionContext,\n additionalValidators: HydratedTransactionValidationFunction[] = [],\n) {\n try {\n if (!isTransactionBoundWitness(tx[0])) {\n return [new Error('failed isTransactionBoundWitness identity check')]\n }\n\n const validators: HydratedTransactionValidationFunction<ValidateTransactionContext>[] = [\n TransactionProtocolValidator,\n TransactionDurationValidator,\n TransactionFromValidator,\n TransactionGasValidator,\n TransactionElevationValidator,\n ...additionalValidators,\n ]\n return (await Promise.all(validators.map(v => v(tx, context)))).flat()\n } catch (ex) {\n return [(new Error(`Failed TransactionGasValidator: ${ex}`))]\n }\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionValidationFunction, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionDurationValidator: HydratedTransactionValidationFunction = (\n tx: HydratedTransactionWithHashMeta,\n// eslint-disable-next-line complexity\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const { exp, nbf } = tx[0]\n if (nbf < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction nbf must be positive'))\n\n if (exp < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must be positive'))\n if (exp <= nbf) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must greater than nbf'))\n if (exp - nbf > 10_000) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction exp must not be too far in the future',\n ))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionDurationValidator: ${ex}`,\n ex,\n ))\n }\n\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionValidationFunction, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\nimport { extractElevatedHashes } from '@xyo-network/xl1-protocol-sdk'\n\nexport const TransactionElevationValidator: HydratedTransactionValidationFunction = (\n tx: HydratedTransactionWithHashMeta,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n try {\n extractElevatedHashes(tx)\n } catch {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Hydrated transaction does not include all script hashes'))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionElevationValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { asAddress, ZERO_HASH } from '@xylabs/sdk-js'\nimport { addressesContains } from '@xyo-network/boundwitness-validator'\nimport type { HydratedTransactionValidationFunction, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionFromValidator: HydratedTransactionValidationFunction = (\n tx: HydratedTransactionWithHashMeta,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const from = asAddress(tx[0].from)\n if (from === undefined)errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from is not a valid address',\n ))\n else if (!addressesContains(tx[0], from)) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from address must be listed in addresses',\n ))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionFromValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { hexToBigInt, ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n HydratedTransactionValidationFunction,\n HydratedTransactionWithHashMeta,\n TransactionFeesBigInt, TransactionFeesHex,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n minTransactionFees,\n} from '@xyo-network/xl1-protocol'\n\nexport const TransactionGasValidator: HydratedTransactionValidationFunction = (\n tx: HydratedTransactionWithHashMeta,\n// eslint-disable-next-line complexity\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (tx?.[0].fees === undefined) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Missing fees',\n ))\n } else {\n const {\n base, gasLimit, gasPrice, priority,\n } = parseFees(tx[0].fees)\n\n if (base === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.base must be defined and a valid number',\n ))\n else if (base < minTransactionFees.base) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.base must be >= ${minTransactionFees.base}`,\n ))\n\n if (gasLimit === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasLimit must be defined and a valid number',\n ))\n else if (gasLimit < minTransactionFees.gasLimit) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit must be >= ${minTransactionFees.gasLimit}`,\n ))\n\n if (gasPrice === undefined) errors.push(\n new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasPrice must be defined and a valid number',\n ),\n )\n else if (gasPrice < minTransactionFees.gasPrice) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasPrice must be >= ${minTransactionFees.gasPrice}`,\n ))\n\n if (priority === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.priority must be defined and a valid number',\n ))\n else if (priority < minTransactionFees.priority) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.priority must be >= ${minTransactionFees.priority}`,\n ))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionGasValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n\nconst parseFees = (fees: TransactionFeesHex): Partial<TransactionFeesBigInt> => {\n const ret: Partial<TransactionFeesBigInt> = {}\n const {\n base, gasLimit, gasPrice, priority,\n } = fees\n if (base !== undefined) ret.base = AttoXL1(hexToBigInt(base))\n if (gasLimit !== undefined) ret.gasLimit = AttoXL1(hexToBigInt(gasLimit))\n if (gasPrice !== undefined) ret.gasPrice = AttoXL1(hexToBigInt(gasPrice))\n if (priority !== undefined) ret.priority = AttoXL1(hexToBigInt(priority))\n return ret\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { HydratedTransactionValidationFunction, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\nimport { TransactionBoundWitnessJsonSchema } from '@xyo-network/xl1-schema'\nimport type { ValidateFunction } from 'ajv'\nimport { Ajv } from 'ajv'\n\nconst ajv = new Ajv({ allErrors: true, strict: true })\n\nlet validate: ValidateFunction<TransactionBoundWitness> | undefined\n\nexport const TransactionJsonSchemaValidator: HydratedTransactionValidationFunction = (\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (validate === undefined) validate = ajv.compile(TransactionBoundWitnessJsonSchema)\n if (!validate(PayloadBuilder.omitStorageMeta(tx[0]))) {\n const error = new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\\n' })}`,\n )\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n ChainId,\n HydratedTransactionValidationFunction,\n HydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionProtocolValidator: HydratedTransactionValidationFunction = async (\n tx: HydratedTransactionWithHashMeta,\n context?: { chainId?: ChainId },\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (context?.chainId !== undefined && tx[0].chain !== context.chainId) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, `invalid chain id [${context.chainId}, ${tx[0].chain}]`))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))\n }\n return await Promise.resolve(errors)\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport type {\n HydratedTransactionValidationFunction, StepIdentity,\n Transfer,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError, isTransfer } from '@xyo-network/xl1-protocol'\nimport {\n completedStepRewardAddress, derivedReceiveAddress, elevatedPayloads,\n} from '@xyo-network/xl1-protocol-sdk'\n\nexport type SignerValidator = (signer: Address, signee: Address, context?: { address?: Address; scope?: string; step?: StepIdentity }) => boolean\n\nexport type SignerMapping = Map<Address, Address[]>\n\nexport const SelfSignerValidator: SignerValidator = (signer: Address, signee: Address) => signer === signee\n\nexport const CompletedStepRewardAddressValidatorFactory = (allowedSigners: Address[]): SignerValidator => (\n signer: Address,\n signee: Address,\n context?: { step?: StepIdentity },\n) => {\n const step = context?.step\n if (isDefined(step)) {\n const contextAddress = completedStepRewardAddress(step)\n return allowedSigners.includes(signer) && signee === contextAddress\n } else {\n return false\n }\n}\n\nexport const DerivedReceiveAddressValidatorFactory = (allowedSigners: Address[], allowedScope: string): SignerValidator => (\n signer: Address,\n signee: Address,\n context?: { address?: Address; scope?: string },\n) => {\n const { address, scope } = context ?? {}\n if (scope !== allowedScope) {\n return false\n }\n if (isDefined(address)) {\n const derivedAddress = derivedReceiveAddress(address, scope)\n return allowedSigners.includes(signer) && signee === derivedAddress\n } else {\n return false\n }\n}\n\nexport function TransactionTransfersValidatorFactory(\n signerValidators: SignerValidator[] = [SelfSignerValidator],\n): HydratedTransactionValidationFunction<{ step?: StepIdentity }> {\n return async (\n hydratedTx,\n ) => {\n const errors: HydratedTransactionValidationError[] = []\n const signer = hydratedTx[0].from\n try {\n const payloads = elevatedPayloads(hydratedTx)\n const transfers = payloads.filter(isTransfer) as Transfer[]\n for (const transfer of transfers) {\n if (isUndefined(signerValidators.find(v => v(signer, transfer.from, transfer.context)))) {\n errors.push(new HydratedTransactionValidationError(\n hydratedTx[0]._hash,\n hydratedTx,\n `transfer from address ${transfer.from} is not authorized by signer ${signer}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(hydratedTx[0]._hash, hydratedTx, 'validation excepted', ex))\n }\n return await Promise.resolve(errors)\n }\n}\n"],"mappings":"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","names":["ZERO_HASH","ZERO_HASH","ZERO_HASH","HydratedTransactionValidationError","ZERO_HASH","HydratedTransactionValidationError","ZERO_HASH","HydratedTransactionValidationError","ZERO_HASH","HydratedTransactionValidationError","ZERO_HASH","HydratedTransactionValidationError","HydratedTransactionValidationError"]}
|
|
1
|
+
{"version":3,"sources":["../../src/boundwitness/validators/BoundWitnessReferences.ts","../../src/boundwitness/validators/BoundWitnessSignatures.ts","../../src/transaction/validateTransaction.ts","../../src/transaction/validators/TransactionDurationValidator.ts","../../src/transaction/validators/TransactionElevationValidator.ts","../../src/transaction/validators/TransactionFromValidator.ts","../../src/transaction/validators/TransactionGasValidator.ts","../../src/transaction/validators/TransactionJsonSchemaValidator.ts","../../src/transaction/validators/TransactionProtocolValidator.ts","../../src/transaction/validators/TransactionTransfersValidator.ts"],"sourcesContent":["import type { Hash, Promisable } from '@xylabs/sdk-js'\nimport { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type {\n Payload,\n Schema,\n WithHashMeta,\n} from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { HydratedBoundWitnessValidationFunction, HydratedBoundWitnessWithHashMeta } from '@xyo-network/xl1-protocol'\nimport { HydratedBoundWitnessValidationError } from '@xyo-network/xl1-protocol'\n\nfunction getPayloadsFromPayloadArray(payloads: WithHashMeta<Payload>[], hashes: Hash[]): (WithHashMeta<Payload> | undefined)[] {\n return hashes.map(hash => payloads.find(payload => payload._hash === hash || payload._dataHash === hash))\n}\n\nexport const BoundWitnessReferencesValidator\n\n = <T extends BoundWitness = BoundWitness>(allowedSchemas?: Schema[]): HydratedBoundWitnessValidationFunction<T> => (\n [bw, payloadSet]: HydratedBoundWitnessWithHashMeta<T>,\n // eslint-disable-next-line complexity\n ): Promisable<HydratedBoundWitnessValidationError[]> => {\n const errors: HydratedBoundWitnessValidationError[] = []\n try {\n const payloads = getPayloadsFromPayloadArray(payloadSet, bw.payload_hashes)\n if (payloads.length !== bw.payload_hashes.length) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'unable to locate payloads'))\n }\n\n // check if payloads are valid and if their schemas match the declared schemas\n for (let payload of payloads) {\n if (isAnyPayload(payload)) {\n const payloadHashIndex = bw.payload_hashes.indexOf(payload._hash)\n const payloadDataHashIndex = bw.payload_hashes.indexOf(payload._dataHash)\n const payloadIndex = Math.max(payloadHashIndex, payloadDataHashIndex)\n if (payloadIndex === -1) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'payload hash not found'))\n }\n\n const declaredSchema = bw.payload_schemas[payloadIndex]\n if (declaredSchema !== payload.schema) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'mismatched schema'))\n }\n\n if (allowedSchemas && !allowedSchemas.includes(payload.schema)) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], `disallowed schema [${payload.schema}]`))\n }\n } else {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'invalid payload'))\n }\n }\n } catch (ex) {\n const error = new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], `validation excepted: ${ex}`)\n error.cause = ex\n errors.push(error)\n }\n return errors\n }\n","import { type Address, ZERO_HASH } from '@xylabs/sdk-js'\nimport { toArrayBuffer } from '@xylabs/sdk-js'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BoundWitnessValidationFunction } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BoundWitnessSignaturesValidator: BoundWitnessValidationFunction = async (\n bw: BoundWitness,\n) => {\n const errors: BoundWitnessValidationError[] = []\n try {\n const dataHash = await BoundWitnessBuilder.dataHash(bw)\n const results: [Address, Error[]][] = await Promise.all(bw.addresses.map(async (address, index) => {\n return [address, await BoundWitnessValidator.validateSignature(\n toArrayBuffer(dataHash),\n toArrayBuffer(address),\n toArrayBuffer(bw.$signatures[index] ?? undefined),\n )]\n }))\n for (const [, bwErrors] of results) {\n for (const bwError of bwErrors) {\n errors.push(new BoundWitnessValidationError((bw as WithStorageMeta<BoundWitness>)?._hash ?? ZERO_HASH, bw, 'validation errors', bwError))\n }\n }\n } catch (ex) {\n errors.push(new BoundWitnessValidationError((bw as WithStorageMeta<BoundWitness>)?._hash ?? ZERO_HASH, bw, 'validation excepted', ex))\n }\n return errors\n}\n","import type {\n HydratedTransactionValidationFunction,\n HydratedTransactionValidationFunctionContext,\n HydratedTransactionWithHashMeta,\n} from '@xyo-network/xl1-protocol'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nimport {\n TransactionDurationValidator,\n TransactionElevationValidator, TransactionFromValidator, TransactionGasValidator, TransactionProtocolValidator,\n} from './validators/index.ts'\n\nexport async function validateTransaction(\n context: HydratedTransactionValidationFunctionContext,\n tx: HydratedTransactionWithHashMeta,\n additionalValidators?: HydratedTransactionValidationFunction[],\n) {\n try {\n if (!isTransactionBoundWitness(tx[0])) {\n return [new Error('failed isTransactionBoundWitness identity check')]\n }\n\n const validators: HydratedTransactionValidationFunction<HydratedTransactionValidationFunctionContext>[] = [\n TransactionProtocolValidator,\n TransactionDurationValidator,\n TransactionFromValidator,\n TransactionGasValidator,\n TransactionElevationValidator,\n ...(additionalValidators ?? []),\n ]\n return (await Promise.all(validators.map(v => v(context, tx)))).flat()\n } catch (ex) {\n return [(new Error(`Failed TransactionGasValidator: ${ex}`))]\n }\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionValidationFunction } from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionDurationValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n// eslint-disable-next-line complexity\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const { exp, nbf } = tx[0]\n if (nbf < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction nbf must be positive'))\n\n if (exp < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must be positive'))\n if (exp <= nbf) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must greater than nbf'))\n if (exp - nbf > 10_000) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction exp must not be too far in the future',\n ))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionDurationValidator: ${ex}`,\n ex,\n ))\n }\n\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionValidationFunction } from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\nimport { extractElevatedHashes } from '@xyo-network/xl1-protocol-sdk'\n\nexport const TransactionElevationValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n try {\n extractElevatedHashes(tx)\n } catch {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Hydrated transaction does not include all script hashes'))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionElevationValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { asAddress, ZERO_HASH } from '@xylabs/sdk-js'\nimport { addressesContains } from '@xyo-network/boundwitness-validator'\nimport type { HydratedTransactionValidationFunction } from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionFromValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const from = asAddress(tx[0].from)\n if (from === undefined)errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from is not a valid address',\n ))\n else if (!addressesContains(tx[0], from)) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from address must be listed in addresses',\n ))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionFromValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { hexToBigInt, ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n HydratedTransactionValidationFunction,\n TransactionFeesBigInt, TransactionFeesHex,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n minTransactionFees,\n} from '@xyo-network/xl1-protocol'\n\nexport const TransactionGasValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n// eslint-disable-next-line complexity\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (tx?.[0].fees === undefined) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Missing fees',\n ))\n } else {\n const {\n base, gasLimit, gasPrice, priority,\n } = parseFees(tx[0].fees)\n\n if (base === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.base must be defined and a valid number',\n ))\n else if (base < minTransactionFees.base) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.base must be >= ${minTransactionFees.base}`,\n ))\n\n if (gasLimit === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasLimit must be defined and a valid number',\n ))\n else if (gasLimit < minTransactionFees.gasLimit) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit must be >= ${minTransactionFees.gasLimit}`,\n ))\n\n if (gasPrice === undefined) errors.push(\n new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasPrice must be defined and a valid number',\n ),\n )\n else if (gasPrice < minTransactionFees.gasPrice) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasPrice must be >= ${minTransactionFees.gasPrice}`,\n ))\n\n if (priority === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.priority must be defined and a valid number',\n ))\n else if (priority < minTransactionFees.priority) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.priority must be >= ${minTransactionFees.priority}`,\n ))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionGasValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n\nconst parseFees = (fees: TransactionFeesHex): Partial<TransactionFeesBigInt> => {\n const ret: Partial<TransactionFeesBigInt> = {}\n const {\n base, gasLimit, gasPrice, priority,\n } = fees\n if (base !== undefined) ret.base = AttoXL1(hexToBigInt(base))\n if (gasLimit !== undefined) ret.gasLimit = AttoXL1(hexToBigInt(gasLimit))\n if (gasPrice !== undefined) ret.gasPrice = AttoXL1(hexToBigInt(gasPrice))\n if (priority !== undefined) ret.priority = AttoXL1(hexToBigInt(priority))\n return ret\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type { HydratedTransactionValidationFunction, TransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\nimport { TransactionBoundWitnessJsonSchema } from '@xyo-network/xl1-schema'\nimport type { ValidateFunction } from 'ajv'\nimport { Ajv } from 'ajv'\n\nconst ajv = new Ajv({ allErrors: true, strict: true })\n\nlet validate: ValidateFunction<TransactionBoundWitness> | undefined\n\nexport const TransactionJsonSchemaValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (validate === undefined) validate = ajv.compile(TransactionBoundWitnessJsonSchema)\n if (!validate(PayloadBuilder.omitStorageMeta(tx[0]))) {\n const error = new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\\n' })}`,\n )\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n ChainId,\n HydratedTransactionValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'\n\nexport const TransactionProtocolValidator: HydratedTransactionValidationFunction = async (\n context: { chainId?: ChainId },\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (context?.chainId !== undefined && tx[0].chain !== context.chainId) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, `invalid chain id [${context.chainId}, ${tx[0].chain}]`))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))\n }\n return await Promise.resolve(errors)\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { isDefined, isUndefined } from '@xylabs/sdk-js'\nimport type {\n HydratedTransactionValidationFunction, StepIdentity,\n Transfer,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedTransactionValidationError, isTransfer } from '@xyo-network/xl1-protocol'\nimport {\n completedStepRewardAddress, derivedReceiveAddress, elevatedPayloads,\n} from '@xyo-network/xl1-protocol-sdk'\n\nexport type SignerValidator = (signer: Address, signee: Address, context?: { address?: Address; scope?: string; step?: StepIdentity }) => boolean\n\nexport type SignerMapping = Map<Address, Address[]>\n\nexport const SelfSignerValidator: SignerValidator = (signer: Address, signee: Address) => signer === signee\n\nexport const CompletedStepRewardAddressValidatorFactory = (allowedSigners: Address[]): SignerValidator => (\n signer: Address,\n signee: Address,\n context?: { step?: StepIdentity },\n) => {\n const step = context?.step\n if (isDefined(step)) {\n const contextAddress = completedStepRewardAddress(step)\n return allowedSigners.includes(signer) && signee === contextAddress\n } else {\n return false\n }\n}\n\nexport const DerivedReceiveAddressValidatorFactory = (allowedSigners: Address[], allowedScope: string): SignerValidator => (\n signer: Address,\n signee: Address,\n context?: { address?: Address; scope?: string },\n) => {\n const { address, scope } = context ?? {}\n if (scope !== allowedScope) {\n return false\n }\n if (isDefined(address)) {\n const derivedAddress = derivedReceiveAddress(address, scope)\n return allowedSigners.includes(signer) && signee === derivedAddress\n } else {\n return false\n }\n}\n\nexport function TransactionTransfersValidatorFactory(\n signerValidators: SignerValidator[] = [SelfSignerValidator],\n): HydratedTransactionValidationFunction {\n return async (\n context,\n hydratedTx,\n ) => {\n const errors: HydratedTransactionValidationError[] = []\n const signer = hydratedTx[0].from\n try {\n const payloads = elevatedPayloads(hydratedTx)\n const transfers = payloads.filter(isTransfer) as Transfer[]\n for (const transfer of transfers) {\n if (isUndefined(signerValidators.find(v => v(signer, transfer.from, transfer.context)))) {\n errors.push(new HydratedTransactionValidationError(\n hydratedTx[0]._hash,\n hydratedTx,\n `transfer from address ${transfer.from} is not authorized by signer ${signer}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(hydratedTx[0]._hash, hydratedTx, 'validation excepted', ex))\n }\n return await Promise.resolve(errors)\n }\n}\n"],"mappings":"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","names":["ZERO_HASH","ZERO_HASH","ZERO_HASH","HydratedTransactionValidationError","ZERO_HASH","HydratedTransactionValidationError","ZERO_HASH","HydratedTransactionValidationError","ZERO_HASH","HydratedTransactionValidationError","ZERO_HASH","HydratedTransactionValidationError","HydratedTransactionValidationError"]}
|
|
@@ -1,7 +1,3 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
export
|
|
3
|
-
chainId?: ChainId;
|
|
4
|
-
step?: StepIdentity;
|
|
5
|
-
};
|
|
6
|
-
export declare function validateTransaction(tx: HydratedTransactionWithHashMeta, context?: ValidateTransactionContext, additionalValidators?: HydratedTransactionValidationFunction[]): Promise<Error[]>;
|
|
1
|
+
import type { HydratedTransactionValidationFunction, HydratedTransactionValidationFunctionContext, HydratedTransactionWithHashMeta } from '@xyo-network/xl1-protocol';
|
|
2
|
+
export declare function validateTransaction(context: HydratedTransactionValidationFunctionContext, tx: HydratedTransactionWithHashMeta, additionalValidators?: HydratedTransactionValidationFunction[]): Promise<Error[]>;
|
|
7
3
|
//# sourceMappingURL=validateTransaction.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/validateTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,
|
|
1
|
+
{"version":3,"file":"validateTransaction.d.ts","sourceRoot":"","sources":["../../../src/transaction/validateTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qCAAqC,EACrC,4CAA4C,EAC5C,+BAA+B,EAChC,MAAM,2BAA2B,CAAA;AAQlC,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,4CAA4C,EACrD,EAAE,EAAE,+BAA+B,EACnC,oBAAoB,CAAC,EAAE,qCAAqC,EAAE,oBAmB/D"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionDurationValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionDurationValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qCAAqC,
|
|
1
|
+
{"version":3,"file":"TransactionDurationValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionDurationValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,2BAA2B,CAAA;AAGtF,eAAO,MAAM,4BAA4B,EAAE,qCA2B1C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionElevationValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionElevationValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qCAAqC,
|
|
1
|
+
{"version":3,"file":"TransactionElevationValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionElevationValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,2BAA2B,CAAA;AAItF,eAAO,MAAM,6BAA6B,EAAE,qCAoB3C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionFromValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionFromValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qCAAqC,
|
|
1
|
+
{"version":3,"file":"TransactionFromValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionFromValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qCAAqC,EAAE,MAAM,2BAA2B,CAAA;AAGtF,eAAO,MAAM,wBAAwB,EAAE,qCA0BtC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionGasValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionGasValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,qCAAqC,
|
|
1
|
+
{"version":3,"file":"TransactionGasValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionGasValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,qCAAqC,EAEtC,MAAM,2BAA2B,CAAA;AAOlC,eAAO,MAAM,uBAAuB,EAAE,qCAyErC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionJsonSchemaValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionJsonSchemaValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qCAAqC,EAA2B,MAAM,2BAA2B,CAAA;AAU/G,eAAO,MAAM,8BAA8B,EAAE,
|
|
1
|
+
{"version":3,"file":"TransactionJsonSchemaValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionJsonSchemaValidator.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qCAAqC,EAA2B,MAAM,2BAA2B,CAAA;AAU/G,eAAO,MAAM,8BAA8B,EAAE,qCAoB5C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionProtocolValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionProtocolValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,qCAAqC,
|
|
1
|
+
{"version":3,"file":"TransactionProtocolValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionProtocolValidator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,qCAAqC,EACtC,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,4BAA4B,EAAE,qCAa1C,CAAA"}
|
|
@@ -9,7 +9,5 @@ export type SignerMapping = Map<Address, Address[]>;
|
|
|
9
9
|
export declare const SelfSignerValidator: SignerValidator;
|
|
10
10
|
export declare const CompletedStepRewardAddressValidatorFactory: (allowedSigners: Address[]) => SignerValidator;
|
|
11
11
|
export declare const DerivedReceiveAddressValidatorFactory: (allowedSigners: Address[], allowedScope: string) => SignerValidator;
|
|
12
|
-
export declare function TransactionTransfersValidatorFactory(signerValidators?: SignerValidator[]): HydratedTransactionValidationFunction
|
|
13
|
-
step?: StepIdentity;
|
|
14
|
-
}>;
|
|
12
|
+
export declare function TransactionTransfersValidatorFactory(signerValidators?: SignerValidator[]): HydratedTransactionValidationFunction;
|
|
15
13
|
//# sourceMappingURL=TransactionTransfersValidator.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TransactionTransfersValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionTransfersValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,KAAK,EACV,qCAAqC,EAAE,YAAY,EAEpD,MAAM,2BAA2B,CAAA;AAMlC,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,KAAK,OAAO,CAAA;AAEjJ,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;AAEnD,eAAO,MAAM,mBAAmB,EAAE,eAAyE,CAAA;AAE3G,eAAO,MAAM,0CAA0C,GAAI,gBAAgB,OAAO,EAAE,KAAG,eAYtF,CAAA;AAED,eAAO,MAAM,qCAAqC,GAAI,gBAAgB,OAAO,EAAE,EAAE,cAAc,MAAM,KAAG,eAevG,CAAA;AAED,wBAAgB,oCAAoC,CAClD,gBAAgB,GAAE,eAAe,EAA0B,GAC1D,qCAAqC,
|
|
1
|
+
{"version":3,"file":"TransactionTransfersValidator.d.ts","sourceRoot":"","sources":["../../../../src/transaction/validators/TransactionTransfersValidator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAE7C,OAAO,KAAK,EACV,qCAAqC,EAAE,YAAY,EAEpD,MAAM,2BAA2B,CAAA;AAMlC,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,KAAK,OAAO,CAAA;AAEjJ,MAAM,MAAM,aAAa,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAA;AAEnD,eAAO,MAAM,mBAAmB,EAAE,eAAyE,CAAA;AAE3G,eAAO,MAAM,0CAA0C,GAAI,gBAAgB,OAAO,EAAE,KAAG,eAYtF,CAAA;AAED,eAAO,MAAM,qCAAqC,GAAI,gBAAgB,OAAO,EAAE,EAAE,cAAc,MAAM,KAAG,eAevG,CAAA;AAED,wBAAgB,oCAAoC,CAClD,gBAAgB,GAAE,eAAe,EAA0B,GAC1D,qCAAqC,CAwBvC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/xl1-validation",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.22.1",
|
|
5
5
|
"description": "XYO Layer One SDK Validation",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -45,9 +45,9 @@
|
|
|
45
45
|
"@xyo-network/boundwitness-validator": "~5.3.2",
|
|
46
46
|
"@xyo-network/payload-builder": "~5.3.2",
|
|
47
47
|
"@xyo-network/payload-model": "~5.3.2",
|
|
48
|
-
"@xyo-network/xl1-protocol": "~1.
|
|
49
|
-
"@xyo-network/xl1-protocol-sdk": "~1.
|
|
50
|
-
"@xyo-network/xl1-schema": "~1.
|
|
48
|
+
"@xyo-network/xl1-protocol": "~1.22.1",
|
|
49
|
+
"@xyo-network/xl1-protocol-sdk": "~1.22.1",
|
|
50
|
+
"@xyo-network/xl1-schema": "~1.22.1",
|
|
51
51
|
"ajv": "~8.17.1"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type {
|
|
2
|
-
|
|
2
|
+
HydratedTransactionValidationFunction,
|
|
3
|
+
HydratedTransactionValidationFunctionContext,
|
|
3
4
|
HydratedTransactionWithHashMeta,
|
|
4
|
-
StepIdentity,
|
|
5
5
|
} from '@xyo-network/xl1-protocol'
|
|
6
6
|
import { isTransactionBoundWitness } from '@xyo-network/xl1-protocol'
|
|
7
7
|
|
|
@@ -10,30 +10,25 @@ import {
|
|
|
10
10
|
TransactionElevationValidator, TransactionFromValidator, TransactionGasValidator, TransactionProtocolValidator,
|
|
11
11
|
} from './validators/index.ts'
|
|
12
12
|
|
|
13
|
-
export type ValidateTransactionContext = {
|
|
14
|
-
chainId?: ChainId
|
|
15
|
-
step?: StepIdentity
|
|
16
|
-
}
|
|
17
|
-
|
|
18
13
|
export async function validateTransaction(
|
|
14
|
+
context: HydratedTransactionValidationFunctionContext,
|
|
19
15
|
tx: HydratedTransactionWithHashMeta,
|
|
20
|
-
|
|
21
|
-
additionalValidators: HydratedTransactionValidationFunction[] = [],
|
|
16
|
+
additionalValidators?: HydratedTransactionValidationFunction[],
|
|
22
17
|
) {
|
|
23
18
|
try {
|
|
24
19
|
if (!isTransactionBoundWitness(tx[0])) {
|
|
25
20
|
return [new Error('failed isTransactionBoundWitness identity check')]
|
|
26
21
|
}
|
|
27
22
|
|
|
28
|
-
const validators: HydratedTransactionValidationFunction<
|
|
23
|
+
const validators: HydratedTransactionValidationFunction<HydratedTransactionValidationFunctionContext>[] = [
|
|
29
24
|
TransactionProtocolValidator,
|
|
30
25
|
TransactionDurationValidator,
|
|
31
26
|
TransactionFromValidator,
|
|
32
27
|
TransactionGasValidator,
|
|
33
28
|
TransactionElevationValidator,
|
|
34
|
-
...additionalValidators,
|
|
29
|
+
...(additionalValidators ?? []),
|
|
35
30
|
]
|
|
36
|
-
return (await Promise.all(validators.map(v => v(
|
|
31
|
+
return (await Promise.all(validators.map(v => v(context, tx)))).flat()
|
|
37
32
|
} catch (ex) {
|
|
38
33
|
return [(new Error(`Failed TransactionGasValidator: ${ex}`))]
|
|
39
34
|
}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
|
-
import type { HydratedTransactionValidationFunction
|
|
2
|
+
import type { HydratedTransactionValidationFunction } from '@xyo-network/xl1-protocol'
|
|
3
3
|
import { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'
|
|
4
4
|
|
|
5
5
|
export const TransactionDurationValidator: HydratedTransactionValidationFunction = (
|
|
6
|
-
|
|
6
|
+
context,
|
|
7
|
+
tx,
|
|
7
8
|
// eslint-disable-next-line complexity
|
|
8
9
|
) => {
|
|
9
10
|
const errors: HydratedTransactionValidationError[] = []
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
|
-
import type { HydratedTransactionValidationFunction
|
|
2
|
+
import type { HydratedTransactionValidationFunction } from '@xyo-network/xl1-protocol'
|
|
3
3
|
import { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'
|
|
4
4
|
import { extractElevatedHashes } from '@xyo-network/xl1-protocol-sdk'
|
|
5
5
|
|
|
6
6
|
export const TransactionElevationValidator: HydratedTransactionValidationFunction = (
|
|
7
|
-
|
|
7
|
+
context,
|
|
8
|
+
tx,
|
|
8
9
|
) => {
|
|
9
10
|
const errors: HydratedTransactionValidationError[] = []
|
|
10
11
|
try {
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { asAddress, ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
2
|
import { addressesContains } from '@xyo-network/boundwitness-validator'
|
|
3
|
-
import type { HydratedTransactionValidationFunction
|
|
3
|
+
import type { HydratedTransactionValidationFunction } from '@xyo-network/xl1-protocol'
|
|
4
4
|
import { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'
|
|
5
5
|
|
|
6
6
|
export const TransactionFromValidator: HydratedTransactionValidationFunction = (
|
|
7
|
-
|
|
7
|
+
context,
|
|
8
|
+
tx,
|
|
8
9
|
) => {
|
|
9
10
|
const errors: HydratedTransactionValidationError[] = []
|
|
10
11
|
try {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { hexToBigInt, ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
2
|
import type {
|
|
3
3
|
HydratedTransactionValidationFunction,
|
|
4
|
-
HydratedTransactionWithHashMeta,
|
|
5
4
|
TransactionFeesBigInt, TransactionFeesHex,
|
|
6
5
|
} from '@xyo-network/xl1-protocol'
|
|
7
6
|
import {
|
|
@@ -11,7 +10,8 @@ import {
|
|
|
11
10
|
} from '@xyo-network/xl1-protocol'
|
|
12
11
|
|
|
13
12
|
export const TransactionGasValidator: HydratedTransactionValidationFunction = (
|
|
14
|
-
|
|
13
|
+
context,
|
|
14
|
+
tx,
|
|
15
15
|
// eslint-disable-next-line complexity
|
|
16
16
|
) => {
|
|
17
17
|
const errors: HydratedTransactionValidationError[] = []
|
|
@@ -11,6 +11,7 @@ const ajv = new Ajv({ allErrors: true, strict: true })
|
|
|
11
11
|
let validate: ValidateFunction<TransactionBoundWitness> | undefined
|
|
12
12
|
|
|
13
13
|
export const TransactionJsonSchemaValidator: HydratedTransactionValidationFunction = (
|
|
14
|
+
context,
|
|
14
15
|
tx,
|
|
15
16
|
) => {
|
|
16
17
|
const errors: HydratedTransactionValidationError[] = []
|
|
@@ -2,13 +2,12 @@ import { ZERO_HASH } from '@xylabs/sdk-js'
|
|
|
2
2
|
import type {
|
|
3
3
|
ChainId,
|
|
4
4
|
HydratedTransactionValidationFunction,
|
|
5
|
-
HydratedTransactionWithHashMeta,
|
|
6
5
|
} from '@xyo-network/xl1-protocol'
|
|
7
6
|
import { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'
|
|
8
7
|
|
|
9
8
|
export const TransactionProtocolValidator: HydratedTransactionValidationFunction = async (
|
|
10
|
-
|
|
11
|
-
|
|
9
|
+
context: { chainId?: ChainId },
|
|
10
|
+
tx,
|
|
12
11
|
) => {
|
|
13
12
|
const errors: HydratedTransactionValidationError[] = []
|
|
14
13
|
try {
|
|
@@ -48,8 +48,9 @@ export const DerivedReceiveAddressValidatorFactory = (allowedSigners: Address[],
|
|
|
48
48
|
|
|
49
49
|
export function TransactionTransfersValidatorFactory(
|
|
50
50
|
signerValidators: SignerValidator[] = [SelfSignerValidator],
|
|
51
|
-
): HydratedTransactionValidationFunction
|
|
51
|
+
): HydratedTransactionValidationFunction {
|
|
52
52
|
return async (
|
|
53
|
+
context,
|
|
53
54
|
hydratedTx,
|
|
54
55
|
) => {
|
|
55
56
|
const errors: HydratedTransactionValidationError[] = []
|