@xyo-network/chain-orchestration 1.19.13 → 1.19.15

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 (165) hide show
  1. package/dist/neutral/ChainInitializableParams.d.ts +1 -0
  2. package/dist/neutral/ChainInitializableParams.d.ts.map +1 -1
  3. package/dist/neutral/actor/ValidatorActor.d.ts +2 -2
  4. package/dist/neutral/actor/ValidatorActor.d.ts.map +1 -1
  5. package/dist/neutral/archivists/ChainFinalized/archivist.d.ts.map +1 -1
  6. package/dist/neutral/archivists/ChainFinalized/local.d.ts +2 -2
  7. package/dist/neutral/archivists/ChainFinalized/local.d.ts.map +1 -1
  8. package/dist/neutral/archivists/PendingBlocks/archivist.d.ts +2 -2
  9. package/dist/neutral/archivists/PendingBlocks/archivist.d.ts.map +1 -1
  10. package/dist/neutral/archivists/PendingBlocks/local.d.ts +2 -4
  11. package/dist/neutral/archivists/PendingBlocks/local.d.ts.map +1 -1
  12. package/dist/neutral/archivists/RejectedTransactions/archivist.d.ts +2 -2
  13. package/dist/neutral/archivists/RejectedTransactions/archivist.d.ts.map +1 -1
  14. package/dist/neutral/archivists/RejectedTransactions/local.d.ts +1 -2
  15. package/dist/neutral/archivists/RejectedTransactions/local.d.ts.map +1 -1
  16. package/dist/neutral/archivists/StakeIntentState/archivist.d.ts +2 -3
  17. package/dist/neutral/archivists/StakeIntentState/archivist.d.ts.map +1 -1
  18. package/dist/neutral/archivists/StakeIntentState/local.d.ts +2 -3
  19. package/dist/neutral/archivists/StakeIntentState/local.d.ts.map +1 -1
  20. package/dist/neutral/config/actors/Api.d.ts +890 -0
  21. package/dist/neutral/config/actors/Api.d.ts.map +1 -0
  22. package/dist/neutral/config/actors/Bridge.d.ts +1213 -0
  23. package/dist/neutral/config/actors/Bridge.d.ts.map +1 -0
  24. package/dist/neutral/config/actors/Mempool.d.ts +890 -0
  25. package/dist/neutral/config/actors/Mempool.d.ts.map +1 -0
  26. package/dist/neutral/config/actors/Producer.d.ts +962 -0
  27. package/dist/neutral/config/actors/Producer.d.ts.map +1 -0
  28. package/dist/neutral/config/actors/RewardRedemption.d.ts +878 -0
  29. package/dist/neutral/config/actors/RewardRedemption.d.ts.map +1 -0
  30. package/dist/neutral/config/actors/index.d.ts +7 -0
  31. package/dist/neutral/config/actors/index.d.ts.map +1 -0
  32. package/dist/neutral/config/index.d.ts +5 -0
  33. package/dist/neutral/config/index.d.ts.map +1 -0
  34. package/dist/neutral/config/locators/actors/apiLocatorFromConfig.d.ts +5 -0
  35. package/dist/neutral/config/locators/actors/apiLocatorFromConfig.d.ts.map +1 -0
  36. package/dist/neutral/config/locators/actors/bridgeLocatorFromConfig.d.ts +5 -0
  37. package/dist/neutral/config/locators/actors/bridgeLocatorFromConfig.d.ts.map +1 -0
  38. package/dist/neutral/config/locators/actors/index.d.ts +7 -0
  39. package/dist/neutral/config/locators/actors/index.d.ts.map +1 -0
  40. package/dist/neutral/config/locators/actors/mempoolLocatorFromConfig.d.ts +5 -0
  41. package/dist/neutral/config/locators/actors/mempoolLocatorFromConfig.d.ts.map +1 -0
  42. package/dist/neutral/config/locators/actors/producerLocatorFromConfig.d.ts +4 -0
  43. package/dist/neutral/config/locators/actors/producerLocatorFromConfig.d.ts.map +1 -0
  44. package/dist/neutral/config/locators/actors/rewardRedemptionLocatorFromConfig.d.ts +5 -0
  45. package/dist/neutral/config/locators/actors/rewardRedemptionLocatorFromConfig.d.ts.map +1 -0
  46. package/dist/neutral/config/locators/actors/validatorLocatorFromConfig.d.ts +4 -0
  47. package/dist/neutral/config/locators/actors/validatorLocatorFromConfig.d.ts.map +1 -0
  48. package/dist/neutral/config/locators/contextFromConfigWithoutLocator.d.ts +4 -0
  49. package/dist/neutral/config/locators/contextFromConfigWithoutLocator.d.ts.map +1 -0
  50. package/dist/neutral/config/locators/index.d.ts +8 -0
  51. package/dist/neutral/config/locators/index.d.ts.map +1 -0
  52. package/dist/neutral/config/locators/localLocatorFromConfig.d.ts +3 -0
  53. package/dist/neutral/config/locators/localLocatorFromConfig.d.ts.map +1 -0
  54. package/dist/neutral/config/locators/locatorsFromConfig.d.ts +3 -0
  55. package/dist/neutral/config/locators/locatorsFromConfig.d.ts.map +1 -0
  56. package/dist/neutral/config/locators/remoteLocatorFromConfig.d.ts +3 -0
  57. package/dist/neutral/config/locators/remoteLocatorFromConfig.d.ts.map +1 -0
  58. package/dist/neutral/config/locators/rootLocatorFromConfig.d.ts +3 -0
  59. package/dist/neutral/config/locators/rootLocatorFromConfig.d.ts.map +1 -0
  60. package/dist/neutral/config/locators/telemetryContextFromConfig.d.ts +3 -0
  61. package/dist/neutral/config/locators/telemetryContextFromConfig.d.ts.map +1 -0
  62. package/dist/neutral/config/mergeConfig.d.ts +67 -0
  63. package/dist/neutral/config/mergeConfig.d.ts.map +1 -0
  64. package/dist/neutral/config/tryParseConfig.d.ts +133 -0
  65. package/dist/neutral/config/tryParseConfig.d.ts.map +1 -0
  66. package/dist/neutral/evm/initChainId.d.ts +3 -3
  67. package/dist/neutral/evm/initChainId.d.ts.map +1 -1
  68. package/dist/neutral/evm/initEvmProvider.d.ts +3 -9
  69. package/dist/neutral/evm/initEvmProvider.d.ts.map +1 -1
  70. package/dist/neutral/evm/initInfuraProvider.d.ts +4 -4
  71. package/dist/neutral/evm/initInfuraProvider.d.ts.map +1 -1
  72. package/dist/neutral/evm/initJsonRpcProvider.d.ts +4 -4
  73. package/dist/neutral/evm/initJsonRpcProvider.d.ts.map +1 -1
  74. package/dist/neutral/health/initHealthEndpoints.d.ts +4 -8
  75. package/dist/neutral/health/initHealthEndpoints.d.ts.map +1 -1
  76. package/dist/neutral/index.d.ts +1 -0
  77. package/dist/neutral/index.d.ts.map +1 -1
  78. package/dist/neutral/index.mjs +1019 -343
  79. package/dist/neutral/index.mjs.map +1 -1
  80. package/dist/neutral/init/index.d.ts +2 -2
  81. package/dist/neutral/init/index.d.ts.map +1 -1
  82. package/dist/neutral/init/initActorAccount.d.ts +4 -0
  83. package/dist/neutral/init/initActorAccount.d.ts.map +1 -0
  84. package/dist/neutral/init/initActorSeedPhrase.d.ts +4 -0
  85. package/dist/neutral/init/initActorSeedPhrase.d.ts.map +1 -0
  86. package/dist/neutral/init/initBalanceSummaryMap.d.ts +2 -3
  87. package/dist/neutral/init/initBalanceSummaryMap.d.ts.map +1 -1
  88. package/dist/neutral/init/initBridgedModule.d.ts +4 -7
  89. package/dist/neutral/init/initBridgedModule.d.ts.map +1 -1
  90. package/dist/neutral/init/initEvmProvidersIfAvailable.d.ts.map +1 -1
  91. package/dist/neutral/init/initFinalizationArchivistIfNeeded.d.ts +2 -2
  92. package/dist/neutral/init/initFinalizationArchivistIfNeeded.d.ts.map +1 -1
  93. package/dist/neutral/init/initServerNode.d.ts +2 -9
  94. package/dist/neutral/init/initServerNode.d.ts.map +1 -1
  95. package/dist/neutral/init/initTransferSummaryMap.d.ts +2 -3
  96. package/dist/neutral/init/initTransferSummaryMap.d.ts.map +1 -1
  97. package/dist/neutral/init/initWallet.d.ts +2 -7
  98. package/dist/neutral/init/initWallet.d.ts.map +1 -1
  99. package/dist/neutral/manifest/getLocator.d.ts +2 -7
  100. package/dist/neutral/manifest/getLocator.d.ts.map +1 -1
  101. package/dist/neutral/manifest/loadNode.d.ts +2 -8
  102. package/dist/neutral/manifest/loadNode.d.ts.map +1 -1
  103. package/dist/neutral/orchestrator/Orchestrator.d.ts +4 -4
  104. package/dist/neutral/orchestrator/Orchestrator.d.ts.map +1 -1
  105. package/package.json +51 -31
  106. package/src/ChainInitializableParams.ts +1 -0
  107. package/src/actor/ValidatorActor.ts +3 -2
  108. package/src/archivists/ChainFinalized/archivist.ts +1 -1
  109. package/src/archivists/ChainFinalized/local.ts +2 -2
  110. package/src/archivists/PendingBlocks/archivist.ts +3 -3
  111. package/src/archivists/PendingBlocks/local.ts +2 -2
  112. package/src/archivists/RejectedTransactions/archivist.ts +5 -5
  113. package/src/archivists/RejectedTransactions/local.ts +1 -2
  114. package/src/archivists/StakeIntentState/archivist.ts +12 -15
  115. package/src/archivists/StakeIntentState/local.ts +2 -4
  116. package/src/config/actors/Api.ts +29 -0
  117. package/src/config/actors/Bridge.ts +133 -0
  118. package/src/config/actors/Mempool.ts +39 -0
  119. package/src/config/actors/Producer.ts +56 -0
  120. package/src/config/actors/RewardRedemption.ts +21 -0
  121. package/src/config/actors/index.ts +6 -0
  122. package/src/config/index.ts +4 -0
  123. package/src/config/locators/actors/apiLocatorFromConfig.ts +25 -0
  124. package/src/config/locators/actors/bridgeLocatorFromConfig.ts +71 -0
  125. package/src/config/locators/actors/index.ts +6 -0
  126. package/src/config/locators/actors/mempoolLocatorFromConfig.ts +21 -0
  127. package/src/config/locators/actors/producerLocatorFromConfig.ts +66 -0
  128. package/src/config/locators/actors/rewardRedemptionLocatorFromConfig.ts +21 -0
  129. package/src/config/locators/actors/validatorLocatorFromConfig.ts +15 -0
  130. package/src/config/locators/contextFromConfigWithoutLocator.ts +25 -0
  131. package/src/config/locators/index.ts +7 -0
  132. package/src/config/locators/localLocatorFromConfig.ts +56 -0
  133. package/src/config/locators/locatorsFromConfig.ts +67 -0
  134. package/src/config/locators/remoteLocatorFromConfig.ts +48 -0
  135. package/src/config/locators/rootLocatorFromConfig.ts +47 -0
  136. package/src/config/locators/telemetryContextFromConfig.ts +15 -0
  137. package/src/config/mergeConfig.ts +11 -0
  138. package/src/config/tryParseConfig.ts +36 -0
  139. package/src/evm/initChainId.ts +3 -3
  140. package/src/evm/initEvmProvider.ts +8 -9
  141. package/src/evm/initInfuraProvider.ts +9 -7
  142. package/src/evm/initJsonRpcProvider.ts +9 -7
  143. package/src/health/initHealthEndpoints.ts +15 -18
  144. package/src/index.ts +1 -0
  145. package/src/init/index.ts +2 -2
  146. package/src/init/initActorAccount.ts +28 -0
  147. package/src/init/{initSeedPhrase.ts → initActorSeedPhrase.ts} +10 -10
  148. package/src/init/initBalanceSummaryMap.ts +4 -4
  149. package/src/init/initBridgedModule.ts +6 -8
  150. package/src/init/initEvmProvidersIfAvailable.ts +6 -5
  151. package/src/init/initFinalizationArchivistIfNeeded.ts +8 -5
  152. package/src/init/initServerNode.ts +7 -16
  153. package/src/init/initTransferSummaryMap.ts +4 -4
  154. package/src/init/initWallet.ts +33 -35
  155. package/src/manifest/getLocator.ts +4 -10
  156. package/src/manifest/loadNode.ts +6 -15
  157. package/src/orchestrator/Orchestrator.ts +4 -6
  158. package/dist/neutral/ConfigContext.d.ts +0 -8
  159. package/dist/neutral/ConfigContext.d.ts.map +0 -1
  160. package/dist/neutral/init/initProducerAccount.d.ts +0 -6
  161. package/dist/neutral/init/initProducerAccount.d.ts.map +0 -1
  162. package/dist/neutral/init/initSeedPhrase.d.ts +0 -6
  163. package/dist/neutral/init/initSeedPhrase.d.ts.map +0 -1
  164. package/src/ConfigContext.ts +0 -9
  165. package/src/init/initProducerAccount.ts +0 -30
@@ -0,0 +1,133 @@
1
+ import {
2
+ AddressZod, HexZod, toAddress, toHex,
3
+ } from '@xylabs/sdk-js'
4
+ import {
5
+ zodAsFactory, zodIsFactory, zodToFactory,
6
+ } from '@xylabs/zod'
7
+ import type { ChainId } from '@xyo-network/xl1-sdk'
8
+ import {
9
+ AttoXL1ConvertFactor, BaseConfigContextZod, HostActorConfigZod, XL1,
10
+ } from '@xyo-network/xl1-sdk'
11
+ import { globalRegistry, z } from 'zod'
12
+
13
+ const DEFAULT_FIXED_FEE = toHex(XL1(1n) * AttoXL1ConvertFactor.xl1)
14
+ const DEFAULT_HARDHAT_BRIDGE_CONTRACT = toAddress('2279B7A0a67DB372996a5FaB50D91eAA73d2eBe6')
15
+ const DEFAULT_HARDHAT_CHAIN_ID: ChainId = toHex('7A69')
16
+ const DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY = toHex('0xac0974bec39a17e36ba4a6b4d238ff944bacb478cbed5efcae784d7bf4f2ff80')
17
+ const DEFAULT_HARDHAT_TOKEN_CONTRACT = toAddress('5FbDB2315678afecb367f032d93F642f64180aa3')
18
+ const DEFAULT_MAX_BRIDGE_AMOUNT = toHex(XL1(100_000n) * AttoXL1ConvertFactor.xl1)
19
+ const DEFAULT_MIN_BRIDGE_AMOUNT = toHex(XL1(10n) * AttoXL1ConvertFactor.xl1)
20
+
21
+ export const BasisPointsZod = z.coerce.number().int().nonnegative().max(10_000)
22
+ export type BasisPoints = z.infer<typeof BasisPointsZod>
23
+
24
+ export const BridgeConfigZod = HostActorConfigZod.extend({
25
+ escrowAddress: AddressZod.optional().register(globalRegistry, {
26
+ description: 'Address to which bridge escrow will be sent',
27
+ title: 'bridge.escrowAddress',
28
+ type: 'string',
29
+ }),
30
+ feesAddress: AddressZod.optional().register(globalRegistry, {
31
+ description: 'Address to which bridge fees will be sent',
32
+ title: 'bridge.feesAddress',
33
+ type: 'string',
34
+ }),
35
+ feeFixed: HexZod.default(DEFAULT_FIXED_FEE).register(globalRegistry, {
36
+ default: DEFAULT_FIXED_FEE,
37
+ description: 'Fixed fee (in AttoXL1) applied to bridge transfers',
38
+ title: 'bridge.feeFixed',
39
+ type: 'bigint',
40
+ }),
41
+ feeRateBasisPoints: BasisPointsZod.default(500).register(globalRegistry, {
42
+ default: 500,
43
+ description: 'Variable rate fee (in basis points where 1 bps = 0.01%) applied to bridge transfers',
44
+ title: 'bridge.feeRateBasisPoints',
45
+ type: 'number',
46
+ }),
47
+ maxBridgeAmount: HexZod.default(DEFAULT_MAX_BRIDGE_AMOUNT).register(globalRegistry, {
48
+ default: DEFAULT_MAX_BRIDGE_AMOUNT,
49
+ description: 'Maximum amount allowed for a bridge transfer',
50
+ title: 'bridge.maxBridgeAmount',
51
+ type: 'string',
52
+ }),
53
+ minBridgeAmount: HexZod.default(DEFAULT_MIN_BRIDGE_AMOUNT).register(globalRegistry, {
54
+ default: DEFAULT_MIN_BRIDGE_AMOUNT,
55
+ description: 'Minimum amount required for a bridge transfer',
56
+ title: 'bridge.minBridgeAmount',
57
+ type: 'string',
58
+ }),
59
+ redisHost: z.string().default('localhost').register(globalRegistry, {
60
+ default: 'localhost',
61
+ description: 'Host for the Bridge Redis instance',
62
+ title: 'bridge.redisHost',
63
+ type: 'string',
64
+ }),
65
+ redisPort: z.coerce.number().int().positive().default(6379).register(globalRegistry, {
66
+ default: 6379,
67
+ description: 'Port for the Bridge Redis instance',
68
+ title: 'bridge.redisPort',
69
+ type: 'number',
70
+ }),
71
+ remoteBridgeContractAddress: AddressZod.default(DEFAULT_HARDHAT_BRIDGE_CONTRACT).register(globalRegistry, {
72
+ default: DEFAULT_HARDHAT_BRIDGE_CONTRACT,
73
+ description: 'Hex representation of remote token address used for bridging',
74
+ title: 'bridge.remoteBridgeContractAddress',
75
+ type: 'string',
76
+ }),
77
+ remoteChainId: HexZod.default(DEFAULT_HARDHAT_CHAIN_ID).register(globalRegistry, {
78
+ default: DEFAULT_HARDHAT_CHAIN_ID,
79
+ description: 'Remote chain ID',
80
+ title: 'bridge.remoteChainId',
81
+ type: 'string',
82
+ }),
83
+ remoteTokenAddress: HexZod.default(DEFAULT_HARDHAT_TOKEN_CONTRACT).register(globalRegistry, {
84
+ default: DEFAULT_HARDHAT_TOKEN_CONTRACT,
85
+ description: 'Hex representation of remote token address used for bridging',
86
+ title: 'bridge.remoteTokenAddress',
87
+ type: 'string',
88
+ }),
89
+ remoteChainWalletPrivateKey: HexZod.default(DEFAULT_HARDHAT_REMOTE_CHAIN_WALLET_PRIVATE_KEY).register(globalRegistry, {
90
+ description: 'Private key for the wallet to use for the remote chain wallet',
91
+ title: 'bridge.remoteChainWalletPrivateKey',
92
+ type: 'string',
93
+ }),
94
+ xl1ChainId: HexZod.optional().register(globalRegistry, {
95
+ description: 'XL1 chain id used for bridging',
96
+ title: 'bridge.xl1ChainId',
97
+ type: 'string',
98
+ }),
99
+ xl1TokenAddress: HexZod.optional().register(globalRegistry, {
100
+ description: 'XL1 token address used for bridging',
101
+ title: 'bridge.xl1TokenAddress',
102
+ type: 'string',
103
+ }),
104
+ })
105
+
106
+ export type BridgeConfig = z.infer<typeof BridgeConfigZod>
107
+
108
+ export const BridgeSettingsZod = BridgeConfigZod.pick({
109
+ feeFixed: true,
110
+ feeRateBasisPoints: true,
111
+ feesAddress: true,
112
+ escrowAddress: true,
113
+ maxBridgeAmount: true,
114
+ minBridgeAmount: true,
115
+ remoteChainId: true,
116
+ remoteTokenAddress: true,
117
+ xl1TokenAddress: true,
118
+ xl1ChainId: true,
119
+ }).required()
120
+
121
+ export type BridgeSettings = z.infer<typeof BridgeSettingsZod>
122
+
123
+ export const isBridgeConfig = zodIsFactory(BridgeConfigZod)
124
+ export const asBridgeConfig = zodAsFactory(BridgeConfigZod, 'asBridgeConfig')
125
+ export const toBridgeConfig = zodToFactory(BridgeConfigZod, 'toBridgeConfig')
126
+
127
+ export const BridgeConfigContext = BaseConfigContextZod.extend({ config: BridgeConfigZod })
128
+
129
+ export type BridgeConfigContext = z.infer<typeof BridgeConfigContext>
130
+
131
+ export const isBridgeConfigContext = zodIsFactory(BridgeConfigContext)
132
+ export const asBridgeConfigContext = zodAsFactory(BridgeConfigContext, 'asBridgeConfigContext')
133
+ export const toBridgeConfigContext = zodToFactory(BridgeConfigContext, 'toBridgeConfigContext')
@@ -0,0 +1,39 @@
1
+ import {
2
+ zodAsFactory, zodIsFactory, zodToFactory,
3
+ } from '@xylabs/zod'
4
+ import { BaseConfigContextZod, HostActorConfigZod } from '@xyo-network/xl1-sdk'
5
+ import { globalRegistry, z } from 'zod'
6
+
7
+ export const MempoolConfigZod = HostActorConfigZod.extend({
8
+ enabled: z.union([z.string(), z.boolean()]).default('false').transform((val, ctx) => {
9
+ if (typeof val === 'boolean') return val
10
+ const normalized = val.toLowerCase().trim()
11
+ if (['true', '1', 'yes', 'on'].includes(normalized)) return true
12
+ if (['false', '0', 'no', 'off'].includes(normalized)) return false
13
+ ctx.addIssue({
14
+ code: 'invalid_type',
15
+ expected: 'boolean',
16
+ message: `Invalid boolean value: "${val}". Use true/false, 1/0, yes/no.`,
17
+ })
18
+ return z.NEVER
19
+ }).register(globalRegistry, {
20
+ default: 'false',
21
+ description: 'Enable the Mempool',
22
+ title: 'mempool.enabled',
23
+ type: 'boolean',
24
+ }),
25
+ })
26
+
27
+ export type MempoolConfig = z.infer<typeof MempoolConfigZod>
28
+
29
+ export const isMempoolConfig = zodIsFactory(MempoolConfigZod)
30
+ export const asMempoolConfig = zodAsFactory(MempoolConfigZod, 'asMempoolConfig')
31
+ export const toMempoolConfig = zodToFactory(MempoolConfigZod, 'toMempoolConfig')
32
+
33
+ export const MempoolConfigContext = BaseConfigContextZod.extend({ config: MempoolConfigZod })
34
+
35
+ export type MempoolConfigContext = z.infer<typeof MempoolConfigContext>
36
+
37
+ export const isMempoolConfigContext = zodIsFactory(MempoolConfigContext)
38
+ export const asMempoolConfigContext = zodAsFactory(MempoolConfigContext, 'asMempoolConfigContext')
39
+ export const toMempoolConfigContext = zodToFactory(MempoolConfigContext, 'toMempoolConfigContext')
@@ -0,0 +1,56 @@
1
+ import { AddressZod, asAddress } from '@xylabs/sdk-js'
2
+ import {
3
+ zodAsFactory, zodIsFactory, zodToFactory,
4
+ } from '@xylabs/zod'
5
+ import { ActorConfigZod, BaseConfigContextZod } from '@xyo-network/xl1-sdk'
6
+ import { globalRegistry, z } from 'zod'
7
+
8
+ export const ProducerConfigZod = ActorConfigZod.extend(z.object({
9
+ allowlist: z.preprocess((val) => {
10
+ if (typeof val === 'string') {
11
+ return val.split(',').map(s => asAddress(s.trim()))
12
+ }
13
+ return val
14
+ }, z.array(AddressZod).optional().register(globalRegistry, {
15
+ description: 'List of allowed producer addresses, if undefined anyone can participate',
16
+ title: 'allowlist',
17
+ type: 'array',
18
+ })),
19
+
20
+ disableIntentRedeclaration: z.boolean().optional().register(globalRegistry, {
21
+ description: 'Should the producer skip redeclaring their intent to continue producing blocks',
22
+ title: 'producer.disableIntentRedeclaration',
23
+ type: 'boolean',
24
+ }),
25
+ heartbeatInterval: z.coerce.number().default(3_600_000).register(globalRegistry, {
26
+ description: 'The number of milliseconds between heartbeats if no blocks are produced',
27
+ title: 'producer.heartbeatInterval',
28
+ type: 'number',
29
+ }),
30
+ // TODO: BigInt schema
31
+ minStake: z.coerce.number().default(1).register(globalRegistry, {
32
+ description: 'Minimum stake required to be a Producer',
33
+ title: 'producer.minStake',
34
+ type: 'number',
35
+ }),
36
+ // TODO: Address schema
37
+ rewardAddress: z.string().optional().register(globalRegistry, {
38
+ description: 'Address to receive block rewards',
39
+ title: 'producer.rewardAddress',
40
+ type: 'string',
41
+ }),
42
+ }).shape)
43
+
44
+ export type ProducerConfig = z.infer<typeof ProducerConfigZod>
45
+
46
+ export const isProducerConfig = zodIsFactory(ProducerConfigZod)
47
+ export const asProducerConfig = zodAsFactory(ProducerConfigZod, 'asProducerConfig')
48
+ export const toProducerConfig = zodToFactory(ProducerConfigZod, 'toProducerConfig')
49
+
50
+ export const ProducerConfigContext = BaseConfigContextZod.extend({ config: ProducerConfigZod })
51
+
52
+ export type ProducerConfigContext = z.infer<typeof ProducerConfigContext>
53
+
54
+ export const isProducerConfigContext = zodIsFactory(ProducerConfigContext)
55
+ export const asProducerConfigContext = zodAsFactory(ProducerConfigContext, 'asProducerConfigContext')
56
+ export const toProducerConfigContext = zodToFactory(ProducerConfigContext, 'toProducerConfigContext')
@@ -0,0 +1,21 @@
1
+ import {
2
+ zodAsFactory, zodIsFactory, zodToFactory,
3
+ } from '@xylabs/zod'
4
+ import { BaseConfigContextZod, HostActorConfigZod } from '@xyo-network/xl1-sdk'
5
+ import type { z } from 'zod'
6
+
7
+ export const RewardRedemptionConfigZod = HostActorConfigZod.extend({})
8
+
9
+ export type RewardRedemptionConfig = z.infer<typeof RewardRedemptionConfigZod>
10
+
11
+ export const isRewardRedemptionConfig = zodIsFactory(RewardRedemptionConfigZod)
12
+ export const asRewardRedemptionConfig = zodAsFactory(RewardRedemptionConfigZod, 'asRewardRedemptionConfig')
13
+ export const toRewardRedemptionConfig = zodToFactory(RewardRedemptionConfigZod, 'toRewardRedemptionConfig')
14
+
15
+ export const RewardRedemptionConfigContext = BaseConfigContextZod.extend({ config: RewardRedemptionConfigZod })
16
+
17
+ export type RewardRedemptionConfigContext = z.infer<typeof RewardRedemptionConfigContext>
18
+
19
+ export const isRewardRedemptionConfigContext = zodIsFactory(RewardRedemptionConfigContext)
20
+ export const asRewardRedemptionConfigContext = zodAsFactory(RewardRedemptionConfigContext, 'asRewardRedemptionConfigContext')
21
+ export const toRewardRedemptionConfigContext = zodToFactory(RewardRedemptionConfigContext, 'toRewardRedemptionConfigContext')
@@ -0,0 +1,6 @@
1
+ export * from './Api.ts'
2
+ export * from './Api.ts'
3
+ export * from './Bridge.ts'
4
+ export * from './Mempool.ts'
5
+ export * from './Producer.ts'
6
+ export * from './RewardRedemption.ts'
@@ -0,0 +1,4 @@
1
+ export * from './actors/index.ts'
2
+ export * from './locators/index.ts'
3
+ export * from './mergeConfig.ts'
4
+ export * from './tryParseConfig.ts'
@@ -0,0 +1,25 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'
3
+ import {
4
+ ProviderFactoryLocator,
5
+ SimpleXyoConnectionRunner,
6
+ SimpleXyoGateway,
7
+ SimpleXyoRunner,
8
+ } from '@xyo-network/xl1-sdk'
9
+
10
+ import type { ApiConfigContext } from '../../actors/index.ts'
11
+
12
+ export function apiLocatorFromConfig(
13
+ context: ApiConfigContext,
14
+ parent?: ProviderFactoryLocatorInstance,
15
+ ): Promisable<ProviderFactoryLocatorInstance> {
16
+ const locator = new ProviderFactoryLocator({ ...context, locator: parent })
17
+
18
+ locator.registerMany([
19
+ SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),
20
+ SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),
21
+ SimpleXyoGateway.factory<SimpleXyoGateway>(SimpleXyoGateway.dependencies, {}),
22
+ ])
23
+ locator.freeze()
24
+ return locator
25
+ }
@@ -0,0 +1,71 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import { isDefined, isString } from '@xylabs/sdk-js'
3
+ import { HDWallet } from '@xyo-network/wallet'
4
+ import type {
5
+ ProviderFactoryLocatorInstance, RpcSchemaMap, TransportFactory,
6
+ } from '@xyo-network/xl1-sdk'
7
+ import {
8
+ AccountBalanceViewerRpcSchemas,
9
+ ADDRESS_INDEX,
10
+ BlockViewerRpcSchemas,
11
+ FinalizationViewerRpcSchemas,
12
+ generateXyoBaseWalletFromPhrase,
13
+ HttpRpcTransport,
14
+ JsonRpcAccountBalanceViewer,
15
+ JsonRpcBlockViewer,
16
+ JsonRpcFinalizationViewer,
17
+ JsonRpcMempoolRunner,
18
+ JsonRpcMempoolViewer,
19
+ MempoolRunnerRpcSchemas,
20
+ MempoolViewerRpcSchemas,
21
+ ProviderFactoryLocator,
22
+ SimpleXyoConnectionRunner,
23
+ SimpleXyoGatewayRunner,
24
+ SimpleXyoRunner,
25
+ SimpleXyoSigner,
26
+ } from '@xyo-network/xl1-sdk'
27
+
28
+ import type { BridgeConfigContext } from '../../actors/index.ts'
29
+
30
+ export async function bridgeLocatorFromConfig(
31
+ context: BridgeConfigContext,
32
+ parent?: ProviderFactoryLocatorInstance,
33
+ ): Promise<Promise<Promisable<ProviderFactoryLocatorInstance>>> {
34
+ const locator = new ProviderFactoryLocator({ ...context, locator: parent })
35
+
36
+ const { config } = context
37
+
38
+ const { mnemonic } = config
39
+ const walletPhrase = isDefined(mnemonic) ? mnemonic : HDWallet.generateMnemonic()
40
+ const wallet = await generateXyoBaseWalletFromPhrase(walletPhrase)
41
+ const signerAccount = await wallet.derivePath(ADDRESS_INDEX.XYO)
42
+
43
+ const remoteUrl = config.remote.rpc?.url
44
+
45
+ if (isString(remoteUrl)) {
46
+ const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(remoteUrl, schemas)
47
+
48
+ locator.registerMany([
49
+ JsonRpcMempoolViewer.factory<JsonRpcMempoolViewer>(JsonRpcMempoolViewer.dependencies, { transport: await transportFactory(MempoolViewerRpcSchemas) }),
50
+ JsonRpcMempoolRunner.factory<JsonRpcMempoolRunner>(JsonRpcMempoolRunner.dependencies, { transport: await transportFactory(MempoolRunnerRpcSchemas) }),
51
+ JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(
52
+ JsonRpcAccountBalanceViewer.dependencies,
53
+ { transport: await transportFactory(AccountBalanceViewerRpcSchemas) },
54
+ ),
55
+ JsonRpcFinalizationViewer.factory<JsonRpcFinalizationViewer>(
56
+ JsonRpcFinalizationViewer.dependencies,
57
+ { transport: await transportFactory(FinalizationViewerRpcSchemas) },
58
+ ),
59
+ JsonRpcBlockViewer.factory<JsonRpcBlockViewer>(JsonRpcBlockViewer.dependencies, { transport: await transportFactory(BlockViewerRpcSchemas) }),
60
+ ])
61
+ }
62
+
63
+ locator.registerMany([
64
+ SimpleXyoSigner.factory<SimpleXyoSigner>(SimpleXyoSigner.dependencies, { account: signerAccount }),
65
+ SimpleXyoRunner.factory<SimpleXyoRunner>(SimpleXyoRunner.dependencies, {}),
66
+ SimpleXyoConnectionRunner.factory<SimpleXyoConnectionRunner>(SimpleXyoConnectionRunner.dependencies, {}),
67
+ SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}),
68
+ ])
69
+ locator.freeze()
70
+ return locator
71
+ }
@@ -0,0 +1,6 @@
1
+ export * from './apiLocatorFromConfig.ts'
2
+ export * from './bridgeLocatorFromConfig.ts'
3
+ export * from './mempoolLocatorFromConfig.ts'
4
+ export * from './producerLocatorFromConfig.ts'
5
+ export * from './rewardRedemptionLocatorFromConfig.ts'
6
+ export * from './validatorLocatorFromConfig.ts'
@@ -0,0 +1,21 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'
3
+ import {
4
+ ProviderFactoryLocator,
5
+ SimpleBlockValidationViewer,
6
+ } from '@xyo-network/xl1-sdk'
7
+
8
+ import type { MempoolConfigContext } from '../../actors/index.ts'
9
+
10
+ export function mempoolLocatorFromConfig(
11
+ context: MempoolConfigContext,
12
+ parent?: ProviderFactoryLocatorInstance,
13
+ ): Promisable<ProviderFactoryLocatorInstance> {
14
+ const locator = new ProviderFactoryLocator({ ...context, locator: parent })
15
+
16
+ locator.registerMany([
17
+ SimpleBlockValidationViewer.factory<SimpleBlockValidationViewer>(SimpleBlockValidationViewer.dependencies, {}),
18
+ ])
19
+ locator.freeze()
20
+ return locator
21
+ }
@@ -0,0 +1,66 @@
1
+ import { asAddress, isString } from '@xylabs/sdk-js'
2
+ import { SimpleBlockRunner } from '@xyo-network/chain-services'
3
+ import type {
4
+ ProviderFactoryLocatorInstance, RpcSchemaMap, TransportFactory,
5
+ } from '@xyo-network/xl1-sdk'
6
+ import {
7
+ AccountBalanceViewerRpcSchemas,
8
+ BlockViewerRpcSchemas,
9
+ FinalizationViewerRpcSchemas,
10
+ HttpRpcTransport,
11
+ JsonRpcAccountBalanceViewer,
12
+ JsonRpcBlockViewer,
13
+ JsonRpcFinalizationViewer,
14
+ JsonRpcMempoolRunner,
15
+ JsonRpcMempoolViewer,
16
+ MempoolRunnerRpcSchemas,
17
+ MempoolViewerRpcSchemas,
18
+ ProviderFactoryLocator,
19
+ SimpleBlockRewardViewer,
20
+ } from '@xyo-network/xl1-sdk'
21
+
22
+ import { initActorAccount } from '../../../init/index.ts'
23
+ import type { ProducerConfigContext } from '../../actors/index.ts'
24
+
25
+ export async function producerLocatorFromConfig(
26
+ context: ProducerConfigContext,
27
+ parent?: ProviderFactoryLocatorInstance,
28
+ ): Promise<ProviderFactoryLocatorInstance> {
29
+ const { logger, config } = context
30
+ const account = await initActorAccount(context)
31
+ const locator = new ProviderFactoryLocator({ ...context, locator: parent })
32
+ const rewardAddress = asAddress(config.rewardAddress ?? account.address, true)
33
+ logger?.info(`Using reward address ${rewardAddress}`)
34
+ if (rewardAddress === account.address) {
35
+ logger?.warn(`Using producer account address as reward address: ${account.address}`)
36
+ }
37
+
38
+ const remoteUrl = config.remote.rpc?.url
39
+
40
+ if (isString(remoteUrl)) {
41
+ const transportFactory: TransportFactory = (schemas: RpcSchemaMap) => new HttpRpcTransport(remoteUrl, schemas)
42
+
43
+ locator.registerMany([
44
+ JsonRpcMempoolViewer.factory<JsonRpcMempoolViewer>(JsonRpcMempoolViewer.dependencies, { transport: await transportFactory(MempoolViewerRpcSchemas) }),
45
+ JsonRpcMempoolRunner.factory<JsonRpcMempoolRunner>(JsonRpcMempoolRunner.dependencies, { transport: await transportFactory(MempoolRunnerRpcSchemas) }),
46
+ JsonRpcAccountBalanceViewer.factory<JsonRpcAccountBalanceViewer>(
47
+ JsonRpcAccountBalanceViewer.dependencies,
48
+ { transport: await transportFactory(AccountBalanceViewerRpcSchemas) },
49
+ ),
50
+ JsonRpcFinalizationViewer.factory<JsonRpcFinalizationViewer>(
51
+ JsonRpcFinalizationViewer.dependencies,
52
+ { transport: await transportFactory(FinalizationViewerRpcSchemas) },
53
+ ),
54
+ JsonRpcBlockViewer.factory<JsonRpcBlockViewer>(JsonRpcBlockViewer.dependencies, { transport: await transportFactory(BlockViewerRpcSchemas) }),
55
+ ])
56
+ }
57
+
58
+ locator.registerMany([
59
+ SimpleBlockRewardViewer.factory<SimpleBlockRewardViewer>(SimpleBlockRewardViewer.dependencies, {}),
60
+ SimpleBlockRunner.factory<SimpleBlockRunner>(
61
+ SimpleBlockRunner.dependencies,
62
+ { account, rewardAddress },
63
+ )])
64
+ locator.freeze()
65
+ return locator
66
+ }
@@ -0,0 +1,21 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import type { ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'
3
+ import {
4
+ ProviderFactoryLocator,
5
+ SimpleXyoGatewayRunner,
6
+ } from '@xyo-network/xl1-sdk'
7
+
8
+ import type { RewardRedemptionConfigContext } from '../../actors/index.ts'
9
+
10
+ export function rewardRedemptionLocatorFromConfig(
11
+ context: RewardRedemptionConfigContext,
12
+ parent?: ProviderFactoryLocatorInstance,
13
+ ): Promisable<ProviderFactoryLocatorInstance> {
14
+ const locator = new ProviderFactoryLocator({ ...context, locator: parent })
15
+
16
+ locator.registerMany([
17
+ SimpleXyoGatewayRunner.factory<SimpleXyoGatewayRunner>(SimpleXyoGatewayRunner.dependencies, {}),
18
+ ])
19
+ locator.freeze()
20
+ return locator
21
+ }
@@ -0,0 +1,15 @@
1
+ import type { Promisable } from '@xylabs/sdk-js'
2
+ import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'
3
+ import { ProviderFactoryLocator } from '@xyo-network/xl1-sdk'
4
+
5
+ export function validatorLocatorFromConfig(
6
+ context: ActorConfigContext,
7
+ parent?: ProviderFactoryLocatorInstance,
8
+ ): Promisable<ProviderFactoryLocatorInstance> {
9
+ const locator = new ProviderFactoryLocator({ ...context, locator: parent })
10
+
11
+ locator.registerMany([
12
+ ])
13
+ locator.freeze()
14
+ return locator
15
+ }
@@ -0,0 +1,25 @@
1
+ import type { Logger } from '@xylabs/sdk-js'
2
+ import type { Config, CreatableProviderContext } from '@xyo-network/xl1-sdk'
3
+
4
+ import { initStatusReporter } from '../../init/index.ts'
5
+ import { telemetryContextFromConfig } from './telemetryContextFromConfig.ts'
6
+
7
+ export async function contextFromConfigWithoutLocator(
8
+ config: Config,
9
+ logger: Logger,
10
+ serviceName: string,
11
+ serviceVersion: string,
12
+ ): Promise<Omit<CreatableProviderContext, 'locator'>> {
13
+ const singletons = {}
14
+ const caches = {}
15
+ const telemetryConfig = await telemetryContextFromConfig(config, serviceName, serviceVersion)
16
+ const statusReporter = initStatusReporter({ logger })
17
+ return {
18
+ ...telemetryConfig,
19
+ config,
20
+ singletons,
21
+ caches,
22
+ logger,
23
+ statusReporter,
24
+ }
25
+ }
@@ -0,0 +1,7 @@
1
+ export * from './actors/index.ts'
2
+ export * from './contextFromConfigWithoutLocator.ts'
3
+ export * from './localLocatorFromConfig.ts'
4
+ export * from './locatorsFromConfig.ts'
5
+ export * from './remoteLocatorFromConfig.ts'
6
+ export * from './rootLocatorFromConfig.ts'
7
+ export * from './telemetryContextFromConfig.ts'
@@ -0,0 +1,56 @@
1
+ import { assertEx } from '@xylabs/sdk-js'
2
+ import type { ActorConfigContext, ProviderFactoryLocatorInstance } from '@xyo-network/xl1-sdk'
3
+ import {
4
+ ProviderFactoryLocator,
5
+ SimpleAccountBalanceViewer,
6
+ SimpleBlockViewer,
7
+ SimpleFinalizationRunner,
8
+ SimpleFinalizationViewer,
9
+ SimpleMempoolRunner,
10
+ SimpleMempoolViewer,
11
+ SimpleWindowedBlockViewer,
12
+ SimpleXyoConnectionViewer,
13
+ SimpleXyoViewer,
14
+ } from '@xyo-network/xl1-sdk'
15
+
16
+ import {
17
+ initActorWallet, initBalanceSummaryMap, initFinalizationArchivistIfNeeded,
18
+ initServerNode, initTransferSummaryMap,
19
+ } from '../../init/index.ts'
20
+
21
+ export async function localLocatorFromConfig(
22
+ context: ActorConfigContext,
23
+ parent?: ProviderFactoryLocatorInstance,
24
+ ): Promise<ProviderFactoryLocatorInstance> {
25
+ const balancesSummaryMap = assertEx(await initBalanceSummaryMap(context), () => 'Balance Summary Map not initialized')
26
+ const transfersSummaryMap = assertEx(await initTransferSummaryMap(context), () => 'Transfer Summary Map not initialized')
27
+
28
+ // TODO: this should not be an api wallet, but a server wallet
29
+ const wallet = await initActorWallet(context)
30
+
31
+ const {
32
+ writableChainArchivist, readonlyChainArchivist, pendingTransactionsArchivist, pendingBlocksArchivist,
33
+ } = await initServerNode(
34
+ context,
35
+ wallet,
36
+ )
37
+
38
+ await initFinalizationArchivistIfNeeded(writableChainArchivist, context.config, wallet)
39
+
40
+ const locator = new ProviderFactoryLocator({ ...context, locator: parent })
41
+ locator.registerMany([
42
+ SimpleMempoolViewer.factory<SimpleMempoolViewer>(SimpleMempoolViewer.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),
43
+ SimpleMempoolRunner.factory<SimpleMempoolRunner>(SimpleMempoolRunner.dependencies, { pendingTransactionsArchivist, pendingBlocksArchivist }),
44
+ SimpleAccountBalanceViewer.factory<SimpleAccountBalanceViewer>(SimpleAccountBalanceViewer.dependencies, { balancesSummaryMap, transfersSummaryMap }),
45
+ SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(SimpleFinalizationViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),
46
+ SimpleBlockViewer.factory<SimpleBlockViewer>(SimpleBlockViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),
47
+ SimpleWindowedBlockViewer.factory<SimpleWindowedBlockViewer>(SimpleWindowedBlockViewer.dependencies, { maxWindowSize: 10_000, syncInterval: 10_000 }),
48
+ SimpleXyoConnectionViewer.factory<SimpleXyoConnectionViewer>(SimpleXyoConnectionViewer.dependencies, {}),
49
+ SimpleXyoViewer.factory<SimpleXyoViewer>(SimpleXyoViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),
50
+ SimpleFinalizationViewer.factory<SimpleFinalizationViewer>(SimpleFinalizationViewer.dependencies, { finalizedArchivist: readonlyChainArchivist }),
51
+ SimpleFinalizationRunner.factory<SimpleFinalizationRunner>(SimpleFinalizationRunner.dependencies, { finalizedArchivist: writableChainArchivist }),
52
+
53
+ ])
54
+ locator.freeze()
55
+ return locator
56
+ }
@@ -0,0 +1,67 @@
1
+ import { deepMerge } from '@xylabs/sdk-js'
2
+ import {
3
+ ActorConfigZod,
4
+ type CachingContext,
5
+ type Config, type ProviderFactoryLocatorInstance,
6
+ } from '@xyo-network/xl1-sdk'
7
+
8
+ import {
9
+ ApiConfigZod, BridgeConfigZod,
10
+ MempoolConfigZod, ProducerConfigZod, RewardRedemptionConfigZod,
11
+ } from '../actors/index.ts'
12
+ import {
13
+ apiLocatorFromConfig, bridgeLocatorFromConfig, mempoolLocatorFromConfig,
14
+ producerLocatorFromConfig, rewardRedemptionLocatorFromConfig, validatorLocatorFromConfig,
15
+ } from './actors/index.ts'
16
+ import { rootLocatorFromConfig } from './rootLocatorFromConfig.ts'
17
+
18
+ export async function locatorsFromConfig(
19
+ context: CachingContext,
20
+ { actors, ...config }: Config,
21
+ ): Promise<Record<string, ProviderFactoryLocatorInstance>> {
22
+ const result: Record<string, ProviderFactoryLocatorInstance> = { _root: await rootLocatorFromConfig({ ...context, config: { ...config, name: '_root' } }) }
23
+ for (const actorConfig of actors) {
24
+ switch (actorConfig.name) {
25
+ case 'producer': {
26
+ result[actorConfig.name] = await producerLocatorFromConfig(
27
+ { ...context, config: ProducerConfigZod.parse(deepMerge(config, actorConfig)) },
28
+ result._root,
29
+ )
30
+ break
31
+ }
32
+ case 'api': {
33
+ result[actorConfig.name] = await apiLocatorFromConfig({
34
+ ...context,
35
+ config: ApiConfigZod.parse(deepMerge(config, actorConfig)),
36
+ }, result._root)
37
+
38
+ break
39
+ }
40
+ case 'mempool': {
41
+ result[actorConfig.name] = await mempoolLocatorFromConfig({ ...context, config: MempoolConfigZod.parse(deepMerge(config, actorConfig)) }, result._root)
42
+ break
43
+ }
44
+ case 'validator': {
45
+ result[actorConfig.name] = await validatorLocatorFromConfig({ ...context, config: ActorConfigZod.parse(deepMerge(config, actorConfig)) }, result._root)
46
+ break
47
+ }
48
+ case 'bridge': {
49
+ result[actorConfig.name] = await bridgeLocatorFromConfig({ ...context, config: BridgeConfigZod.parse(deepMerge(config, actorConfig)) }, result._root)
50
+
51
+ break
52
+ }
53
+ case 'rewardRedemption': {
54
+ result[actorConfig.name] = await rewardRedemptionLocatorFromConfig(
55
+ {
56
+ ...context,
57
+ config: RewardRedemptionConfigZod.parse(deepMerge(config, actorConfig)),
58
+ },
59
+ result._root,
60
+ )
61
+ break
62
+ }
63
+ // No default
64
+ }
65
+ }
66
+ return result
67
+ }