@xyo-network/chain-validation 1.1.7 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/neutral/index.mjs +116 -105
- package/dist/neutral/index.mjs.map +1 -1
- package/dist/types/block/index.d.ts +0 -1
- package/dist/types/block/index.d.ts.map +1 -1
- package/dist/types/block/validateBlock.d.ts +1 -1
- package/dist/types/block/validateBlock.d.ts.map +1 -1
- package/dist/types/block/validators/AllowedPayloadSchemas.d.ts +1 -1
- package/dist/types/block/validators/AllowedPayloadSchemas.d.ts.map +1 -1
- package/dist/types/block/validators/Fields.d.ts +1 -1
- package/dist/types/block/validators/Fields.d.ts.map +1 -1
- package/dist/types/block/validators/JsonSchema.d.ts +1 -1
- package/dist/types/block/validators/JsonSchema.d.ts.map +1 -1
- package/dist/types/block/validators/PreviousHash.d.ts +1 -1
- package/dist/types/block/validators/PreviousHash.d.ts.map +1 -1
- package/dist/types/boundwitness/index.d.ts +0 -2
- package/dist/types/boundwitness/index.d.ts.map +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessReferences.d.ts +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessReferences.d.ts.map +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessSignatures.d.ts +1 -1
- package/dist/types/boundwitness/validators/BoundWitnessSignatures.d.ts.map +1 -1
- package/dist/types/elevatedPayload/index.d.ts +1 -7
- package/dist/types/elevatedPayload/index.d.ts.map +1 -1
- package/dist/types/elevatedPayload/lib/index.d.ts +7 -0
- package/dist/types/elevatedPayload/lib/index.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/isElevatedFromBlock.d.ts +4 -0
- package/dist/types/elevatedPayload/lib/isElevatedFromBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateElevatedFromBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/lib/validateElevatedFromBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateElevatedFromTransaction.d.ts +3 -0
- package/dist/types/elevatedPayload/lib/validateElevatedFromTransaction.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateIncludedInBlock.d.ts +4 -0
- package/dist/types/elevatedPayload/lib/validateIncludedInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateTransactionInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/lib/validateTransactionInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts +5 -0
- package/dist/types/elevatedPayload/lib/validateTypedPayloadInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/index.d.ts +5 -0
- package/dist/types/elevatedPayload/payloads/index.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/payloads/validateChainStakeIntentInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/validateHashInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/payloads/validateHashInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/validateSchemaInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/payloads/validateSchemaInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/payloads/validateTransferInBlock.d.ts.map +1 -0
- package/dist/types/elevatedPayload/validatePayloadInBlock.d.ts +3 -0
- package/dist/types/elevatedPayload/validatePayloadInBlock.d.ts.map +1 -0
- package/dist/types/hydratedBlock/index.d.ts +0 -1
- package/dist/types/hydratedBlock/index.d.ts.map +1 -1
- package/dist/types/hydratedBlock/validateHydratedBlock.d.ts +1 -1
- package/dist/types/hydratedBlock/validateHydratedBlock.d.ts.map +1 -1
- package/dist/types/hydratedBlock/validators/Payloads.d.ts +1 -1
- package/dist/types/hydratedBlock/validators/Payloads.d.ts.map +1 -1
- package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts +2 -2
- package/dist/types/hydratedBlockState/validateHydratedBlockState.d.ts.map +1 -1
- package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts +2 -2
- package/dist/types/hydratedBlockState/validators/RequiredBalance.d.ts.map +1 -1
- package/dist/types/transaction/validateTransaction.d.ts +3 -2
- package/dist/types/transaction/validateTransaction.d.ts.map +1 -1
- package/dist/types/transaction/validators/{TransactionElevation.d.ts → TransactionElevationValidator.d.ts} +1 -1
- package/dist/types/transaction/validators/TransactionElevationValidator.d.ts.map +1 -0
- package/dist/types/transaction/validators/TransactionFromValidator.d.ts +3 -0
- package/dist/types/transaction/validators/TransactionFromValidator.d.ts.map +1 -0
- package/dist/types/transaction/validators/{TransactionJsonSchema.d.ts → TransactionJsonSchemaValidator.d.ts} +1 -1
- package/dist/types/transaction/validators/TransactionJsonSchemaValidator.d.ts.map +1 -0
- package/dist/types/transaction/validators/{TransactionProtocol.d.ts → TransactionProtocolValidator.d.ts} +1 -1
- package/dist/types/transaction/validators/TransactionProtocolValidator.d.ts.map +1 -0
- package/dist/types/transaction/validators/index.d.ts +4 -3
- package/dist/types/transaction/validators/index.d.ts.map +1 -1
- package/package.json +16 -17
- package/src/block/index.ts +0 -1
- package/src/block/validateBlock.ts +1 -2
- package/src/block/validators/AllowedPayloadSchemas.ts +3 -4
- package/src/block/validators/Fields.ts +1 -3
- package/src/block/validators/JsonSchema.ts +1 -3
- package/src/block/validators/PreviousHash.ts +1 -3
- package/src/boundwitness/index.ts +0 -2
- package/src/boundwitness/validators/BoundWitnessReferences.ts +1 -2
- package/src/boundwitness/validators/BoundWitnessSignatures.ts +1 -2
- package/src/elevatedPayload/index.ts +1 -7
- package/src/elevatedPayload/lib/index.ts +6 -0
- package/src/elevatedPayload/lib/isElevatedFromBlock.ts +12 -0
- package/src/elevatedPayload/{validateElevatedInBlock.ts → lib/validateElevatedFromBlock.ts} +2 -4
- package/src/elevatedPayload/lib/validateElevatedFromTransaction.ts +20 -0
- package/src/elevatedPayload/lib/validateIncludedInBlock.ts +10 -0
- package/src/elevatedPayload/lib/validateTransactionInBlock.ts +18 -0
- package/src/elevatedPayload/lib/validateTypedPayloadInBlock.ts +27 -0
- package/src/elevatedPayload/payloads/index.ts +4 -0
- package/src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts +13 -0
- package/src/elevatedPayload/payloads/validateHashInBlock.ts +13 -0
- package/src/elevatedPayload/payloads/validateSchemaInBlock.ts +13 -0
- package/src/elevatedPayload/payloads/validateTransferInBlock.ts +14 -0
- package/src/elevatedPayload/validatePayloadInBlock.ts +37 -0
- package/src/hydratedBlock/index.ts +0 -1
- package/src/hydratedBlock/validateHydratedBlock.ts +6 -3
- package/src/hydratedBlock/validators/Payloads.ts +9 -36
- package/src/hydratedBlockState/validateHydratedBlockState.ts +4 -4
- package/src/hydratedBlockState/validators/RequiredBalance.ts +2 -2
- package/src/transaction/validateTransaction.ts +8 -9
- package/src/transaction/validators/TransactionElevationValidator.ts +12 -0
- package/src/transaction/validators/TransactionFromValidator.ts +16 -0
- package/src/transaction/validators/{TransactionJsonSchema.ts → TransactionJsonSchemaValidator.ts} +2 -1
- package/src/transaction/validators/{TransactionProtocol.ts → TransactionProtocolValidator.ts} +4 -6
- package/src/transaction/validators/index.ts +4 -3
- package/babel.config.json +0 -6
- package/dist/types/block/BlockValidationFunction.d.ts +0 -5
- package/dist/types/block/BlockValidationFunction.d.ts.map +0 -1
- package/dist/types/boundwitness/BoundWitnessValidationFunction.d.ts +0 -4
- package/dist/types/boundwitness/BoundWitnessValidationFunction.d.ts.map +0 -1
- package/dist/types/boundwitness/HydratedBoundWitnessValidationFunction.d.ts +0 -5
- package/dist/types/boundwitness/HydratedBoundWitnessValidationFunction.d.ts.map +0 -1
- package/dist/types/elevatedPayload/InBlockPayloadValidationFunction.d.ts +0 -6
- package/dist/types/elevatedPayload/InBlockPayloadValidationFunction.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateChainStakeIntentInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateChainStakeIntentInBlock.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateElevatedInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateElevatedInBlock.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateElevatedInTransaction.d.ts +0 -3
- package/dist/types/elevatedPayload/validateElevatedInTransaction.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateSchemaInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateSchemaInBlock.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateTransactionInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateTransactionInBlock.d.ts.map +0 -1
- package/dist/types/elevatedPayload/validateTransferInBlock.d.ts +0 -3
- package/dist/types/elevatedPayload/validateTransferInBlock.d.ts.map +0 -1
- package/dist/types/hydratedBlock/HydratedBlockValidationFunction.d.ts +0 -5
- package/dist/types/hydratedBlock/HydratedBlockValidationFunction.d.ts.map +0 -1
- package/dist/types/transaction/validators/TransactionElevation.d.ts.map +0 -1
- package/dist/types/transaction/validators/TransactionJsonSchema.d.ts.map +0 -1
- package/dist/types/transaction/validators/TransactionProtocol.d.ts.map +0 -1
- package/src/block/BlockValidationFunction.ts +0 -8
- package/src/boundwitness/BoundWitnessValidationFunction.ts +0 -6
- package/src/boundwitness/HydratedBoundWitnessValidationFunction.ts +0 -7
- package/src/elevatedPayload/InBlockPayloadValidationFunction.ts +0 -8
- package/src/elevatedPayload/validateChainStakeIntentInBlock.ts +0 -29
- package/src/elevatedPayload/validateElevatedInTransaction.ts +0 -23
- package/src/elevatedPayload/validateSchemaInBlock.ts +0 -24
- package/src/elevatedPayload/validateTransactionInBlock.ts +0 -18
- package/src/elevatedPayload/validateTransferInBlock.ts +0 -24
- package/src/hydratedBlock/HydratedBlockValidationFunction.ts +0 -8
- package/src/transaction/validators/TransactionElevation.ts +0 -28
package/dist/neutral/index.mjs
CHANGED
|
@@ -63,7 +63,7 @@ var BoundWitnessSignaturesValidator = /* @__PURE__ */ __name(async (bw) => {
|
|
|
63
63
|
}, "BoundWitnessSignaturesValidator");
|
|
64
64
|
|
|
65
65
|
// src/block/validators/AllowedPayloadSchemas.ts
|
|
66
|
-
import { isAllowedBlockPayloadSchema } from "@xyo-network/
|
|
66
|
+
import { isAllowedBlockPayloadSchema } from "@xyo-network/xl1-model";
|
|
67
67
|
var BlockAllowedPayloadSchemasValidator = /* @__PURE__ */ __name((block) => {
|
|
68
68
|
const errors = [];
|
|
69
69
|
for (const schema of block.payload_schemas) {
|
|
@@ -141,117 +141,133 @@ var validateBlock = /* @__PURE__ */ __name(async (block, chainId) => {
|
|
|
141
141
|
}
|
|
142
142
|
}, "validateBlock");
|
|
143
143
|
|
|
144
|
-
// src/
|
|
144
|
+
// src/elevatedPayload/validatePayloadInBlock.ts
|
|
145
145
|
import { BoundWitnessSchema } from "@xyo-network/boundwitness-model";
|
|
146
146
|
import { SchemaSchema } from "@xyo-network/schema-payload-plugin";
|
|
147
|
-
import { ChainStakeIntentSchema, TransferSchema } from "@xyo-network/xl1-model";
|
|
147
|
+
import { ChainStakeIntentSchema, HashSchema, TransferSchema } from "@xyo-network/xl1-model";
|
|
148
148
|
|
|
149
|
-
// src/elevatedPayload/
|
|
150
|
-
import {
|
|
149
|
+
// src/elevatedPayload/lib/isElevatedFromBlock.ts
|
|
150
|
+
import { isTransactionBoundWitness } from "@xyo-network/xl1-model";
|
|
151
|
+
var isElevatedFromBlock = /* @__PURE__ */ __name((payload, [, payloads]) => {
|
|
152
|
+
const txs = payloads.filter((p) => isTransactionBoundWitness(p));
|
|
153
|
+
for (const tx of txs) {
|
|
154
|
+
if (tx.payload_hashes.includes(payload._hash)) {
|
|
155
|
+
return false;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
return true;
|
|
159
|
+
}, "isElevatedFromBlock");
|
|
151
160
|
|
|
152
|
-
// src/elevatedPayload/
|
|
161
|
+
// src/elevatedPayload/lib/validateElevatedFromBlock.ts
|
|
153
162
|
import { transactionPayloadsFromHydratedBlock } from "@xyo-network/chain-protocol";
|
|
154
|
-
var
|
|
163
|
+
var validateElevatedFromBlock = /* @__PURE__ */ __name((payload, block) => {
|
|
155
164
|
const errors = [];
|
|
156
165
|
const txPayloadHashes = new Set(transactionPayloadsFromHydratedBlock(block).map((tx) => tx._hash));
|
|
157
166
|
if (txPayloadHashes.has(payload._hash)) {
|
|
158
167
|
errors.push(new Error(`Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`));
|
|
159
168
|
}
|
|
160
169
|
return errors;
|
|
161
|
-
}, "
|
|
170
|
+
}, "validateElevatedFromBlock");
|
|
162
171
|
|
|
163
|
-
// src/elevatedPayload/
|
|
172
|
+
// src/elevatedPayload/lib/validateElevatedFromTransaction.ts
|
|
164
173
|
import { transactionsFromHydratedBlock } from "@xyo-network/chain-protocol";
|
|
165
|
-
var
|
|
174
|
+
var validateElevatedFromTransaction = /* @__PURE__ */ __name((payload, block) => {
|
|
166
175
|
const errors = [];
|
|
167
176
|
const txs = transactionsFromHydratedBlock(block);
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
const hashes = fromTxs.flatMap((tx) => tx.payload_hashes);
|
|
177
|
+
if (txs.length > 0) {
|
|
178
|
+
const hashes = txs.flatMap((tx) => tx.payload_hashes);
|
|
171
179
|
if (!hashes.includes(payload._hash)) {
|
|
172
180
|
errors.push(new Error("Transaction does not include payload"));
|
|
173
181
|
}
|
|
174
182
|
} else {
|
|
175
|
-
errors.push(new Error(
|
|
183
|
+
errors.push(new Error("No Transactions in block"));
|
|
176
184
|
}
|
|
177
185
|
return errors;
|
|
178
|
-
}, "
|
|
186
|
+
}, "validateElevatedFromTransaction");
|
|
179
187
|
|
|
180
|
-
// src/elevatedPayload/
|
|
181
|
-
|
|
188
|
+
// src/elevatedPayload/lib/validateTransactionInBlock.ts
|
|
189
|
+
import { isStorageMeta } from "@xyo-network/payload-model";
|
|
190
|
+
import { isTransactionBoundWitness as isTransactionBoundWitness2 } from "@xyo-network/xl1-model";
|
|
191
|
+
var validateTransactionInBlock = /* @__PURE__ */ __name(async (payload, _block) => {
|
|
182
192
|
const errors = [];
|
|
183
|
-
if (
|
|
184
|
-
errors.push(
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
errors.push(new Error("ChainStakeIntent not included in block"));
|
|
193
|
+
if (isTransactionBoundWitness2(payload) && isStorageMeta(payload)) {
|
|
194
|
+
errors.push(...await BoundWitnessSignaturesValidator(payload));
|
|
195
|
+
} else {
|
|
196
|
+
errors.push(new Error("Payload failed isTransactionBoundWitness or isStorageMeta"));
|
|
188
197
|
}
|
|
189
|
-
|
|
190
|
-
|
|
198
|
+
return errors;
|
|
199
|
+
}, "validateTransactionInBlock");
|
|
200
|
+
|
|
201
|
+
// src/elevatedPayload/lib/validateTypedPayloadInBlock.ts
|
|
202
|
+
import { isStorageMeta as isStorageMeta2 } from "@xyo-network/payload-model";
|
|
203
|
+
var validateTypedPayloadInBlock = /* @__PURE__ */ __name(async (payload, block, identityFunction) => {
|
|
204
|
+
const errors = [];
|
|
205
|
+
if (identityFunction(payload) && isStorageMeta2(payload)) {
|
|
206
|
+
if (isElevatedFromBlock(payload, block)) {
|
|
207
|
+
errors.push(...await validateElevatedFromBlock(payload, block));
|
|
208
|
+
} else {
|
|
209
|
+
errors.push(...await validateElevatedFromTransaction(payload, block));
|
|
210
|
+
}
|
|
191
211
|
} else {
|
|
192
|
-
errors.push(
|
|
212
|
+
errors.push(new Error("Payload failed identityFunction or isElevated or isStorageMeta"));
|
|
193
213
|
}
|
|
194
214
|
return errors;
|
|
215
|
+
}, "validateTypedPayloadInBlock");
|
|
216
|
+
|
|
217
|
+
// src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts
|
|
218
|
+
import { isChainStakeIntent } from "@xyo-network/xl1-model";
|
|
219
|
+
var validateChainStakeIntentInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
220
|
+
const errors = [];
|
|
221
|
+
errors.push(...await validateTypedPayloadInBlock(payload, block, isChainStakeIntent));
|
|
222
|
+
return errors;
|
|
195
223
|
}, "validateChainStakeIntentInBlock");
|
|
196
224
|
|
|
197
|
-
// src/elevatedPayload/
|
|
225
|
+
// src/elevatedPayload/payloads/validateHashInBlock.ts
|
|
226
|
+
import { isHashPayload } from "@xyo-network/xl1-model";
|
|
227
|
+
var validateHashInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
228
|
+
const errors = [];
|
|
229
|
+
errors.push(...await validateTypedPayloadInBlock(payload, block, isHashPayload));
|
|
230
|
+
return errors;
|
|
231
|
+
}, "validateHashInBlock");
|
|
232
|
+
|
|
233
|
+
// src/elevatedPayload/payloads/validateSchemaInBlock.ts
|
|
198
234
|
import { isSchemaPayload } from "@xyo-network/schema-payload-plugin";
|
|
199
|
-
var validateSchemaInBlock = /* @__PURE__ */ __name(async (payload, block
|
|
235
|
+
var validateSchemaInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
200
236
|
const errors = [];
|
|
201
|
-
|
|
202
|
-
errors.push(new Error("Payload is not a schema"));
|
|
203
|
-
}
|
|
204
|
-
if (payload.from === chainId || block[0].addresses.includes(payload.from)) {
|
|
205
|
-
errors.push(...await validateElevatedInBlock(payload, block, chainId));
|
|
206
|
-
} else {
|
|
207
|
-
errors.push(...await validateElevatedInTransaction(payload, block, chainId));
|
|
208
|
-
}
|
|
237
|
+
errors.push(...await validateTypedPayloadInBlock(payload, block, isSchemaPayload));
|
|
209
238
|
return errors;
|
|
210
239
|
}, "validateSchemaInBlock");
|
|
211
240
|
|
|
212
|
-
// src/elevatedPayload/
|
|
213
|
-
import {
|
|
214
|
-
var
|
|
241
|
+
// src/elevatedPayload/payloads/validateTransferInBlock.ts
|
|
242
|
+
import { isTransfer } from "@xyo-network/xl1-model";
|
|
243
|
+
var validateTransferInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
215
244
|
const errors = [];
|
|
216
|
-
|
|
217
|
-
errors.push(...await BoundWitnessSignaturesValidator(payload));
|
|
218
|
-
} else {
|
|
219
|
-
errors.push(new Error("Payload is not a transaction"));
|
|
220
|
-
}
|
|
245
|
+
errors.push(...await validateTypedPayloadInBlock(payload, block, isTransfer));
|
|
221
246
|
return errors;
|
|
222
|
-
}, "
|
|
247
|
+
}, "validateTransferInBlock");
|
|
223
248
|
|
|
224
|
-
// src/elevatedPayload/
|
|
225
|
-
|
|
226
|
-
|
|
249
|
+
// src/elevatedPayload/validatePayloadInBlock.ts
|
|
250
|
+
var payloadValidators = {
|
|
251
|
+
[HashSchema]: validateHashInBlock,
|
|
252
|
+
[TransferSchema]: validateTransferInBlock,
|
|
253
|
+
[SchemaSchema]: validateSchemaInBlock,
|
|
254
|
+
[ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
|
|
255
|
+
[BoundWitnessSchema]: validateTransactionInBlock
|
|
256
|
+
};
|
|
257
|
+
var validatePayloadInBlock = /* @__PURE__ */ __name(async (payload, block) => {
|
|
227
258
|
const errors = [];
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
if (payload.from === chainId || block[0].addresses.includes(payload.from)) {
|
|
232
|
-
errors.push(...await validateElevatedInBlock(payload, block, chainId));
|
|
259
|
+
const validator = payloadValidators[payload.schema];
|
|
260
|
+
if (validator) {
|
|
261
|
+
errors.push(...await validator(payload, block));
|
|
233
262
|
} else {
|
|
234
|
-
errors.push(
|
|
263
|
+
errors.push(new Error(`Unsupported payload schema: ${payload.schema}`));
|
|
235
264
|
}
|
|
236
265
|
return errors;
|
|
237
|
-
}, "
|
|
266
|
+
}, "validatePayloadInBlock");
|
|
238
267
|
|
|
239
268
|
// src/hydratedBlock/validators/Payloads.ts
|
|
240
|
-
var PayloadsInBlockValidator = /* @__PURE__ */ __name(async ([block, payloads]
|
|
269
|
+
var PayloadsInBlockValidator = /* @__PURE__ */ __name(async ([block, payloads]) => {
|
|
241
270
|
const errors = [];
|
|
242
|
-
const validators = {
|
|
243
|
-
[TransferSchema]: validateTransferInBlock,
|
|
244
|
-
[ChainStakeIntentSchema]: validateChainStakeIntentInBlock,
|
|
245
|
-
[BoundWitnessSchema]: (payload) => {
|
|
246
|
-
console.error("TODO: Fix first block check with dual step singing");
|
|
247
|
-
return block.block === 0 ? [] : validateTransactionInBlock(payload, [
|
|
248
|
-
block,
|
|
249
|
-
payloads
|
|
250
|
-
], chainId);
|
|
251
|
-
},
|
|
252
|
-
[SchemaSchema]: validateSchemaInBlock
|
|
253
|
-
};
|
|
254
|
-
const allowedSchemas = Object.keys(validators);
|
|
255
271
|
const payloadMap = {};
|
|
256
272
|
for (const payload of payloads) {
|
|
257
273
|
payloadMap[payload._hash] = payload;
|
|
@@ -259,15 +275,12 @@ var PayloadsInBlockValidator = /* @__PURE__ */ __name(async ([block, payloads],
|
|
|
259
275
|
for (let i = 0; i < block.payload_hashes.length; i++) {
|
|
260
276
|
const hash = block.payload_hashes[i];
|
|
261
277
|
const schema = block.payload_schemas[i];
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
} else {
|
|
269
|
-
errors.push(new Error(`invalid payload schema ${hash} ${schema}`));
|
|
270
|
-
}
|
|
278
|
+
const payload = payloadMap[hash];
|
|
279
|
+
if (payload) {
|
|
280
|
+
errors.push(...await validatePayloadInBlock(payload, [
|
|
281
|
+
block,
|
|
282
|
+
payloads
|
|
283
|
+
]));
|
|
271
284
|
delete payloadMap[hash];
|
|
272
285
|
} else {
|
|
273
286
|
errors.push(new Error(`missing payload ${hash} ${schema}`));
|
|
@@ -336,29 +349,28 @@ var validateHydratedBlockState = /* @__PURE__ */ __name(async (hydratedBlock, ch
|
|
|
336
349
|
}, "validateHydratedBlockState");
|
|
337
350
|
|
|
338
351
|
// src/transaction/validateTransaction.ts
|
|
339
|
-
import { isTransactionBoundWitness as
|
|
352
|
+
import { isTransactionBoundWitness as isTransactionBoundWitness3 } from "@xyo-network/xl1-model";
|
|
340
353
|
|
|
341
|
-
// src/transaction/validators/
|
|
342
|
-
|
|
343
|
-
var TransactionElevationValidator = /* @__PURE__ */ __name(([tx, txPayloads]) => {
|
|
354
|
+
// src/transaction/validators/TransactionElevationValidator.ts
|
|
355
|
+
var TransactionElevationValidator = /* @__PURE__ */ __name(([_tx, _txPayloads]) => {
|
|
344
356
|
const errors = [];
|
|
345
|
-
try {
|
|
346
|
-
const elevatedHashes = (tx.$operations ?? []).filter((operation) => operation[0] === "elevate");
|
|
347
|
-
const elevatedPayloads = elevatedHashes.map(([, hash]) => txPayloads.find((p) => p._hash === hash)).filter(exists);
|
|
348
|
-
if (elevatedPayloads.length < elevatedHashes.length) {
|
|
349
|
-
errors.push(new Error("missing elevated payload"));
|
|
350
|
-
}
|
|
351
|
-
if (elevatedPayloads.length > elevatedHashes.length) {
|
|
352
|
-
errors.push(new Error("extra elevated payload"));
|
|
353
|
-
}
|
|
354
|
-
} catch (ex) {
|
|
355
|
-
errors.push(new Error("validation excepted"), ex);
|
|
356
|
-
}
|
|
357
357
|
return errors;
|
|
358
358
|
}, "TransactionElevationValidator");
|
|
359
359
|
|
|
360
|
-
// src/transaction/validators/
|
|
360
|
+
// src/transaction/validators/TransactionFromValidator.ts
|
|
361
|
+
import { asAddress } from "@xylabs/hex";
|
|
362
|
+
import { addressesContains } from "@xyo-network/boundwitness-validator";
|
|
363
|
+
var TransactionFromValidator = /* @__PURE__ */ __name(([tx], _chainId) => {
|
|
364
|
+
const errors = [];
|
|
365
|
+
const from = asAddress(tx.from);
|
|
366
|
+
if (from === void 0) errors.push(new Error("Transaction from is not a valid address"));
|
|
367
|
+
else if (!addressesContains(tx, from)) errors.push(new Error("Transaction from address must be listed in addresses"));
|
|
368
|
+
return errors;
|
|
369
|
+
}, "TransactionFromValidator");
|
|
370
|
+
|
|
371
|
+
// src/transaction/validators/TransactionJsonSchemaValidator.ts
|
|
361
372
|
import { TransactionBoundWitnessJsonSchema } from "@xyo-network/chain-schema";
|
|
373
|
+
import { PayloadBuilder } from "@xyo-network/payload-builder";
|
|
362
374
|
import { Ajv as Ajv2 } from "ajv";
|
|
363
375
|
var TransactionJsonSchemaValidator = /* @__PURE__ */ __name(([tx]) => {
|
|
364
376
|
const errors = [];
|
|
@@ -368,7 +380,7 @@ var TransactionJsonSchemaValidator = /* @__PURE__ */ __name(([tx]) => {
|
|
|
368
380
|
strict: true
|
|
369
381
|
});
|
|
370
382
|
const validate = ajv.compile(TransactionBoundWitnessJsonSchema);
|
|
371
|
-
if (!validate(tx)) {
|
|
383
|
+
if (!validate(PayloadBuilder.omitStorageMeta(tx))) {
|
|
372
384
|
const error = new Error("failed JSON schema validation");
|
|
373
385
|
error.cause = validate.errors;
|
|
374
386
|
errors.push(error);
|
|
@@ -379,20 +391,17 @@ var TransactionJsonSchemaValidator = /* @__PURE__ */ __name(([tx]) => {
|
|
|
379
391
|
return errors;
|
|
380
392
|
}, "TransactionJsonSchemaValidator");
|
|
381
393
|
|
|
382
|
-
// src/transaction/validators/
|
|
394
|
+
// src/transaction/validators/TransactionProtocolValidator.ts
|
|
383
395
|
import { BoundWitnessWrapper } from "@xyo-network/boundwitness-wrapper";
|
|
384
|
-
var TransactionProtocolValidator = /* @__PURE__ */ __name(async ([tx],
|
|
396
|
+
var TransactionProtocolValidator = /* @__PURE__ */ __name(async ([tx], chainId) => {
|
|
385
397
|
const errors = [];
|
|
386
398
|
try {
|
|
387
399
|
if (!await BoundWitnessWrapper.parse(tx).getValid()) {
|
|
388
400
|
errors.push(new Error("failed basic boundwitness parse"));
|
|
389
401
|
}
|
|
390
|
-
if (
|
|
402
|
+
if (chainId && tx.chain !== chainId) {
|
|
391
403
|
errors.push(new Error("invalid chain id"));
|
|
392
404
|
}
|
|
393
|
-
if (tx.nonce.length !== tx.addresses.length) {
|
|
394
|
-
errors.push(new Error("invalid nonce length"));
|
|
395
|
-
}
|
|
396
405
|
} catch (ex) {
|
|
397
406
|
errors.push(new Error("validation excepted"), ex);
|
|
398
407
|
}
|
|
@@ -400,20 +409,21 @@ var TransactionProtocolValidator = /* @__PURE__ */ __name(async ([tx], chainIden
|
|
|
400
409
|
}, "TransactionProtocolValidator");
|
|
401
410
|
|
|
402
411
|
// src/transaction/validateTransaction.ts
|
|
403
|
-
async function validateTransaction(tx,
|
|
404
|
-
if (!
|
|
412
|
+
async function validateTransaction(tx, chainId, additionalValidators = []) {
|
|
413
|
+
if (!isTransactionBoundWitness3(tx[0])) {
|
|
405
414
|
return [
|
|
406
415
|
new Error("failed isTransactionBoundWitness identity check")
|
|
407
416
|
];
|
|
408
417
|
}
|
|
409
418
|
const validators = [
|
|
410
419
|
TransactionProtocolValidator,
|
|
411
|
-
TransactionJsonSchemaValidator,
|
|
420
|
+
// TransactionJsonSchemaValidator, // TODO: Figure out why this is failing
|
|
421
|
+
TransactionFromValidator,
|
|
412
422
|
TransactionElevationValidator,
|
|
413
423
|
BoundWitnessReferencesValidator(),
|
|
414
424
|
...additionalValidators
|
|
415
425
|
];
|
|
416
|
-
return (await Promise.all(validators.map((v) => v(tx,
|
|
426
|
+
return (await Promise.all(validators.map((v) => v(tx, chainId)))).flat();
|
|
417
427
|
}
|
|
418
428
|
__name(validateTransaction, "validateTransaction");
|
|
419
429
|
export {
|
|
@@ -422,6 +432,7 @@ export {
|
|
|
422
432
|
PayloadsInBlockValidator,
|
|
423
433
|
RequiredBalanceBlockStateValidator,
|
|
424
434
|
TransactionElevationValidator,
|
|
435
|
+
TransactionFromValidator,
|
|
425
436
|
TransactionJsonSchemaValidator,
|
|
426
437
|
TransactionProtocolValidator,
|
|
427
438
|
validateBlock,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/boundwitness/validators/BoundWitnessReferences.ts","../../src/boundwitness/validators/BoundWitnessSignatures.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/Fields.ts","../../src/block/validators/JsonSchema.ts","../../src/block/validators/PreviousHash.ts","../../src/block/validateBlock.ts","../../src/hydratedBlock/validators/Payloads.ts","../../src/elevatedPayload/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/validateElevatedInBlock.ts","../../src/elevatedPayload/validateElevatedInTransaction.ts","../../src/elevatedPayload/validateSchemaInBlock.ts","../../src/elevatedPayload/validateTransactionInBlock.ts","../../src/elevatedPayload/validateTransferInBlock.ts","../../src/hydratedBlock/validateHydratedBlock.ts","../../src/hydratedBlockState/validators/RequiredBalance.ts","../../src/hydratedBlockState/validateHydratedBlockState.ts","../../src/transaction/validateTransaction.ts","../../src/transaction/validators/TransactionElevation.ts","../../src/transaction/validators/TransactionJsonSchema.ts","../../src/transaction/validators/TransactionProtocol.ts"],"sourcesContent":["import type { Hash } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { HydratedBoundWitnessWithStorageMeta } from '@xyo-network/archivist-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type {\n Payload,\n Schema,\n WithHashStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\n\nimport type { HydratedBoundWitnessValidationFunction } from '../HydratedBoundWitnessValidationFunction.ts'\n\nfunction getPayloadsFromPayloadArray(payloads: WithHashStorageMeta<Payload>[], hashes: Hash[]): (WithHashStorageMeta<Payload> | undefined)[] {\n return hashes.map(hash => payloads.find(payload => payload._hash === hash || payload._dataHash === hash))\n}\n\nexport const BoundWitnessReferencesValidator\n= <T extends BoundWitness = BoundWitness>(allowedSchemas?: Schema[]): HydratedBoundWitnessValidationFunction<T> => (\n [bw, payloadSet]: HydratedBoundWitnessWithStorageMeta<T>,\n): Promisable<Error[]> => {\n const errors: Error[] = []\n try {\n const payloads = getPayloadsFromPayloadArray(payloadSet, bw.payload_hashes)\n if (payloads.length !== bw.payload_hashes.length) {\n errors.push(new Error('unable to locate payloads'))\n }\n\n // check if payloads are valid and if their schemas match the declared schemas\n for (let payload of payloads) {\n if (isAnyPayload(payload)) {\n const payloadHashIndex = bw.payload_hashes.indexOf(payload._hash)\n const payloadDataHashIndex = bw.payload_hashes.indexOf(payload._dataHash)\n const payloadIndex = Math.max(payloadHashIndex, payloadDataHashIndex)\n if (payloadIndex === -1) {\n errors.push(new Error('payload hash not found'))\n }\n\n const declaredSchema = bw.payload_schemas[payloadIndex]\n if (declaredSchema !== payload.schema) {\n errors.push(new Error('mismatched schema'))\n }\n\n if (allowedSchemas && !allowedSchemas.includes(payload.schema)) {\n errors.push(new Error(`disallowed schema [${payload.schema}]`))\n }\n } else {\n errors.push(new Error('invalid payload'))\n }\n }\n } catch (ex) {\n errors.push(new Error('validation excepted'), ex as Error)\n }\n return errors\n}\n","import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport type { Address } from '@xylabs/hex'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\n\nimport type { BoundWitnessValidationFunction } from '../BoundWitnessValidationFunction.ts'\n\nexport const BoundWitnessSignaturesValidator: BoundWitnessValidationFunction = async (\n bw: BoundWitness,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n const dataHash = await BoundWitnessBuilder.dataHash(bw)\n const results: [Address, Error[]][] = await Promise.all(bw.addresses.map(async (address, index) => {\n return [address, await BoundWitnessValidator.validateSignature(toArrayBuffer(dataHash), toArrayBuffer(address), toArrayBuffer(bw.$signatures[index]))]\n }))\n for (const [, bwErrors] of results) {\n errors.push(...bwErrors)\n }\n } catch (ex) {\n errors.push(new Error('validation excepted'), ex as Error)\n }\n return errors\n}\n","import { isAllowedBlockPayloadSchema } from '@xyo-network/chain-protocol'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-model'\n\nimport type { BlockValidatorFunction } from '../BlockValidationFunction.ts'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: Error[] = []\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new Error(`payload schema not allowed in block: ${schema}`))\n }\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-model'\n\nimport type { BlockValidatorFunction } from '../BlockValidationFunction.ts'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n chainId?: Address,\n) => {\n const errors: Error[] = []\n if (chainId && block.chain !== chainId.toLowerCase()) {\n errors.push(new Error('invalid chain id'))\n }\n return errors\n}\n","import { BlockBoundWitnessWithStorageMetaJsonSchema } from '@xyo-network/chain-schema'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-model'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nimport type { BlockValidatorFunction } from '../BlockValidationFunction.ts'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => async (\n block: BlockBoundWitness,\n) => {\n const errors: Error[] = []\n const ajv = new Ajv({ allErrors: true, strict: true })\n // see if you can export the super set\n const validate = ajv.compile(jsonSchema)\n await validate(block)\n if (!validate(block)) {\n const error = new Error('failed JSON schema validation')\n error.cause = validate.errors\n errors.push(error)\n }\n return errors\n}\n","import { isHash } from '@xylabs/hex'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-model'\n\nimport type { BlockValidatorFunction } from '../BlockValidationFunction.ts'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: Error[] = []\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 Error('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 Error('previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new Error('invalid block number'))\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { BlockBoundWitness } from '@xyo-network/xl1-model'\n\nimport { BoundWitnessSignaturesValidator } from '../boundwitness/index.ts'\nimport type { BlockValidatorFunction } from './BlockValidationFunction.ts'\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockJsonSchemaValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock: BlockValidatorFunction = async (\n block: BlockBoundWitness,\n chainId?: Address,\n): Promise<Error[]> => {\n try {\n const validators: BlockValidatorFunction[] = [\n BoundWitnessSignaturesValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockJsonSchemaValidator(),\n BlockAllowedPayloadSchemasValidator,\n ]\n const errors = (await Promise.all(\n validators.map(validator => validator(block, chainId)),\n )).flat()\n return errors\n } catch (ex) {\n return [new Error('validation excepted'), ex as Error]\n }\n}\n","import type { Address, Hash } from '@xylabs/hex'\nimport { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type {\n Payload, Schema, WithHashStorageMeta,\n} from '@xyo-network/payload-model'\nimport { SchemaSchema } from '@xyo-network/schema-payload-plugin'\nimport {\n ChainStakeIntentSchema,\n type FromFields,\n type HydratedBlock,\n TransferSchema,\n} from '@xyo-network/xl1-model'\n\nimport type { InBlockPayloadValidationFunction } from '../../elevatedPayload/index.ts'\nimport {\n validateChainStakeIntentInBlock, validateSchemaInBlock, validateTransactionInBlock,\n validateTransferInBlock,\n} from '../../elevatedPayload/index.ts'\nimport type { HydratedBlockValidatorFunction } from '../HydratedBlockValidationFunction.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidatorFunction = async (\n [block, payloads]: HydratedBlock,\n chainId: Address,\n) => {\n const errors: Error[] = []\n\n const validators: Record<Schema, InBlockPayloadValidationFunction> = {\n [TransferSchema]: validateTransferInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [BoundWitnessSchema]: (payload) => {\n // TODO: Fix first block check with dual step singing\n console.error('TODO: Fix first block check with dual step singing')\n return block.block === 0 ? [] : validateTransactionInBlock(payload, [block, payloads], chainId)\n },\n [SchemaSchema]: validateSchemaInBlock,\n }\n const allowedSchemas = Object.keys(validators)\n\n const payloadMap: Record<Hash, WithHashStorageMeta<Payload & FromFields>> = {}\n for (const payload of payloads) {\n payloadMap[payload._hash] = payload\n }\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 if (payloadMap[hash]) {\n if (allowedSchemas.includes(schema)) {\n errors.push(...(await validators[schema](payloadMap[hash], [block, payloads], chainId)))\n } else {\n errors.push(new Error(`invalid payload schema ${hash} ${schema}`))\n }\n delete payloadMap[hash]\n } else {\n errors.push(new Error(`missing payload ${hash} ${schema}`))\n }\n }\n\n if (Object.keys(payloadMap).length > 0) {\n errors.push(new Error(`extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { HydratedBlock } from '@xyo-network/xl1-model'\nimport { isChainStakeIntent } from '@xyo-network/xl1-model'\n\nimport type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'\nimport { validateElevatedInBlock } from './validateElevatedInBlock.ts'\nimport { validateElevatedInTransaction } from './validateElevatedInTransaction.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n chainId: Address,\n): Promise<Error[]> => {\n const errors: Error[] = []\n if (!isChainStakeIntent(payload)) {\n errors.push(new Error('Payload is not a chain stake intent'))\n }\n\n if (!block[0].payload_hashes.includes(payload._hash)) {\n errors.push(new Error('ChainStakeIntent not included in block'))\n }\n\n if (block[0].addresses.includes(payload.from)) {\n errors.push(...await validateElevatedInBlock(payload, block, chainId))\n } else {\n errors.push(...await validateElevatedInTransaction(payload, block, chainId))\n }\n return errors\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { transactionPayloadsFromHydratedBlock } from '@xyo-network/chain-protocol'\nimport type { HydratedBlock } from '@xyo-network/xl1-model'\n\nimport type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'\n\nexport const validateElevatedInBlock: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n): Promisable<Error[]> => {\n const errors: Error[] = []\n const txPayloadHashes = new Set(transactionPayloadsFromHydratedBlock(block).map(tx => tx._hash))\n if (txPayloadHashes.has(payload._hash)) {\n errors.push(new Error(`Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`))\n }\n return errors\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { transactionsFromHydratedBlock } from '@xyo-network/chain-protocol'\nimport type { HydratedBlock } from '@xyo-network/xl1-model'\n\nimport type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'\n\nexport const validateElevatedInTransaction: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n): Promisable<Error[]> => {\n const errors: Error[] = []\n const txs = transactionsFromHydratedBlock(block)\n const fromTxs = txs.filter(tx => tx.addresses.includes(payload.from))\n if (fromTxs.length > 0) {\n const hashes = fromTxs.flatMap(tx => tx.payload_hashes)\n if (!hashes.includes(payload._hash)) {\n errors.push(new Error('Transaction does not include payload'))\n }\n } else {\n errors.push(new Error(`Missing transaction for from address ${payload.from} [${payload.schema}]`))\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { HydratedBlock } from '@xyo-network/xl1-model'\n\nimport type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'\nimport { validateElevatedInBlock } from './validateElevatedInBlock.ts'\nimport { validateElevatedInTransaction } from './validateElevatedInTransaction.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n chainId: Address,\n): Promise<Error[]> => {\n const errors: Error[] = []\n if (!isSchemaPayload(payload)) {\n errors.push(new Error('Payload is not a schema'))\n }\n if (payload.from === chainId || block[0].addresses.includes(payload.from)) {\n errors.push(...await validateElevatedInBlock(payload, block, chainId))\n } else {\n errors.push(...await validateElevatedInTransaction(payload, block, chainId))\n }\n return errors\n}\n","import type { HydratedBlock } from '@xyo-network/xl1-model'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-model'\n\nimport { BoundWitnessSignaturesValidator } from '../boundwitness/index.ts'\nimport type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n payload,\n _block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: Error[] = []\n if (isTransactionBoundWitness(payload)) {\n errors.push(...await BoundWitnessSignaturesValidator(payload))\n } else {\n errors.push(new Error('Payload is not a transaction'))\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { HydratedBlock } from '@xyo-network/xl1-model'\nimport { isTransfer } from '@xyo-network/xl1-model'\n\nimport type { InBlockPayloadValidationFunction } from './InBlockPayloadValidationFunction.ts'\nimport { validateElevatedInBlock } from './validateElevatedInBlock.ts'\nimport { validateElevatedInTransaction } from './validateElevatedInTransaction.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n chainId: Address,\n): Promise<Error[]> => {\n const errors: Error[] = []\n if (!isTransfer(payload)) {\n errors.push(new Error('Payload is not a transfer'))\n }\n if (payload.from === chainId || block[0].addresses.includes(payload.from)) {\n errors.push(...await validateElevatedInBlock(payload, block, chainId))\n } else {\n errors.push(...await validateElevatedInTransaction(payload, block, chainId))\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { HydratedBlock } from '@xyo-network/xl1-model'\n\nimport { validateBlock } from '../block/index.ts'\nimport { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'\nimport type { HydratedBlockValidatorFunction } from './HydratedBlockValidationFunction.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock: HydratedBlockValidatorFunction = async (\n hydratedBlock: HydratedBlock,\n chainId: Address,\n additionalValidators: HydratedBlockValidatorFunction[] = [],\n): Promise<Error[]> => {\n const errors: Error[] = await validateBlock(hydratedBlock[0], chainId)\n const validators: HydratedBlockValidatorFunction[] = [BoundWitnessReferencesValidator(), PayloadsInBlockValidator, ...additionalValidators]\n return [...errors, ...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat()]\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport {\n analyzeChain, BalanceAnalyzer, isChainSummaryBalances, netBalancesForPayloads,\n} from '@xyo-network/chain-protocol'\nimport type { HydratedBlock, HydratedBlockStateValidatorFunction } from '@xyo-network/xl1-model'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidatorFunction = async (\n block: HydratedBlock,\n chainId: Address,\n archivist: ReadArchivist,\n) => {\n const errors: Error[] = []\n\n const netBalances = netBalancesForPayloads(block[1])\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<Address, bigint> = {}\n for (const address of netBalanceAddresses) {\n if (netBalances[address] < 0n) {\n requiredBalances[address] = -netBalances[address]\n }\n }\n if (!block[0].previous) return [new Error('Insufficient funds because first block')]\n const results = await analyzeChain(\n archivist,\n [new BalanceAnalyzer(Object.keys(requiredBalances) as Address[], Object.values(requiredBalances)),\n ],\n block[0].previous,\n )\n const summaryBalances = assertEx(results.find(isChainSummaryBalances), () => new Error('missing summary balances'))\n\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const balance = BigInt(`0x${summaryBalances.balances[address] ?? '00'}`)\n if (reqBalance > balance) {\n errors.push(new Error(`insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`))\n }\n }\n\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { HydratedBlock, HydratedBlockStateValidatorFunction } from '@xyo-network/xl1-model'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidatorFunction = async (\n hydratedBlock: HydratedBlock,\n chainId: Address,\n archivist: ReadArchivist,\n additionalValidators: HydratedBlockStateValidatorFunction[] = [],\n): Promise<Error[]> => {\n const errors: Error[] = await validateHydratedBlock(hydratedBlock, chainId)\n const validators: HydratedBlockStateValidatorFunction[] = [RequiredBalanceBlockStateValidator, ...additionalValidators]\n return [...errors, ...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, archivist)))).flat()]\n}\n","import type {\n ChainIdentification, HydratedTransactionValidatorFunction,\n HydratedTransactionWithStorageMeta,\n} from '@xyo-network/xl1-model'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-model'\n\nimport { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'\nimport {\n TransactionElevationValidator, TransactionJsonSchemaValidator, TransactionProtocolValidator,\n} from './validators/index.ts'\n\nexport async function validateTransaction(\n tx: HydratedTransactionWithStorageMeta,\n chainIdentification: ChainIdentification,\n additionalValidators: HydratedTransactionValidatorFunction[] = [],\n): Promise<Error[]> {\n if (!isTransactionBoundWitness(tx)) {\n return [new Error('failed isTransactionBoundWitness identity check')]\n }\n\n const validators: HydratedTransactionValidatorFunction[] = [\n TransactionProtocolValidator,\n TransactionJsonSchemaValidator,\n TransactionElevationValidator,\n BoundWitnessReferencesValidator(),\n ...additionalValidators,\n ]\n return (await Promise.all(validators.map(v => v(tx, chainIdentification)))).flat()\n}\n","import { exists } from '@xylabs/exists'\nimport type { Promisable } from '@xylabs/promise'\nimport type {\n HydratedTransactionValidatorFunction, HydratedTransactionWithStorageMeta, TransactionBoundWitness,\n} from '@xyo-network/xl1-model'\n\nexport const TransactionElevationValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = (\n [tx, txPayloads]: HydratedTransactionWithStorageMeta,\n): Promisable<Error[]> => {\n const errors: Error[] = []\n try {\n const elevatedHashes = (tx.$operations ?? [])\n .filter(operation => operation[0] === 'elevate')\n\n const elevatedPayloads = elevatedHashes\n .map(([,hash]) => txPayloads.find(p => p._hash === hash)).filter(exists)\n\n if (elevatedPayloads.length < elevatedHashes.length) {\n errors.push(new Error('missing elevated payload'))\n }\n if (elevatedPayloads.length > elevatedHashes.length) {\n errors.push(new Error('extra elevated payload'))\n }\n } catch (ex) {\n errors.push(new Error('validation excepted'), ex as Error)\n }\n return errors\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { TransactionBoundWitnessJsonSchema } from '@xyo-network/chain-schema'\nimport type {\n HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-model'\nimport { Ajv } from 'ajv'\n\nexport const TransactionJsonSchemaValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = (\n [tx]: HydratedTransaction,\n): Promisable<Error[]> => {\n const errors: Error[] = []\n try {\n const ajv = new Ajv({ allErrors: true, strict: true })\n // see if you can export the super set\n const validate = ajv.compile(TransactionBoundWitnessJsonSchema)\n if (!validate(tx)) {\n const error = new Error('failed JSON schema validation')\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n errors.push(new Error('validation excepted'), ex as Error)\n }\n return errors\n}\n","import { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport type {\n ChainIdentification, HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-model'\n\nexport const TransactionProtocolValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = async (\n [tx]: HydratedTransaction,\n chainIdentification?: ChainIdentification,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (!await BoundWitnessWrapper.parse(tx).getValid()) {\n errors.push(new Error('failed basic boundwitness parse'))\n }\n if (chainIdentification && tx.chain !== chainIdentification.id) {\n errors.push(new Error('invalid chain id'))\n }\n if (tx.nonce.length !== tx.addresses.length) {\n errors.push(new Error('invalid nonce length'))\n }\n } catch (ex) {\n errors.push(new Error('validation excepted'), ex as Error)\n }\n return errors\n}\n"],"mappings":"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","names":["isAnyPayload","getPayloadsFromPayloadArray","payloads","hashes","map","hash","find","payload","_hash","_dataHash","BoundWitnessReferencesValidator","allowedSchemas","bw","payloadSet","errors","payload_hashes","length","push","Error","isAnyPayload","payloadHashIndex","indexOf","payloadDataHashIndex","payloadIndex","Math","max","declaredSchema","payload_schemas","schema","includes","ex","toArrayBuffer","BoundWitnessBuilder","BoundWitnessValidator","BoundWitnessSignaturesValidator","bw","errors","dataHash","BoundWitnessBuilder","results","Promise","all","addresses","map","address","index","BoundWitnessValidator","validateSignature","toArrayBuffer","$signatures","bwErrors","push","ex","Error","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","Error","BlockFieldsValidator","block","chainId","errors","chain","toLowerCase","push","Error","BlockBoundWitnessWithStorageMetaJsonSchema","Ajv","BlockJsonSchemaValidator","jsonSchema","BlockBoundWitnessWithStorageMetaJsonSchema","block","errors","ajv","Ajv","allErrors","strict","validate","compile","error","Error","cause","push","isHash","BlockPreviousHashValidator","block","errors","blockNumber","isHash","previous","push","Error","validateBlock","block","chainId","validators","BoundWitnessSignaturesValidator","BlockFieldsValidator","BlockPreviousHashValidator","BlockJsonSchemaValidator","BlockAllowedPayloadSchemasValidator","errors","Promise","all","map","validator","flat","ex","Error","BoundWitnessSchema","SchemaSchema","ChainStakeIntentSchema","TransferSchema","isChainStakeIntent","transactionPayloadsFromHydratedBlock","validateElevatedInBlock","payload","block","errors","txPayloadHashes","Set","transactionPayloadsFromHydratedBlock","map","tx","_hash","has","push","Error","schema","transactionsFromHydratedBlock","validateElevatedInTransaction","payload","block","errors","txs","transactionsFromHydratedBlock","fromTxs","filter","tx","addresses","includes","from","length","hashes","flatMap","payload_hashes","_hash","push","Error","schema","validateChainStakeIntentInBlock","payload","block","chainId","errors","isChainStakeIntent","push","Error","payload_hashes","includes","_hash","addresses","from","validateElevatedInBlock","validateElevatedInTransaction","isSchemaPayload","validateSchemaInBlock","payload","block","chainId","errors","isSchemaPayload","push","Error","from","addresses","includes","validateElevatedInBlock","validateElevatedInTransaction","isTransactionBoundWitness","validateTransactionInBlock","payload","_block","errors","isTransactionBoundWitness","push","BoundWitnessSignaturesValidator","Error","isTransfer","validateTransferInBlock","payload","block","chainId","errors","isTransfer","push","Error","from","addresses","includes","validateElevatedInBlock","validateElevatedInTransaction","PayloadsInBlockValidator","block","payloads","chainId","errors","validators","TransferSchema","validateTransferInBlock","ChainStakeIntentSchema","validateChainStakeIntentInBlock","BoundWitnessSchema","payload","console","error","validateTransactionInBlock","SchemaSchema","validateSchemaInBlock","allowedSchemas","Object","keys","payloadMap","_hash","i","payload_hashes","length","hash","schema","payload_schemas","includes","push","Error","join","validateHydratedBlock","hydratedBlock","chainId","additionalValidators","errors","validateBlock","validators","BoundWitnessReferencesValidator","PayloadsInBlockValidator","Promise","all","map","v","flat","assertEx","analyzeChain","BalanceAnalyzer","isChainSummaryBalances","netBalancesForPayloads","RequiredBalanceBlockStateValidator","block","chainId","archivist","errors","netBalances","netBalancesForPayloads","netBalanceAddresses","Object","keys","requiredBalances","address","previous","Error","results","analyzeChain","BalanceAnalyzer","values","summaryBalances","assertEx","find","isChainSummaryBalances","reqBalance","entries","balance","BigInt","balances","push","validateHydratedBlockState","hydratedBlock","chainId","archivist","additionalValidators","errors","validateHydratedBlock","validators","RequiredBalanceBlockStateValidator","Promise","all","map","v","flat","isTransactionBoundWitness","exists","TransactionElevationValidator","tx","txPayloads","errors","elevatedHashes","$operations","filter","operation","elevatedPayloads","map","hash","find","p","_hash","exists","length","push","Error","ex","TransactionBoundWitnessJsonSchema","Ajv","TransactionJsonSchemaValidator","tx","errors","ajv","Ajv","allErrors","strict","validate","compile","TransactionBoundWitnessJsonSchema","error","Error","cause","push","ex","BoundWitnessWrapper","TransactionProtocolValidator","tx","chainIdentification","errors","BoundWitnessWrapper","parse","getValid","push","Error","chain","id","nonce","length","addresses","ex","validateTransaction","tx","chainIdentification","additionalValidators","isTransactionBoundWitness","Error","validators","TransactionProtocolValidator","TransactionJsonSchemaValidator","TransactionElevationValidator","BoundWitnessReferencesValidator","Promise","all","map","v","flat"]}
|
|
1
|
+
{"version":3,"sources":["../../src/boundwitness/validators/BoundWitnessReferences.ts","../../src/boundwitness/validators/BoundWitnessSignatures.ts","../../src/block/validators/AllowedPayloadSchemas.ts","../../src/block/validators/Fields.ts","../../src/block/validators/JsonSchema.ts","../../src/block/validators/PreviousHash.ts","../../src/block/validateBlock.ts","../../src/elevatedPayload/validatePayloadInBlock.ts","../../src/elevatedPayload/lib/isElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromBlock.ts","../../src/elevatedPayload/lib/validateElevatedFromTransaction.ts","../../src/elevatedPayload/lib/validateTransactionInBlock.ts","../../src/elevatedPayload/lib/validateTypedPayloadInBlock.ts","../../src/elevatedPayload/payloads/validateChainStakeIntentInBlock.ts","../../src/elevatedPayload/payloads/validateHashInBlock.ts","../../src/elevatedPayload/payloads/validateSchemaInBlock.ts","../../src/elevatedPayload/payloads/validateTransferInBlock.ts","../../src/hydratedBlock/validators/Payloads.ts","../../src/hydratedBlock/validateHydratedBlock.ts","../../src/hydratedBlockState/validators/RequiredBalance.ts","../../src/hydratedBlockState/validateHydratedBlockState.ts","../../src/transaction/validateTransaction.ts","../../src/transaction/validators/TransactionElevationValidator.ts","../../src/transaction/validators/TransactionFromValidator.ts","../../src/transaction/validators/TransactionJsonSchemaValidator.ts","../../src/transaction/validators/TransactionProtocolValidator.ts"],"sourcesContent":["import type { Hash } from '@xylabs/hex'\nimport type { Promisable } from '@xylabs/promise'\nimport type { HydratedBoundWitnessWithStorageMeta } from '@xyo-network/archivist-model'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport type {\n Payload,\n Schema,\n WithHashStorageMeta,\n} from '@xyo-network/payload-model'\nimport { isAnyPayload } from '@xyo-network/payload-model'\nimport type { HydratedBoundWitnessValidationFunction } from '@xyo-network/xl1-model'\n\nfunction getPayloadsFromPayloadArray(payloads: WithHashStorageMeta<Payload>[], hashes: Hash[]): (WithHashStorageMeta<Payload> | undefined)[] {\n return hashes.map(hash => payloads.find(payload => payload._hash === hash || payload._dataHash === hash))\n}\n\nexport const BoundWitnessReferencesValidator\n= <T extends BoundWitness = BoundWitness>(allowedSchemas?: Schema[]): HydratedBoundWitnessValidationFunction<T> => (\n [bw, payloadSet]: HydratedBoundWitnessWithStorageMeta<T>,\n): Promisable<Error[]> => {\n const errors: Error[] = []\n try {\n const payloads = getPayloadsFromPayloadArray(payloadSet, bw.payload_hashes)\n if (payloads.length !== bw.payload_hashes.length) {\n errors.push(new Error('unable to locate payloads'))\n }\n\n // check if payloads are valid and if their schemas match the declared schemas\n for (let payload of payloads) {\n if (isAnyPayload(payload)) {\n const payloadHashIndex = bw.payload_hashes.indexOf(payload._hash)\n const payloadDataHashIndex = bw.payload_hashes.indexOf(payload._dataHash)\n const payloadIndex = Math.max(payloadHashIndex, payloadDataHashIndex)\n if (payloadIndex === -1) {\n errors.push(new Error('payload hash not found'))\n }\n\n const declaredSchema = bw.payload_schemas[payloadIndex]\n if (declaredSchema !== payload.schema) {\n errors.push(new Error('mismatched schema'))\n }\n\n if (allowedSchemas && !allowedSchemas.includes(payload.schema)) {\n errors.push(new Error(`disallowed schema [${payload.schema}]`))\n }\n } else {\n errors.push(new Error('invalid payload'))\n }\n }\n } catch (ex) {\n errors.push(new Error('validation excepted'), ex as Error)\n }\n return errors\n}\n","import { toArrayBuffer } from '@xylabs/arraybuffer'\nimport type { Address } from '@xylabs/hex'\nimport { BoundWitnessBuilder } from '@xyo-network/boundwitness-builder'\nimport type { BoundWitness } from '@xyo-network/boundwitness-model'\nimport { BoundWitnessValidator } from '@xyo-network/boundwitness-validator'\nimport type { BoundWitnessValidationFunction } from '@xyo-network/xl1-model'\n\nexport const BoundWitnessSignaturesValidator: BoundWitnessValidationFunction = async (\n bw: BoundWitness,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n const dataHash = await BoundWitnessBuilder.dataHash(bw)\n const results: [Address, Error[]][] = await Promise.all(bw.addresses.map(async (address, index) => {\n return [address, await BoundWitnessValidator.validateSignature(toArrayBuffer(dataHash), toArrayBuffer(address), toArrayBuffer(bw.$signatures[index]))]\n }))\n for (const [, bwErrors] of results) {\n errors.push(...bwErrors)\n }\n } catch (ex) {\n errors.push(new Error('validation excepted'), ex as Error)\n }\n return errors\n}\n","import {\n type BlockBoundWitness, type BlockValidatorFunction, isAllowedBlockPayloadSchema,\n} from '@xyo-network/xl1-model'\n\nexport const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: Error[] = []\n for (const schema of block.payload_schemas) {\n if (!isAllowedBlockPayloadSchema(schema)) {\n errors.push(new Error(`payload schema not allowed in block: ${schema}`))\n }\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-model'\n\nexport const BlockFieldsValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n chainId?: Address,\n) => {\n const errors: Error[] = []\n if (chainId && block.chain !== chainId.toLowerCase()) {\n errors.push(new Error('invalid chain id'))\n }\n return errors\n}\n","import { BlockBoundWitnessWithStorageMetaJsonSchema } from '@xyo-network/chain-schema'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-model'\nimport type { AnySchema } from 'ajv'\nimport { Ajv } from 'ajv'\n\nexport const BlockJsonSchemaValidator = (jsonSchema: AnySchema = BlockBoundWitnessWithStorageMetaJsonSchema): BlockValidatorFunction => async (\n block: BlockBoundWitness,\n) => {\n const errors: Error[] = []\n const ajv = new Ajv({ allErrors: true, strict: true })\n // see if you can export the super set\n const validate = ajv.compile(jsonSchema)\n await validate(block)\n if (!validate(block)) {\n const error = new Error('failed JSON schema validation')\n error.cause = validate.errors\n errors.push(error)\n }\n return errors\n}\n","import { isHash } from '@xylabs/hex'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-model'\n\nexport const BlockPreviousHashValidator: BlockValidatorFunction = (\n block: BlockBoundWitness,\n) => {\n const errors: Error[] = []\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 Error('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 Error('previous hash should not be set'))\n }\n } else {\n // we have a negative block number\n errors.push(new Error('invalid block number'))\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { BlockBoundWitness, BlockValidatorFunction } from '@xyo-network/xl1-model'\n\nimport { BoundWitnessSignaturesValidator } from '../boundwitness/index.ts'\nimport {\n BlockAllowedPayloadSchemasValidator,\n BlockFieldsValidator, BlockJsonSchemaValidator, BlockPreviousHashValidator,\n} from './validators/index.ts'\n\nexport const validateBlock: BlockValidatorFunction = async (\n block: BlockBoundWitness,\n chainId?: Address,\n): Promise<Error[]> => {\n try {\n const validators: BlockValidatorFunction[] = [\n BoundWitnessSignaturesValidator,\n BlockFieldsValidator,\n BlockPreviousHashValidator,\n BlockJsonSchemaValidator(),\n BlockAllowedPayloadSchemasValidator,\n ]\n const errors = (await Promise.all(\n validators.map(validator => validator(block, chainId)),\n )).flat()\n return errors\n } catch (ex) {\n return [new Error('validation excepted'), ex as Error]\n }\n}\n","import { BoundWitnessSchema } from '@xyo-network/boundwitness-model'\nimport type { Schema } from '@xyo-network/payload-model'\nimport { SchemaSchema } from '@xyo-network/schema-payload-plugin'\nimport type {\n HydratedBlock,\n InBlockPayloadValidationFunction,\n} from '@xyo-network/xl1-model'\nimport {\n ChainStakeIntentSchema, HashSchema, TransferSchema,\n} from '@xyo-network/xl1-model'\n\nimport { validateTransactionInBlock } from './lib/index.ts'\nimport {\n validateChainStakeIntentInBlock, validateHashInBlock, validateSchemaInBlock, validateTransferInBlock,\n} from './payloads/index.ts'\n\nconst payloadValidators: Record<Schema, InBlockPayloadValidationFunction> = {\n [HashSchema]: validateHashInBlock,\n [TransferSchema]: validateTransferInBlock,\n [SchemaSchema]: validateSchemaInBlock,\n [ChainStakeIntentSchema]: validateChainStakeIntentInBlock,\n [BoundWitnessSchema]: validateTransactionInBlock,\n}\n\nexport const validatePayloadInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: Error[] = []\n const validator = payloadValidators[payload.schema]\n if (validator) {\n errors.push(...await validator(payload, block))\n } else {\n errors.push(new Error(`Unsupported payload schema: ${payload.schema}`))\n }\n return errors\n}\n","import type { Payload, WithStorageMeta } from '@xyo-network/payload-model'\nimport { type HydratedBlock, isTransactionBoundWitness } from '@xyo-network/xl1-model'\n\nexport const isElevatedFromBlock = (payload: WithStorageMeta<Payload>, [, payloads]: HydratedBlock): boolean => {\n const txs = payloads.filter(p => isTransactionBoundWitness(p))\n for (const tx of txs) {\n if (tx.payload_hashes.includes(payload._hash)) {\n return false\n }\n }\n return true\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { transactionPayloadsFromHydratedBlock } from '@xyo-network/chain-protocol'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-model'\n\nexport const validateElevatedFromBlock: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n): Promisable<Error[]> => {\n const errors: Error[] = []\n const txPayloadHashes = new Set(transactionPayloadsFromHydratedBlock(block).map(tx => tx._hash))\n if (txPayloadHashes.has(payload._hash)) {\n errors.push(new Error(`Transaction may not include block payload hash [${payload.schema}]: ${payload._hash}`))\n }\n return errors\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { transactionsFromHydratedBlock } from '@xyo-network/chain-protocol'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-model'\n\nexport const validateElevatedFromTransaction: InBlockPayloadValidationFunction = (\n payload,\n block: HydratedBlock,\n): Promisable<Error[]> => {\n const errors: Error[] = []\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 Error('Transaction does not include payload'))\n }\n } else {\n errors.push(new Error('No Transactions in block'))\n }\n return errors\n}\n","import { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-model'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-model'\n\nimport { BoundWitnessSignaturesValidator } from '../../boundwitness/index.ts'\n\nexport const validateTransactionInBlock: InBlockPayloadValidationFunction = async (\n payload,\n _block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: Error[] = []\n if (isTransactionBoundWitness(payload) && isStorageMeta(payload)) {\n errors.push(...await BoundWitnessSignaturesValidator(payload))\n } else {\n errors.push(new Error('Payload failed isTransactionBoundWitness or isStorageMeta'))\n }\n return errors\n}\n","import type { IdentityFunction } from '@xyo-network/chain-protocol'\nimport type { Payload } from '@xyo-network/payload-model'\nimport { isStorageMeta } from '@xyo-network/payload-model'\nimport type { HydratedBlock } from '@xyo-network/xl1-model'\n\nimport { isElevatedFromBlock } from './isElevatedFromBlock.ts'\nimport { validateElevatedFromBlock } from './validateElevatedFromBlock.ts'\nimport { validateElevatedFromTransaction } from './validateElevatedFromTransaction.ts'\n\nexport const validateTypedPayloadInBlock = async <T extends Payload>(\n payload: Payload,\n block: HydratedBlock,\n identityFunction: IdentityFunction<T>,\n): Promise<Error[]> => {\n const errors: Error[] = []\n if (identityFunction(payload) && isStorageMeta(payload)) {\n if (isElevatedFromBlock(payload, block)) {\n errors.push(...await validateElevatedFromBlock(payload, block))\n } else {\n errors.push(...await validateElevatedFromTransaction(payload, block))\n }\n } else {\n errors.push(new Error('Payload failed identityFunction or isElevated or isStorageMeta'))\n }\n return errors\n}\n//\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-model'\nimport { isChainStakeIntent } from '@xyo-network/xl1-model'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateChainStakeIntentInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: Error[] = []\n errors.push(...await validateTypedPayloadInBlock(payload, block, isChainStakeIntent))\n return errors\n}\n","import type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-model'\nimport { isHashPayload } from '@xyo-network/xl1-model'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateHashInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: Error[] = []\n errors.push(...await validateTypedPayloadInBlock(payload, block, isHashPayload))\n return errors\n}\n","import { isSchemaPayload } from '@xyo-network/schema-payload-plugin'\nimport type { HydratedBlock, InBlockPayloadValidationFunction } from '@xyo-network/xl1-model'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateSchemaInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: Error[] = []\n errors.push(...await validateTypedPayloadInBlock(payload, block, isSchemaPayload))\n return errors\n}\n","import {\n type HydratedBlock, type InBlockPayloadValidationFunction, isTransfer,\n} from '@xyo-network/xl1-model'\n\nimport { validateTypedPayloadInBlock } from '../lib/index.ts'\n\nexport const validateTransferInBlock: InBlockPayloadValidationFunction = async (\n payload,\n block: HydratedBlock,\n): Promise<Error[]> => {\n const errors: Error[] = []\n errors.push(...await validateTypedPayloadInBlock(payload, block, isTransfer))\n return errors\n}\n","import type { Hash } from '@xylabs/hex'\nimport type { Payload, WithHashStorageMeta } from '@xyo-network/payload-model'\nimport type {\n HydratedBlock,\n HydratedBlockValidatorFunction,\n} from '@xyo-network/xl1-model'\n\nimport { validatePayloadInBlock } from '../../elevatedPayload/validatePayloadInBlock.ts'\n\nexport const PayloadsInBlockValidator: HydratedBlockValidatorFunction = async (\n [block, payloads]: HydratedBlock,\n) => {\n const errors: Error[] = []\n\n const payloadMap: Record<Hash, WithHashStorageMeta<Payload>> = {}\n for (const payload of payloads) {\n payloadMap[payload._hash] = payload\n }\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 errors.push(...await validatePayloadInBlock(payload, [block, payloads]))\n delete payloadMap[hash]\n } else {\n errors.push(new Error(`missing payload ${hash} ${schema}`))\n }\n }\n\n if (Object.keys(payloadMap).length > 0) {\n errors.push(new Error(`extra payloads ${Object.keys(payloadMap).join(', ')}`))\n }\n\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { HydratedBlock, HydratedBlockValidatorFunction } from '@xyo-network/xl1-model'\n\nimport { validateBlock } from '../block/index.ts'\nimport { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'\nimport { PayloadsInBlockValidator } from './validators/index.ts'\n\nexport const validateHydratedBlock: HydratedBlockValidatorFunction = async (\n hydratedBlock: HydratedBlock,\n chainId: Address,\n additionalValidators: HydratedBlockValidatorFunction[] = [],\n): Promise<Error[]> => {\n const errors: Error[] = await validateBlock(hydratedBlock[0], chainId)\n const validators: HydratedBlockValidatorFunction[] = [\n BoundWitnessReferencesValidator(),\n PayloadsInBlockValidator,\n ...additionalValidators,\n ]\n return [...errors, ...(await Promise.all(validators.map(v => v(hydratedBlock, chainId)))).flat()]\n}\n","import { assertEx } from '@xylabs/assert'\nimport type { Address } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport {\n analyzeChain, BalanceAnalyzer, isChainSummaryBalances, netBalancesForPayloads,\n} from '@xyo-network/chain-protocol'\nimport type { HydratedBlock, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-model'\n\nexport const RequiredBalanceBlockStateValidator: HydratedBlockStateValidationFunction = async (\n block: HydratedBlock,\n chainId: Address,\n archivist: ReadArchivist,\n) => {\n const errors: Error[] = []\n\n const netBalances = netBalancesForPayloads(block[1])\n const netBalanceAddresses = Object.keys(netBalances) as Address[]\n const requiredBalances: Record<Address, bigint> = {}\n for (const address of netBalanceAddresses) {\n if (netBalances[address] < 0n) {\n requiredBalances[address] = -netBalances[address]\n }\n }\n if (!block[0].previous) return [new Error('Insufficient funds because first block')]\n const results = await analyzeChain(\n archivist,\n [new BalanceAnalyzer(Object.keys(requiredBalances) as Address[], Object.values(requiredBalances)),\n ],\n block[0].previous,\n )\n const summaryBalances = assertEx(results.find(isChainSummaryBalances), () => new Error('missing summary balances'))\n\n for (const [address, reqBalance] of Object.entries(requiredBalances) as [Address, bigint][]) {\n const balance = BigInt(`0x${summaryBalances.balances[address] ?? '00'}`)\n if (reqBalance > balance) {\n errors.push(new Error(`insufficient balance for ${address} ${balance} < ${requiredBalances[address]}`))\n }\n }\n\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport type { ReadArchivist } from '@xyo-network/archivist-model'\nimport type { HydratedBlock, HydratedBlockStateValidationFunction } from '@xyo-network/xl1-model'\n\nimport { validateHydratedBlock } from '../hydratedBlock/index.ts'\nimport { RequiredBalanceBlockStateValidator } from './validators/index.ts'\n\nexport const validateHydratedBlockState: HydratedBlockStateValidationFunction = async (\n hydratedBlock: HydratedBlock,\n chainId: Address,\n archivist: ReadArchivist,\n additionalValidators: HydratedBlockStateValidationFunction[] = [],\n): Promise<Error[]> => {\n const errors: Error[] = await validateHydratedBlock(hydratedBlock, chainId)\n const validators: HydratedBlockStateValidationFunction[] = [RequiredBalanceBlockStateValidator, ...additionalValidators]\n return [...errors, ...(await Promise.all(validators.map(v => v(hydratedBlock, chainId, archivist)))).flat()]\n}\n","import type { Address } from '@xylabs/hex'\nimport type { HydratedTransactionValidatorFunction, HydratedTransactionWithStorageMeta } from '@xyo-network/xl1-model'\nimport { isTransactionBoundWitness } from '@xyo-network/xl1-model'\n\nimport { BoundWitnessReferencesValidator } from '../boundwitness/index.ts'\nimport {\n TransactionElevationValidator, TransactionFromValidator, TransactionJsonSchemaValidator, TransactionProtocolValidator,\n} from './validators/index.ts'\n\nexport async function validateTransaction(\n tx: HydratedTransactionWithStorageMeta,\n chainId: Address,\n additionalValidators: HydratedTransactionValidatorFunction[] = [],\n): Promise<Error[]> {\n if (!isTransactionBoundWitness(tx[0])) {\n return [new Error('failed isTransactionBoundWitness identity check')]\n }\n\n const validators: HydratedTransactionValidatorFunction[] = [\n TransactionProtocolValidator,\n // TransactionJsonSchemaValidator, // TODO: Figure out why this is failing\n TransactionFromValidator,\n TransactionElevationValidator,\n BoundWitnessReferencesValidator(),\n ...additionalValidators,\n ]\n return (await Promise.all(validators.map(v => v(tx, chainId)))).flat()\n}\n","import type { Promisable } from '@xylabs/promise'\nimport type {\n HydratedTransactionValidatorFunction, HydratedTransactionWithStorageMeta, TransactionBoundWitness,\n} from '@xyo-network/xl1-model'\n\nexport const TransactionElevationValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = (\n [_tx, _txPayloads]: HydratedTransactionWithStorageMeta,\n): Promisable<Error[]> => {\n const errors: Error[] = []\n // TODO: Add validation for transaction elevation\n return errors\n}\n","import { type Address, asAddress } from '@xylabs/hex'\nimport { addressesContains } from '@xyo-network/boundwitness-validator'\nimport type {\n HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-model'\n\nexport const TransactionFromValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = (\n [tx]: HydratedTransaction,\n _chainId: Address,\n): Error[] => {\n const errors: Error[] = []\n const from = asAddress(tx.from)\n if (from === undefined)errors.push(new Error('Transaction from is not a valid address'))\n else if (!addressesContains(tx, from)) errors.push(new Error('Transaction from address must be listed in addresses'))\n return errors\n}\n","import type { Promisable } from '@xylabs/promise'\nimport { TransactionBoundWitnessJsonSchema } from '@xyo-network/chain-schema'\nimport { PayloadBuilder } from '@xyo-network/payload-builder'\nimport type {\n HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-model'\nimport { Ajv } from 'ajv'\n\nexport const TransactionJsonSchemaValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = (\n [tx]: HydratedTransaction,\n): Promisable<Error[]> => {\n const errors: Error[] = []\n try {\n const ajv = new Ajv({ allErrors: true, strict: true })\n // see if you can export the super set\n const validate = ajv.compile(TransactionBoundWitnessJsonSchema)\n if (!validate(PayloadBuilder.omitStorageMeta(tx))) {\n const error = new Error('failed JSON schema validation')\n error.cause = validate.errors\n errors.push(error)\n }\n } catch (ex) {\n errors.push(new Error('validation excepted'), ex as Error)\n }\n return errors\n}\n","import type { Address } from '@xylabs/hex'\nimport { BoundWitnessWrapper } from '@xyo-network/boundwitness-wrapper'\nimport type {\n HydratedTransaction, HydratedTransactionValidatorFunction, TransactionBoundWitness,\n} from '@xyo-network/xl1-model'\n\nexport const TransactionProtocolValidator: HydratedTransactionValidatorFunction<TransactionBoundWitness> = async (\n [tx]: HydratedTransaction,\n chainId: Address,\n): Promise<Error[]> => {\n const errors: Error[] = []\n try {\n if (!await BoundWitnessWrapper.parse(tx).getValid()) {\n errors.push(new Error('failed basic boundwitness parse'))\n }\n if (chainId && tx.chain !== chainId) {\n errors.push(new Error('invalid chain id'))\n }\n } catch (ex) {\n errors.push(new Error('validation excepted'), ex as Error)\n }\n return errors\n}\n"],"mappings":"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","names":["isAnyPayload","getPayloadsFromPayloadArray","payloads","hashes","map","hash","find","payload","_hash","_dataHash","BoundWitnessReferencesValidator","allowedSchemas","bw","payloadSet","errors","payload_hashes","length","push","Error","isAnyPayload","payloadHashIndex","indexOf","payloadDataHashIndex","payloadIndex","Math","max","declaredSchema","payload_schemas","schema","includes","ex","toArrayBuffer","BoundWitnessBuilder","BoundWitnessValidator","BoundWitnessSignaturesValidator","bw","errors","dataHash","BoundWitnessBuilder","results","Promise","all","addresses","map","address","index","BoundWitnessValidator","validateSignature","toArrayBuffer","$signatures","bwErrors","push","ex","Error","isAllowedBlockPayloadSchema","BlockAllowedPayloadSchemasValidator","block","errors","schema","payload_schemas","isAllowedBlockPayloadSchema","push","Error","BlockFieldsValidator","block","chainId","errors","chain","toLowerCase","push","Error","BlockBoundWitnessWithStorageMetaJsonSchema","Ajv","BlockJsonSchemaValidator","jsonSchema","BlockBoundWitnessWithStorageMetaJsonSchema","block","errors","ajv","Ajv","allErrors","strict","validate","compile","error","Error","cause","push","isHash","BlockPreviousHashValidator","block","errors","blockNumber","isHash","previous","push","Error","validateBlock","block","chainId","validators","BoundWitnessSignaturesValidator","BlockFieldsValidator","BlockPreviousHashValidator","BlockJsonSchemaValidator","BlockAllowedPayloadSchemasValidator","errors","Promise","all","map","validator","flat","ex","Error","BoundWitnessSchema","SchemaSchema","ChainStakeIntentSchema","HashSchema","TransferSchema","isTransactionBoundWitness","isElevatedFromBlock","payload","payloads","txs","filter","p","isTransactionBoundWitness","tx","payload_hashes","includes","_hash","transactionPayloadsFromHydratedBlock","validateElevatedFromBlock","payload","block","errors","txPayloadHashes","Set","transactionPayloadsFromHydratedBlock","map","tx","_hash","has","push","Error","schema","transactionsFromHydratedBlock","validateElevatedFromTransaction","payload","block","errors","txs","transactionsFromHydratedBlock","length","hashes","flatMap","tx","payload_hashes","includes","_hash","push","Error","isStorageMeta","isTransactionBoundWitness","validateTransactionInBlock","payload","_block","errors","isTransactionBoundWitness","isStorageMeta","push","BoundWitnessSignaturesValidator","Error","isStorageMeta","validateTypedPayloadInBlock","payload","block","identityFunction","errors","isStorageMeta","isElevatedFromBlock","push","validateElevatedFromBlock","validateElevatedFromTransaction","Error","isChainStakeIntent","validateChainStakeIntentInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isChainStakeIntent","isHashPayload","validateHashInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isHashPayload","isSchemaPayload","validateSchemaInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isSchemaPayload","isTransfer","validateTransferInBlock","payload","block","errors","push","validateTypedPayloadInBlock","isTransfer","payloadValidators","HashSchema","validateHashInBlock","TransferSchema","validateTransferInBlock","SchemaSchema","validateSchemaInBlock","ChainStakeIntentSchema","validateChainStakeIntentInBlock","BoundWitnessSchema","validateTransactionInBlock","validatePayloadInBlock","payload","block","errors","validator","schema","push","Error","PayloadsInBlockValidator","block","payloads","errors","payloadMap","payload","_hash","i","payload_hashes","length","hash","schema","payload_schemas","push","validatePayloadInBlock","Error","Object","keys","join","validateHydratedBlock","hydratedBlock","chainId","additionalValidators","errors","validateBlock","validators","BoundWitnessReferencesValidator","PayloadsInBlockValidator","Promise","all","map","v","flat","assertEx","analyzeChain","BalanceAnalyzer","isChainSummaryBalances","netBalancesForPayloads","RequiredBalanceBlockStateValidator","block","chainId","archivist","errors","netBalances","netBalancesForPayloads","netBalanceAddresses","Object","keys","requiredBalances","address","previous","Error","results","analyzeChain","BalanceAnalyzer","values","summaryBalances","assertEx","find","isChainSummaryBalances","reqBalance","entries","balance","BigInt","balances","push","validateHydratedBlockState","hydratedBlock","chainId","archivist","additionalValidators","errors","validateHydratedBlock","validators","RequiredBalanceBlockStateValidator","Promise","all","map","v","flat","isTransactionBoundWitness","TransactionElevationValidator","_tx","_txPayloads","errors","asAddress","addressesContains","TransactionFromValidator","tx","_chainId","errors","from","asAddress","undefined","push","Error","addressesContains","TransactionBoundWitnessJsonSchema","PayloadBuilder","Ajv","TransactionJsonSchemaValidator","tx","errors","ajv","Ajv","allErrors","strict","validate","compile","TransactionBoundWitnessJsonSchema","PayloadBuilder","omitStorageMeta","error","Error","cause","push","ex","BoundWitnessWrapper","TransactionProtocolValidator","tx","chainId","errors","BoundWitnessWrapper","parse","getValid","push","Error","chain","ex","validateTransaction","tx","chainId","additionalValidators","isTransactionBoundWitness","Error","validators","TransactionProtocolValidator","TransactionFromValidator","TransactionElevationValidator","BoundWitnessReferencesValidator","Promise","all","map","v","flat"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/block/index.ts"],"names":[],"mappings":"AAAA,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/block/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validateBlock.d.ts","sourceRoot":"","sources":["../../../src/block/validateBlock.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validateBlock.d.ts","sourceRoot":"","sources":["../../../src/block/validateBlock.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAQvF,eAAO,MAAM,aAAa,EAAE,sBAmB3B,CAAA"}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type BlockValidatorFunction } from '@xyo-network/xl1-model';
|
|
2
2
|
export declare const BlockAllowedPayloadSchemasValidator: BlockValidatorFunction;
|
|
3
3
|
//# sourceMappingURL=AllowedPayloadSchemas.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AllowedPayloadSchemas.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/AllowedPayloadSchemas.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"AllowedPayloadSchemas.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/AllowedPayloadSchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EACmB,KAAK,sBAAsB,EACpD,MAAM,wBAAwB,CAAA;AAE/B,eAAO,MAAM,mCAAmC,EAAE,sBAUjD,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/Fields.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Fields.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/Fields.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAEvF,eAAO,MAAM,oBAAoB,EAAE,sBASlC,CAAA"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
+
import type { BlockValidatorFunction } from '@xyo-network/xl1-model';
|
|
1
2
|
import type { AnySchema } from 'ajv';
|
|
2
|
-
import type { BlockValidatorFunction } from '../BlockValidationFunction.ts';
|
|
3
3
|
export declare const BlockJsonSchemaValidator: (jsonSchema?: AnySchema) => BlockValidatorFunction;
|
|
4
4
|
//# sourceMappingURL=JsonSchema.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"JsonSchema.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/JsonSchema.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"JsonSchema.d.ts","sourceRoot":"","sources":["../../../../src/block/validators/JsonSchema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AACvF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,KAAK,CAAA;AAGpC,eAAO,MAAM,wBAAwB,GAAI,aAAY,SAAsD,KAAG,sBAc7G,CAAA"}
|