@xyo-network/xl1-protocol 5.3.8 → 5.4.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/README.md +76 -0
- package/dist/neutral/modules/network-model/staticRest/layout/chainContractManifest.d.ts +21 -7
- package/dist/neutral/modules/network-model/staticRest/layout/chainContractManifest.d.ts.map +1 -1
- package/dist/neutral/modules/network-model/staticRest/layout/chainManifest.d.ts +21 -7
- package/dist/neutral/modules/network-model/staticRest/layout/chainManifest.d.ts.map +1 -1
- package/dist/neutral/modules/network-model/staticRest/layout/indexManifest.d.ts +42 -14
- package/dist/neutral/modules/network-model/staticRest/layout/indexManifest.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/RecordKeyType.d.ts +1 -1
- package/dist/neutral/modules/protocol-model/RecordKeyType.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/TransferPayload.d.ts +6 -18
- package/dist/neutral/modules/protocol-model/TransferPayload.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/block/AllowedBlockPayload.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/block/BlockBoundWitness.d.ts +83 -2
- package/dist/neutral/modules/protocol-model/block/BlockBoundWitness.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/block/HydratedBlock.d.ts +88 -0
- package/dist/neutral/modules/protocol-model/block/HydratedBlock.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/block/signed/SignedBlockBoundWitness.d.ts +6 -0
- package/dist/neutral/modules/protocol-model/block/signed/SignedBlockBoundWitness.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/block/signed/SignedBlockBoundWitnessWithHashMeta.d.ts +10 -0
- package/dist/neutral/modules/protocol-model/block/signed/SignedBlockBoundWitnessWithHashMeta.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/block/signed/SignedBlockBoundWitnessWithStorageMeta.d.ts +12 -0
- package/dist/neutral/modules/protocol-model/block/signed/SignedBlockBoundWitnessWithStorageMeta.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/block/unsigned/UnsignedBlockBoundWitness.d.ts +6 -0
- package/dist/neutral/modules/protocol-model/block/unsigned/UnsignedBlockBoundWitness.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/model/AccountBalance.d.ts +3 -0
- package/dist/neutral/modules/protocol-model/model/AccountBalance.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/model/Context/ChainContext.zod.d.ts +3 -0
- package/dist/neutral/modules/protocol-model/model/Context/ChainContext.zod.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/model/Context/HeadContext.zod.d.ts +2 -0
- package/dist/neutral/modules/protocol-model/model/Context/HeadContext.zod.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/model/HydratedTransaction.d.ts +108 -0
- package/dist/neutral/modules/protocol-model/model/HydratedTransaction.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/model/PayloadVersion.d.ts +20 -0
- package/dist/neutral/modules/protocol-model/model/PayloadVersion.d.ts.map +1 -0
- package/dist/neutral/modules/protocol-model/model/SyncStepSummary.d.ts +12 -0
- package/dist/neutral/modules/protocol-model/model/SyncStepSummary.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/model/index.d.ts +1 -0
- package/dist/neutral/modules/protocol-model/model/index.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/payload/elevatable/Claim.d.ts +43 -16
- package/dist/neutral/modules/protocol-model/payload/elevatable/Claim.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/payload/elevatable/Time.d.ts +3 -0
- package/dist/neutral/modules/protocol-model/payload/elevatable/Time.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/rejection/BlockRejectionPayload.d.ts +11 -0
- package/dist/neutral/modules/protocol-model/rejection/BlockRejectionPayload.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/rejection/TransactionRejectionPayload.d.ts +11 -0
- package/dist/neutral/modules/protocol-model/rejection/TransactionRejectionPayload.d.ts.map +1 -1
- package/dist/neutral/modules/protocol-model/transaction/TransactionBoundWitness.d.ts +54 -0
- package/dist/neutral/modules/protocol-model/transaction/TransactionBoundWitness.d.ts.map +1 -1
- package/dist/neutral/modules/schema/PayloadVersion.d.ts +11 -0
- package/dist/neutral/modules/schema/PayloadVersion.d.ts.map +1 -0
- package/dist/neutral/modules/schema/boundwitness/BlockBoundWitness.d.ts +1 -0
- package/dist/neutral/modules/schema/boundwitness/BlockBoundWitness.d.ts.map +1 -1
- package/dist/neutral/modules/schema/boundwitness/BlockBoundWitnessWithStorageMeta.d.ts +1 -0
- package/dist/neutral/modules/schema/boundwitness/BlockBoundWitnessWithStorageMeta.d.ts.map +1 -1
- package/dist/neutral/modules/schema/boundwitness/TransactionBoundWitness.d.ts +1 -0
- package/dist/neutral/modules/schema/boundwitness/TransactionBoundWitness.d.ts.map +1 -1
- package/dist/neutral/modules/schema/boundwitness/TransactionBoundWitnessWithStorageMeta.d.ts +1 -0
- package/dist/neutral/modules/schema/boundwitness/TransactionBoundWitnessWithStorageMeta.d.ts.map +1 -1
- package/dist/neutral/modules/schema/index.d.ts +1 -0
- package/dist/neutral/modules/schema/index.d.ts.map +1 -1
- package/dist/neutral/modules/schema/payload/ChainStakeIntent.d.ts +1 -0
- package/dist/neutral/modules/schema/payload/ChainStakeIntent.d.ts.map +1 -1
- package/dist/neutral/modules/schema/payload/ClaimPayload.d.ts +1 -0
- package/dist/neutral/modules/schema/payload/ClaimPayload.d.ts.map +1 -1
- package/dist/neutral/modules/schema/payload/HashPayload.d.ts +1 -0
- package/dist/neutral/modules/schema/payload/HashPayload.d.ts.map +1 -1
- package/dist/neutral/modules/schema/payload/TransferPayload.d.ts +1 -0
- package/dist/neutral/modules/schema/payload/TransferPayload.d.ts.map +1 -1
- package/dist/neutral/modules/validation/transaction/validators/TransactionBoundWitnessValidator.d.ts +1 -0
- package/dist/neutral/modules/validation/transaction/validators/TransactionBoundWitnessValidator.d.ts.map +1 -1
- package/dist/neutral/network-model.mjs +15 -12
- package/dist/neutral/network-model.mjs.map +3 -3
- package/dist/neutral/protocol-model.mjs +470 -429
- package/dist/neutral/protocol-model.mjs.map +4 -4
- package/dist/neutral/schema.mjs +24 -3
- package/dist/neutral/schema.mjs.map +3 -3
- package/dist/neutral/validation.mjs +4 -0
- package/dist/neutral/validation.mjs.map +2 -2
- package/package.json +5 -5
package/dist/neutral/schema.mjs
CHANGED
|
@@ -16,12 +16,21 @@ var asRequiredStrings = (required) => {
|
|
|
16
16
|
};
|
|
17
17
|
var mergeJsonSchemaRequired = (...groups) => [...new Set(groups.flatMap(asRequiredStrings))];
|
|
18
18
|
|
|
19
|
+
// src/modules/schema/PayloadVersion.ts
|
|
20
|
+
import { Xl1PayloadVersion } from "#protocol-model";
|
|
21
|
+
var Xl1PayloadVersionJsonSchema = {
|
|
22
|
+
type: "integer",
|
|
23
|
+
const: Xl1PayloadVersion,
|
|
24
|
+
nullable: true
|
|
25
|
+
};
|
|
26
|
+
|
|
19
27
|
// src/modules/schema/boundwitness/BlockBoundWitness.ts
|
|
20
28
|
var BlockBoundWitnessJsonSchema = {
|
|
21
29
|
...boundWitnessJsonSchema,
|
|
22
30
|
$id: "https://schemas.xyo.network/2.0/block",
|
|
23
31
|
properties: {
|
|
24
32
|
...boundWitnessProperties,
|
|
33
|
+
$version: Xl1PayloadVersionJsonSchema,
|
|
25
34
|
block: { type: "integer" },
|
|
26
35
|
chain: { type: "string", pattern: AddressRegEx.source },
|
|
27
36
|
previous: {
|
|
@@ -111,6 +120,7 @@ var TransactionBoundWitnessJsonSchema = {
|
|
|
111
120
|
properties: {
|
|
112
121
|
...boundWitnessJsonSchema3.properties,
|
|
113
122
|
...ExecutableJsonSchema.properties,
|
|
123
|
+
$version: Xl1PayloadVersionJsonSchema,
|
|
114
124
|
chain: { type: "string", pattern: AddressRegEx2.source },
|
|
115
125
|
fees: {
|
|
116
126
|
type: "object",
|
|
@@ -176,6 +186,7 @@ var ChainStakeIntentPayloadJsonSchema = {
|
|
|
176
186
|
additionalProperties: false,
|
|
177
187
|
properties: {
|
|
178
188
|
...payloadJsonSchema.properties,
|
|
189
|
+
$version: Xl1PayloadVersionJsonSchema,
|
|
179
190
|
from: { type: "string", pattern: XyoAddressRegEx2.source },
|
|
180
191
|
intent: { type: "string", enum: ["producer"] },
|
|
181
192
|
schema: { type: "string", pattern: ChainStakeIntentSchema }
|
|
@@ -201,6 +212,7 @@ var ClaimPayloadJsonSchema = {
|
|
|
201
212
|
additionalProperties: false,
|
|
202
213
|
properties: {
|
|
203
214
|
...payloadJsonSchema2.properties,
|
|
215
|
+
$version: Xl1PayloadVersionJsonSchema,
|
|
204
216
|
hashes: {
|
|
205
217
|
type: "array",
|
|
206
218
|
items: { type: "string", pattern: HashRegEx3.source },
|
|
@@ -209,9 +221,15 @@ var ClaimPayloadJsonSchema = {
|
|
|
209
221
|
uniqueItems: true
|
|
210
222
|
},
|
|
211
223
|
schema: { type: "string", pattern: ClaimSchema },
|
|
212
|
-
source: { type: "string", pattern: XyoAddressRegEx3.source }
|
|
224
|
+
source: { type: "string", pattern: XyoAddressRegEx3.source },
|
|
225
|
+
subject: {
|
|
226
|
+
anyOf: [
|
|
227
|
+
{ type: "string", pattern: XyoAddressRegEx3.source },
|
|
228
|
+
{ type: "string", pattern: HashRegEx3.source }
|
|
229
|
+
]
|
|
230
|
+
}
|
|
213
231
|
},
|
|
214
|
-
required: mergeJsonSchemaRequired(payloadJsonSchema2.required, "source", "hashes"),
|
|
232
|
+
required: mergeJsonSchemaRequired(payloadJsonSchema2.required, "source", "subject", "hashes"),
|
|
215
233
|
type: "object"
|
|
216
234
|
};
|
|
217
235
|
var claimPayloadJsonSchemaBuilder = new PayloadBuilder6({ schema: SchemaSchema6 });
|
|
@@ -231,6 +249,7 @@ var HashPayloadJsonSchema = {
|
|
|
231
249
|
additionalProperties: false,
|
|
232
250
|
properties: {
|
|
233
251
|
...payloadJsonSchema3.properties,
|
|
252
|
+
$version: Xl1PayloadVersionJsonSchema,
|
|
234
253
|
hash: { type: "string", pattern: HashRegEx4.source },
|
|
235
254
|
schema: { type: "string", pattern: HashSchema }
|
|
236
255
|
},
|
|
@@ -255,6 +274,7 @@ var TransferPayloadJsonSchema = {
|
|
|
255
274
|
additionalProperties: false,
|
|
256
275
|
properties: {
|
|
257
276
|
...payloadJsonSchema4.properties,
|
|
277
|
+
$version: Xl1PayloadVersionJsonSchema,
|
|
258
278
|
from: { type: "string", pattern: XyoAddressRegEx4.source },
|
|
259
279
|
epoch: { type: "number" },
|
|
260
280
|
transfers: {
|
|
@@ -287,6 +307,7 @@ export {
|
|
|
287
307
|
TransactionBoundWitnessWithStorageMetaJsonSchema,
|
|
288
308
|
TransactionBoundWitnessWithStorageMetaSchemaPayload,
|
|
289
309
|
TransferPayloadJsonSchema,
|
|
290
|
-
TransferPayloadJsonSchemaPayload
|
|
310
|
+
TransferPayloadJsonSchemaPayload,
|
|
311
|
+
Xl1PayloadVersionJsonSchema
|
|
291
312
|
};
|
|
292
313
|
//# sourceMappingURL=schema.mjs.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../../src/modules/schema/boundwitness/BlockBoundWitness.ts", "../../src/modules/schema/mergeJsonSchemaRequired.ts", "../../src/modules/schema/boundwitness/BlockBoundWitnessWithStorageMeta.ts", "../../src/modules/schema/StorageMeta.ts", "../../src/modules/schema/boundwitness/TransactionBoundWitness.ts", "../../src/modules/schema/Executable.ts", "../../src/modules/schema/boundwitness/TransactionBoundWitnessWithStorageMeta.ts", "../../src/modules/schema/payload/ChainStakeIntent.ts", "../../src/modules/schema/payload/ClaimPayload.ts", "../../src/modules/schema/payload/HashPayload.ts", "../../src/modules/schema/payload/TransferPayload.ts"],
|
|
4
|
-
"sourcesContent": ["import { AddressRegEx, HashRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n boundWitnessJsonSchema, boundWitnessProperties, BoundWitnessSchema,\n PayloadBuilder, SchemaSchema,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { BlockBoundWitness } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\n\n/** JSON schema for validating BlockBoundWitness payloads. */\nexport const BlockBoundWitnessJsonSchema: JSONSchemaType<BlockBoundWitness> = {\n ...boundWitnessJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/block',\n properties: {\n ...boundWitnessProperties,\n block: { type: 'integer' },\n chain: { type: 'string', pattern: AddressRegEx.source },\n previous: {\n type: 'string', pattern: HashRegEx.source, nullable: true,\n },\n step_hashes: {\n items: { type: 'string', pattern: HashRegEx.source },\n type: 'array',\n },\n $epoch: { type: 'integer' },\n schema: { type: 'string', pattern: BoundWitnessSchema },\n },\n\n required: mergeJsonSchemaRequired<BlockBoundWitness>(boundWitnessJsonSchema.required, 'block', 'chain', 'step_hashes', 'previous', '$epoch'),\n type: 'object',\n} as const\n\n/** Pre-built schema payload for BlockBoundWitness validation. */\nconst blockBoundWitnessSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link BlockBoundWitnessJsonSchema} for registry-based validation. */\nexport const BlockBoundWitnessSchemaPayload = blockBoundWitnessSchemaBuilder\n .fields({ definition: BlockBoundWitnessJsonSchema }).build()\n", "import type { JSONSchemaType } from 'ajv'\n\n/**\n * Normalizes an AJV `required` value to a readonly string array.\n *\n * @param required Candidate value from a JSON-schema definition.\n * @returns The string itself as one item, its string array items, or an empty array.\n */\nexport const asRequiredStrings = (required: unknown): readonly string[] => {\n if (typeof required === 'string') return [required]\n if (!Array.isArray(required)) return []\n return required.filter((item): item is string => typeof item === 'string')\n}\n\n/** Merge JSON schema `required` arrays without spreading untyped sdk-js values. */\nexport const mergeJsonSchemaRequired = <T>(\n ...groups: readonly unknown[]\n): JSONSchemaType<T> extends { required: infer R } ? R : never => (\n [...new Set(groups.flatMap(asRequiredStrings))] as JSONSchemaType<T> extends { required: infer R } ? R : never\n)\n", "import type { SchemaPayload, WithStorageMeta } from '@xyo-network/sdk'\nimport {\n boundWitnessJsonSchema, boundWitnessProperties, BoundWitnessSchema,\n PayloadBuilder, SchemaSchema,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { BlockBoundWitness } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { StorageMetaJsonSchema } from '../StorageMeta.ts'\nimport { BlockBoundWitnessJsonSchema } from './BlockBoundWitness.ts'\n\n/** JSON schema for validating BlockBoundWitness payloads including storage metadata. */\nexport const BlockBoundWitnessWithStorageMetaJsonSchema: JSONSchemaType<WithStorageMeta<BlockBoundWitness>> = {\n $id: 'https://schemas.xyo.network/2.0/block-with-storage-meta',\n properties: {\n ...boundWitnessProperties,\n ...BlockBoundWitnessJsonSchema.properties,\n ...StorageMetaJsonSchema.properties,\n schema: { type: 'string', pattern: BoundWitnessSchema },\n },\n\n required: mergeJsonSchemaRequired<WithStorageMeta<BlockBoundWitness>>(\n boundWitnessJsonSchema.required,\n BlockBoundWitnessJsonSchema.required,\n StorageMetaJsonSchema.required,\n ),\n type: 'object',\n} as const\n\n/** Pre-built schema payload for BlockBoundWitness with storage meta validation. */\nconst blockBoundWitnessWithStorageMetaSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes the storage-meta block definition for registry-based validation. */\nexport const BlockBoundWitnessWithStorageMetaSchemaPayload = blockBoundWitnessWithStorageMetaSchemaBuilder\n .fields({ definition: BlockBoundWitnessWithStorageMetaJsonSchema }).build()\n", "import { HashRegEx, HexRegEx } from '@ariestools/sdk'\nimport type { StorageMeta } from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\n/** JSON schema for validating storage metadata fields (_sequence, _hash, _dataHash). */\nexport const StorageMetaJsonSchema: JSONSchemaType<StorageMeta> = {\n $id: 'https://schemas.xyo.network/2.0/storage-meta',\n properties: {\n _sequence: { type: 'string', pattern: HexRegEx.source },\n _hash: { type: 'string', pattern: HashRegEx.source },\n _dataHash: { type: 'string', pattern: HashRegEx.source },\n },\n required: ['_sequence', '_hash', '_dataHash'],\n type: 'object',\n} as const\n", "import { AddressRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n boundWitnessJsonSchema, BoundWitnessSchema,\n PayloadBuilder, SchemaSchema,\n Uint256RegEx, XyoAddressRegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { TransactionBoundWitness } from '#protocol-lib'\n\nimport { ExecutableJsonSchema } from '../Executable.ts'\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\n\n/** JSON schema for validating TransactionBoundWitness payloads. */\nexport const TransactionBoundWitnessJsonSchema: JSONSchemaType<TransactionBoundWitness> = {\n ...boundWitnessJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/transaction',\n additionalProperties: false,\n properties: {\n ...boundWitnessJsonSchema.properties,\n ...ExecutableJsonSchema.properties,\n chain: { type: 'string', pattern: AddressRegEx.source },\n fees: {\n type: 'object',\n properties: {\n base: { type: 'string', pattern: Uint256RegEx.source },\n gasLimit: { type: 'string', pattern: Uint256RegEx.source },\n gasPrice: { type: 'string', pattern: Uint256RegEx.source },\n priority: { type: 'string', pattern: Uint256RegEx.source },\n },\n required: ['base'],\n additionalProperties: false,\n },\n from: { type: 'string', pattern: XyoAddressRegEx.source },\n nbf: { type: 'integer' },\n exp: { type: 'integer' },\n schema: { type: 'string', pattern: BoundWitnessSchema },\n },\n\n required: mergeJsonSchemaRequired<TransactionBoundWitness>(boundWitnessJsonSchema.required, 'chain', 'fees', 'nbf', 'exp'),\n type: 'object',\n} as const\n\n/** Pre-built schema payload for TransactionBoundWitness validation. */\nconst transactionBoundWitnessSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link TransactionBoundWitnessJsonSchema} for registry-based validation. */\nexport const TransactionBoundWitnessSchemaPayload = transactionBoundWitnessSchemaBuilder\n .fields({ definition: TransactionBoundWitnessJsonSchema }).build()\n", "import type { JSONSchemaType } from 'ajv'\n\nimport type { Executable } from '#protocol-lib'\n\n/** JSON schema for validating Executable payloads containing elevation scripts. */\nexport const ExecutableJsonSchema: JSONSchemaType<Executable> = {\n $id: 'https://schemas.xyo.network/2.0/executable',\n additionalProperties: true,\n properties: { script: { items: { type: 'string', pattern: String.raw`^elevate\\|` }, type: 'array' } },\n required: ['script'],\n type: 'object',\n} as const\n", "import { AddressRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n boundWitnessJsonSchema, BoundWitnessSchema,\n PayloadBuilder, SchemaSchema,\n Uint256RegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { TransactionBoundWitness } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { StorageMetaJsonSchema } from '../StorageMeta.ts'\n\n/** JSON schema for validating TransactionBoundWitness payloads including storage metadata. */\nexport const TransactionBoundWitnessWithStorageMetaJsonSchema: JSONSchemaType<TransactionBoundWitness> = {\n ...boundWitnessJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/transaction-with-storage-meta',\n additionalProperties: false,\n properties: {\n ...boundWitnessJsonSchema.properties,\n ...StorageMetaJsonSchema.properties,\n chain: { type: 'string', pattern: AddressRegEx.source },\n gas: { type: 'string', pattern: Uint256RegEx.source },\n nbf: { type: 'integer' },\n exp: { type: 'integer' },\n schema: { type: 'string', pattern: BoundWitnessSchema },\n },\n\n required: mergeJsonSchemaRequired<TransactionBoundWitness>(boundWitnessJsonSchema.required, StorageMetaJsonSchema.required, 'chain', 'gas', 'nbf', 'exp'),\n type: 'object',\n} as const\n\n/** Pre-built schema payload for TransactionBoundWitness with storage meta validation. */\nconst transactionBoundWitnessWithStorageMetaSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes the storage-meta transaction definition for registry-based validation. */\nexport const TransactionBoundWitnessWithStorageMetaSchemaPayload = transactionBoundWitnessWithStorageMetaSchemaBuilder\n .fields({ definition: TransactionBoundWitnessWithStorageMetaJsonSchema }).build()\n", "import type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n PayloadBuilder, payloadJsonSchema, SchemaSchema, XyoAddressRegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { ChainStakeIntent } from '#protocol-lib'\nimport { ChainStakeIntentSchema } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\n\n/** JSON schema for validating ChainStakeIntent payloads. */\nexport const ChainStakeIntentPayloadJsonSchema: JSONSchemaType<ChainStakeIntent> = {\n ...payloadJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/payload/chain-stake-intent',\n additionalProperties: false,\n properties: {\n ...payloadJsonSchema.properties,\n from: { type: 'string', pattern: XyoAddressRegEx.source },\n intent: { type: 'string', enum: ['producer'] },\n schema: { type: 'string', pattern: ChainStakeIntentSchema },\n },\n\n required: mergeJsonSchemaRequired<ChainStakeIntent>(payloadJsonSchema.required, 'intent'),\n type: 'object',\n}\n\n/** Pre-built schema payload for ChainStakeIntent validation. */\nconst chainStakeIntentPayloadJsonSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link ChainStakeIntentPayloadJsonSchema} for registry-based validation. */\nexport const ChainStakeIntentPayloadJsonSchemaPayload = chainStakeIntentPayloadJsonSchemaBuilder\n .fields({ definition: ChainStakeIntentPayloadJsonSchema }).build()\n", "import { HashRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n PayloadBuilder, payloadJsonSchema, SchemaSchema,\n XyoAddressRegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { Claim } from '#protocol-lib'\nimport { ClaimSchema, MAX_CLAIM_HASHES } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\n\n/** JSON schema for validating Claim payloads. */\nexport const ClaimPayloadJsonSchema: JSONSchemaType<Claim> = {\n ...payloadJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/payload/statement-claim',\n additionalProperties: false,\n properties: {\n ...payloadJsonSchema.properties,\n hashes: {\n type: 'array',\n items: { type: 'string', pattern: HashRegEx.source },\n maxItems: MAX_CLAIM_HASHES,\n minItems: 1,\n uniqueItems: true,\n },\n schema: { type: 'string', pattern: ClaimSchema },\n source: { type: 'string', pattern: XyoAddressRegEx.source },\n },\n required: mergeJsonSchemaRequired<Claim>(payloadJsonSchema.required, 'source', 'hashes'),\n type: 'object',\n}\n\n/** Pre-built schema payload for Claim validation. */\nconst claimPayloadJsonSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link ClaimPayloadJsonSchema} for registry-based validation. */\nexport const ClaimPayloadJsonSchemaPayload = claimPayloadJsonSchemaBuilder\n .fields({ definition: ClaimPayloadJsonSchema }).build()\n", "import { HashRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n PayloadBuilder, payloadJsonSchema, SchemaSchema,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { HashPayload } from '#protocol-lib'\nimport { HashSchema } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\n\n/** JSON schema for validating Hash payloads. */\nexport const HashPayloadJsonSchema: JSONSchemaType<HashPayload> = {\n ...payloadJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/payload/hash',\n additionalProperties: false,\n properties: {\n ...payloadJsonSchema.properties,\n hash: { type: 'string', pattern: HashRegEx.source },\n schema: { type: 'string', pattern: HashSchema },\n },\n\n required: mergeJsonSchemaRequired<HashPayload>(payloadJsonSchema.required, 'hash'),\n type: 'object',\n}\n\n/** Pre-built schema payload for Hash validation. */\nconst hashPayloadJsonSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link HashPayloadJsonSchema} for registry-based validation. */\nexport const HashPayloadJsonSchemaPayload = hashPayloadJsonSchemaBuilder\n .fields({ definition: HashPayloadJsonSchema }).build()\n", "import type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n PayloadBuilder, payloadJsonSchema, SchemaSchema,\n Uint256RegEx, XyoAddressRegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { Transfer } from '#protocol-lib'\nimport { TransferSchema } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\n\n/** JSON schema for validating Transfer payloads. */\nexport const TransferPayloadJsonSchema: JSONSchemaType<Transfer> = {\n ...payloadJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/payload/transfer',\n additionalProperties: false,\n properties: {\n ...payloadJsonSchema.properties,\n from: { type: 'string', pattern: XyoAddressRegEx.source },\n epoch: { type: 'number' },\n transfers: {\n type: 'object',\n propertyNames: { pattern: XyoAddressRegEx.source },\n patternProperties: { [XyoAddressRegEx.source]: { type: 'string', pattern: Uint256RegEx.source } },\n },\n schema: { type: 'string', pattern: TransferSchema },\n },\n\n required: mergeJsonSchemaRequired<Transfer>(payloadJsonSchema.required, 'transfers', 'epoch'),\n type: 'object',\n}\n\n/** Pre-built schema payload for Transfer validation. */\nconst transferPayloadJsonSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link TransferPayloadJsonSchema} for registry-based validation. */\nexport const TransferPayloadJsonSchemaPayload = transferPayloadJsonSchemaBuilder\n .fields({ definition: TransferPayloadJsonSchema }).build()\n"],
|
|
5
|
-
"mappings": ";AAAA,SAAS,cAAc,iBAAiB;AAExC;AAAA,EACE;AAAA,EAAwB;AAAA,EAAwB;AAAA,EAChD;AAAA,EAAgB;AAAA,OACX;;;ACGA,IAAM,oBAAoB,CAAC,aAAyC;AACzE,MAAI,OAAO,aAAa,SAAU,QAAO,CAAC,QAAQ;AAClD,MAAI,CAAC,MAAM,QAAQ,QAAQ,EAAG,QAAO,CAAC;AACtC,SAAO,SAAS,OAAO,CAAC,SAAyB,OAAO,SAAS,QAAQ;AAC3E;AAGO,IAAM,0BAA0B,IAClC,WAEH,CAAC,GAAG,IAAI,IAAI,OAAO,QAAQ,iBAAiB,CAAC,CAAC;;;
|
|
3
|
+
"sources": ["../../src/modules/schema/boundwitness/BlockBoundWitness.ts", "../../src/modules/schema/mergeJsonSchemaRequired.ts", "../../src/modules/schema/PayloadVersion.ts", "../../src/modules/schema/boundwitness/BlockBoundWitnessWithStorageMeta.ts", "../../src/modules/schema/StorageMeta.ts", "../../src/modules/schema/boundwitness/TransactionBoundWitness.ts", "../../src/modules/schema/Executable.ts", "../../src/modules/schema/boundwitness/TransactionBoundWitnessWithStorageMeta.ts", "../../src/modules/schema/payload/ChainStakeIntent.ts", "../../src/modules/schema/payload/ClaimPayload.ts", "../../src/modules/schema/payload/HashPayload.ts", "../../src/modules/schema/payload/TransferPayload.ts"],
|
|
4
|
+
"sourcesContent": ["import { AddressRegEx, HashRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n boundWitnessJsonSchema, boundWitnessProperties, BoundWitnessSchema,\n PayloadBuilder, SchemaSchema,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { BlockBoundWitness } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { Xl1PayloadVersionJsonSchema } from '../PayloadVersion.ts'\n\n/** JSON schema for validating BlockBoundWitness payloads. */\nexport const BlockBoundWitnessJsonSchema: JSONSchemaType<BlockBoundWitness> = {\n ...boundWitnessJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/block',\n properties: {\n ...boundWitnessProperties,\n $version: Xl1PayloadVersionJsonSchema,\n block: { type: 'integer' },\n chain: { type: 'string', pattern: AddressRegEx.source },\n previous: {\n type: 'string', pattern: HashRegEx.source, nullable: true,\n },\n step_hashes: {\n items: { type: 'string', pattern: HashRegEx.source },\n type: 'array',\n },\n $epoch: { type: 'integer' },\n schema: { type: 'string', pattern: BoundWitnessSchema },\n },\n\n required: mergeJsonSchemaRequired<BlockBoundWitness>(boundWitnessJsonSchema.required, 'block', 'chain', 'step_hashes', 'previous', '$epoch'),\n type: 'object',\n} as const\n\n/** Pre-built schema payload for BlockBoundWitness validation. */\nconst blockBoundWitnessSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link BlockBoundWitnessJsonSchema} for registry-based validation. */\nexport const BlockBoundWitnessSchemaPayload = blockBoundWitnessSchemaBuilder\n .fields({ definition: BlockBoundWitnessJsonSchema }).build()\n", "import type { JSONSchemaType } from 'ajv'\n\n/**\n * Normalizes an AJV `required` value to a readonly string array.\n *\n * @param required Candidate value from a JSON-schema definition.\n * @returns The string itself as one item, its string array items, or an empty array.\n */\nexport const asRequiredStrings = (required: unknown): readonly string[] => {\n if (typeof required === 'string') return [required]\n if (!Array.isArray(required)) return []\n return required.filter((item): item is string => typeof item === 'string')\n}\n\n/** Merge JSON schema `required` arrays without spreading untyped sdk-js values. */\nexport const mergeJsonSchemaRequired = <T>(\n ...groups: readonly unknown[]\n): JSONSchemaType<T> extends { required: infer R } ? R : never => (\n [...new Set(groups.flatMap(asRequiredStrings))] as JSONSchemaType<T> extends { required: infer R } ? R : never\n)\n", "import { Xl1PayloadVersion } from '#protocol-model'\n\n/**\n * JSON Schema property for the currently supported XL1 payload revision.\n * Leave it optional on the envelope; no default is inserted into signed content.\n * `const` also rejects null when an optional-property type requires `nullable`.\n */\nexport const Xl1PayloadVersionJsonSchema = {\n type: 'integer',\n const: Xl1PayloadVersion,\n nullable: true,\n} as const\n", "import type { SchemaPayload, WithStorageMeta } from '@xyo-network/sdk'\nimport {\n boundWitnessJsonSchema, boundWitnessProperties, BoundWitnessSchema,\n PayloadBuilder, SchemaSchema,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { BlockBoundWitness } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { StorageMetaJsonSchema } from '../StorageMeta.ts'\nimport { BlockBoundWitnessJsonSchema } from './BlockBoundWitness.ts'\n\n/** JSON schema for validating BlockBoundWitness payloads including storage metadata. */\nexport const BlockBoundWitnessWithStorageMetaJsonSchema: JSONSchemaType<WithStorageMeta<BlockBoundWitness>> = {\n $id: 'https://schemas.xyo.network/2.0/block-with-storage-meta',\n properties: {\n ...boundWitnessProperties,\n ...BlockBoundWitnessJsonSchema.properties,\n ...StorageMetaJsonSchema.properties,\n schema: { type: 'string', pattern: BoundWitnessSchema },\n },\n\n required: mergeJsonSchemaRequired<WithStorageMeta<BlockBoundWitness>>(\n boundWitnessJsonSchema.required,\n BlockBoundWitnessJsonSchema.required,\n StorageMetaJsonSchema.required,\n ),\n type: 'object',\n} as const\n\n/** Pre-built schema payload for BlockBoundWitness with storage meta validation. */\nconst blockBoundWitnessWithStorageMetaSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes the storage-meta block definition for registry-based validation. */\nexport const BlockBoundWitnessWithStorageMetaSchemaPayload = blockBoundWitnessWithStorageMetaSchemaBuilder\n .fields({ definition: BlockBoundWitnessWithStorageMetaJsonSchema }).build()\n", "import { HashRegEx, HexRegEx } from '@ariestools/sdk'\nimport type { StorageMeta } from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\n/** JSON schema for validating storage metadata fields (_sequence, _hash, _dataHash). */\nexport const StorageMetaJsonSchema: JSONSchemaType<StorageMeta> = {\n $id: 'https://schemas.xyo.network/2.0/storage-meta',\n properties: {\n _sequence: { type: 'string', pattern: HexRegEx.source },\n _hash: { type: 'string', pattern: HashRegEx.source },\n _dataHash: { type: 'string', pattern: HashRegEx.source },\n },\n required: ['_sequence', '_hash', '_dataHash'],\n type: 'object',\n} as const\n", "import { AddressRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n boundWitnessJsonSchema, BoundWitnessSchema,\n PayloadBuilder, SchemaSchema,\n Uint256RegEx, XyoAddressRegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { TransactionBoundWitness } from '#protocol-lib'\n\nimport { ExecutableJsonSchema } from '../Executable.ts'\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { Xl1PayloadVersionJsonSchema } from '../PayloadVersion.ts'\n\n/** JSON schema for validating TransactionBoundWitness payloads. */\nexport const TransactionBoundWitnessJsonSchema: JSONSchemaType<TransactionBoundWitness> = {\n ...boundWitnessJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/transaction',\n additionalProperties: false,\n properties: {\n ...boundWitnessJsonSchema.properties,\n ...ExecutableJsonSchema.properties,\n $version: Xl1PayloadVersionJsonSchema,\n chain: { type: 'string', pattern: AddressRegEx.source },\n fees: {\n type: 'object',\n properties: {\n base: { type: 'string', pattern: Uint256RegEx.source },\n gasLimit: { type: 'string', pattern: Uint256RegEx.source },\n gasPrice: { type: 'string', pattern: Uint256RegEx.source },\n priority: { type: 'string', pattern: Uint256RegEx.source },\n },\n required: ['base'],\n additionalProperties: false,\n },\n from: { type: 'string', pattern: XyoAddressRegEx.source },\n nbf: { type: 'integer' },\n exp: { type: 'integer' },\n schema: { type: 'string', pattern: BoundWitnessSchema },\n },\n\n required: mergeJsonSchemaRequired<TransactionBoundWitness>(boundWitnessJsonSchema.required, 'chain', 'fees', 'nbf', 'exp'),\n type: 'object',\n} as const\n\n/** Pre-built schema payload for TransactionBoundWitness validation. */\nconst transactionBoundWitnessSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link TransactionBoundWitnessJsonSchema} for registry-based validation. */\nexport const TransactionBoundWitnessSchemaPayload = transactionBoundWitnessSchemaBuilder\n .fields({ definition: TransactionBoundWitnessJsonSchema }).build()\n", "import type { JSONSchemaType } from 'ajv'\n\nimport type { Executable } from '#protocol-lib'\n\n/** JSON schema for validating Executable payloads containing elevation scripts. */\nexport const ExecutableJsonSchema: JSONSchemaType<Executable> = {\n $id: 'https://schemas.xyo.network/2.0/executable',\n additionalProperties: true,\n properties: { script: { items: { type: 'string', pattern: String.raw`^elevate\\|` }, type: 'array' } },\n required: ['script'],\n type: 'object',\n} as const\n", "import { AddressRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n boundWitnessJsonSchema, BoundWitnessSchema,\n PayloadBuilder, SchemaSchema,\n Uint256RegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { TransactionBoundWitness } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { StorageMetaJsonSchema } from '../StorageMeta.ts'\n\n/** JSON schema for validating TransactionBoundWitness payloads including storage metadata. */\nexport const TransactionBoundWitnessWithStorageMetaJsonSchema: JSONSchemaType<TransactionBoundWitness> = {\n ...boundWitnessJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/transaction-with-storage-meta',\n additionalProperties: false,\n properties: {\n ...boundWitnessJsonSchema.properties,\n ...StorageMetaJsonSchema.properties,\n chain: { type: 'string', pattern: AddressRegEx.source },\n gas: { type: 'string', pattern: Uint256RegEx.source },\n nbf: { type: 'integer' },\n exp: { type: 'integer' },\n schema: { type: 'string', pattern: BoundWitnessSchema },\n },\n\n required: mergeJsonSchemaRequired<TransactionBoundWitness>(boundWitnessJsonSchema.required, StorageMetaJsonSchema.required, 'chain', 'gas', 'nbf', 'exp'),\n type: 'object',\n} as const\n\n/** Pre-built schema payload for TransactionBoundWitness with storage meta validation. */\nconst transactionBoundWitnessWithStorageMetaSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes the storage-meta transaction definition for registry-based validation. */\nexport const TransactionBoundWitnessWithStorageMetaSchemaPayload = transactionBoundWitnessWithStorageMetaSchemaBuilder\n .fields({ definition: TransactionBoundWitnessWithStorageMetaJsonSchema }).build()\n", "import type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n PayloadBuilder, payloadJsonSchema, SchemaSchema, XyoAddressRegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { ChainStakeIntent } from '#protocol-lib'\nimport { ChainStakeIntentSchema } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { Xl1PayloadVersionJsonSchema } from '../PayloadVersion.ts'\n\n/** JSON schema for validating ChainStakeIntent payloads. */\nexport const ChainStakeIntentPayloadJsonSchema: JSONSchemaType<ChainStakeIntent> = {\n ...payloadJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/payload/chain-stake-intent',\n additionalProperties: false,\n properties: {\n ...payloadJsonSchema.properties,\n $version: Xl1PayloadVersionJsonSchema,\n from: { type: 'string', pattern: XyoAddressRegEx.source },\n intent: { type: 'string', enum: ['producer'] },\n schema: { type: 'string', pattern: ChainStakeIntentSchema },\n },\n\n required: mergeJsonSchemaRequired<ChainStakeIntent>(payloadJsonSchema.required, 'intent'),\n type: 'object',\n}\n\n/** Pre-built schema payload for ChainStakeIntent validation. */\nconst chainStakeIntentPayloadJsonSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link ChainStakeIntentPayloadJsonSchema} for registry-based validation. */\nexport const ChainStakeIntentPayloadJsonSchemaPayload = chainStakeIntentPayloadJsonSchemaBuilder\n .fields({ definition: ChainStakeIntentPayloadJsonSchema }).build()\n", "import { HashRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n PayloadBuilder, payloadJsonSchema, SchemaSchema,\n XyoAddressRegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { Claim } from '#protocol-lib'\nimport { ClaimSchema, MAX_CLAIM_HASHES } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { Xl1PayloadVersionJsonSchema } from '../PayloadVersion.ts'\n\n/** JSON schema for validating Claim payloads. */\nexport const ClaimPayloadJsonSchema: JSONSchemaType<Claim> = {\n ...payloadJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/payload/statement-claim',\n additionalProperties: false,\n properties: {\n ...payloadJsonSchema.properties,\n $version: Xl1PayloadVersionJsonSchema,\n hashes: {\n type: 'array',\n items: { type: 'string', pattern: HashRegEx.source },\n maxItems: MAX_CLAIM_HASHES,\n minItems: 1,\n uniqueItems: true,\n },\n schema: { type: 'string', pattern: ClaimSchema },\n source: { type: 'string', pattern: XyoAddressRegEx.source },\n subject: {\n anyOf: [\n { type: 'string', pattern: XyoAddressRegEx.source },\n { type: 'string', pattern: HashRegEx.source },\n ],\n },\n },\n required: mergeJsonSchemaRequired<Claim>(payloadJsonSchema.required, 'source', 'subject', 'hashes'),\n type: 'object',\n}\n\n/** Pre-built schema payload for Claim validation. */\nconst claimPayloadJsonSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link ClaimPayloadJsonSchema} for registry-based validation. */\nexport const ClaimPayloadJsonSchemaPayload = claimPayloadJsonSchemaBuilder\n .fields({ definition: ClaimPayloadJsonSchema }).build()\n", "import { HashRegEx } from '@ariestools/sdk'\nimport type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n PayloadBuilder, payloadJsonSchema, SchemaSchema,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { HashPayload } from '#protocol-lib'\nimport { HashSchema } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { Xl1PayloadVersionJsonSchema } from '../PayloadVersion.ts'\n\n/** JSON schema for validating Hash payloads. */\nexport const HashPayloadJsonSchema: JSONSchemaType<HashPayload> = {\n ...payloadJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/payload/hash',\n additionalProperties: false,\n properties: {\n ...payloadJsonSchema.properties,\n $version: Xl1PayloadVersionJsonSchema,\n hash: { type: 'string', pattern: HashRegEx.source },\n schema: { type: 'string', pattern: HashSchema },\n },\n\n required: mergeJsonSchemaRequired<HashPayload>(payloadJsonSchema.required, 'hash'),\n type: 'object',\n}\n\n/** Pre-built schema payload for Hash validation. */\nconst hashPayloadJsonSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link HashPayloadJsonSchema} for registry-based validation. */\nexport const HashPayloadJsonSchemaPayload = hashPayloadJsonSchemaBuilder\n .fields({ definition: HashPayloadJsonSchema }).build()\n", "import type { SchemaPayload } from '@xyo-network/sdk'\nimport {\n PayloadBuilder, payloadJsonSchema, SchemaSchema,\n Uint256RegEx, XyoAddressRegEx,\n} from '@xyo-network/sdk'\nimport type { JSONSchemaType } from 'ajv'\n\nimport type { Transfer } from '#protocol-lib'\nimport { TransferSchema } from '#protocol-lib'\n\nimport { mergeJsonSchemaRequired } from '../mergeJsonSchemaRequired.ts'\nimport { Xl1PayloadVersionJsonSchema } from '../PayloadVersion.ts'\n\n/** JSON schema for validating Transfer payloads. */\nexport const TransferPayloadJsonSchema: JSONSchemaType<Transfer> = {\n ...payloadJsonSchema,\n $id: 'https://schemas.xyo.network/2.0/payload/transfer',\n additionalProperties: false,\n properties: {\n ...payloadJsonSchema.properties,\n $version: Xl1PayloadVersionJsonSchema,\n from: { type: 'string', pattern: XyoAddressRegEx.source },\n epoch: { type: 'number' },\n transfers: {\n type: 'object',\n propertyNames: { pattern: XyoAddressRegEx.source },\n patternProperties: { [XyoAddressRegEx.source]: { type: 'string', pattern: Uint256RegEx.source } },\n },\n schema: { type: 'string', pattern: TransferSchema },\n },\n\n required: mergeJsonSchemaRequired<Transfer>(payloadJsonSchema.required, 'transfers', 'epoch'),\n type: 'object',\n}\n\n/** Pre-built schema payload for Transfer validation. */\nconst transferPayloadJsonSchemaBuilder = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })\n/** Schema payload that publishes {@link TransferPayloadJsonSchema} for registry-based validation. */\nexport const TransferPayloadJsonSchemaPayload = transferPayloadJsonSchemaBuilder\n .fields({ definition: TransferPayloadJsonSchema }).build()\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["boundWitnessJsonSchema", "boundWitnessProperties", "BoundWitnessSchema", "PayloadBuilder", "SchemaSchema", "HashRegEx", "boundWitnessProperties", "BoundWitnessSchema", "boundWitnessJsonSchema", "PayloadBuilder", "SchemaSchema", "AddressRegEx", "boundWitnessJsonSchema", "BoundWitnessSchema", "PayloadBuilder", "SchemaSchema", "boundWitnessJsonSchema", "AddressRegEx", "BoundWitnessSchema", "PayloadBuilder", "SchemaSchema", "AddressRegEx", "boundWitnessJsonSchema", "BoundWitnessSchema", "PayloadBuilder", "SchemaSchema", "Uint256RegEx", "boundWitnessJsonSchema", "AddressRegEx", "Uint256RegEx", "BoundWitnessSchema", "PayloadBuilder", "SchemaSchema", "PayloadBuilder", "SchemaSchema", "XyoAddressRegEx", "XyoAddressRegEx", "PayloadBuilder", "SchemaSchema", "HashRegEx", "PayloadBuilder", "payloadJsonSchema", "SchemaSchema", "XyoAddressRegEx", "payloadJsonSchema", "HashRegEx", "XyoAddressRegEx", "PayloadBuilder", "SchemaSchema", "HashRegEx", "PayloadBuilder", "payloadJsonSchema", "SchemaSchema", "payloadJsonSchema", "HashRegEx", "PayloadBuilder", "SchemaSchema", "PayloadBuilder", "payloadJsonSchema", "SchemaSchema", "Uint256RegEx", "XyoAddressRegEx", "payloadJsonSchema", "XyoAddressRegEx", "Uint256RegEx", "PayloadBuilder", "SchemaSchema"]
|
|
7
7
|
}
|
|
@@ -249,6 +249,7 @@ function signerValidatorsFromAuthorizations(authorizations = []) {
|
|
|
249
249
|
import { ZERO_HASH as ZERO_HASH4 } from "@ariestools/sdk";
|
|
250
250
|
import { BoundWitnessValidator as BoundWitnessValidator2 } from "@xyo-network/sdk";
|
|
251
251
|
import { HydratedTransactionValidationError as HydratedTransactionValidationError2 } from "#protocol-lib";
|
|
252
|
+
import { isXl1PayloadVersionSupported } from "#protocol-model";
|
|
252
253
|
var error = (tx, message) => new HydratedTransactionValidationError2(tx?.[0]?._hash ?? ZERO_HASH4, tx, message);
|
|
253
254
|
var checkSignaturesShape = (tx) => {
|
|
254
255
|
const bw = tx[0];
|
|
@@ -259,6 +260,9 @@ var checkSignaturesShape = (tx) => {
|
|
|
259
260
|
};
|
|
260
261
|
var TransactionBoundWitnessValidator = async (context, tx) => {
|
|
261
262
|
try {
|
|
263
|
+
if (!isXl1PayloadVersionSupported(tx[0])) {
|
|
264
|
+
return [error(tx, "Unsupported transaction $version: expected absent or 1000000 (1.0.0)")];
|
|
265
|
+
}
|
|
262
266
|
const shapeErrors = checkSignaturesShape(tx);
|
|
263
267
|
if (shapeErrors.length > 0) return shapeErrors;
|
|
264
268
|
const bwValidator = new BoundWitnessValidator2(tx[0]);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/modules/validation/block/validators/BlockCumulativeBalanceValidator.ts", "../../src/modules/validation/boundwitness/validators/BoundWitnessReferences.ts", "../../src/modules/validation/boundwitness/validators/BoundWitnessSignatures.ts", "../../src/modules/validation/transaction/validateTransaction.ts", "../../src/modules/validation/transaction/validators/SignerAuthorization.ts", "../../src/modules/validation/transaction/validators/TransactionTransfersValidator.ts", "../../src/modules/validation/transaction/validators/TransactionBoundWitnessValidator.ts", "../../src/modules/validation/transaction/validators/TransactionDurationValidator.ts", "../../src/modules/validation/transaction/validators/TransactionElevationValidator.ts", "../../src/modules/validation/transaction/validators/TransactionFromValidator.ts", "../../src/modules/validation/transaction/validators/TransactionGasValidator.ts", "../../src/modules/validation/transaction/validators/TransactionJsonSchemaValidator.ts", "../../src/modules/validation/transaction/validators/TransactionProtocolValidator.ts"],
|
|
4
|
-
"sourcesContent": ["import {\n type Hex, hexToBigInt, ZERO_HASH,\n} from '@ariestools/sdk'\nimport type { XyoAddress } from '@xyo-network/sdk'\n\nimport type {\n HydratedBlockStateValidationFunction,\n HydratedBlockWithHashMeta,\n TransactionBoundWitnessWithHashMeta,\n} from '#protocol-lib'\nimport {\n HydratedBlockStateValidationError,\n isTransactionBoundWitnessWithHashMeta,\n isTransferPayload,\n TransferSchema,\n XYO_ZERO_ADDRESS,\n} from '#protocol-lib'\n\n/** Compute the maximum fee commitment for a transaction (base + priority + gasLimit). */\nfunction maxTransactionFeeCost(tx: TransactionBoundWitnessWithHashMeta): bigint {\n const {\n base, gasLimit, priority,\n } = tx.fees\n return hexToBigInt(base) + hexToBigInt(priority) + hexToBigInt(gasLimit)\n}\n\nfunction accumulateTransferOutflows(\n payload: HydratedBlockWithHashMeta[1][number],\n txPayloadHashes: Set<string>,\n outflows: Record<XyoAddress, bigint>,\n): void {\n // Transfers are matched by _hash only. Producer-synthesized system transfers (fee burn,\n // gas payment, block reward) are intentionally unreferenced by any transaction and thus\n // excluded \u2014 the sender's fee commitment is already charged via maxTransactionFeeCost.\n // Note: _dataHash references, though accepted by BoundWitnessReferencesValidator, do not\n // count here and are therefore never balance-checked.\n if (!txPayloadHashes.has(payload._hash) || !isTransferPayload(payload)) return\n const { from } = payload\n for (const [to, amount] of Object.entries(payload.transfers) as [XyoAddress, Hex][]) {\n if (to !== from) {\n outflows[from] = (outflows[from] ?? 0n) + hexToBigInt(amount)\n }\n }\n}\n\n/** Accumulate outflows per address from fees and transfers in the given transactions. */\nexport function accumulateOutflows(\n transactions: TransactionBoundWitnessWithHashMeta[],\n payloads: HydratedBlockWithHashMeta[1],\n): Record<XyoAddress, bigint> {\n const outflows: Record<XyoAddress, bigint> = {}\n\n for (const tx of transactions) {\n // Fee cost charged to the transaction sender\n const feeCost = maxTransactionFeeCost(tx)\n const feePayer = tx.from\n outflows[feePayer] = (outflows[feePayer] ?? 0n) + feeCost\n\n // Find transfer payloads belonging to this transaction\n const txPayloadHashes = new Set(tx.payload_hashes)\n for (const payload of payloads) {\n accumulateTransferOutflows(payload, txPayloadHashes, outflows)\n }\n }\n\n return outflows\n}\n\n/**\n * Find transaction-referenced payloads that claim the Transfer schema but fail full Transfer\n * validation. These must be surfaced as errors rather than skipped: balance application treats\n * every payload with the Transfer schema as a transfer, so a malformed one that validation\n * ignores would still be applied (or crash the applier).\n */\nexport function findMalformedTransfers(\n transactions: TransactionBoundWitnessWithHashMeta[],\n payloads: HydratedBlockWithHashMeta[1],\n): HydratedBlockWithHashMeta[1] {\n const referenced = new Set(transactions.flatMap(tx => tx.payload_hashes))\n return payloads.filter(payload =>\n referenced.has(payload._hash)\n && payload.schema === TransferSchema\n && !isTransferPayload(payload))\n}\n\n/** Creates a block state validator that checks cumulative outflows per address do not exceed pre-block balances. */\nexport function BlockCumulativeBalanceValidatorFactory(): HydratedBlockStateValidationFunction {\n return async (context, hydratedBlock) => {\n const [blockBw, payloads] = hydratedBlock\n try {\n // Find all transactions in the block\n const transactions = payloads.filter(isTransactionBoundWitnessWithHashMeta)\n\n if (transactions.length === 0) return []\n\n const chainId = await context.chainIdAtBlockNumber(blockBw.block)\n const errors: HydratedBlockStateValidationError[] = []\n\n for (const malformed of findMalformedTransfers(transactions, payloads)) {\n errors.push(new HydratedBlockStateValidationError(\n blockBw._hash,\n chainId,\n hydratedBlock,\n `Transaction-referenced payload ${malformed._hash} claims the Transfer schema but is not a valid Transfer`,\n ))\n }\n\n const outflows = accumulateOutflows(transactions, payloads)\n\n // Query pre-block balances for all addresses with outflows\n const addresses = Object.keys(outflows) as XyoAddress[]\n if (addresses.length === 0) return errors\n\n const balances = await context.accountBalance.accountBalances(addresses)\n\n // Check each address\n for (const address of addresses) {\n if (address === XYO_ZERO_ADDRESS) continue // Skip zero address as it's used for burn transactions and doesn't have a balance\n // TODO: Add specific validation for block reward transfer\n const balance = balances[address] ?? 0n\n const totalOutflow = outflows[address]\n if (totalOutflow > balance) {\n errors.push(new HydratedBlockStateValidationError(\n blockBw._hash,\n chainId,\n hydratedBlock,\n `Cumulative outflow for address ${address} exceeds available balance: outflow ${totalOutflow} > balance ${balance}`,\n ))\n }\n }\n\n return errors\n } catch (ex) {\n return [new HydratedBlockStateValidationError(\n blockBw?._hash ?? ZERO_HASH,\n blockBw?.chain,\n hydratedBlock,\n `BlockCumulativeBalanceValidator excepted: ${(ex as Error).message}`,\n ex,\n )]\n }\n }\n}\n", "import type { Hash, Promisable } from '@ariestools/sdk'\nimport { ZERO_HASH } from '@ariestools/sdk'\nimport type {\n BoundWitness,\n Payload,\n Schema,\n WithHashMeta,\n} from '@xyo-network/sdk'\nimport { isAnyPayload } from '@xyo-network/sdk'\n\nimport type { HydratedBoundWitnessValidationFunction, HydratedBoundWitnessWithHashMeta } from '#protocol-lib'\nimport { HydratedBoundWitnessValidationError } from '#protocol-lib'\n\nfunction getPayloadsFromPayloadArray(payloads: WithHashMeta<Payload>[], hashes: Hash[]): (WithHashMeta<Payload> | undefined)[] {\n return hashes.map(hash => payloads.find(payload => payload._hash === hash || payload._dataHash === hash))\n}\n\n/** Creates a validator that checks all payload references in a BoundWitness are present, have matching schemas, and optionally conform to an allowed schema list. */\nexport const BoundWitnessReferencesValidator\n\n = <T extends BoundWitness = BoundWitness>(allowedSchemas?: Schema[]): HydratedBoundWitnessValidationFunction<T> => (\n [bw, payloadSet]: HydratedBoundWitnessWithHashMeta<T>,\n // eslint-disable-next-line complexity\n ): Promisable<HydratedBoundWitnessValidationError[]> => {\n const errors: HydratedBoundWitnessValidationError[] = []\n try {\n const payloads = getPayloadsFromPayloadArray(payloadSet, bw.payload_hashes)\n if (payloads.length !== bw.payload_hashes.length) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'unable to locate payloads'))\n }\n\n // check if payloads are valid and if their schemas match the declared schemas\n for (const 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 HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'payload hash not found'))\n }\n\n const declaredSchema = bw.payload_schemas[payloadIndex]\n if (declaredSchema !== payload.schema) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'mismatched schema'))\n }\n\n if (allowedSchemas && !allowedSchemas.includes(payload.schema)) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], `disallowed schema [${payload.schema}]`))\n }\n } else {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'invalid payload'))\n }\n }\n } catch (ex) {\n const error = new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], `validation excepted: ${String(ex)}`, ex)\n errors.push(error)\n }\n return errors\n }\n", "import { toArrayBuffer, ZERO_HASH } from '@ariestools/sdk'\nimport type {\n BoundWitness, WithStorageMeta, XyoAddress,\n} from '@xyo-network/sdk'\nimport { BoundWitnessBuilder, BoundWitnessValidator } from '@xyo-network/sdk'\n\nimport type { BoundWitnessValidationFunction } from '#protocol-lib'\nimport { BoundWitnessValidationError } from '#protocol-lib'\n\n/** Validates that all signatures on a BoundWitness are cryptographically valid for their corresponding addresses. */\nexport const BoundWitnessSignaturesValidator: BoundWitnessValidationFunction = async (\n bw: BoundWitness,\n) => {\n const errors: BoundWitnessValidationError[] = []\n try {\n const dataHash = await BoundWitnessBuilder.dataHash(bw)\n const results: [XyoAddress, Error[]][] = await Promise.all(bw.addresses.map(async (address, index) => {\n return [address, await BoundWitnessValidator.validateSignature(\n toArrayBuffer(dataHash),\n address,\n toArrayBuffer(bw.$signatures[index] ?? undefined),\n )]\n }))\n for (const [, bwErrors] of results) {\n for (const bwError of bwErrors) {\n errors.push(new BoundWitnessValidationError((bw as WithStorageMeta<BoundWitness>)?._hash ?? ZERO_HASH, bw, 'validation errors', bwError))\n }\n }\n } catch (ex) {\n errors.push(new BoundWitnessValidationError((bw as WithStorageMeta<BoundWitness>)?._hash ?? ZERO_HASH, bw, 'validation excepted', ex))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { asHashMeta } from '@xyo-network/sdk'\n\nimport type {\n HydratedTransactionValidationFunction,\n HydratedTransactionValidationFunctionContext,\n HydratedTransactionWithHashMeta,\n} from '#protocol-lib'\nimport { HydratedTransactionValidationError, isTransactionBoundWitness } from '#protocol-lib'\n\nimport {\n TransactionBoundWitnessValidator,\n TransactionDurationValidator,\n TransactionElevationValidator, TransactionFromValidator, TransactionGasValidator, TransactionProtocolValidator,\n} from './validators/index.ts'\n\n/**\n * Validates a hydrated transaction using built-in validators plus any additional validators provided.\n *\n * Transfer authorization (`TransactionTransfersValidatorFactory`) is intentionally NOT part of the\n * built-in list: it requires deployment configuration (the node's `SignerAuthorization[]`), which is\n * not available at this layer. Chain engines MUST inject it via `additionalValidators` \u2014 otherwise\n * nothing verifies that a transfer's `from` is authorized by the transaction signer. See\n * xyo-chain `buildValidators()`, which injects it at both mempool admission and block validation.\n */\nexport const validateTransaction: HydratedTransactionValidationFunction = async (\n context: HydratedTransactionValidationFunctionContext,\n tx: HydratedTransactionWithHashMeta,\n additionalValidators?: HydratedTransactionValidationFunction[],\n): Promise<HydratedTransactionValidationError[]> => {\n try {\n if (!isTransactionBoundWitness(tx[0])) {\n const castTx = tx.at(0)\n return [new HydratedTransactionValidationError(\n asHashMeta(castTx)?._hash ?? ZERO_HASH,\n tx,\n 'failed isTransactionBoundWitness identity check',\n )]\n }\n\n const validators: HydratedTransactionValidationFunction<HydratedTransactionValidationFunctionContext>[] = [\n TransactionProtocolValidator,\n TransactionDurationValidator,\n TransactionFromValidator,\n TransactionGasValidator,\n TransactionElevationValidator,\n TransactionBoundWitnessValidator,\n ...(additionalValidators ?? []),\n ]\n const validationResults = await Promise.all(validators.map(async v => v(context, tx)))\n return validationResults.flat()\n } catch (ex) {\n const castTx = tx?.[0]\n return [new HydratedTransactionValidationError(\n castTx?._hash ?? ZERO_HASH,\n tx,\n 'Failed TransactionGasValidator: ' + (ex as Error).message,\n ex,\n )]\n }\n}\n", "import { XyoAddressZod } from '@xyo-network/sdk'\nimport { z } from 'zod'\n\nimport type { SignerValidator } from './TransactionTransfersValidator.ts'\nimport {\n CompletedStepRewardAddressValidatorFactory, DerivedReceiveAddressValidatorFactory, SelfSignerValidator,\n} from './TransactionTransfersValidator.ts'\n\n/** Authorizes the listed signers to sign for completed-step-reward addresses. */\nexport const CompletedStepRewardAuthorizationZod = z.object({\n type: z.literal('completedStepReward'),\n signers: z.array(XyoAddressZod),\n}).describe('Authorizes signers for completed-step-reward addresses')\n\n/** Authorizes the listed signers to sign for derived-receive addresses within a scope. */\nexport const DerivedReceiveAuthorizationZod = z.object({\n type: z.literal('derivedReceive'),\n scope: z.string(),\n signers: z.array(XyoAddressZod),\n}).describe('Authorizes signers for derived-receive addresses within a scope')\n\n/** A single signer authorization, discriminated by `type` (the deriving-function selector). */\nexport const SignerAuthorizationZod = z.discriminatedUnion('type', [\n CompletedStepRewardAuthorizationZod,\n DerivedReceiveAuthorizationZod,\n])\n\n/** Type-level representation of Completed Step Reward Authorization. */\nexport type CompletedStepRewardAuthorization = z.infer<typeof CompletedStepRewardAuthorizationZod>\n/** Type-level representation of Derived Receive Authorization. */\nexport type DerivedReceiveAuthorization = z.infer<typeof DerivedReceiveAuthorizationZod>\n/** Type-level representation of Signer Authorization. */\nexport type SignerAuthorization = z.infer<typeof SignerAuthorizationZod>\n\n/**\n * Registry mapping an authorization `type` to the SignerValidator factory that enforces it.\n * The exhaustive switch keeps each variant's params type-safe; add a new address family by\n * adding a union variant above and a case here.\n */\nfunction signerValidatorFromAuthorization(authorization: SignerAuthorization): SignerValidator {\n switch (authorization.type) {\n case 'completedStepReward': {\n return CompletedStepRewardAddressValidatorFactory(authorization.signers)\n }\n case 'derivedReceive': {\n return DerivedReceiveAddressValidatorFactory(authorization.signers, authorization.scope)\n }\n }\n}\n\n/**\n * Builds the `SignerValidator[]` consumed by `TransactionTransfersValidatorFactory` from a list\n * of authorizations. `SelfSignerValidator` is ALWAYS included so ordinary self-transfers pass;\n * an empty `authorizations` list therefore means \"self only\" \u2014 deny-all for reward/escrow families.\n */\nexport function signerValidatorsFromAuthorizations(authorizations: SignerAuthorization[] = []): SignerValidator[] {\n return [SelfSignerValidator, ...authorizations.map(signerValidatorFromAuthorization)]\n}\n", "import { isDefined, isUndefined } from '@ariestools/sdk'\nimport type { XyoAddress } from '@xyo-network/sdk'\n\nimport type { HydratedTransactionValidationFunction, StepIdentity } from '#protocol-lib'\nimport {\n derivedReceiveAddress,\n elevatedPayloads,\n HydratedTransactionValidationError,\n isTransferPayload,\n rewardAddressFromStepIdentity,\n} from '#protocol-lib'\n\n/** Function type that checks whether a signer is authorized to sign for a given signee address. */\nexport type SignerValidator = (signer: XyoAddress, signee: XyoAddress, context?: { address?: XyoAddress; scope?: string; step?: StepIdentity }) => boolean\n\n/** A signer validator that only allows an address to sign for itself. */\nexport const SelfSignerValidator: SignerValidator = (signer: XyoAddress, signee: XyoAddress) => signer === signee\n\n/** Creates a signer validator that authorizes specified signers to sign for completed step reward addresses. */\nexport const CompletedStepRewardAddressValidatorFactory = (allowedSigners: XyoAddress[]): SignerValidator => (\n signer: XyoAddress,\n signee: XyoAddress,\n context?: { step?: StepIdentity },\n) => {\n const step = context?.step\n if (isDefined(step)) {\n const contextAddress = rewardAddressFromStepIdentity(step)\n return allowedSigners.includes(signer) && signee === contextAddress\n }\n return false\n}\n\n/** Creates a signer validator that authorizes specified signers to sign for derived receive addresses within a given scope. */\nexport const DerivedReceiveAddressValidatorFactory = (allowedSigners: XyoAddress[], allowedScope: string): SignerValidator => (\n signer: XyoAddress,\n signee: XyoAddress,\n context?: { address?: XyoAddress; scope?: string },\n) => {\n const { address, scope } = context ?? {}\n if (scope !== allowedScope) {\n return false\n }\n if (isDefined(address)) {\n const derivedAddress = derivedReceiveAddress(address, scope)\n return allowedSigners.includes(signer) && signee === derivedAddress\n }\n return false\n}\n\n/**\n * Creates a transaction validator that checks all transfers are authorized by the transaction signer.\n *\n * Not part of `validateTransaction`'s built-in list \u2014 the signer validators come from deployment\n * config (`signerValidatorsFromAuthorizations`), so the engine must construct this validator and\n * inject it via `additionalValidators`. Skipping it disables transfer authorization entirely.\n */\nexport function TransactionTransfersValidatorFactory(\n signerValidators: SignerValidator[] = [SelfSignerValidator],\n): HydratedTransactionValidationFunction {\n return async (\n context,\n hydratedTx,\n ) => {\n const errors: HydratedTransactionValidationError[] = []\n const signer = hydratedTx[0].from\n try {\n const payloads = elevatedPayloads(hydratedTx)\n const transfers = payloads.filter(isTransferPayload)\n for (const transfer of transfers) {\n if (isUndefined(signerValidators.find(v => v(signer, transfer.from, transfer.context)))) {\n errors.push(new HydratedTransactionValidationError(\n hydratedTx[0]._hash,\n hydratedTx,\n `transfer from address ${transfer.from} is not authorized by signer ${signer}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(hydratedTx[0]._hash, hydratedTx, 'validation excepted', ex))\n }\n return errors\n }\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { BoundWitnessValidator } from '@xyo-network/sdk'\n\nimport type { HydratedTransactionValidationFunction, HydratedTransactionWithHashMeta } from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\n\nconst error = (tx: HydratedTransactionWithHashMeta, message: string): HydratedTransactionValidationError =>\n new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, message)\n\n// Friendly pre-check for the wallet bug we want to surface clearly: signatures\n// emitted under `signatures` instead of `$signatures`. The downstream\n// BoundWitnessValidator would also catch the missing/mismatched signatures,\n// but its message (\"Length mismatch: address/signature\", \"Missing signature\n// [<address>]\") doesn't hint at the actual root cause.\nconst checkSignaturesShape = (tx: HydratedTransactionWithHashMeta): HydratedTransactionValidationError[] => {\n const bw = tx[0] as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(tx, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(tx, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the transaction's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. This covers:\n * - signatures: length matches addresses, every signature is cryptographically\n * valid for its corresponding address against the BW data hash\n * - addresses: uniqueness\n * - array length parity: payload_hashes vs payload_schemas\n * - schemas: per-schema name validators\n * - top-level schema check\n * - PayloadValidator.schemaName check\n *\n * Also emits a friendly diagnostic when the common wallet bug of\n * `signatures` vs `$signatures` is detected, so the failure points at the\n * actual root cause instead of buried length/missing-signature errors.\n */\nexport const TransactionBoundWitnessValidator: HydratedTransactionValidationFunction = async (\n context,\n tx,\n) => {\n try {\n const shapeErrors = checkSignaturesShape(tx)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(tx[0])\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(tx, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(tx, `Failed TransactionBoundWitnessValidator: ${String(ex)}`)]\n }\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\n\nimport type { HydratedTransactionValidationFunction } from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\n\n/** Validates that transaction timing fields (nbf and exp) are positive, correctly ordered, and within allowed duration limits. */\nexport const TransactionDurationValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n// eslint-disable-next-line complexity\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const { exp, nbf } = tx[0]\n if (nbf < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction nbf must be positive'))\n\n if (exp < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must be positive'))\n if (exp <= nbf) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must greater than nbf'))\n if (exp - nbf > 10_000) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction exp must not be too far in the future',\n ))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionDurationValidator: ${String(ex)}`,\n ex,\n ))\n }\n\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\n\nimport type { HydratedTransactionValidationFunction } from '#protocol-lib'\nimport { extractElevatedHashes, HydratedTransactionValidationError } from '#protocol-lib'\n\n/** Validates that a hydrated transaction includes all required elevated script hashes. */\nexport const TransactionElevationValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n try {\n extractElevatedHashes(tx)\n } catch {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Hydrated transaction does not include all script hashes'))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionElevationValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { addressesContains, asXyoAddress } from '@xyo-network/sdk'\n\nimport type { HydratedTransactionValidationFunction } from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\n\n/** Validates that the transaction's from field is a valid address and is included in the BoundWitness addresses. */\nexport const TransactionFromValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const from = asXyoAddress(tx[0].from)\n if (from === undefined)errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from is not a valid address',\n ))\n else if (!addressesContains(tx[0], from)) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from address must be listed in addresses',\n ))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionFromValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { hexToBigInt, ZERO_HASH } from '@ariestools/sdk'\n\nimport type {\n HydratedTransactionValidationFunction,\n TransactionFeesBigInt, TransactionFeesHex,\n} from '#protocol-lib'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n minTransactionFees,\n} from '#protocol-lib'\n\n/** Validates that transaction fee fields (base, gasLimit, gasPrice, priority) are present and meet minimum requirements. */\nexport const TransactionGasValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n// eslint-disable-next-line complexity\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (tx?.[0].fees === undefined) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Missing fees',\n ))\n } else {\n const {\n base, gasLimit, gasPrice, priority,\n } = parseFees(tx[0].fees)\n\n if (base === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.base must be defined and a valid number',\n ))\n else if (base < minTransactionFees.base) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.base must be >= ${minTransactionFees.base}`,\n ))\n\n if (gasLimit === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasLimit must be defined and a valid number',\n ))\n else if (gasLimit < minTransactionFees.gasLimit) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit must be >= ${minTransactionFees.gasLimit}`,\n ))\n\n if (gasPrice === undefined) errors.push(\n new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasPrice must be defined and a valid number',\n ),\n )\n else if (gasPrice < minTransactionFees.gasPrice) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasPrice must be >= ${minTransactionFees.gasPrice}`,\n ))\n\n if (priority === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.priority must be defined and a valid number',\n ))\n else if (priority < minTransactionFees.priority) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.priority must be >= ${minTransactionFees.priority}`,\n ))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionGasValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n\nconst parseFees = (fees: TransactionFeesHex): Partial<TransactionFeesBigInt> => {\n const ret: Partial<TransactionFeesBigInt> = {}\n const {\n base, gasLimit, gasPrice, priority,\n } = fees\n if (base !== undefined) ret.base = AttoXL1(hexToBigInt(base))\n if (gasLimit !== undefined) ret.gasLimit = AttoXL1(hexToBigInt(gasLimit))\n if (gasPrice !== undefined) ret.gasPrice = AttoXL1(hexToBigInt(gasPrice))\n if (priority !== undefined) ret.priority = AttoXL1(hexToBigInt(priority))\n return ret\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type { ValidateFunction } from 'ajv'\nimport { Ajv } from 'ajv'\n\nimport type { HydratedTransactionValidationFunction, TransactionBoundWitness } from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\nimport { TransactionBoundWitnessJsonSchema } from '#schema'\n\nconst ajv = new Ajv({ allErrors: true, strict: true })\n\nlet validate: ValidateFunction<TransactionBoundWitness> | undefined\n\n/** Validates a transaction against the TransactionBoundWitness JSON schema using AJV. */\nexport const TransactionJsonSchemaValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n validate ??= ajv.compile(TransactionBoundWitnessJsonSchema)\n if (!validate(PayloadBuilder.omitStorageMeta(tx[0]))) {\n const error = new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\\n' })}`,\n validate.errors,\n )\n errors.push(error)\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\n\nimport type {\n ChainId,\n HydratedTransactionValidationFunction,\n} from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\n\n/** Validates that the transaction's chain ID matches the expected chain ID from the validation context. */\nexport const TransactionProtocolValidator: HydratedTransactionValidationFunction = async (\n context: { chainId?: ChainId },\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (context?.chainId !== undefined && tx[0].chain !== context.chainId) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, `invalid chain id [${context.chainId}, ${tx[0].chain}]`))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))\n }\n return errors\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import {\n type Hex, hexToBigInt, ZERO_HASH,\n} from '@ariestools/sdk'\nimport type { XyoAddress } from '@xyo-network/sdk'\n\nimport type {\n HydratedBlockStateValidationFunction,\n HydratedBlockWithHashMeta,\n TransactionBoundWitnessWithHashMeta,\n} from '#protocol-lib'\nimport {\n HydratedBlockStateValidationError,\n isTransactionBoundWitnessWithHashMeta,\n isTransferPayload,\n TransferSchema,\n XYO_ZERO_ADDRESS,\n} from '#protocol-lib'\n\n/** Compute the maximum fee commitment for a transaction (base + priority + gasLimit). */\nfunction maxTransactionFeeCost(tx: TransactionBoundWitnessWithHashMeta): bigint {\n const {\n base, gasLimit, priority,\n } = tx.fees\n return hexToBigInt(base) + hexToBigInt(priority) + hexToBigInt(gasLimit)\n}\n\nfunction accumulateTransferOutflows(\n payload: HydratedBlockWithHashMeta[1][number],\n txPayloadHashes: Set<string>,\n outflows: Record<XyoAddress, bigint>,\n): void {\n // Transfers are matched by _hash only. Producer-synthesized system transfers (fee burn,\n // gas payment, block reward) are intentionally unreferenced by any transaction and thus\n // excluded \u2014 the sender's fee commitment is already charged via maxTransactionFeeCost.\n // Note: _dataHash references, though accepted by BoundWitnessReferencesValidator, do not\n // count here and are therefore never balance-checked.\n if (!txPayloadHashes.has(payload._hash) || !isTransferPayload(payload)) return\n const { from } = payload\n for (const [to, amount] of Object.entries(payload.transfers) as [XyoAddress, Hex][]) {\n if (to !== from) {\n outflows[from] = (outflows[from] ?? 0n) + hexToBigInt(amount)\n }\n }\n}\n\n/** Accumulate outflows per address from fees and transfers in the given transactions. */\nexport function accumulateOutflows(\n transactions: TransactionBoundWitnessWithHashMeta[],\n payloads: HydratedBlockWithHashMeta[1],\n): Record<XyoAddress, bigint> {\n const outflows: Record<XyoAddress, bigint> = {}\n\n for (const tx of transactions) {\n // Fee cost charged to the transaction sender\n const feeCost = maxTransactionFeeCost(tx)\n const feePayer = tx.from\n outflows[feePayer] = (outflows[feePayer] ?? 0n) + feeCost\n\n // Find transfer payloads belonging to this transaction\n const txPayloadHashes = new Set(tx.payload_hashes)\n for (const payload of payloads) {\n accumulateTransferOutflows(payload, txPayloadHashes, outflows)\n }\n }\n\n return outflows\n}\n\n/**\n * Find transaction-referenced payloads that claim the Transfer schema but fail full Transfer\n * validation. These must be surfaced as errors rather than skipped: balance application treats\n * every payload with the Transfer schema as a transfer, so a malformed one that validation\n * ignores would still be applied (or crash the applier).\n */\nexport function findMalformedTransfers(\n transactions: TransactionBoundWitnessWithHashMeta[],\n payloads: HydratedBlockWithHashMeta[1],\n): HydratedBlockWithHashMeta[1] {\n const referenced = new Set(transactions.flatMap(tx => tx.payload_hashes))\n return payloads.filter(payload =>\n referenced.has(payload._hash)\n && payload.schema === TransferSchema\n && !isTransferPayload(payload))\n}\n\n/** Creates a block state validator that checks cumulative outflows per address do not exceed pre-block balances. */\nexport function BlockCumulativeBalanceValidatorFactory(): HydratedBlockStateValidationFunction {\n return async (context, hydratedBlock) => {\n const [blockBw, payloads] = hydratedBlock\n try {\n // Find all transactions in the block\n const transactions = payloads.filter(isTransactionBoundWitnessWithHashMeta)\n\n if (transactions.length === 0) return []\n\n const chainId = await context.chainIdAtBlockNumber(blockBw.block)\n const errors: HydratedBlockStateValidationError[] = []\n\n for (const malformed of findMalformedTransfers(transactions, payloads)) {\n errors.push(new HydratedBlockStateValidationError(\n blockBw._hash,\n chainId,\n hydratedBlock,\n `Transaction-referenced payload ${malformed._hash} claims the Transfer schema but is not a valid Transfer`,\n ))\n }\n\n const outflows = accumulateOutflows(transactions, payloads)\n\n // Query pre-block balances for all addresses with outflows\n const addresses = Object.keys(outflows) as XyoAddress[]\n if (addresses.length === 0) return errors\n\n const balances = await context.accountBalance.accountBalances(addresses)\n\n // Check each address\n for (const address of addresses) {\n if (address === XYO_ZERO_ADDRESS) continue // Skip zero address as it's used for burn transactions and doesn't have a balance\n // TODO: Add specific validation for block reward transfer\n const balance = balances[address] ?? 0n\n const totalOutflow = outflows[address]\n if (totalOutflow > balance) {\n errors.push(new HydratedBlockStateValidationError(\n blockBw._hash,\n chainId,\n hydratedBlock,\n `Cumulative outflow for address ${address} exceeds available balance: outflow ${totalOutflow} > balance ${balance}`,\n ))\n }\n }\n\n return errors\n } catch (ex) {\n return [new HydratedBlockStateValidationError(\n blockBw?._hash ?? ZERO_HASH,\n blockBw?.chain,\n hydratedBlock,\n `BlockCumulativeBalanceValidator excepted: ${(ex as Error).message}`,\n ex,\n )]\n }\n }\n}\n", "import type { Hash, Promisable } from '@ariestools/sdk'\nimport { ZERO_HASH } from '@ariestools/sdk'\nimport type {\n BoundWitness,\n Payload,\n Schema,\n WithHashMeta,\n} from '@xyo-network/sdk'\nimport { isAnyPayload } from '@xyo-network/sdk'\n\nimport type { HydratedBoundWitnessValidationFunction, HydratedBoundWitnessWithHashMeta } from '#protocol-lib'\nimport { HydratedBoundWitnessValidationError } from '#protocol-lib'\n\nfunction getPayloadsFromPayloadArray(payloads: WithHashMeta<Payload>[], hashes: Hash[]): (WithHashMeta<Payload> | undefined)[] {\n return hashes.map(hash => payloads.find(payload => payload._hash === hash || payload._dataHash === hash))\n}\n\n/** Creates a validator that checks all payload references in a BoundWitness are present, have matching schemas, and optionally conform to an allowed schema list. */\nexport const BoundWitnessReferencesValidator\n\n = <T extends BoundWitness = BoundWitness>(allowedSchemas?: Schema[]): HydratedBoundWitnessValidationFunction<T> => (\n [bw, payloadSet]: HydratedBoundWitnessWithHashMeta<T>,\n // eslint-disable-next-line complexity\n ): Promisable<HydratedBoundWitnessValidationError[]> => {\n const errors: HydratedBoundWitnessValidationError[] = []\n try {\n const payloads = getPayloadsFromPayloadArray(payloadSet, bw.payload_hashes)\n if (payloads.length !== bw.payload_hashes.length) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'unable to locate payloads'))\n }\n\n // check if payloads are valid and if their schemas match the declared schemas\n for (const 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 HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'payload hash not found'))\n }\n\n const declaredSchema = bw.payload_schemas[payloadIndex]\n if (declaredSchema !== payload.schema) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'mismatched schema'))\n }\n\n if (allowedSchemas && !allowedSchemas.includes(payload.schema)) {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], `disallowed schema [${payload.schema}]`))\n }\n } else {\n errors.push(new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], 'invalid payload'))\n }\n }\n } catch (ex) {\n const error = new HydratedBoundWitnessValidationError(bw?._hash ?? ZERO_HASH, [bw, payloadSet], `validation excepted: ${String(ex)}`, ex)\n errors.push(error)\n }\n return errors\n }\n", "import { toArrayBuffer, ZERO_HASH } from '@ariestools/sdk'\nimport type {\n BoundWitness, WithStorageMeta, XyoAddress,\n} from '@xyo-network/sdk'\nimport { BoundWitnessBuilder, BoundWitnessValidator } from '@xyo-network/sdk'\n\nimport type { BoundWitnessValidationFunction } from '#protocol-lib'\nimport { BoundWitnessValidationError } from '#protocol-lib'\n\n/** Validates that all signatures on a BoundWitness are cryptographically valid for their corresponding addresses. */\nexport const BoundWitnessSignaturesValidator: BoundWitnessValidationFunction = async (\n bw: BoundWitness,\n) => {\n const errors: BoundWitnessValidationError[] = []\n try {\n const dataHash = await BoundWitnessBuilder.dataHash(bw)\n const results: [XyoAddress, Error[]][] = await Promise.all(bw.addresses.map(async (address, index) => {\n return [address, await BoundWitnessValidator.validateSignature(\n toArrayBuffer(dataHash),\n address,\n toArrayBuffer(bw.$signatures[index] ?? undefined),\n )]\n }))\n for (const [, bwErrors] of results) {\n for (const bwError of bwErrors) {\n errors.push(new BoundWitnessValidationError((bw as WithStorageMeta<BoundWitness>)?._hash ?? ZERO_HASH, bw, 'validation errors', bwError))\n }\n }\n } catch (ex) {\n errors.push(new BoundWitnessValidationError((bw as WithStorageMeta<BoundWitness>)?._hash ?? ZERO_HASH, bw, 'validation excepted', ex))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { asHashMeta } from '@xyo-network/sdk'\n\nimport type {\n HydratedTransactionValidationFunction,\n HydratedTransactionValidationFunctionContext,\n HydratedTransactionWithHashMeta,\n} from '#protocol-lib'\nimport { HydratedTransactionValidationError, isTransactionBoundWitness } from '#protocol-lib'\n\nimport {\n TransactionBoundWitnessValidator,\n TransactionDurationValidator,\n TransactionElevationValidator, TransactionFromValidator, TransactionGasValidator, TransactionProtocolValidator,\n} from './validators/index.ts'\n\n/**\n * Validates a hydrated transaction using built-in validators plus any additional validators provided.\n *\n * Transfer authorization (`TransactionTransfersValidatorFactory`) is intentionally NOT part of the\n * built-in list: it requires deployment configuration (the node's `SignerAuthorization[]`), which is\n * not available at this layer. Chain engines MUST inject it via `additionalValidators` \u2014 otherwise\n * nothing verifies that a transfer's `from` is authorized by the transaction signer. See\n * xyo-chain `buildValidators()`, which injects it at both mempool admission and block validation.\n */\nexport const validateTransaction: HydratedTransactionValidationFunction = async (\n context: HydratedTransactionValidationFunctionContext,\n tx: HydratedTransactionWithHashMeta,\n additionalValidators?: HydratedTransactionValidationFunction[],\n): Promise<HydratedTransactionValidationError[]> => {\n try {\n if (!isTransactionBoundWitness(tx[0])) {\n const castTx = tx.at(0)\n return [new HydratedTransactionValidationError(\n asHashMeta(castTx)?._hash ?? ZERO_HASH,\n tx,\n 'failed isTransactionBoundWitness identity check',\n )]\n }\n\n const validators: HydratedTransactionValidationFunction<HydratedTransactionValidationFunctionContext>[] = [\n TransactionProtocolValidator,\n TransactionDurationValidator,\n TransactionFromValidator,\n TransactionGasValidator,\n TransactionElevationValidator,\n TransactionBoundWitnessValidator,\n ...(additionalValidators ?? []),\n ]\n const validationResults = await Promise.all(validators.map(async v => v(context, tx)))\n return validationResults.flat()\n } catch (ex) {\n const castTx = tx?.[0]\n return [new HydratedTransactionValidationError(\n castTx?._hash ?? ZERO_HASH,\n tx,\n 'Failed TransactionGasValidator: ' + (ex as Error).message,\n ex,\n )]\n }\n}\n", "import { XyoAddressZod } from '@xyo-network/sdk'\nimport { z } from 'zod'\n\nimport type { SignerValidator } from './TransactionTransfersValidator.ts'\nimport {\n CompletedStepRewardAddressValidatorFactory, DerivedReceiveAddressValidatorFactory, SelfSignerValidator,\n} from './TransactionTransfersValidator.ts'\n\n/** Authorizes the listed signers to sign for completed-step-reward addresses. */\nexport const CompletedStepRewardAuthorizationZod = z.object({\n type: z.literal('completedStepReward'),\n signers: z.array(XyoAddressZod),\n}).describe('Authorizes signers for completed-step-reward addresses')\n\n/** Authorizes the listed signers to sign for derived-receive addresses within a scope. */\nexport const DerivedReceiveAuthorizationZod = z.object({\n type: z.literal('derivedReceive'),\n scope: z.string(),\n signers: z.array(XyoAddressZod),\n}).describe('Authorizes signers for derived-receive addresses within a scope')\n\n/** A single signer authorization, discriminated by `type` (the deriving-function selector). */\nexport const SignerAuthorizationZod = z.discriminatedUnion('type', [\n CompletedStepRewardAuthorizationZod,\n DerivedReceiveAuthorizationZod,\n])\n\n/** Type-level representation of Completed Step Reward Authorization. */\nexport type CompletedStepRewardAuthorization = z.infer<typeof CompletedStepRewardAuthorizationZod>\n/** Type-level representation of Derived Receive Authorization. */\nexport type DerivedReceiveAuthorization = z.infer<typeof DerivedReceiveAuthorizationZod>\n/** Type-level representation of Signer Authorization. */\nexport type SignerAuthorization = z.infer<typeof SignerAuthorizationZod>\n\n/**\n * Registry mapping an authorization `type` to the SignerValidator factory that enforces it.\n * The exhaustive switch keeps each variant's params type-safe; add a new address family by\n * adding a union variant above and a case here.\n */\nfunction signerValidatorFromAuthorization(authorization: SignerAuthorization): SignerValidator {\n switch (authorization.type) {\n case 'completedStepReward': {\n return CompletedStepRewardAddressValidatorFactory(authorization.signers)\n }\n case 'derivedReceive': {\n return DerivedReceiveAddressValidatorFactory(authorization.signers, authorization.scope)\n }\n }\n}\n\n/**\n * Builds the `SignerValidator[]` consumed by `TransactionTransfersValidatorFactory` from a list\n * of authorizations. `SelfSignerValidator` is ALWAYS included so ordinary self-transfers pass;\n * an empty `authorizations` list therefore means \"self only\" \u2014 deny-all for reward/escrow families.\n */\nexport function signerValidatorsFromAuthorizations(authorizations: SignerAuthorization[] = []): SignerValidator[] {\n return [SelfSignerValidator, ...authorizations.map(signerValidatorFromAuthorization)]\n}\n", "import { isDefined, isUndefined } from '@ariestools/sdk'\nimport type { XyoAddress } from '@xyo-network/sdk'\n\nimport type { HydratedTransactionValidationFunction, StepIdentity } from '#protocol-lib'\nimport {\n derivedReceiveAddress,\n elevatedPayloads,\n HydratedTransactionValidationError,\n isTransferPayload,\n rewardAddressFromStepIdentity,\n} from '#protocol-lib'\n\n/** Function type that checks whether a signer is authorized to sign for a given signee address. */\nexport type SignerValidator = (signer: XyoAddress, signee: XyoAddress, context?: { address?: XyoAddress; scope?: string; step?: StepIdentity }) => boolean\n\n/** A signer validator that only allows an address to sign for itself. */\nexport const SelfSignerValidator: SignerValidator = (signer: XyoAddress, signee: XyoAddress) => signer === signee\n\n/** Creates a signer validator that authorizes specified signers to sign for completed step reward addresses. */\nexport const CompletedStepRewardAddressValidatorFactory = (allowedSigners: XyoAddress[]): SignerValidator => (\n signer: XyoAddress,\n signee: XyoAddress,\n context?: { step?: StepIdentity },\n) => {\n const step = context?.step\n if (isDefined(step)) {\n const contextAddress = rewardAddressFromStepIdentity(step)\n return allowedSigners.includes(signer) && signee === contextAddress\n }\n return false\n}\n\n/** Creates a signer validator that authorizes specified signers to sign for derived receive addresses within a given scope. */\nexport const DerivedReceiveAddressValidatorFactory = (allowedSigners: XyoAddress[], allowedScope: string): SignerValidator => (\n signer: XyoAddress,\n signee: XyoAddress,\n context?: { address?: XyoAddress; scope?: string },\n) => {\n const { address, scope } = context ?? {}\n if (scope !== allowedScope) {\n return false\n }\n if (isDefined(address)) {\n const derivedAddress = derivedReceiveAddress(address, scope)\n return allowedSigners.includes(signer) && signee === derivedAddress\n }\n return false\n}\n\n/**\n * Creates a transaction validator that checks all transfers are authorized by the transaction signer.\n *\n * Not part of `validateTransaction`'s built-in list \u2014 the signer validators come from deployment\n * config (`signerValidatorsFromAuthorizations`), so the engine must construct this validator and\n * inject it via `additionalValidators`. Skipping it disables transfer authorization entirely.\n */\nexport function TransactionTransfersValidatorFactory(\n signerValidators: SignerValidator[] = [SelfSignerValidator],\n): HydratedTransactionValidationFunction {\n return async (\n context,\n hydratedTx,\n ) => {\n const errors: HydratedTransactionValidationError[] = []\n const signer = hydratedTx[0].from\n try {\n const payloads = elevatedPayloads(hydratedTx)\n const transfers = payloads.filter(isTransferPayload)\n for (const transfer of transfers) {\n if (isUndefined(signerValidators.find(v => v(signer, transfer.from, transfer.context)))) {\n errors.push(new HydratedTransactionValidationError(\n hydratedTx[0]._hash,\n hydratedTx,\n `transfer from address ${transfer.from} is not authorized by signer ${signer}`,\n ))\n }\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(hydratedTx[0]._hash, hydratedTx, 'validation excepted', ex))\n }\n return errors\n }\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { BoundWitnessValidator } from '@xyo-network/sdk'\n\nimport type { HydratedTransactionValidationFunction, HydratedTransactionWithHashMeta } from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\nimport { isXl1PayloadVersionSupported } from '#protocol-model'\n\nconst error = (tx: HydratedTransactionWithHashMeta, message: string): HydratedTransactionValidationError =>\n new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, message)\n\n// Friendly pre-check for the wallet bug we want to surface clearly: signatures\n// emitted under `signatures` instead of `$signatures`. The downstream\n// BoundWitnessValidator would also catch the missing/mismatched signatures,\n// but its message (\"Length mismatch: address/signature\", \"Missing signature\n// [<address>]\") doesn't hint at the actual root cause.\nconst checkSignaturesShape = (tx: HydratedTransactionWithHashMeta): HydratedTransactionValidationError[] => {\n const bw = tx[0] as unknown as Record<string, unknown>\n if (bw.$signatures === undefined) {\n return Array.isArray(bw.signatures)\n ? [error(tx, 'BoundWitness has `signatures` but expected `$signatures` (signatures must be in the meta-prefixed `$signatures` key)')]\n : [error(tx, 'BoundWitness is missing `$signatures`')]\n }\n return []\n}\n\n/**\n * Validates the transaction's BoundWitness wholistically by delegating to\n * `BoundWitnessValidator.validate()`. This covers:\n * - signatures: length matches addresses, every signature is cryptographically\n * valid for its corresponding address against the BW data hash\n * - addresses: uniqueness\n * - array length parity: payload_hashes vs payload_schemas\n * - schemas: per-schema name validators\n * - top-level schema check\n * - PayloadValidator.schemaName check\n * - supported XL1 payload revision, independently of data-hash signature validity\n *\n * Also emits a friendly diagnostic when the common wallet bug of\n * `signatures` vs `$signatures` is detected, so the failure points at the\n * actual root cause instead of buried length/missing-signature errors.\n */\nexport const TransactionBoundWitnessValidator: HydratedTransactionValidationFunction = async (\n context,\n tx,\n) => {\n try {\n if (!isXl1PayloadVersionSupported(tx[0])) {\n return [error(tx, 'Unsupported transaction $version: expected absent or 1000000 (1.0.0)')]\n }\n const shapeErrors = checkSignaturesShape(tx)\n if (shapeErrors.length > 0) return shapeErrors\n const bwValidator = new BoundWitnessValidator(tx[0])\n const bwErrors = await bwValidator.validate()\n return bwErrors.map(e => error(tx, `BoundWitness validation: ${e.message}`))\n } catch (ex) {\n return [error(tx, `Failed TransactionBoundWitnessValidator: ${String(ex)}`)]\n }\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\n\nimport type { HydratedTransactionValidationFunction } from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\n\n/** Validates that transaction timing fields (nbf and exp) are positive, correctly ordered, and within allowed duration limits. */\nexport const TransactionDurationValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n// eslint-disable-next-line complexity\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const { exp, nbf } = tx[0]\n if (nbf < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction nbf must be positive'))\n\n if (exp < 0) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must be positive'))\n if (exp <= nbf) errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Transaction exp must greater than nbf'))\n if (exp - nbf > 10_000) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction exp must not be too far in the future',\n ))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionDurationValidator: ${String(ex)}`,\n ex,\n ))\n }\n\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\n\nimport type { HydratedTransactionValidationFunction } from '#protocol-lib'\nimport { extractElevatedHashes, HydratedTransactionValidationError } from '#protocol-lib'\n\n/** Validates that a hydrated transaction includes all required elevated script hashes. */\nexport const TransactionElevationValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n try {\n extractElevatedHashes(tx)\n } catch {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'Hydrated transaction does not include all script hashes'))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionElevationValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { addressesContains, asXyoAddress } from '@xyo-network/sdk'\n\nimport type { HydratedTransactionValidationFunction } from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\n\n/** Validates that the transaction's from field is a valid address and is included in the BoundWitness addresses. */\nexport const TransactionFromValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n const from = asXyoAddress(tx[0].from)\n if (from === undefined)errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from is not a valid address',\n ))\n else if (!addressesContains(tx[0], from)) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Transaction from address must be listed in addresses',\n ))\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionFromValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n", "import { hexToBigInt, ZERO_HASH } from '@ariestools/sdk'\n\nimport type {\n HydratedTransactionValidationFunction,\n TransactionFeesBigInt, TransactionFeesHex,\n} from '#protocol-lib'\nimport {\n AttoXL1,\n HydratedTransactionValidationError,\n minTransactionFees,\n} from '#protocol-lib'\n\n/** Validates that transaction fee fields (base, gasLimit, gasPrice, priority) are present and meet minimum requirements. */\nexport const TransactionGasValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n// eslint-disable-next-line complexity\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (tx?.[0].fees === undefined) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'Missing fees',\n ))\n } else {\n const {\n base, gasLimit, gasPrice, priority,\n } = parseFees(tx[0].fees)\n\n if (base === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.base must be defined and a valid number',\n ))\n else if (base < minTransactionFees.base) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.base must be >= ${minTransactionFees.base}`,\n ))\n\n if (gasLimit === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasLimit must be defined and a valid number',\n ))\n else if (gasLimit < minTransactionFees.gasLimit) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasLimit must be >= ${minTransactionFees.gasLimit}`,\n ))\n\n if (gasPrice === undefined) errors.push(\n new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.gasPrice must be defined and a valid number',\n ),\n )\n else if (gasPrice < minTransactionFees.gasPrice) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.gasPrice must be >= ${minTransactionFees.gasPrice}`,\n ))\n\n if (priority === undefined) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n 'fees.priority must be defined and a valid number',\n ))\n else if (priority < minTransactionFees.priority) errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `fees.priority must be >= ${minTransactionFees.priority}`,\n ))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `Failed TransactionGasValidator: ${String(ex)}`,\n ex,\n ))\n }\n return errors\n}\n\nconst parseFees = (fees: TransactionFeesHex): Partial<TransactionFeesBigInt> => {\n const ret: Partial<TransactionFeesBigInt> = {}\n const {\n base, gasLimit, gasPrice, priority,\n } = fees\n if (base !== undefined) ret.base = AttoXL1(hexToBigInt(base))\n if (gasLimit !== undefined) ret.gasLimit = AttoXL1(hexToBigInt(gasLimit))\n if (gasPrice !== undefined) ret.gasPrice = AttoXL1(hexToBigInt(gasPrice))\n if (priority !== undefined) ret.priority = AttoXL1(hexToBigInt(priority))\n return ret\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\nimport { PayloadBuilder } from '@xyo-network/sdk'\nimport type { ValidateFunction } from 'ajv'\nimport { Ajv } from 'ajv'\n\nimport type { HydratedTransactionValidationFunction, TransactionBoundWitness } from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\nimport { TransactionBoundWitnessJsonSchema } from '#schema'\n\nconst ajv = new Ajv({ allErrors: true, strict: true })\n\nlet validate: ValidateFunction<TransactionBoundWitness> | undefined\n\n/** Validates a transaction against the TransactionBoundWitness JSON schema using AJV. */\nexport const TransactionJsonSchemaValidator: HydratedTransactionValidationFunction = (\n context,\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n validate ??= ajv.compile(TransactionBoundWitnessJsonSchema)\n if (!validate(PayloadBuilder.omitStorageMeta(tx[0]))) {\n const error = new HydratedTransactionValidationError(\n tx?.[0]?._hash ?? ZERO_HASH,\n tx,\n `failed JSON schema validation: ${ajv.errorsText(validate.errors, { separator: '\\n' })}`,\n validate.errors,\n )\n errors.push(error)\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))\n }\n return errors\n}\n", "import { ZERO_HASH } from '@ariestools/sdk'\n\nimport type {\n ChainId,\n HydratedTransactionValidationFunction,\n} from '#protocol-lib'\nimport { HydratedTransactionValidationError } from '#protocol-lib'\n\n/** Validates that the transaction's chain ID matches the expected chain ID from the validation context. */\nexport const TransactionProtocolValidator: HydratedTransactionValidationFunction = async (\n context: { chainId?: ChainId },\n tx,\n) => {\n const errors: HydratedTransactionValidationError[] = []\n try {\n if (context?.chainId !== undefined && tx[0].chain !== context.chainId) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, `invalid chain id [${context.chainId}, ${tx[0].chain}]`))\n }\n } catch (ex) {\n errors.push(new HydratedTransactionValidationError(tx?.[0]?._hash ?? ZERO_HASH, tx, 'validation excepted', ex))\n }\n return errors\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["ZERO_HASH", "error", "ZERO_HASH", "ZERO_HASH", "HydratedTransactionValidationError", "isTransferPayload", "ZERO_HASH", "BoundWitnessValidator", "HydratedTransactionValidationError", "ZERO_HASH", "HydratedTransactionValidationError", "ZERO_HASH", "HydratedTransactionValidationError", "ZERO_HASH", "HydratedTransactionValidationError", "hexToBigInt", "ZERO_HASH", "HydratedTransactionValidationError", "ZERO_HASH", "HydratedTransactionValidationError", "error", "ZERO_HASH", "HydratedTransactionValidationError", "HydratedTransactionValidationError", "ZERO_HASH"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xyo-network/xl1-protocol",
|
|
3
|
-
"version": "5.
|
|
3
|
+
"version": "5.4.1",
|
|
4
4
|
"description": "XYO Layer One Protocol - All Protocol Packages",
|
|
5
5
|
"homepage": "https://xylabs.com",
|
|
6
6
|
"bugs": {
|
|
@@ -72,15 +72,15 @@
|
|
|
72
72
|
"README.md"
|
|
73
73
|
],
|
|
74
74
|
"dependencies": {
|
|
75
|
-
"@ariestools/sdk": "~8.
|
|
75
|
+
"@ariestools/sdk": "~8.2.0",
|
|
76
76
|
"ethers": "~6.17.0"
|
|
77
77
|
},
|
|
78
78
|
"devDependencies": {
|
|
79
79
|
"@ariestools/toolchain": "~9.1.2",
|
|
80
80
|
"@ariestools/tsconfig": "~9.1.2",
|
|
81
81
|
"@opentelemetry/api": "~1.9.1",
|
|
82
|
-
"@xyo-network/sdk": "~7.
|
|
83
|
-
"@xyo-network/sdk-protocol": "~7.
|
|
82
|
+
"@xyo-network/sdk": "~7.4.0",
|
|
83
|
+
"@xyo-network/sdk-protocol": "~7.4.2",
|
|
84
84
|
"ajv": "~8.20.0",
|
|
85
85
|
"eslint": "~10.9.1",
|
|
86
86
|
"typescript": "~6.0.3",
|
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
"peerDependencies": {
|
|
92
92
|
"@ariestools/sdk": "^8.1",
|
|
93
93
|
"@opentelemetry/api": "^1.9",
|
|
94
|
-
"@xyo-network/sdk": "^7.
|
|
94
|
+
"@xyo-network/sdk": "^7.4",
|
|
95
95
|
"ajv": "^8.20",
|
|
96
96
|
"zod": "^4.4"
|
|
97
97
|
},
|