@xyo-network/chain-validation 1.23.0 → 1.23.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/index.mjs +317 -158
- package/dist/neutral/index.mjs.map +7 -1
- package/package.json +8 -8
package/dist/neutral/index.mjs
CHANGED
|
@@ -1,44 +1,49 @@
|
|
|
1
|
-
var __defProp = Object.defineProperty;
|
|
2
|
-
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
3
|
-
|
|
4
1
|
// src/block/validateBlock.ts
|
|
5
2
|
import { ZERO_HASH as ZERO_HASH6 } from "@xylabs/sdk-js";
|
|
6
3
|
import { BlockValidationError as BlockValidationError6 } from "@xyo-network/xl1-sdk";
|
|
7
4
|
|
|
8
5
|
// src/block/validators/AllowedPayloadSchemas.ts
|
|
9
6
|
import { ZERO_HASH } from "@xylabs/sdk-js";
|
|
10
|
-
import {
|
|
11
|
-
|
|
7
|
+
import {
|
|
8
|
+
BlockValidationError,
|
|
9
|
+
isAllowedBlockPayloadSchema
|
|
10
|
+
} from "@xyo-network/xl1-sdk";
|
|
11
|
+
var BlockAllowedPayloadSchemasValidator = (context, block) => {
|
|
12
12
|
const errors = [];
|
|
13
13
|
try {
|
|
14
14
|
for (const schema of block.payload_schemas) {
|
|
15
15
|
if (!isAllowedBlockPayloadSchema(schema)) {
|
|
16
|
-
errors.push(new BlockValidationError(
|
|
16
|
+
errors.push(new BlockValidationError(
|
|
17
|
+
block?._hash ?? ZERO_HASH,
|
|
18
|
+
block,
|
|
19
|
+
`payload schema not allowed in block: ${schema}`
|
|
20
|
+
));
|
|
17
21
|
}
|
|
18
22
|
}
|
|
19
23
|
} catch (ex) {
|
|
20
|
-
errors.push(new BlockValidationError(
|
|
24
|
+
errors.push(new BlockValidationError(
|
|
25
|
+
block?._hash ?? ZERO_HASH,
|
|
26
|
+
block,
|
|
27
|
+
`validation excepted: ${ex}`,
|
|
28
|
+
ex
|
|
29
|
+
));
|
|
21
30
|
}
|
|
22
31
|
return errors;
|
|
23
|
-
}
|
|
32
|
+
};
|
|
24
33
|
|
|
25
34
|
// src/block/validators/BoundWitness.ts
|
|
26
35
|
import { ZERO_HASH as ZERO_HASH2 } from "@xylabs/sdk-js";
|
|
27
36
|
import { BoundWitnessValidator } from "@xyo-network/sdk-js";
|
|
28
37
|
import { BlockValidationError as BlockValidationError2 } from "@xyo-network/xl1-sdk";
|
|
29
|
-
var error =
|
|
30
|
-
var checkSignaturesShape =
|
|
38
|
+
var error = (block, message) => new BlockValidationError2(block?._hash ?? ZERO_HASH2, block, message);
|
|
39
|
+
var checkSignaturesShape = (block) => {
|
|
31
40
|
const bw = block;
|
|
32
41
|
if (bw.$signatures === void 0) {
|
|
33
|
-
return Array.isArray(bw.signatures) ? [
|
|
34
|
-
error(block, "BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)")
|
|
35
|
-
] : [
|
|
36
|
-
error(block, "BoundWitness is missing `$signatures`")
|
|
37
|
-
];
|
|
42
|
+
return Array.isArray(bw.signatures) ? [error(block, "BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)")] : [error(block, "BoundWitness is missing `$signatures`")];
|
|
38
43
|
}
|
|
39
44
|
return [];
|
|
40
|
-
}
|
|
41
|
-
var BlockBoundWitnessValidator =
|
|
45
|
+
};
|
|
46
|
+
var BlockBoundWitnessValidator = async (_context, block) => {
|
|
42
47
|
try {
|
|
43
48
|
const shapeErrors = checkSignaturesShape(block);
|
|
44
49
|
if (shapeErrors.length > 0) return shapeErrors;
|
|
@@ -46,17 +51,15 @@ var BlockBoundWitnessValidator = /* @__PURE__ */ __name(async (_context, block)
|
|
|
46
51
|
const bwErrors = await bwValidator.validate();
|
|
47
52
|
return bwErrors.map((e) => error(block, `BoundWitness validation: ${e.message}`));
|
|
48
53
|
} catch (ex) {
|
|
49
|
-
return [
|
|
50
|
-
error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)
|
|
51
|
-
];
|
|
54
|
+
return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)];
|
|
52
55
|
}
|
|
53
|
-
}
|
|
56
|
+
};
|
|
54
57
|
|
|
55
58
|
// src/block/validators/Fields.ts
|
|
56
59
|
import { isDefined, ZERO_HASH as ZERO_HASH3 } from "@xylabs/sdk-js";
|
|
57
60
|
import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
58
61
|
import { BlockValidationError as BlockValidationError3 } from "@xyo-network/xl1-sdk";
|
|
59
|
-
var BlockFieldsValidator =
|
|
62
|
+
var BlockFieldsValidator = (context, block, chainId) => {
|
|
60
63
|
const errors = [];
|
|
61
64
|
try {
|
|
62
65
|
if (isDefined(chainId) && block.chain !== chainId.toLowerCase()) {
|
|
@@ -69,48 +72,60 @@ var BlockFieldsValidator = /* @__PURE__ */ __name((context, block, chainId) => {
|
|
|
69
72
|
}
|
|
70
73
|
}
|
|
71
74
|
if (new Set(txHashes).size < txHashes.length) {
|
|
72
|
-
errors.push(new BlockValidationError3(
|
|
75
|
+
errors.push(new BlockValidationError3(
|
|
76
|
+
block?._hash ?? ZERO_HASH3,
|
|
77
|
+
block,
|
|
78
|
+
`Duplicate Transaction Hashes: ${txHashes}`
|
|
79
|
+
));
|
|
73
80
|
}
|
|
74
81
|
} catch (ex) {
|
|
75
|
-
errors.push(new BlockValidationError3(
|
|
82
|
+
errors.push(new BlockValidationError3(
|
|
83
|
+
block?._hash ?? ZERO_HASH3,
|
|
84
|
+
block,
|
|
85
|
+
`validation excepted: ${ex}`,
|
|
86
|
+
ex
|
|
87
|
+
));
|
|
76
88
|
}
|
|
77
89
|
return errors;
|
|
78
|
-
}
|
|
90
|
+
};
|
|
79
91
|
|
|
80
92
|
// src/block/validators/JsonSchema.ts
|
|
81
93
|
import { ZERO_HASH as ZERO_HASH4 } from "@xylabs/sdk-js";
|
|
82
94
|
import { BlockBoundWitnessWithStorageMetaJsonSchema, BlockValidationError as BlockValidationError4 } from "@xyo-network/xl1-sdk";
|
|
83
95
|
import { Ajv } from "ajv";
|
|
84
|
-
var BlockJsonSchemaValidator =
|
|
85
|
-
const ajv = new Ajv({
|
|
86
|
-
allErrors: true,
|
|
87
|
-
strict: true
|
|
88
|
-
});
|
|
96
|
+
var BlockJsonSchemaValidator = (jsonSchema = BlockBoundWitnessWithStorageMetaJsonSchema) => {
|
|
97
|
+
const ajv = new Ajv({ allErrors: true, strict: true });
|
|
89
98
|
const validate = ajv.compile(jsonSchema);
|
|
90
99
|
return async (context, block) => {
|
|
91
100
|
const errors = [];
|
|
92
101
|
try {
|
|
93
102
|
await validate(block);
|
|
94
103
|
if ((validate.errors ?? []).length > 0) {
|
|
95
|
-
const error2 = new BlockValidationError4(
|
|
96
|
-
|
|
97
|
-
|
|
104
|
+
const error2 = new BlockValidationError4(
|
|
105
|
+
block?._hash ?? ZERO_HASH4,
|
|
106
|
+
block,
|
|
107
|
+
`failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: "\n" })}`
|
|
108
|
+
);
|
|
98
109
|
error2.cause = validate.errors;
|
|
99
110
|
errors.push(error2);
|
|
100
111
|
}
|
|
101
112
|
} catch (ex) {
|
|
102
|
-
const error2 = new BlockValidationError4(
|
|
113
|
+
const error2 = new BlockValidationError4(
|
|
114
|
+
block?._hash ?? ZERO_HASH4,
|
|
115
|
+
block,
|
|
116
|
+
`validation excepted: ${ex}`
|
|
117
|
+
);
|
|
103
118
|
error2.cause = ex;
|
|
104
119
|
errors.push(error2);
|
|
105
120
|
}
|
|
106
121
|
return errors;
|
|
107
122
|
};
|
|
108
|
-
}
|
|
123
|
+
};
|
|
109
124
|
|
|
110
125
|
// src/block/validators/PreviousHash.ts
|
|
111
126
|
import { isHash, ZERO_HASH as ZERO_HASH5 } from "@xylabs/sdk-js";
|
|
112
127
|
import { BlockValidationError as BlockValidationError5 } from "@xyo-network/xl1-sdk";
|
|
113
|
-
var BlockPreviousHashValidator =
|
|
128
|
+
var BlockPreviousHashValidator = (context, block) => {
|
|
114
129
|
const errors = [];
|
|
115
130
|
try {
|
|
116
131
|
const blockNumber = block.block;
|
|
@@ -126,15 +141,19 @@ var BlockPreviousHashValidator = /* @__PURE__ */ __name((context, block) => {
|
|
|
126
141
|
errors.push(new BlockValidationError5(block?._hash ?? ZERO_HASH5, block, "invalid block number"));
|
|
127
142
|
}
|
|
128
143
|
} catch (ex) {
|
|
129
|
-
const error2 = new BlockValidationError5(
|
|
144
|
+
const error2 = new BlockValidationError5(
|
|
145
|
+
block?._hash ?? ZERO_HASH5,
|
|
146
|
+
block,
|
|
147
|
+
`Failed BlockPreviousHashValidator: ${ex}`
|
|
148
|
+
);
|
|
130
149
|
error2.cause = ex;
|
|
131
150
|
errors.push(error2);
|
|
132
151
|
}
|
|
133
152
|
return errors;
|
|
134
|
-
}
|
|
153
|
+
};
|
|
135
154
|
|
|
136
155
|
// src/block/validateBlock.ts
|
|
137
|
-
var validateBlock =
|
|
156
|
+
var validateBlock = async (context, block, chainId, additionalValidators = []) => {
|
|
138
157
|
const errors = [];
|
|
139
158
|
try {
|
|
140
159
|
const validators = [
|
|
@@ -144,12 +163,14 @@ var validateBlock = /* @__PURE__ */ __name(async (context, block, chainId, addit
|
|
|
144
163
|
BlockAllowedPayloadSchemasValidator,
|
|
145
164
|
...additionalValidators
|
|
146
165
|
];
|
|
147
|
-
errors.push(...(await Promise.all(
|
|
166
|
+
errors.push(...(await Promise.all(
|
|
167
|
+
validators.map((validator) => validator(context, block, chainId))
|
|
168
|
+
)).flat());
|
|
148
169
|
} catch (ex) {
|
|
149
170
|
errors.push(new BlockValidationError6(block?._hash ?? ZERO_HASH6, block, "validation excepted", ex));
|
|
150
171
|
}
|
|
151
172
|
return errors;
|
|
152
|
-
}
|
|
173
|
+
};
|
|
153
174
|
|
|
154
175
|
// src/hydratedBlock/validateHydratedBlock.ts
|
|
155
176
|
import { ZERO_HASH as ZERO_HASH18 } from "@xylabs/sdk-js";
|
|
@@ -163,11 +184,20 @@ import { HydratedBlockValidationError } from "@xyo-network/xl1-sdk";
|
|
|
163
184
|
import { ZERO_HASH as ZERO_HASH16 } from "@xylabs/sdk-js";
|
|
164
185
|
import { BoundWitnessSchema as BoundWitnessSchema2 } from "@xyo-network/boundwitness-model";
|
|
165
186
|
import { SchemaSchema } from "@xyo-network/sdk-js";
|
|
166
|
-
import {
|
|
187
|
+
import {
|
|
188
|
+
BridgeDestinationObservationSchema,
|
|
189
|
+
BridgeIntentSchema,
|
|
190
|
+
BridgeSourceObservationSchema,
|
|
191
|
+
ChainStakeIntentSchema,
|
|
192
|
+
HashSchema,
|
|
193
|
+
InBlockPayloadValidationError as InBlockPayloadValidationError12,
|
|
194
|
+
TimeSchema,
|
|
195
|
+
TransferSchema
|
|
196
|
+
} from "@xyo-network/xl1-sdk";
|
|
167
197
|
|
|
168
198
|
// src/elevatedPayload/lib/isElevatedFromBlock.ts
|
|
169
199
|
import { isTransactionBoundWitness } from "@xyo-network/xl1-sdk";
|
|
170
|
-
var isElevatedFromBlock =
|
|
200
|
+
var isElevatedFromBlock = (payload, [, payloads]) => {
|
|
171
201
|
const txs = payloads.filter((p) => isTransactionBoundWitness(p));
|
|
172
202
|
for (const tx of txs) {
|
|
173
203
|
if (tx.payload_hashes.includes(payload._hash)) {
|
|
@@ -175,27 +205,32 @@ var isElevatedFromBlock = /* @__PURE__ */ __name((payload, [, payloads]) => {
|
|
|
175
205
|
}
|
|
176
206
|
}
|
|
177
207
|
return true;
|
|
178
|
-
}
|
|
208
|
+
};
|
|
179
209
|
|
|
180
210
|
// src/elevatedPayload/lib/validateElevatedFromBlock.ts
|
|
181
211
|
import { InBlockPayloadValidationError, transactionsFromHydratedBlock } from "@xyo-network/xl1-sdk";
|
|
182
|
-
var validateElevatedFromBlock =
|
|
212
|
+
var validateElevatedFromBlock = (context, payload, block) => {
|
|
183
213
|
const errors = [];
|
|
184
214
|
try {
|
|
185
215
|
const txs = transactionsFromHydratedBlock(block);
|
|
186
216
|
const allTxPayloadHashes = new Set(txs.flatMap((tx) => tx.payload_hashes));
|
|
187
217
|
if (allTxPayloadHashes.has(payload._hash)) {
|
|
188
|
-
errors.push(new InBlockPayloadValidationError(
|
|
218
|
+
errors.push(new InBlockPayloadValidationError(
|
|
219
|
+
block[0]?._hash,
|
|
220
|
+
block,
|
|
221
|
+
payload,
|
|
222
|
+
`Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`
|
|
223
|
+
));
|
|
189
224
|
}
|
|
190
225
|
} catch (ex) {
|
|
191
226
|
errors.push(new InBlockPayloadValidationError(block[0]?._hash, block, payload, `validation excepted: ${ex}`, ex));
|
|
192
227
|
}
|
|
193
228
|
return errors;
|
|
194
|
-
}
|
|
229
|
+
};
|
|
195
230
|
|
|
196
231
|
// src/elevatedPayload/lib/validateElevatedFromTransaction.ts
|
|
197
232
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError2, transactionsFromHydratedBlock as transactionsFromHydratedBlock2 } from "@xyo-network/xl1-sdk";
|
|
198
|
-
var validateElevatedFromTransaction =
|
|
233
|
+
var validateElevatedFromTransaction = (context, payload, block) => {
|
|
199
234
|
const errors = [];
|
|
200
235
|
try {
|
|
201
236
|
const txs = transactionsFromHydratedBlock2(block);
|
|
@@ -208,32 +243,49 @@ var validateElevatedFromTransaction = /* @__PURE__ */ __name((context, payload,
|
|
|
208
243
|
errors.push(new InBlockPayloadValidationError2(payload._hash, block, payload, "No Transactions in block"));
|
|
209
244
|
}
|
|
210
245
|
} catch (ex) {
|
|
211
|
-
errors.push(new InBlockPayloadValidationError2(
|
|
246
|
+
errors.push(new InBlockPayloadValidationError2(
|
|
247
|
+
payload._hash,
|
|
248
|
+
block,
|
|
249
|
+
payload,
|
|
250
|
+
`Failed validateElevatedFromTransaction: ${ex}`,
|
|
251
|
+
ex
|
|
252
|
+
));
|
|
212
253
|
}
|
|
213
254
|
return errors;
|
|
214
|
-
}
|
|
255
|
+
};
|
|
215
256
|
|
|
216
257
|
// src/elevatedPayload/lib/validateTransactionInBlock.ts
|
|
217
258
|
import { ZERO_HASH as ZERO_HASH7 } from "@xylabs/sdk-js";
|
|
218
259
|
import { isHashMeta } from "@xyo-network/sdk-js";
|
|
219
|
-
import {
|
|
220
|
-
|
|
260
|
+
import {
|
|
261
|
+
BoundWitnessSignaturesValidator,
|
|
262
|
+
InBlockPayloadValidationError as InBlockPayloadValidationError3,
|
|
263
|
+
isTransactionBoundWitness as isTransactionBoundWitness2,
|
|
264
|
+
validateTransaction
|
|
265
|
+
} from "@xyo-network/xl1-sdk";
|
|
266
|
+
var validateTransactionInBlock = async (context, payload, block) => {
|
|
221
267
|
const errors = [];
|
|
222
268
|
try {
|
|
223
269
|
if (isTransactionBoundWitness2(payload) && isHashMeta(payload)) {
|
|
224
|
-
const txErrors = await validateTransaction({
|
|
225
|
-
...context,
|
|
226
|
-
chainId: block[0].chain
|
|
227
|
-
}, [
|
|
228
|
-
payload,
|
|
229
|
-
block[1]
|
|
230
|
-
]);
|
|
270
|
+
const txErrors = await validateTransaction({ ...context, chainId: block[0].chain }, [payload, block[1]]);
|
|
231
271
|
for (const txError of txErrors) {
|
|
232
|
-
errors.push(new InBlockPayloadValidationError3(
|
|
272
|
+
errors.push(new InBlockPayloadValidationError3(
|
|
273
|
+
payload._hash,
|
|
274
|
+
block,
|
|
275
|
+
payload,
|
|
276
|
+
`TransactionValidation error: ${txError}`,
|
|
277
|
+
txError
|
|
278
|
+
));
|
|
233
279
|
}
|
|
234
280
|
const txSignatureErrors = await BoundWitnessSignaturesValidator(payload);
|
|
235
281
|
for (const txSignatureError of txSignatureErrors) {
|
|
236
|
-
errors.push(new InBlockPayloadValidationError3(
|
|
282
|
+
errors.push(new InBlockPayloadValidationError3(
|
|
283
|
+
payload._hash,
|
|
284
|
+
block,
|
|
285
|
+
payload,
|
|
286
|
+
`BoundWitnessSignaturesValidator error: ${txSignatureError}`,
|
|
287
|
+
txSignatureError
|
|
288
|
+
));
|
|
237
289
|
}
|
|
238
290
|
} else {
|
|
239
291
|
errors.push(new InBlockPayloadValidationError3(payload._hash, block, payload, "Payload failed isTransactionBoundWitness or isHashMeta"));
|
|
@@ -242,11 +294,11 @@ var validateTransactionInBlock = /* @__PURE__ */ __name(async (context, payload,
|
|
|
242
294
|
errors.push(new InBlockPayloadValidationError3(payload._hash ?? ZERO_HASH7, block, payload, `validation excepted: ${ex}`, ex));
|
|
243
295
|
}
|
|
244
296
|
return errors;
|
|
245
|
-
}
|
|
297
|
+
};
|
|
246
298
|
|
|
247
299
|
// src/elevatedPayload/lib/validateTypedPayloadInBlock.ts
|
|
248
300
|
import { isHashMeta as isHashMeta2 } from "@xyo-network/sdk-js";
|
|
249
|
-
var validateTypedPayloadInBlock =
|
|
301
|
+
var validateTypedPayloadInBlock = async (context, payload, block, identityFunction) => {
|
|
250
302
|
const errors = [];
|
|
251
303
|
try {
|
|
252
304
|
if (identityFunction(payload) && isHashMeta2(payload)) {
|
|
@@ -262,12 +314,12 @@ var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (context, payload
|
|
|
262
314
|
errors.push(new Error(`Failed validateTypedPayloadInBlock: ${ex}`));
|
|
263
315
|
}
|
|
264
316
|
return errors;
|
|
265
|
-
}
|
|
317
|
+
};
|
|
266
318
|
|
|
267
319
|
// src/elevatedPayload/payloads/validateBridgeDestinationObservationInBlock.ts
|
|
268
320
|
import { ZERO_HASH as ZERO_HASH8 } from "@xylabs/sdk-js";
|
|
269
321
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError4, isBridgeDestinationObservation } from "@xyo-network/xl1-sdk";
|
|
270
|
-
var validateBridgeDestinationObservationInBlock =
|
|
322
|
+
var validateBridgeDestinationObservationInBlock = async (context, payload, block) => {
|
|
271
323
|
const errors = [];
|
|
272
324
|
try {
|
|
273
325
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeDestinationObservation);
|
|
@@ -275,15 +327,21 @@ var validateBridgeDestinationObservationInBlock = /* @__PURE__ */ __name(async (
|
|
|
275
327
|
errors.push(new InBlockPayloadValidationError4(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
276
328
|
}
|
|
277
329
|
} catch (ex) {
|
|
278
|
-
errors.push(new InBlockPayloadValidationError4(
|
|
330
|
+
errors.push(new InBlockPayloadValidationError4(
|
|
331
|
+
block?.[0]?._hash ?? ZERO_HASH8,
|
|
332
|
+
block,
|
|
333
|
+
payload,
|
|
334
|
+
`Failed validateBridgeObservationInBlock: ${ex}`,
|
|
335
|
+
ex
|
|
336
|
+
));
|
|
279
337
|
}
|
|
280
338
|
return errors;
|
|
281
|
-
}
|
|
339
|
+
};
|
|
282
340
|
|
|
283
341
|
// src/elevatedPayload/payloads/validateBridgeIntentInBlock.ts
|
|
284
342
|
import { ZERO_HASH as ZERO_HASH9 } from "@xylabs/sdk-js";
|
|
285
343
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError5, isBridgeIntent } from "@xyo-network/xl1-sdk";
|
|
286
|
-
var validateBridgeIntentInBlock =
|
|
344
|
+
var validateBridgeIntentInBlock = async (context, payload, block) => {
|
|
287
345
|
const errors = [];
|
|
288
346
|
try {
|
|
289
347
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeIntent);
|
|
@@ -291,15 +349,21 @@ var validateBridgeIntentInBlock = /* @__PURE__ */ __name(async (context, payload
|
|
|
291
349
|
errors.push(new InBlockPayloadValidationError5(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
292
350
|
}
|
|
293
351
|
} catch (ex) {
|
|
294
|
-
errors.push(new InBlockPayloadValidationError5(
|
|
352
|
+
errors.push(new InBlockPayloadValidationError5(
|
|
353
|
+
block?.[0]?._hash ?? ZERO_HASH9,
|
|
354
|
+
block,
|
|
355
|
+
payload,
|
|
356
|
+
`Failed validateBridgeIntentInBlock: ${ex}`,
|
|
357
|
+
ex
|
|
358
|
+
));
|
|
295
359
|
}
|
|
296
360
|
return errors;
|
|
297
|
-
}
|
|
361
|
+
};
|
|
298
362
|
|
|
299
363
|
// src/elevatedPayload/payloads/validateBridgeSourceObservationInBlock.ts
|
|
300
364
|
import { ZERO_HASH as ZERO_HASH10 } from "@xylabs/sdk-js";
|
|
301
365
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError6, isBridgeSourceObservation } from "@xyo-network/xl1-sdk";
|
|
302
|
-
var validateBridgeSourceObservationInBlock =
|
|
366
|
+
var validateBridgeSourceObservationInBlock = async (context, payload, block) => {
|
|
303
367
|
const errors = [];
|
|
304
368
|
try {
|
|
305
369
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isBridgeSourceObservation);
|
|
@@ -307,15 +371,21 @@ var validateBridgeSourceObservationInBlock = /* @__PURE__ */ __name(async (conte
|
|
|
307
371
|
errors.push(new InBlockPayloadValidationError6(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
308
372
|
}
|
|
309
373
|
} catch (ex) {
|
|
310
|
-
errors.push(new InBlockPayloadValidationError6(
|
|
374
|
+
errors.push(new InBlockPayloadValidationError6(
|
|
375
|
+
block?.[0]?._hash ?? ZERO_HASH10,
|
|
376
|
+
block,
|
|
377
|
+
payload,
|
|
378
|
+
`Failed validateBridgeObservationInBlock: ${ex}`,
|
|
379
|
+
ex
|
|
380
|
+
));
|
|
311
381
|
}
|
|
312
382
|
return errors;
|
|
313
|
-
}
|
|
383
|
+
};
|
|
314
384
|
|
|
315
385
|
// src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts
|
|
316
386
|
import { ZERO_HASH as ZERO_HASH11 } from "@xylabs/sdk-js";
|
|
317
387
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError7, isChainStakeIntent } from "@xyo-network/xl1-sdk";
|
|
318
|
-
var validateChainStakeIntentInBlock =
|
|
388
|
+
var validateChainStakeIntentInBlock = async (context, payload, block) => {
|
|
319
389
|
const errors = [];
|
|
320
390
|
try {
|
|
321
391
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isChainStakeIntent);
|
|
@@ -323,15 +393,21 @@ var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (context, pay
|
|
|
323
393
|
errors.push(new InBlockPayloadValidationError7(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
324
394
|
}
|
|
325
395
|
} catch (ex) {
|
|
326
|
-
errors.push(new InBlockPayloadValidationError7(
|
|
396
|
+
errors.push(new InBlockPayloadValidationError7(
|
|
397
|
+
block[0]?._hash ?? ZERO_HASH11,
|
|
398
|
+
block,
|
|
399
|
+
payload,
|
|
400
|
+
`validation excepted: ${ex}`,
|
|
401
|
+
ex
|
|
402
|
+
));
|
|
327
403
|
}
|
|
328
404
|
return errors;
|
|
329
|
-
}
|
|
405
|
+
};
|
|
330
406
|
|
|
331
407
|
// src/elevatedPayload/payloads/validateHashInBlock.ts
|
|
332
408
|
import { ZERO_HASH as ZERO_HASH12 } from "@xylabs/sdk-js";
|
|
333
409
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError8, isHashPayload } from "@xyo-network/xl1-sdk";
|
|
334
|
-
var validateHashInBlock =
|
|
410
|
+
var validateHashInBlock = async (context, payload, block) => {
|
|
335
411
|
const errors = [];
|
|
336
412
|
try {
|
|
337
413
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isHashPayload);
|
|
@@ -339,16 +415,22 @@ var validateHashInBlock = /* @__PURE__ */ __name(async (context, payload, block)
|
|
|
339
415
|
errors.push(new InBlockPayloadValidationError8(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
340
416
|
}
|
|
341
417
|
} catch (ex) {
|
|
342
|
-
errors.push(new InBlockPayloadValidationError8(
|
|
418
|
+
errors.push(new InBlockPayloadValidationError8(
|
|
419
|
+
block?.[0]?._hash ?? ZERO_HASH12,
|
|
420
|
+
block,
|
|
421
|
+
payload,
|
|
422
|
+
`validation excepted: ${ex}`,
|
|
423
|
+
ex
|
|
424
|
+
));
|
|
343
425
|
}
|
|
344
426
|
return errors;
|
|
345
|
-
}
|
|
427
|
+
};
|
|
346
428
|
|
|
347
429
|
// src/elevatedPayload/payloads/validateSchemaInBlock.ts
|
|
348
430
|
import { ZERO_HASH as ZERO_HASH13 } from "@xylabs/sdk-js";
|
|
349
431
|
import { isSchemaPayload } from "@xyo-network/sdk-js";
|
|
350
432
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError9 } from "@xyo-network/xl1-sdk";
|
|
351
|
-
var validateSchemaInBlock =
|
|
433
|
+
var validateSchemaInBlock = async (context, payload, block) => {
|
|
352
434
|
const errors = [];
|
|
353
435
|
try {
|
|
354
436
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isSchemaPayload);
|
|
@@ -356,15 +438,21 @@ var validateSchemaInBlock = /* @__PURE__ */ __name(async (context, payload, bloc
|
|
|
356
438
|
errors.push(new InBlockPayloadValidationError9(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
357
439
|
}
|
|
358
440
|
} catch (ex) {
|
|
359
|
-
errors.push(new InBlockPayloadValidationError9(
|
|
441
|
+
errors.push(new InBlockPayloadValidationError9(
|
|
442
|
+
block?.[0]?._hash ?? ZERO_HASH13,
|
|
443
|
+
block,
|
|
444
|
+
payload,
|
|
445
|
+
`Failed validateSchemaInBlock: ${ex}`,
|
|
446
|
+
ex
|
|
447
|
+
));
|
|
360
448
|
}
|
|
361
449
|
return errors;
|
|
362
|
-
}
|
|
450
|
+
};
|
|
363
451
|
|
|
364
452
|
// src/elevatedPayload/payloads/validateTimeInBlock.ts
|
|
365
453
|
import { ZERO_HASH as ZERO_HASH14 } from "@xylabs/sdk-js";
|
|
366
454
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError10, isTimePayload } from "@xyo-network/xl1-sdk";
|
|
367
|
-
var validateTimeInBlock =
|
|
455
|
+
var validateTimeInBlock = async (context, payload, block) => {
|
|
368
456
|
const errors = [];
|
|
369
457
|
try {
|
|
370
458
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTimePayload);
|
|
@@ -372,15 +460,21 @@ var validateTimeInBlock = /* @__PURE__ */ __name(async (context, payload, block)
|
|
|
372
460
|
errors.push(new InBlockPayloadValidationError10(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
373
461
|
}
|
|
374
462
|
} catch (ex) {
|
|
375
|
-
errors.push(new InBlockPayloadValidationError10(
|
|
463
|
+
errors.push(new InBlockPayloadValidationError10(
|
|
464
|
+
block?.[0]?._hash ?? ZERO_HASH14,
|
|
465
|
+
block,
|
|
466
|
+
payload,
|
|
467
|
+
`Failed validateTimeInBlock: ${ex}`,
|
|
468
|
+
ex
|
|
469
|
+
));
|
|
376
470
|
}
|
|
377
471
|
return errors;
|
|
378
|
-
}
|
|
472
|
+
};
|
|
379
473
|
|
|
380
474
|
// src/elevatedPayload/payloads/validateTransferInBlock.ts
|
|
381
475
|
import { ZERO_HASH as ZERO_HASH15 } from "@xylabs/sdk-js";
|
|
382
476
|
import { InBlockPayloadValidationError as InBlockPayloadValidationError11, isTransfer } from "@xyo-network/xl1-sdk";
|
|
383
|
-
var validateTransferInBlock =
|
|
477
|
+
var validateTransferInBlock = async (context, payload, block) => {
|
|
384
478
|
const errors = [];
|
|
385
479
|
try {
|
|
386
480
|
const typedErrors = await validateTypedPayloadInBlock(context, payload, block, isTransfer);
|
|
@@ -388,10 +482,16 @@ var validateTransferInBlock = /* @__PURE__ */ __name(async (context, payload, bl
|
|
|
388
482
|
errors.push(new InBlockPayloadValidationError11(payload._hash, block, payload, `validateTypedPayloadInBlock error: ${typedError}`, typedError));
|
|
389
483
|
}
|
|
390
484
|
} catch (ex) {
|
|
391
|
-
errors.push(new InBlockPayloadValidationError11(
|
|
485
|
+
errors.push(new InBlockPayloadValidationError11(
|
|
486
|
+
block?.[0]?._hash ?? ZERO_HASH15,
|
|
487
|
+
block,
|
|
488
|
+
payload,
|
|
489
|
+
`Failed validateTransferInBlock: ${ex}`,
|
|
490
|
+
ex
|
|
491
|
+
));
|
|
392
492
|
}
|
|
393
493
|
return errors;
|
|
394
|
-
}
|
|
494
|
+
};
|
|
395
495
|
|
|
396
496
|
// src/elevatedPayload/validatePayloadInBlock.ts
|
|
397
497
|
var payloadValidators = {
|
|
@@ -405,7 +505,7 @@ var payloadValidators = {
|
|
|
405
505
|
[TimeSchema]: validateTimeInBlock,
|
|
406
506
|
[TransferSchema]: validateTransferInBlock
|
|
407
507
|
};
|
|
408
|
-
var validatePayloadInBlock =
|
|
508
|
+
var validatePayloadInBlock = async (context, payload, block) => {
|
|
409
509
|
const errors = [];
|
|
410
510
|
try {
|
|
411
511
|
const validator = payloadValidators[payload.schema];
|
|
@@ -415,66 +515,70 @@ var validatePayloadInBlock = /* @__PURE__ */ __name(async (context, payload, blo
|
|
|
415
515
|
errors.push(new InBlockPayloadValidationError12(block?.[0]?._hash ?? ZERO_HASH16, block, payload, `Unsupported payload schema: ${payload.schema}`));
|
|
416
516
|
}
|
|
417
517
|
} catch (ex) {
|
|
418
|
-
const error2 = new InBlockPayloadValidationError12(
|
|
518
|
+
const error2 = new InBlockPayloadValidationError12(
|
|
519
|
+
block?.[0]?._hash ?? ZERO_HASH16,
|
|
520
|
+
block,
|
|
521
|
+
payload,
|
|
522
|
+
`validation excepted: ${ex}`,
|
|
523
|
+
ex
|
|
524
|
+
);
|
|
419
525
|
errors.push(error2);
|
|
420
526
|
}
|
|
421
527
|
return errors;
|
|
422
|
-
}
|
|
528
|
+
};
|
|
423
529
|
|
|
424
530
|
// src/hydratedBlock/validators/Payloads.ts
|
|
425
|
-
var PayloadsInBlockValidator =
|
|
531
|
+
var PayloadsInBlockValidator = async (context, [block, payloads]) => {
|
|
426
532
|
const errors = [];
|
|
427
533
|
try {
|
|
428
534
|
const payloadMap = {};
|
|
429
535
|
for (const payload of payloads) {
|
|
430
536
|
payloadMap[payload._hash] = payload;
|
|
431
537
|
}
|
|
432
|
-
const remainingPayloads = {
|
|
433
|
-
...payloadMap
|
|
434
|
-
};
|
|
538
|
+
const remainingPayloads = { ...payloadMap };
|
|
435
539
|
for (let i = 0; i < block.payload_hashes.length; i++) {
|
|
436
540
|
const hash = block.payload_hashes[i];
|
|
437
541
|
const schema = block.payload_schemas[i];
|
|
438
542
|
const payload = payloadMap[hash];
|
|
439
543
|
if (payload) {
|
|
440
|
-
const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [
|
|
441
|
-
block,
|
|
442
|
-
payloads
|
|
443
|
-
]);
|
|
544
|
+
const payloadInBlockErrors = await validatePayloadInBlock(context, payload, [block, payloads]);
|
|
444
545
|
for (const payloadInBlockError of payloadInBlockErrors) {
|
|
445
|
-
errors.push(new HydratedBlockValidationError(
|
|
446
|
-
block,
|
|
447
|
-
payloads
|
|
448
|
-
|
|
546
|
+
errors.push(new HydratedBlockValidationError(
|
|
547
|
+
block?._hash ?? ZERO_HASH17,
|
|
548
|
+
[block, payloads],
|
|
549
|
+
`validatePayloadInBlock error: ${payloadInBlockError}`,
|
|
550
|
+
payloadInBlockError
|
|
551
|
+
));
|
|
449
552
|
}
|
|
450
553
|
delete remainingPayloads[hash];
|
|
451
554
|
} else {
|
|
452
|
-
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [
|
|
453
|
-
block,
|
|
454
|
-
payloads
|
|
455
|
-
], `missing payload ${hash} ${schema}`));
|
|
555
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [block, payloads], `missing payload ${hash} ${schema}`));
|
|
456
556
|
}
|
|
457
557
|
}
|
|
458
558
|
if (Object.keys(remainingPayloads).length > 0) {
|
|
459
|
-
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [
|
|
460
|
-
block,
|
|
461
|
-
payloads
|
|
462
|
-
], `extra payloads ${Object.keys(payloadMap).join(", ")}`));
|
|
559
|
+
errors.push(new HydratedBlockValidationError(block?._hash ?? ZERO_HASH17, [block, payloads], `extra payloads ${Object.keys(payloadMap).join(", ")}`));
|
|
463
560
|
}
|
|
464
561
|
} catch (ex) {
|
|
465
|
-
errors.push(new HydratedBlockValidationError(
|
|
466
|
-
block,
|
|
467
|
-
payloads
|
|
468
|
-
|
|
562
|
+
errors.push(new HydratedBlockValidationError(
|
|
563
|
+
block?._hash ?? ZERO_HASH17,
|
|
564
|
+
[block, payloads],
|
|
565
|
+
`Failed PayloadsInBlockValidator: ${ex}`,
|
|
566
|
+
ex
|
|
567
|
+
));
|
|
469
568
|
}
|
|
470
569
|
return errors;
|
|
471
|
-
}
|
|
570
|
+
};
|
|
472
571
|
|
|
473
572
|
// src/hydratedBlock/validateHydratedBlock.ts
|
|
474
|
-
var validateHydratedBlock =
|
|
573
|
+
var validateHydratedBlock = async (context, hydratedBlock, chainIdAtBlockNumber, additionalValidators = [], additionalBlockValidators = []) => {
|
|
475
574
|
const errors = [];
|
|
476
575
|
try {
|
|
477
|
-
const validateBlockErrors = await validateBlock(
|
|
576
|
+
const validateBlockErrors = await validateBlock(
|
|
577
|
+
context,
|
|
578
|
+
hydratedBlock[0],
|
|
579
|
+
chainIdAtBlockNumber ? await chainIdAtBlockNumber(hydratedBlock[0].block) : void 0,
|
|
580
|
+
additionalBlockValidators
|
|
581
|
+
);
|
|
478
582
|
for (const validateBlockError of validateBlockErrors) {
|
|
479
583
|
errors.push(new HydratedBlockValidationError2(hydratedBlock[0]._hash, hydratedBlock, `validateBlock error: ${validateBlockError}`, validateBlockError));
|
|
480
584
|
}
|
|
@@ -488,10 +592,15 @@ var validateHydratedBlock = /* @__PURE__ */ __name(async (context, hydratedBlock
|
|
|
488
592
|
];
|
|
489
593
|
errors.push(...(await Promise.all(validators.map((v) => v(context, hydratedBlock, chainIdAtBlockNumber)))).flat());
|
|
490
594
|
} catch (ex) {
|
|
491
|
-
errors.push(new HydratedBlockValidationError2(
|
|
595
|
+
errors.push(new HydratedBlockValidationError2(
|
|
596
|
+
hydratedBlock?.[0]?._hash ?? ZERO_HASH18,
|
|
597
|
+
hydratedBlock,
|
|
598
|
+
`Failed validateHydratedBlock: ${ex}`,
|
|
599
|
+
ex
|
|
600
|
+
));
|
|
492
601
|
}
|
|
493
602
|
return errors;
|
|
494
|
-
}
|
|
603
|
+
};
|
|
495
604
|
|
|
496
605
|
// src/hydratedBlockState/validateHydratedBlockState.ts
|
|
497
606
|
import { spanRootAsync as spanRootAsync2, ZERO_HASH as ZERO_HASH20 } from "@xylabs/sdk-js";
|
|
@@ -499,7 +608,13 @@ import { HydratedBlockStateValidationError as HydratedBlockStateValidationError2
|
|
|
499
608
|
|
|
500
609
|
// src/hydratedBlockState/validators/RequiredBalance.ts
|
|
501
610
|
import { spanRootAsync, ZERO_HASH as ZERO_HASH19 } from "@xylabs/sdk-js";
|
|
502
|
-
import {
|
|
611
|
+
import {
|
|
612
|
+
AttoXL1,
|
|
613
|
+
HydratedBlockStateValidationError,
|
|
614
|
+
isSignedTransactionBoundWitnessWithHashMeta,
|
|
615
|
+
netBalancesForPayloads,
|
|
616
|
+
XYO_ZERO_ADDRESS
|
|
617
|
+
} from "@xyo-network/xl1-sdk";
|
|
503
618
|
function offendingTransactionHashesForAddress(block, address) {
|
|
504
619
|
const hashes = [];
|
|
505
620
|
for (const payload of block[1]) {
|
|
@@ -509,15 +624,12 @@ function offendingTransactionHashesForAddress(block, address) {
|
|
|
509
624
|
}
|
|
510
625
|
return hashes;
|
|
511
626
|
}
|
|
512
|
-
|
|
513
|
-
var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context, block) => {
|
|
627
|
+
var RequiredBalanceBlockStateValidator = async (context, block) => {
|
|
514
628
|
return await spanRootAsync("RequiredBalanceBlockStateValidator", async () => {
|
|
515
629
|
const errors = [];
|
|
516
630
|
let chainId = "00";
|
|
517
631
|
try {
|
|
518
|
-
const netBalances = netBalancesForPayloads({
|
|
519
|
-
singletons: {}
|
|
520
|
-
}, block[1]);
|
|
632
|
+
const netBalances = netBalancesForPayloads({ singletons: {} }, block[1]);
|
|
521
633
|
const netBalanceAddresses = Object.keys(netBalances);
|
|
522
634
|
const requiredBalances = {};
|
|
523
635
|
for (const address of netBalanceAddresses) {
|
|
@@ -526,33 +638,45 @@ var RequiredBalanceBlockStateValidator = /* @__PURE__ */ __name(async (context,
|
|
|
526
638
|
}
|
|
527
639
|
}
|
|
528
640
|
const previous = block[0].previous;
|
|
529
|
-
if (previous === null) return [
|
|
530
|
-
|
|
531
|
-
|
|
641
|
+
if (previous === null) return [new HydratedBlockStateValidationError(
|
|
642
|
+
block?.[0]?._hash ?? ZERO_HASH19,
|
|
643
|
+
"00",
|
|
644
|
+
block,
|
|
645
|
+
"Insufficient funds because first block"
|
|
646
|
+
)];
|
|
532
647
|
chainId = await context.chainIdAtBlockNumber(block[0].block);
|
|
533
648
|
await spanRootAsync("RequiredBalanceBlockStateValidator|balancesLoop", async () => {
|
|
534
649
|
for (const [address, reqBalance] of Object.entries(requiredBalances)) {
|
|
535
|
-
const result = await context.accountBalance.accountBalances([
|
|
536
|
-
address
|
|
537
|
-
], {
|
|
538
|
-
head: previous
|
|
539
|
-
});
|
|
650
|
+
const result = await context.accountBalance.accountBalances([address], { head: previous });
|
|
540
651
|
const balance = result[address] ?? AttoXL1(0n);
|
|
541
652
|
if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {
|
|
542
653
|
const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address);
|
|
543
|
-
errors.push(new HydratedBlockStateValidationError(
|
|
654
|
+
errors.push(new HydratedBlockStateValidationError(
|
|
655
|
+
block?.[0]?._hash ?? ZERO_HASH19,
|
|
656
|
+
chainId,
|
|
657
|
+
block,
|
|
658
|
+
`insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,
|
|
659
|
+
void 0,
|
|
660
|
+
offendingTransactionHashes.length > 0 ? offendingTransactionHashes : void 0
|
|
661
|
+
));
|
|
544
662
|
}
|
|
545
663
|
}
|
|
546
664
|
}, context);
|
|
547
665
|
} catch (ex) {
|
|
548
|
-
errors.push(new HydratedBlockStateValidationError(
|
|
666
|
+
errors.push(new HydratedBlockStateValidationError(
|
|
667
|
+
block?.[0]?._hash ?? ZERO_HASH19,
|
|
668
|
+
chainId,
|
|
669
|
+
block,
|
|
670
|
+
`Failed RequiredBalanceBlockStateValidator: ${ex}`,
|
|
671
|
+
ex
|
|
672
|
+
));
|
|
549
673
|
}
|
|
550
674
|
return await Promise.resolve(errors);
|
|
551
675
|
}, context);
|
|
552
|
-
}
|
|
676
|
+
};
|
|
553
677
|
|
|
554
678
|
// src/hydratedBlockState/validateHydratedBlockState.ts
|
|
555
|
-
var validateHydratedBlockState =
|
|
679
|
+
var validateHydratedBlockState = async (context, hydratedBlock, additionalValidators = []) => {
|
|
556
680
|
return await spanRootAsync2("validateHydratedBlockState", async () => {
|
|
557
681
|
const errors = [];
|
|
558
682
|
let chainId;
|
|
@@ -560,7 +684,13 @@ var validateHydratedBlockState = /* @__PURE__ */ __name(async (context, hydrated
|
|
|
560
684
|
chainId = await context.chainIdAtBlockNumber(hydratedBlock[0].block);
|
|
561
685
|
const validateHydratedBlockErrors = await validateHydratedBlock(context, hydratedBlock, context.chainIdAtBlockNumber);
|
|
562
686
|
for (const validateHydratedBlockError of validateHydratedBlockErrors) {
|
|
563
|
-
errors.push(new HydratedBlockStateValidationError2(
|
|
687
|
+
errors.push(new HydratedBlockStateValidationError2(
|
|
688
|
+
hydratedBlock[0]._hash,
|
|
689
|
+
chainId,
|
|
690
|
+
hydratedBlock,
|
|
691
|
+
`validateBlock error: ${validateHydratedBlockError}`,
|
|
692
|
+
validateHydratedBlockError
|
|
693
|
+
));
|
|
564
694
|
}
|
|
565
695
|
const validators = [
|
|
566
696
|
RequiredBalanceBlockStateValidator,
|
|
@@ -568,11 +698,17 @@ var validateHydratedBlockState = /* @__PURE__ */ __name(async (context, hydrated
|
|
|
568
698
|
];
|
|
569
699
|
errors.push(...(await Promise.all(validators.map((v) => v(context, hydratedBlock)))).flat());
|
|
570
700
|
} catch (ex) {
|
|
571
|
-
errors.push(new HydratedBlockStateValidationError2(
|
|
701
|
+
errors.push(new HydratedBlockStateValidationError2(
|
|
702
|
+
hydratedBlock?.[0]?._hash ?? ZERO_HASH20,
|
|
703
|
+
chainId ?? "00",
|
|
704
|
+
hydratedBlock,
|
|
705
|
+
`Failed validateHydratedBlockState: ${ex}`,
|
|
706
|
+
ex
|
|
707
|
+
));
|
|
572
708
|
}
|
|
573
709
|
return errors;
|
|
574
710
|
}, context);
|
|
575
|
-
}
|
|
711
|
+
};
|
|
576
712
|
|
|
577
713
|
// src/hydratedTransactionState/validateHydratedTransactionState.ts
|
|
578
714
|
import { spanRootAsync as spanRootAsync4, ZERO_HASH as ZERO_HASH22 } from "@xylabs/sdk-js";
|
|
@@ -580,37 +716,50 @@ import { HydratedTransactionValidationError as HydratedTransactionValidationErro
|
|
|
580
716
|
|
|
581
717
|
// src/hydratedTransactionState/validators/RequiredBalance.ts
|
|
582
718
|
import { spanRootAsync as spanRootAsync3, ZERO_HASH as ZERO_HASH21 } from "@xylabs/sdk-js";
|
|
583
|
-
import {
|
|
719
|
+
import {
|
|
720
|
+
AttoXL1 as AttoXL12,
|
|
721
|
+
HydratedTransactionValidationError,
|
|
722
|
+
HydratedTransactionWrapper,
|
|
723
|
+
netBalancesForPayloads as netBalancesForPayloads2,
|
|
724
|
+
transactionRequiredGas,
|
|
725
|
+
XYO_ZERO_ADDRESS as XYO_ZERO_ADDRESS2
|
|
726
|
+
} from "@xyo-network/xl1-sdk";
|
|
584
727
|
async function balanceShortfallErrors(context, tx, requiredBalances) {
|
|
585
728
|
const errors = [];
|
|
586
729
|
const requiredAddresses = Object.keys(requiredBalances);
|
|
587
730
|
if (requiredAddresses.length === 0) return errors;
|
|
588
731
|
const headBlock = (await context.blockViewer.currentBlock())[0];
|
|
589
|
-
const balances = await context.accountBalanceViewer.accountBalances(
|
|
590
|
-
|
|
591
|
-
|
|
732
|
+
const balances = await context.accountBalanceViewer.accountBalances(
|
|
733
|
+
requiredAddresses,
|
|
734
|
+
{ head: headBlock._hash }
|
|
735
|
+
);
|
|
592
736
|
for (const address of requiredAddresses) {
|
|
593
737
|
const reqBalance = requiredBalances[address];
|
|
594
738
|
const balance = balances[address] ?? AttoXL12(0n);
|
|
595
739
|
if (address !== XYO_ZERO_ADDRESS2 && reqBalance > balance) {
|
|
596
|
-
errors.push(new HydratedTransactionValidationError(
|
|
740
|
+
errors.push(new HydratedTransactionValidationError(
|
|
741
|
+
tx?.[0]?._hash ?? ZERO_HASH21,
|
|
742
|
+
tx,
|
|
743
|
+
`insufficient balance for ${address} ${balance} < ${reqBalance}`
|
|
744
|
+
));
|
|
597
745
|
}
|
|
598
746
|
}
|
|
599
747
|
return errors;
|
|
600
748
|
}
|
|
601
|
-
|
|
602
|
-
var RequiredBalanceTransactionStateValidator = /* @__PURE__ */ __name(async (context, tx) => {
|
|
749
|
+
var RequiredBalanceTransactionStateValidator = async (context, tx) => {
|
|
603
750
|
return await spanRootAsync3("RequiredBalanceTransactionStateValidator", async () => {
|
|
604
751
|
const errors = [];
|
|
605
752
|
try {
|
|
606
|
-
const netBalances = netBalancesForPayloads2({
|
|
607
|
-
singletons: {}
|
|
608
|
-
}, tx[1]);
|
|
753
|
+
const netBalances = netBalancesForPayloads2({ singletons: {} }, tx[1]);
|
|
609
754
|
const wrapper = await HydratedTransactionWrapper.parse(tx);
|
|
610
755
|
const from = wrapper.boundWitness.from;
|
|
611
756
|
const gasRequired = transactionRequiredGas(tx);
|
|
612
757
|
if (wrapper.fees.gasLimit < gasRequired) {
|
|
613
|
-
errors.push(new HydratedTransactionValidationError(
|
|
758
|
+
errors.push(new HydratedTransactionValidationError(
|
|
759
|
+
tx?.[0]?._hash ?? ZERO_HASH21,
|
|
760
|
+
tx,
|
|
761
|
+
`fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`
|
|
762
|
+
));
|
|
614
763
|
}
|
|
615
764
|
const gasCost = gasRequired * wrapper.fees.gasPrice;
|
|
616
765
|
const baseCost = wrapper.fees.base;
|
|
@@ -621,14 +770,19 @@ var RequiredBalanceTransactionStateValidator = /* @__PURE__ */ __name(async (con
|
|
|
621
770
|
}
|
|
622
771
|
errors.push(...await balanceShortfallErrors(context, tx, requiredBalances));
|
|
623
772
|
} catch (ex) {
|
|
624
|
-
errors.push(new HydratedTransactionValidationError(
|
|
773
|
+
errors.push(new HydratedTransactionValidationError(
|
|
774
|
+
tx?.[0]?._hash ?? ZERO_HASH21,
|
|
775
|
+
tx,
|
|
776
|
+
`Failed RequiredBalanceTransactionStateValidator: ${ex}`,
|
|
777
|
+
ex
|
|
778
|
+
));
|
|
625
779
|
}
|
|
626
780
|
return errors;
|
|
627
781
|
}, context);
|
|
628
|
-
}
|
|
782
|
+
};
|
|
629
783
|
|
|
630
784
|
// src/hydratedTransactionState/validateHydratedTransactionState.ts
|
|
631
|
-
var validateHydratedTransactionState =
|
|
785
|
+
var validateHydratedTransactionState = async (context, tx) => {
|
|
632
786
|
return await spanRootAsync4("validateHydratedTransactionState", async () => {
|
|
633
787
|
const errors = [];
|
|
634
788
|
try {
|
|
@@ -637,11 +791,16 @@ var validateHydratedTransactionState = /* @__PURE__ */ __name(async (context, tx
|
|
|
637
791
|
];
|
|
638
792
|
errors.push(...(await Promise.all(validators.map((v) => v(context, tx)))).flat());
|
|
639
793
|
} catch (ex) {
|
|
640
|
-
errors.push(new HydratedTransactionValidationError2(
|
|
794
|
+
errors.push(new HydratedTransactionValidationError2(
|
|
795
|
+
tx?.[0]?._hash ?? ZERO_HASH22,
|
|
796
|
+
tx,
|
|
797
|
+
`Failed validateHydratedTransactionState: ${ex}`,
|
|
798
|
+
ex
|
|
799
|
+
));
|
|
641
800
|
}
|
|
642
801
|
return errors;
|
|
643
802
|
}, context);
|
|
644
|
-
}
|
|
803
|
+
};
|
|
645
804
|
export {
|
|
646
805
|
BlockAllowedPayloadSchemasValidator,
|
|
647
806
|
BlockBoundWitnessValidator,
|
|
@@ -656,4 +815,4 @@ export {
|
|
|
656
815
|
validateHydratedBlockState,
|
|
657
816
|
validateHydratedTransactionState
|
|
658
817
|
};
|
|
659
|
-
//# sourceMappingURL=index.mjs.map
|
|
818
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -1 +1,7 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/block/validateBlock.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/BoundWitness.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","../../src/hydratedTransactionState/validateHydratedTransactionState.ts","../../src/hydratedTransactionState/validators/RequiredBalance.ts"],"sourcesContent":["import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockBoundWitnessValidator,\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 validators: BlockValidatorFunction[] = [\n BlockBoundWitnessValidator,\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/sdk-js'\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 { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport { BoundWitnessValidator } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nconst error = (block: BlockBoundWitness, message: string): BlockValidationError =>\n new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, message)\n\n// Friendly pre-check for the same wallet/producer bug surfaced on the\n// transaction side: signatures emitted under `signatures` instead of\n// `$signatures`. Mirrors TransactionBoundWitnessValidator.\nconst checkSignaturesShape = (block: BlockBoundWitness): BlockValidationError[] => {\n const bw = block as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(block, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(block, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the block's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. Mirrors TransactionBoundWitnessValidator\n * for blocks. Covers signatures (length parity + per-address elliptic-curve\n * verification against the BW data hash), addresses uniqueness,\n * payload_hashes/payload_schemas length parity, schemas, and top-level\n * schema check.\n */\nexport const BlockBoundWitnessValidator: BlockValidatorFunction = async (\n _context,\n block,\n) => {\n try {\n const shapeErrors = checkSignaturesShape(block)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(block)\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(block, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)]\n }\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/sdk-js'\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/sdk-js'\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/sdk-js'\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/sdk-js'\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/sdk-js'\nimport { SchemaSchema } from '@xyo-network/sdk-js'\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 ex,\n )\n errors.push(error)\n }\n return errors\n}\n","import type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport const isElevatedFromBlock = (payload: WithHashMeta<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 { isHashMeta } from '@xyo-network/sdk-js'\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) && isHashMeta(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 isHashMeta'))\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/sdk-js'\nimport { isHashMeta } from '@xyo-network/sdk-js'\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) && isHashMeta(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/sdk-js'\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, Hash } 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,\n isSignedTransactionBoundWitnessWithHashMeta,\n netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nfunction offendingTransactionHashesForAddress(block: Parameters<HydratedBlockStateValidationFunction>[1], address: Address): Hash[] {\n const hashes: Hash[] = []\n for (const payload of block[1]) {\n if (isSignedTransactionBoundWitnessWithHashMeta(payload) && payload.from === address) {\n hashes.push(payload._hash)\n }\n }\n return hashes\n}\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({ singletons: {} }, (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 const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address)\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n undefined,\n offendingTransactionHashes.length > 0 ? offendingTransactionHashes : undefined,\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","import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-sdk'\n\nimport { RequiredBalanceTransactionStateValidator } from './validators/index.ts'\n\nexport const validateHydratedTransactionState: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('validateHydratedTransactionState', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const validators: HydratedTransactionStateValidationFunction[] = [\n RequiredBalanceTransactionStateValidator,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(context, tx)))).flat())\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed validateHydratedTransactionState: ${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 { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n HydratedTransactionWrapper,\n netBalancesForPayloads,\n transactionRequiredGas,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\ntype ValidatorContext = Parameters<HydratedTransactionStateValidationFunction>[0]\ntype ValidatorTx = Parameters<HydratedTransactionStateValidationFunction>[1]\n\n/**\n * For each address with a negative net balance, look up the actual on-chain\n * balance at the current head and emit an `insufficient balance` error if it\n * can't cover the required amount.\n */\nasync function balanceShortfallErrors(\n context: ValidatorContext,\n tx: ValidatorTx,\n requiredBalances: Record<Address, bigint>,\n): Promise<HydratedTransactionValidationError[]> {\n const errors: HydratedTransactionValidationError[] = []\n const requiredAddresses = Object.keys(requiredBalances) as Address[]\n if (requiredAddresses.length === 0) return errors\n const headBlock = (await context.blockViewer.currentBlock())[0]\n const balances = await context.accountBalanceViewer.accountBalances(\n requiredAddresses,\n { head: headBlock._hash },\n )\n for (const address of requiredAddresses) {\n const reqBalance = requiredBalances[address]\n const balance = balances[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n ))\n }\n }\n return errors\n}\n\nexport const RequiredBalanceTransactionStateValidator: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('RequiredBalanceTransactionStateValidator', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const netBalances = netBalancesForPayloads({ singletons: {} }, tx[1])\n\n const wrapper = await HydratedTransactionWrapper.parse(tx)\n const from = wrapper.boundWitness.from as Address\n const gasRequired = transactionRequiredGas(tx)\n // Declared gas limit must cover the gas the tx will actually consume.\n // Without this check a tx could pass admission with `gasLimit < required`\n // and either fail at execution or get unfairly under-charged for the\n // resources it actually uses. Reported alongside any balance shortfall\n // so the caller sees every reason the tx was rejected.\n if (wrapper.fees.gasLimit < gasRequired) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`,\n ))\n }\n const gasCost = gasRequired * wrapper.fees.gasPrice\n const baseCost = wrapper.fees.base\n netBalances[from] = (netBalances[from] ?? 0n) - gasCost - baseCost\n\n const requiredBalances: Record<Address, bigint> = {}\n for (const [address, net] of Object.entries(netBalances) as [Address, bigint][]) {\n if (net < 0n) requiredBalances[address] = -net\n }\n\n errors.push(...(await balanceShortfallErrors(context, tx, requiredBalances)))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed RequiredBalanceTransactionStateValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n"],"mappings":"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","names":["ZERO_HASH","BlockValidationError","ZERO_HASH","BlockValidationError","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","context","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","BlockValidationError","_hash","ZERO_HASH","ex","ZERO_HASH","BoundWitnessValidator","BlockValidationError","error","block","message","BlockValidationError","_hash","ZERO_HASH","checkSignaturesShape","bw","$signatures","undefined","Array","isArray","signatures","BlockBoundWitnessValidator","_context","shapeErrors","length","bwValidator","BoundWitnessValidator","bwErrors","validate","map","e","ex","String","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","validators","BlockBoundWitnessValidator","BlockFieldsValidator","BlockPreviousHashValidator","BlockAllowedPayloadSchemasValidator","push","Promise","all","map","validator","flat","ex","BlockValidationError","_hash","ZERO_HASH","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","isHashMeta","BoundWitnessSignaturesValidator","InBlockPayloadValidationError","isTransactionBoundWitness","validateTransaction","validateTransactionInBlock","context","payload","block","errors","isTransactionBoundWitness","isHashMeta","txErrors","validateTransaction","chainId","chain","txError","push","InBlockPayloadValidationError","_hash","txSignatureErrors","BoundWitnessSignaturesValidator","txSignatureError","ex","ZERO_HASH","isHashMeta","validateTypedPayloadInBlock","context","payload","block","identityFunction","errors","isHashMeta","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","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","isSignedTransactionBoundWitnessWithHashMeta","netBalancesForPayloads","XYO_ZERO_ADDRESS","offendingTransactionHashesForAddress","block","address","hashes","payload","isSignedTransactionBoundWitnessWithHashMeta","from","push","_hash","RequiredBalanceBlockStateValidator","context","spanRootAsync","errors","chainId","netBalances","netBalancesForPayloads","singletons","netBalanceAddresses","Object","keys","requiredBalances","previous","HydratedBlockStateValidationError","ZERO_HASH","chainIdAtBlockNumber","reqBalance","entries","result","accountBalance","accountBalances","head","balance","AttoXL1","XYO_ZERO_ADDRESS","offendingTransactionHashes","undefined","length","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","spanRootAsync","ZERO_HASH","HydratedTransactionValidationError","spanRootAsync","ZERO_HASH","AttoXL1","HydratedTransactionValidationError","HydratedTransactionWrapper","netBalancesForPayloads","transactionRequiredGas","XYO_ZERO_ADDRESS","balanceShortfallErrors","context","tx","requiredBalances","errors","requiredAddresses","Object","keys","length","headBlock","blockViewer","currentBlock","balances","accountBalanceViewer","accountBalances","head","_hash","address","reqBalance","balance","AttoXL1","XYO_ZERO_ADDRESS","push","HydratedTransactionValidationError","ZERO_HASH","RequiredBalanceTransactionStateValidator","spanRootAsync","netBalances","netBalancesForPayloads","singletons","wrapper","HydratedTransactionWrapper","parse","from","boundWitness","gasRequired","transactionRequiredGas","fees","gasLimit","gasCost","gasPrice","baseCost","base","net","entries","ex","validateHydratedTransactionState","context","tx","spanRootAsync","errors","validators","RequiredBalanceTransactionStateValidator","push","Promise","all","map","v","flat","ex","HydratedTransactionValidationError","_hash","ZERO_HASH"]}
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/block/validateBlock.ts", "../../src/block/validators/AllowedPayloadSchemas.ts", "../../src/block/validators/BoundWitness.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", "../../src/hydratedTransactionState/validateHydratedTransactionState.ts", "../../src/hydratedTransactionState/validators/RequiredBalance.ts"],
|
|
4
|
+
"sourcesContent": ["import { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport type {\n BaseContext,\n BlockBoundWitness, BlockValidatorFunction, ChainId,\n} from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockBoundWitnessValidator,\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 validators: BlockValidatorFunction[] = [\n BlockBoundWitnessValidator,\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/sdk-js'\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 { ZERO_HASH } from '@xylabs/sdk-js'\nimport type { WithStorageMeta } from '@xyo-network/sdk-js'\nimport { BoundWitnessValidator } from '@xyo-network/sdk-js'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-sdk'\nimport { BlockValidationError } from '@xyo-network/xl1-sdk'\n\nconst error = (block: BlockBoundWitness, message: string): BlockValidationError =>\n new BlockValidationError((block as WithStorageMeta<BlockBoundWitness>)?._hash ?? ZERO_HASH, block, message)\n\n// Friendly pre-check for the same wallet/producer bug surfaced on the\n// transaction side: signatures emitted under `signatures` instead of\n// `$signatures`. Mirrors TransactionBoundWitnessValidator.\nconst checkSignaturesShape = (block: BlockBoundWitness): BlockValidationError[] => {\n const bw = block as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(block, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(block, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the block's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. Mirrors TransactionBoundWitnessValidator\n * for blocks. Covers signatures (length parity + per-address elliptic-curve\n * verification against the BW data hash), addresses uniqueness,\n * payload_hashes/payload_schemas length parity, schemas, and top-level\n * schema check.\n */\nexport const BlockBoundWitnessValidator: BlockValidatorFunction = async (\n _context,\n block,\n) => {\n try {\n const shapeErrors = checkSignaturesShape(block)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(block)\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(block, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(block, `Failed BlockBoundWitnessValidator: ${String(ex)}`)]\n }\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/sdk-js'\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/sdk-js'\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/sdk-js'\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/sdk-js'\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/sdk-js'\nimport { SchemaSchema } from '@xyo-network/sdk-js'\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 ex,\n )\n errors.push(error)\n }\n return errors\n}\n", "import type { Payload, WithHashMeta } from '@xyo-network/sdk-js'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-sdk'\n\nexport const isElevatedFromBlock = (payload: WithHashMeta<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 { isHashMeta } from '@xyo-network/sdk-js'\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) && isHashMeta(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 isHashMeta'))\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/sdk-js'\nimport { isHashMeta } from '@xyo-network/sdk-js'\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) && isHashMeta(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/sdk-js'\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, Hash } 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,\n isSignedTransactionBoundWitnessWithHashMeta,\n netBalancesForPayloads, XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\nfunction offendingTransactionHashesForAddress(block: Parameters<HydratedBlockStateValidationFunction>[1], address: Address): Hash[] {\n const hashes: Hash[] = []\n for (const payload of block[1]) {\n if (isSignedTransactionBoundWitnessWithHashMeta(payload) && payload.from === address) {\n hashes.push(payload._hash)\n }\n }\n return hashes\n}\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({ singletons: {} }, (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 const offendingTransactionHashes = offendingTransactionHashesForAddress(block, address)\n errors.push(new HydratedBlockStateValidationError(\n block?.[0]?._hash ?? ZERO_HASH,\n chainId,\n block,\n `insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`,\n undefined,\n offendingTransactionHashes.length > 0 ? offendingTransactionHashes : undefined,\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", "import { spanRootAsync, ZERO_HASH } from '@xylabs/sdk-js'\nimport type { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport { HydratedTransactionValidationError } from '@xyo-network/xl1-sdk'\n\nimport { RequiredBalanceTransactionStateValidator } from './validators/index.ts'\n\nexport const validateHydratedTransactionState: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('validateHydratedTransactionState', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const validators: HydratedTransactionStateValidationFunction[] = [\n RequiredBalanceTransactionStateValidator,\n ]\n errors.push(...(await Promise.all(validators.map(v => v(context, tx)))).flat())\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed validateHydratedTransactionState: ${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 { HydratedTransactionStateValidationFunction } from '@xyo-network/xl1-sdk'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n HydratedTransactionWrapper,\n netBalancesForPayloads,\n transactionRequiredGas,\n XYO_ZERO_ADDRESS,\n} from '@xyo-network/xl1-sdk'\n\ntype ValidatorContext = Parameters<HydratedTransactionStateValidationFunction>[0]\ntype ValidatorTx = Parameters<HydratedTransactionStateValidationFunction>[1]\n\n/**\n * For each address with a negative net balance, look up the actual on-chain\n * balance at the current head and emit an `insufficient balance` error if it\n * can't cover the required amount.\n */\nasync function balanceShortfallErrors(\n context: ValidatorContext,\n tx: ValidatorTx,\n requiredBalances: Record<Address, bigint>,\n): Promise<HydratedTransactionValidationError[]> {\n const errors: HydratedTransactionValidationError[] = []\n const requiredAddresses = Object.keys(requiredBalances) as Address[]\n if (requiredAddresses.length === 0) return errors\n const headBlock = (await context.blockViewer.currentBlock())[0]\n const balances = await context.accountBalanceViewer.accountBalances(\n requiredAddresses,\n { head: headBlock._hash },\n )\n for (const address of requiredAddresses) {\n const reqBalance = requiredBalances[address]\n const balance = balances[address] ?? AttoXL1(0n)\n if (address !== XYO_ZERO_ADDRESS && reqBalance > balance) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `insufficient balance for ${address} ${balance} < ${reqBalance}`,\n ))\n }\n }\n return errors\n}\n\nexport const RequiredBalanceTransactionStateValidator: HydratedTransactionStateValidationFunction = async (\n context,\n tx,\n) => {\n return await spanRootAsync('RequiredBalanceTransactionStateValidator', async () => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const netBalances = netBalancesForPayloads({ singletons: {} }, tx[1])\n\n const wrapper = await HydratedTransactionWrapper.parse(tx)\n const from = wrapper.boundWitness.from as Address\n const gasRequired = transactionRequiredGas(tx)\n // Declared gas limit must cover the gas the tx will actually consume.\n // Without this check a tx could pass admission with `gasLimit < required`\n // and either fail at execution or get unfairly under-charged for the\n // resources it actually uses. Reported alongside any balance shortfall\n // so the caller sees every reason the tx was rejected.\n if (wrapper.fees.gasLimit < gasRequired) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit ${wrapper.fees.gasLimit} < required gas ${gasRequired}`,\n ))\n }\n const gasCost = gasRequired * wrapper.fees.gasPrice\n const baseCost = wrapper.fees.base\n netBalances[from] = (netBalances[from] ?? 0n) - gasCost - baseCost\n\n const requiredBalances: Record<Address, bigint> = {}\n for (const [address, net] of Object.entries(netBalances) as [Address, bigint][]) {\n if (net < 0n) requiredBalances[address] = -net\n }\n\n errors.push(...(await balanceShortfallErrors(context, tx, requiredBalances)))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed RequiredBalanceTransactionStateValidator: ${ex}`,\n ex,\n ))\n }\n return errors\n }, context)\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "ZERO_HASH", "BlockValidationError", "error", "ZERO_HASH", "BlockValidationError", "error", "BlockValidationError", "ZERO_HASH", "ZERO_HASH", "HydratedBlockValidationError", "ZERO_HASH", "ZERO_HASH", "BoundWitnessSchema", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "transactionsFromHydratedBlock", "ZERO_HASH", "InBlockPayloadValidationError", "isTransactionBoundWitness", "isHashMeta", "isHashMeta", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "ZERO_HASH", "InBlockPayloadValidationError", "InBlockPayloadValidationError", "ZERO_HASH", "BoundWitnessSchema", "InBlockPayloadValidationError", "ZERO_HASH", "error", "ZERO_HASH", "HydratedBlockValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "HydratedBlockStateValidationError", "ZERO_HASH", "spanRootAsync", "ZERO_HASH", "HydratedTransactionValidationError", "spanRootAsync", "ZERO_HASH", "AttoXL1", "netBalancesForPayloads", "XYO_ZERO_ADDRESS", "spanRootAsync", "HydratedTransactionValidationError", "ZERO_HASH"]
|
|
7
|
+
}
|
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.23.
|
|
4
|
+
"version": "1.23.2",
|
|
5
5
|
"description": "XYO Layer One SDK Validation",
|
|
6
6
|
"homepage": "https://xylabs.com",
|
|
7
7
|
"bugs": {
|
|
@@ -47,8 +47,8 @@
|
|
|
47
47
|
"@xylabs/geo": "^5.1.2",
|
|
48
48
|
"@xylabs/sdk-js": "^5.1.2",
|
|
49
49
|
"@xylabs/threads": "~5.1.2",
|
|
50
|
-
"@xylabs/toolchain": "~
|
|
51
|
-
"@xylabs/tsconfig": "~
|
|
50
|
+
"@xylabs/toolchain": "~8.0.4",
|
|
51
|
+
"@xylabs/tsconfig": "~8.0.4",
|
|
52
52
|
"@xylabs/vitest-extended": "~5.1.2",
|
|
53
53
|
"@xyo-network/account": "~5.6.2",
|
|
54
54
|
"@xyo-network/account-model": "~5.6.3",
|
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
"@xyo-network/sdk-protocol-js": "~5.6.3",
|
|
70
70
|
"@xyo-network/wallet": "~5.6.2",
|
|
71
71
|
"@xyo-network/wallet-model": "^5.6.3",
|
|
72
|
-
"@xyo-network/xl1-sdk": "^1.30.
|
|
72
|
+
"@xyo-network/xl1-sdk": "^1.30.2",
|
|
73
73
|
"ajv": "^8.20.0",
|
|
74
74
|
"async-mutex": "^0.5.0",
|
|
75
75
|
"bn.js": "^5.2.3",
|
|
@@ -86,15 +86,15 @@
|
|
|
86
86
|
"observable-fns": "~0.6.1",
|
|
87
87
|
"pako": "^2.1.0",
|
|
88
88
|
"store2": "~2.14.4",
|
|
89
|
-
"typescript": "~
|
|
89
|
+
"typescript": "~6.0.3",
|
|
90
90
|
"uuid": "~14.0.0",
|
|
91
|
-
"vite": "^8.0.
|
|
91
|
+
"vite": "^8.0.13",
|
|
92
92
|
"vitest": "^4.1.6",
|
|
93
93
|
"wasm-feature-detect": "~1.8.0",
|
|
94
94
|
"webextension-polyfill": "^0.12.0",
|
|
95
95
|
"zod": "~4.4.3",
|
|
96
|
-
"@xyo-network/chain-protocol": "~1.23.
|
|
97
|
-
"@xyo-network/chain-protocol
|
|
96
|
+
"@xyo-network/chain-protocol-test": "~1.23.2",
|
|
97
|
+
"@xyo-network/chain-protocol": "~1.23.2"
|
|
98
98
|
},
|
|
99
99
|
"peerDependencies": {
|
|
100
100
|
"@bitauth/libauth": "~3.0",
|