@xyo-network/chain-validation 1.18.0 → 1.18.2
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/block/validateBlock.d.ts +2 -3
- package/dist/neutral/block/validateBlock.d.ts.map +1 -1
- package/dist/neutral/block/validators/AllowedPayloadSchemas.d.ts +1 -1
- package/dist/neutral/block/validators/AllowedPayloadSchemas.d.ts.map +1 -1
- package/dist/neutral/block/validators/Fields.d.ts +1 -1
- package/dist/neutral/block/validators/Fields.d.ts.map +1 -1
- package/dist/neutral/block/validators/JsonSchema.d.ts +1 -1
- package/dist/neutral/block/validators/JsonSchema.d.ts.map +1 -1
- package/dist/neutral/block/validators/PreviousHash.d.ts +1 -1
- package/dist/neutral/block/validators/PreviousHash.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/lib/isElevatedFromBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/lib/isElevatedFromBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/lib/validateElevatedFromBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/lib/validateElevatedFromBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/lib/validateElevatedFromTransaction.d.ts +1 -1
- package/dist/neutral/elevatedPayload/lib/validateElevatedFromTransaction.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/lib/validateIncludedInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/lib/validateIncludedInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/lib/validateTransactionInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeIntentInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeIntentInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateHashInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateHashInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateSchemaInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateSchemaInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateTimeInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateTimeInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateTransferInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateTransferInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/validatePayloadInBlock.d.ts +1 -1
- package/dist/neutral/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
- package/dist/neutral/hydratedBlock/validateHydratedBlock.d.ts +4 -4
- package/dist/neutral/hydratedBlock/validateHydratedBlock.d.ts.map +1 -1
- package/dist/neutral/hydratedBlock/validators/Payloads.d.ts +1 -1
- package/dist/neutral/hydratedBlock/validators/Payloads.d.ts.map +1 -1
- package/dist/neutral/hydratedBlockState/validateHydratedBlockState.d.ts +1 -1
- package/dist/neutral/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
- package/dist/neutral/hydratedBlockState/validators/RequiredBalance.d.ts +1 -1
- package/dist/neutral/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
- package/dist/neutral/index.mjs +44 -39
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +18 -21
- package/src/block/validateBlock.ts +4 -4
- package/src/block/validators/AllowedPayloadSchemas.ts +5 -3
- package/src/block/validators/Fields.ts +4 -3
- package/src/block/validators/JsonSchema.ts +2 -4
- package/src/block/validators/PreviousHash.ts +2 -3
- package/src/elevatedPayload/lib/isElevatedFromBlock.ts +1 -1
- package/src/elevatedPayload/lib/validateElevatedFromBlock.ts +2 -3
- package/src/elevatedPayload/lib/validateElevatedFromTransaction.ts +2 -3
- package/src/elevatedPayload/lib/validateIncludedInBlock.ts +1 -1
- package/src/elevatedPayload/lib/validateTransactionInBlock.ts +4 -3
- package/src/elevatedPayload/lib/validateTypedPayloadInBlock.ts +1 -1
- package/src/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts +2 -2
- package/src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts +2 -2
- package/src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts +2 -2
- package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +2 -2
- package/src/elevatedPayload/payloads/validateHashInBlock.ts +2 -2
- package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +2 -2
- package/src/elevatedPayload/payloads/validateTimeInBlock.ts +2 -2
- package/src/elevatedPayload/payloads/validateTransferInBlock.ts +2 -2
- package/src/elevatedPayload/validatePayloadInBlock.ts +2 -2
- package/src/hydratedBlock/validateHydratedBlock.ts +12 -7
- package/src/hydratedBlock/validators/Payloads.ts +2 -2
- package/src/hydratedBlockState/validateHydratedBlockState.ts +9 -7
- package/src/hydratedBlockState/validators/RequiredBalance.ts +13 -9
|
@@ -1,21 +1,26 @@
|
|
|
1
|
+
import type { Promisable } from '@xylabs/sdk-js'
|
|
1
2
|
import { ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
|
-
import type {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
import { BoundWitnessReferencesValidator } from '@xyo-network/xl1-
|
|
3
|
+
import type {
|
|
4
|
+
BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,
|
|
5
|
+
} from '@xyo-network/xl1-sdk'
|
|
6
|
+
import { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'
|
|
6
7
|
|
|
7
8
|
import { validateBlock } from '../block/index.ts'
|
|
8
9
|
import { PayloadsInBlockValidator } from './validators/index.ts'
|
|
9
10
|
|
|
10
11
|
export const validateHydratedBlock = async (
|
|
11
12
|
hydratedBlock: HydratedBlockWithHashMeta,
|
|
12
|
-
|
|
13
|
+
chainIdAtBlockNumber?: (blockNumber: number) => Promisable<ChainId>,
|
|
13
14
|
additionalValidators: HydratedBlockValidationFunction[] = [],
|
|
14
15
|
additionalBlockValidators: BlockValidatorFunction[] = [],
|
|
15
16
|
) => {
|
|
16
17
|
const errors: HydratedBlockValidationError[] = []
|
|
17
18
|
try {
|
|
18
|
-
const validateBlockErrors = await validateBlock(
|
|
19
|
+
const validateBlockErrors = await validateBlock(
|
|
20
|
+
hydratedBlock[0],
|
|
21
|
+
chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,
|
|
22
|
+
additionalBlockValidators,
|
|
23
|
+
)
|
|
19
24
|
for (const validateBlockError of validateBlockErrors) {
|
|
20
25
|
errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))
|
|
21
26
|
}
|
|
@@ -27,7 +32,7 @@ export const validateHydratedBlock = async (
|
|
|
27
32
|
PayloadsInBlockValidator,
|
|
28
33
|
...additionalValidators,
|
|
29
34
|
]
|
|
30
|
-
errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock,
|
|
35
|
+
errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainIdAtBlockNumber)))).flat())
|
|
31
36
|
} catch (ex) {
|
|
32
37
|
errors.push(new HydratedBlockValidationError(
|
|
33
38
|
hydratedBlock?.[0]?._hash ?? ZERO_HASH,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Hash, ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
2
|
import type { Payload, WithHashMeta } from '@xyo-network/payload-model'
|
|
3
|
-
import type { HydratedBlockValidationFunction } from '@xyo-network/xl1-
|
|
4
|
-
import { HydratedBlockValidationError } from '@xyo-network/xl1-
|
|
3
|
+
import type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'
|
|
4
|
+
import { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'
|
|
5
5
|
|
|
6
6
|
import { validatePayloadInBlock } from '../../elevatedPayload/index.ts'
|
|
7
7
|
|
|
@@ -1,20 +1,22 @@
|
|
|
1
1
|
import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
|
-
import type { HydratedBlockStateValidationFunction } from '@xyo-network/xl1-
|
|
3
|
-
import { HydratedBlockStateValidationError } from '@xyo-network/xl1-
|
|
2
|
+
import type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'
|
|
3
|
+
import { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'
|
|
4
4
|
|
|
5
5
|
import { validateHydratedBlock } from '../hydratedBlock/index.ts'
|
|
6
6
|
import { RequiredBalanceBlockStateValidator } from './validators/index.ts'
|
|
7
7
|
|
|
8
8
|
export const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (
|
|
9
9
|
hydratedBlock,
|
|
10
|
-
|
|
10
|
+
chainIdAtBlockNumber,
|
|
11
11
|
services,
|
|
12
12
|
additionalValidators = [],
|
|
13
13
|
) => {
|
|
14
14
|
return await spanRootAsync('validateHydratedBlockState', async () => {
|
|
15
15
|
const errors: HydratedBlockStateValidationError[] = []
|
|
16
|
+
let chainId: ChainId | undefined
|
|
16
17
|
try {
|
|
17
|
-
|
|
18
|
+
chainId = await chainIdAtBlockNumber(hydratedBlock[0].block)
|
|
19
|
+
const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainIdAtBlockNumber)
|
|
18
20
|
for (const validateHydratedBlockError of validateHydratedBlockErrors) {
|
|
19
21
|
errors.push(new HydratedBlockStateValidationError(
|
|
20
22
|
hydratedBlock[0]._hash,
|
|
@@ -28,16 +30,16 @@ export const validateHydratedBlockState: HydratedBlockStateValidationFunction =
|
|
|
28
30
|
RequiredBalanceBlockStateValidator,
|
|
29
31
|
...additionalValidators,
|
|
30
32
|
]
|
|
31
|
-
errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock,
|
|
33
|
+
errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainIdAtBlockNumber, services)))).flat())
|
|
32
34
|
} catch (ex) {
|
|
33
35
|
errors.push(new HydratedBlockStateValidationError(
|
|
34
36
|
hydratedBlock?.[0]?._hash ?? ZERO_HASH,
|
|
35
|
-
chainId,
|
|
37
|
+
chainId ?? '00' as ChainId,
|
|
36
38
|
hydratedBlock,
|
|
37
39
|
`Failed validateHydratedBlockState: ${ex}`,
|
|
38
40
|
ex,
|
|
39
41
|
))
|
|
40
42
|
}
|
|
41
43
|
return errors
|
|
42
|
-
})
|
|
44
|
+
}, { timeBudgetLimit: 100, logger: console })
|
|
43
45
|
}
|
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
import type { Address } from '@xylabs/sdk-js'
|
|
1
|
+
import type { Address, Promisable } from '@xylabs/sdk-js'
|
|
2
2
|
import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'
|
|
3
|
-
import type {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
import {
|
|
3
|
+
import type {
|
|
4
|
+
AccountBalanceViewer, ChainId, HydratedBlockStateValidationFunction, HydratedBlockWithHashMeta,
|
|
5
|
+
} from '@xyo-network/xl1-sdk'
|
|
6
|
+
import {
|
|
7
|
+
AttoXL1, HydratedBlockStateValidationError, netBalancesForPayloads, XYO_ZERO_ADDRESS,
|
|
8
|
+
} from '@xyo-network/xl1-sdk'
|
|
7
9
|
|
|
8
10
|
export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (
|
|
9
11
|
block: HydratedBlockWithHashMeta,
|
|
10
|
-
|
|
12
|
+
chainIdAtBlockNumber: (blockNumber: number) => Promisable<ChainId>,
|
|
11
13
|
services: { accountBalance: AccountBalanceViewer },
|
|
12
14
|
) => {
|
|
13
15
|
return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {
|
|
14
16
|
const errors: HydratedBlockStateValidationError[] = []
|
|
17
|
+
let chainId = '00' as ChainId
|
|
15
18
|
try {
|
|
16
19
|
// TODO: Filter by non-producer elevated payloads
|
|
17
20
|
// to allow for transfers from ZERO address
|
|
@@ -26,10 +29,11 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
|
|
|
26
29
|
const previous = block[0].previous
|
|
27
30
|
if (previous === null) return [new HydratedBlockStateValidationError(
|
|
28
31
|
block?.[0]?._hash ?? ZERO_HASH,
|
|
29
|
-
|
|
32
|
+
'00' as ChainId,
|
|
30
33
|
block,
|
|
31
34
|
'Insufficient funds because first block',
|
|
32
35
|
)]
|
|
36
|
+
chainId = await chainIdAtBlockNumber(block[0].block)
|
|
33
37
|
await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {
|
|
34
38
|
for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {
|
|
35
39
|
const result = await services.accountBalance.accountBalances([address], { head: previous })
|
|
@@ -43,7 +47,7 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
|
|
|
43
47
|
))
|
|
44
48
|
}
|
|
45
49
|
}
|
|
46
|
-
})
|
|
50
|
+
}, { timeBudgetLimit: 100, logger: console })
|
|
47
51
|
} catch (ex) {
|
|
48
52
|
errors.push(new HydratedBlockStateValidationError(
|
|
49
53
|
block?.[0]?._hash ?? ZERO_HASH,
|
|
@@ -54,5 +58,5 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
|
|
|
54
58
|
))
|
|
55
59
|
}
|
|
56
60
|
return await Promise.resolve(errors)
|
|
57
|
-
})
|
|
61
|
+
}, { timeBudgetLimit: 200, logger: console })
|
|
58
62
|
}
|