@xyo-network/chain-validation 1.19.6 → 1.19.8
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/lib/validateElevatedFromBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/lib/validateElevatedFromTransaction.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts +2 -2
- package/dist/neutral/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeIntentInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateHashInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateSchemaInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateTimeInBlock.d.ts.map +1 -1
- package/dist/neutral/elevatedPayload/payloads/validateTransferInBlock.d.ts.map +1 -1
- 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 +37 -34
- package/dist/neutral/index.mjs.map +1 -1
- package/package.json +6 -6
- package/src/elevatedPayload/lib/validateElevatedFromBlock.ts +3 -2
- package/src/elevatedPayload/lib/validateElevatedFromTransaction.ts +3 -2
- package/src/elevatedPayload/lib/validateTransactionInBlock.ts +4 -3
- package/src/elevatedPayload/lib/validateTypedPayloadInBlock.ts +4 -3
- package/src/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts +4 -6
- package/src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts +2 -1
- package/src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts +2 -1
- package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +2 -1
- package/src/elevatedPayload/payloads/validateHashInBlock.ts +2 -1
- package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +2 -1
- package/src/elevatedPayload/payloads/validateTimeInBlock.ts +3 -2
- package/src/elevatedPayload/payloads/validateTransferInBlock.ts +2 -1
- package/src/elevatedPayload/validatePayloadInBlock.ts +2 -1
- package/src/hydratedBlock/validators/Payloads.ts +1 -1
- package/src/hydratedBlockState/validateHydratedBlockState.ts +5 -9
- package/src/hydratedBlockState/validators/RequiredBalance.ts +3 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateElevatedFromBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/lib/validateElevatedFromBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"validateElevatedFromBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/lib/validateElevatedFromBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAG5E,eAAO,MAAM,yBAAyB,EAAE,gCAqBvC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateElevatedFromTransaction.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/lib/validateElevatedFromTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"validateElevatedFromTransaction.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/lib/validateElevatedFromTransaction.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAG5E,eAAO,MAAM,+BAA+B,EAAE,gCA0B7C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateTransactionInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/lib/validateTransactionInBlock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"validateTransactionInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/lib/validateTransactionInBlock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,0BAA0B,EAAE,gCAmCxC,CAAA"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { IdentityFunction } from '@xylabs/sdk-js';
|
|
2
2
|
import type { Payload } from '@xyo-network/payload-model';
|
|
3
|
-
import type { HydratedBlockWithHashMeta } from '@xyo-network/xl1-sdk';
|
|
4
|
-
export declare const validateTypedPayloadInBlock: <T extends Payload>(payload: Payload, block: HydratedBlockWithHashMeta, identityFunction: IdentityFunction<T>) => Promise<Error[]>;
|
|
3
|
+
import type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext } from '@xyo-network/xl1-sdk';
|
|
4
|
+
export declare const validateTypedPayloadInBlock: <T extends Payload>(context: InBlockPayloadValidationFunctionContext, payload: Payload, block: HydratedBlockWithHashMeta, identityFunction: IdentityFunction<T>) => Promise<Error[]>;
|
|
5
5
|
//# sourceMappingURL=validateTypedPayloadInBlock.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateTypedPayloadInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/lib/validateTypedPayloadInBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"validateTypedPayloadInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/lib/validateTypedPayloadInBlock.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AACtD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAEzD,OAAO,KAAK,EAAE,yBAAyB,EAAE,uCAAuC,EAAE,MAAM,sBAAsB,CAAA;AAM9G,eAAO,MAAM,2BAA2B,GAAU,CAAC,SAAS,OAAO,EACjE,SAAS,uCAAuC,EAChD,SAAS,OAAO,EAChB,OAAO,yBAAyB,EAChC,kBAAkB,gBAAgB,CAAC,CAAC,CAAC,KACpC,OAAO,CAAC,KAAK,EAAE,CAgBjB,CAAA"}
|
package/dist/neutral/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateBridgeDestinationObservationInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"validateBridgeDestinationObservationInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,2CAA2C,EAAE,gCAqBzD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateBridgeIntentInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,2BAA2B,EAAE,
|
|
1
|
+
{"version":3,"file":"validateBridgeIntentInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,2BAA2B,EAAE,gCAqBzC,CAAA"}
|
package/dist/neutral/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateBridgeSourceObservationInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,sCAAsC,EAAE,
|
|
1
|
+
{"version":3,"file":"validateBridgeSourceObservationInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,sCAAsC,EAAE,gCAqBpD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateChainStakeIntentInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,+BAA+B,EAAE,
|
|
1
|
+
{"version":3,"file":"validateChainStakeIntentInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,+BAA+B,EAAE,gCAqB7C,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateHashInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateHashInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"validateHashInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateHashInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,mBAAmB,EAAE,gCAqBjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateSchemaInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateSchemaInBlock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,qBAAqB,EAAE,
|
|
1
|
+
{"version":3,"file":"validateSchemaInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateSchemaInBlock.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,qBAAqB,EAAE,gCAqBnC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateTimeInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateTimeInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,mBAAmB,EAAE,
|
|
1
|
+
{"version":3,"file":"validateTimeInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateTimeInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,mBAAmB,EAAE,gCAqBjC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateTransferInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateTransferInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,uBAAuB,EAAE,
|
|
1
|
+
{"version":3,"file":"validateTransferInBlock.d.ts","sourceRoot":"","sources":["../../../../src/elevatedPayload/payloads/validateTransferInBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAK5E,eAAO,MAAM,uBAAuB,EAAE,gCAqBrC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validatePayloadInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validatePayloadInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAwB5E,eAAO,MAAM,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"validatePayloadInBlock.d.ts","sourceRoot":"","sources":["../../../src/elevatedPayload/validatePayloadInBlock.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gCAAgC,EAAE,MAAM,sBAAsB,CAAA;AAwB5E,eAAO,MAAM,sBAAsB,EAAE,gCAwBpC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"validateHydratedBlockState.d.ts","sourceRoot":"","sources":["../../../src/hydratedBlockState/validateHydratedBlockState.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAW,oCAAoC,EAAE,MAAM,sBAAsB,CAAA;AAMzF,eAAO,MAAM,0BAA0B,EAAE,oCAoCxC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlockState/validators/RequiredBalance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"RequiredBalance.d.ts","sourceRoot":"","sources":["../../../../src/hydratedBlockState/validators/RequiredBalance.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAW,oCAAoC,EAAE,MAAM,sBAAsB,CAAA;AAKzF,eAAO,MAAM,kCAAkC,EAAE,oCAmDhD,CAAA"}
|
package/dist/neutral/index.mjs
CHANGED
|
@@ -152,7 +152,7 @@ var isElevatedFromBlock = /* @__PURE__ */ __name((payload, [, payloads]) => {
|
|
|
152
152
|
|
|
153
153
|
// src/elevatedPayload/lib/validateElevatedFromBlock.ts
|
|
154
154
|
import { InBlockPayloadValidationError, transactionsFromHydratedBlock } from "@xyo-network/xl1-sdk";
|
|
155
|
-
var validateElevatedFromBlock = /* @__PURE__ */ __name((payload, block) => {
|
|
155
|
+
var validateElevatedFromBlock = /* @__PURE__ */ __name((context, payload, block) => {
|
|
156
156
|
const errors = [];
|
|
157
157
|
try {
|
|
158
158
|
const txs = transactionsFromHydratedBlock(block);
|
|
@@ -168,7 +168,7 @@ var validateElevatedFromBlock = /* @__PURE__ */ __name((payload, block) => {
|
|
|
168
168
|
|
|
169
169
|
// src/elevatedPayload/lib/validateElevatedFromTransaction.ts
|
|
170
170
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError2, transactionsFromHydratedBlock as transactionsFromHydratedBlock2 } from "@xyo-network/xl1-sdk";
|
|
171
|
-
var validateElevatedFromTransaction = /* @__PURE__ */ __name((payload, block) => {
|
|
171
|
+
var validateElevatedFromTransaction = /* @__PURE__ */ __name((context, payload, block) => {
|
|
172
172
|
const errors = [];
|
|
173
173
|
try {
|
|
174
174
|
const txs = transactionsFromHydratedBlock2(block);
|
|
@@ -190,11 +190,14 @@ var validateElevatedFromTransaction = /* @__PURE__ */ __name((payload, block) =>
|
|
|
190
190
|
import { ZERO_HASH as ZERO_HASH6 } from "@xylabs/sdk-js";
|
|
191
191
|
import { isStorageMeta } from "@xyo-network/payload-model";
|
|
192
192
|
import { BoundWitnessSignaturesValidator as BoundWitnessSignaturesValidator2, InBlockPayloadValidationError as InBlockPayloadValidationError3, isTransactionBoundWitness as isTransactionBoundWitness2, validateTransaction } from "@xyo-network/xl1-sdk";
|
|
193
|
-
var validateTransactionInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
193
|
+
var validateTransactionInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
194
194
|
const errors = [];
|
|
195
195
|
try {
|
|
196
196
|
if (isTransactionBoundWitness2(payload) && isStorageMeta(payload)) {
|
|
197
|
-
const txErrors = await validateTransaction(
|
|
197
|
+
const txErrors = await validateTransaction({
|
|
198
|
+
...context,
|
|
199
|
+
chainId: block[0].chain
|
|
200
|
+
}, [
|
|
198
201
|
payload,
|
|
199
202
|
block[1]
|
|
200
203
|
]);
|
|
@@ -216,14 +219,14 @@ var validateTransactionInBlock = /* @__PURE__ */ __name(async (payload, block) =
|
|
|
216
219
|
|
|
217
220
|
// src/elevatedPayload/lib/validateTypedPayloadInBlock.ts
|
|
218
221
|
import { isStorageMeta as isStorageMeta2 } from "@xyo-network/payload-model";
|
|
219
|
-
var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (payload, block, identityFunction) => {
|
|
222
|
+
var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (context, payload, block, identityFunction) => {
|
|
220
223
|
const errors = [];
|
|
221
224
|
try {
|
|
222
225
|
if (identityFunction(payload) && isStorageMeta2(payload)) {
|
|
223
226
|
if (isElevatedFromBlock(payload, block)) {
|
|
224
|
-
errors.push(...await validateElevatedFromBlock(payload, block));
|
|
227
|
+
errors.push(...await validateElevatedFromBlock(context, payload, block));
|
|
225
228
|
} else {
|
|
226
|
-
errors.push(...await validateElevatedFromTransaction(payload, block));
|
|
229
|
+
errors.push(...await validateElevatedFromTransaction(context, payload, block));
|
|
227
230
|
}
|
|
228
231
|
} else {
|
|
229
232
|
errors.push(new Error("Payload failed identityFunction or isElevated or isStorageMeta"));
|
|
@@ -237,10 +240,10 @@ var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (payload, block,
|
|
|
237
240
|
// src/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts
|
|
238
241
|
import { ZERO_HASH as ZERO_HASH7 } from "@xylabs/sdk-js";
|
|
239
242
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError4, isBridgeDestinationObservation } from "@xyo-network/xl1-sdk";
|
|
240
|
-
var validateBridgeDestinationObservationInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
243
|
+
var validateBridgeDestinationObservationInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
241
244
|
const errors = [];
|
|
242
245
|
try {
|
|
243
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeDestinationObservation);
|
|
246
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation);
|
|
244
247
|
for (const typedError of typedErrors) {
|
|
245
248
|
errors.push(new InBlockPayloadValidationError4(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
246
249
|
}
|
|
@@ -253,10 +256,10 @@ var validateBridgeDestinationObservationInBlock = /* @__PURE__ */ __name(async (
|
|
|
253
256
|
// src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts
|
|
254
257
|
import { ZERO_HASH as ZERO_HASH8 } from "@xylabs/sdk-js";
|
|
255
258
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError5, isBridgeIntent } from "@xyo-network/xl1-sdk";
|
|
256
|
-
var validateBridgeIntentInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
259
|
+
var validateBridgeIntentInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
257
260
|
const errors = [];
|
|
258
261
|
try {
|
|
259
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeIntent);
|
|
262
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent);
|
|
260
263
|
for (const typedError of typedErrors) {
|
|
261
264
|
errors.push(new InBlockPayloadValidationError5(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
262
265
|
}
|
|
@@ -269,10 +272,10 @@ var validateBridgeIntentInBlock = /* @__PURE__ */ __name(async (payload, block)
|
|
|
269
272
|
// src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts
|
|
270
273
|
import { ZERO_HASH as ZERO_HASH9 } from "@xylabs/sdk-js";
|
|
271
274
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError6, isBridgeSourceObservation } from "@xyo-network/xl1-sdk";
|
|
272
|
-
var validateBridgeSourceObservationInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
275
|
+
var validateBridgeSourceObservationInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
273
276
|
const errors = [];
|
|
274
277
|
try {
|
|
275
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeSourceObservation);
|
|
278
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation);
|
|
276
279
|
for (const typedError of typedErrors) {
|
|
277
280
|
errors.push(new InBlockPayloadValidationError6(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
278
281
|
}
|
|
@@ -285,10 +288,10 @@ var validateBridgeSourceObservationInBlock = /* @__PURE__ */ __name(async (paylo
|
|
|
285
288
|
// src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts
|
|
286
289
|
import { ZERO_HASH as ZERO_HASH10 } from "@xylabs/sdk-js";
|
|
287
290
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError7, isChainStakeIntent } from "@xyo-network/xl1-sdk";
|
|
288
|
-
var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
291
|
+
var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
289
292
|
const errors = [];
|
|
290
293
|
try {
|
|
291
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isChainStakeIntent);
|
|
294
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isChainStakeIntent);
|
|
292
295
|
for (const typedError of typedErrors) {
|
|
293
296
|
errors.push(new InBlockPayloadValidationError7(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
294
297
|
}
|
|
@@ -301,10 +304,10 @@ var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (payload, blo
|
|
|
301
304
|
// src/elevatedPayload/payloads/validateHashInBlock.ts
|
|
302
305
|
import { ZERO_HASH as ZERO_HASH11 } from "@xylabs/sdk-js";
|
|
303
306
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError8, isHashPayload } from "@xyo-network/xl1-sdk";
|
|
304
|
-
var validateHashInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
307
|
+
var validateHashInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
305
308
|
const errors = [];
|
|
306
309
|
try {
|
|
307
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isHashPayload);
|
|
310
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isHashPayload);
|
|
308
311
|
for (const typedError of typedErrors) {
|
|
309
312
|
errors.push(new InBlockPayloadValidationError8(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
310
313
|
}
|
|
@@ -318,10 +321,10 @@ var validateHashInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
|
318
321
|
import { ZERO_HASH as ZERO_HASH12 } from "@xylabs/sdk-js";
|
|
319
322
|
import { isSchemaPayload } from "@xyo-network/schema-payload-plugin";
|
|
320
323
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError9 } from "@xyo-network/xl1-sdk";
|
|
321
|
-
var validateSchemaInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
324
|
+
var validateSchemaInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
322
325
|
const errors = [];
|
|
323
326
|
try {
|
|
324
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isSchemaPayload);
|
|
327
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isSchemaPayload);
|
|
325
328
|
for (const typedError of typedErrors) {
|
|
326
329
|
errors.push(new InBlockPayloadValidationError9(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
327
330
|
}
|
|
@@ -334,15 +337,15 @@ var validateSchemaInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
|
334
337
|
// src/elevatedPayload/payloads/validateTimeInBlock.ts
|
|
335
338
|
import { ZERO_HASH as ZERO_HASH13 } from "@xylabs/sdk-js";
|
|
336
339
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError10, isTimePayload } from "@xyo-network/xl1-sdk";
|
|
337
|
-
var validateTimeInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
340
|
+
var validateTimeInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
338
341
|
const errors = [];
|
|
339
342
|
try {
|
|
340
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isTimePayload);
|
|
343
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload);
|
|
341
344
|
for (const typedError of typedErrors) {
|
|
342
345
|
errors.push(new InBlockPayloadValidationError10(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
343
346
|
}
|
|
344
347
|
} catch (ex) {
|
|
345
|
-
errors.push(new InBlockPayloadValidationError10(block?.[0]?._hash ?? ZERO_HASH13, block, payload, `Failed
|
|
348
|
+
errors.push(new InBlockPayloadValidationError10(block?.[0]?._hash ?? ZERO_HASH13, block, payload, `Failed validateTimeInBlock: ${ex}`, ex));
|
|
346
349
|
}
|
|
347
350
|
return errors;
|
|
348
351
|
}, "validateTimeInBlock");
|
|
@@ -350,10 +353,10 @@ var validateTimeInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
|
350
353
|
// src/elevatedPayload/payloads/validateTransferInBlock.ts
|
|
351
354
|
import { ZERO_HASH as ZERO_HASH14 } from "@xylabs/sdk-js";
|
|
352
355
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError11, isTransfer } from "@xyo-network/xl1-sdk";
|
|
353
|
-
var validateTransferInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
356
|
+
var validateTransferInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
354
357
|
const errors = [];
|
|
355
358
|
try {
|
|
356
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isTransfer);
|
|
359
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTransfer);
|
|
357
360
|
for (const typedError of typedErrors) {
|
|
358
361
|
errors.push(new InBlockPayloadValidationError11(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
359
362
|
}
|
|
@@ -375,12 +378,12 @@ var payloadValidators = {
|
|
|
375
378
|
[TimeSchema]: validateTimeInBlock,
|
|
376
379
|
[TransferSchema]: validateTransferInBlock
|
|
377
380
|
};
|
|
378
|
-
var validatePayloadInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
381
|
+
var validatePayloadInBlock = /* @__PURE__ */ __name(async (context, payload, block) => {
|
|
379
382
|
const errors = [];
|
|
380
383
|
try {
|
|
381
384
|
const validator = payloadValidators[payload.schema];
|
|
382
385
|
if (validator) {
|
|
383
|
-
errors.push(...await validator(payload, block));
|
|
386
|
+
errors.push(...await validator(context, payload, block));
|
|
384
387
|
} else {
|
|
385
388
|
errors.push(new InBlockPayloadValidationError12(block?.[0]?._hash ?? ZERO_HASH15, block, payload, `Unsupported payload schema: ${payload.schema}`));
|
|
386
389
|
}
|
|
@@ -408,7 +411,7 @@ var PayloadsInBlockValidator = /* @__PURE__ */ __name(async (context, [block, pa
|
|
|
408
411
|
const schema = block.payload_schemas[i];
|
|
409
412
|
const payload = payloadMap[hash];
|
|
410
413
|
if (payload) {
|
|
411
|
-
const payloadInBlockErrors = await validatePayloadInBlock(payload, [
|
|
414
|
+
const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [
|
|
412
415
|
block,
|
|
413
416
|
payloads
|
|
414
417
|
]);
|
|
@@ -471,7 +474,7 @@ import { HydratedBlockStateValidationError as HydratedBlockStateValidationError2
|
|
|
471
474
|
// src/hydratedBlockState/validators/RequiredBalance.ts
|
|
472
475
|
import { spanRootAsync, ZERO_HASH as ZERO_HASH18 } from "@xylabs/sdk-js";
|
|
473
476
|
import { AttoXL1, HydratedBlockStateValidationError, netBalancesForPayloads, XYO_ZERO_ADDRESS } from "@xyo-network/xl1-sdk";
|
|
474
|
-
var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context, block
|
|
477
|
+
var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context, block) => {
|
|
475
478
|
return await spanRootAsync("RequiredBalanceBlockStateValidator", async () => {
|
|
476
479
|
const errors = [];
|
|
477
480
|
let chainId = "00";
|
|
@@ -488,10 +491,10 @@ var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context,
|
|
|
488
491
|
if (previous === null) return [
|
|
489
492
|
new HydratedBlockStateValidationError(block?.[0]?._hash ?? ZERO_HASH18, "00", block, "Insufficient funds because first block")
|
|
490
493
|
];
|
|
491
|
-
chainId = await chainIdAtBlockNumber(block[0].block);
|
|
494
|
+
chainId = await context.chainIdAtBlockNumber(block[0].block);
|
|
492
495
|
await spanRootAsync("RequiredBalanceBlockStateValidator|balancesLoop", async () => {
|
|
493
496
|
for (const [address, reqBalance] of Object.entries(requiredBalances)) {
|
|
494
|
-
const result = await
|
|
497
|
+
const result = await context.accountBalance.accountBalances([
|
|
495
498
|
address
|
|
496
499
|
], {
|
|
497
500
|
head: previous
|
|
@@ -510,13 +513,13 @@ var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context,
|
|
|
510
513
|
}, "RequiredBalanceBlockStateValidator");
|
|
511
514
|
|
|
512
515
|
// src/hydratedBlockState/validateHydratedBlockState.ts
|
|
513
|
-
var validateHydratedBlockState = /* @__PURE__ */ __name(async (context, hydratedBlock,
|
|
516
|
+
var validateHydratedBlockState = /* @__PURE__ */ __name(async (context, hydratedBlock, additionalValidators = []) => {
|
|
514
517
|
return await spanRootAsync2("validateHydratedBlockState", async () => {
|
|
515
518
|
const errors = [];
|
|
516
519
|
let chainId;
|
|
517
520
|
try {
|
|
518
|
-
chainId = await chainIdAtBlockNumber(hydratedBlock[0].block);
|
|
519
|
-
const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, chainIdAtBlockNumber);
|
|
521
|
+
chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block);
|
|
522
|
+
const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber);
|
|
520
523
|
for (const validateHydratedBlockError of validateHydratedBlockErrors) {
|
|
521
524
|
errors.push(new HydratedBlockStateValidationError2(hydratedBlock[0]._hash, chainId, hydratedBlock, `validateBlock error: ${validateHydratedBlockError}`, validateHydratedBlockError));
|
|
522
525
|
}
|
|
@@ -524,7 +527,7 @@ var validateHydratedBlockState = /* @__PURE__ */ __name(async (context, hydrated
|
|
|
524
527
|
RequiredBalanceBlockStateValidator,
|
|
525
528
|
...additionalValidators
|
|
526
529
|
];
|
|
527
|
-
errors.push(...(await Promise.all(validators.map((v) => v(context, hydratedBlock
|
|
530
|
+
errors.push(...(await Promise.all(validators.map((v) => v(context, hydratedBlock)))).flat());
|
|
528
531
|
} catch (ex) {
|
|
529
532
|
errors.push(new HydratedBlockStateValidationError2(hydratedBlock?.[0]?._hash ?? ZERO_HASH19, chainId ?? "00", hydratedBlock, `Failed validateHydratedBlockState: ${ex}`, ex));
|
|
530
533
|
}
|
|
@@ -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/validateBridgeDestinationObservationInBlock.ts","../../src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError, BoundWitnessSignaturesValidator } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\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(context, 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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport {\n BlockValidationError,\n isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-sdk'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n context,\n block,\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/sdk-js'\nimport { isDefined, ZERO_HASH } from '@xylabs/sdk-js'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BaseContext, BlockBoundWitness, BlockValidatorFunction,\n} from '@xyo-network/xl1-sdk'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError } from '@xyo-network/xl1-sdk'\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 context: BaseContext,\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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n BaseContext,\n BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n context: BaseContext,\n hydratedBlock: HydratedBlockWithHashMeta,\n chainIdAtBlockNumber?: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(\n context,\n hydratedBlock[0],\n chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,\n additionalBlockValidators,\n )\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(context, hydratedBlock, chainIdAtBlockNumber)))).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/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n context,\n [block, payloads],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashMeta<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/sdk-js'\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 { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, BridgeIntentSchema, BridgeSourceObservationSchema, ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TimeSchema, TransferSchema,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateBridgeDestinationObservationInBlock, validateBridgeIntentInBlock, validateBridgeSourceObservationInBlock, validateChainStakeIntentInBlock,\n validateHashInBlock, validateSchemaInBlock, validateTimeInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [BoundWitnessSchema]: validateTransactionInBlock,\n [BridgeDestinationObservationSchema]: validateBridgeDestinationObservationInBlock,\n [BridgeIntentSchema]: validateBridgeIntentInBlock,\n [BridgeSourceObservationSchema]: validateBridgeSourceObservationInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [HashSchema]: validateHashInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [TimeSchema]: validateTimeInBlock,\n [TransferSchema]: validateTransferInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block,\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-sdk'\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 { HydratedBlockWithHashMeta, InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlockWithHashMeta,\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-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-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/sdk-js'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BoundWitnessSignaturesValidator, InBlockPayloadValidationError, isTransactionBoundWitness, validateTransaction,\n} from '@xyo-network/xl1-sdk'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlockWithHashMeta,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {\n const txErrors = await validateTransaction([payload, block[1]])\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `TransactionValidation error: ${txError}`,\n txError,\n ))\n }\n const txSignatureErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txSignatureError of txSignatureErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `BoundWitnessSignaturesValidator error: ${txSignatureError}`,\n txSignatureError,\n ))\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 '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlockWithHashMeta } from '@xyo-network/xl1-sdk'\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: HydratedBlockWithHashMeta,\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/sdk-js'\nimport type {\n HydratedBlockWithHashMeta,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeDestinationObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeDestinationObservationInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlockWithHashMeta,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeDestinationObservation)\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 validateBridgeObservationInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeIntent)\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 validateBridgeIntentInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeSourceObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeSourceObservationInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeSourceObservation)\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 validateBridgeObservationInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block,\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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block,\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/sdk-js'\nimport { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block,\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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTimeInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block,\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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block,\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 { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n BaseContext, ChainId, HydratedBlockStateValidationFunction,\n} from '@xyo-network/xl1-sdk'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n context: BaseContext,\n hydratedBlock,\n chainIdAtBlockNumber,\n services,\n additionalValidators = [],\n) => {\n return await spanRootAsync('validateHydratedBlockState', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId: ChainId | undefined\n try {\n chainId = await chainIdAtBlockNumber(hydratedBlock[0].block)\n const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, chainIdAtBlockNumber)\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: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(context, hydratedBlock, chainIdAtBlockNumber, services)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId ?? '00' as ChainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n AccountBalanceViewer, ChainId, HydratedBlockStateValidationFunction,\n} from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1, HydratedBlockStateValidationError, netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n context,\n block,\n chainIdAtBlockNumber,\n services: { accountBalance: AccountBalanceViewer },\n) => {\n return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId = '00' as ChainId\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 '00' as ChainId,\n block,\n 'Insufficient funds because first block',\n )]\n chainId = await chainIdAtBlockNumber(block[0].block)\n await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const result = await services.accountBalance.accountBalances([address], { head: previous })\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 }, context)\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 }, context)\n}\n"],"mappings":"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","names":["ZERO_HASH","BlockValidationError","BoundWitnessSignaturesValidator","ZERO_HASH","BlockValidationError","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","context","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","BlockValidationError","_hash","ZERO_HASH","ex","isDefined","ZERO_HASH","BoundWitnessSchema","BlockValidationError","BlockFieldsValidator","context","block","chainId","errors","isDefined","chain","toLowerCase","push","BlockValidationError","_hash","ZERO_HASH","txHashes","i","payload_hashes","length","payload_schemas","BoundWitnessSchema","Set","size","ex","ZERO_HASH","BlockBoundWitnessWithStorageMetaJsonSchema","BlockValidationError","Ajv","BlockJsonSchemaValidator","jsonSchema","BlockBoundWitnessWithStorageMetaJsonSchema","ajv","Ajv","allErrors","strict","validate","compile","context","block","errors","length","error","BlockValidationError","_hash","ZERO_HASH","errorsText","separator","cause","push","ex","isHash","ZERO_HASH","BlockValidationError","BlockPreviousHashValidator","context","block","errors","blockNumber","isHash","previous","push","BlockValidationError","_hash","ZERO_HASH","ex","error","cause","validateBlock","context","block","chainId","additionalValidators","errors","bwErrors","BoundWitnessSignaturesValidator","bwError","push","BlockValidationError","_hash","ZERO_HASH","validators","BlockFieldsValidator","BlockPreviousHashValidator","BlockAllowedPayloadSchemasValidator","Promise","all","map","validator","flat","ex","ZERO_HASH","BoundWitnessReferencesValidator","HydratedBlockValidationError","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","BoundWitnessSchema","SchemaSchema","BridgeDestinationObservationSchema","BridgeIntentSchema","BridgeSourceObservationSchema","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","BoundWitnessSignaturesValidator","InBlockPayloadValidationError","isTransactionBoundWitness","validateTransaction","validateTransactionInBlock","payload","block","errors","isTransactionBoundWitness","isStorageMeta","txErrors","validateTransaction","txError","push","InBlockPayloadValidationError","_hash","txSignatureErrors","BoundWitnessSignaturesValidator","txSignatureError","ex","ZERO_HASH","isStorageMeta","validateTypedPayloadInBlock","payload","block","identityFunction","errors","isStorageMeta","isElevatedFromBlock","push","validateElevatedFromBlock","validateElevatedFromTransaction","Error","ex","ZERO_HASH","InBlockPayloadValidationError","isBridgeDestinationObservation","validateBridgeDestinationObservationInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeDestinationObservation","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isBridgeIntent","validateBridgeIntentInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeIntent","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isBridgeSourceObservation","validateBridgeSourceObservationInBlock","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeSourceObservation","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","BoundWitnessSchema","validateTransactionInBlock","BridgeDestinationObservationSchema","validateBridgeDestinationObservationInBlock","BridgeIntentSchema","validateBridgeIntentInBlock","BridgeSourceObservationSchema","validateBridgeSourceObservationInBlock","ChainStakeIntentSchema","validateChainStakeIntentInBlock","HashSchema","validateHashInBlock","SchemaSchema","validateSchemaInBlock","TimeSchema","validateTimeInBlock","TransferSchema","validateTransferInBlock","validatePayloadInBlock","payload","block","errors","validator","schema","push","InBlockPayloadValidationError","_hash","ZERO_HASH","ex","error","cause","PayloadsInBlockValidator","context","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","context","hydratedBlock","chainIdAtBlockNumber","additionalValidators","additionalBlockValidators","errors","validateBlockErrors","validateBlock","block","undefined","validateBlockError","push","HydratedBlockValidationError","_hash","bwRefErrors","BoundWitnessReferencesValidator","bwRefError","validators","PayloadsInBlockValidator","Promise","all","map","v","flat","ex","ZERO_HASH","spanRootAsync","ZERO_HASH","HydratedBlockStateValidationError","spanRootAsync","ZERO_HASH","AttoXL1","HydratedBlockStateValidationError","netBalancesForPayloads","XYO_ZERO_ADDRESS","RequiredBalanceBlockStateValidator","context","block","chainIdAtBlockNumber","services","spanRootAsync","errors","chainId","netBalances","netBalancesForPayloads","netBalanceAddresses","Object","keys","requiredBalances","address","previous","HydratedBlockStateValidationError","_hash","ZERO_HASH","reqBalance","entries","result","accountBalance","accountBalances","head","balance","AttoXL1","XYO_ZERO_ADDRESS","push","ex","Promise","resolve","validateHydratedBlockState","context","hydratedBlock","chainIdAtBlockNumber","services","additionalValidators","spanRootAsync","errors","chainId","block","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/validateBridgeDestinationObservationInBlock.ts","../../src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError, BoundWitnessSignaturesValidator } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock = async (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\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(context, 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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport {\n BlockValidationError,\n isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-sdk'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n context,\n block,\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/sdk-js'\nimport { isDefined, ZERO_HASH } from '@xylabs/sdk-js'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n context: BaseContext,\n block: BlockBoundWitness,\n chainId?: ChainId,\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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type {\n BaseContext, BlockBoundWitness, BlockValidatorFunction,\n} from '@xyo-network/xl1-sdk'\nimport { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError } from '@xyo-network/xl1-sdk'\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 context: BaseContext,\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/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/payload-model'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n context,\n block,\n) => {\n const errors: BlockValidationError[] = []\n try {\n const blockNumber = block.block\n if (blockNumber > 0n) {\n // if this is not the first block, validate previous hashes\n if (!isHash(block.previous)) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash is missing or invalid'))\n }\n } else if (blockNumber === 0) {\n // if this is the first block, validate previous hashes\n if (block.previous !== null) {\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, 'invalid block number'))\n }\n } catch (ex) {\n const error = new BlockValidationError(\n (block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH,\n block,\n `Failed BlockPreviousHashValidator: ${ex}`,\n )\n error.cause = ex\n errors.push(error)\n }\n return errors\n}\n","import type { Promisable } from '@xylabs/sdk-js'\nimport { ZERO_HASH } from '@xylabs/sdk-js'\nimport type {\n BaseContext,\n BlockValidatorFunction, ChainId, HydratedBlockValidationFunction, HydratedBlockWithHashMeta,\n XL1BlockNumber,\n} from '@xyo-network/xl1-sdk'\nimport { BoundWitnessReferencesValidator, HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateBlock } from '../block/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock = async (\n context: BaseContext,\n hydratedBlock: HydratedBlockWithHashMeta,\n chainIdAtBlockNumber?: (blockNumber: XL1BlockNumber) => Promisable<ChainId>,\n additionalValidators: HydratedBlockValidationFunction[] = [],\n additionalBlockValidators: BlockValidatorFunction[] = [],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const validateBlockErrors = await validateBlock(\n context,\n hydratedBlock[0],\n chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : undefined,\n additionalBlockValidators,\n )\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(context, hydratedBlock, chainIdAtBlockNumber)))).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/sdk-js'\nimport type { Payload, WithHashMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlockValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/index.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (\n context,\n [block, payloads],\n) => {\n const errors: HydratedBlockValidationError[] = []\n try {\n const payloadMap: Partial<Record<Hash, WithHashMeta<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(context, 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/sdk-js'\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 { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BridgeDestinationObservationSchema, BridgeIntentSchema, BridgeSourceObservationSchema, ChainStakeIntentSchema, HashSchema, InBlockPayloadValidationError,\n TimeSchema, TransferSchema,\n} from '@xyo-network/xl1-sdk'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateBridgeDestinationObservationInBlock, validateBridgeIntentInBlock, validateBridgeSourceObservationInBlock, validateChainStakeIntentInBlock,\n validateHashInBlock, validateSchemaInBlock, validateTimeInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction>> = {\n [BoundWitnessSchema]: validateTransactionInBlock,\n [BridgeDestinationObservationSchema]: validateBridgeDestinationObservationInBlock,\n [BridgeIntentSchema]: validateBridgeIntentInBlock,\n [BridgeSourceObservationSchema]: validateBridgeSourceObservationInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [HashSchema]: validateHashInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [TimeSchema]: validateTimeInBlock,\n [TransferSchema]: validateTransferInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...await validator(context, 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-sdk'\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 { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\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 { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n context,\n payload,\n block,\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/sdk-js'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n BoundWitnessSignaturesValidator, InBlockPayloadValidationError, isTransactionBoundWitness, validateTransaction,\n} from '@xyo-network/xl1-sdk'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n): Promise<InBlockPayloadValidationError[]> => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {\n const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, block[1]])\n for (const txError of txErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `TransactionValidation error: ${txError}`,\n txError,\n ))\n }\n const txSignatureErrors = await BoundWitnessSignaturesValidator(payload)\n for (const txSignatureError of txSignatureErrors) {\n errors.push(new InBlockPayloadValidationError(\n payload._hash,\n block,\n payload,\n `BoundWitnessSignaturesValidator error: ${txSignatureError}`,\n txSignatureError,\n ))\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 '@xylabs/sdk-js'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext } from '@xyo-network/xl1-sdk'\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 context: InBlockPayloadValidationFunctionContext,\n payload: Payload,\n block: HydratedBlockWithHashMeta,\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(context, payload, block))\n } else {\n errors.push(...await validateElevatedFromTransaction(context, 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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeDestinationObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeDestinationObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation)\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 validateBridgeObservationInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent)\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 validateBridgeIntentInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isBridgeSourceObservation } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateBridgeSourceObservationInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation)\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 validateBridgeObservationInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: (InBlockPayloadValidationError)[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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/sdk-js'\nimport { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTimeInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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 validateTimeInBlock: ${ex}`,\n ex,\n ))\n }\n return errors\n}\n","import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'\nimport { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-sdk'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n context,\n payload,\n block,\n) => {\n const errors: InBlockPayloadValidationError[] = []\n try {\n const typedErrors = await validateTypedPayloadInBlock(context, 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 { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n context,\n hydratedBlock,\n additionalValidators = [],\n) => {\n return await spanRootAsync('validateHydratedBlockState', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId: ChainId | undefined\n try {\n chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block)\n const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber)\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: HydratedBlockStateValidationFunction[] = [\n RequiredBalanceBlockStateValidator,\n ...additionalValidators,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(context, hydratedBlock)))).flat())\n } catch (ex) {\n errors.push(new HydratedBlockStateValidationError(\n hydratedBlock?.[0]?._hash ?? ZERO_HASH,\n chainId ?? '00' as ChainId,\n hydratedBlock,\n `Failed validateHydratedBlockState: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n","import type { Address } from '@xylabs/sdk-js'\nimport { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1, HydratedBlockStateValidationError, netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n context,\n block,\n) => {\n return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {\n const errors: HydratedBlockStateValidationError[] = []\n let chainId = '00' as ChainId\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 '00' as ChainId,\n block,\n 'Insufficient funds because first block',\n )]\n chainId = await context.chainIdAtBlockNumber(block[0].block)\n await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const result = await context.accountBalance.accountBalances([address], { head: previous })\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 }, context)\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 }, context)\n}\n"],"mappings":"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","names":["ZERO_HASH","BlockValidationError","BoundWitnessSignaturesValidator","ZERO_HASH","BlockValidationError","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","context","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","BlockValidationError","_hash","ZERO_HASH","ex","isDefined","ZERO_HASH","BoundWitnessSchema","BlockValidationError","BlockFieldsValidator","context","block","chainId","errors","isDefined","chain","toLowerCase","push","BlockValidationError","_hash","ZERO_HASH","txHashes","i","payload_hashes","length","payload_schemas","BoundWitnessSchema","Set","size","ex","ZERO_HASH","BlockBoundWitnessWithStorageMetaJsonSchema","BlockValidationError","Ajv","BlockJsonSchemaValidator","jsonSchema","BlockBoundWitnessWithStorageMetaJsonSchema","ajv","Ajv","allErrors","strict","validate","compile","context","block","errors","length","error","BlockValidationError","_hash","ZERO_HASH","errorsText","separator","cause","push","ex","isHash","ZERO_HASH","BlockValidationError","BlockPreviousHashValidator","context","block","errors","blockNumber","isHash","previous","push","BlockValidationError","_hash","ZERO_HASH","ex","error","cause","validateBlock","context","block","chainId","additionalValidators","errors","bwErrors","BoundWitnessSignaturesValidator","bwError","push","BlockValidationError","_hash","ZERO_HASH","validators","BlockFieldsValidator","BlockPreviousHashValidator","BlockAllowedPayloadSchemasValidator","Promise","all","map","validator","flat","ex","ZERO_HASH","BoundWitnessReferencesValidator","HydratedBlockValidationError","ZERO_HASH","HydratedBlockValidationError","ZERO_HASH","BoundWitnessSchema","SchemaSchema","BridgeDestinationObservationSchema","BridgeIntentSchema","BridgeSourceObservationSchema","ChainStakeIntentSchema","HashSchema","InBlockPayloadValidationError","TimeSchema","TransferSchema","isTransactionBoundWitness","isElevatedFromBlock","payload","payloads","txs","filter","p","isTransactionBoundWitness","tx","payload_hashes","includes","_hash","InBlockPayloadValidationError","transactionsFromHydratedBlock","validateElevatedFromBlock","context","payload","block","errors","txs","transactionsFromHydratedBlock","allTxPayloadHashes","Set","flatMap","tx","payload_hashes","has","_hash","push","InBlockPayloadValidationError","schema","ex","InBlockPayloadValidationError","transactionsFromHydratedBlock","validateElevatedFromTransaction","context","payload","block","errors","txs","transactionsFromHydratedBlock","length","hashes","flatMap","tx","payload_hashes","includes","_hash","push","InBlockPayloadValidationError","ex","ZERO_HASH","isStorageMeta","BoundWitnessSignaturesValidator","InBlockPayloadValidationError","isTransactionBoundWitness","validateTransaction","validateTransactionInBlock","context","payload","block","errors","isTransactionBoundWitness","isStorageMeta","txErrors","validateTransaction","chainId","chain","txError","push","InBlockPayloadValidationError","_hash","txSignatureErrors","BoundWitnessSignaturesValidator","txSignatureError","ex","ZERO_HASH","isStorageMeta","validateTypedPayloadInBlock","context","payload","block","identityFunction","errors","isStorageMeta","isElevatedFromBlock","push","validateElevatedFromBlock","validateElevatedFromTransaction","Error","ex","ZERO_HASH","InBlockPayloadValidationError","isBridgeDestinationObservation","validateBridgeDestinationObservationInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeDestinationObservation","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isBridgeIntent","validateBridgeIntentInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeIntent","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isBridgeSourceObservation","validateBridgeSourceObservationInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isBridgeSourceObservation","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isChainStakeIntent","validateChainStakeIntentInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isChainStakeIntent","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isHashPayload","validateHashInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isHashPayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","isSchemaPayload","InBlockPayloadValidationError","validateSchemaInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isSchemaPayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isTimePayload","validateTimeInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isTimePayload","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","ZERO_HASH","InBlockPayloadValidationError","isTransfer","validateTransferInBlock","context","payload","block","errors","typedErrors","validateTypedPayloadInBlock","isTransfer","typedError","push","InBlockPayloadValidationError","_hash","ex","ZERO_HASH","payloadValidators","BoundWitnessSchema","validateTransactionInBlock","BridgeDestinationObservationSchema","validateBridgeDestinationObservationInBlock","BridgeIntentSchema","validateBridgeIntentInBlock","BridgeSourceObservationSchema","validateBridgeSourceObservationInBlock","ChainStakeIntentSchema","validateChainStakeIntentInBlock","HashSchema","validateHashInBlock","SchemaSchema","validateSchemaInBlock","TimeSchema","validateTimeInBlock","TransferSchema","validateTransferInBlock","validatePayloadInBlock","context","payload","block","errors","validator","schema","push","InBlockPayloadValidationError","_hash","ZERO_HASH","ex","error","cause","PayloadsInBlockValidator","context","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","context","hydratedBlock","chainIdAtBlockNumber","additionalValidators","additionalBlockValidators","errors","validateBlockErrors","validateBlock","block","undefined","validateBlockError","push","HydratedBlockValidationError","_hash","bwRefErrors","BoundWitnessReferencesValidator","bwRefError","validators","PayloadsInBlockValidator","Promise","all","map","v","flat","ex","ZERO_HASH","spanRootAsync","ZERO_HASH","HydratedBlockStateValidationError","spanRootAsync","ZERO_HASH","AttoXL1","HydratedBlockStateValidationError","netBalancesForPayloads","XYO_ZERO_ADDRESS","RequiredBalanceBlockStateValidator","context","block","spanRootAsync","errors","chainId","netBalances","netBalancesForPayloads","netBalanceAddresses","Object","keys","requiredBalances","address","previous","HydratedBlockStateValidationError","_hash","ZERO_HASH","chainIdAtBlockNumber","reqBalance","entries","result","accountBalance","accountBalances","head","balance","AttoXL1","XYO_ZERO_ADDRESS","push","ex","Promise","resolve","validateHydratedBlockState","context","hydratedBlock","additionalValidators","spanRootAsync","errors","chainId","chainIdAtBlockNumber","block","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.19.
|
|
4
|
+
"version": "1.19.8",
|
|
5
5
|
"description": "XYO Layer One SDK Validation",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -39,23 +39,23 @@
|
|
|
39
39
|
"!**/*.test.*"
|
|
40
40
|
],
|
|
41
41
|
"dependencies": {
|
|
42
|
-
"@xylabs/sdk-js": "~5.0.
|
|
42
|
+
"@xylabs/sdk-js": "~5.0.78",
|
|
43
43
|
"@xyo-network/boundwitness-model": "~5.3.2",
|
|
44
44
|
"@xyo-network/payload-model": "~5.3.2",
|
|
45
45
|
"@xyo-network/schema-payload-plugin": "~5.3.2",
|
|
46
|
-
"@xyo-network/xl1-sdk": "~1.
|
|
46
|
+
"@xyo-network/xl1-sdk": "~1.23.6",
|
|
47
47
|
"ajv": "~8.17.1"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
|
-
"@types/node": "~25.
|
|
51
|
-
"@xylabs/sdk-js": "~5.0.
|
|
50
|
+
"@types/node": "~25.2.3",
|
|
51
|
+
"@xylabs/sdk-js": "~5.0.78",
|
|
52
52
|
"@xylabs/ts-scripts-yarn3": "~7.3.2",
|
|
53
53
|
"@xylabs/tsconfig": "~7.3.2",
|
|
54
54
|
"@xyo-network/account": "~5.3.2",
|
|
55
55
|
"@xyo-network/account-model": "~5.3.2",
|
|
56
56
|
"@xyo-network/archivist-memory": "~5.3.2",
|
|
57
57
|
"@xyo-network/archivist-model": "~5.3.2",
|
|
58
|
-
"@xyo-network/chain-protocol": "~1.19.
|
|
58
|
+
"@xyo-network/chain-protocol": "~1.19.8",
|
|
59
59
|
"@xyo-network/wallet": "~5.3.2",
|
|
60
60
|
"eslint": "^9.39.2",
|
|
61
61
|
"typescript": "~5.9.3",
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'
|
|
2
2
|
import { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'
|
|
3
3
|
|
|
4
4
|
export const validateElevatedFromBlock: InBlockPayloadValidationFunction = (
|
|
5
|
+
context,
|
|
5
6
|
payload,
|
|
6
|
-
block
|
|
7
|
+
block,
|
|
7
8
|
) => {
|
|
8
9
|
const errors: InBlockPayloadValidationError[] = []
|
|
9
10
|
try {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'
|
|
2
2
|
import { InBlockPayloadValidationError, transactionsFromHydratedBlock } from '@xyo-network/xl1-sdk'
|
|
3
3
|
|
|
4
4
|
export const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (
|
|
5
|
+
context,
|
|
5
6
|
payload,
|
|
6
|
-
block
|
|
7
|
+
block,
|
|
7
8
|
) => {
|
|
8
9
|
const errors: InBlockPayloadValidationError[] = []
|
|
9
10
|
try {
|
|
@@ -1,18 +1,19 @@
|
|
|
1
1
|
import { ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
2
|
import { isStorageMeta } from '@xyo-network/payload-model'
|
|
3
|
-
import type {
|
|
3
|
+
import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'
|
|
4
4
|
import {
|
|
5
5
|
BoundWitnessSignaturesValidator, InBlockPayloadValidationError, isTransactionBoundWitness, validateTransaction,
|
|
6
6
|
} from '@xyo-network/xl1-sdk'
|
|
7
7
|
|
|
8
8
|
export const validateTransactionInBlock: InBlockPayloadValidationFunction = async (
|
|
9
|
+
context,
|
|
9
10
|
payload,
|
|
10
|
-
block
|
|
11
|
+
block,
|
|
11
12
|
): Promise<InBlockPayloadValidationError[]> => {
|
|
12
13
|
const errors: InBlockPayloadValidationError[] = []
|
|
13
14
|
try {
|
|
14
15
|
if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {
|
|
15
|
-
const txErrors = await validateTransaction([payload, block[1]])
|
|
16
|
+
const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, block[1]])
|
|
16
17
|
for (const txError of txErrors) {
|
|
17
18
|
errors.push(new InBlockPayloadValidationError(
|
|
18
19
|
payload._hash,
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import type { IdentityFunction } from '@xylabs/sdk-js'
|
|
2
2
|
import type { Payload } from '@xyo-network/payload-model'
|
|
3
3
|
import { isStorageMeta } from '@xyo-network/payload-model'
|
|
4
|
-
import type { HydratedBlockWithHashMeta } from '@xyo-network/xl1-sdk'
|
|
4
|
+
import type { HydratedBlockWithHashMeta, InBlockPayloadValidationFunctionContext } from '@xyo-network/xl1-sdk'
|
|
5
5
|
|
|
6
6
|
import { isElevatedFromBlock } from './isElevatedFromBlock.ts'
|
|
7
7
|
import { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'
|
|
8
8
|
import { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'
|
|
9
9
|
|
|
10
10
|
export const validateTypedPayloadInBlock = async <T extends Payload>(
|
|
11
|
+
context: InBlockPayloadValidationFunctionContext,
|
|
11
12
|
payload: Payload,
|
|
12
13
|
block: HydratedBlockWithHashMeta,
|
|
13
14
|
identityFunction: IdentityFunction<T>,
|
|
@@ -16,9 +17,9 @@ export const validateTypedPayloadInBlock = async <T extends Payload>(
|
|
|
16
17
|
try {
|
|
17
18
|
if (identityFunction(payload) && isStorageMeta(payload)) {
|
|
18
19
|
if (isElevatedFromBlock(payload, block)) {
|
|
19
|
-
errors.push(...await validateElevatedFromBlock(payload, block))
|
|
20
|
+
errors.push(...await validateElevatedFromBlock(context, payload, block))
|
|
20
21
|
} else {
|
|
21
|
-
errors.push(...await validateElevatedFromTransaction(payload, block))
|
|
22
|
+
errors.push(...await validateElevatedFromTransaction(context, payload, block))
|
|
22
23
|
}
|
|
23
24
|
} else {
|
|
24
25
|
errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))
|
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
|
-
import type {
|
|
3
|
-
HydratedBlockWithHashMeta,
|
|
4
|
-
InBlockPayloadValidationFunction,
|
|
5
|
-
} from '@xyo-network/xl1-sdk'
|
|
2
|
+
import type { InBlockPayloadValidationFunction } from '@xyo-network/xl1-sdk'
|
|
6
3
|
import { InBlockPayloadValidationError, isBridgeDestinationObservation } from '@xyo-network/xl1-sdk'
|
|
7
4
|
|
|
8
5
|
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
9
6
|
|
|
10
7
|
export const validateBridgeDestinationObservationInBlock: InBlockPayloadValidationFunction = async (
|
|
8
|
+
context,
|
|
11
9
|
payload,
|
|
12
|
-
block
|
|
10
|
+
block,
|
|
13
11
|
) => {
|
|
14
12
|
const errors: InBlockPayloadValidationError[] = []
|
|
15
13
|
try {
|
|
16
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeDestinationObservation)
|
|
14
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation)
|
|
17
15
|
for (const typedError of typedErrors) {
|
|
18
16
|
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
19
17
|
}
|
|
@@ -5,12 +5,13 @@ import { InBlockPayloadValidationError, isBridgeIntent } from '@xyo-network/xl1-
|
|
|
5
5
|
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
6
6
|
|
|
7
7
|
export const validateBridgeIntentInBlock: InBlockPayloadValidationFunction = async (
|
|
8
|
+
context,
|
|
8
9
|
payload,
|
|
9
10
|
block,
|
|
10
11
|
) => {
|
|
11
12
|
const errors: InBlockPayloadValidationError[] = []
|
|
12
13
|
try {
|
|
13
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeIntent)
|
|
14
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent)
|
|
14
15
|
for (const typedError of typedErrors) {
|
|
15
16
|
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
16
17
|
}
|
|
@@ -5,12 +5,13 @@ import { InBlockPayloadValidationError, isBridgeSourceObservation } from '@xyo-n
|
|
|
5
5
|
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
6
6
|
|
|
7
7
|
export const validateBridgeSourceObservationInBlock: InBlockPayloadValidationFunction = async (
|
|
8
|
+
context,
|
|
8
9
|
payload,
|
|
9
10
|
block,
|
|
10
11
|
) => {
|
|
11
12
|
const errors: InBlockPayloadValidationError[] = []
|
|
12
13
|
try {
|
|
13
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isBridgeSourceObservation)
|
|
14
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation)
|
|
14
15
|
for (const typedError of typedErrors) {
|
|
15
16
|
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
16
17
|
}
|
|
@@ -5,12 +5,13 @@ import { InBlockPayloadValidationError, isChainStakeIntent } from '@xyo-network/
|
|
|
5
5
|
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
6
6
|
|
|
7
7
|
export const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (
|
|
8
|
+
context,
|
|
8
9
|
payload,
|
|
9
10
|
block,
|
|
10
11
|
) => {
|
|
11
12
|
const errors: InBlockPayloadValidationError[] = []
|
|
12
13
|
try {
|
|
13
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isChainStakeIntent)
|
|
14
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isChainStakeIntent)
|
|
14
15
|
for (const typedError of typedErrors) {
|
|
15
16
|
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
16
17
|
}
|
|
@@ -5,12 +5,13 @@ import { InBlockPayloadValidationError, isHashPayload } from '@xyo-network/xl1-s
|
|
|
5
5
|
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
6
6
|
|
|
7
7
|
export const validateHashInBlock: InBlockPayloadValidationFunction = async (
|
|
8
|
+
context,
|
|
8
9
|
payload,
|
|
9
10
|
block,
|
|
10
11
|
) => {
|
|
11
12
|
const errors: (InBlockPayloadValidationError)[] = []
|
|
12
13
|
try {
|
|
13
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isHashPayload)
|
|
14
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isHashPayload)
|
|
14
15
|
for (const typedError of typedErrors) {
|
|
15
16
|
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
16
17
|
}
|
|
@@ -6,12 +6,13 @@ import { InBlockPayloadValidationError } from '@xyo-network/xl1-sdk'
|
|
|
6
6
|
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
7
7
|
|
|
8
8
|
export const validateSchemaInBlock: InBlockPayloadValidationFunction = async (
|
|
9
|
+
context,
|
|
9
10
|
payload,
|
|
10
11
|
block,
|
|
11
12
|
) => {
|
|
12
13
|
const errors: InBlockPayloadValidationError[] = []
|
|
13
14
|
try {
|
|
14
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isSchemaPayload)
|
|
15
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isSchemaPayload)
|
|
15
16
|
for (const typedError of typedErrors) {
|
|
16
17
|
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
17
18
|
}
|
|
@@ -5,12 +5,13 @@ import { InBlockPayloadValidationError, isTimePayload } from '@xyo-network/xl1-s
|
|
|
5
5
|
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
6
6
|
|
|
7
7
|
export const validateTimeInBlock: InBlockPayloadValidationFunction = async (
|
|
8
|
+
context,
|
|
8
9
|
payload,
|
|
9
10
|
block,
|
|
10
11
|
) => {
|
|
11
12
|
const errors: InBlockPayloadValidationError[] = []
|
|
12
13
|
try {
|
|
13
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isTimePayload)
|
|
14
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload)
|
|
14
15
|
for (const typedError of typedErrors) {
|
|
15
16
|
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
16
17
|
}
|
|
@@ -19,7 +20,7 @@ export const validateTimeInBlock: InBlockPayloadValidationFunction = async (
|
|
|
19
20
|
(block?.[0])?._hash ?? ZERO_HASH,
|
|
20
21
|
block,
|
|
21
22
|
payload,
|
|
22
|
-
`Failed
|
|
23
|
+
`Failed validateTimeInBlock: ${ex}`,
|
|
23
24
|
ex,
|
|
24
25
|
))
|
|
25
26
|
}
|
|
@@ -5,12 +5,13 @@ import { InBlockPayloadValidationError, isTransfer } from '@xyo-network/xl1-sdk'
|
|
|
5
5
|
import { validateTypedPayloadInBlock } from '../lib/index.ts'
|
|
6
6
|
|
|
7
7
|
export const validateTransferInBlock: InBlockPayloadValidationFunction = async (
|
|
8
|
+
context,
|
|
8
9
|
payload,
|
|
9
10
|
block,
|
|
10
11
|
) => {
|
|
11
12
|
const errors: InBlockPayloadValidationError[] = []
|
|
12
13
|
try {
|
|
13
|
-
const typedErrors = await validateTypedPayloadInBlock(payload, block, isTransfer)
|
|
14
|
+
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTransfer)
|
|
14
15
|
for (const typedError of typedErrors) {
|
|
15
16
|
errors.push(new InBlockPayloadValidationError(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError))
|
|
16
17
|
}
|
|
@@ -27,6 +27,7 @@ const payloadValidators: Partial<Record<Schema, InBlockPayloadValidationFunction
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
export const validatePayloadInBlock: InBlockPayloadValidationFunction = async (
|
|
30
|
+
context,
|
|
30
31
|
payload,
|
|
31
32
|
block,
|
|
32
33
|
): Promise<InBlockPayloadValidationError[]> => {
|
|
@@ -34,7 +35,7 @@ export const validatePayloadInBlock: InBlockPayloadValidationFunction = async (
|
|
|
34
35
|
try {
|
|
35
36
|
const validator = payloadValidators[payload.schema]
|
|
36
37
|
if (validator) {
|
|
37
|
-
errors.push(...await validator(payload, block))
|
|
38
|
+
errors.push(...await validator(context, payload, block))
|
|
38
39
|
} else {
|
|
39
40
|
errors.push(new InBlockPayloadValidationError((block?.[0])?._hash ?? ZERO_HASH, block, payload, `Unsupported payload schema: ${payload.schema}`))
|
|
40
41
|
}
|
|
@@ -23,7 +23,7 @@ export const PayloadsInBlockValidator: HydratedBlockValidationFunction = async (
|
|
|
23
23
|
const schema = block.payload_schemas[i]
|
|
24
24
|
const payload = payloadMap[hash]
|
|
25
25
|
if (payload) {
|
|
26
|
-
const payloadInBlockErrors = await validatePayloadInBlock(payload, [block, payloads])
|
|
26
|
+
const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [block, payloads])
|
|
27
27
|
for (const payloadInBlockError of payloadInBlockErrors) {
|
|
28
28
|
errors.push(new HydratedBlockValidationError(
|
|
29
29
|
block?._hash ?? ZERO_HASH,
|
|
@@ -1,25 +1,21 @@
|
|
|
1
1
|
import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'
|
|
2
|
-
import type {
|
|
3
|
-
BaseContext, ChainId, HydratedBlockStateValidationFunction,
|
|
4
|
-
} from '@xyo-network/xl1-sdk'
|
|
2
|
+
import type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'
|
|
5
3
|
import { HydratedBlockStateValidationError } from '@xyo-network/xl1-sdk'
|
|
6
4
|
|
|
7
5
|
import { validateHydratedBlock } from '../hydratedBlock/index.ts'
|
|
8
6
|
import { RequiredBalanceBlockStateValidator } from './validators/index.ts'
|
|
9
7
|
|
|
10
8
|
export const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (
|
|
11
|
-
context
|
|
9
|
+
context,
|
|
12
10
|
hydratedBlock,
|
|
13
|
-
chainIdAtBlockNumber,
|
|
14
|
-
services,
|
|
15
11
|
additionalValidators = [],
|
|
16
12
|
) => {
|
|
17
13
|
return await spanRootAsync('validateHydratedBlockState', async () => {
|
|
18
14
|
const errors: HydratedBlockStateValidationError[] = []
|
|
19
15
|
let chainId: ChainId | undefined
|
|
20
16
|
try {
|
|
21
|
-
chainId = await chainIdAtBlockNumber(hydratedBlock[0].block)
|
|
22
|
-
const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, chainIdAtBlockNumber)
|
|
17
|
+
chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block)
|
|
18
|
+
const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber)
|
|
23
19
|
for (const validateHydratedBlockError of validateHydratedBlockErrors) {
|
|
24
20
|
errors.push(new HydratedBlockStateValidationError(
|
|
25
21
|
hydratedBlock[0]._hash,
|
|
@@ -33,7 +29,7 @@ export const validateHydratedBlockState: HydratedBlockStateValidationFunction =
|
|
|
33
29
|
RequiredBalanceBlockStateValidator,
|
|
34
30
|
...additionalValidators,
|
|
35
31
|
]
|
|
36
|
-
errors.push(...(await Promise.all(validators.map(v => v(context, hydratedBlock
|
|
32
|
+
errors.push(...(await Promise.all(validators.map(v => v(context, hydratedBlock)))).flat())
|
|
37
33
|
} catch (ex) {
|
|
38
34
|
errors.push(new HydratedBlockStateValidationError(
|
|
39
35
|
hydratedBlock?.[0]?._hash ?? ZERO_HASH,
|
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
import type { Address } from '@xylabs/sdk-js'
|
|
2
2
|
import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'
|
|
3
|
-
import type {
|
|
4
|
-
AccountBalanceViewer, ChainId, HydratedBlockStateValidationFunction,
|
|
5
|
-
} from '@xyo-network/xl1-sdk'
|
|
3
|
+
import type { ChainId, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-sdk'
|
|
6
4
|
import {
|
|
7
5
|
AttoXL1, HydratedBlockStateValidationError, netBalancesForPayloads, XYO_ZERO_ADDRESS,
|
|
8
6
|
} from '@xyo-network/xl1-sdk'
|
|
@@ -10,8 +8,6 @@ import {
|
|
|
10
8
|
export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (
|
|
11
9
|
context,
|
|
12
10
|
block,
|
|
13
|
-
chainIdAtBlockNumber,
|
|
14
|
-
services: { accountBalance: AccountBalanceViewer },
|
|
15
11
|
) => {
|
|
16
12
|
return await spanRootAsync('RequiredBalanceBlockStateValidator', async () => {
|
|
17
13
|
const errors: HydratedBlockStateValidationError[] = []
|
|
@@ -34,10 +30,10 @@ export const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFun
|
|
|
34
30
|
block,
|
|
35
31
|
'Insufficient funds because first block',
|
|
36
32
|
)]
|
|
37
|
-
chainId = await chainIdAtBlockNumber(block[0].block)
|
|
33
|
+
chainId = await context.chainIdAtBlockNumber(block[0].block)
|
|
38
34
|
await spanRootAsync('RequiredBalanceBlockStateValidator|balancesLoop', async () => {
|
|
39
35
|
for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {
|
|
40
|
-
const result = await
|
|
36
|
+
const result = await context.accountBalance.accountBalances([address], { head: previous })
|
|
41
37
|
const balance = result[address] ?? AttoXL1(0n)
|
|
42
38
|
if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
|
|
43
39
|
errors.push(new HydratedBlockStateValidationError(
|