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