moonwall 1.0.0-dev.0

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 (301) hide show
  1. package/LICENSE +681 -0
  2. package/README.md +54 -0
  3. package/config_schema.json +811 -0
  4. package/dist/api/constants/accounts.d.ts +36 -0
  5. package/dist/api/constants/accounts.d.ts.map +1 -0
  6. package/dist/api/constants/accounts.js +67 -0
  7. package/dist/api/constants/chain.d.ts +134 -0
  8. package/dist/api/constants/chain.d.ts.map +1 -0
  9. package/dist/api/constants/chain.js +149 -0
  10. package/dist/api/constants/index.d.ts +4 -0
  11. package/dist/api/constants/index.d.ts.map +1 -0
  12. package/dist/api/constants/index.js +3 -0
  13. package/dist/api/constants/smartContract.d.ts +29 -0
  14. package/dist/api/constants/smartContract.d.ts.map +1 -0
  15. package/dist/api/constants/smartContract.js +118 -0
  16. package/dist/api/testing/blocks.d.ts +59 -0
  17. package/dist/api/testing/blocks.d.ts.map +1 -0
  18. package/dist/api/testing/blocks.js +147 -0
  19. package/dist/api/testing/contracts.d.ts +5 -0
  20. package/dist/api/testing/contracts.d.ts.map +1 -0
  21. package/dist/api/testing/contracts.js +32 -0
  22. package/dist/api/testing/ethers.d.ts +3 -0
  23. package/dist/api/testing/ethers.d.ts.map +1 -0
  24. package/dist/api/testing/ethers.js +38 -0
  25. package/dist/api/testing/events.d.ts +12 -0
  26. package/dist/api/testing/events.d.ts.map +1 -0
  27. package/dist/api/testing/events.js +23 -0
  28. package/dist/api/testing/extrinsics.d.ts +5 -0
  29. package/dist/api/testing/extrinsics.d.ts.map +1 -0
  30. package/dist/api/testing/extrinsics.js +10 -0
  31. package/dist/api/testing/index.d.ts +9 -0
  32. package/dist/api/testing/index.d.ts.map +1 -0
  33. package/dist/api/testing/index.js +8 -0
  34. package/dist/api/testing/jumping.d.ts +8 -0
  35. package/dist/api/testing/jumping.d.ts.map +1 -0
  36. package/dist/api/testing/jumping.js +78 -0
  37. package/dist/api/testing/providers.d.ts +18 -0
  38. package/dist/api/testing/providers.d.ts.map +1 -0
  39. package/dist/api/testing/providers.js +34 -0
  40. package/dist/api/testing/viem.d.ts +139 -0
  41. package/dist/api/testing/viem.d.ts.map +1 -0
  42. package/dist/api/testing/viem.js +247 -0
  43. package/dist/api/types/config.d.ts +609 -0
  44. package/dist/api/types/config.d.ts.map +1 -0
  45. package/dist/api/types/config.js +1 -0
  46. package/dist/api/types/context.d.ts +125 -0
  47. package/dist/api/types/context.d.ts.map +1 -0
  48. package/dist/api/types/context.js +1 -0
  49. package/dist/api/types/contracts.d.ts +66 -0
  50. package/dist/api/types/contracts.d.ts.map +1 -0
  51. package/dist/api/types/contracts.js +1 -0
  52. package/dist/api/types/eth.d.ts +3 -0
  53. package/dist/api/types/eth.d.ts.map +1 -0
  54. package/dist/api/types/eth.js +1 -0
  55. package/dist/api/types/foundations.d.ts +11 -0
  56. package/dist/api/types/foundations.d.ts.map +1 -0
  57. package/dist/api/types/foundations.js +1 -0
  58. package/dist/api/types/helpers.d.ts +7 -0
  59. package/dist/api/types/helpers.d.ts.map +1 -0
  60. package/dist/api/types/helpers.js +1 -0
  61. package/dist/api/types/index.d.ts +8 -0
  62. package/dist/api/types/index.d.ts.map +1 -0
  63. package/dist/api/types/index.js +7 -0
  64. package/dist/api/types/runner.d.ts +490 -0
  65. package/dist/api/types/runner.d.ts.map +1 -0
  66. package/dist/api/types/runner.js +1 -0
  67. package/dist/cli/cmds/components/LogViewer.d.ts +17 -0
  68. package/dist/cli/cmds/components/LogViewer.d.ts.map +1 -0
  69. package/dist/cli/cmds/components/LogViewer.js +171 -0
  70. package/dist/cli/cmds/entrypoint.d.ts +6 -0
  71. package/dist/cli/cmds/entrypoint.d.ts.map +1 -0
  72. package/dist/cli/cmds/entrypoint.js +192 -0
  73. package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts +2 -0
  74. package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.d.ts.map +1 -0
  75. package/dist/cli/cmds/interactiveCmds/chopsticksIntCmds.js +117 -0
  76. package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts +2 -0
  77. package/dist/cli/cmds/interactiveCmds/devIntCmds.d.ts.map +1 -0
  78. package/dist/cli/cmds/interactiveCmds/devIntCmds.js +103 -0
  79. package/dist/cli/cmds/interactiveCmds/index.d.ts +4 -0
  80. package/dist/cli/cmds/interactiveCmds/index.d.ts.map +1 -0
  81. package/dist/cli/cmds/interactiveCmds/index.js +3 -0
  82. package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts +2 -0
  83. package/dist/cli/cmds/interactiveCmds/zombieIntCmds.d.ts.map +1 -0
  84. package/dist/cli/cmds/interactiveCmds/zombieIntCmds.js +32 -0
  85. package/dist/cli/cmds/main.d.ts +2 -0
  86. package/dist/cli/cmds/main.d.ts.map +1 -0
  87. package/dist/cli/cmds/main.js +336 -0
  88. package/dist/cli/cmds/runNetwork.d.ts +3 -0
  89. package/dist/cli/cmds/runNetwork.d.ts.map +1 -0
  90. package/dist/cli/cmds/runNetwork.js +292 -0
  91. package/dist/cli/cmds/runTests.d.ts +12 -0
  92. package/dist/cli/cmds/runTests.d.ts.map +1 -0
  93. package/dist/cli/cmds/runTests.js +257 -0
  94. package/dist/cli/internal/cmdFunctions/downloader.d.ts +4 -0
  95. package/dist/cli/internal/cmdFunctions/downloader.d.ts.map +1 -0
  96. package/dist/cli/internal/cmdFunctions/downloader.js +49 -0
  97. package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts +10 -0
  98. package/dist/cli/internal/cmdFunctions/fetchArtifact.d.ts.map +1 -0
  99. package/dist/cli/internal/cmdFunctions/fetchArtifact.js +145 -0
  100. package/dist/cli/internal/cmdFunctions/index.d.ts +5 -0
  101. package/dist/cli/internal/cmdFunctions/index.d.ts.map +1 -0
  102. package/dist/cli/internal/cmdFunctions/index.js +4 -0
  103. package/dist/cli/internal/cmdFunctions/initialisation.d.ts +20 -0
  104. package/dist/cli/internal/cmdFunctions/initialisation.d.ts.map +1 -0
  105. package/dist/cli/internal/cmdFunctions/initialisation.js +150 -0
  106. package/dist/cli/internal/cmdFunctions/tempLogs.d.ts +3 -0
  107. package/dist/cli/internal/cmdFunctions/tempLogs.d.ts.map +1 -0
  108. package/dist/cli/internal/cmdFunctions/tempLogs.js +37 -0
  109. package/dist/cli/internal/commandParsers.d.ts +59 -0
  110. package/dist/cli/internal/commandParsers.d.ts.map +1 -0
  111. package/dist/cli/internal/commandParsers.js +305 -0
  112. package/dist/cli/internal/deriveTestIds.d.ts +8 -0
  113. package/dist/cli/internal/deriveTestIds.d.ts.map +1 -0
  114. package/dist/cli/internal/deriveTestIds.js +123 -0
  115. package/dist/cli/internal/effect/index.d.ts +6 -0
  116. package/dist/cli/internal/effect/index.d.ts.map +1 -0
  117. package/dist/cli/internal/effect/index.js +5 -0
  118. package/dist/cli/internal/fileCheckers.d.ts +11 -0
  119. package/dist/cli/internal/fileCheckers.d.ts.map +1 -0
  120. package/dist/cli/internal/fileCheckers.js +165 -0
  121. package/dist/cli/internal/foundations/index.d.ts +4 -0
  122. package/dist/cli/internal/foundations/index.d.ts.map +1 -0
  123. package/dist/cli/internal/foundations/index.js +4 -0
  124. package/dist/cli/internal/index.d.ts +12 -0
  125. package/dist/cli/internal/index.d.ts.map +1 -0
  126. package/dist/cli/internal/index.js +11 -0
  127. package/dist/cli/internal/launcherCommon.d.ts +4 -0
  128. package/dist/cli/internal/launcherCommon.d.ts.map +1 -0
  129. package/dist/cli/internal/launcherCommon.js +130 -0
  130. package/dist/cli/internal/localNode.d.ts +16 -0
  131. package/dist/cli/internal/localNode.d.ts.map +1 -0
  132. package/dist/cli/internal/localNode.js +362 -0
  133. package/dist/cli/internal/logging.d.ts +2 -0
  134. package/dist/cli/internal/logging.d.ts.map +1 -0
  135. package/dist/cli/internal/logging.js +26 -0
  136. package/dist/cli/internal/node.d.ts +33 -0
  137. package/dist/cli/internal/node.d.ts.map +1 -0
  138. package/dist/cli/internal/node.js +228 -0
  139. package/dist/cli/internal/processHelpers.d.ts +17 -0
  140. package/dist/cli/internal/processHelpers.d.ts.map +1 -0
  141. package/dist/cli/internal/processHelpers.js +56 -0
  142. package/dist/cli/internal/providerFactories.d.ts +48 -0
  143. package/dist/cli/internal/providerFactories.d.ts.map +1 -0
  144. package/dist/cli/internal/providerFactories.js +442 -0
  145. package/dist/cli/internal/testIdParser.d.ts +34 -0
  146. package/dist/cli/internal/testIdParser.d.ts.map +1 -0
  147. package/dist/cli/internal/testIdParser.js +167 -0
  148. package/dist/cli/lib/binariesHelpers.d.ts +15 -0
  149. package/dist/cli/lib/binariesHelpers.d.ts.map +1 -0
  150. package/dist/cli/lib/binariesHelpers.js +99 -0
  151. package/dist/cli/lib/configReader.d.ts +8 -0
  152. package/dist/cli/lib/configReader.d.ts.map +1 -0
  153. package/dist/cli/lib/configReader.js +115 -0
  154. package/dist/cli/lib/contractFunctions.d.ts +2 -0
  155. package/dist/cli/lib/contractFunctions.d.ts.map +1 -0
  156. package/dist/cli/lib/contractFunctions.js +2 -0
  157. package/dist/cli/lib/globalContext.d.ts +46 -0
  158. package/dist/cli/lib/globalContext.d.ts.map +1 -0
  159. package/dist/cli/lib/globalContext.js +710 -0
  160. package/dist/cli/lib/governanceProcedures.d.ts +27 -0
  161. package/dist/cli/lib/governanceProcedures.d.ts.map +1 -0
  162. package/dist/cli/lib/governanceProcedures.js +458 -0
  163. package/dist/cli/lib/handlers/index.d.ts +5 -0
  164. package/dist/cli/lib/handlers/index.d.ts.map +1 -0
  165. package/dist/cli/lib/handlers/index.js +5 -0
  166. package/dist/cli/lib/repoDefinitions/index.d.ts +6 -0
  167. package/dist/cli/lib/repoDefinitions/index.d.ts.map +1 -0
  168. package/dist/cli/lib/repoDefinitions/index.js +21 -0
  169. package/dist/cli/lib/repoDefinitions/moonbeam.d.ts +4 -0
  170. package/dist/cli/lib/repoDefinitions/moonbeam.d.ts.map +1 -0
  171. package/dist/cli/lib/repoDefinitions/moonbeam.js +30 -0
  172. package/dist/cli/lib/repoDefinitions/polkadot.d.ts +4 -0
  173. package/dist/cli/lib/repoDefinitions/polkadot.d.ts.map +1 -0
  174. package/dist/cli/lib/repoDefinitions/polkadot.js +11 -0
  175. package/dist/cli/lib/repoDefinitions/tanssi.d.ts +4 -0
  176. package/dist/cli/lib/repoDefinitions/tanssi.d.ts.map +1 -0
  177. package/dist/cli/lib/repoDefinitions/tanssi.js +14 -0
  178. package/dist/cli/lib/rpcFunctions.d.ts +2 -0
  179. package/dist/cli/lib/rpcFunctions.d.ts.map +1 -0
  180. package/dist/cli/lib/rpcFunctions.js +26 -0
  181. package/dist/cli/lib/runnerContext.d.ts +32 -0
  182. package/dist/cli/lib/runnerContext.d.ts.map +1 -0
  183. package/dist/cli/lib/runnerContext.js +156 -0
  184. package/dist/cli/lib/shardManager.d.ts +40 -0
  185. package/dist/cli/lib/shardManager.d.ts.map +1 -0
  186. package/dist/cli/lib/shardManager.js +80 -0
  187. package/dist/cli/lib/upgradeProcedures.d.ts +5 -0
  188. package/dist/cli/lib/upgradeProcedures.d.ts.map +1 -0
  189. package/dist/cli/lib/upgradeProcedures.js +221 -0
  190. package/dist/cli.d.ts +4 -0
  191. package/dist/cli.d.ts.map +1 -0
  192. package/dist/cli.js +3 -0
  193. package/dist/contracts/contractInteraction.d.ts +17 -0
  194. package/dist/contracts/contractInteraction.d.ts.map +1 -0
  195. package/dist/contracts/contractInteraction.js +170 -0
  196. package/dist/contracts/index.d.ts +2 -0
  197. package/dist/contracts/index.d.ts.map +1 -0
  198. package/dist/contracts/index.js +1 -0
  199. package/dist/foundations/chopsticks/handler.d.ts +3 -0
  200. package/dist/foundations/chopsticks/handler.d.ts.map +1 -0
  201. package/dist/foundations/chopsticks/handler.js +93 -0
  202. package/dist/foundations/chopsticks/helpers.d.ts +27 -0
  203. package/dist/foundations/chopsticks/helpers.d.ts.map +1 -0
  204. package/dist/foundations/chopsticks/helpers.js +133 -0
  205. package/dist/foundations/dev/handler.d.ts +3 -0
  206. package/dist/foundations/dev/handler.d.ts.map +1 -0
  207. package/dist/foundations/dev/handler.js +136 -0
  208. package/dist/foundations/dev/helpers.d.ts +27 -0
  209. package/dist/foundations/dev/helpers.d.ts.map +1 -0
  210. package/dist/foundations/dev/helpers.js +161 -0
  211. package/dist/foundations/read-only/handler.d.ts +3 -0
  212. package/dist/foundations/read-only/handler.d.ts.map +1 -0
  213. package/dist/foundations/read-only/handler.js +32 -0
  214. package/dist/foundations/zombie/handler.d.ts +3 -0
  215. package/dist/foundations/zombie/handler.d.ts.map +1 -0
  216. package/dist/foundations/zombie/handler.js +92 -0
  217. package/dist/foundations/zombie/helpers.d.ts +16 -0
  218. package/dist/foundations/zombie/helpers.d.ts.map +1 -0
  219. package/dist/foundations/zombie/helpers.js +97 -0
  220. package/dist/index.d.ts +17 -0
  221. package/dist/index.d.ts.map +1 -0
  222. package/dist/index.js +47 -0
  223. package/dist/internal/common.d.ts +3 -0
  224. package/dist/internal/common.d.ts.map +1 -0
  225. package/dist/internal/common.js +41 -0
  226. package/dist/internal/index.d.ts +4 -0
  227. package/dist/internal/index.d.ts.map +1 -0
  228. package/dist/internal/index.js +3 -0
  229. package/dist/internal/logger.d.ts +24 -0
  230. package/dist/internal/logger.d.ts.map +1 -0
  231. package/dist/internal/logger.js +66 -0
  232. package/dist/internal/logging.d.ts +7 -0
  233. package/dist/internal/logging.d.ts.map +1 -0
  234. package/dist/internal/logging.js +36 -0
  235. package/dist/moondebug.d.ts +3 -0
  236. package/dist/moondebug.d.ts.map +1 -0
  237. package/dist/moondebug.js +2 -0
  238. package/dist/services/cache/FileLock.d.ts +11 -0
  239. package/dist/services/cache/FileLock.d.ts.map +1 -0
  240. package/dist/services/cache/FileLock.js +68 -0
  241. package/dist/services/cache/StartupCacheService.d.ts +23 -0
  242. package/dist/services/cache/StartupCacheService.d.ts.map +1 -0
  243. package/dist/services/cache/StartupCacheService.js +159 -0
  244. package/dist/services/cache/index.d.ts +3 -0
  245. package/dist/services/cache/index.d.ts.map +1 -0
  246. package/dist/services/cache/index.js +2 -0
  247. package/dist/services/chopsticks/ChopsticksMultiChain.d.ts +158 -0
  248. package/dist/services/chopsticks/ChopsticksMultiChain.d.ts.map +1 -0
  249. package/dist/services/chopsticks/ChopsticksMultiChain.js +282 -0
  250. package/dist/services/chopsticks/ChopsticksService.d.ts +313 -0
  251. package/dist/services/chopsticks/ChopsticksService.d.ts.map +1 -0
  252. package/dist/services/chopsticks/ChopsticksService.js +77 -0
  253. package/dist/services/chopsticks/chopsticksConfigParser.d.ts +40 -0
  254. package/dist/services/chopsticks/chopsticksConfigParser.d.ts.map +1 -0
  255. package/dist/services/chopsticks/chopsticksConfigParser.js +201 -0
  256. package/dist/services/chopsticks/index.d.ts +5 -0
  257. package/dist/services/chopsticks/index.d.ts.map +1 -0
  258. package/dist/services/chopsticks/index.js +4 -0
  259. package/dist/services/chopsticks/launchChopsticksEffect.d.ts +225 -0
  260. package/dist/services/chopsticks/launchChopsticksEffect.d.ts.map +1 -0
  261. package/dist/services/chopsticks/launchChopsticksEffect.js +623 -0
  262. package/dist/services/config/configAccessors.d.ts +41 -0
  263. package/dist/services/config/configAccessors.d.ts.map +1 -0
  264. package/dist/services/config/configAccessors.js +149 -0
  265. package/dist/services/config/index.d.ts +2 -0
  266. package/dist/services/config/index.d.ts.map +1 -0
  267. package/dist/services/config/index.js +1 -0
  268. package/dist/services/errors.d.ts +72 -0
  269. package/dist/services/errors.d.ts.map +1 -0
  270. package/dist/services/errors.js +31 -0
  271. package/dist/services/index.d.ts +7 -0
  272. package/dist/services/index.d.ts.map +1 -0
  273. package/dist/services/index.js +6 -0
  274. package/dist/services/network/NodeReadinessService.d.ts +35 -0
  275. package/dist/services/network/NodeReadinessService.d.ts.map +1 -0
  276. package/dist/services/network/NodeReadinessService.js +120 -0
  277. package/dist/services/network/PortDiscoveryService.d.ts +22 -0
  278. package/dist/services/network/PortDiscoveryService.d.ts.map +1 -0
  279. package/dist/services/network/PortDiscoveryService.js +77 -0
  280. package/dist/services/network/RpcPortDiscoveryService.d.ts +25 -0
  281. package/dist/services/network/RpcPortDiscoveryService.d.ts.map +1 -0
  282. package/dist/services/network/RpcPortDiscoveryService.js +136 -0
  283. package/dist/services/network/index.d.ts +4 -0
  284. package/dist/services/network/index.d.ts.map +1 -0
  285. package/dist/services/network/index.js +3 -0
  286. package/dist/services/process/ProcessManagerService.d.ts +49 -0
  287. package/dist/services/process/ProcessManagerService.d.ts.map +1 -0
  288. package/dist/services/process/ProcessManagerService.js +162 -0
  289. package/dist/services/process/index.d.ts +3 -0
  290. package/dist/services/process/index.d.ts.map +1 -0
  291. package/dist/services/process/index.js +2 -0
  292. package/dist/services/process/launchNodeEffect.d.ts +40 -0
  293. package/dist/services/process/launchNodeEffect.d.ts.map +1 -0
  294. package/dist/services/process/launchNodeEffect.js +86 -0
  295. package/dist/util/functions/index.d.ts +3 -0
  296. package/dist/util/functions/index.d.ts.map +1 -0
  297. package/dist/util/functions/index.js +4 -0
  298. package/dist/util/index.d.ts +4 -0
  299. package/dist/util/index.d.ts.map +1 -0
  300. package/dist/util/index.js +2 -0
  301. package/package.json +157 -0
@@ -0,0 +1,27 @@
1
+ import type { DevModeContext } from "../../api/types/index.js";
2
+ import type { ApiPromise } from "@polkadot/api";
3
+ import type { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types";
4
+ import type { KeyringPair } from "@polkadot/keyring/types";
5
+ export declare const COUNCIL_MEMBERS: KeyringPair[];
6
+ export declare const COUNCIL_THRESHOLD: number;
7
+ export declare const TECHNICAL_COMMITTEE_MEMBERS: KeyringPair[];
8
+ export declare const TECHNICAL_COMMITTEE_THRESHOLD: number;
9
+ export declare const OPEN_TECHNICAL_COMMITTEE_MEMBERS: KeyringPair[];
10
+ export declare const OPEN_TECHNICAL_COMMITTEE_THRESHOLD: number;
11
+ export declare const notePreimage: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, proposal: Call, account?: KeyringPair) => Promise<string>;
12
+ export declare const instantFastTrack: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, proposal: string | Call, { votingPeriod, delayPeriod }?: {
13
+ votingPeriod: number;
14
+ delayPeriod: number;
15
+ }) => Promise<string>;
16
+ export declare const whiteListedTrack: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, proposal: string | Call) => Promise<boolean>;
17
+ export declare const execOpenTechCommitteeProposal: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, call: Call | string, voters?: KeyringPair[], threshold?: number) => Promise<import("../../index.js").ExtrinsicCreation>;
18
+ export declare const execCouncilProposal: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, polkadotCall: Call, index?: number, voters?: KeyringPair[], threshold?: number) => Promise<import("../../index.js").ExtrinsicCreation | import("../../index.js").BlockCreationResponse<ApiTypes, Promise<SubmittableExtrinsic<"promise", import("@polkadot/types/types").ISubmittableResult>>>>;
19
+ export declare const proposeReferendaAndDeposit: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, decisionDepositer: KeyringPair, proposal: string | Call, origin: unknown) => Promise<[number, string]>;
20
+ export declare const dispatchAsGeneralAdmin: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, call: string | Call) => Promise<void>;
21
+ export declare const maximizeConvictionVotingOf: (context: DevModeContext, voters: KeyringPair[], refIndex: number) => Promise<void>;
22
+ export declare const execTechnicalCommitteeProposal: <Call extends SubmittableExtrinsic<ApiType>, ApiType extends ApiTypes>(context: DevModeContext, polkadotCall: Call, voters?: KeyringPair[], threshold?: number) => Promise<import("../../index.js").ExtrinsicCreation | undefined>;
23
+ export declare const executeOpenTechCommitteeProposal: (api: ApiPromise, encodedHash: string) => Promise<void>;
24
+ export declare const executeProposalWithCouncil: (api: ApiPromise, encodedHash: string) => Promise<void>;
25
+ export declare const cancelReferendaWithCouncil: (api: ApiPromise, refIndex: number) => Promise<void>;
26
+ export declare const fastFowardToNextEvent: (context: DevModeContext) => Promise<void>;
27
+ //# sourceMappingURL=governanceProcedures.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"governanceProcedures.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/governanceProcedures.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,458 @@
1
+ import { GLMR, alith, baltathar, charleth, dorothy, ethan, faith, filterAndApply, signAndSend, } from "../../util/index.js";
2
+ import { blake2AsHex } from "@polkadot/util-crypto";
3
+ export const COUNCIL_MEMBERS = [baltathar, charleth, dorothy];
4
+ export const COUNCIL_THRESHOLD = Math.ceil((COUNCIL_MEMBERS.length * 2) / 3);
5
+ export const TECHNICAL_COMMITTEE_MEMBERS = [alith, baltathar];
6
+ export const TECHNICAL_COMMITTEE_THRESHOLD = Math.ceil((TECHNICAL_COMMITTEE_MEMBERS.length * 2) / 3);
7
+ export const OPEN_TECHNICAL_COMMITTEE_MEMBERS = [alith, baltathar];
8
+ export const OPEN_TECHNICAL_COMMITTEE_THRESHOLD = Math.ceil((OPEN_TECHNICAL_COMMITTEE_MEMBERS.length * 2) / 3);
9
+ // TODO: Refactor to support both instant sealing and parachain environment
10
+ // (using a waitOrCreateNextBlock common function)
11
+ export const notePreimage = async (context, proposal, account = alith) => {
12
+ const encodedProposal = proposal.method.toHex() || "";
13
+ await context.createBlock(context.polkadotJs().tx.preimage.notePreimage(encodedProposal).signAsync(account));
14
+ return blake2AsHex(encodedProposal);
15
+ };
16
+ // Creates the Council Proposal and fast track it before executing it
17
+ export const instantFastTrack = async (context, proposal, { votingPeriod, delayPeriod } = { votingPeriod: 2, delayPeriod: 0 }) => {
18
+ const proposalHash = typeof proposal === "string" ? proposal : await notePreimage(context, proposal);
19
+ await execCouncilProposal(context, context.polkadotJs().tx.democracy.externalProposeMajority({
20
+ Lookup: {
21
+ hash: proposalHash,
22
+ len: typeof proposal === "string" ? proposal : proposal.method.encodedLength,
23
+ },
24
+ }));
25
+ await execTechnicalCommitteeProposal(context, context.polkadotJs().tx.democracy.fastTrack(proposalHash, votingPeriod, delayPeriod));
26
+ return proposalHash;
27
+ };
28
+ // Uses WhitelistedOrigin track to quickly execute a call
29
+ export const whiteListedTrack = async (context, proposal) => {
30
+ const proposalHash = typeof proposal === "string" ? proposal : await notePreimage(context, proposal);
31
+ // Construct dispatchWhiteListed call
32
+ const proposalLen = (await context.pjsApi.query.preimage.requestStatusFor(proposalHash)).unwrap().asUnrequested.len;
33
+ const dispatchWLCall = context.pjsApi.tx.whitelist.dispatchWhitelistedCall(proposalHash, proposalLen, {
34
+ refTime: 2_000_000_000,
35
+ proofSize: 100_000,
36
+ });
37
+ // Note preimage of it
38
+ const wLPreimage = await notePreimage(context, dispatchWLCall);
39
+ const wLPreimageLen = dispatchWLCall.encodedLength - 2;
40
+ console.log(`📝 DispatchWhitelistedCall preimage noted: ${wLPreimage.slice(0, 6)}...${wLPreimage.slice(-4)}, len: ${wLPreimageLen}`);
41
+ // Submit openGov proposal
42
+ const openGovProposal = await context.pjsApi.tx.referenda
43
+ .submit({
44
+ Origins: { whitelistedcaller: "WhitelistedCaller" },
45
+ }, { Lookup: { hash: wLPreimage, len: wLPreimageLen } }, { After: { After: 0 } })
46
+ .signAsync(faith);
47
+ const { result } = await context.createBlock(openGovProposal);
48
+ if (!result?.events) {
49
+ throw new Error("No events in block");
50
+ }
51
+ let proposalId;
52
+ filterAndApply(result.events, "referenda", ["Submitted"], (found) => {
53
+ proposalId = found.event.data.index.toNumber();
54
+ });
55
+ if (typeof proposalId === "undefined") {
56
+ throw new Error("No proposal id found");
57
+ }
58
+ console.log(`🏛️ Referendum submitted with proposal id: ${proposalId}`);
59
+ await context.createBlock(context.pjsApi.tx.referenda.placeDecisionDeposit(proposalId));
60
+ const whitelistCall = context.pjsApi.tx.whitelist.whitelistCall(proposalHash);
61
+ await execOpenTechCommitteeProposal(context, whitelistCall);
62
+ await maximizeConvictionVotingOf(context, [ethan], proposalId);
63
+ await context.createBlock();
64
+ const checkCompletion = async () => {
65
+ const authorized = (await context.pjsApi.query.system.authorizedUpgrade());
66
+ if (!authorized.isNone) {
67
+ return true;
68
+ }
69
+ const events = (await context.pjsApi.query.system.events());
70
+ return events.some(({ event, }) => {
71
+ const section = event.section.toString();
72
+ const method = event.method.toString();
73
+ return section === "whitelist" && method === "WhitelistedCallDispatched";
74
+ });
75
+ };
76
+ await fastFowardToNextEvent(context); // ⏩️ until preparation done
77
+ if (await checkCompletion()) {
78
+ return true;
79
+ }
80
+ await fastFowardToNextEvent(context); // ⏩️ until proposal confirmed
81
+ if (await checkCompletion()) {
82
+ return true;
83
+ }
84
+ await fastFowardToNextEvent(context); // ⏩️ until proposal enacted
85
+ if (await checkCompletion()) {
86
+ return true;
87
+ }
88
+ // Some runtimes enqueue extra agenda items before the whitelist dispatch completes.
89
+ // Keep fast-forwarding until the authorized upgrade is populated or the agenda is empty.
90
+ for (let attempt = 0; attempt < 5; attempt++) {
91
+ if (await checkCompletion()) {
92
+ break;
93
+ }
94
+ try {
95
+ await fastFowardToNextEvent(context);
96
+ }
97
+ catch (error) {
98
+ if (error instanceof Error && error.message.includes("No items in scheduler.agenda")) {
99
+ break;
100
+ }
101
+ throw error;
102
+ }
103
+ }
104
+ return await checkCompletion();
105
+ };
106
+ // Creates a OpenTechCommitteeProposal and attempts to execute it
107
+ export const execOpenTechCommitteeProposal = async (context, call, voters = OPEN_TECHNICAL_COMMITTEE_MEMBERS, threshold = OPEN_TECHNICAL_COMMITTEE_THRESHOLD) => {
108
+ const openTechCommitteeProposal = context.pjsApi.tx.openTechCommitteeCollective.propose(threshold, call, 100);
109
+ const { result: result2 } = await context.createBlock(openTechCommitteeProposal, {
110
+ signer: voters[0],
111
+ });
112
+ if (!result2?.events) {
113
+ throw new Error("No events in block");
114
+ }
115
+ let openTechProposal;
116
+ let openTechProposalIndex;
117
+ filterAndApply(result2.events, "openTechCommitteeCollective", ["Proposed"], (found) => {
118
+ openTechProposalIndex = found.event.data.proposalIndex.toNumber();
119
+ openTechProposal = found.event.data.proposalHash.toHex();
120
+ });
121
+ if (typeof openTechProposal === "undefined" || typeof openTechProposalIndex === "undefined") {
122
+ console.error("Error submitting OpenTechCommittee proposal");
123
+ return result2;
124
+ }
125
+ console.log(`🏛️ OpenTechCommittee proposal submitted with proposal id: ${openTechProposalIndex} and hash: ${openTechProposal?.slice(0, 6)}...${openTechProposal?.slice(-4)}`);
126
+ // Vote on it
127
+ for (const voter of voters) {
128
+ const nonce = (await context.pjsApi.query.system.account(voter.address)).nonce.toNumber();
129
+ const vote = context.pjsApi.tx.openTechCommitteeCollective
130
+ .vote(openTechProposal, openTechProposalIndex, true)
131
+ .signAsync(voter, { nonce });
132
+ await context.createBlock(vote);
133
+ }
134
+ // Close proposal
135
+ const { result } = await context.createBlock(context.pjsApi.tx.openTechCommitteeCollective.close(openTechProposal, openTechProposalIndex, {
136
+ refTime: 2_000_000_000,
137
+ proofSize: 100_000,
138
+ }, 100), { signer: voters[0] });
139
+ if (!result) {
140
+ throw new Error("No result in block");
141
+ }
142
+ return result;
143
+ };
144
+ // Creates the Council Proposal
145
+ // Vote with the members (all members by default)
146
+ // Close it (Execute if successful)
147
+ export const execCouncilProposal = async (context, polkadotCall, index = -1, voters = COUNCIL_MEMBERS, threshold = COUNCIL_THRESHOLD) => {
148
+ // Charleth submit the proposal to the council (and therefore implicitly votes for)
149
+ const lengthBound = polkadotCall.method.encodedLength;
150
+ const { result: proposalResult } = await context.createBlock(context
151
+ .polkadotJs()
152
+ .tx.councilCollective.propose(threshold, polkadotCall, lengthBound)
153
+ .signAsync(charleth));
154
+ if (!proposalResult) {
155
+ throw "Proposal result is undefined";
156
+ }
157
+ if (threshold <= 1) {
158
+ // Proposal are automatically executed on threshold <= 1
159
+ return proposalResult;
160
+ }
161
+ if (!proposalResult.successful) {
162
+ throw `Council proposal refused: ${proposalResult?.error?.name}`;
163
+ }
164
+ const proposed = proposalResult.events.find(({ event: { method } }) => method.toString() === "Proposed");
165
+ if (!proposed) {
166
+ throw "Proposed event not found";
167
+ }
168
+ const proposalHash = proposed.event.data[2].toHex();
169
+ // Dorothy vote for this proposal and close it
170
+ const proposalIndex = index >= 0
171
+ ? index
172
+ : (await context.polkadotJs().query.councilCollective.proposalCount()).toNumber() -
173
+ 1;
174
+ await Promise.all(voters.map((voter) => context
175
+ .polkadotJs()
176
+ .tx.councilCollective.vote(proposalHash, proposalIndex, true)
177
+ .signAndSend(voter)));
178
+ await context.createBlock();
179
+ return await context.createBlock(context
180
+ .polkadotJs()
181
+ .tx.councilCollective.close(proposalHash, proposalIndex, {
182
+ refTime: 2_000_000_000,
183
+ proofSize: 100_000,
184
+ }, lengthBound)
185
+ .signAsync(dorothy));
186
+ };
187
+ // Proposes referenda and places decision deposit
188
+ // Returns referendum index and proposal hash
189
+ export const proposeReferendaAndDeposit = async (context, decisionDepositer, proposal, origin) => {
190
+ // Fetch proposal hash
191
+ const proposalHash = typeof proposal === "string" ? proposal : await notePreimage(context, proposal);
192
+ // Post referenda
193
+ const { result: proposalResult } = await context.createBlock(context
194
+ .polkadotJs()
195
+ .tx.referenda.submit(origin, {
196
+ Lookup: {
197
+ hash: proposalHash,
198
+ len: typeof proposal === "string" ? proposal : proposal.method.encodedLength,
199
+ },
200
+ }, { At: 0 })
201
+ .signAsync(alith));
202
+ if (!proposalResult) {
203
+ throw "Proposal result is undefined";
204
+ }
205
+ if (!proposalResult.successful) {
206
+ throw `Unable to post referenda: ${proposalResult?.error?.name}`;
207
+ }
208
+ const refIndex = proposalResult.events
209
+ .find(({ event: { method } }) => method.toString() === "Submitted")
210
+ ?.event.data[0].toString();
211
+ if (!refIndex) {
212
+ throw "Referendum index not found";
213
+ }
214
+ // Place decision deposit
215
+ await context.createBlock(context.polkadotJs().tx.referenda.placeDecisionDeposit(refIndex).signAsync(decisionDepositer));
216
+ return [+refIndex, proposalHash];
217
+ };
218
+ // Proposes referenda and places decision deposit
219
+ // Returns referendum index and proposal hash
220
+ export const dispatchAsGeneralAdmin = async (context, call) => {
221
+ // Post referenda
222
+ await context.createBlock(context.polkadotJs().tx.sudo.sudo(context.polkadotJs().tx.utility.dispatchAs({
223
+ Origins: "GeneralAdmin",
224
+ }, call)));
225
+ };
226
+ // Maximizes conviction voting of some voters
227
+ // with respect to an ongoing referenda
228
+ // Their whole free balance will be used to vote
229
+ export const maximizeConvictionVotingOf = async (context, voters, refIndex) => {
230
+ // We need to have enough to pay for fee
231
+ const fee = (await context
232
+ .polkadotJs()
233
+ .tx.convictionVoting.vote(refIndex, {
234
+ Standard: {
235
+ vote: { aye: true, conviction: "Locked6x" },
236
+ balance: (await context.polkadotJs().query.system.account(alith.address)).data
237
+ .free,
238
+ },
239
+ })
240
+ .paymentInfo(alith)).partialFee;
241
+ // We vote with everything but fee
242
+ await context.createBlock(voters.map(async (voter) => context
243
+ .polkadotJs()
244
+ .tx.convictionVoting.vote(refIndex, {
245
+ Standard: {
246
+ vote: { aye: true, conviction: "Locked6x" },
247
+ balance: await (await context.polkadotJs().query.system.account(voter.address)).data.free.sub(fee),
248
+ },
249
+ })
250
+ .signAsync(voter)));
251
+ };
252
+ // Creates the Technical Committee Proposal
253
+ // Vote with the members (all members by default)
254
+ // Close it (Execute if successful)
255
+ export const execTechnicalCommitteeProposal = async (context, polkadotCall, voters = TECHNICAL_COMMITTEE_MEMBERS, threshold = TECHNICAL_COMMITTEE_THRESHOLD) => {
256
+ // Tech committee members
257
+ // Alith submit the proposal to the council (and therefore implicitly votes for)
258
+ const lengthBound = polkadotCall.encodedLength;
259
+ const { result: proposalResult } = await context.createBlock(context.polkadotJs().tx.techCommitteeCollective.propose(threshold, polkadotCall, lengthBound));
260
+ if (!proposalResult) {
261
+ throw "Proposal result is undefined";
262
+ }
263
+ if (threshold <= 1) {
264
+ // Proposal are automatically executed on threshold <= 1
265
+ return proposalResult;
266
+ }
267
+ if (!proposalResult.successful) {
268
+ throw `Council proposal refused: ${proposalResult?.error?.name}`;
269
+ }
270
+ const proposalHash = proposalResult.events
271
+ .find(({ event: { method } }) => method.toString() === "Proposed")
272
+ ?.event.data[2].toHex();
273
+ if (!proposalHash) {
274
+ throw "Proposed event not found";
275
+ }
276
+ // Get proposal count
277
+ const proposalCount = await context.polkadotJs().query.techCommitteeCollective.proposalCount();
278
+ await context.createBlock(voters.map((voter) => context
279
+ .polkadotJs()
280
+ .tx.techCommitteeCollective.vote(proposalHash, Number(proposalCount) - 1, true)
281
+ .signAsync(voter)));
282
+ const { result: closeResult } = await context.createBlock(context
283
+ .polkadotJs()
284
+ .tx.techCommitteeCollective.close(proposalHash, Number(proposalCount) - 1, {
285
+ refTime: 2_000_000_000,
286
+ proofSize: 100_000,
287
+ }, lengthBound)
288
+ .signAsync(baltathar));
289
+ return closeResult;
290
+ };
291
+ export const executeOpenTechCommitteeProposal = async (api, encodedHash) => {
292
+ console.log("Executing OpenTechCommittee proposal");
293
+ const queryPreimage = (await api.query.preimage.requestStatusFor(encodedHash));
294
+ if (queryPreimage.isNone) {
295
+ throw new Error("Preimage not found");
296
+ }
297
+ process.stdout.write(`Sending proposal + vote for ${encodedHash}...`);
298
+ // Noting new preimage to dispatchWhiteList
299
+ const proposalLen = queryPreimage.unwrap().asUnrequested.len;
300
+ const dispatchCallHex = api.tx.whitelist
301
+ .dispatchWhitelistedCall(encodedHash, proposalLen, {
302
+ refTime: 2_000_000_000,
303
+ proofSize: 100_000,
304
+ })
305
+ .method.toHex();
306
+ const dispatchCallPreimageHash = blake2AsHex(dispatchCallHex);
307
+ await signAndSend(api.tx.preimage.notePreimage(dispatchCallHex), charleth);
308
+ const queryDispatchPreimage = (await api.query.preimage.requestStatusFor(dispatchCallPreimageHash));
309
+ if (queryDispatchPreimage.isNone) {
310
+ throw new Error("Dispatch preimage not found");
311
+ }
312
+ const dispatchCallPreimageLen = queryDispatchPreimage.unwrap().asUnrequested.len;
313
+ // Raising new proposal to OpenGov under whitelisted track
314
+ await signAndSend(api.tx.referenda.submit({
315
+ Origins: { whitelistedcaller: "WhitelistedCaller" },
316
+ }, {
317
+ Lookup: {
318
+ hash: dispatchCallPreimageHash,
319
+ len: dispatchCallPreimageLen,
320
+ },
321
+ }, { After: { After: 0 } }), charleth);
322
+ // await api.tx.referenda
323
+ // .submit(
324
+ // {
325
+ // Origins: { whitelistedcaller: "WhitelistedCaller" },
326
+ // },
327
+ // { Lookup: { hash: dispatchCallPreimageHash, len: dispatchCallPreimageLen } },
328
+ // { After: { After: 0 } }
329
+ // )
330
+ // .signAsync(charleth);
331
+ const proposalId = (await api.query.referenda.referendumCount()).toNumber() - 1;
332
+ if (proposalId < 0) {
333
+ throw new Error("Proposal id not found");
334
+ }
335
+ await api.tx.referenda.placeDecisionDeposit(proposalId).signAndSend(alith);
336
+ // Opening Proposal to whiteList
337
+ process.stdout.write(`Sending proposal to openTechCommittee to whitelist ${encodedHash}...`);
338
+ await signAndSend(api.tx.openTechCommitteeCollective.propose(2, api.tx.whitelist.whitelistCall(encodedHash), 100));
339
+ const openTechProposal = (await api.query.openTechCommitteeCollective.proposals()).at(-1);
340
+ if (!openTechProposal || openTechProposal?.isEmpty) {
341
+ throw new Error("OpenTechProposal not found");
342
+ }
343
+ const index = (await api.query.openTechCommitteeCollective.proposalCount()).toNumber() - 1;
344
+ if (index < 0) {
345
+ throw new Error("OpenTechProposal index not found");
346
+ }
347
+ process.stdout.write("✅\n");
348
+ const baltaNonce = (await api.rpc.system.accountNextIndex(baltathar.address)).toNumber();
349
+ // Voting and closing on openTech proposal
350
+ process.stdout.write("Voting on openTechCommittee proposal...");
351
+ await Promise.all([
352
+ signAndSend(api.tx.openTechCommitteeCollective.vote(openTechProposal, index, true)),
353
+ signAndSend(api.tx.openTechCommitteeCollective.vote(openTechProposal, index, true), baltathar, baltaNonce),
354
+ signAndSend(api.tx.openTechCommitteeCollective.close(openTechProposal, index, {
355
+ refTime: 2_000_000_000,
356
+ proofSize: 100_000,
357
+ }, 100), baltathar, baltaNonce + 1),
358
+ ]);
359
+ process.stdout.write("✅\n");
360
+ // Voting on referendum with lots of money
361
+ process.stdout.write("Voting on main referendum proposal...");
362
+ const bal = (await api.query.system.account(dorothy.address)).data.free.toBigInt();
363
+ if (bal <= GLMR) {
364
+ throw new Error("Dorothy has no funds to vote with");
365
+ }
366
+ await signAndSend(api.tx.convictionVoting.vote(proposalId, {
367
+ Standard: {
368
+ vote: { aye: true, conviction: "Locked6x" },
369
+ balance: bal - GLMR,
370
+ },
371
+ }), dorothy);
372
+ process.stdout.write("✅\n");
373
+ // Waiting one million years for the referendum to be enacted
374
+ process.stdout.write(`Waiting for referendum [${proposalId}] to be no longer ongoing...`);
375
+ let referendaInfo;
376
+ for (;;) {
377
+ try {
378
+ referendaInfo = (await api.query.referenda.referendumInfoFor(proposalId)).unwrap();
379
+ if (!referendaInfo?.isOngoing) {
380
+ process.stdout.write("✅\n");
381
+ break;
382
+ }
383
+ await new Promise((resolve) => setTimeout(resolve, 1000));
384
+ }
385
+ catch (e) {
386
+ console.error(e);
387
+ throw new Error(`Error querying referendum info for proposalId: ${proposalId}`);
388
+ }
389
+ }
390
+ process.stdout.write(`${referendaInfo?.isApproved ? "✅" : "❌"} \n`);
391
+ if (!referendaInfo?.isApproved) {
392
+ throw new Error("Finished Referendum was not approved");
393
+ }
394
+ };
395
+ export const executeProposalWithCouncil = async (api, encodedHash) => {
396
+ let nonce = (await api.rpc.system.accountNextIndex(alith.address)).toNumber();
397
+ const referendumNextIndex = (await api.query.democracy.referendumCount()).toNumber();
398
+ const callData = api.consts.system.version.specVersion.toNumber() >= 2000
399
+ ? { Legacy: encodedHash }
400
+ : encodedHash;
401
+ const external = api.tx.democracy.externalProposeMajority(callData);
402
+ const fastTrack = api.tx.democracy.fastTrack(encodedHash, 1, 0);
403
+ const voteAmount = 1n * 10n ** BigInt(api.registry.chainDecimals[0]);
404
+ process.stdout.write(`Sending motion + fast-track + vote for ${encodedHash}...`);
405
+ await Promise.all([
406
+ api.tx.councilCollective
407
+ .propose(1, external, external.length)
408
+ .signAndSend(alith, { nonce: nonce++ }),
409
+ api.tx.techCommitteeCollective
410
+ .propose(1, fastTrack, fastTrack.length)
411
+ .signAndSend(alith, { nonce: nonce++ }),
412
+ api.tx.democracy
413
+ .vote(referendumNextIndex, {
414
+ Standard: {
415
+ balance: voteAmount,
416
+ vote: { aye: true, conviction: 1 },
417
+ },
418
+ })
419
+ .signAndSend(alith, { nonce: nonce++ }),
420
+ ]);
421
+ process.stdout.write("✅\n");
422
+ process.stdout.write(`Waiting for referendum [${referendumNextIndex}] to be executed...`);
423
+ let referenda;
424
+ while (!referenda) {
425
+ try {
426
+ referenda = ((await api.query.democracy.referendumInfoOf.entries()).find((ref) => ref[1].unwrap().isFinished &&
427
+ api.registry.createType("u32", ref[0].toU8a().slice(-4)).toNumber() ===
428
+ referendumNextIndex)?.[1]).unwrap();
429
+ }
430
+ catch {
431
+ await new Promise((resolve) => setTimeout(resolve, 1000));
432
+ }
433
+ }
434
+ process.stdout.write(`${referenda.asFinished.approved ? "✅" : "❌"} \n`);
435
+ if (!referenda.asFinished.approved) {
436
+ throw new Error("Finished Referendum was not approved");
437
+ }
438
+ };
439
+ export const cancelReferendaWithCouncil = async (api, refIndex) => {
440
+ const proposal = api.tx.democracy.cancelReferendum(refIndex);
441
+ const encodedProposal = proposal.method.toHex();
442
+ const encodedHash = blake2AsHex(encodedProposal);
443
+ let nonce = (await api.rpc.system.accountNextIndex(alith.address)).toNumber();
444
+ await api.tx.democracy.notePreimage(encodedProposal).signAndSend(alith, { nonce: nonce++ });
445
+ await executeProposalWithCouncil(api, encodedHash);
446
+ };
447
+ export const fastFowardToNextEvent = async (context) => {
448
+ const [entry] = await context.pjsApi.query.scheduler.agenda.entries();
449
+ const [key, _] = entry;
450
+ if (key.isEmpty) {
451
+ throw new Error("No items in scheduler.agenda");
452
+ }
453
+ const decodedKey = key.toHuman();
454
+ const desiredHeight = Number(decodedKey[0].valueOf().replaceAll(",", ""));
455
+ const currentHeight = (await context.pjsApi.rpc.chain.getHeader()).number.toNumber();
456
+ console.log(`⏩️ Current height: ${currentHeight}, desired height: ${desiredHeight}, jumping ${desiredHeight - currentHeight + 1} blocks`);
457
+ await context.jumpBlocks?.(desiredHeight - currentHeight + 1);
458
+ };
@@ -0,0 +1,5 @@
1
+ export * from "../../../foundations/chopsticks/handler.js";
2
+ export * from "../../../foundations/dev/handler.js";
3
+ export * from "../../../foundations/read-only/handler.js";
4
+ export * from "../../../foundations/zombie/handler.js";
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/handlers/index.ts"],"names":[],"mappings":"AACA,2DAA2D;AAC3D,oDAAoD;AACpD,0DAA0D;AAC1D,uDAAuD"}
@@ -0,0 +1,5 @@
1
+ // Re-export from foundations
2
+ export * from "../../../foundations/chopsticks/handler.js";
3
+ export * from "../../../foundations/dev/handler.js";
4
+ export * from "../../../foundations/read-only/handler.js";
5
+ export * from "../../../foundations/zombie/handler.js";
@@ -0,0 +1,6 @@
1
+ import type { RepoSpec } from "../../../api/types/index.js";
2
+ export declare function allRepos(): RepoSpec[];
3
+ export declare function allReposAsync(): Promise<RepoSpec[]>;
4
+ export declare function standardRepos(): RepoSpec[];
5
+ export default allRepos;
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/repoDefinitions/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oCAAoC;AAM5D,wBAAgB,QAAQ,eAKvB;AAED,wBAAsB,aAAa,wBAKlC;AAED,wBAAgB,aAAa,eAG5B;AAED,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,21 @@
1
+ import mb from "./moonbeam.js";
2
+ import pd from "./polkadot.js";
3
+ import ts from "./tanssi.js";
4
+ import { importAsyncConfig, importJsonConfig } from "../configReader.js";
5
+ export function allRepos() {
6
+ const defaultRepos = [mb, pd, ts];
7
+ const globalConfig = importJsonConfig();
8
+ const importedRepos = globalConfig.additionalRepos ? globalConfig.additionalRepos : [];
9
+ return [...defaultRepos, ...importedRepos];
10
+ }
11
+ export async function allReposAsync() {
12
+ const defaultRepos = [mb, pd, ts];
13
+ const globalConfig = await importAsyncConfig();
14
+ const importedRepos = globalConfig.additionalRepos || [];
15
+ return [...defaultRepos, ...importedRepos];
16
+ }
17
+ export function standardRepos() {
18
+ const defaultRepos = [mb, pd, ts];
19
+ return [...defaultRepos];
20
+ }
21
+ export default allRepos;
@@ -0,0 +1,4 @@
1
+ import type { RepoSpec } from "../../../api/types/index.js";
2
+ declare const repo: RepoSpec;
3
+ export default repo;
4
+ //# sourceMappingURL=moonbeam.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"moonbeam.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/repoDefinitions/moonbeam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oCAAoC;AAE5D,QAAA,MAAM,IAAI,EAAE,QA4BX,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,30 @@
1
+ const repo = {
2
+ name: "moonbeam",
3
+ binaries: [
4
+ {
5
+ name: "moonbeam",
6
+ defaultArgs: [
7
+ "--no-hardware-benchmarks",
8
+ "--no-telemetry",
9
+ "--reserved-only",
10
+ "--rpc-cors=all",
11
+ "--unsafe-rpc-external",
12
+ "--unsafe-force-node-key-generation",
13
+ "--no-grandpa",
14
+ "--sealing=manual",
15
+ "--force-authoring",
16
+ "--database=paritydb",
17
+ "--no-prometheus",
18
+ "--alice",
19
+ "--chain=moonbase-dev",
20
+ "--tmp",
21
+ ],
22
+ },
23
+ { name: "moonbase-runtime" },
24
+ { name: "moonbeam-runtime" },
25
+ { name: "moonriver-runtime" },
26
+ ],
27
+ ghAuthor: "moonbeam-foundation",
28
+ ghRepo: "moonbeam",
29
+ };
30
+ export default repo;
@@ -0,0 +1,4 @@
1
+ import type { RepoSpec } from "../../../api/types/index.js";
2
+ declare const repo: RepoSpec;
3
+ export default repo;
4
+ //# sourceMappingURL=polkadot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polkadot.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/repoDefinitions/polkadot.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oCAAoC;AAE5D,QAAA,MAAM,IAAI,EAAE,QASX,CAAC;AAEF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,11 @@
1
+ const repo = {
2
+ name: "polkadot",
3
+ binaries: [
4
+ { name: "polkadot" },
5
+ { name: "polkadot-prepare-worker" },
6
+ { name: "polkadot-execute-worker" },
7
+ ],
8
+ ghAuthor: "paritytech",
9
+ ghRepo: "polkadot-sdk",
10
+ };
11
+ export default repo;
@@ -0,0 +1,4 @@
1
+ import type { RepoSpec } from "../../../api/types/index.js";
2
+ declare const repo: RepoSpec;
3
+ export default repo;
4
+ //# sourceMappingURL=tanssi.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tanssi.d.ts","sourceRoot":"","sources":["../../../../src/cli/lib/repoDefinitions/tanssi.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,oCAAoC;AAE5D,QAAA,MAAM,IAAI,EAAE,QAYX,CAAC;AACF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,14 @@
1
+ const repo = {
2
+ name: "tanssi",
3
+ binaries: [
4
+ {
5
+ name: "tanssi-node",
6
+ defaultArgs: ["--dev", "--sealing=manual", "--no-hardware-benchmarks"],
7
+ },
8
+ { name: "container-chain-template-simple-node" },
9
+ { name: "container-chain-template-frontier-node" },
10
+ ],
11
+ ghAuthor: "moondance-labs",
12
+ ghRepo: "tanssi",
13
+ };
14
+ export default repo;
@@ -0,0 +1,2 @@
1
+ export declare function customDevRpcRequest(method: string, params?: any[]): Promise<any>;
2
+ //# sourceMappingURL=rpcFunctions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpcFunctions.d.ts","sourceRoot":"","sources":["../../../src/cli/lib/rpcFunctions.ts"],"names":[],"mappings":"AAIA,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,GAAE,GAAG,EAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CA6B1F"}