@xyo-network/xl1-schema 1.7.16
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/LICENSE +165 -0
- package/README.md +230 -0
- package/dist/neutral/Executable.d.ts +4 -0
- package/dist/neutral/Executable.d.ts.map +1 -0
- package/dist/neutral/Executable.spec.d.ts +2 -0
- package/dist/neutral/Executable.spec.d.ts.map +1 -0
- package/dist/neutral/StorageMeta.d.ts +4 -0
- package/dist/neutral/StorageMeta.d.ts.map +1 -0
- package/dist/neutral/StorageMeta.spec.d.ts +2 -0
- package/dist/neutral/StorageMeta.spec.d.ts.map +1 -0
- package/dist/neutral/boundwitness/BlockBoundWitness.d.ts +6 -0
- package/dist/neutral/boundwitness/BlockBoundWitness.d.ts.map +1 -0
- package/dist/neutral/boundwitness/BlockBoundWitness.spec.d.ts +2 -0
- package/dist/neutral/boundwitness/BlockBoundWitness.spec.d.ts.map +1 -0
- package/dist/neutral/boundwitness/BlockBoundWitnessWithStorageMeta.d.ts +7 -0
- package/dist/neutral/boundwitness/BlockBoundWitnessWithStorageMeta.d.ts.map +1 -0
- package/dist/neutral/boundwitness/TransactionBoundWitness.d.ts +6 -0
- package/dist/neutral/boundwitness/TransactionBoundWitness.d.ts.map +1 -0
- package/dist/neutral/boundwitness/TransactionBoundWitnessWithStorageMeta.d.ts +6 -0
- package/dist/neutral/boundwitness/TransactionBoundWitnessWithStorageMeta.d.ts.map +1 -0
- package/dist/neutral/boundwitness/index.d.ts +5 -0
- package/dist/neutral/boundwitness/index.d.ts.map +1 -0
- package/dist/neutral/index.d.ts +5 -0
- package/dist/neutral/index.d.ts.map +1 -0
- package/dist/neutral/index.mjs +390 -0
- package/dist/neutral/index.mjs.map +1 -0
- package/dist/neutral/payload/ChainStakeIntent.d.ts +6 -0
- package/dist/neutral/payload/ChainStakeIntent.d.ts.map +1 -0
- package/dist/neutral/payload/ChainStakeIntent.spec.d.ts +2 -0
- package/dist/neutral/payload/ChainStakeIntent.spec.d.ts.map +1 -0
- package/dist/neutral/payload/HashPayload.d.ts +6 -0
- package/dist/neutral/payload/HashPayload.d.ts.map +1 -0
- package/dist/neutral/payload/HashPayload.spec.d.ts +2 -0
- package/dist/neutral/payload/HashPayload.spec.d.ts.map +1 -0
- package/dist/neutral/payload/TransferPayload.d.ts +6 -0
- package/dist/neutral/payload/TransferPayload.d.ts.map +1 -0
- package/dist/neutral/payload/TransferPayload.spec.d.ts +2 -0
- package/dist/neutral/payload/TransferPayload.spec.d.ts.map +1 -0
- package/dist/neutral/payload/index.d.ts +4 -0
- package/dist/neutral/payload/index.d.ts.map +1 -0
- package/package.json +64 -0
- package/src/Executable.spec.ts +43 -0
- package/src/Executable.ts +10 -0
- package/src/StorageMeta.spec.ts +64 -0
- package/src/StorageMeta.ts +14 -0
- package/src/boundwitness/BlockBoundWitness.spec.ts +229 -0
- package/src/boundwitness/BlockBoundWitness.ts +32 -0
- package/src/boundwitness/BlockBoundWitnessWithStorageMeta.ts +26 -0
- package/src/boundwitness/TransactionBoundWitness.ts +41 -0
- package/src/boundwitness/TransactionBoundWitnessWithStorageMeta.ts +30 -0
- package/src/boundwitness/index.ts +4 -0
- package/src/index.ts +4 -0
- package/src/payload/ChainStakeIntent.spec.ts +81 -0
- package/src/payload/ChainStakeIntent.ts +24 -0
- package/src/payload/HashPayload.spec.ts +74 -0
- package/src/payload/HashPayload.ts +23 -0
- package/src/payload/TransferPayload.spec.ts +84 -0
- package/src/payload/TransferPayload.ts +31 -0
- package/src/payload/index.ts +3 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Account } from '@xyo-network/account'
|
|
2
|
+
import { TransferSchema } from '@xyo-network/xl1-protocol'
|
|
3
|
+
import { Ajv } from 'ajv'
|
|
4
|
+
import {
|
|
5
|
+
describe, expect, test,
|
|
6
|
+
} from 'vitest'
|
|
7
|
+
|
|
8
|
+
import { TransferPayloadJsonSchema } from './TransferPayload.ts'
|
|
9
|
+
|
|
10
|
+
const ajv = new Ajv()
|
|
11
|
+
|
|
12
|
+
describe('TransferPayloadJsonSchema', () => {
|
|
13
|
+
test('should have the correct $id', () => {
|
|
14
|
+
expect(TransferPayloadJsonSchema.$id).toBe('https://schemas.xyo.network/2.0/payload/transfer')
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
test('should define the correct properties', () => {
|
|
18
|
+
const properties = TransferPayloadJsonSchema.properties
|
|
19
|
+
expect(properties).toHaveProperty('from')
|
|
20
|
+
expect(properties).toHaveProperty('epoch')
|
|
21
|
+
expect(properties).toHaveProperty('transfers')
|
|
22
|
+
expect(properties).toHaveProperty('schema')
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
test('should include required fields', () => {
|
|
26
|
+
expect(TransferPayloadJsonSchema.required).toContain('transfers')
|
|
27
|
+
expect(TransferPayloadJsonSchema.required).toContain('epoch')
|
|
28
|
+
})
|
|
29
|
+
|
|
30
|
+
test('should have type "object"', () => {
|
|
31
|
+
expect(TransferPayloadJsonSchema.type).toBe('object')
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
test('should validate a valid payload', async () => {
|
|
35
|
+
const fromAddress = (await Account.random()).address
|
|
36
|
+
const toAddress = (await Account.random()).address
|
|
37
|
+
const validate = ajv.compile(TransferPayloadJsonSchema)
|
|
38
|
+
const validPayload = {
|
|
39
|
+
from: fromAddress,
|
|
40
|
+
epoch: 1_234_567_890,
|
|
41
|
+
transfers: { [toAddress]: '1000000000000000000' },
|
|
42
|
+
schema: TransferSchema,
|
|
43
|
+
}
|
|
44
|
+
const result = validate(validPayload)
|
|
45
|
+
expect(result).toBe(true)
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
test('should validate a invalid payload - leading 0x on from address', async () => {
|
|
49
|
+
const validate = ajv.compile(TransferPayloadJsonSchema)
|
|
50
|
+
const fromAddress = (await Account.random()).address
|
|
51
|
+
const toAddress = (await Account.random()).address
|
|
52
|
+
const validPayload = {
|
|
53
|
+
from: `0x${fromAddress}`,
|
|
54
|
+
epoch: 1_234_567_890,
|
|
55
|
+
transfers: { [toAddress]: '1000000000000000000' },
|
|
56
|
+
schema: TransferSchema,
|
|
57
|
+
}
|
|
58
|
+
expect(validate(validPayload)).toBe(false)
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
test('should validate a invalid payload - leading 0x on from address', async () => {
|
|
62
|
+
const validate = ajv.compile(TransferPayloadJsonSchema)
|
|
63
|
+
const fromAddress = (await Account.random()).address
|
|
64
|
+
const toAddress = (await Account.random()).address
|
|
65
|
+
const validPayload = {
|
|
66
|
+
from: fromAddress,
|
|
67
|
+
epoch: 1_234_567_890,
|
|
68
|
+
transfers: { [`0x${toAddress}`]: '1000000000000000000' },
|
|
69
|
+
schema: TransferSchema,
|
|
70
|
+
}
|
|
71
|
+
expect(validate(validPayload)).toBe(false)
|
|
72
|
+
})
|
|
73
|
+
|
|
74
|
+
test('should invalidate an invalid payload', () => {
|
|
75
|
+
const validate = ajv.compile(TransferPayloadJsonSchema)
|
|
76
|
+
const invalidPayload = {
|
|
77
|
+
from: 'invalid-address',
|
|
78
|
+
epoch: 'not-a-number',
|
|
79
|
+
transfers: { 'invalid-address': 'not-a-uint256' },
|
|
80
|
+
schema: 'invalid-schema',
|
|
81
|
+
}
|
|
82
|
+
expect(validate(invalidPayload)).toBe(false)
|
|
83
|
+
})
|
|
84
|
+
})
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { PayloadBuilder } from '@xyo-network/payload-builder'
|
|
2
|
+
import {
|
|
3
|
+
AddressRegEx, payloadJsonSchema, Uint256RegEx,
|
|
4
|
+
} from '@xyo-network/payload-wrapper'
|
|
5
|
+
import type { SchemaPayload } from '@xyo-network/schema-payload-plugin'
|
|
6
|
+
import { SchemaSchema } from '@xyo-network/schema-payload-plugin'
|
|
7
|
+
import type { Transfer } from '@xyo-network/xl1-protocol'
|
|
8
|
+
import { TransferSchema } from '@xyo-network/xl1-protocol'
|
|
9
|
+
import type { JSONSchemaType } from 'ajv'
|
|
10
|
+
|
|
11
|
+
export const TransferPayloadJsonSchema: JSONSchemaType<Transfer> = {
|
|
12
|
+
...payloadJsonSchema,
|
|
13
|
+
$id: 'https://schemas.xyo.network/2.0/payload/transfer',
|
|
14
|
+
additionalProperties: false,
|
|
15
|
+
properties: {
|
|
16
|
+
...payloadJsonSchema.properties,
|
|
17
|
+
from: { type: 'string', pattern: AddressRegEx },
|
|
18
|
+
epoch: { type: 'number' },
|
|
19
|
+
transfers: {
|
|
20
|
+
type: 'object',
|
|
21
|
+
propertyNames: { pattern: AddressRegEx },
|
|
22
|
+
patternProperties: { [AddressRegEx]: { type: 'string', pattern: Uint256RegEx } },
|
|
23
|
+
},
|
|
24
|
+
schema: { type: 'string', pattern: TransferSchema },
|
|
25
|
+
},
|
|
26
|
+
required: [...payloadJsonSchema.required, 'transfers', 'epoch'],
|
|
27
|
+
type: 'object',
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export const TransferPayloadJsonSchemaPayload = new PayloadBuilder<SchemaPayload>({ schema: SchemaSchema })
|
|
31
|
+
.fields({ definition: TransferPayloadJsonSchema }).build()
|