@xyo-network/chain-validation 1.11.0 → 1.12.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/block/validateBlock.d.ts +2 -3
- package/dist/neutral/block/validateBlock.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/hydratedBlock/validateHydratedBlock.d.ts +2 -3
- package/dist/neutral/hydratedBlock/validateHydratedBlock.d.ts.map +1 -1
- package/dist/neutral/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
- package/dist/neutral/index.mjs +101 -203
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +21 -22
- package/src/block/validateBlock.ts +4 -3
- package/src/block/validators/Fields.ts +5 -4
- package/src/hydratedBlock/validateHydratedBlock.ts +2 -3
- package/src/hydratedBlockState/validateHydratedBlockState.ts +2 -3
- package/src/hydratedBlockState/validators/RequiredBalance.ts +3 -3
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol';
|
|
1
|
+
import type { BlockBoundWitness, BlockValidatorFunction, Chain } from '@xyo-network/xl1-protocol';
|
|
3
2
|
import { BlockValidationError } from '@xyo-network/xl1-protocol';
|
|
4
|
-
export declare const validateBlock: (block: BlockBoundWitness, chainId?:
|
|
3
|
+
export declare const validateBlock: (block: BlockBoundWitness, chainId?: Chain, additionalValidators?: BlockValidatorFunction[]) => Promise<BlockValidationError[]>;
|
|
5
4
|
//# sourceMappingURL=validateBlock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateBlock.d.ts","sourceRoot":"","sources":["../../../src/block/validateBlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateBlock.d.ts","sourceRoot":"","sources":["../../../src/block/validateBlock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,iBAAiB,EAAE,sBAAsB,EAAE,KAAK,EACjD,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAA;AAQhE,eAAO,MAAM,aAAa,GACxB,OAAO,iBAAiB,EACxB,UAAU,KAAK,EACf,uBAAsB,sBAAsB,EAAO,KAClD,OAAO,CAAC,oBAAoB,EAAE,CAoBhC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/Fields.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/Fields.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACS,sBAAsB,EAC1C,MAAM,2BAA2B,CAAA;AAGlC,eAAO,MAAM,oBAAoB,EAAE,sBAmClC,CAAA"}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type { BlockValidatorFunction, HydratedBlock, HydratedBlockValidationFunction } from '@xyo-network/xl1-protocol';
|
|
1
|
+
import type { BlockValidatorFunction, Chain, HydratedBlock, HydratedBlockValidationFunction } from '@xyo-network/xl1-protocol';
|
|
3
2
|
import { HydratedBlockValidationError } from '@xyo-network/xl1-protocol';
|
|
4
|
-
export declare const validateHydratedBlock: (hydratedBlock: HydratedBlock, chainId?:
|
|
3
|
+
export declare const validateHydratedBlock: (hydratedBlock: HydratedBlock, chainId?: Chain, additionalValidators?: HydratedBlockValidationFunction[], additionalBlockValidators?: BlockValidatorFunction[]) => Promise<HydratedBlockValidationError[]>;
|
|
5
4
|
//# sourceMappingURL=validateHydratedBlock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateHydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlock/validateHydratedBlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateHydratedBlock.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlock/validateHydratedBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,sBAAsB,EAAE,KAAK,EAAE,aAAa,EAAE,+BAA+B,EAC9E,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,4BAA4B,EAAE,MAAM,2BAA2B,CAAA;AAMxE,eAAO,MAAM,qBAAqB,GAChC,eAAe,aAAa,EAC5B,UAAU,KAAK,EACf,uBAAsB,+BAA+B,EAAO,EAC5D,4BAA2B,sBAAsB,EAAO,4CA0BzD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,sCAAsC,EACvC,MAAM,2BAA2B,CAAA;AAMlC,eAAO,MAAM,0BAA0B,EAAE,sCAiCxC,CAAA"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
+
|
|
1
4
|
// src/block/validateBlock.ts
|
|
2
5
|
import { ZERO_HASH as ZERO_HASH5 } from "@xylabs/hex";
|
|
3
6
|
import { BlockValidationError as BlockValidationError5 } from "@xyo-network/xl1-protocol";
|
|
@@ -5,41 +8,27 @@ import { BoundWitnessSignaturesValidator } from "@xyo-network/xl1-validation";
|
|
|
5
8
|
|
|
6
9
|
// src/block/validators/AllowedPayloadSchemas.ts
|
|
7
10
|
import { ZERO_HASH } from "@xylabs/hex";
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
isAllowedBlockPayloadSchema
|
|
11
|
-
} from "@xyo-network/xl1-protocol";
|
|
12
|
-
var BlockAllowedPayloadSchemasValidator = (block) => {
|
|
11
|
+
import { BlockValidationError, isAllowedBlockPayloadSchema } from "@xyo-network/xl1-protocol";
|
|
12
|
+
var BlockAllowedPayloadSchemasValidator = /* @__PURE__ */ __name((block) => {
|
|
13
13
|
const errors = [];
|
|
14
14
|
try {
|
|
15
15
|
for (const schema of block.payload_schemas) {
|
|
16
16
|
if (!isAllowedBlockPayloadSchema(schema)) {
|
|
17
|
-
errors.push(new BlockValidationError(
|
|
18
|
-
block?._hash ?? ZERO_HASH,
|
|
19
|
-
block,
|
|
20
|
-
`payload schema not allowed in block: ${schema}`
|
|
21
|
-
));
|
|
17
|
+
errors.push(new BlockValidationError(block?._hash ?? ZERO_HASH, block, `payload schema not allowed in block: ${schema}`));
|
|
22
18
|
}
|
|
23
19
|
}
|
|
24
20
|
} catch (ex) {
|
|
25
|
-
errors.push(new BlockValidationError(
|
|
26
|
-
block?._hash ?? ZERO_HASH,
|
|
27
|
-
block,
|
|
28
|
-
`validation excepted: ${ex}`,
|
|
29
|
-
ex
|
|
30
|
-
));
|
|
21
|
+
errors.push(new BlockValidationError(block?._hash ?? ZERO_HASH, block, `validation excepted: ${ex}`, ex));
|
|
31
22
|
}
|
|
32
23
|
return errors;
|
|
33
|
-
};
|
|
24
|
+
}, "BlockAllowedPayloadSchemasValidator");
|
|
34
25
|
|
|
35
26
|
// src/block/validators/Fields.ts
|
|
36
27
|
import { ZERO_HASH as ZERO_HASH2 } from "@xylabs/hex";
|
|
37
28
|
import { isDefined } from "@xylabs/typeof";
|
|
38
29
|
import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
39
|
-
import {
|
|
40
|
-
|
|
41
|
-
} from "@xyo-network/xl1-protocol";
|
|
42
|
-
var BlockFieldsValidator = (block, chainId) => {
|
|
30
|
+
import { BlockValidationError as BlockValidationError2 } from "@xyo-network/xl1-protocol";
|
|
31
|
+
var BlockFieldsValidator = /* @__PURE__ */ __name((block, chainId) => {
|
|
43
32
|
const errors = [];
|
|
44
33
|
try {
|
|
45
34
|
if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {
|
|
@@ -52,63 +41,49 @@ var BlockFieldsValidator = (block, chainId) => {
|
|
|
52
41
|
}
|
|
53
42
|
}
|
|
54
43
|
if (new Set(txHashes).size < txHashes.length) {
|
|
55
|
-
errors.push(new BlockValidationError2(
|
|
56
|
-
block?._hash ?? ZERO_HASH2,
|
|
57
|
-
block,
|
|
58
|
-
`Duplicate Transaction Hashes: ${txHashes}`
|
|
59
|
-
));
|
|
44
|
+
errors.push(new BlockValidationError2(block?._hash ?? ZERO_HASH2, block, `Duplicate Transaction Hashes: ${txHashes}`));
|
|
60
45
|
}
|
|
61
46
|
} catch (ex) {
|
|
62
|
-
errors.push(new BlockValidationError2(
|
|
63
|
-
block?._hash ?? ZERO_HASH2,
|
|
64
|
-
block,
|
|
65
|
-
`validation excepted: ${ex}`,
|
|
66
|
-
ex
|
|
67
|
-
));
|
|
47
|
+
errors.push(new BlockValidationError2(block?._hash ?? ZERO_HASH2, block, `validation excepted: ${ex}`, ex));
|
|
68
48
|
}
|
|
69
49
|
return errors;
|
|
70
|
-
};
|
|
50
|
+
}, "BlockFieldsValidator");
|
|
71
51
|
|
|
72
52
|
// src/block/validators/JsonSchema.ts
|
|
73
53
|
import { ZERO_HASH as ZERO_HASH3 } from "@xylabs/hex";
|
|
74
|
-
import {
|
|
75
|
-
BlockValidationError as BlockValidationError3
|
|
76
|
-
} from "@xyo-network/xl1-protocol";
|
|
54
|
+
import { BlockValidationError as BlockValidationError3 } from "@xyo-network/xl1-protocol";
|
|
77
55
|
import { BlockBoundWitnessWithStorageMetaJsonSchema } from "@xyo-network/xl1-schema";
|
|
78
56
|
import { Ajv } from "ajv";
|
|
79
|
-
var BlockJsonSchemaValidator = (jsonSchema = BlockBoundWitnessWithStorageMetaJsonSchema) => {
|
|
80
|
-
const ajv = new Ajv({
|
|
57
|
+
var BlockJsonSchemaValidator = /* @__PURE__ */ __name((jsonSchema = BlockBoundWitnessWithStorageMetaJsonSchema) => {
|
|
58
|
+
const ajv = new Ajv({
|
|
59
|
+
allErrors: true,
|
|
60
|
+
strict: true
|
|
61
|
+
});
|
|
81
62
|
const validate = ajv.compile(jsonSchema);
|
|
82
63
|
return async (block) => {
|
|
83
64
|
const errors = [];
|
|
84
65
|
try {
|
|
85
66
|
await validate(block);
|
|
86
67
|
if ((validate.errors ?? []).length > 0) {
|
|
87
|
-
const error = new BlockValidationError3(
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
`failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: "\n" })}`
|
|
91
|
-
);
|
|
68
|
+
const error = new BlockValidationError3(block?._hash ?? ZERO_HASH3, block, `failed JSON schema validation: ${ajv.errorsText(validate.errors, {
|
|
69
|
+
separator: "\n"
|
|
70
|
+
})}`);
|
|
92
71
|
error.cause = validate.errors;
|
|
93
72
|
errors.push(error);
|
|
94
73
|
}
|
|
95
74
|
} catch (ex) {
|
|
96
|
-
const error = new BlockValidationError3(
|
|
97
|
-
block?._hash ?? ZERO_HASH3,
|
|
98
|
-
block,
|
|
99
|
-
`validation excepted: ${ex}`
|
|
100
|
-
);
|
|
75
|
+
const error = new BlockValidationError3(block?._hash ?? ZERO_HASH3, block, `validation excepted: ${ex}`);
|
|
101
76
|
error.cause = ex;
|
|
102
77
|
errors.push(error);
|
|
103
78
|
}
|
|
104
79
|
return errors;
|
|
105
80
|
};
|
|
106
|
-
};
|
|
81
|
+
}, "BlockJsonSchemaValidator");
|
|
107
82
|
|
|
108
83
|
// src/block/validators/PreviousHash.ts
|
|
109
84
|
import { isHash, ZERO_HASH as ZERO_HASH4 } from "@xylabs/hex";
|
|
110
85
|
import { BlockValidationError as BlockValidationError4 } from "@xyo-network/xl1-protocol";
|
|
111
|
-
var BlockPreviousHashValidator = (block) => {
|
|
86
|
+
var BlockPreviousHashValidator = /* @__PURE__ */ __name((block) => {
|
|
112
87
|
const errors = [];
|
|
113
88
|
try {
|
|
114
89
|
const blockNumber = block.block;
|
|
@@ -124,19 +99,15 @@ var BlockPreviousHashValidator = (block) => {
|
|
|
124
99
|
errors.push(new BlockValidationError4(block?._hash ?? ZERO_HASH4, block, "invalid block number"));
|
|
125
100
|
}
|
|
126
101
|
} catch (ex) {
|
|
127
|
-
const error = new BlockValidationError4(
|
|
128
|
-
block?._hash ?? ZERO_HASH4,
|
|
129
|
-
block,
|
|
130
|
-
`Failed BlockPreviousHashValidator: ${ex}`
|
|
131
|
-
);
|
|
102
|
+
const error = new BlockValidationError4(block?._hash ?? ZERO_HASH4, block, `Failed BlockPreviousHashValidator: ${ex}`);
|
|
132
103
|
error.cause = ex;
|
|
133
104
|
errors.push(error);
|
|
134
105
|
}
|
|
135
106
|
return errors;
|
|
136
|
-
};
|
|
107
|
+
}, "BlockPreviousHashValidator");
|
|
137
108
|
|
|
138
109
|
// src/block/validateBlock.ts
|
|
139
|
-
var validateBlock = async (block, chainId, additionalValidators = []) => {
|
|
110
|
+
var validateBlock = /* @__PURE__ */ __name(async (block, chainId, additionalValidators = []) => {
|
|
140
111
|
const errors = [];
|
|
141
112
|
try {
|
|
142
113
|
const bwErrors = await BoundWitnessSignaturesValidator(block);
|
|
@@ -149,14 +120,12 @@ var validateBlock = async (block, chainId, additionalValidators = []) => {
|
|
|
149
120
|
BlockAllowedPayloadSchemasValidator,
|
|
150
121
|
...additionalValidators
|
|
151
122
|
];
|
|
152
|
-
errors.push(...(await Promise.all(
|
|
153
|
-
validators.map((validator) => validator(block, chainId))
|
|
154
|
-
)).flat());
|
|
123
|
+
errors.push(...(await Promise.all(validators.map((validator) => validator(block, chainId)))).flat());
|
|
155
124
|
} catch (ex) {
|
|
156
125
|
errors.push(new BlockValidationError5(block?._hash ?? ZERO_HASH5, block, "validation excepted", ex));
|
|
157
126
|
}
|
|
158
127
|
return errors;
|
|
159
|
-
};
|
|
128
|
+
}, "validateBlock");
|
|
160
129
|
|
|
161
130
|
// src/hydratedBlock/validateHydratedBlock.ts
|
|
162
131
|
import { ZERO_HASH as ZERO_HASH13 } from "@xylabs/hex";
|
|
@@ -171,16 +140,11 @@ import { HydratedBlockValidationError } from "@xyo-network/xl1-protocol";
|
|
|
171
140
|
import { ZERO_HASH as ZERO_HASH11 } from "@xylabs/hex";
|
|
172
141
|
import { BoundWitnessSchema as BoundWitnessSchema2 } from "@xyo-network/boundwitness-model";
|
|
173
142
|
import { SchemaSchema } from "@xyo-network/schema-payload-plugin";
|
|
174
|
-
import {
|
|
175
|
-
ChainStakeIntentSchema,
|
|
176
|
-
HashSchema,
|
|
177
|
-
InBlockPayloadValidationError as InBlockPayloadValidationError8,
|
|
178
|
-
TransferSchema
|
|
179
|
-
} from "@xyo-network/xl1-protocol";
|
|
143
|
+
import { ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError as InBlockPayloadValidationError8, TransferSchema } from "@xyo-network/xl1-protocol";
|
|
180
144
|
|
|
181
145
|
// src/elevatedPayload/lib/isElevatedFromBlock.ts
|
|
182
146
|
import { isTransactionBoundWitness } from "@xyo-network/xl1-protocol";
|
|
183
|
-
var isElevatedFromBlock = (payload, [, payloads]) => {
|
|
147
|
+
var isElevatedFromBlock = /* @__PURE__ */ __name((payload, [, payloads]) => {
|
|
184
148
|
const txs = payloads.filter((p) => isTransactionBoundWitness(p));
|
|
185
149
|
for (const tx of txs) {
|
|
186
150
|
if (tx.payload_hashes.includes(payload._hash)) {
|
|
@@ -188,34 +152,29 @@ var isElevatedFromBlock = (payload, [, payloads]) => {
|
|
|
188
152
|
}
|
|
189
153
|
}
|
|
190
154
|
return true;
|
|
191
|
-
};
|
|
155
|
+
}, "isElevatedFromBlock");
|
|
192
156
|
|
|
193
157
|
// src/elevatedPayload/lib/validateElevatedFromBlock.ts
|
|
194
158
|
import { InBlockPayloadValidationError } from "@xyo-network/xl1-protocol";
|
|
195
159
|
import { transactionsFromHydratedBlock } from "@xyo-network/xl1-protocol-sdk";
|
|
196
|
-
var validateElevatedFromBlock = (payload, block) => {
|
|
160
|
+
var validateElevatedFromBlock = /* @__PURE__ */ __name((payload, block) => {
|
|
197
161
|
const errors = [];
|
|
198
162
|
try {
|
|
199
163
|
const txs = transactionsFromHydratedBlock(block);
|
|
200
164
|
const allTxPayloadHashes = new Set(txs.flatMap((tx) => tx.payload_hashes));
|
|
201
165
|
if (allTxPayloadHashes.has(payload._hash)) {
|
|
202
|
-
errors.push(new InBlockPayloadValidationError(
|
|
203
|
-
block[0]?._hash,
|
|
204
|
-
block,
|
|
205
|
-
payload,
|
|
206
|
-
`Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`
|
|
207
|
-
));
|
|
166
|
+
errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`));
|
|
208
167
|
}
|
|
209
168
|
} catch (ex) {
|
|
210
169
|
errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${ex}`, ex));
|
|
211
170
|
}
|
|
212
171
|
return errors;
|
|
213
|
-
};
|
|
172
|
+
}, "validateElevatedFromBlock");
|
|
214
173
|
|
|
215
174
|
// src/elevatedPayload/lib/validateElevatedFromTransaction.ts
|
|
216
175
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError2 } from "@xyo-network/xl1-protocol";
|
|
217
176
|
import { transactionsFromHydratedBlock as transactionsFromHydratedBlock2 } from "@xyo-network/xl1-protocol-sdk";
|
|
218
|
-
var validateElevatedFromTransaction = (payload, block) => {
|
|
177
|
+
var validateElevatedFromTransaction = /* @__PURE__ */ __name((payload, block) => {
|
|
219
178
|
const errors = [];
|
|
220
179
|
try {
|
|
221
180
|
const txs = transactionsFromHydratedBlock2(block);
|
|
@@ -228,23 +187,17 @@ var validateElevatedFromTransaction = (payload, block) => {
|
|
|
228
187
|
errors.push(new InBlockPayloadValidationError2(payload._hash, block, payload, "No Transactions in block"));
|
|
229
188
|
}
|
|
230
189
|
} catch (ex) {
|
|
231
|
-
errors.push(new InBlockPayloadValidationError2(
|
|
232
|
-
payload._hash,
|
|
233
|
-
block,
|
|
234
|
-
payload,
|
|
235
|
-
`Failed validateElevatedFromTransaction: ${ex}`,
|
|
236
|
-
ex
|
|
237
|
-
));
|
|
190
|
+
errors.push(new InBlockPayloadValidationError2(payload._hash, block, payload, `Failed validateElevatedFromTransaction: ${ex}`, ex));
|
|
238
191
|
}
|
|
239
192
|
return errors;
|
|
240
|
-
};
|
|
193
|
+
}, "validateElevatedFromTransaction");
|
|
241
194
|
|
|
242
195
|
// src/elevatedPayload/lib/validateTransactionInBlock.ts
|
|
243
196
|
import { ZERO_HASH as ZERO_HASH6 } from "@xylabs/hex";
|
|
244
197
|
import { isStorageMeta } from "@xyo-network/payload-model";
|
|
245
198
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError3, isTransactionBoundWitness as isTransactionBoundWitness2 } from "@xyo-network/xl1-protocol";
|
|
246
199
|
import { BoundWitnessSignaturesValidator as BoundWitnessSignaturesValidator2 } from "@xyo-network/xl1-validation";
|
|
247
|
-
var validateTransactionInBlock = async (payload, block) => {
|
|
200
|
+
var validateTransactionInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
248
201
|
const errors = [];
|
|
249
202
|
try {
|
|
250
203
|
if (isTransactionBoundWitness2(payload) && isStorageMeta(payload)) {
|
|
@@ -259,11 +212,11 @@ var validateTransactionInBlock = async (payload, block) => {
|
|
|
259
212
|
errors.push(new InBlockPayloadValidationError3(payload._hash ?? ZERO_HASH6, block, payload, `validation excepted: ${ex}`, ex));
|
|
260
213
|
}
|
|
261
214
|
return errors;
|
|
262
|
-
};
|
|
215
|
+
}, "validateTransactionInBlock");
|
|
263
216
|
|
|
264
217
|
// src/elevatedPayload/lib/validateTypedPayloadInBlock.ts
|
|
265
218
|
import { isStorageMeta as isStorageMeta2 } from "@xyo-network/payload-model";
|
|
266
|
-
var validateTypedPayloadInBlock = async (payload, block, identityFunction) => {
|
|
219
|
+
var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (payload, block, identityFunction) => {
|
|
267
220
|
const errors = [];
|
|
268
221
|
try {
|
|
269
222
|
if (identityFunction(payload) && isStorageMeta2(payload)) {
|
|
@@ -279,12 +232,12 @@ var validateTypedPayloadInBlock = async (payload, block, identityFunction) => {
|
|
|
279
232
|
errors.push(new Error(`Failed validateTypedPayloadInBlock: ${ex}`));
|
|
280
233
|
}
|
|
281
234
|
return errors;
|
|
282
|
-
};
|
|
235
|
+
}, "validateTypedPayloadInBlock");
|
|
283
236
|
|
|
284
237
|
// src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts
|
|
285
238
|
import { ZERO_HASH as ZERO_HASH7 } from "@xylabs/hex";
|
|
286
239
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError4, isChainStakeIntent } from "@xyo-network/xl1-protocol";
|
|
287
|
-
var validateChainStakeIntentInBlock = async (payload, block) => {
|
|
240
|
+
var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
288
241
|
const errors = [];
|
|
289
242
|
try {
|
|
290
243
|
const typedErrors = await validateTypedPayloadInBlock(payload, block, isChainStakeIntent);
|
|
@@ -292,21 +245,15 @@ var validateChainStakeIntentInBlock = async (payload, block) => {
|
|
|
292
245
|
errors.push(new InBlockPayloadValidationError4(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
293
246
|
}
|
|
294
247
|
} catch (ex) {
|
|
295
|
-
errors.push(new InBlockPayloadValidationError4(
|
|
296
|
-
block[0]?._hash ?? ZERO_HASH7,
|
|
297
|
-
block,
|
|
298
|
-
payload,
|
|
299
|
-
`validation excepted: ${ex}`,
|
|
300
|
-
ex
|
|
301
|
-
));
|
|
248
|
+
errors.push(new InBlockPayloadValidationError4(block[0]?._hash ?? ZERO_HASH7, block, payload, `validation excepted: ${ex}`, ex));
|
|
302
249
|
}
|
|
303
250
|
return errors;
|
|
304
|
-
};
|
|
251
|
+
}, "validateChainStakeIntentInBlock");
|
|
305
252
|
|
|
306
253
|
// src/elevatedPayload/payloads/validateHashInBlock.ts
|
|
307
254
|
import { ZERO_HASH as ZERO_HASH8 } from "@xylabs/hex";
|
|
308
255
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError5, isHashPayload } from "@xyo-network/xl1-protocol";
|
|
309
|
-
var validateHashInBlock = async (payload, block) => {
|
|
256
|
+
var validateHashInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
310
257
|
const errors = [];
|
|
311
258
|
try {
|
|
312
259
|
const typedErrors = await validateTypedPayloadInBlock(payload, block, isHashPayload);
|
|
@@ -314,22 +261,16 @@ var validateHashInBlock = async (payload, block) => {
|
|
|
314
261
|
errors.push(new InBlockPayloadValidationError5(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
315
262
|
}
|
|
316
263
|
} catch (ex) {
|
|
317
|
-
errors.push(new InBlockPayloadValidationError5(
|
|
318
|
-
block?.[0]?._hash ?? ZERO_HASH8,
|
|
319
|
-
block,
|
|
320
|
-
payload,
|
|
321
|
-
`validation excepted: ${ex}`,
|
|
322
|
-
ex
|
|
323
|
-
));
|
|
264
|
+
errors.push(new InBlockPayloadValidationError5(block?.[0]?._hash ?? ZERO_HASH8, block, payload, `validation excepted: ${ex}`, ex));
|
|
324
265
|
}
|
|
325
266
|
return errors;
|
|
326
|
-
};
|
|
267
|
+
}, "validateHashInBlock");
|
|
327
268
|
|
|
328
269
|
// src/elevatedPayload/payloads/validateSchemaInBlock.ts
|
|
329
270
|
import { ZERO_HASH as ZERO_HASH9 } from "@xylabs/hex";
|
|
330
271
|
import { isSchemaPayload } from "@xyo-network/schema-payload-plugin";
|
|
331
272
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError6 } from "@xyo-network/xl1-protocol";
|
|
332
|
-
var validateSchemaInBlock = async (payload, block) => {
|
|
273
|
+
var validateSchemaInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
333
274
|
const errors = [];
|
|
334
275
|
try {
|
|
335
276
|
const typedErrors = await validateTypedPayloadInBlock(payload, block, isSchemaPayload);
|
|
@@ -337,21 +278,15 @@ var validateSchemaInBlock = async (payload, block) => {
|
|
|
337
278
|
errors.push(new InBlockPayloadValidationError6(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
338
279
|
}
|
|
339
280
|
} catch (ex) {
|
|
340
|
-
errors.push(new InBlockPayloadValidationError6(
|
|
341
|
-
block?.[0]?._hash ?? ZERO_HASH9,
|
|
342
|
-
block,
|
|
343
|
-
payload,
|
|
344
|
-
`Failed validateSchemaInBlock: ${ex}`,
|
|
345
|
-
ex
|
|
346
|
-
));
|
|
281
|
+
errors.push(new InBlockPayloadValidationError6(block?.[0]?._hash ?? ZERO_HASH9, block, payload, `Failed validateSchemaInBlock: ${ex}`, ex));
|
|
347
282
|
}
|
|
348
283
|
return errors;
|
|
349
|
-
};
|
|
284
|
+
}, "validateSchemaInBlock");
|
|
350
285
|
|
|
351
286
|
// src/elevatedPayload/payloads/validateTransferInBlock.ts
|
|
352
287
|
import { ZERO_HASH as ZERO_HASH10 } from "@xylabs/hex";
|
|
353
288
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError7, isTransfer } from "@xyo-network/xl1-protocol";
|
|
354
|
-
var validateTransferInBlock = async (payload, block) => {
|
|
289
|
+
var validateTransferInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
355
290
|
const errors = [];
|
|
356
291
|
try {
|
|
357
292
|
const typedErrors = await validateTypedPayloadInBlock(payload, block, isTransfer);
|
|
@@ -359,16 +294,10 @@ var validateTransferInBlock = async (payload, block) => {
|
|
|
359
294
|
errors.push(new InBlockPayloadValidationError7(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
360
295
|
}
|
|
361
296
|
} catch (ex) {
|
|
362
|
-
errors.push(new InBlockPayloadValidationError7(
|
|
363
|
-
block?.[0]?._hash ?? ZERO_HASH10,
|
|
364
|
-
block,
|
|
365
|
-
payload,
|
|
366
|
-
`Failed validateTransferInBlock: ${ex}`,
|
|
367
|
-
ex
|
|
368
|
-
));
|
|
297
|
+
errors.push(new InBlockPayloadValidationError7(block?.[0]?._hash ?? ZERO_HASH10, block, payload, `Failed validateTransferInBlock: ${ex}`, ex));
|
|
369
298
|
}
|
|
370
299
|
return errors;
|
|
371
|
-
};
|
|
300
|
+
}, "validateTransferInBlock");
|
|
372
301
|
|
|
373
302
|
// src/elevatedPayload/validatePayloadInBlock.ts
|
|
374
303
|
var payloadValidators = {
|
|
@@ -378,7 +307,7 @@ var payloadValidators = {
|
|
|
378
307
|
[ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
|
|
379
308
|
[BoundWitnessSchema2]: validateTransactionInBlock
|
|
380
309
|
};
|
|
381
|
-
var validatePayloadInBlock = async (payload, block) => {
|
|
310
|
+
var validatePayloadInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
382
311
|
const errors = [];
|
|
383
312
|
try {
|
|
384
313
|
const validator = payloadValidators[payload.schema];
|
|
@@ -388,62 +317,64 @@ var validatePayloadInBlock = async (payload, block) => {
|
|
|
388
317
|
errors.push(new InBlockPayloadValidationError8(block?.[0]?._hash ?? ZERO_HASH11, block, payload, `Unsupported payload schema: ${payload.schema}`));
|
|
389
318
|
}
|
|
390
319
|
} catch (ex) {
|
|
391
|
-
const error = new InBlockPayloadValidationError8(
|
|
392
|
-
block?.[0]?._hash ?? ZERO_HASH11,
|
|
393
|
-
block,
|
|
394
|
-
payload,
|
|
395
|
-
`validation excepted: ${ex}`
|
|
396
|
-
);
|
|
320
|
+
const error = new InBlockPayloadValidationError8(block?.[0]?._hash ?? ZERO_HASH11, block, payload, `validation excepted: ${ex}`);
|
|
397
321
|
error.cause = ex;
|
|
398
322
|
errors.push(error);
|
|
399
323
|
}
|
|
400
324
|
return errors;
|
|
401
|
-
};
|
|
325
|
+
}, "validatePayloadInBlock");
|
|
402
326
|
|
|
403
327
|
// src/hydratedBlock/validators/Payloads.ts
|
|
404
|
-
var PayloadsInBlockValidator = async ([block, payloads]) => {
|
|
328
|
+
var PayloadsInBlockValidator = /* @__PURE__ */ __name(async ([block, payloads]) => {
|
|
405
329
|
const errors = [];
|
|
406
330
|
try {
|
|
407
331
|
const payloadMap = {};
|
|
408
332
|
for (const payload of payloads) {
|
|
409
333
|
payloadMap[payload._hash] = payload;
|
|
410
334
|
}
|
|
411
|
-
const remainingPayloads = {
|
|
335
|
+
const remainingPayloads = {
|
|
336
|
+
...payloadMap
|
|
337
|
+
};
|
|
412
338
|
for (let i = 0; i < block.payload_hashes.length; i++) {
|
|
413
339
|
const hash = block.payload_hashes[i];
|
|
414
340
|
const schema = block.payload_schemas[i];
|
|
415
341
|
const payload = payloadMap[hash];
|
|
416
342
|
if (payload) {
|
|
417
|
-
const payloadInBlockErrors = await validatePayloadInBlock(payload, [
|
|
343
|
+
const payloadInBlockErrors = await validatePayloadInBlock(payload, [
|
|
344
|
+
block,
|
|
345
|
+
payloads
|
|
346
|
+
]);
|
|
418
347
|
for (const payloadInBlockError of payloadInBlockErrors) {
|
|
419
|
-
errors.push(new HydratedBlockValidationError(
|
|
420
|
-
block
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
payloadInBlockError
|
|
424
|
-
));
|
|
348
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
|
|
349
|
+
block,
|
|
350
|
+
payloads
|
|
351
|
+
], `validatePayloadInBlock error: ${payloadInBlockError}`, payloadInBlockError));
|
|
425
352
|
}
|
|
426
353
|
delete remainingPayloads[hash];
|
|
427
354
|
} else {
|
|
428
|
-
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
|
|
355
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
|
|
356
|
+
block,
|
|
357
|
+
payloads
|
|
358
|
+
], `missing payload ${hash} ${schema}`));
|
|
429
359
|
}
|
|
430
360
|
}
|
|
431
361
|
if (Object.keys(remainingPayloads).length > 0) {
|
|
432
|
-
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
|
|
362
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
|
|
363
|
+
block,
|
|
364
|
+
payloads
|
|
365
|
+
], `extra payloads ${Object.keys(payloadMap).join(", ")}`));
|
|
433
366
|
}
|
|
434
367
|
} catch (ex) {
|
|
435
|
-
errors.push(new HydratedBlockValidationError(
|
|
436
|
-
block
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
ex
|
|
440
|
-
));
|
|
368
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH12, [
|
|
369
|
+
block,
|
|
370
|
+
payloads
|
|
371
|
+
], `Failed PayloadsInBlockValidator: ${ex}`, ex));
|
|
441
372
|
}
|
|
442
373
|
return errors;
|
|
443
|
-
};
|
|
374
|
+
}, "PayloadsInBlockValidator");
|
|
444
375
|
|
|
445
376
|
// src/hydratedBlock/validateHydratedBlock.ts
|
|
446
|
-
var validateHydratedBlock = async (hydratedBlock, chainId, additionalValidators = [], additionalBlockValidators = []) => {
|
|
377
|
+
var validateHydratedBlock = /* @__PURE__ */ __name(async (hydratedBlock, chainId, additionalValidators = [], additionalBlockValidators = []) => {
|
|
447
378
|
const errors = [];
|
|
448
379
|
try {
|
|
449
380
|
const validateBlockErrors = await validateBlock(hydratedBlock[0], chainId, additionalBlockValidators);
|
|
@@ -460,15 +391,10 @@ var validateHydratedBlock = async (hydratedBlock, chainId, additionalValidators
|
|
|
460
391
|
];
|
|
461
392
|
errors.push(...(await Promise.all(validators.map((v) => v(hydratedBlock, chainId)))).flat());
|
|
462
393
|
} catch (ex) {
|
|
463
|
-
errors.push(new HydratedBlockValidationError2(
|
|
464
|
-
hydratedBlock?.[0]?._hash ?? ZERO_HASH13,
|
|
465
|
-
hydratedBlock,
|
|
466
|
-
`Failed validateHydratedBlock: ${ex}`,
|
|
467
|
-
ex
|
|
468
|
-
));
|
|
394
|
+
errors.push(new HydratedBlockValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH13, hydratedBlock, `Failed validateHydratedBlock: ${ex}`, ex));
|
|
469
395
|
}
|
|
470
396
|
return errors;
|
|
471
|
-
};
|
|
397
|
+
}, "validateHydratedBlock");
|
|
472
398
|
|
|
473
399
|
// src/hydratedBlockState/validateHydratedBlockState.ts
|
|
474
400
|
import { ZERO_HASH as ZERO_HASH15 } from "@xylabs/hex";
|
|
@@ -476,13 +402,9 @@ import { HydratedBlockStateValidationError as HydratedBlockStateValidationError2
|
|
|
476
402
|
|
|
477
403
|
// src/hydratedBlockState/validators/RequiredBalance.ts
|
|
478
404
|
import { ZERO_HASH as ZERO_HASH14 } from "@xylabs/hex";
|
|
479
|
-
import {
|
|
480
|
-
AttoXL1,
|
|
481
|
-
HydratedBlockStateValidationError,
|
|
482
|
-
XYO_ZERO_ADDRESS
|
|
483
|
-
} from "@xyo-network/xl1-protocol";
|
|
405
|
+
import { AttoXL1, HydratedBlockStateValidationError, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
484
406
|
import { netBalancesForPayloads } from "@xyo-network/xl1-protocol-sdk";
|
|
485
|
-
var RequiredBalanceBlockStateValidator = async (block, chainId, services) => {
|
|
407
|
+
var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (block, chainId, services) => {
|
|
486
408
|
const errors = [];
|
|
487
409
|
try {
|
|
488
410
|
const netBalances = netBalancesForPayloads(block[1]);
|
|
@@ -494,49 +416,31 @@ var RequiredBalanceBlockStateValidator = async (block, chainId, services) => {
|
|
|
494
416
|
}
|
|
495
417
|
}
|
|
496
418
|
const previous = block[0].previous;
|
|
497
|
-
if (previous === null) return [
|
|
498
|
-
block?.[0]?._hash ?? ZERO_HASH14,
|
|
499
|
-
|
|
500
|
-
block,
|
|
501
|
-
"Insufficient funds because first block"
|
|
502
|
-
)];
|
|
419
|
+
if (previous === null) return [
|
|
420
|
+
new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH14, chainId, block, "Insufficient funds because first block")
|
|
421
|
+
];
|
|
503
422
|
for (const [address, reqBalance] of Object.entries(requiredBalances)) {
|
|
504
|
-
const result = await services.accountBalance.balances(previous, [
|
|
423
|
+
const result = await services.accountBalance.balances(previous, [
|
|
424
|
+
address
|
|
425
|
+
]);
|
|
505
426
|
const balance = result[address] ?? AttoXL1(0n);
|
|
506
427
|
if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
|
|
507
|
-
errors.push(new HydratedBlockStateValidationError(
|
|
508
|
-
block?.[0]?._hash ?? ZERO_HASH14,
|
|
509
|
-
chainId,
|
|
510
|
-
block,
|
|
511
|
-
`insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`
|
|
512
|
-
));
|
|
428
|
+
errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH14, chainId, block, `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`));
|
|
513
429
|
}
|
|
514
430
|
}
|
|
515
431
|
} catch (ex) {
|
|
516
|
-
errors.push(new HydratedBlockStateValidationError(
|
|
517
|
-
block?.[0]?._hash ?? ZERO_HASH14,
|
|
518
|
-
chainId,
|
|
519
|
-
block,
|
|
520
|
-
`Failed RequiredBalanceBlockStateValidator: ${ex}`,
|
|
521
|
-
ex
|
|
522
|
-
));
|
|
432
|
+
errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH14, chainId, block, `Failed RequiredBalanceBlockStateValidator: ${ex}`, ex));
|
|
523
433
|
}
|
|
524
434
|
return await Promise.resolve(errors);
|
|
525
|
-
};
|
|
435
|
+
}, "RequiredBalanceBlockStateValidator");
|
|
526
436
|
|
|
527
437
|
// src/hydratedBlockState/validateHydratedBlockState.ts
|
|
528
|
-
var validateHydratedBlockState = async (hydratedBlock, chainId, services, additionalValidators = []) => {
|
|
438
|
+
var validateHydratedBlockState = /* @__PURE__ */ __name(async (hydratedBlock, chainId, services, additionalValidators = []) => {
|
|
529
439
|
const errors = [];
|
|
530
440
|
try {
|
|
531
441
|
const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId);
|
|
532
442
|
for (const validateHydratedBlockError of validateHydratedBlockErrors) {
|
|
533
|
-
errors.push(new HydratedBlockStateValidationError2(
|
|
534
|
-
hydratedBlock[0]._hash,
|
|
535
|
-
chainId,
|
|
536
|
-
hydratedBlock,
|
|
537
|
-
`validateBlock error: ${validateHydratedBlockError}`,
|
|
538
|
-
validateHydratedBlockError
|
|
539
|
-
));
|
|
443
|
+
errors.push(new HydratedBlockStateValidationError2(hydratedBlock[0]._hash, chainId, hydratedBlock, `validateBlock error: ${validateHydratedBlockError}`, validateHydratedBlockError));
|
|
540
444
|
}
|
|
541
445
|
const validators = [
|
|
542
446
|
RequiredBalanceBlockStateValidator,
|
|
@@ -544,16 +448,10 @@ var validateHydratedBlockState = async (hydratedBlock, chainId, services, additi
|
|
|
544
448
|
];
|
|
545
449
|
errors.push(...(await Promise.all(validators.map((v) => v(hydratedBlock, chainId, services)))).flat());
|
|
546
450
|
} catch (ex) {
|
|
547
|
-
errors.push(new HydratedBlockStateValidationError2(
|
|
548
|
-
hydratedBlock?.[0]?._hash ?? ZERO_HASH15,
|
|
549
|
-
chainId,
|
|
550
|
-
hydratedBlock,
|
|
551
|
-
`Failed validateHydratedBlockState: ${ex}`,
|
|
552
|
-
ex
|
|
553
|
-
));
|
|
451
|
+
errors.push(new HydratedBlockStateValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH15, chainId, hydratedBlock, `Failed validateHydratedBlockState: ${ex}`, ex));
|
|
554
452
|
}
|
|
555
453
|
return errors;
|
|
556
|
-
};
|
|
454
|
+
}, "validateHydratedBlockState");
|
|
557
455
|
export {
|
|
558
456
|
BlockAllowedPayloadSchemasValidator,
|
|
559
457
|
BlockFieldsValidator,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/block/validateBlock.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/Fields.ts","../../src/block/validators/JsonSchema.ts","../../src/block/validators/PreviousHash.ts","../../src/hydratedBlock/validateHydratedBlock.ts","../../src/hydratedBlock/validators/Payloads.ts","../../src/elevatedPayload/validatePayloadInBlock.ts","../../src/elevatedPayload/lib/isElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromTransaction.ts","../../src/elevatedPayload/lib/validateTransactionInBlock.ts","../../src/elevatedPayload/lib/validateTypedPayloadInBlock.ts","../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateHashInBlock.ts","../../src/elevatedPayload/payloads/validateSchemaInBlock.ts","../../src/elevatedPayload/payloads/validateTransferInBlock.ts","../../src/hydratedBlockState/validateHydratedBlockState.ts","../../src/hydratedBlockState/validators/RequiredBalance.ts"],"sourcesContent":["import type { Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n block: BlockBoundWitness,\n chainId?: Hex,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const bwErrors = await BoundWitnessSignaturesValidator(block)\n for (const bwError of bwErrors) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'BoundWitness validation failed', bwError))\n }\n const validators: BlockValidatorFunction[] = [\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(\n validators.map(validator => validator(block, chainId)),\n )).flat())\n } catch (ex) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted', ex))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction, isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: BlockValidationError[] = []\n try {\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `payload schema not allowed in block: ${schema}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Hash, Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n chainId?: Hex,\n) => {\n const errors: BlockValidationError[] = []\n try {\n if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))\n }\n\n // get transaction hashes\n const txHashes: Hash[] = []\n for (let i = 0; i < block.payload_hashes.length; i++) {\n if (block.payload_schemas[i] === BoundWitnessSchema) {\n txHashes.push(block.payload_hashes[i])\n }\n }\n\n // check if transaction hashes are unique\n if (new Set(txHashes).size < txHashes.length) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Duplicate Transaction Hashes: ${txHashes}`,\n ))\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema } from '@xyo-network/xl1-schema'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => {\n const ajv = new Ajv({ allErrors: true, strict: true })\n const validate = ajv.compile(jsonSchema)\n return async (\n block: BlockBoundWitness,\n ) => {\n const errors: BlockValidationError[] = []\n try {\n await validate(block)\n if ((validate.errors ?? []).length > 0) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\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 const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n }\n}\n","import { isHash, ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import type { Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type {\n BlockValidatorFunction, HydratedBlock, HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessReferencesValidator } from '@xyo-network/xl1-validation'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n hydratedBlock: HydratedBlock,\n chainId?: Hex,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(hydratedBlock[0], chainId, additionalBlockValidators)\n for (const validateBlockError of validateBlockErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))\n }\n const bwRefErrors = await BoundWitnessReferencesValidator()(hydratedBlock)\n for (const bwRefError of bwRefErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `boundwitness reference error: ${bwRefError}`, bwRefError))\n }\n const validators: HydratedBlockValidationFunction[] = [\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed validateHydratedBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { type Hash, ZERO_HASH } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n HydratedBlock,\n HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n [block, payloads]: HydratedBlock,\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashStorageMeta<Payload>>> = {}\n for (const payload of payloads) {\n payloadMap[payload._hash] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const hash = block.payload_hashes[i]\n const schema = block.payload_schemas[i]\n const payload = payloadMap[hash]\n if (payload) {\n const payloadInBlockErrors = await validatePayloadInBlock(payload, [block, payloads])\n for (const payloadInBlockError of payloadInBlockErrors) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `validatePayloadInBlock error: ${payloadInBlockError}`,\n payloadInBlockError,\n ))\n }\n delete remainingPayloads[hash]\n } else {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `missing payload ${hash} ${schema}`))\n }\n }\n\n if (Object.keys(remainingPayloads).length > 0) {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `Failed PayloadsInBlockValidator: ${ex}`,\n ex,\n ))\n }\n\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { SchemaSchema } from '@xyo-network/schema-payload-plugin'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport {\n ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [HashSchema]: validateHashInBlock,\n [TransferSchema]: validateTransferInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [BoundWitnessSchema]: validateTransactionInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...await validator(payload, block))\n } else {\n errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (ex) {\n const error = new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport const isElevatedFromBlock = (payload: WithStorageMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\nimport { transactionsFromHydratedBlock } from '@xyo-network/xl1-protocol-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n const allTxPayloadHashes = new Set(txs.flatMap(tx => tx.payload_hashes))\n if (allTxPayloadHashes.has(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash,\n block,\n payload,\n `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`,\n ))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${ex}`, ex))\n }\n return errors\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\nimport { transactionsFromHydratedBlock } from '@xyo-network/xl1-protocol-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n if (txs.length > 0) {\n const hashes = txs.flatMap(tx => tx.payload_hashes)\n if (!hashes.includes(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Transaction does not include payload'))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'No Transactions in block'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `Failed validateElevatedFromTransaction: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {\n const txErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `BoundWitnessSignaturesValidator error: ${txError}`, txError))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(payload._hash ?? ZERO_HASH, block, payload, `validation excepted: ${ex}`, ex))\n }\n return errors\n}\n","import type { IdentityFunction } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n payload: Payload,\n block: HydratedBlock,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isStorageMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...await validateElevatedFromBlock(payload, block))\n } else {\n errors.push(...await validateElevatedFromTransaction(payload, block))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${ex}`))\n }\n return errors\n}\n//\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isChainStakeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isHashPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isSchemaPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateSchemaInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isTransfer)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTransferInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type {\n AccountBalanceServiceV2, HydratedBlock,\n HydratedBlockStateValidationFunctionV2,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunctionV2 = async (\n hydratedBlock: HydratedBlock,\n chainId: Hex,\n services: { accountBalance: AccountBalanceServiceV2 },\n additionalValidators: HydratedBlockStateValidationFunctionV2[] = [],\n) => {\n const errors: HydratedBlockStateValidationError[] = []\n try {\n const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId)\n for (const validateHydratedBlockError of validateHydratedBlockErrors) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock[0]._hash,\n chainId,\n hydratedBlock,\n `validateBlock error: ${validateHydratedBlockError}`,\n validateHydratedBlockError,\n ))\n }\n const validators: HydratedBlockStateValidationFunctionV2[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Address, Hex } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type {\n AccountBalanceServiceV2, HydratedBlock,\n HydratedBlockStateValidationFunctionV2,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1, HydratedBlockStateValidationError, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-protocol'\nimport { netBalancesForPayloads } from '@xyo-network/xl1-protocol-sdk'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunctionV2 = async (\n block: HydratedBlock,\n chainId: Hex,\n services: { accountBalance: AccountBalanceServiceV2 },\n) => {\n const errors: HydratedBlockStateValidationError[] = []\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads(block[1])\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<Address, bigint> = {}\n for (const address of netBalanceAddresses) {\n if (netBalances[address] < 0n) {\n requiredBalances[address] = -netBalances[address]\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n 'Insufficient funds because first block',\n )]\n\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const result = await services.accountBalance.balances(previous, [address])\n const balance = result[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${ex}`,\n ex,\n ))\n }\n return await Promise.resolve(errors)\n}\n"],"mappings":"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","names":["ZERO_HASH","BlockValidationError","ZERO_HASH","BlockValidationError","ZERO_HASH","BlockValidationError","ZERO_HASH","BlockValidationError","BlockValidationError","ZERO_HASH","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","ZERO_HASH","BoundWitnessSchema","InBlockPayloadValidationError","InBlockPayloadValidationError","transactionsFromHydratedBlock","ZERO_HASH","InBlockPayloadValidationError","isTransactionBoundWitness","BoundWitnessSignaturesValidator","isStorageMeta","isStorageMeta","ZERO_HASH","InBlockPayloadValidationError","InBlockPayloadValidationError","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","InBlockPayloadValidationError","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","InBlockPayloadValidationError","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","InBlockPayloadValidationError","ZERO_HASH","BoundWitnessSchema","InBlockPayloadValidationError","ZERO_HASH","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","ZERO_HASH","HydratedBlockStateValidationError","ZERO_HASH","HydratedBlockStateValidationError","ZERO_HASH"]}
|
|
1
|
+
{"version":3,"sources":["../../src/block/validateBlock.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/Fields.ts","../../src/block/validators/JsonSchema.ts","../../src/block/validators/PreviousHash.ts","../../src/hydratedBlock/validateHydratedBlock.ts","../../src/hydratedBlock/validators/Payloads.ts","../../src/elevatedPayload/validatePayloadInBlock.ts","../../src/elevatedPayload/lib/isElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromTransaction.ts","../../src/elevatedPayload/lib/validateTransactionInBlock.ts","../../src/elevatedPayload/lib/validateTypedPayloadInBlock.ts","../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateHashInBlock.ts","../../src/elevatedPayload/payloads/validateSchemaInBlock.ts","../../src/elevatedPayload/payloads/validateTransferInBlock.ts","../../src/hydratedBlockState/validateHydratedBlockState.ts","../../src/hydratedBlockState/validators/RequiredBalance.ts"],"sourcesContent":["import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BlockBoundWitness, BlockValidatorFunction, Chain,\n} from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n block: BlockBoundWitness,\n chainId?: Chain,\n additionalValidators: BlockValidatorFunction[] = [],\n): Promise<BlockValidationError[]> => {\n const errors: BlockValidationError[] = []\n try {\n const bwErrors = await BoundWitnessSignaturesValidator(block)\n for (const bwError of bwErrors) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'BoundWitness validation failed', bwError))\n }\n const validators: BlockValidatorFunction[] = [\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockAllowedPayloadSchemasValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(\n validators.map(validator => validator(block, chainId)),\n )).flat())\n } catch (ex) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'validation excepted', ex))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction, isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-protocol'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: BlockValidationError[] = []\n try {\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `payload schema not allowed in block: ${schema}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Hash } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport { isDefined } from '@xylabs/typeof'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BlockBoundWitness, BlockValidatorFunction, Chain,\n} from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n chainId?: Chain,\n) => {\n const errors: BlockValidationError[] = []\n try {\n if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'Invalid chain id'))\n }\n\n // get transaction hashes\n const txHashes: Hash[] = []\n for (let i = 0; i < block.payload_hashes.length; i++) {\n if (block.payload_schemas[i] === BoundWitnessSchema) {\n txHashes.push(block.payload_hashes[i])\n }\n }\n\n // check if transaction hashes are unique\n if (new Set(txHashes).size < txHashes.length) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Duplicate Transaction Hashes: ${txHashes}`,\n ))\n }\n } catch (ex) {\n errors.push(new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport {\n type BlockBoundWitness, BlockValidationError, type BlockValidatorFunction,\n} from '@xyo-network/xl1-protocol'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema } from '@xyo-network/xl1-schema'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => {\n const ajv = new Ajv({ allErrors: true, strict: true })\n const validate = ajv.compile(jsonSchema)\n return async (\n block: BlockBoundWitness,\n ) => {\n const errors: BlockValidationError[] = []\n try {\n await validate(block)\n if ((validate.errors ?? []).length > 0) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\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 const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `validation excepted: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n }\n}\n","import { isHash, ZERO_HASH } from '@xylabs/hex'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-protocol'\nimport { BlockValidationError } from '@xyo-network/xl1-protocol'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n BlockValidatorFunction, Chain, HydratedBlock, HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessReferencesValidator } from '@xyo-network/xl1-validation'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n hydratedBlock: HydratedBlock,\n chainId?: Chain,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(hydratedBlock[0], chainId, additionalBlockValidators)\n for (const validateBlockError of validateBlockErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError))\n }\n const bwRefErrors = await BoundWitnessReferencesValidator()(hydratedBlock)\n for (const bwRefError of bwRefErrors) {\n errors.push(new HydratedBlockValidationError(hydratedBlock[0]._hash, hydratedBlock, `boundwitness reference error: ${bwRefError}`, bwRefError))\n }\n const validators: HydratedBlockValidationFunction[] = [\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n hydratedBlock,\n `Failed validateHydratedBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { type Hash, ZERO_HASH } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n HydratedBlock,\n HydratedBlockValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n [block, payloads]: HydratedBlock,\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashStorageMeta<Payload>>> = {}\n for (const payload of payloads) {\n payloadMap[payload._hash] = payload\n }\n\n const remainingPayloads = { ...payloadMap }\n\n for (let i = 0; i < block.payload_hashes.length; i++) {\n const hash = block.payload_hashes[i]\n const schema = block.payload_schemas[i]\n const payload = payloadMap[hash]\n if (payload) {\n const payloadInBlockErrors = await validatePayloadInBlock(payload, [block, payloads])\n for (const payloadInBlockError of payloadInBlockErrors) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `validatePayloadInBlock error: ${payloadInBlockError}`,\n payloadInBlockError,\n ))\n }\n delete remainingPayloads[hash]\n } else {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `missing payload ${hash} ${schema}`))\n }\n }\n\n if (Object.keys(remainingPayloads).length > 0) {\n errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n } catch (ex) {\n errors.push(new HydratedBlockValidationError(\n block?._hash ?? ZERO_HASH,\n [block, payloads],\n `Failed PayloadsInBlockValidator: ${ex}`,\n ex,\n ))\n }\n\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { SchemaSchema } from '@xyo-network/schema-payload-plugin'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport {\n ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [HashSchema]: validateHashInBlock,\n [TransferSchema]: validateTransferInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [BoundWitnessSchema]: validateTransactionInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...await validator(payload, block))\n } else {\n errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))\n }\n } catch (ex) {\n const error = new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\n\nexport const isElevatedFromBlock = (payload: WithStorageMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\nimport { transactionsFromHydratedBlock } from '@xyo-network/xl1-protocol-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n const allTxPayloadHashes = new Set(txs.flatMap(tx => tx.payload_hashes))\n if (allTxPayloadHashes.has(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash,\n block,\n payload,\n `Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`,\n ))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${ex}`, ex))\n }\n return errors\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\nimport { transactionsFromHydratedBlock } from '@xyo-network/xl1-protocol-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const txs = transactionsFromHydratedBlock(block)\n if (txs.length > 0) {\n const hashes = txs.flatMap(tx => tx.payload_hashes)\n if (!hashes.includes(payload._hash)) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Transaction does not include payload'))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'No Transactions in block'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `Failed validateElevatedFromTransaction: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransactionBoundWitness } from '@xyo-network/xl1-protocol'\nimport { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {\n const txErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `BoundWitnessSignaturesValidator error: ${txError}`, txError))\n }\n } else {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, 'Payload failed isTransactionBoundWitness or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(payload._hash ?? ZERO_HASH, block, payload, `validation excepted: ${ex}`, ex))\n }\n return errors\n}\n","import type { IdentityFunction } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock } from '@xyo-network/xl1-protocol'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n payload: Payload,\n block: HydratedBlock,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (identityFunction(payload) && isStorageMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...await validateElevatedFromBlock(payload, block))\n } else {\n errors.push(...await validateElevatedFromTransaction(payload, block))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n } catch (ex) {\n errors.push(new Error(`Failed validateTypedPayloadInBlock: ${ex}`))\n }\n return errors\n}\n//\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isChainStakeIntent)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n block[0]?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isHashPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `validation excepted: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isSchemaPayload)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateSchemaInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isTransfer)\n for (const typedError of typedErrors) {\n errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))\n }\n } catch (ex) {\n errors.push(new InBlockPayloadValidationError(\n (block?.[0])?._hash ?? ZERO_HASH,\n block,\n payload,\n `Failed validateTransferInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/hex'\nimport type {\n AccountBalanceServiceV2, Chain, HydratedBlock,\n HydratedBlockStateValidationFunctionV2,\n} from '@xyo-network/xl1-protocol'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunctionV2 = async (\n hydratedBlock: HydratedBlock,\n chainId: Chain,\n services: { accountBalance: AccountBalanceServiceV2 },\n additionalValidators: HydratedBlockStateValidationFunctionV2[] = [],\n) => {\n const errors: HydratedBlockStateValidationError[] = []\n try {\n const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId)\n for (const validateHydratedBlockError of validateHydratedBlockErrors) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock[0]._hash,\n chainId,\n hydratedBlock,\n `validateBlock error: ${validateHydratedBlockError}`,\n validateHydratedBlockError,\n ))\n }\n const validators: HydratedBlockStateValidationFunctionV2[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport type {\n AccountBalanceServiceV2, Chain, HydratedBlock,\n HydratedBlockStateValidationFunctionV2,\n} from '@xyo-network/xl1-protocol'\nimport {\n AttoXL1, HydratedBlockStateValidationError, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-protocol'\nimport { netBalancesForPayloads } from '@xyo-network/xl1-protocol-sdk'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunctionV2 = async (\n block: HydratedBlock,\n chainId: Chain,\n services: { accountBalance: AccountBalanceServiceV2 },\n) => {\n const errors: HydratedBlockStateValidationError[] = []\n try {\n // TODO: Filter by non-producer elevated payloads\n // to allow for transfers from ZERO address\n const netBalances = netBalancesForPayloads(block[1])\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<Address, bigint> = {}\n for (const address of netBalanceAddresses) {\n if (netBalances[address] < 0n) {\n requiredBalances[address] = -netBalances[address]\n }\n }\n const previous = block[0].previous\n if (previous === null) return [new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n 'Insufficient funds because first block',\n )]\n\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const result = await services.accountBalance.balances(previous, [address])\n const balance = result[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `Failed RequiredBalanceBlockStateValidator: ${ex}`,\n ex,\n ))\n }\n return await Promise.resolve(errors)\n}\n"],"mappings":"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","names":["ZERO_HASH","BlockValidationError","BoundWitnessSignaturesValidator","ZERO_HASH","BlockValidationError","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","BlockValidationError","_hash","ZERO_HASH","ex","ZERO_HASH","isDefined","BoundWitnessSchema","BlockValidationError","BlockFieldsValidator","block","chainId","errors","isDefined","chain","toLowerCase","push","BlockValidationError","_hash","ZERO_HASH","txHashes","i","payload_hashes","length","payload_schemas","BoundWitnessSchema","Set","size","ex","ZERO_HASH","BlockValidationError","BlockBoundWitnessWithStorageMetaJsonSchema","Ajv","BlockJsonSchemaValidator","jsonSchema","BlockBoundWitnessWithStorageMetaJsonSchema","ajv","Ajv","allErrors","strict","validate","compile","block","errors","length","error","BlockValidationError","_hash","ZERO_HASH","errorsText","separator","cause","push","ex","isHash","ZERO_HASH","BlockValidationError","BlockPreviousHashValidator","block","errors","blockNumber","isHash","previous","push","BlockValidationError","_hash","ZERO_HASH","ex","error","cause","validateBlock","block","chainId","additionalValidators","errors","bwErrors","BoundWitnessSignaturesValidator","bwError","push","BlockValidationError","_hash","ZERO_HASH","validators","BlockFieldsValidator","BlockPreviousHashValidator","BlockAllowedPayloadSchemasValidator","Promise","all","map","validator","flat","ex","ZERO_HASH","HydratedBlockValidationError","BoundWitnessReferencesValidator","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","BoundWitnessSchema","SchemaSchema","ChainStakeIntentSchema","HashSchema","InBlockPayloadValidationError","TransferSchema","isTransactionBoundWitness","isElevatedFromBlock","payload","payloads","txs","filter","p","isTransactionBoundWitness","tx","payload_hashes","includes","_hash","InBlockPayloadValidationError","transactionsFromHydratedBlock","validateElevatedFromBlock","payload","block","errors","txs","transactionsFromHydratedBlock","allTxPayloadHashes","Set","flatMap","tx","payload_hashes","has","_hash","push","InBlockPayloadValidationError","schema","ex","InBlockPayloadValidationError","transactionsFromHydratedBlock","validateElevatedFromTransaction","payload","block","errors","txs","transactionsFromHydratedBlock","length","hashes","flatMap","tx","payload_hashes","includes","_hash","push","InBlockPayloadValidationError","ex","ZERO_HASH","isStorageMeta","InBlockPayloadValidationError","isTransactionBoundWitness","BoundWitnessSignaturesValidator","validateTransactionInBlock","payload","block","errors","isTransactionBoundWitness","isStorageMeta","txErrors","BoundWitnessSignaturesValidator","txError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","isStorageMeta","validateTypedPayloadInBlock","payload","block","identityFunction","errors","isStorageMeta","isElevatedFromBlock","push","validateElevatedFromBlock","validateElevatedFromTransaction","Error","ex","ZERO_HASH","InBlockPayloadValidationError","isChainStakeIntent","validateChainStakeIntentInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isChainStakeIntent","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isHashPayload","validateHashInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isHashPayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","isSchemaPayload","InBlockPayloadValidationError","validateSchemaInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isSchemaPayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isTransfer","validateTransferInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isTransfer","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","payloadValidators","HashSchema","validateHashInBlock","TransferSchema","validateTransferInBlock","SchemaSchema","validateSchemaInBlock","ChainStakeIntentSchema","validateChainStakeIntentInBlock","BoundWitnessSchema","validateTransactionInBlock","validatePayloadInBlock","payload","block","errors","validator","schema","push","InBlockPayloadValidationError","_hash","ZERO_HASH","ex","error","cause","PayloadsInBlockValidator","block","payloads","errors","payloadMap","payload","_hash","remainingPayloads","i","payload_hashes","length","hash","schema","payload_schemas","payloadInBlockErrors","validatePayloadInBlock","payloadInBlockError","push","HydratedBlockValidationError","ZERO_HASH","Object","keys","join","ex","validateHydratedBlock","hydratedBlock","chainId","additionalValidators","additionalBlockValidators","errors","validateBlockErrors","validateBlock","validateBlockError","push","HydratedBlockValidationError","_hash","bwRefErrors","BoundWitnessReferencesValidator","bwRefError","validators","PayloadsInBlockValidator","Promise","all","map","v","flat","ex","ZERO_HASH","ZERO_HASH","HydratedBlockStateValidationError","ZERO_HASH","AttoXL1","HydratedBlockStateValidationError","XYO_ZERO_ADDRESS","netBalancesForPayloads","RequiredBalanceBlockStateValidator","block","chainId","services","errors","netBalances","netBalancesForPayloads","netBalanceAddresses","Object","keys","requiredBalances","address","previous","HydratedBlockStateValidationError","_hash","ZERO_HASH","reqBalance","entries","result","accountBalance","balances","balance","AttoXL1","XYO_ZERO_ADDRESS","push","ex","Promise","resolve","validateHydratedBlockState","hydratedBlock","chainId","services","additionalValidators","errors","validateHydratedBlockErrors","validateHydratedBlock","validateHydratedBlockError","push","HydratedBlockStateValidationError","_hash","validators","RequiredBalanceBlockStateValidator","Promise","all","map","v","flat","ex","ZERO_HASH"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "http://json.schemastore.org/package.json",
|
|
3
3
|
"name": "@xyo-network/chain-validation",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.12.1",
|
|
5
5
|
"description": "XYO Layer One SDK Validation",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -36,30 +36,29 @@
|
|
|
36
36
|
"src"
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@xylabs/hex": "~5.0.
|
|
40
|
-
"@xylabs/typeof": "~5.0.
|
|
41
|
-
"@xyo-network/boundwitness-model": "~5.0.
|
|
42
|
-
"@xyo-network/chain-protocol": "~1.
|
|
43
|
-
"@xyo-network/payload-model": "~5.0.
|
|
44
|
-
"@xyo-network/schema-payload-plugin": "~5.0.
|
|
45
|
-
"@xyo-network/xl1-protocol": "~1.10.
|
|
46
|
-
"@xyo-network/xl1-protocol-sdk": "~1.
|
|
47
|
-
"@xyo-network/xl1-schema": "~1.
|
|
48
|
-
"@xyo-network/xl1-validation": "~1.
|
|
39
|
+
"@xylabs/hex": "~5.0.8",
|
|
40
|
+
"@xylabs/typeof": "~5.0.8",
|
|
41
|
+
"@xyo-network/boundwitness-model": "~5.0.5",
|
|
42
|
+
"@xyo-network/chain-protocol": "~1.12.1",
|
|
43
|
+
"@xyo-network/payload-model": "~5.0.5",
|
|
44
|
+
"@xyo-network/schema-payload-plugin": "~5.0.5",
|
|
45
|
+
"@xyo-network/xl1-protocol": "~1.10.13",
|
|
46
|
+
"@xyo-network/xl1-protocol-sdk": "~1.12.1",
|
|
47
|
+
"@xyo-network/xl1-schema": "~1.12.1",
|
|
48
|
+
"@xyo-network/xl1-validation": "~1.12.1",
|
|
49
49
|
"ajv": "~8.17.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@types/node": "~24.2.
|
|
53
|
-
"@xylabs/assert": "~5.0.
|
|
54
|
-
"@xylabs/promise": "~5.0.
|
|
55
|
-
"@xylabs/ts-scripts-yarn3": "~7.1.
|
|
56
|
-
"@xylabs/tsconfig": "~7.1.
|
|
57
|
-
"@xyo-network/account": "~5.0.
|
|
58
|
-
"@xyo-network/account-model": "~5.0.
|
|
59
|
-
"@xyo-network/archivist-memory": "~5.0.
|
|
60
|
-
"@xyo-network/archivist-model": "~5.0.
|
|
61
|
-
"@xyo-network/wallet": "~5.0.
|
|
62
|
-
"@xyo-network/xl1-protocol-sdk": "~1.11.0",
|
|
52
|
+
"@types/node": "~24.2.1",
|
|
53
|
+
"@xylabs/assert": "~5.0.8",
|
|
54
|
+
"@xylabs/promise": "~5.0.8",
|
|
55
|
+
"@xylabs/ts-scripts-yarn3": "~7.1.2",
|
|
56
|
+
"@xylabs/tsconfig": "~7.1.2",
|
|
57
|
+
"@xyo-network/account": "~5.0.5",
|
|
58
|
+
"@xyo-network/account-model": "~5.0.5",
|
|
59
|
+
"@xyo-network/archivist-memory": "~5.0.5",
|
|
60
|
+
"@xyo-network/archivist-model": "~5.0.5",
|
|
61
|
+
"@xyo-network/wallet": "~5.0.5",
|
|
63
62
|
"typescript": "~5.9.2",
|
|
64
63
|
"vitest": "~3.2.4"
|
|
65
64
|
},
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import type { Hex } from '@xylabs/hex'
|
|
2
1
|
import { ZERO_HASH } from '@xylabs/hex'
|
|
3
2
|
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
4
|
-
import type {
|
|
3
|
+
import type {
|
|
4
|
+
BlockBoundWitness, BlockValidatorFunction, Chain,
|
|
5
|
+
} from '@xyo-network/xl1-protocol'
|
|
5
6
|
import { BlockValidationError } from '@xyo-network/xl1-protocol'
|
|
6
7
|
import { BoundWitnessSignaturesValidator } from '@xyo-network/xl1-validation'
|
|
7
8
|
|
|
@@ -12,7 +13,7 @@ import {
|
|
|
12
13
|
|
|
13
14
|
export const validateBlock = async (
|
|
14
15
|
block: BlockBoundWitness,
|
|
15
|
-
chainId?:
|
|
16
|
+
chainId?: Chain,
|
|
16
17
|
additionalValidators: BlockValidatorFunction[] = [],
|
|
17
18
|
): Promise<BlockValidationError[]> => {
|
|
18
19
|
const errors: BlockValidationError[] = []
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
import type { Hash
|
|
1
|
+
import type { Hash } from '@xylabs/hex'
|
|
2
2
|
import { ZERO_HASH } from '@xylabs/hex'
|
|
3
3
|
import { isDefined } from '@xylabs/typeof'
|
|
4
4
|
import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'
|
|
5
5
|
import type { WithStorageMeta } from '@xyo-network/payload-model'
|
|
6
|
-
import {
|
|
7
|
-
|
|
6
|
+
import type {
|
|
7
|
+
BlockBoundWitness, BlockValidatorFunction, Chain,
|
|
8
8
|
} from '@xyo-network/xl1-protocol'
|
|
9
|
+
import { BlockValidationError } from '@xyo-network/xl1-protocol'
|
|
9
10
|
|
|
10
11
|
export const BlockFieldsValidator: BlockValidatorFunction = (
|
|
11
12
|
block: BlockBoundWitness,
|
|
12
|
-
chainId?:
|
|
13
|
+
chainId?: Chain,
|
|
13
14
|
) => {
|
|
14
15
|
const errors: BlockValidationError[] = []
|
|
15
16
|
try {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { Hex } from '@xylabs/hex'
|
|
2
1
|
import { ZERO_HASH } from '@xylabs/hex'
|
|
3
2
|
import type {
|
|
4
|
-
BlockValidatorFunction, HydratedBlock, HydratedBlockValidationFunction,
|
|
3
|
+
BlockValidatorFunction, Chain, HydratedBlock, HydratedBlockValidationFunction,
|
|
5
4
|
} from '@xyo-network/xl1-protocol'
|
|
6
5
|
import { HydratedBlockValidationError } from '@xyo-network/xl1-protocol'
|
|
7
6
|
import { BoundWitnessReferencesValidator } from '@xyo-network/xl1-validation'
|
|
@@ -11,7 +10,7 @@ import { PayloadsInBlockValidator } from './validators/index.ts'
|
|
|
11
10
|
|
|
12
11
|
export const validateHydratedBlock = async (
|
|
13
12
|
hydratedBlock: HydratedBlock,
|
|
14
|
-
chainId?:
|
|
13
|
+
chainId?: Chain,
|
|
15
14
|
additionalValidators: HydratedBlockValidationFunction[] = [],
|
|
16
15
|
additionalBlockValidators: BlockValidatorFunction[] = [],
|
|
17
16
|
) => {
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import type { Hex } from '@xylabs/hex'
|
|
2
1
|
import { ZERO_HASH } from '@xylabs/hex'
|
|
3
2
|
import type {
|
|
4
|
-
AccountBalanceServiceV2, HydratedBlock,
|
|
3
|
+
AccountBalanceServiceV2, Chain, HydratedBlock,
|
|
5
4
|
HydratedBlockStateValidationFunctionV2,
|
|
6
5
|
} from '@xyo-network/xl1-protocol'
|
|
7
6
|
import { HydratedBlockStateValidationError } from '@xyo-network/xl1-protocol'
|
|
@@ -11,7 +10,7 @@ import { RequiredBalanceBlockStateValidator } from './validators/index.ts'
|
|
|
11
10
|
|
|
12
11
|
export const validateHydratedBlockState: HydratedBlockStateValidationFunctionV2 = async (
|
|
13
12
|
hydratedBlock: HydratedBlock,
|
|
14
|
-
chainId:
|
|
13
|
+
chainId: Chain,
|
|
15
14
|
services: { accountBalance: AccountBalanceServiceV2 },
|
|
16
15
|
additionalValidators: HydratedBlockStateValidationFunctionV2[] = [],
|
|
17
16
|
) => {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { Address
|
|
1
|
+
import type { Address } from '@xylabs/hex'
|
|
2
2
|
import { ZERO_HASH } from '@xylabs/hex'
|
|
3
3
|
import type {
|
|
4
|
-
AccountBalanceServiceV2, HydratedBlock,
|
|
4
|
+
AccountBalanceServiceV2, Chain, HydratedBlock,
|
|
5
5
|
HydratedBlockStateValidationFunctionV2,
|
|
6
6
|
} from '@xyo-network/xl1-protocol'
|
|
7
7
|
import {
|
|
@@ -11,7 +11,7 @@ import { netBalancesForPayloads } from '@xyo-network/xl1-protocol-sdk'
|
|
|
11
11
|
|
|
12
12
|
export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunctionV2 = async (
|
|
13
13
|
block: HydratedBlock,
|
|
14
|
-
chainId:
|
|
14
|
+
chainId: Chain,
|
|
15
15
|
services: { accountBalance: AccountBalanceServiceV2 },
|
|
16
16
|
) => {
|
|
17
17
|
const errors: HydratedBlockStateValidationError[] = []
|