@xyo-network/chain-validation 1.5.30 → 1.5.31
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 +126 -76
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/types/block/validateBlock.d.ts.map +1 -1
- package/dist/types/block/validators/AllowedPayloadSchemas.d.ts.map +1 -1
- package/dist/types/block/validators/Fields.d.ts +1 -1
- package/dist/types/block/validators/Fields.d.ts.map +1 -1
- package/dist/types/block/validators/JsonSchema.d.ts +1 -1
- package/dist/types/block/validators/JsonSchema.d.ts.map +1 -1
- package/dist/types/block/validators/PreviousHash.d.ts.map +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessReferences.d.ts.map +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessSignatures.d.ts.map +1 -1
- package/dist/types/elevatedPayload/payloads/validateSchemaInBlock.d.ts.map +1 -1
- package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts +1 -1
- package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts.map +1 -1
- package/dist/types/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
- package/dist/types/hydratedBlock/validateHydratedBlock.d.ts +2 -2
- package/dist/types/hydratedBlock/validateHydratedBlock.d.ts.map +1 -1
- package/dist/types/hydratedBlock/validators/Payloads.d.ts +2 -2
- package/dist/types/hydratedBlock/validators/Payloads.d.ts.map +1 -1
- package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
- package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
- package/dist/types/transaction/validateTransaction.d.ts +2 -2
- package/dist/types/transaction/validateTransaction.d.ts.map +1 -1
- package/dist/types/transaction/validators/TransactionDurationValidator.d.ts +2 -2
- package/dist/types/transaction/validators/TransactionDurationValidator.d.ts.map +1 -1
- package/dist/types/transaction/validators/TransactionElevationValidator.d.ts +2 -2
- package/dist/types/transaction/validators/TransactionElevationValidator.d.ts.map +1 -1
- package/dist/types/transaction/validators/TransactionFromValidator.d.ts +2 -2
- package/dist/types/transaction/validators/TransactionFromValidator.d.ts.map +1 -1
- package/dist/types/transaction/validators/TransactionGasValidator.d.ts +2 -2
- package/dist/types/transaction/validators/TransactionGasValidator.d.ts.map +1 -1
- package/dist/types/transaction/validators/TransactionJsonSchemaValidator.d.ts +2 -2
- package/dist/types/transaction/validators/TransactionJsonSchemaValidator.d.ts.map +1 -1
- package/dist/types/transaction/validators/TransactionProtocolValidator.d.ts +2 -2
- package/dist/types/transaction/validators/TransactionProtocolValidator.d.ts.map +1 -1
- package/package.json +6 -6
- package/src/block/validateBlock.ts +3 -2
- package/src/block/validators/AllowedPayloadSchemas.ts +4 -4
- package/src/block/validators/Fields.ts +7 -5
- package/src/block/validators/JsonSchema.ts +7 -6
- package/src/block/validators/PreviousHash.ts +6 -5
- package/src/boundwitness/validators/BoundWitnessReferences.ts +9 -8
- package/src/boundwitness/validators/BoundWitnessSignatures.ts +5 -4
- package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +4 -4
- package/src/elevatedPayload/payloads/validateHashInBlock.ts +4 -4
- package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +3 -2
- package/src/elevatedPayload/payloads/validateTransferInBlock.ts +6 -4
- package/src/elevatedPayload/validatePayloadInBlock.ts +6 -5
- package/src/hydratedBlock/validateHydratedBlock.ts +7 -6
- package/src/hydratedBlock/validators/Payloads.ts +7 -6
- package/src/hydratedBlockState/validateHydratedBlockState.ts +7 -2
- package/src/hydratedBlockState/validators/RequiredBalance.ts +13 -4
- package/src/transaction/validateTransaction.ts +5 -5
- package/src/transaction/validators/TransactionDurationValidator.ts +12 -11
- package/src/transaction/validators/TransactionElevationValidator.ts +8 -8
- package/src/transaction/validators/TransactionFromValidator.ts +10 -9
- package/src/transaction/validators/TransactionGasValidator.ts +42 -18
- package/src/transaction/validators/TransactionJsonSchemaValidator.ts +9 -9
- package/src/transaction/validators/TransactionProtocolValidator.ts +9 -8
|
@@ -1,37 +1,61 @@
|
|
|
1
1
|
import { hexToBigInt } from '@xylabs/hex'
|
|
2
|
+
import type {
|
|
3
|
+
HydratedTransaction,
|
|
4
|
+
HydratedTransactionValidationFunction,
|
|
5
|
+
TransactionBoundWitness, TransactionFeesBigInt, TransactionFeesHex,
|
|
6
|
+
} from '@xyo-network/xl1-protocol'
|
|
2
7
|
import {
|
|
3
8
|
AttoXL1,
|
|
4
|
-
|
|
9
|
+
HydratedTransactionValidationError,
|
|
5
10
|
minTransactionFees,
|
|
6
|
-
type TransactionBoundWitness, type TransactionFeesBigInt, type TransactionFeesHex,
|
|
7
11
|
} from '@xyo-network/xl1-protocol'
|
|
8
12
|
|
|
9
|
-
export const TransactionGasValidator:
|
|
10
|
-
|
|
11
|
-
)
|
|
12
|
-
const errors: Error[] = []
|
|
13
|
+
export const TransactionGasValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (
|
|
14
|
+
tx: HydratedTransaction,
|
|
15
|
+
) => {
|
|
16
|
+
const errors: (HydratedTransactionValidationError | Error)[] = []
|
|
13
17
|
try {
|
|
14
|
-
if (tx?.fees === undefined) {
|
|
15
|
-
errors.push(new
|
|
18
|
+
if (tx?.[0].fees === undefined) {
|
|
19
|
+
errors.push(new HydratedTransactionValidationError(tx, 'Missing fees'))
|
|
16
20
|
} else {
|
|
17
21
|
const {
|
|
18
22
|
base, gasLimit, gasPrice, priority,
|
|
19
|
-
} = parseFees(tx.fees)
|
|
23
|
+
} = parseFees(tx[0].fees)
|
|
20
24
|
|
|
21
|
-
if (base === undefined) errors.push(new
|
|
22
|
-
|
|
25
|
+
if (base === undefined) errors.push(new HydratedTransactionValidationError(
|
|
26
|
+
tx,
|
|
27
|
+
'fees.base must be defined and a valid number',
|
|
28
|
+
))
|
|
29
|
+
else if (base < minTransactionFees.base) errors.push(new HydratedTransactionValidationError(
|
|
30
|
+
tx,
|
|
31
|
+
`fees.base must be >= ${minTransactionFees.base}`,
|
|
32
|
+
))
|
|
23
33
|
|
|
24
|
-
if (gasLimit === undefined) errors.push(new
|
|
25
|
-
else if (gasLimit < minTransactionFees.gasLimit) errors.push(new
|
|
34
|
+
if (gasLimit === undefined) errors.push(new HydratedTransactionValidationError(tx, 'fees.gasLimit must be defined and a valid number'))
|
|
35
|
+
else if (gasLimit < minTransactionFees.gasLimit) errors.push(new HydratedTransactionValidationError(
|
|
36
|
+
tx,
|
|
37
|
+
`fees.gasLimit must be >= ${minTransactionFees.gasLimit}`,
|
|
38
|
+
))
|
|
26
39
|
|
|
27
|
-
if (gasPrice === undefined) errors.push(
|
|
28
|
-
|
|
40
|
+
if (gasPrice === undefined) errors.push(
|
|
41
|
+
new HydratedTransactionValidationError(tx, 'fees.gasPrice must be defined and a valid number'),
|
|
42
|
+
)
|
|
43
|
+
else if (gasPrice < minTransactionFees.gasPrice) errors.push(new HydratedTransactionValidationError(
|
|
44
|
+
tx,
|
|
45
|
+
`fees.gasPrice must be >= ${minTransactionFees.gasPrice}`,
|
|
46
|
+
))
|
|
29
47
|
|
|
30
|
-
if (priority === undefined) errors.push(new
|
|
31
|
-
|
|
48
|
+
if (priority === undefined) errors.push(new HydratedTransactionValidationError(
|
|
49
|
+
tx,
|
|
50
|
+
'fees.priority must be defined and a valid number',
|
|
51
|
+
))
|
|
52
|
+
else if (priority < minTransactionFees.priority) errors.push(new HydratedTransactionValidationError(
|
|
53
|
+
tx,
|
|
54
|
+
`fees.priority must be >= ${minTransactionFees.priority}`,
|
|
55
|
+
))
|
|
32
56
|
}
|
|
33
57
|
} catch (e) {
|
|
34
|
-
errors.push(new
|
|
58
|
+
errors.push(new HydratedTransactionValidationError(tx, `Failed TransactionGasValidator: ${e instanceof Error ? e.message : String(e)}`))
|
|
35
59
|
}
|
|
36
60
|
return errors
|
|
37
61
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { Promisable } from '@xylabs/promise'
|
|
2
1
|
import { TransactionBoundWitnessJsonSchema } from '@xyo-network/chain-schema'
|
|
3
2
|
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
4
3
|
import type {
|
|
5
|
-
HydratedTransaction,
|
|
4
|
+
HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,
|
|
6
5
|
} from '@xyo-network/xl1-protocol'
|
|
6
|
+
import { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'
|
|
7
7
|
import type { ValidateFunction } from 'ajv'
|
|
8
8
|
import { Ajv } from 'ajv'
|
|
9
9
|
|
|
@@ -11,20 +11,20 @@ const ajv = new Ajv({ allErrors: true, strict: true })
|
|
|
11
11
|
|
|
12
12
|
let validate: ValidateFunction<TransactionBoundWitness> | undefined
|
|
13
13
|
|
|
14
|
-
export const TransactionJsonSchemaValidator:
|
|
15
|
-
|
|
16
|
-
)
|
|
17
|
-
const errors: Error[] = []
|
|
14
|
+
export const TransactionJsonSchemaValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = (
|
|
15
|
+
tx: HydratedTransaction,
|
|
16
|
+
) => {
|
|
17
|
+
const errors: (HydratedTransactionValidationError | Error)[] = []
|
|
18
18
|
try {
|
|
19
19
|
if (validate === undefined) validate = ajv.compile(TransactionBoundWitnessJsonSchema)
|
|
20
20
|
// see if you can export the super set
|
|
21
|
-
if (!validate(PayloadBuilder.omitStorageMeta(tx))) {
|
|
22
|
-
const error = new
|
|
21
|
+
if (!validate(PayloadBuilder.omitStorageMeta(tx[0]))) {
|
|
22
|
+
const error = new HydratedTransactionValidationError(tx, 'failed JSON schema validation')
|
|
23
23
|
error.cause = validate.errors
|
|
24
24
|
errors.push(error)
|
|
25
25
|
}
|
|
26
26
|
} catch (ex) {
|
|
27
|
-
errors.push(new
|
|
27
|
+
errors.push(new HydratedTransactionValidationError(tx, 'validation excepted'), ex as Error)
|
|
28
28
|
}
|
|
29
29
|
return errors
|
|
30
30
|
}
|
|
@@ -1,19 +1,20 @@
|
|
|
1
1
|
import type { Address } from '@xylabs/hex'
|
|
2
2
|
import type {
|
|
3
|
-
HydratedTransaction,
|
|
3
|
+
HydratedTransaction, HydratedTransactionValidationFunction, TransactionBoundWitness,
|
|
4
4
|
} from '@xyo-network/xl1-protocol'
|
|
5
|
+
import { HydratedTransactionValidationError } from '@xyo-network/xl1-protocol'
|
|
5
6
|
|
|
6
|
-
export const TransactionProtocolValidator:
|
|
7
|
-
|
|
7
|
+
export const TransactionProtocolValidator: HydratedTransactionValidationFunction<TransactionBoundWitness> = async (
|
|
8
|
+
tx: HydratedTransaction,
|
|
8
9
|
chainId?: Address,
|
|
9
|
-
)
|
|
10
|
-
const errors: Error[] = []
|
|
10
|
+
) => {
|
|
11
|
+
const errors: (HydratedTransactionValidationError | Error)[] = []
|
|
11
12
|
try {
|
|
12
|
-
if (chainId !== undefined && tx.chain !== chainId) {
|
|
13
|
-
errors.push(new
|
|
13
|
+
if (chainId !== undefined && tx[0].chain !== chainId) {
|
|
14
|
+
errors.push(new HydratedTransactionValidationError(tx, 'invalid chain id'))
|
|
14
15
|
}
|
|
15
16
|
} catch (ex) {
|
|
16
|
-
errors.push(new
|
|
17
|
+
errors.push(new HydratedTransactionValidationError(tx, 'validation excepted'), ex as Error)
|
|
17
18
|
}
|
|
18
19
|
return await Promise.resolve(errors)
|
|
19
20
|
}
|