@xyo-network/xl1-rpc 1.16.15 → 1.16.17

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.
Files changed (56) hide show
  1. package/package.json +7 -4
  2. package/dist/neutral/provider/connection/spec/XyoConnection.spec.d.ts +0 -2
  3. package/dist/neutral/provider/connection/spec/XyoConnection.spec.d.ts.map +0 -1
  4. package/dist/neutral/provider/signer/spec/RpcEngineXyoSigner.spec.d.ts +0 -2
  5. package/dist/neutral/provider/signer/spec/RpcEngineXyoSigner.spec.d.ts.map +0 -1
  6. package/dist/neutral/provider/viewer/spec/JsonRpcXyoViewer.spec.d.ts +0 -2
  7. package/dist/neutral/provider/viewer/spec/JsonRpcXyoViewer.spec.d.ts.map +0 -1
  8. package/dist/neutral/spec/MemoryXyoClient.spec.d.ts +0 -2
  9. package/dist/neutral/spec/MemoryXyoClient.spec.d.ts.map +0 -1
  10. package/dist/neutral/spec/MemoryXyoGateway.spec.d.ts +0 -2
  11. package/dist/neutral/spec/MemoryXyoGateway.spec.d.ts.map +0 -1
  12. package/dist/neutral/types/schema/common/spec/BigIntZod.spec.d.ts +0 -2
  13. package/dist/neutral/types/schema/common/spec/BigIntZod.spec.d.ts.map +0 -1
  14. package/dist/neutral/types/schema/common/spec/HydratedBlockSchema.spec.d.ts +0 -2
  15. package/dist/neutral/types/schema/common/spec/HydratedBlockSchema.spec.d.ts.map +0 -1
  16. package/dist/neutral/types/schema/common/spec/HydratedTransaction.spec.d.ts +0 -2
  17. package/dist/neutral/types/schema/common/spec/HydratedTransaction.spec.d.ts.map +0 -1
  18. package/dist/neutral/types/schema/common/spec/Payload.spec.d.ts +0 -2
  19. package/dist/neutral/types/schema/common/spec/Payload.spec.d.ts.map +0 -1
  20. package/dist/neutral/types/schema/common/spec/TransactionBoundWitnessZod.spec.d.ts +0 -2
  21. package/dist/neutral/types/schema/common/spec/TransactionBoundWitnessZod.spec.d.ts.map +0 -1
  22. package/dist/neutral/types/schema/common/spec/UnsignedHydratedTransactionSchema.spec.d.ts +0 -2
  23. package/dist/neutral/types/schema/common/spec/UnsignedHydratedTransactionSchema.spec.d.ts.map +0 -1
  24. package/dist/node/provider/connection/spec/XyoConnection.spec.d.ts +0 -2
  25. package/dist/node/provider/connection/spec/XyoConnection.spec.d.ts.map +0 -1
  26. package/dist/node/provider/signer/spec/RpcEngineXyoSigner.spec.d.ts +0 -2
  27. package/dist/node/provider/signer/spec/RpcEngineXyoSigner.spec.d.ts.map +0 -1
  28. package/dist/node/provider/viewer/spec/JsonRpcXyoViewer.spec.d.ts +0 -2
  29. package/dist/node/provider/viewer/spec/JsonRpcXyoViewer.spec.d.ts.map +0 -1
  30. package/dist/node/spec/MemoryXyoClient.spec.d.ts +0 -2
  31. package/dist/node/spec/MemoryXyoClient.spec.d.ts.map +0 -1
  32. package/dist/node/spec/MemoryXyoGateway.spec.d.ts +0 -2
  33. package/dist/node/spec/MemoryXyoGateway.spec.d.ts.map +0 -1
  34. package/dist/node/types/schema/common/spec/BigIntZod.spec.d.ts +0 -2
  35. package/dist/node/types/schema/common/spec/BigIntZod.spec.d.ts.map +0 -1
  36. package/dist/node/types/schema/common/spec/HydratedBlockSchema.spec.d.ts +0 -2
  37. package/dist/node/types/schema/common/spec/HydratedBlockSchema.spec.d.ts.map +0 -1
  38. package/dist/node/types/schema/common/spec/HydratedTransaction.spec.d.ts +0 -2
  39. package/dist/node/types/schema/common/spec/HydratedTransaction.spec.d.ts.map +0 -1
  40. package/dist/node/types/schema/common/spec/Payload.spec.d.ts +0 -2
  41. package/dist/node/types/schema/common/spec/Payload.spec.d.ts.map +0 -1
  42. package/dist/node/types/schema/common/spec/TransactionBoundWitnessZod.spec.d.ts +0 -2
  43. package/dist/node/types/schema/common/spec/TransactionBoundWitnessZod.spec.d.ts.map +0 -1
  44. package/dist/node/types/schema/common/spec/UnsignedHydratedTransactionSchema.spec.d.ts +0 -2
  45. package/dist/node/types/schema/common/spec/UnsignedHydratedTransactionSchema.spec.d.ts.map +0 -1
  46. package/src/provider/connection/spec/XyoConnection.spec.ts +0 -29
  47. package/src/provider/signer/spec/RpcEngineXyoSigner.spec.ts +0 -87
  48. package/src/provider/viewer/spec/JsonRpcXyoViewer.spec.ts +0 -173
  49. package/src/spec/MemoryXyoClient.spec.ts +0 -66
  50. package/src/spec/MemoryXyoGateway.spec.ts +0 -99
  51. package/src/types/schema/common/spec/BigIntZod.spec.ts +0 -19
  52. package/src/types/schema/common/spec/HydratedBlockSchema.spec.ts +0 -18
  53. package/src/types/schema/common/spec/HydratedTransaction.spec.ts +0 -18
  54. package/src/types/schema/common/spec/Payload.spec.ts +0 -28
  55. package/src/types/schema/common/spec/TransactionBoundWitnessZod.spec.ts +0 -18
  56. package/src/types/schema/common/spec/UnsignedHydratedTransactionSchema.spec.ts +0 -53
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "http://json.schemastore.org/package.json",
3
3
  "name": "@xyo-network/xl1-rpc",
4
- "version": "1.16.15",
4
+ "version": "1.16.17",
5
5
  "description": "XYO Layer One API",
6
6
  "homepage": "https://xylabs.com",
7
7
  "bugs": {
@@ -42,7 +42,10 @@
42
42
  },
43
43
  "files": [
44
44
  "dist",
45
- "src"
45
+ "src",
46
+ "!**/*.bench.*",
47
+ "!**/*.spec.*",
48
+ "!**/*.test.*"
46
49
  ],
47
50
  "scripts": {
48
51
  "build": "xy build-package",
@@ -65,7 +68,7 @@
65
68
  "@xyo-network/payload-builder": "~5.1.23",
66
69
  "@xyo-network/payload-model": "~5.1.23",
67
70
  "@xyo-network/xl1-protocol": "~1.13.11",
68
- "@xyo-network/xl1-protocol-sdk": "~1.16.15",
71
+ "@xyo-network/xl1-protocol-sdk": "~1.16.17",
69
72
  "axios": "~1.13.2",
70
73
  "uuid": "~13.0.0",
71
74
  "zod": "~4.1.12"
@@ -79,7 +82,7 @@
79
82
  "@xylabs/vitest-extended": "~5.0.34",
80
83
  "@xyo-network/account": "~5.1.23",
81
84
  "@xyo-network/account-model": "~5.1.23",
82
- "@xyo-network/chain-protocol": "~1.16.15",
85
+ "@xyo-network/chain-protocol": "~1.16.17",
83
86
  "@xyo-network/wallet": "~5.1.23",
84
87
  "dotenv": "~17.2.3",
85
88
  "eslint": "^9.39.1",
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=XyoConnection.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"XyoConnection.spec.d.ts","sourceRoot":"","sources":["../../../../../src/provider/connection/spec/XyoConnection.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=RpcEngineXyoSigner.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RpcEngineXyoSigner.spec.d.ts","sourceRoot":"","sources":["../../../../../src/provider/signer/spec/RpcEngineXyoSigner.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import '@xylabs/vitest-extended';
2
- //# sourceMappingURL=JsonRpcXyoViewer.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"JsonRpcXyoViewer.spec.d.ts","sourceRoot":"","sources":["../../../../../src/provider/viewer/spec/JsonRpcXyoViewer.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=MemoryXyoClient.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryXyoClient.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/MemoryXyoClient.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=MemoryXyoGateway.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryXyoGateway.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/MemoryXyoGateway.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=BigIntZod.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BigIntZod.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/BigIntZod.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=HydratedBlockSchema.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HydratedBlockSchema.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/HydratedBlockSchema.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=HydratedTransaction.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HydratedTransaction.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/HydratedTransaction.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Payload.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Payload.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/Payload.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=TransactionBoundWitnessZod.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransactionBoundWitnessZod.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/TransactionBoundWitnessZod.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=UnsignedHydratedTransactionSchema.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UnsignedHydratedTransactionSchema.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/UnsignedHydratedTransactionSchema.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=XyoConnection.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"XyoConnection.spec.d.ts","sourceRoot":"","sources":["../../../../../src/provider/connection/spec/XyoConnection.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=RpcEngineXyoSigner.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"RpcEngineXyoSigner.spec.d.ts","sourceRoot":"","sources":["../../../../../src/provider/signer/spec/RpcEngineXyoSigner.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- import '@xylabs/vitest-extended';
2
- //# sourceMappingURL=JsonRpcXyoViewer.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"JsonRpcXyoViewer.spec.d.ts","sourceRoot":"","sources":["../../../../../src/provider/viewer/spec/JsonRpcXyoViewer.spec.ts"],"names":[],"mappings":"AAAA,OAAO,yBAAyB,CAAA"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=MemoryXyoClient.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryXyoClient.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/MemoryXyoClient.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=MemoryXyoGateway.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"MemoryXyoGateway.spec.d.ts","sourceRoot":"","sources":["../../../src/spec/MemoryXyoGateway.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=BigIntZod.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"BigIntZod.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/BigIntZod.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=HydratedBlockSchema.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HydratedBlockSchema.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/HydratedBlockSchema.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=HydratedTransaction.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"HydratedTransaction.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/HydratedTransaction.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=Payload.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"Payload.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/Payload.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=TransactionBoundWitnessZod.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"TransactionBoundWitnessZod.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/TransactionBoundWitnessZod.spec.ts"],"names":[],"mappings":""}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=UnsignedHydratedTransactionSchema.spec.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"UnsignedHydratedTransactionSchema.spec.d.ts","sourceRoot":"","sources":["../../../../../../src/types/schema/common/spec/UnsignedHydratedTransactionSchema.spec.ts"],"names":[],"mappings":""}
@@ -1,29 +0,0 @@
1
- import { SimpleXyoRunner, type XyoConnection } from '@xyo-network/xl1-protocol-sdk'
2
- import {
3
- beforeAll, describe, expect, it,
4
- } from 'vitest'
5
-
6
- import { rpcEngineFromConnection } from '../../../engine-node/index.ts'
7
- import { MemoryRpcTransport } from '../../../transport/index.ts'
8
- import { AllRpcSchemas } from '../../../types/index.ts'
9
- import { JsonRpcNetworkStakeViewer, JsonRpcXyoViewer } from '../../viewer/index.ts'
10
- import { XyoBaseConnection } from '../XyoBaseConnection.ts'
11
-
12
- describe('RpcEngine - XyoProvider', () => {
13
- let sut: XyoConnection
14
- beforeAll(() => {
15
- const runner = new SimpleXyoRunner()
16
- const connection = new XyoBaseConnection({ runner })
17
- const engine = rpcEngineFromConnection(connection)
18
- const transport = new MemoryRpcTransport(engine, AllRpcSchemas)
19
- const networkStakeViewer = new JsonRpcNetworkStakeViewer(transport)
20
- const viewer = new JsonRpcXyoViewer(transport, { networkStakeViewer })
21
- sut = new XyoBaseConnection({ runner, viewer })
22
- })
23
- it('should expose a runner', () => {
24
- expect(sut.runner).toBeDefined()
25
- })
26
- it('should expose a viewer', () => {
27
- expect(sut.viewer).toBeDefined()
28
- })
29
- })
@@ -1,87 +0,0 @@
1
- import { createAsyncMiddleware, JsonRpcEngine } from '@metamask/json-rpc-engine'
2
- import type { Json } from '@metamask/utils'
3
- import { asAddress, toAddress } from '@xylabs/sdk-js'
4
- import { Account } from '@xyo-network/account'
5
- import type { ChainId } from '@xyo-network/xl1-protocol'
6
- import { defaultTransactionFees } from '@xyo-network/xl1-protocol'
7
- import type { XyoSigner } from '@xyo-network/xl1-protocol-sdk'
8
- import { buildUnsignedTransaction, SimpleXyoSigner } from '@xyo-network/xl1-protocol-sdk'
9
- import {
10
- beforeAll, describe, expect, it,
11
- } from 'vitest'
12
-
13
- import { requestSchemas, rpcMethodHandlersFromSigner } from '../../../engine/index.ts'
14
- import { MemoryRpcTransport } from '../../../transport/index.ts'
15
- import {
16
- createRequestSchema, JsonRpcErrorCodes, XyoSignerRpcSchemas,
17
- } from '../../../types/index.ts'
18
- import { RpcXyoSigner } from '../JsonRpcXyoSigner.ts'
19
-
20
- describe('RpcEngine - XyoSigner', () => {
21
- let sut: XyoSigner
22
- const chain = toAddress('2AAE728aFd1777b79c34D79c4523797F9D9965b0') as ChainId
23
- beforeAll(async () => {
24
- const account = await Account.random()
25
- const signer = new SimpleXyoSigner(account)
26
- const handlers = rpcMethodHandlersFromSigner(signer)
27
- const engine = new JsonRpcEngine()
28
- engine.push(
29
- createAsyncMiddleware(async (req, res) => {
30
- // Get method name
31
- const method = req.method as keyof typeof handlers & keyof typeof requestSchemas
32
- // Get schema for method
33
- const handler = handlers[method]
34
- // Get handler for method
35
- const schema = XyoSignerRpcSchemas[method]
36
-
37
- // If no schema or handler exists
38
- if (schema === undefined || handler === undefined) {
39
- // return method not found error
40
- res.error = JsonRpcErrorCodes.MethodNotFound
41
- return
42
- }
43
-
44
- // Validate request according to schema
45
- let requestSchema = requestSchemas[method]
46
- if (requestSchema == undefined) {
47
- requestSchema = createRequestSchema(method, schema.params.from)
48
- requestSchemas[method] = requestSchema
49
- }
50
-
51
- const parsed = requestSchema.safeParse(req)
52
- // If validation fails
53
- if (!parsed.success) {
54
- res.error = {
55
- // Return invalid params error
56
- ...JsonRpcErrorCodes.InvalidParams,
57
- // with the specific validation error message
58
- message: parsed.error.message,
59
- }
60
- return
61
- }
62
-
63
- // Call handler with validated params
64
- const { params } = parsed.data
65
- const result = await handler(params as never)
66
- // Parse handler result according to schema
67
- res.result = schema.result.to.parse(result) as Json
68
- }),
69
- )
70
- const transport = new MemoryRpcTransport(engine, XyoSignerRpcSchemas)
71
- sut = new RpcXyoSigner(transport)
72
- })
73
- describe('address', () => {
74
- it('should return signer addresses', async () => {
75
- const address = await sut.address()
76
- expect(asAddress(address)).toBeDefined()
77
- })
78
- })
79
- describe('signTransaction', () => {
80
- it('should return signed transaction', async () => {
81
- const address = await sut.address()
82
- const unsignedTransaction = await buildUnsignedTransaction(chain, [], [], 0, 1000, address, defaultTransactionFees)
83
- const signedTransaction = await sut.signTransaction(unsignedTransaction)
84
- expect(signedTransaction).toBeDefined()
85
- })
86
- })
87
- })
@@ -1,173 +0,0 @@
1
- import '@xylabs/vitest-extended'
2
-
3
- import type { Address, Hash } from '@xylabs/sdk-js'
4
- import {
5
- AddressRegEx, asAddress, asHash, assertEx,
6
- } from '@xylabs/sdk-js'
7
- import { PayloadBuilder } from '@xyo-network/payload-builder'
8
- import type { HydratedBlock } from '@xyo-network/xl1-protocol'
9
- import {
10
- beforeAll,
11
- describe, expect, it,
12
- } from 'vitest'
13
-
14
- import { HttpRpcTransport } from '../../../transport/index.ts'
15
- import { NetworkStakeViewerRpcSchemas, XyoViewerRpcSchemas } from '../../../types/index.ts'
16
- import { JsonRpcNetworkStakeViewer } from '../JsonRpcNetworkStakeViewer/index.ts'
17
- import { JsonRpcXyoViewer } from '../JsonRpcXyoViewer.ts'
18
-
19
- describe.skip('RpcXyoViewer - live integration tests', () => {
20
- const transport = new HttpRpcTransport('http://localhost:8080/rpc', { ...XyoViewerRpcSchemas, ...NetworkStakeViewerRpcSchemas })
21
- const sut = new JsonRpcXyoViewer(transport, { networkStakeViewer: new JsonRpcNetworkStakeViewer(transport) })
22
-
23
- describe('accountBalance', () => {
24
- const TEST_ADDRESS = '796c74fb1c23dc2dcc4e40b8c4284f05da51210f' as Address
25
-
26
- it('should return account balance', async () => {
27
- const balance = await sut.accountBalance(TEST_ADDRESS)
28
- expect(typeof balance === 'bigint').toBeTruthy()
29
- expect(balance).toBeGreaterThan(0n)
30
- })
31
- })
32
-
33
- describe('blockByHash', () => {
34
- let blockHash: Hash
35
-
36
- beforeAll(async () => {
37
- blockHash = await sut.currentBlockHash()
38
- })
39
-
40
- it('should return block by number', async () => {
41
- const block = await sut.blockByHash(blockHash)
42
- expect(block).not.toBeNull()
43
- })
44
- })
45
-
46
- describe('blockByNumber', () => {
47
- let blockNumber: number
48
-
49
- beforeAll(async () => {
50
- blockNumber = await sut.currentBlockNumber()
51
- })
52
-
53
- it('should return block by number', async () => {
54
- const block = await sut.blockByNumber(blockNumber)
55
- expect(block).not.toBeNull()
56
- })
57
- })
58
-
59
- describe('blocksByHash', () => {
60
- let blockHash: Hash
61
- const count = 2
62
-
63
- beforeAll(async () => {
64
- blockHash = await sut.currentBlockHash()
65
- })
66
-
67
- it('should return block by number', async () => {
68
- const block = await sut.blocksByHash(blockHash, count)
69
- expect(block).toBeArrayOfSize(count)
70
- })
71
- })
72
-
73
- describe('chainId', () => {
74
- it('should return chain ID', async () => {
75
- const chainId = await sut.chainId()
76
- expect(chainId).toMatch(new RegExp(AddressRegEx))
77
- expect(asAddress(chainId)).toBeDefined()
78
- })
79
- })
80
-
81
- describe('currentBlockNumber', () => {
82
- it('should return current block number', async () => {
83
- const blockNumber = await sut.currentBlockNumber()
84
- expect(typeof blockNumber).toBe('number')
85
- expect(blockNumber).toBeGreaterThan(0)
86
- })
87
- })
88
-
89
- describe('currentBlock', () => {
90
- it('should return current block', async () => {
91
- const block = await sut.currentBlock()
92
- expect(block).toBeDefined()
93
- })
94
- })
95
-
96
- describe('currentBlockHash', () => {
97
- it('should return current block hash', async () => {
98
- const hash = await sut.currentBlockHash()
99
- expect(asHash(hash)).toBeDefined()
100
- })
101
- })
102
-
103
- describe('currentBlockNumber', () => {
104
- it('should return current block number', async () => {
105
- const latestBlockNumber = await sut.currentBlockNumber()
106
- expect(latestBlockNumber).toBeNumber()
107
- })
108
- })
109
-
110
- describe('transactionByBlockHashAndIndex', () => {
111
- let block: HydratedBlock
112
-
113
- beforeAll(async () => {
114
- block = await sut.currentBlock()
115
- })
116
-
117
- it('should return a transaction if valid block hash and index are provided', async () => {
118
- const blockHash = block[0]._hash
119
- const txIndex = 0
120
- const tx = await sut.transactionByBlockHashAndIndex(blockHash, txIndex)
121
- // Depending on your chain setup, this might sometimes be null
122
- expect(tx === null || typeof tx === 'object').toBeTruthy()
123
- })
124
-
125
- it('should return null for invalid transaction index', async () => {
126
- const block = await sut.currentBlock()
127
- const blockHash = block[0]._hash
128
- const tx = await sut.transactionByBlockHashAndIndex(blockHash, 9999)
129
- expect(tx).toBeNull()
130
- })
131
- })
132
-
133
- describe('transactionByBlockNumberAndIndex', () => {
134
- let blockNumber: number
135
-
136
- beforeAll(async () => {
137
- blockNumber = await sut.currentBlockNumber()
138
- })
139
-
140
- it('should return a transaction if valid block number and index are provided', async () => {
141
- const tx = await sut.transactionByBlockNumberAndIndex(blockNumber, 0)
142
- expect(tx).not.toBeNull()
143
- })
144
-
145
- it('should return null for invalid block number', async () => {
146
- const tx = await sut.transactionByBlockNumberAndIndex(Number.MAX_SAFE_INTEGER, 0)
147
- expect(tx).toBeNull()
148
- })
149
-
150
- it('should return null for invalid transaction index', async () => {
151
- const tx = await sut.transactionByBlockNumberAndIndex(blockNumber, 1_000_000)
152
- expect(tx).toBeNull()
153
- })
154
- })
155
-
156
- describe('transactionByHash', () => {
157
- let transactionHash: Hash
158
- beforeAll(async () => {
159
- const blockNumber = await sut.currentBlockNumber()
160
- const tx = await sut.transactionByBlockNumberAndIndex(blockNumber, 0)
161
- expect(tx).not.toBeNull()
162
- transactionHash = await PayloadBuilder.hash(assertEx(tx)[0])
163
- })
164
- it('should return tx by hash', async () => {
165
- const tx = await sut.transactionByHash(transactionHash)
166
- expect(tx).not.toBeNull()
167
- })
168
- it('should return null for unknown tx hash', async () => {
169
- const tx = await sut.transactionByHash('4b5958c6d16b26d6790e33f5be45578728b0ea36e40a0d1b9c9164822341cac1' as Hash)
170
- expect(tx).toBeNull()
171
- })
172
- })
173
- })
@@ -1,66 +0,0 @@
1
- import type { AccountInstance } from '@xyo-network/account-model'
2
- import { HDWallet } from '@xyo-network/wallet'
3
- import type { GatewayName } from '@xyo-network/xl1-protocol'
4
- import type {
5
- XyoClient, XyoConnection,
6
- XyoGateway,
7
- XyoPermissions,
8
- } from '@xyo-network/xl1-protocol-sdk'
9
- import {
10
- ADDRESS_INDEX, generateXyoBaseWalletFromPhrase, MemoryPermissionsStore, SimpleXyoClient, SimpleXyoGateway,
11
- SimpleXyoPermissions,
12
- SimpleXyoSigner,
13
- } from '@xyo-network/xl1-protocol-sdk'
14
- import {
15
- beforeEach, describe, expect, it,
16
- } from 'vitest'
17
-
18
- import { HttpRpcXyoConnection } from '../provider/connection/index.ts'
19
-
20
- describe('Client', () => {
21
- const endpoint = 'http://localhost:8080/rpc'
22
- const invoker = 'http://localhost:3000'
23
- // const dataLakeEndpoint = 'http://localhost:8080/chain/archivist'
24
- let account: AccountInstance
25
- let signer: SimpleXyoSigner
26
- let store
27
- let permissions: XyoPermissions
28
- let connection: XyoConnection
29
- let gateway: XyoGateway
30
- let client: XyoClient
31
-
32
- beforeEach(async () => {
33
- const mnemonic = process.env.XL1_PRODUCER__MNEMONIC ?? HDWallet.generateMnemonic()
34
- const wallet = await generateXyoBaseWalletFromPhrase(mnemonic)
35
- account = await wallet.derivePath(ADDRESS_INDEX.XYO)
36
- signer = new SimpleXyoSigner(account)
37
- store = new MemoryPermissionsStore(invoker)
38
- permissions = new SimpleXyoPermissions(store)
39
- connection = new HttpRpcXyoConnection({
40
- endpoint,
41
- // storage: dataLakeEndpoint,
42
- })
43
- gateway = new SimpleXyoGateway(signer, connection)
44
- client = new SimpleXyoClient({ localhost: gateway }, permissions)
45
- })
46
-
47
- describe('permissions', () => {
48
- it('should be have permissions', () => {
49
- const permissions = client.permissions
50
- expect(permissions).toBeDefined()
51
- })
52
- })
53
-
54
- describe('gateways', () => {
55
- describe('connection', () => {
56
- it('should be defined', () => {
57
- const gateway = client.gateways['localhost' as GatewayName].connection
58
- expect(gateway).toBeDefined()
59
- })
60
- it('should allow retrieving the chain ID', async () => {
61
- const chainId = await (await client.gateways['localhost' as GatewayName]?.connection())?.viewer?.chainId()
62
- expect(chainId).toBeDefined()
63
- })
64
- })
65
- })
66
- })
@@ -1,99 +0,0 @@
1
- import type { Hash } from '@xylabs/sdk-js'
2
- import { isHash } from '@xylabs/sdk-js'
3
- import { Account } from '@xyo-network/account'
4
- import type { AccountInstance } from '@xyo-network/account-model'
5
- import { PayloadBuilder } from '@xyo-network/payload-builder'
6
- import type { AnyPayload, Payload } from '@xyo-network/payload-model'
7
- import type { AllowedBlockPayload, SignedHydratedTransaction } from '@xyo-network/xl1-protocol'
8
- import type { XyoGatewayRunner } from '@xyo-network/xl1-protocol-sdk'
9
- import {
10
- buildUnsignedTransaction, SimpleXyoGatewayRunner,
11
- SimpleXyoSigner,
12
- } from '@xyo-network/xl1-protocol-sdk'
13
- import {
14
- beforeEach, describe, expect, it,
15
- vi,
16
- } from 'vitest'
17
-
18
- import { HttpRpcXyoConnection } from '../provider/connection/index.ts'
19
-
20
- describe('MemoryXyoGateway', () => {
21
- const endpoint = 'http://localhost:8080/rpc'
22
- // const dataLakeEndpoint = 'http://localhost:8080/chain/archivist'
23
- let account: AccountInstance
24
- let signer: SimpleXyoSigner
25
- let connection: HttpRpcXyoConnection
26
- let sut: XyoGatewayRunner
27
-
28
- beforeEach(async () => {
29
- account = await Account.random()
30
- signer = new SimpleXyoSigner(account)
31
-
32
- connection = new HttpRpcXyoConnection({
33
- endpoint,
34
- // storage: dataLakeEndpoint,
35
- })
36
- sut = new SimpleXyoGatewayRunner(connection, signer)
37
- })
38
-
39
- describe('connection', () => {
40
- it('should return the connection', () => {
41
- expect(sut.connection).toBeDefined()
42
- })
43
- })
44
- describe('signer', () => {
45
- it('should return the signer', () => {
46
- expect(sut.signer).toBeDefined()
47
- })
48
- })
49
- describe('submitTransaction', () => {
50
- it('should submit the transaction', async () => {
51
- const elevatedPayloads: AllowedBlockPayload[] = []
52
- const additionalPayloads: Payload[] = []
53
- const chainId = await connection.viewer?.chainId()
54
- const nbf = await connection.viewer?.currentBlockNumber() ?? 0
55
- const signer = await sut.signer()
56
- const signerAddress = await signer.address()
57
- expect(chainId).toBeDefined()
58
- if (chainId) {
59
- const unsignedTransaction = await buildUnsignedTransaction(chainId, elevatedPayloads, additionalPayloads, nbf, nbf + 1000, signerAddress)
60
- const tx = await signer.signTransaction(unsignedTransaction)
61
- expect(tx).toBeDefined()
62
- }
63
- })
64
- })
65
- describe('addPayloadsToChain', () => {
66
- it('should add payloads to the chain', async () => {
67
- const mockRunner = vi.spyOn(connection.runner!, 'broadcastTransaction').mockImplementation(async (tx: SignedHydratedTransaction) => {
68
- return await PayloadBuilder.hash(tx[0])
69
- })
70
- const chainId = (await Account.random()).address
71
- const mockSigner = vi.spyOn(signer, 'signTransaction')
72
- const elevatedPayloads: AllowedBlockPayload[] = [
73
- { schema: 'network.xyo.hash', hash: '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef' as Hash },
74
- ]
75
- const additionalPayloads: AnyPayload[] = [{
76
- schema: 'network.xyo.data',
77
- data: 'foo',
78
- }]
79
- const result = await sut.addPayloadsToChain(elevatedPayloads, additionalPayloads, {
80
- nbf: 0,
81
- exp: 1000,
82
- chain: chainId,
83
- })
84
-
85
- // Verify mocks were called
86
- expect(mockRunner).toHaveBeenCalled()
87
- expect(mockSigner).toHaveBeenCalled()
88
-
89
- // Verify result
90
- expect(result[0]).toEqual(await PayloadBuilder.hash(result[1][0]))
91
- expect(result).toBeDefined()
92
- expect(result.length).toBe(2)
93
- expect(isHash(result[0])).toBe(true)
94
- expect(result[1][0].nbf).toBe(0)
95
- expect(result[1][0].exp).toBe(1000)
96
- expect(result[1][0].chain).toBe(chainId)
97
- })
98
- })
99
- })
@@ -1,19 +0,0 @@
1
- import { BigIntToJsonZod, JsonToBigIntZod } from '@xylabs/sdk-js'
2
- import {
3
- describe, expect, it,
4
- } from 'vitest'
5
-
6
- describe('BigIntZod', () => {
7
- describe('JsonToBigIntZod', () => {
8
- it.each(['0', '00', '01010101', '0308'])('should bigint from string', (input) => {
9
- const result = JsonToBigIntZod.safeParse(input)
10
- expect(result.success).toBe(true)
11
- })
12
- })
13
- describe('BigIntToJsonZod', () => {
14
- it.each([0n, 1n, 100n, 1000n, 1_000_000n])('should parse bigint to string', (input) => {
15
- const result = BigIntToJsonZod.safeParse(input)
16
- expect(result.success).toBe(true)
17
- })
18
- })
19
- })
@@ -1,18 +0,0 @@
1
- import { Account } from '@xyo-network/account'
2
- import { buildRandomChain } from '@xyo-network/chain-protocol'
3
- import {
4
- describe, expect, it,
5
- } from 'vitest'
6
-
7
- import { SignedHydratedBlockWithStorageMetaZod } from '../HydratedBlock.ts'
8
-
9
- const account = await Account.random()
10
- const signedHydratedBlock = (await buildRandomChain(account, 3))[1]
11
-
12
- describe('SignedHydratedBlockZod', () => {
13
- it('should parse a signed hydrated block', () => {
14
- const result = SignedHydratedBlockWithStorageMetaZod.safeParse(signedHydratedBlock)
15
- expect(result.data).toEqual(signedHydratedBlock)
16
- expect(result.success).toBe(true)
17
- })
18
- })
@@ -1,18 +0,0 @@
1
- import { ZERO_ADDRESS } from '@xylabs/sdk-js'
2
- import { buildRandomTransaction } from '@xyo-network/chain-protocol'
3
- import { asHydratedTransactionWithStorageMeta } from '@xyo-network/xl1-protocol'
4
- import {
5
- describe, expect, it,
6
- } from 'vitest'
7
-
8
- import { HydratedTransactionZod } from '../HydratedTransaction.ts'
9
-
10
- const hydratedTransaction = await buildRandomTransaction(ZERO_ADDRESS)
11
-
12
- describe('HydratedTransaction', () => {
13
- it('should parse a HydratedTransaction', () => {
14
- const result = HydratedTransactionZod.safeParse(hydratedTransaction)
15
- expect(result.success).toBe(true)
16
- expect(result.data).toEqual(asHydratedTransactionWithStorageMeta(hydratedTransaction))
17
- })
18
- })
@@ -1,28 +0,0 @@
1
- import { asHash } from '@xylabs/sdk-js'
2
- import { PayloadBuilder } from '@xyo-network/payload-builder'
3
- import { PayloadZod, WithStorageMetaZod } from '@xyo-network/payload-model'
4
- import type { HashPayload } from '@xyo-network/xl1-protocol'
5
- import { HashSchema } from '@xyo-network/xl1-protocol'
6
- import {
7
- describe, expect, it,
8
- } from 'vitest'
9
-
10
- const hashPayload: HashPayload = {
11
- schema: HashSchema,
12
- hash: asHash('e70f82c755ac75847f9d1c6b45d96099b343571d724e5383569724c85cc9d303', true),
13
- }
14
-
15
- const hashPayloadWithMeta = await PayloadBuilder.addStorageMeta(hashPayload)
16
-
17
- describe('Payload', () => {
18
- it('should parse a HashPayload', () => {
19
- const result = PayloadZod.safeParse(hashPayload)
20
- expect(result.success).toBe(true)
21
- expect(result.data).toEqual(hashPayload)
22
- })
23
- it('should parse a HashPayload with storage Meta', () => {
24
- const result = WithStorageMetaZod(PayloadZod).safeParse(hashPayloadWithMeta)
25
- expect(result.success).toBe(true)
26
- expect(result.data).toEqual(hashPayloadWithMeta)
27
- })
28
- })
@@ -1,18 +0,0 @@
1
- import { ZERO_ADDRESS } from '@xylabs/sdk-js'
2
- import { buildRandomTransaction } from '@xyo-network/chain-protocol'
3
- import { asTransactionBoundWitness } from '@xyo-network/xl1-protocol'
4
- import {
5
- describe, expect, it,
6
- } from 'vitest'
7
-
8
- import { TransactionBoundWitnessZod } from '../TransactionBoundWitness.ts'
9
-
10
- const txBoundWitness = (await buildRandomTransaction(ZERO_ADDRESS))[0]
11
-
12
- describe('TransactionBoundWitness', () => {
13
- it('should parse a TransactionBoundWitness', () => {
14
- const result = TransactionBoundWitnessZod.safeParse(txBoundWitness)
15
- expect(result.success).toEqual(true)
16
- expect(asTransactionBoundWitness(result.data)).toEqual(txBoundWitness)
17
- })
18
- })
@@ -1,53 +0,0 @@
1
- import {
2
- describe, expect, it,
3
- } from 'vitest'
4
-
5
- import { UnsignedHydratedTransactionZod } from '../HydratedTransaction.ts'
6
-
7
- const unsignedHydratedTransaction = [
8
- {
9
- $signatures: [],
10
- chain: '0000000000000000000000000000000000000000',
11
- fees: {
12
- base: 'e8d4a51000',
13
- gasLimit: '038d7ea4c68000',
14
- gasPrice: '02540be400',
15
- priority: '00',
16
- },
17
- nbf: 1,
18
- exp: 1001,
19
- from: 'ce544b3bab3131c8c68954873e281fda3ede8f3b',
20
- script: [
21
- 'elevate|e70f82c755ac75847f9d1c6b45d96099b343571d724e5383569724c85cc9d303',
22
- ],
23
- addresses: [],
24
- payload_hashes: [
25
- 'e70f82c755ac75847f9d1c6b45d96099b343571d724e5383569724c85cc9d303',
26
- 'd5ab1ca9dba010cfe626b8e6a75df0665005dfe4b85c16a30d4c9520cc021970',
27
- ],
28
- payload_schemas: [
29
- 'network.xyo.hash',
30
- 'network.xyo.id',
31
- ],
32
- previous_hashes: [],
33
- schema: 'network.xyo.boundwitness',
34
- },
35
- [
36
- {
37
- hash: 'd5ab1ca9dba010cfe626b8e6a75df0665005dfe4b85c16a30d4c9520cc021970',
38
- schema: 'network.xyo.hash',
39
- },
40
- {
41
- salt: 'Hello from Sample - 2025-08-08T17:47:51.106Z',
42
- schema: 'network.xyo.id',
43
- },
44
- ],
45
- ]
46
-
47
- describe('UnsignedHydratedTransaction', () => {
48
- it('should parse an UnsignedHydratedTransaction', () => {
49
- const result = UnsignedHydratedTransactionZod.safeParse(unsignedHydratedTransaction)
50
- expect(result.success).toBe(true)
51
- expect(result.data).toEqual(unsignedHydratedTransaction)
52
- })
53
- })