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