@xyo-network/chain-validation 1.1.7 → 1.2.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/neutral/index.mjs +107 -97
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/types/block/index.d.ts +0 -1
- package/dist/types/block/index.d.ts.map +1 -1
- package/dist/types/block/validateBlock.d.ts +1 -1
- package/dist/types/block/validateBlock.d.ts.map +1 -1
- package/dist/types/block/validators/AllowedPayloadSchemas.d.ts +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 +1 -1
- package/dist/types/block/validators/PreviousHash.d.ts.map +1 -1
- package/dist/types/boundwitness/index.d.ts +0 -2
- package/dist/types/boundwitness/index.d.ts.map +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessReferences.d.ts +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessReferences.d.ts.map +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessSignatures.d.ts +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessSignatures.d.ts.map +1 -1
- package/dist/types/elevatedPayload/index.d.ts +1 -7
- package/dist/types/elevatedPayload/index.d.ts.map +1 -1
- package/dist/types/elevatedPayload/lib/index.d.ts +7 -0
- package/dist/types/elevatedPayload/lib/index.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/isElevatedFromBlock.d.ts +4 -0
- package/dist/types/elevatedPayload/lib/isElevatedFromBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateElevatedFromBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/lib/validateElevatedFromBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateElevatedFromTransaction.d.ts +3 -0
- package/dist/types/elevatedPayload/lib/validateElevatedFromTransaction.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateIncludedInBlock.d.ts +4 -0
- package/dist/types/elevatedPayload/lib/validateIncludedInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateTransactionInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts +5 -0
- package/dist/types/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/index.d.ts +5 -0
- package/dist/types/elevatedPayload/payloads/index.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/validateHashInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/payloads/validateHashInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/validateSchemaInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/payloads/validateSchemaInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/validatePayloadInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -0
- package/dist/types/hydratedBlock/index.d.ts +0 -1
- package/dist/types/hydratedBlock/index.d.ts.map +1 -1
- package/dist/types/hydratedBlock/validateHydratedBlock.d.ts +1 -1
- package/dist/types/hydratedBlock/validateHydratedBlock.d.ts.map +1 -1
- package/dist/types/hydratedBlock/validators/Payloads.d.ts +1 -1
- package/dist/types/hydratedBlock/validators/Payloads.d.ts.map +1 -1
- package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts +2 -2
- package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
- package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts +2 -2
- package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
- package/dist/types/transaction/validateTransaction.d.ts.map +1 -1
- package/dist/types/transaction/validators/TransactionElevation.d.ts.map +1 -1
- package/dist/types/transaction/validators/TransactionFromValidator.d.ts +3 -0
- package/dist/types/transaction/validators/TransactionFromValidator.d.ts.map +1 -0
- package/dist/types/transaction/validators/TransactionProtocol.d.ts.map +1 -1
- package/dist/types/transaction/validators/index.d.ts +1 -0
- package/dist/types/transaction/validators/index.d.ts.map +1 -1
- package/package.json +16 -16
- package/src/block/index.ts +0 -1
- package/src/block/validateBlock.ts +1 -2
- package/src/block/validators/AllowedPayloadSchemas.ts +1 -3
- package/src/block/validators/Fields.ts +1 -3
- package/src/block/validators/JsonSchema.ts +1 -3
- package/src/block/validators/PreviousHash.ts +1 -3
- package/src/boundwitness/index.ts +0 -2
- package/src/boundwitness/validators/BoundWitnessReferences.ts +1 -2
- package/src/boundwitness/validators/BoundWitnessSignatures.ts +1 -2
- package/src/elevatedPayload/index.ts +1 -7
- package/src/elevatedPayload/lib/index.ts +6 -0
- package/src/elevatedPayload/lib/isElevatedFromBlock.ts +12 -0
- package/src/elevatedPayload/{validateElevatedInBlock.ts → lib/validateElevatedFromBlock.ts} +2 -4
- package/src/elevatedPayload/lib/validateElevatedFromTransaction.ts +20 -0
- package/src/elevatedPayload/lib/validateIncludedInBlock.ts +10 -0
- package/src/elevatedPayload/lib/validateTransactionInBlock.ts +18 -0
- package/src/elevatedPayload/lib/validateTypedPayloadInBlock.ts +27 -0
- package/src/elevatedPayload/payloads/index.ts +4 -0
- package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +13 -0
- package/src/elevatedPayload/payloads/validateHashInBlock.ts +13 -0
- package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +13 -0
- package/src/elevatedPayload/payloads/validateTransferInBlock.ts +14 -0
- package/src/elevatedPayload/validatePayloadInBlock.ts +37 -0
- package/src/hydratedBlock/index.ts +0 -1
- package/src/hydratedBlock/validateHydratedBlock.ts +6 -3
- package/src/hydratedBlock/validators/Payloads.ts +9 -36
- package/src/hydratedBlockState/validateHydratedBlockState.ts +4 -4
- package/src/hydratedBlockState/validators/RequiredBalance.ts +2 -2
- package/src/transaction/validateTransaction.ts +3 -2
- package/src/transaction/validators/TransactionElevation.ts +1 -16
- package/src/transaction/validators/TransactionFromValidator.ts +16 -0
- package/src/transaction/validators/TransactionProtocol.ts +4 -6
- package/src/transaction/validators/index.ts +1 -0
- package/babel.config.json +0 -6
- package/dist/types/block/BlockValidationFunction.d.ts +0 -5
- package/dist/types/block/BlockValidationFunction.d.ts.map +0 -1
- package/dist/types/boundwitness/BoundWitnessValidationFunction.d.ts +0 -4
- package/dist/types/boundwitness/BoundWitnessValidationFunction.d.ts.map +0 -1
- package/dist/types/boundwitness/HydratedBoundWitnessValidationFunction.d.ts +0 -5
- package/dist/types/boundwitness/HydratedBoundWitnessValidationFunction.d.ts.map +0 -1
- package/dist/types/elevatedPayload/InBlockPayloadValidationFunction.d.ts +0 -6
- package/dist/types/elevatedPayload/InBlockPayloadValidationFunction.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateChainStakeIntentInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateChainStakeIntentInBlock.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateElevatedInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateElevatedInBlock.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateElevatedInTransaction.d.ts +0 -3
- package/dist/types/elevatedPayload/validateElevatedInTransaction.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateSchemaInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateSchemaInBlock.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateTransactionInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateTransactionInBlock.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateTransferInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateTransferInBlock.d.ts.map +0 -1
- package/dist/types/hydratedBlock/HydratedBlockValidationFunction.d.ts +0 -5
- package/dist/types/hydratedBlock/HydratedBlockValidationFunction.d.ts.map +0 -1
- package/src/block/BlockValidationFunction.ts +0 -8
- package/src/boundwitness/BoundWitnessValidationFunction.ts +0 -6
- package/src/boundwitness/HydratedBoundWitnessValidationFunction.ts +0 -7
- package/src/elevatedPayload/InBlockPayloadValidationFunction.ts +0 -8
- package/src/elevatedPayload/validateChainStakeIntentInBlock.ts +0 -29
- package/src/elevatedPayload/validateElevatedInTransaction.ts +0 -23
- package/src/elevatedPayload/validateSchemaInBlock.ts +0 -24
- package/src/elevatedPayload/validateTransactionInBlock.ts +0 -18
- package/src/elevatedPayload/validateTransferInBlock.ts +0 -24
- package/src/hydratedBlock/HydratedBlockValidationFunction.ts +0 -8
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
|
|
2
|
+
import type { Schema } from '@xyo-network/payload-model'
|
|
3
|
+
import { SchemaSchema } from '@xyo-network/schema-payload-plugin'
|
|
4
|
+
import type {
|
|
5
|
+
HydratedBlock,
|
|
6
|
+
InBlockPayloadValidationFunction,
|
|
7
|
+
} from '@xyo-network/xl1-model'
|
|
8
|
+
import {
|
|
9
|
+
ChainStakeIntentSchema, HashSchema, TransferSchema,
|
|
10
|
+
} from '@xyo-network/xl1-model'
|
|
11
|
+
|
|
12
|
+
import { validateTransactionInBlock } from './lib/index.ts'
|
|
13
|
+
import {
|
|
14
|
+
validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTransferInBlock,
|
|
15
|
+
} from './payloads/index.ts'
|
|
16
|
+
|
|
17
|
+
const payloadValidators: Record<Schema, InBlockPayloadValidationFunction> = {
|
|
18
|
+
[HashSchema]: validateHashInBlock,
|
|
19
|
+
[TransferSchema]: validateTransferInBlock,
|
|
20
|
+
[SchemaSchema]: validateSchemaInBlock,
|
|
21
|
+
[ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
|
|
22
|
+
[BoundWitnessSchema]: validateTransactionInBlock,
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export const validatePayloadInBlock: InBlockPayloadValidationFunction = async (
|
|
26
|
+
payload,
|
|
27
|
+
block: HydratedBlock,
|
|
28
|
+
): Promise<Error[]> => {
|
|
29
|
+
const errors: Error[] = []
|
|
30
|
+
const validator = payloadValidators[payload.schema]
|
|
31
|
+
if (validator) {
|
|
32
|
+
errors.push(...await validator(payload, block))
|
|
33
|
+
} else {
|
|
34
|
+
errors.push(new Error(`Unsupported payload schema: ${payload.schema}`))
|
|
35
|
+
}
|
|
36
|
+
return errors
|
|
37
|
+
}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import type { Address } from '@xylabs/hex'
|
|
2
|
-
import type { HydratedBlock } from '@xyo-network/xl1-model'
|
|
2
|
+
import type { HydratedBlock, HydratedBlockValidatorFunction } from '@xyo-network/xl1-model'
|
|
3
3
|
|
|
4
4
|
import { validateBlock } from '../block/index.ts'
|
|
5
5
|
import { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'
|
|
6
|
-
import type { HydratedBlockValidatorFunction } from './HydratedBlockValidationFunction.ts'
|
|
7
6
|
import { PayloadsInBlockValidator } from './validators/index.ts'
|
|
8
7
|
|
|
9
8
|
export const validateHydratedBlock: HydratedBlockValidatorFunction = async (
|
|
@@ -12,6 +11,10 @@ export const validateHydratedBlock: HydratedBlockValidatorFunction = async (
|
|
|
12
11
|
additionalValidators: HydratedBlockValidatorFunction[] = [],
|
|
13
12
|
): Promise<Error[]> => {
|
|
14
13
|
const errors: Error[] = await validateBlock(hydratedBlock[0], chainId)
|
|
15
|
-
const validators: HydratedBlockValidatorFunction[] = [
|
|
14
|
+
const validators: HydratedBlockValidatorFunction[] = [
|
|
15
|
+
BoundWitnessReferencesValidator(),
|
|
16
|
+
PayloadsInBlockValidator,
|
|
17
|
+
...additionalValidators,
|
|
18
|
+
]
|
|
16
19
|
return [...errors, ...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat()]
|
|
17
20
|
}
|
|
@@ -1,42 +1,18 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import {
|
|
1
|
+
import type { Hash } from '@xylabs/hex'
|
|
2
|
+
import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'
|
|
3
3
|
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import { SchemaSchema } from '@xyo-network/schema-payload-plugin'
|
|
7
|
-
import {
|
|
8
|
-
ChainStakeIntentSchema,
|
|
9
|
-
type FromFields,
|
|
10
|
-
type HydratedBlock,
|
|
11
|
-
TransferSchema,
|
|
4
|
+
HydratedBlock,
|
|
5
|
+
HydratedBlockValidatorFunction,
|
|
12
6
|
} from '@xyo-network/xl1-model'
|
|
13
7
|
|
|
14
|
-
import
|
|
15
|
-
import {
|
|
16
|
-
validateChainStakeIntentInBlock, validateSchemaInBlock, validateTransactionInBlock,
|
|
17
|
-
validateTransferInBlock,
|
|
18
|
-
} from '../../elevatedPayload/index.ts'
|
|
19
|
-
import type { HydratedBlockValidatorFunction } from '../HydratedBlockValidationFunction.ts'
|
|
8
|
+
import { validatePayloadInBlock } from '../../elevatedPayload/validatePayloadInBlock.ts'
|
|
20
9
|
|
|
21
10
|
export const PayloadsInBlockValidator: HydratedBlockValidatorFunction = async (
|
|
22
11
|
[block, payloads]: HydratedBlock,
|
|
23
|
-
chainId: Address,
|
|
24
12
|
) => {
|
|
25
13
|
const errors: Error[] = []
|
|
26
14
|
|
|
27
|
-
const
|
|
28
|
-
[TransferSchema]: validateTransferInBlock,
|
|
29
|
-
[ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
|
|
30
|
-
[BoundWitnessSchema]: (payload) => {
|
|
31
|
-
// TODO: Fix first block check with dual step singing
|
|
32
|
-
console.error('TODO: Fix first block check with dual step singing')
|
|
33
|
-
return block.block === 0 ? [] : validateTransactionInBlock(payload, [block, payloads], chainId)
|
|
34
|
-
},
|
|
35
|
-
[SchemaSchema]: validateSchemaInBlock,
|
|
36
|
-
}
|
|
37
|
-
const allowedSchemas = Object.keys(validators)
|
|
38
|
-
|
|
39
|
-
const payloadMap: Record<Hash, WithHashStorageMeta<Payload & FromFields>> = {}
|
|
15
|
+
const payloadMap: Record<Hash, WithHashStorageMeta<Payload>> = {}
|
|
40
16
|
for (const payload of payloads) {
|
|
41
17
|
payloadMap[payload._hash] = payload
|
|
42
18
|
}
|
|
@@ -44,12 +20,9 @@ export const PayloadsInBlockValidator: HydratedBlockValidatorFunction = async (
|
|
|
44
20
|
for (let i = 0; i < block.payload_hashes.length; i++) {
|
|
45
21
|
const hash = block.payload_hashes[i]
|
|
46
22
|
const schema = block.payload_schemas[i]
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
} else {
|
|
51
|
-
errors.push(new Error(`invalid payload schema ${hash} ${schema}`))
|
|
52
|
-
}
|
|
23
|
+
const payload = payloadMap[hash]
|
|
24
|
+
if (payload) {
|
|
25
|
+
errors.push(...await validatePayloadInBlock(payload, [block, payloads]))
|
|
53
26
|
delete payloadMap[hash]
|
|
54
27
|
} else {
|
|
55
28
|
errors.push(new Error(`missing payload ${hash} ${schema}`))
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import type { Address } from '@xylabs/hex'
|
|
2
2
|
import type { ReadArchivist } from '@xyo-network/archivist-model'
|
|
3
|
-
import type { HydratedBlock,
|
|
3
|
+
import type { HydratedBlock, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-model'
|
|
4
4
|
|
|
5
5
|
import { validateHydratedBlock } from '../hydratedBlock/index.ts'
|
|
6
6
|
import { RequiredBalanceBlockStateValidator } from './validators/index.ts'
|
|
7
7
|
|
|
8
|
-
export const validateHydratedBlockState:
|
|
8
|
+
export const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (
|
|
9
9
|
hydratedBlock: HydratedBlock,
|
|
10
10
|
chainId: Address,
|
|
11
11
|
archivist: ReadArchivist,
|
|
12
|
-
additionalValidators:
|
|
12
|
+
additionalValidators: HydratedBlockStateValidationFunction[] = [],
|
|
13
13
|
): Promise<Error[]> => {
|
|
14
14
|
const errors: Error[] = await validateHydratedBlock(hydratedBlock, chainId)
|
|
15
|
-
const validators:
|
|
15
|
+
const validators: HydratedBlockStateValidationFunction[] = [RequiredBalanceBlockStateValidator, ...additionalValidators]
|
|
16
16
|
return [...errors, ...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, archivist)))).flat()]
|
|
17
17
|
}
|
|
@@ -4,9 +4,9 @@ import type { ReadArchivist } from '@xyo-network/archivist-model'
|
|
|
4
4
|
import {
|
|
5
5
|
analyzeChain, BalanceAnalyzer, isChainSummaryBalances, netBalancesForPayloads,
|
|
6
6
|
} from '@xyo-network/chain-protocol'
|
|
7
|
-
import type { HydratedBlock,
|
|
7
|
+
import type { HydratedBlock, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-model'
|
|
8
8
|
|
|
9
|
-
export const RequiredBalanceBlockStateValidator:
|
|
9
|
+
export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (
|
|
10
10
|
block: HydratedBlock,
|
|
11
11
|
chainId: Address,
|
|
12
12
|
archivist: ReadArchivist,
|
|
@@ -6,7 +6,7 @@ import { isTransactionBoundWitness } from '@xyo-network/xl1-model'
|
|
|
6
6
|
|
|
7
7
|
import { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'
|
|
8
8
|
import {
|
|
9
|
-
TransactionElevationValidator, TransactionJsonSchemaValidator, TransactionProtocolValidator,
|
|
9
|
+
TransactionElevationValidator, TransactionFromValidator, TransactionJsonSchemaValidator, TransactionProtocolValidator,
|
|
10
10
|
} from './validators/index.ts'
|
|
11
11
|
|
|
12
12
|
export async function validateTransaction(
|
|
@@ -21,9 +21,10 @@ export async function validateTransaction(
|
|
|
21
21
|
const validators: HydratedTransactionValidatorFunction[] = [
|
|
22
22
|
TransactionProtocolValidator,
|
|
23
23
|
TransactionJsonSchemaValidator,
|
|
24
|
+
TransactionFromValidator,
|
|
24
25
|
TransactionElevationValidator,
|
|
25
26
|
BoundWitnessReferencesValidator(),
|
|
26
27
|
...additionalValidators,
|
|
27
28
|
]
|
|
28
|
-
return (await Promise.all(validators.map(v => v(tx, chainIdentification)))).flat()
|
|
29
|
+
return (await Promise.all(validators.map(v => v(tx, chainIdentification.id)))).flat()
|
|
29
30
|
}
|
|
@@ -8,21 +8,6 @@ export const TransactionElevationValidator: HydratedTransactionValidatorFunction
|
|
|
8
8
|
[tx, txPayloads]: HydratedTransactionWithStorageMeta,
|
|
9
9
|
): Promisable<Error[]> => {
|
|
10
10
|
const errors: Error[] = []
|
|
11
|
-
|
|
12
|
-
const elevatedHashes = (tx.$operations ?? [])
|
|
13
|
-
.filter(operation => operation[0] === 'elevate')
|
|
14
|
-
|
|
15
|
-
const elevatedPayloads = elevatedHashes
|
|
16
|
-
.map(([,hash]) => txPayloads.find(p => p._hash === hash)).filter(exists)
|
|
17
|
-
|
|
18
|
-
if (elevatedPayloads.length < elevatedHashes.length) {
|
|
19
|
-
errors.push(new Error('missing elevated payload'))
|
|
20
|
-
}
|
|
21
|
-
if (elevatedPayloads.length > elevatedHashes.length) {
|
|
22
|
-
errors.push(new Error('extra elevated payload'))
|
|
23
|
-
}
|
|
24
|
-
} catch (ex) {
|
|
25
|
-
errors.push(new Error('validation excepted'), ex as Error)
|
|
26
|
-
}
|
|
11
|
+
// TODO: Add validation for transaction elevation
|
|
27
12
|
return errors
|
|
28
13
|
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { type Address, asAddress } from '@xylabs/hex'
|
|
2
|
+
import { addressesContains } from '@xyo-network/boundwitness-validator'
|
|
3
|
+
import type {
|
|
4
|
+
HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,
|
|
5
|
+
} from '@xyo-network/xl1-model'
|
|
6
|
+
|
|
7
|
+
export const TransactionFromValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = (
|
|
8
|
+
[tx]: HydratedTransaction,
|
|
9
|
+
_chainId: Address,
|
|
10
|
+
): Error[] => {
|
|
11
|
+
const errors: Error[] = []
|
|
12
|
+
const from = asAddress(tx.from)
|
|
13
|
+
if (from === undefined)errors.push(new Error('Transaction from is not a valid address'))
|
|
14
|
+
else if (!addressesContains(tx, from)) errors.push(new Error('Transaction from address must be listed in addresses'))
|
|
15
|
+
return errors
|
|
16
|
+
}
|
|
@@ -1,23 +1,21 @@
|
|
|
1
|
+
import type { Address } from '@xylabs/hex'
|
|
1
2
|
import { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'
|
|
2
3
|
import type {
|
|
3
|
-
|
|
4
|
+
HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,
|
|
4
5
|
} from '@xyo-network/xl1-model'
|
|
5
6
|
|
|
6
7
|
export const TransactionProtocolValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = async (
|
|
7
8
|
[tx]: HydratedTransaction,
|
|
8
|
-
|
|
9
|
+
chainId: Address,
|
|
9
10
|
): Promise<Error[]> => {
|
|
10
11
|
const errors: Error[] = []
|
|
11
12
|
try {
|
|
12
13
|
if (!await BoundWitnessWrapper.parse(tx).getValid()) {
|
|
13
14
|
errors.push(new Error('failed basic boundwitness parse'))
|
|
14
15
|
}
|
|
15
|
-
if (
|
|
16
|
+
if (chainId && tx.chain !== chainId) {
|
|
16
17
|
errors.push(new Error('invalid chain id'))
|
|
17
18
|
}
|
|
18
|
-
if (tx.nonce.length !== tx.addresses.length) {
|
|
19
|
-
errors.push(new Error('invalid nonce length'))
|
|
20
|
-
}
|
|
21
19
|
} catch (ex) {
|
|
22
20
|
errors.push(new Error('validation excepted'), ex as Error)
|
|
23
21
|
}
|
package/babel.config.json
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex';
|
|
2
|
-
import type { Promisable } from '@xylabs/promise';
|
|
3
|
-
import type { BlockBoundWitness } from '@xyo-network/xl1-model';
|
|
4
|
-
export type BlockValidatorFunction = (block: BlockBoundWitness, chainId?: Address) => Promisable<Error[]>;
|
|
5
|
-
//# sourceMappingURL=BlockValidationFunction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BlockValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/block/BlockValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA;AAE/D,MAAM,MAAM,sBAAsB,GAAG,CACnC,KAAK,EAAE,iBAAiB,EACxB,OAAO,CAAC,EAAE,OAAO,KACd,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import type { Promisable } from '@xylabs/promise';
|
|
2
|
-
import type { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
3
|
-
export type BoundWitnessValidationFunction<T extends BoundWitness = BoundWitness> = (bw: T) => Promisable<Error[]>;
|
|
4
|
-
//# sourceMappingURL=BoundWitnessValidationFunction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"BoundWitnessValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/boundwitness/BoundWitnessValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAEnE,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,CAClF,EAAE,EAAE,CAAC,KACF,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { Promisable } from '@xylabs/promise';
|
|
2
|
-
import type { HydratedBoundWitnessWithStorageMeta } from '@xyo-network/archivist-model';
|
|
3
|
-
import type { BoundWitness } from '@xyo-network/boundwitness-model';
|
|
4
|
-
export type HydratedBoundWitnessValidationFunction<T extends BoundWitness = BoundWitness> = (bw: HydratedBoundWitnessWithStorageMeta<T>) => Promisable<Error[]>;
|
|
5
|
-
//# sourceMappingURL=HydratedBoundWitnessValidationFunction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HydratedBoundWitnessValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/boundwitness/HydratedBoundWitnessValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,mCAAmC,EAAE,MAAM,8BAA8B,CAAA;AACvF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAA;AAEnE,MAAM,MAAM,sCAAsC,CAAC,CAAC,SAAS,YAAY,GAAG,YAAY,IAAI,CAC1F,EAAE,EAAE,mCAAmC,CAAC,CAAC,CAAC,KACvC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex';
|
|
2
|
-
import type { Promisable } from '@xylabs/promise';
|
|
3
|
-
import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model';
|
|
4
|
-
import type { FromFields, HydratedBlock } from '@xyo-network/xl1-model';
|
|
5
|
-
export type InBlockPayloadValidationFunction = (payload: WithHashStorageMeta<Payload<FromFields>>, block: HydratedBlock, chainId: Address) => Promisable<Error[]>;
|
|
6
|
-
//# sourceMappingURL=InBlockPayloadValidationFunction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"InBlockPayloadValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/InBlockPayloadValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAC9E,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAEvE,MAAM,MAAM,gCAAgC,GAAG,CAC7C,OAAO,EAAE,mBAAmB,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,OAAO,KACtF,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateChainStakeIntentInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateChainStakeIntentInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAI7F,eAAO,MAAM,+BAA+B,EAAE,gCAoB7C,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateElevatedInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateElevatedInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAE7F,eAAO,MAAM,uBAAuB,EAAE,gCAUrC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateElevatedInTransaction.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateElevatedInTransaction.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAE7F,eAAO,MAAM,6BAA6B,EAAE,gCAgB3C,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateSchemaInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateSchemaInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAI7F,eAAO,MAAM,qBAAqB,EAAE,gCAenC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateTransactionInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateTransactionInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAE7F,eAAO,MAAM,0BAA0B,EAAE,gCAWxC,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"validateTransferInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validateTransferInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,uCAAuC,CAAA;AAI7F,eAAO,MAAM,uBAAuB,EAAE,gCAerC,CAAA"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex';
|
|
2
|
-
import type { Promisable } from '@xylabs/promise';
|
|
3
|
-
import type { HydratedBlock } from '@xyo-network/xl1-model';
|
|
4
|
-
export type HydratedBlockValidatorFunction = (hydratedBlock: HydratedBlock, chainId: Address) => Promisable<Error[]>;
|
|
5
|
-
//# sourceMappingURL=HydratedBlockValidationFunction.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"HydratedBlockValidationFunction.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlock/HydratedBlockValidationFunction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACjD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAA;AAE3D,MAAM,MAAM,8BAA8B,GAAG,CAC3C,aAAa,EAAE,aAAa,EAC5B,OAAO,EAAE,OAAO,KACb,UAAU,CAAC,KAAK,EAAE,CAAC,CAAA"}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex'
|
|
2
|
-
import type { Promisable } from '@xylabs/promise'
|
|
3
|
-
import type { BlockBoundWitness } from '@xyo-network/xl1-model'
|
|
4
|
-
|
|
5
|
-
export type BlockValidatorFunction = (
|
|
6
|
-
block: BlockBoundWitness,
|
|
7
|
-
chainId?: Address,
|
|
8
|
-
) => Promisable<Error[]>
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { Promisable } from '@xylabs/promise'
|
|
2
|
-
import type { HydratedBoundWitnessWithStorageMeta } from '@xyo-network/archivist-model'
|
|
3
|
-
import type { BoundWitness } from '@xyo-network/boundwitness-model'
|
|
4
|
-
|
|
5
|
-
export type HydratedBoundWitnessValidationFunction<T extends BoundWitness = BoundWitness> = (
|
|
6
|
-
bw: HydratedBoundWitnessWithStorageMeta<T>
|
|
7
|
-
) => Promisable<Error[]>
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex'
|
|
2
|
-
import type { Promisable } from '@xylabs/promise'
|
|
3
|
-
import type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'
|
|
4
|
-
import type { FromFields, HydratedBlock } from '@xyo-network/xl1-model'
|
|
5
|
-
|
|
6
|
-
export type InBlockPayloadValidationFunction = (
|
|
7
|
-
payload: WithHashStorageMeta<Payload<FromFields>>, block: HydratedBlock, chainId: Address
|
|
8
|
-
) => Promisable<Error[]>
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex'
|
|
2
|
-
import type { HydratedBlock } from '@xyo-network/xl1-model'
|
|
3
|
-
import { isChainStakeIntent } from '@xyo-network/xl1-model'
|
|
4
|
-
|
|
5
|
-
import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
|
|
6
|
-
import { validateElevatedInBlock } from './validateElevatedInBlock.ts'
|
|
7
|
-
import { validateElevatedInTransaction } from './validateElevatedInTransaction.ts'
|
|
8
|
-
|
|
9
|
-
export const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (
|
|
10
|
-
payload,
|
|
11
|
-
block: HydratedBlock,
|
|
12
|
-
chainId: Address,
|
|
13
|
-
): Promise<Error[]> => {
|
|
14
|
-
const errors: Error[] = []
|
|
15
|
-
if (!isChainStakeIntent(payload)) {
|
|
16
|
-
errors.push(new Error('Payload is not a chain stake intent'))
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (!block[0].payload_hashes.includes(payload._hash)) {
|
|
20
|
-
errors.push(new Error('ChainStakeIntent not included in block'))
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
if (block[0].addresses.includes(payload.from)) {
|
|
24
|
-
errors.push(...await validateElevatedInBlock(payload, block, chainId))
|
|
25
|
-
} else {
|
|
26
|
-
errors.push(...await validateElevatedInTransaction(payload, block, chainId))
|
|
27
|
-
}
|
|
28
|
-
return errors
|
|
29
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import type { Promisable } from '@xylabs/promise'
|
|
2
|
-
import { transactionsFromHydratedBlock } from '@xyo-network/chain-protocol'
|
|
3
|
-
import type { HydratedBlock } from '@xyo-network/xl1-model'
|
|
4
|
-
|
|
5
|
-
import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
|
|
6
|
-
|
|
7
|
-
export const validateElevatedInTransaction: InBlockPayloadValidationFunction = (
|
|
8
|
-
payload,
|
|
9
|
-
block: HydratedBlock,
|
|
10
|
-
): Promisable<Error[]> => {
|
|
11
|
-
const errors: Error[] = []
|
|
12
|
-
const txs = transactionsFromHydratedBlock(block)
|
|
13
|
-
const fromTxs = txs.filter(tx => tx.addresses.includes(payload.from))
|
|
14
|
-
if (fromTxs.length > 0) {
|
|
15
|
-
const hashes = fromTxs.flatMap(tx => tx.payload_hashes)
|
|
16
|
-
if (!hashes.includes(payload._hash)) {
|
|
17
|
-
errors.push(new Error('Transaction does not include payload'))
|
|
18
|
-
}
|
|
19
|
-
} else {
|
|
20
|
-
errors.push(new Error(`Missing transaction for from address ${payload.from} [${payload.schema}]`))
|
|
21
|
-
}
|
|
22
|
-
return errors
|
|
23
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex'
|
|
2
|
-
import { isSchemaPayload } from '@xyo-network/schema-payload-plugin'
|
|
3
|
-
import type { HydratedBlock } from '@xyo-network/xl1-model'
|
|
4
|
-
|
|
5
|
-
import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
|
|
6
|
-
import { validateElevatedInBlock } from './validateElevatedInBlock.ts'
|
|
7
|
-
import { validateElevatedInTransaction } from './validateElevatedInTransaction.ts'
|
|
8
|
-
|
|
9
|
-
export const validateSchemaInBlock: InBlockPayloadValidationFunction = async (
|
|
10
|
-
payload,
|
|
11
|
-
block: HydratedBlock,
|
|
12
|
-
chainId: Address,
|
|
13
|
-
): Promise<Error[]> => {
|
|
14
|
-
const errors: Error[] = []
|
|
15
|
-
if (!isSchemaPayload(payload)) {
|
|
16
|
-
errors.push(new Error('Payload is not a schema'))
|
|
17
|
-
}
|
|
18
|
-
if (payload.from === chainId || block[0].addresses.includes(payload.from)) {
|
|
19
|
-
errors.push(...await validateElevatedInBlock(payload, block, chainId))
|
|
20
|
-
} else {
|
|
21
|
-
errors.push(...await validateElevatedInTransaction(payload, block, chainId))
|
|
22
|
-
}
|
|
23
|
-
return errors
|
|
24
|
-
}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import type { HydratedBlock } from '@xyo-network/xl1-model'
|
|
2
|
-
import { isTransactionBoundWitness } from '@xyo-network/xl1-model'
|
|
3
|
-
|
|
4
|
-
import { BoundWitnessSignaturesValidator } from '../boundwitness/index.ts'
|
|
5
|
-
import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
|
|
6
|
-
|
|
7
|
-
export const validateTransactionInBlock: InBlockPayloadValidationFunction = async (
|
|
8
|
-
payload,
|
|
9
|
-
_block: HydratedBlock,
|
|
10
|
-
): Promise<Error[]> => {
|
|
11
|
-
const errors: Error[] = []
|
|
12
|
-
if (isTransactionBoundWitness(payload)) {
|
|
13
|
-
errors.push(...await BoundWitnessSignaturesValidator(payload))
|
|
14
|
-
} else {
|
|
15
|
-
errors.push(new Error('Payload is not a transaction'))
|
|
16
|
-
}
|
|
17
|
-
return errors
|
|
18
|
-
}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex'
|
|
2
|
-
import type { HydratedBlock } from '@xyo-network/xl1-model'
|
|
3
|
-
import { isTransfer } from '@xyo-network/xl1-model'
|
|
4
|
-
|
|
5
|
-
import type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'
|
|
6
|
-
import { validateElevatedInBlock } from './validateElevatedInBlock.ts'
|
|
7
|
-
import { validateElevatedInTransaction } from './validateElevatedInTransaction.ts'
|
|
8
|
-
|
|
9
|
-
export const validateTransferInBlock: InBlockPayloadValidationFunction = async (
|
|
10
|
-
payload,
|
|
11
|
-
block: HydratedBlock,
|
|
12
|
-
chainId: Address,
|
|
13
|
-
): Promise<Error[]> => {
|
|
14
|
-
const errors: Error[] = []
|
|
15
|
-
if (!isTransfer(payload)) {
|
|
16
|
-
errors.push(new Error('Payload is not a transfer'))
|
|
17
|
-
}
|
|
18
|
-
if (payload.from === chainId || block[0].addresses.includes(payload.from)) {
|
|
19
|
-
errors.push(...await validateElevatedInBlock(payload, block, chainId))
|
|
20
|
-
} else {
|
|
21
|
-
errors.push(...await validateElevatedInTransaction(payload, block, chainId))
|
|
22
|
-
}
|
|
23
|
-
return errors
|
|
24
|
-
}
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/hex'
|
|
2
|
-
import type { Promisable } from '@xylabs/promise'
|
|
3
|
-
import type { HydratedBlock } from '@xyo-network/xl1-model'
|
|
4
|
-
|
|
5
|
-
export type HydratedBlockValidatorFunction = (
|
|
6
|
-
hydratedBlock: HydratedBlock,
|
|
7
|
-
chainId: Address,
|
|
8
|
-
) => Promisable<Error[]>
|