@xyo-network/chain-validation 1.14.0 → 1.14.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/elevatedPayload/payloads/index.d.ts +4 -0
- package/dist/neutral/elevatedPayload/payloads/index.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeBackInBlock.d.ts +3 -0
- package/dist/neutral/elevatedPayload/payloads/validateBridgeBackInBlock.d.ts.map +1 -0
- package/dist/neutral/elevatedPayload/payloads/validateBridgeCompleteInBlock.d.ts +3 -0
- package/dist/neutral/elevatedPayload/payloads/validateBridgeCompleteInBlock.d.ts.map +1 -0
- package/dist/neutral/elevatedPayload/payloads/validateBridgeRequestInBlock.d.ts +3 -0
- package/dist/neutral/elevatedPayload/payloads/validateBridgeRequestInBlock.d.ts.map +1 -0
- package/dist/neutral/elevatedPayload/payloads/validateTimeInBlock.d.ts +3 -0
- package/dist/neutral/elevatedPayload/payloads/validateTimeInBlock.d.ts.map +1 -0
- package/dist/neutral/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -1
- package/dist/neutral/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
- package/dist/neutral/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
- package/dist/neutral/index.mjs +145 -69
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +7 -6
- package/src/elevatedPayload/payloads/index.ts +4 -0
- package/src/elevatedPayload/payloads/validateBridgeBackInBlock.ts +30 -0
- package/src/elevatedPayload/payloads/validateBridgeCompleteInBlock.ts +30 -0
- package/src/elevatedPayload/payloads/validateBridgeRequestInBlock.ts +30 -0
- package/src/elevatedPayload/payloads/validateTimeInBlock.ts +30 -0
- package/src/elevatedPayload/validatePayloadInBlock.ts +13 -1
- package/src/hydratedBlockState/validateHydratedBlockState.ts +25 -22
- package/src/hydratedBlockState/validators/RequiredBalance.ts +43 -39
|
@@ -1,5 +1,9 @@
|
|
|
1
|
+
export * from './validateBridgeBackInBlock.ts';
|
|
2
|
+
export * from './validateBridgeCompleteInBlock.ts';
|
|
3
|
+
export * from './validateBridgeRequestInBlock.ts';
|
|
1
4
|
export * from './validateChainStakeIntentInBlock.ts';
|
|
2
5
|
export * from './validateHashInBlock.ts';
|
|
3
6
|
export * from './validateSchemaInBlock.ts';
|
|
7
|
+
export * from './validateTimeInBlock.ts';
|
|
4
8
|
export * from './validateTransferInBlock.ts';
|
|
5
9
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/index.ts"],"names":[],"mappings":"AAAA,cAAc,sCAAsC,CAAA;AACpD,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,8BAA8B,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/index.ts"],"names":[],"mappings":"AAAA,cAAc,gCAAgC,CAAA;AAC9C,cAAc,oCAAoC,CAAA;AAClD,cAAc,mCAAmC,CAAA;AACjD,cAAc,sCAAsC,CAAA;AACpD,cAAc,0BAA0B,CAAA;AACxC,cAAc,4BAA4B,CAAA;AAC1C,cAAc,0BAA0B,CAAA;AACxC,cAAc,8BAA8B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateBridgeBackInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateBridgeBackInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AAKlC,eAAO,MAAM,yBAAyB,EAAE,gCAoBvC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateBridgeCompleteInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateBridgeCompleteInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AAKlC,eAAO,MAAM,6BAA6B,EAAE,gCAoB3C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateBridgeRequestInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateBridgeRequestInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AAKlC,eAAO,MAAM,4BAA4B,EAAE,gCAoB1C,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validateTimeInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateTimeInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AAKlC,eAAO,MAAM,mBAAmB,EAAE,gCAoBjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validatePayloadInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validatePayloadInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"validatePayloadInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validatePayloadInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAEV,gCAAgC,EACjC,MAAM,2BAA2B,CAAA;AA+BlC,eAAO,MAAM,sBAAsB,EAAE,gCAuBpC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAEV,sCAAsC,EACvC,MAAM,2BAA2B,CAAA;AAMlC,eAAO,MAAM,0BAA0B,EAAE,sCAmCxC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlockState/validators/RequiredBalance.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlockState/validators/RequiredBalance.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEV,sCAAsC,EACvC,MAAM,2BAA2B,CAAA;AAMlC,eAAO,MAAM,kCAAkC,EAAE,sCAkDhD,CAAA"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -128,19 +128,19 @@ var validateBlock = /* @__PURE__ */ __name(async (block, chainId, additionalVali
|
|
|
128
128
|
}, "validateBlock");
|
|
129
129
|
|
|
130
130
|
// src/hydratedBlock/validateHydratedBlock.ts
|
|
131
|
-
import { ZERO_HASH as
|
|
131
|
+
import { ZERO_HASH as ZERO_HASH17 } from "@xylabs/hex";
|
|
132
132
|
import { HydratedBlockValidationError as HydratedBlockValidationError2 } from "@xyo-network/xl1-protocol";
|
|
133
133
|
import { BoundWitnessReferencesValidator } from "@xyo-network/xl1-validation";
|
|
134
134
|
|
|
135
135
|
// src/hydratedBlock/validators/Payloads.ts
|
|
136
|
-
import { ZERO_HASH as
|
|
136
|
+
import { ZERO_HASH as ZERO_HASH16 } from "@xylabs/hex";
|
|
137
137
|
import { HydratedBlockValidationError } from "@xyo-network/xl1-protocol";
|
|
138
138
|
|
|
139
139
|
// src/elevatedPayload/validatePayloadInBlock.ts
|
|
140
|
-
import { ZERO_HASH as
|
|
140
|
+
import { ZERO_HASH as ZERO_HASH15 } from "@xylabs/hex";
|
|
141
141
|
import { BoundWitnessSchema as BoundWitnessSchema2 } from "@xyo-network/boundwitness-model";
|
|
142
142
|
import { SchemaSchema } from "@xyo-network/schema-payload-plugin";
|
|
143
|
-
import { ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError as
|
|
143
|
+
import { BridgeBackSchema, BridgeCompleteSchema, BridgeRequestSchema, ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError as InBlockPayloadValidationError12, TimeSchema, TransferSchema } from "@xyo-network/xl1-protocol";
|
|
144
144
|
|
|
145
145
|
// src/elevatedPayload/lib/isElevatedFromBlock.ts
|
|
146
146
|
import { isTransactionBoundWitness } from "@xyo-network/xl1-protocol";
|
|
@@ -234,67 +234,131 @@ var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (payload, block,
|
|
|
234
234
|
return errors;
|
|
235
235
|
}, "validateTypedPayloadInBlock");
|
|
236
236
|
|
|
237
|
-
// src/elevatedPayload/payloads/
|
|
237
|
+
// src/elevatedPayload/payloads/validateBridgeBackInBlock.ts
|
|
238
238
|
import { ZERO_HASH as ZERO_HASH7 } from "@xylabs/hex";
|
|
239
|
-
import { InBlockPayloadValidationError as InBlockPayloadValidationError4,
|
|
239
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError4, isBridgeBack } from "@xyo-network/xl1-protocol";
|
|
240
|
+
var validateBridgeBackInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
241
|
+
const errors = [];
|
|
242
|
+
try {
|
|
243
|
+
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeBack);
|
|
244
|
+
for (const typedError of typedErrors) {
|
|
245
|
+
errors.push(new InBlockPayloadValidationError4(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
246
|
+
}
|
|
247
|
+
} catch (ex) {
|
|
248
|
+
errors.push(new InBlockPayloadValidationError4(block?.[0]?._hash ?? ZERO_HASH7, block, payload, `Failed validateTransferInBlock: ${ex}`, ex));
|
|
249
|
+
}
|
|
250
|
+
return errors;
|
|
251
|
+
}, "validateBridgeBackInBlock");
|
|
252
|
+
|
|
253
|
+
// src/elevatedPayload/payloads/validateBridgeCompleteInBlock.ts
|
|
254
|
+
import { ZERO_HASH as ZERO_HASH8 } from "@xylabs/hex";
|
|
255
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError5, isBridgeComplete } from "@xyo-network/xl1-protocol";
|
|
256
|
+
var validateBridgeCompleteInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
257
|
+
const errors = [];
|
|
258
|
+
try {
|
|
259
|
+
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeComplete);
|
|
260
|
+
for (const typedError of typedErrors) {
|
|
261
|
+
errors.push(new InBlockPayloadValidationError5(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
262
|
+
}
|
|
263
|
+
} catch (ex) {
|
|
264
|
+
errors.push(new InBlockPayloadValidationError5(block?.[0]?._hash ?? ZERO_HASH8, block, payload, `Failed validateTransferInBlock: ${ex}`, ex));
|
|
265
|
+
}
|
|
266
|
+
return errors;
|
|
267
|
+
}, "validateBridgeCompleteInBlock");
|
|
268
|
+
|
|
269
|
+
// src/elevatedPayload/payloads/validateBridgeRequestInBlock.ts
|
|
270
|
+
import { ZERO_HASH as ZERO_HASH9 } from "@xylabs/hex";
|
|
271
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError6, isBridgeRequest } from "@xyo-network/xl1-protocol";
|
|
272
|
+
var validateBridgeRequestInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
273
|
+
const errors = [];
|
|
274
|
+
try {
|
|
275
|
+
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeRequest);
|
|
276
|
+
for (const typedError of typedErrors) {
|
|
277
|
+
errors.push(new InBlockPayloadValidationError6(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
278
|
+
}
|
|
279
|
+
} catch (ex) {
|
|
280
|
+
errors.push(new InBlockPayloadValidationError6(block?.[0]?._hash ?? ZERO_HASH9, block, payload, `Failed validateTransferInBlock: ${ex}`, ex));
|
|
281
|
+
}
|
|
282
|
+
return errors;
|
|
283
|
+
}, "validateBridgeRequestInBlock");
|
|
284
|
+
|
|
285
|
+
// src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts
|
|
286
|
+
import { ZERO_HASH as ZERO_HASH10 } from "@xylabs/hex";
|
|
287
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError7, isChainStakeIntent } from "@xyo-network/xl1-protocol";
|
|
240
288
|
var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
241
289
|
const errors = [];
|
|
242
290
|
try {
|
|
243
291
|
const typedErrors = await validateTypedPayloadInBlock(payload, block, isChainStakeIntent);
|
|
244
292
|
for (const typedError of typedErrors) {
|
|
245
|
-
errors.push(new
|
|
293
|
+
errors.push(new InBlockPayloadValidationError7(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
246
294
|
}
|
|
247
295
|
} catch (ex) {
|
|
248
|
-
errors.push(new
|
|
296
|
+
errors.push(new InBlockPayloadValidationError7(block[0]?._hash ?? ZERO_HASH10, block, payload, `validation excepted: ${ex}`, ex));
|
|
249
297
|
}
|
|
250
298
|
return errors;
|
|
251
299
|
}, "validateChainStakeIntentInBlock");
|
|
252
300
|
|
|
253
301
|
// src/elevatedPayload/payloads/validateHashInBlock.ts
|
|
254
|
-
import { ZERO_HASH as
|
|
255
|
-
import { InBlockPayloadValidationError as
|
|
302
|
+
import { ZERO_HASH as ZERO_HASH11 } from "@xylabs/hex";
|
|
303
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError8, isHashPayload } from "@xyo-network/xl1-protocol";
|
|
256
304
|
var validateHashInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
257
305
|
const errors = [];
|
|
258
306
|
try {
|
|
259
307
|
const typedErrors = await validateTypedPayloadInBlock(payload, block, isHashPayload);
|
|
260
308
|
for (const typedError of typedErrors) {
|
|
261
|
-
errors.push(new
|
|
309
|
+
errors.push(new InBlockPayloadValidationError8(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
262
310
|
}
|
|
263
311
|
} catch (ex) {
|
|
264
|
-
errors.push(new
|
|
312
|
+
errors.push(new InBlockPayloadValidationError8(block?.[0]?._hash ?? ZERO_HASH11, block, payload, `validation excepted: ${ex}`, ex));
|
|
265
313
|
}
|
|
266
314
|
return errors;
|
|
267
315
|
}, "validateHashInBlock");
|
|
268
316
|
|
|
269
317
|
// src/elevatedPayload/payloads/validateSchemaInBlock.ts
|
|
270
|
-
import { ZERO_HASH as
|
|
318
|
+
import { ZERO_HASH as ZERO_HASH12 } from "@xylabs/hex";
|
|
271
319
|
import { isSchemaPayload } from "@xyo-network/schema-payload-plugin";
|
|
272
|
-
import { InBlockPayloadValidationError as
|
|
320
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError9 } from "@xyo-network/xl1-protocol";
|
|
273
321
|
var validateSchemaInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
274
322
|
const errors = [];
|
|
275
323
|
try {
|
|
276
324
|
const typedErrors = await validateTypedPayloadInBlock(payload, block, isSchemaPayload);
|
|
277
325
|
for (const typedError of typedErrors) {
|
|
278
|
-
errors.push(new
|
|
326
|
+
errors.push(new InBlockPayloadValidationError9(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
279
327
|
}
|
|
280
328
|
} catch (ex) {
|
|
281
|
-
errors.push(new
|
|
329
|
+
errors.push(new InBlockPayloadValidationError9(block?.[0]?._hash ?? ZERO_HASH12, block, payload, `Failed validateSchemaInBlock: ${ex}`, ex));
|
|
282
330
|
}
|
|
283
331
|
return errors;
|
|
284
332
|
}, "validateSchemaInBlock");
|
|
285
333
|
|
|
334
|
+
// src/elevatedPayload/payloads/validateTimeInBlock.ts
|
|
335
|
+
import { ZERO_HASH as ZERO_HASH13 } from "@xylabs/hex";
|
|
336
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError10, isTimePayload } from "@xyo-network/xl1-protocol";
|
|
337
|
+
var validateTimeInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
338
|
+
const errors = [];
|
|
339
|
+
try {
|
|
340
|
+
const typedErrors = await validateTypedPayloadInBlock(payload, block, isTimePayload);
|
|
341
|
+
for (const typedError of typedErrors) {
|
|
342
|
+
errors.push(new InBlockPayloadValidationError10(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
343
|
+
}
|
|
344
|
+
} catch (ex) {
|
|
345
|
+
errors.push(new InBlockPayloadValidationError10(block?.[0]?._hash ?? ZERO_HASH13, block, payload, `Failed validateTransferInBlock: ${ex}`, ex));
|
|
346
|
+
}
|
|
347
|
+
return errors;
|
|
348
|
+
}, "validateTimeInBlock");
|
|
349
|
+
|
|
286
350
|
// src/elevatedPayload/payloads/validateTransferInBlock.ts
|
|
287
|
-
import { ZERO_HASH as
|
|
288
|
-
import { InBlockPayloadValidationError as
|
|
351
|
+
import { ZERO_HASH as ZERO_HASH14 } from "@xylabs/hex";
|
|
352
|
+
import { InBlockPayloadValidationError as InBlockPayloadValidationError11, isTransfer } from "@xyo-network/xl1-protocol";
|
|
289
353
|
var validateTransferInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
290
354
|
const errors = [];
|
|
291
355
|
try {
|
|
292
356
|
const typedErrors = await validateTypedPayloadInBlock(payload, block, isTransfer);
|
|
293
357
|
for (const typedError of typedErrors) {
|
|
294
|
-
errors.push(new
|
|
358
|
+
errors.push(new InBlockPayloadValidationError11(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
295
359
|
}
|
|
296
360
|
} catch (ex) {
|
|
297
|
-
errors.push(new
|
|
361
|
+
errors.push(new InBlockPayloadValidationError11(block?.[0]?._hash ?? ZERO_HASH14, block, payload, `Failed validateTransferInBlock: ${ex}`, ex));
|
|
298
362
|
}
|
|
299
363
|
return errors;
|
|
300
364
|
}, "validateTransferInBlock");
|
|
@@ -305,7 +369,11 @@ var payloadValidators = {
|
|
|
305
369
|
[TransferSchema]: validateTransferInBlock,
|
|
306
370
|
[SchemaSchema]: validateSchemaInBlock,
|
|
307
371
|
[ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
|
|
308
|
-
[BoundWitnessSchema2]: validateTransactionInBlock
|
|
372
|
+
[BoundWitnessSchema2]: validateTransactionInBlock,
|
|
373
|
+
[TimeSchema]: validateTimeInBlock,
|
|
374
|
+
[BridgeRequestSchema]: validateBridgeRequestInBlock,
|
|
375
|
+
[BridgeCompleteSchema]: validateBridgeCompleteInBlock,
|
|
376
|
+
[BridgeBackSchema]: validateBridgeBackInBlock
|
|
309
377
|
};
|
|
310
378
|
var validatePayloadInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
311
379
|
const errors = [];
|
|
@@ -314,10 +382,10 @@ var validatePayloadInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
|
314
382
|
if (validator) {
|
|
315
383
|
errors.push(...await validator(payload, block));
|
|
316
384
|
} else {
|
|
317
|
-
errors.push(new
|
|
385
|
+
errors.push(new InBlockPayloadValidationError12(block?.[0]?._hash ?? ZERO_HASH15, block, payload, `Unsupported payload schema: ${payload.schema}`));
|
|
318
386
|
}
|
|
319
387
|
} catch (ex) {
|
|
320
|
-
const error = new
|
|
388
|
+
const error = new InBlockPayloadValidationError12(block?.[0]?._hash ?? ZERO_HASH15, block, payload, `validation excepted: ${ex}`);
|
|
321
389
|
error.cause = ex;
|
|
322
390
|
errors.push(error);
|
|
323
391
|
}
|
|
@@ -345,27 +413,27 @@ var PayloadsInBlockValidator = /* @__PURE__ */ __name(async ([block, payloads])
|
|
|
345
413
|
payloads
|
|
346
414
|
]);
|
|
347
415
|
for (const payloadInBlockError of payloadInBlockErrors) {
|
|
348
|
-
errors.push(new HydratedBlockValidationError(block?._hash ??
|
|
416
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH16, [
|
|
349
417
|
block,
|
|
350
418
|
payloads
|
|
351
419
|
], `validatePayloadInBlock error: ${payloadInBlockError}`, payloadInBlockError));
|
|
352
420
|
}
|
|
353
421
|
delete remainingPayloads[hash];
|
|
354
422
|
} else {
|
|
355
|
-
errors.push(new HydratedBlockValidationError(block?._hash ??
|
|
423
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH16, [
|
|
356
424
|
block,
|
|
357
425
|
payloads
|
|
358
426
|
], `missing payload ${hash} ${schema}`));
|
|
359
427
|
}
|
|
360
428
|
}
|
|
361
429
|
if (Object.keys(remainingPayloads).length > 0) {
|
|
362
|
-
errors.push(new HydratedBlockValidationError(block?._hash ??
|
|
430
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH16, [
|
|
363
431
|
block,
|
|
364
432
|
payloads
|
|
365
433
|
], `extra payloads ${Object.keys(payloadMap).join(", ")}`));
|
|
366
434
|
}
|
|
367
435
|
} catch (ex) {
|
|
368
|
-
errors.push(new HydratedBlockValidationError(block?._hash ??
|
|
436
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH16, [
|
|
369
437
|
block,
|
|
370
438
|
payloads
|
|
371
439
|
], `Failed PayloadsInBlockValidator: ${ex}`, ex));
|
|
@@ -391,66 +459,74 @@ var validateHydratedBlock = /* @__PURE__ */ __name(async (hydratedBlock, chainId
|
|
|
391
459
|
];
|
|
392
460
|
errors.push(...(await Promise.all(validators.map((v) => v(hydratedBlock, chainId)))).flat());
|
|
393
461
|
} catch (ex) {
|
|
394
|
-
errors.push(new HydratedBlockValidationError2(hydratedBlock?.[0]?._hash ??
|
|
462
|
+
errors.push(new HydratedBlockValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH17, hydratedBlock, `Failed validateHydratedBlock: ${ex}`, ex));
|
|
395
463
|
}
|
|
396
464
|
return errors;
|
|
397
465
|
}, "validateHydratedBlock");
|
|
398
466
|
|
|
399
467
|
// src/hydratedBlockState/validateHydratedBlockState.ts
|
|
400
|
-
import { ZERO_HASH as
|
|
468
|
+
import { ZERO_HASH as ZERO_HASH19 } from "@xylabs/hex";
|
|
469
|
+
import { spanAsync as spanAsync2 } from "@xylabs/telemetry";
|
|
401
470
|
import { HydratedBlockStateValidationError as HydratedBlockStateValidationError2 } from "@xyo-network/xl1-protocol";
|
|
402
471
|
|
|
403
472
|
// src/hydratedBlockState/validators/RequiredBalance.ts
|
|
404
|
-
import { ZERO_HASH as
|
|
473
|
+
import { ZERO_HASH as ZERO_HASH18 } from "@xylabs/hex";
|
|
474
|
+
import { spanAsync } from "@xylabs/telemetry";
|
|
405
475
|
import { AttoXL1, HydratedBlockStateValidationError, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-protocol";
|
|
406
476
|
import { netBalancesForPayloads } from "@xyo-network/xl1-protocol-sdk";
|
|
407
477
|
var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (block, chainId, services) => {
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
const previous = block[0].previous;
|
|
419
|
-
if (previous === null) return [
|
|
420
|
-
new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH14, chainId, block, "Insufficient funds because first block")
|
|
421
|
-
];
|
|
422
|
-
for (const [address, reqBalance] of Object.entries(requiredBalances)) {
|
|
423
|
-
const result = await services.accountBalance.balances(previous, [
|
|
424
|
-
address
|
|
425
|
-
]);
|
|
426
|
-
const balance = result[address] ?? AttoXL1(0n);
|
|
427
|
-
if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
|
|
428
|
-
errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH14, chainId, block, `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`));
|
|
478
|
+
return await spanAsync("RequiredBalanceBlockStateValidator", async () => {
|
|
479
|
+
const errors = [];
|
|
480
|
+
try {
|
|
481
|
+
const netBalances = netBalancesForPayloads(block[1]);
|
|
482
|
+
const netBalanceAddresses = Object.keys(netBalances);
|
|
483
|
+
const requiredBalances = {};
|
|
484
|
+
for (const address of netBalanceAddresses) {
|
|
485
|
+
if (netBalances[address] < 0n) {
|
|
486
|
+
requiredBalances[address] = -netBalances[address];
|
|
487
|
+
}
|
|
429
488
|
}
|
|
489
|
+
const previous = block[0].previous;
|
|
490
|
+
if (previous === null) return [
|
|
491
|
+
new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH18, chainId, block, "Insufficient funds because first block")
|
|
492
|
+
];
|
|
493
|
+
await spanAsync("RequiredBalanceBlockStateValidator|balancesLoop", async () => {
|
|
494
|
+
for (const [address, reqBalance] of Object.entries(requiredBalances)) {
|
|
495
|
+
const result = await services.accountBalance.balances(previous, [
|
|
496
|
+
address
|
|
497
|
+
]);
|
|
498
|
+
const balance = result[address] ?? AttoXL1(0n);
|
|
499
|
+
if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
|
|
500
|
+
errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH18, chainId, block, `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`));
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
});
|
|
504
|
+
} catch (ex) {
|
|
505
|
+
errors.push(new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH18, chainId, block, `Failed RequiredBalanceBlockStateValidator: ${ex}`, ex));
|
|
430
506
|
}
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
}
|
|
434
|
-
return await Promise.resolve(errors);
|
|
507
|
+
return await Promise.resolve(errors);
|
|
508
|
+
});
|
|
435
509
|
}, "RequiredBalanceBlockStateValidator");
|
|
436
510
|
|
|
437
511
|
// src/hydratedBlockState/validateHydratedBlockState.ts
|
|
438
512
|
var validateHydratedBlockState = /* @__PURE__ */ __name(async (hydratedBlock, chainId, services, additionalValidators = []) => {
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
513
|
+
return await spanAsync2("validateHydratedBlockState", async () => {
|
|
514
|
+
const errors = [];
|
|
515
|
+
try {
|
|
516
|
+
const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId);
|
|
517
|
+
for (const validateHydratedBlockError of validateHydratedBlockErrors) {
|
|
518
|
+
errors.push(new HydratedBlockStateValidationError2(hydratedBlock[0]._hash, chainId, hydratedBlock, `validateBlock error: ${validateHydratedBlockError}`, validateHydratedBlockError));
|
|
519
|
+
}
|
|
520
|
+
const validators = [
|
|
521
|
+
RequiredBalanceBlockStateValidator,
|
|
522
|
+
...additionalValidators
|
|
523
|
+
];
|
|
524
|
+
errors.push(...(await Promise.all(validators.map((v) => v(hydratedBlock, chainId, services)))).flat());
|
|
525
|
+
} catch (ex) {
|
|
526
|
+
errors.push(new HydratedBlockStateValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH19, chainId, hydratedBlock, `Failed validateHydratedBlockState: ${ex}`, ex));
|
|
444
527
|
}
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
...additionalValidators
|
|
448
|
-
];
|
|
449
|
-
errors.push(...(await Promise.all(validators.map((v) => v(hydratedBlock, chainId, services)))).flat());
|
|
450
|
-
} catch (ex) {
|
|
451
|
-
errors.push(new HydratedBlockStateValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH15, chainId, hydratedBlock, `Failed validateHydratedBlockState: ${ex}`, ex));
|
|
452
|
-
}
|
|
453
|
-
return errors;
|
|
528
|
+
return errors;
|
|
529
|
+
});
|
|
454
530
|
}, "validateHydratedBlockState");
|
|
455
531
|
export {
|
|
456
532
|
BlockAllowedPayloadSchemasValidator,
|
|
@@ -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","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/validateBridgeBackInBlock.ts","../../src/elevatedPayload/payloads/validateBridgeCompleteInBlock.ts","../../src/elevatedPayload/payloads/validateBridgeRequestInBlock.ts","../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateHashInBlock.ts","../../src/elevatedPayload/payloads/validateSchemaInBlock.ts","../../src/elevatedPayload/payloads/validateTimeInBlock.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 BridgeBackSchema,\n BridgeCompleteSchema,\n BridgeRequestSchema,\n ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TimeSchema,\n TransferSchema,\n} from '@xyo-network/xl1-protocol'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateBridgeBackInBlock,\n validateBridgeCompleteInBlock,\n validateBridgeRequestInBlock,\n validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTimeInBlock,\n 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 [TimeSchema]: validateTimeInBlock,\n [BridgeRequestSchema]: validateBridgeRequestInBlock,\n [BridgeCompleteSchema]: validateBridgeCompleteInBlock,\n [BridgeBackSchema]: validateBridgeBackInBlock,\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 {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isBridgeBack } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeBackInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeBack)\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 HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isBridgeComplete } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeCompleteInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeComplete)\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 HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-protocol'\nimport { InBlockPayloadValidationError, isBridgeRequest } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeRequestInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeRequest)\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 { 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, isTimePayload } from '@xyo-network/xl1-protocol'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTimeInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isTimePayload)\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 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 { spanAsync } from '@xylabs/telemetry'\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 return await spanAsync('validateHydratedBlockState', async () => {\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}\n","import type { Address } from '@xylabs/hex'\nimport { ZERO_HASH } from '@xylabs/hex'\nimport { spanAsync } from '@xylabs/telemetry'\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 return await spanAsync('RequiredBalanceBlockStateValidator', async () => {\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 await spanAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {\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 })\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}\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","BridgeBackSchema","BridgeCompleteSchema","BridgeRequestSchema","ChainStakeIntentSchema","HashSchema","InBlockPayloadValidationError","TimeSchema","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","isBridgeBack","validateBridgeBackInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeBack","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isBridgeComplete","validateBridgeCompleteInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeComplete","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isBridgeRequest","validateBridgeRequestInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeRequest","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","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","isTimePayload","validateTimeInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isTimePayload","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","TimeSchema","validateTimeInBlock","BridgeRequestSchema","validateBridgeRequestInBlock","BridgeCompleteSchema","validateBridgeCompleteInBlock","BridgeBackSchema","validateBridgeBackInBlock","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","spanAsync","HydratedBlockStateValidationError","ZERO_HASH","spanAsync","AttoXL1","HydratedBlockStateValidationError","XYO_ZERO_ADDRESS","netBalancesForPayloads","RequiredBalanceBlockStateValidator","block","chainId","services","spanAsync","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","spanAsync","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.14.
|
|
4
|
+
"version": "1.14.2",
|
|
5
5
|
"description": "XYO Layer One SDK Validation",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -37,15 +37,16 @@
|
|
|
37
37
|
],
|
|
38
38
|
"dependencies": {
|
|
39
39
|
"@xylabs/hex": "~5.0.11",
|
|
40
|
+
"@xylabs/telemetry": "~5.0.11",
|
|
40
41
|
"@xylabs/typeof": "~5.0.11",
|
|
41
42
|
"@xyo-network/boundwitness-model": "~5.1.0",
|
|
42
|
-
"@xyo-network/chain-protocol": "~1.14.
|
|
43
|
+
"@xyo-network/chain-protocol": "~1.14.2",
|
|
43
44
|
"@xyo-network/payload-model": "~5.1.0",
|
|
44
45
|
"@xyo-network/schema-payload-plugin": "~5.1.0",
|
|
45
|
-
"@xyo-network/xl1-protocol": "~1.
|
|
46
|
-
"@xyo-network/xl1-protocol-sdk": "~1.14.
|
|
47
|
-
"@xyo-network/xl1-schema": "~1.14.
|
|
48
|
-
"@xyo-network/xl1-validation": "~1.14.
|
|
46
|
+
"@xyo-network/xl1-protocol": "~1.12.14",
|
|
47
|
+
"@xyo-network/xl1-protocol-sdk": "~1.14.2",
|
|
48
|
+
"@xyo-network/xl1-schema": "~1.14.2",
|
|
49
|
+
"@xyo-network/xl1-validation": "~1.14.2",
|
|
49
50
|
"ajv": "~8.17.1"
|
|
50
51
|
},
|
|
51
52
|
"devDependencies": {
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
+
export * from './validateBridgeBackInBlock.ts'
|
|
2
|
+
export * from './validateBridgeCompleteInBlock.ts'
|
|
3
|
+
export * from './validateBridgeRequestInBlock.ts'
|
|
1
4
|
export * from './validateChainStakeIntentInBlock.ts'
|
|
2
5
|
export * from './validateHashInBlock.ts'
|
|
3
6
|
export * from './validateSchemaInBlock.ts'
|
|
7
|
+
export * from './validateTimeInBlock.ts'
|
|
4
8
|
export * from './validateTransferInBlock.ts'
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ZERO_HASH } from '@xylabs/hex'
|
|
2
|
+
import type {
|
|
3
|
+
HydratedBlock,
|
|
4
|
+
InBlockPayloadValidationFunction,
|
|
5
|
+
} from '@xyo-network/xl1-protocol'
|
|
6
|
+
import { InBlockPayloadValidationError, isBridgeBack } from '@xyo-network/xl1-protocol'
|
|
7
|
+
|
|
8
|
+
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
9
|
+
|
|
10
|
+
export const validateBridgeBackInBlock: InBlockPayloadValidationFunction = async (
|
|
11
|
+
payload,
|
|
12
|
+
block: HydratedBlock,
|
|
13
|
+
) => {
|
|
14
|
+
const errors: InBlockPayloadValidationError[] = []
|
|
15
|
+
try {
|
|
16
|
+
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeBack)
|
|
17
|
+
for (const typedError of typedErrors) {
|
|
18
|
+
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
19
|
+
}
|
|
20
|
+
} catch (ex) {
|
|
21
|
+
errors.push(new InBlockPayloadValidationError(
|
|
22
|
+
(block?.[0])?._hash ?? ZERO_HASH,
|
|
23
|
+
block,
|
|
24
|
+
payload,
|
|
25
|
+
`Failed validateTransferInBlock: ${ex}`,
|
|
26
|
+
ex,
|
|
27
|
+
))
|
|
28
|
+
}
|
|
29
|
+
return errors
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ZERO_HASH } from '@xylabs/hex'
|
|
2
|
+
import type {
|
|
3
|
+
HydratedBlock,
|
|
4
|
+
InBlockPayloadValidationFunction,
|
|
5
|
+
} from '@xyo-network/xl1-protocol'
|
|
6
|
+
import { InBlockPayloadValidationError, isBridgeComplete } from '@xyo-network/xl1-protocol'
|
|
7
|
+
|
|
8
|
+
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
9
|
+
|
|
10
|
+
export const validateBridgeCompleteInBlock: InBlockPayloadValidationFunction = async (
|
|
11
|
+
payload,
|
|
12
|
+
block: HydratedBlock,
|
|
13
|
+
) => {
|
|
14
|
+
const errors: InBlockPayloadValidationError[] = []
|
|
15
|
+
try {
|
|
16
|
+
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeComplete)
|
|
17
|
+
for (const typedError of typedErrors) {
|
|
18
|
+
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
19
|
+
}
|
|
20
|
+
} catch (ex) {
|
|
21
|
+
errors.push(new InBlockPayloadValidationError(
|
|
22
|
+
(block?.[0])?._hash ?? ZERO_HASH,
|
|
23
|
+
block,
|
|
24
|
+
payload,
|
|
25
|
+
`Failed validateTransferInBlock: ${ex}`,
|
|
26
|
+
ex,
|
|
27
|
+
))
|
|
28
|
+
}
|
|
29
|
+
return errors
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ZERO_HASH } from '@xylabs/hex'
|
|
2
|
+
import type {
|
|
3
|
+
HydratedBlock,
|
|
4
|
+
InBlockPayloadValidationFunction,
|
|
5
|
+
} from '@xyo-network/xl1-protocol'
|
|
6
|
+
import { InBlockPayloadValidationError, isBridgeRequest } from '@xyo-network/xl1-protocol'
|
|
7
|
+
|
|
8
|
+
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
9
|
+
|
|
10
|
+
export const validateBridgeRequestInBlock: InBlockPayloadValidationFunction = async (
|
|
11
|
+
payload,
|
|
12
|
+
block: HydratedBlock,
|
|
13
|
+
) => {
|
|
14
|
+
const errors: InBlockPayloadValidationError[] = []
|
|
15
|
+
try {
|
|
16
|
+
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeRequest)
|
|
17
|
+
for (const typedError of typedErrors) {
|
|
18
|
+
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
19
|
+
}
|
|
20
|
+
} catch (ex) {
|
|
21
|
+
errors.push(new InBlockPayloadValidationError(
|
|
22
|
+
(block?.[0])?._hash ?? ZERO_HASH,
|
|
23
|
+
block,
|
|
24
|
+
payload,
|
|
25
|
+
`Failed validateTransferInBlock: ${ex}`,
|
|
26
|
+
ex,
|
|
27
|
+
))
|
|
28
|
+
}
|
|
29
|
+
return errors
|
|
30
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { ZERO_HASH } from '@xylabs/hex'
|
|
2
|
+
import type {
|
|
3
|
+
HydratedBlock,
|
|
4
|
+
InBlockPayloadValidationFunction,
|
|
5
|
+
} from '@xyo-network/xl1-protocol'
|
|
6
|
+
import { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-protocol'
|
|
7
|
+
|
|
8
|
+
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
9
|
+
|
|
10
|
+
export const validateTimeInBlock: InBlockPayloadValidationFunction = async (
|
|
11
|
+
payload,
|
|
12
|
+
block: HydratedBlock,
|
|
13
|
+
) => {
|
|
14
|
+
const errors: InBlockPayloadValidationError[] = []
|
|
15
|
+
try {
|
|
16
|
+
const typedErrors = await validateTypedPayloadInBlock(payload, block, isTimePayload)
|
|
17
|
+
for (const typedError of typedErrors) {
|
|
18
|
+
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
19
|
+
}
|
|
20
|
+
} catch (ex) {
|
|
21
|
+
errors.push(new InBlockPayloadValidationError(
|
|
22
|
+
(block?.[0])?._hash ?? ZERO_HASH,
|
|
23
|
+
block,
|
|
24
|
+
payload,
|
|
25
|
+
`Failed validateTransferInBlock: ${ex}`,
|
|
26
|
+
ex,
|
|
27
|
+
))
|
|
28
|
+
}
|
|
29
|
+
return errors
|
|
30
|
+
}
|
|
@@ -7,13 +7,21 @@ import type {
|
|
|
7
7
|
InBlockPayloadValidationFunction,
|
|
8
8
|
} from '@xyo-network/xl1-protocol'
|
|
9
9
|
import {
|
|
10
|
+
BridgeBackSchema,
|
|
11
|
+
BridgeCompleteSchema,
|
|
12
|
+
BridgeRequestSchema,
|
|
10
13
|
ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,
|
|
14
|
+
TimeSchema,
|
|
11
15
|
TransferSchema,
|
|
12
16
|
} from '@xyo-network/xl1-protocol'
|
|
13
17
|
|
|
14
18
|
import { validateTransactionInBlock } from './lib/index.ts'
|
|
15
19
|
import {
|
|
16
|
-
|
|
20
|
+
validateBridgeBackInBlock,
|
|
21
|
+
validateBridgeCompleteInBlock,
|
|
22
|
+
validateBridgeRequestInBlock,
|
|
23
|
+
validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTimeInBlock,
|
|
24
|
+
validateTransferInBlock,
|
|
17
25
|
} from './payloads/index.ts'
|
|
18
26
|
|
|
19
27
|
const payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {
|
|
@@ -22,6 +30,10 @@ const payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction
|
|
|
22
30
|
[SchemaSchema]: validateSchemaInBlock,
|
|
23
31
|
[ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
|
|
24
32
|
[BoundWitnessSchema]: validateTransactionInBlock,
|
|
33
|
+
[TimeSchema]: validateTimeInBlock,
|
|
34
|
+
[BridgeRequestSchema]: validateBridgeRequestInBlock,
|
|
35
|
+
[BridgeCompleteSchema]: validateBridgeCompleteInBlock,
|
|
36
|
+
[BridgeBackSchema]: validateBridgeBackInBlock,
|
|
25
37
|
}
|
|
26
38
|
|
|
27
39
|
export const validatePayloadInBlock: InBlockPayloadValidationFunction = async (
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { ZERO_HASH } from '@xylabs/hex'
|
|
2
|
+
import { spanAsync } from '@xylabs/telemetry'
|
|
2
3
|
import type {
|
|
3
4
|
AccountBalanceServiceV2, Chain, HydratedBlock,
|
|
4
5
|
HydratedBlockStateValidationFunctionV2,
|
|
@@ -14,31 +15,33 @@ export const validateHydratedBlockState: HydratedBlockStateValidationFunctionV2
|
|
|
14
15
|
services: { accountBalance: AccountBalanceServiceV2 },
|
|
15
16
|
additionalValidators: HydratedBlockStateValidationFunctionV2[] = [],
|
|
16
17
|
) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
18
|
+
return await spanAsync('validateHydratedBlockState', async () => {
|
|
19
|
+
const errors: HydratedBlockStateValidationError[] = []
|
|
20
|
+
try {
|
|
21
|
+
const validateHydratedBlockErrors = await validateHydratedBlock(hydratedBlock, chainId)
|
|
22
|
+
for (const validateHydratedBlockError of validateHydratedBlockErrors) {
|
|
23
|
+
errors.push(new HydratedBlockStateValidationError(
|
|
24
|
+
hydratedBlock[0]._hash,
|
|
25
|
+
chainId,
|
|
26
|
+
hydratedBlock,
|
|
27
|
+
`validateBlock error: ${validateHydratedBlockError}`,
|
|
28
|
+
validateHydratedBlockError,
|
|
29
|
+
))
|
|
30
|
+
}
|
|
31
|
+
const validators: HydratedBlockStateValidationFunctionV2[] = [
|
|
32
|
+
RequiredBalanceBlockStateValidator,
|
|
33
|
+
...additionalValidators,
|
|
34
|
+
]
|
|
35
|
+
errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())
|
|
36
|
+
} catch (ex) {
|
|
21
37
|
errors.push(new HydratedBlockStateValidationError(
|
|
22
|
-
hydratedBlock[0]
|
|
38
|
+
hydratedBlock?.[0]?._hash ?? ZERO_HASH,
|
|
23
39
|
chainId,
|
|
24
40
|
hydratedBlock,
|
|
25
|
-
`
|
|
26
|
-
|
|
41
|
+
`Failed validateHydratedBlockState: ${ex}`,
|
|
42
|
+
ex,
|
|
27
43
|
))
|
|
28
44
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
...additionalValidators,
|
|
32
|
-
]
|
|
33
|
-
errors.push(...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, services)))).flat())
|
|
34
|
-
} catch (ex) {
|
|
35
|
-
errors.push(new HydratedBlockStateValidationError(
|
|
36
|
-
hydratedBlock?.[0]?._hash ?? ZERO_HASH,
|
|
37
|
-
chainId,
|
|
38
|
-
hydratedBlock,
|
|
39
|
-
`Failed validateHydratedBlockState: ${ex}`,
|
|
40
|
-
ex,
|
|
41
|
-
))
|
|
42
|
-
}
|
|
43
|
-
return errors
|
|
45
|
+
return errors
|
|
46
|
+
})
|
|
44
47
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Address } from '@xylabs/hex'
|
|
2
2
|
import { ZERO_HASH } from '@xylabs/hex'
|
|
3
|
+
import { spanAsync } from '@xylabs/telemetry'
|
|
3
4
|
import type {
|
|
4
5
|
AccountBalanceServiceV2, Chain, HydratedBlock,
|
|
5
6
|
HydratedBlockStateValidationFunctionV2,
|
|
@@ -14,46 +15,49 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
|
|
|
14
15
|
chainId: Chain,
|
|
15
16
|
services: { accountBalance: AccountBalanceServiceV2 },
|
|
16
17
|
) => {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
return await spanAsync('RequiredBalanceBlockStateValidator', async () => {
|
|
19
|
+
const errors: HydratedBlockStateValidationError[] = []
|
|
20
|
+
try {
|
|
21
|
+
// TODO: Filter by non-producer elevated payloads
|
|
20
22
|
// to allow for transfers from ZERO address
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
23
|
+
const netBalances = netBalancesForPayloads(block[1])
|
|
24
|
+
const netBalanceAddresses = Object.keys(netBalances) as Address[]
|
|
25
|
+
const requiredBalances: Record<Address, bigint> = {}
|
|
26
|
+
for (const address of netBalanceAddresses) {
|
|
27
|
+
if (netBalances[address] < 0n) {
|
|
28
|
+
requiredBalances[address] = -netBalances[address]
|
|
29
|
+
}
|
|
27
30
|
}
|
|
31
|
+
const previous = block[0].previous
|
|
32
|
+
if (previous === null) return [new HydratedBlockStateValidationError(
|
|
33
|
+
block?.[0]?._hash ?? ZERO_HASH,
|
|
34
|
+
chainId,
|
|
35
|
+
block,
|
|
36
|
+
'Insufficient funds because first block',
|
|
37
|
+
)]
|
|
38
|
+
await spanAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {
|
|
39
|
+
for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {
|
|
40
|
+
const result = await services.accountBalance.balances(previous, [address])
|
|
41
|
+
const balance = result[address] ?? AttoXL1(0n)
|
|
42
|
+
if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
|
|
43
|
+
errors.push(new HydratedBlockStateValidationError(
|
|
44
|
+
block?.[0]?._hash ?? ZERO_HASH,
|
|
45
|
+
chainId,
|
|
46
|
+
block,
|
|
47
|
+
`insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,
|
|
48
|
+
))
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
} catch (ex) {
|
|
53
|
+
errors.push(new HydratedBlockStateValidationError(
|
|
54
|
+
block?.[0]?._hash ?? ZERO_HASH,
|
|
55
|
+
chainId,
|
|
56
|
+
block,
|
|
57
|
+
`Failed RequiredBalanceBlockStateValidator: ${ex}`,
|
|
58
|
+
ex,
|
|
59
|
+
))
|
|
28
60
|
}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
block?.[0]?._hash ?? ZERO_HASH,
|
|
32
|
-
chainId,
|
|
33
|
-
block,
|
|
34
|
-
'Insufficient funds because first block',
|
|
35
|
-
)]
|
|
36
|
-
|
|
37
|
-
for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {
|
|
38
|
-
const result = await services.accountBalance.balances(previous, [address])
|
|
39
|
-
const balance = result[address] ?? AttoXL1(0n)
|
|
40
|
-
if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
|
|
41
|
-
errors.push(new HydratedBlockStateValidationError(
|
|
42
|
-
block?.[0]?._hash ?? ZERO_HASH,
|
|
43
|
-
chainId,
|
|
44
|
-
block,
|
|
45
|
-
`insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,
|
|
46
|
-
))
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
} catch (ex) {
|
|
50
|
-
errors.push(new HydratedBlockStateValidationError(
|
|
51
|
-
block?.[0]?._hash ?? ZERO_HASH,
|
|
52
|
-
chainId,
|
|
53
|
-
block,
|
|
54
|
-
`Failed RequiredBalanceBlockStateValidator: ${ex}`,
|
|
55
|
-
ex,
|
|
56
|
-
))
|
|
57
|
-
}
|
|
58
|
-
return await Promise.resolve(errors)
|
|
61
|
+
return await Promise.resolve(errors)
|
|
62
|
+
})
|
|
59
63
|
}
|