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,170 @@
1
+ import { ALITH_PRIVATE_KEY, PRECOMPILES, createEthersTransaction, createViemTransaction, deployViemContract, } from "../util/index.js";
2
+ import chalk from "chalk";
3
+ import { Interface, Wallet } from "ethers";
4
+ import fs, { readFileSync } from "node:fs";
5
+ import path from "node:path";
6
+ import { decodeFunctionResult, encodeFunctionData, toHex } from "viem";
7
+ import { privateKeyToAccount } from "viem/accounts";
8
+ import { importJsonConfig } from "../services/config/index.js";
9
+ function getCompiledPath(contractName) {
10
+ const config = importJsonConfig();
11
+ const contractsDir = config.environments.find((env) => env.name === process.env.MOON_TEST_ENV)?.contracts;
12
+ if (!contractsDir) {
13
+ throw new Error(`Contracts directory not found for environment config ${process.env.MOON_TEST_ENV}\n` +
14
+ `Please specify path to Foundry directory at: ${chalk.bgWhiteBright.blackBright("moonwall.config.json > environments > contracts")}`);
15
+ }
16
+ const compiledJsonPath = recursiveSearch(contractsDir, `${contractName}.json`);
17
+ const solidityFilePath = recursiveSearch(contractsDir, `${contractName}.sol`);
18
+ if (!compiledJsonPath && !solidityFilePath) {
19
+ throw new Error(`Neither solidity contract ${contractName}.sol nor its compiled json exists in ${contractsDir}`);
20
+ }
21
+ if (!compiledJsonPath) {
22
+ throw new Error(`Compiled contract ${contractName}.json doesn't exist\n` +
23
+ `Please ${chalk.bgWhiteBright.blackBright("recompile contract")} ${contractName}.sol`);
24
+ }
25
+ return compiledJsonPath;
26
+ }
27
+ export function fetchCompiledContract(contractName) {
28
+ const compiledPath = getCompiledPath(contractName);
29
+ const json = readFileSync(compiledPath, "utf8");
30
+ const parsed = JSON.parse(json);
31
+ return {
32
+ abi: parsed.contract.abi,
33
+ bytecode: parsed.byteCode,
34
+ methods: parsed.contract.evm.methodIdentifiers,
35
+ deployedBytecode: `0x${parsed.contract.evm.deployedBytecode.object}`,
36
+ };
37
+ }
38
+ export function recursiveSearch(dir, filename) {
39
+ const files = fs.readdirSync(dir);
40
+ for (const file of files) {
41
+ const filepath = path.join(dir, file);
42
+ const stats = fs.statSync(filepath);
43
+ if (stats.isDirectory()) {
44
+ const searchResult = recursiveSearch(filepath, filename);
45
+ if (searchResult) {
46
+ return searchResult;
47
+ }
48
+ }
49
+ else if (stats.isFile() && file === filename) {
50
+ return filepath;
51
+ }
52
+ }
53
+ return null;
54
+ }
55
+ export async function interactWithPrecompileContract(context, callOptions) {
56
+ const { precompileName, ...rest } = callOptions;
57
+ const precompileInfo = PRECOMPILES[precompileName];
58
+ if (!precompileInfo) {
59
+ throw new Error(`No precompile found with the name: ${precompileName}`);
60
+ }
61
+ const [contractAddress, contractName] = Array.isArray(precompileInfo)
62
+ ? precompileInfo
63
+ : [precompileInfo, precompileName];
64
+ return await interactWithContract(context, {
65
+ ...rest,
66
+ contractName,
67
+ contractAddress: contractAddress,
68
+ });
69
+ }
70
+ export async function interactWithContract(context, callOptions) {
71
+ const { contractName, contractAddress, functionName, args = [], web3Library = "viem", gas = "estimate", value = 0n, privateKey = ALITH_PRIVATE_KEY, rawTxOnly = false, call = false, } = callOptions;
72
+ const { abi } = fetchCompiledContract(contractName);
73
+ const data = encodeFunctionData({
74
+ abi,
75
+ functionName,
76
+ args,
77
+ });
78
+ const account = privateKeyToAccount(privateKey);
79
+ const gasParam = gas === "estimate"
80
+ ? await context.viem().estimateGas({
81
+ account: account.address,
82
+ to: contractAddress,
83
+ value: 0n,
84
+ data,
85
+ })
86
+ : gas > 0n
87
+ ? gas
88
+ : 200000n;
89
+ if (!call && rawTxOnly) {
90
+ return web3Library === "viem"
91
+ ? createViemTransaction(context, {
92
+ to: contractAddress,
93
+ data,
94
+ gas: gasParam,
95
+ privateKey,
96
+ value,
97
+ })
98
+ : createEthersTransaction(context, {
99
+ to: contractAddress,
100
+ data,
101
+ gas: gasParam,
102
+ value: toHex(value),
103
+ privateKey,
104
+ });
105
+ }
106
+ if (call) {
107
+ if (web3Library === "viem") {
108
+ const result = await context.viem().call({
109
+ account: account.address,
110
+ to: contractAddress,
111
+ value: 0n,
112
+ data,
113
+ gas: gasParam,
114
+ });
115
+ if (!result.data) {
116
+ throw new Error("No data field returned from call");
117
+ }
118
+ return decodeFunctionResult({ abi, functionName, data: result.data });
119
+ }
120
+ const result = await context.ethers().call({
121
+ from: account.address,
122
+ to: contractAddress,
123
+ value: toHex(value),
124
+ data,
125
+ gasLimit: toHex(gasParam),
126
+ });
127
+ return new Interface(abi).decodeFunctionResult(functionName, result);
128
+ }
129
+ if (!rawTxOnly) {
130
+ if (web3Library === "viem") {
131
+ const hash = await context.viem().sendTransaction({
132
+ account: account,
133
+ to: contractAddress,
134
+ value,
135
+ data,
136
+ gas: gasParam,
137
+ });
138
+ return hash;
139
+ }
140
+ const signer = new Wallet(privateKey, context.ethers().provider);
141
+ const { hash } = await signer.sendTransaction({
142
+ from: account.address,
143
+ to: contractAddress,
144
+ value: toHex(value),
145
+ data,
146
+ gasLimit: toHex(gasParam),
147
+ });
148
+ return hash;
149
+ }
150
+ throw new Error("This should never happen, if it does there's a logic error in the code");
151
+ }
152
+ export async function deployCreateCompiledContract(context, contractName, options) {
153
+ const { abi, bytecode, methods } = fetchCompiledContract(contractName);
154
+ const { privateKey = ALITH_PRIVATE_KEY, args = [], ...rest } = options || {};
155
+ const blob = {
156
+ ...rest,
157
+ privateKey,
158
+ args,
159
+ };
160
+ const { contractAddress, logs, status, hash } = await deployViemContract(context, abi, bytecode, blob);
161
+ return {
162
+ contractAddress: contractAddress,
163
+ logs,
164
+ hash,
165
+ status,
166
+ abi,
167
+ bytecode,
168
+ methods,
169
+ };
170
+ }
@@ -0,0 +1,2 @@
1
+ export { fetchCompiledContract, recursiveSearch, interactWithPrecompileContract, interactWithContract, deployCreateCompiledContract, } from "./contractInteraction.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/contracts/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,8BAA8B,EAC9B,oBAAoB,EACpB,4BAA4B,GAC7B,iCAAiC"}
@@ -0,0 +1 @@
1
+ export { fetchCompiledContract, recursiveSearch, interactWithPrecompileContract, interactWithContract, deployCreateCompiledContract, } from "./contractInteraction.js";
@@ -0,0 +1,3 @@
1
+ import type { FoundationHandler } from "../../api/types/index.js";
2
+ export declare const chopsticksHandler: FoundationHandler<"chopsticks">;
3
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/foundations/chopsticks/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,iBAAiB,EAClB,iCAAiC;AAelC,eAAO,MAAM,iBAAiB,EAAE,iBAAiB,CAAC,YAAY,CA4G7D,CAAC"}
@@ -0,0 +1,93 @@
1
+ import { ALITH_PRIVATE_KEY, BALTATHAR_PRIVATE_KEY, CHARLETH_PRIVATE_KEY, DOROTHY_PRIVATE_KEY, jumpRoundsChopsticks, } from "../../util/index.js";
2
+ import { Keyring } from "@polkadot/api";
3
+ import { createChopsticksBlock, getWsUrlFromConfig, sendSetStorageRequest } from "./helpers.js";
4
+ import { getEnvironmentFromConfig } from "../../services/config/index.js";
5
+ import { MoonwallContext } from "../../cli/lib/globalContext.js";
6
+ import { upgradeRuntimeChopsticks } from "../../cli/lib/upgradeProcedures.js";
7
+ export const chopsticksHandler = ({ testCases, context, testCase, logger, }) => {
8
+ const accountTypeLookup = () => {
9
+ const metadata = ctx.polkadotJs().runtimeMetadata.asLatest;
10
+ const systemPalletIndex = metadata.pallets.findIndex((pallet) => pallet.name.toString() === "System");
11
+ const systemAccountStorageType = metadata.pallets[systemPalletIndex].storage
12
+ .unwrap()
13
+ .items.find((storage) => storage.name.toString() === "Account")?.type;
14
+ if (!systemAccountStorageType) {
15
+ throw new Error("System.Account storage not found");
16
+ }
17
+ return metadata.lookup.getTypeDef(systemAccountStorageType.asMap.key).type;
18
+ };
19
+ const newKeyring = () => {
20
+ const isEth = accountTypeLookup() === "AccountId20";
21
+ const keyring = new Keyring({
22
+ type: isEth ? "ethereum" : "sr25519",
23
+ });
24
+ return {
25
+ alice: keyring.addFromUri(isEth ? ALITH_PRIVATE_KEY : "//Alice", {
26
+ name: "Alice default",
27
+ }),
28
+ bob: keyring.addFromUri(isEth ? BALTATHAR_PRIVATE_KEY : "//Bob", {
29
+ name: "Bob default",
30
+ }),
31
+ charlie: keyring.addFromUri(isEth ? CHARLETH_PRIVATE_KEY : "//Charlie", {
32
+ name: "Charlie default",
33
+ }),
34
+ dave: keyring.addFromUri(isEth ? DOROTHY_PRIVATE_KEY : "//Dave", {
35
+ name: "Dave default",
36
+ }),
37
+ };
38
+ };
39
+ const ctx = {
40
+ ...context,
41
+ get isEthereumChain() {
42
+ return accountTypeLookup() === "AccountId20";
43
+ },
44
+ get isSubstrateChain() {
45
+ return accountTypeLookup() === "AccountId32";
46
+ },
47
+ get pjsApi() {
48
+ return context.polkadotJs();
49
+ },
50
+ get keyring() {
51
+ return newKeyring();
52
+ },
53
+ createBlock: async (options = {}) => {
54
+ // Get newBlockTimeout from foundation config if not provided in options
55
+ const env = getEnvironmentFromConfig();
56
+ const launchSpec = env.foundation.type === "chopsticks" ? env.foundation.launchSpec[0] : undefined;
57
+ const configTimeout = launchSpec?.newBlockTimeout;
58
+ return await createChopsticksBlock(context, {
59
+ ...options,
60
+ timeout: options.timeout ?? configTimeout,
61
+ });
62
+ },
63
+ setStorage: async (params) => await sendSetStorageRequest(params),
64
+ upgradeRuntime: async (providerName) => {
65
+ const path = (await MoonwallContext.getContext()).rtUpgradePath;
66
+ if (!path) {
67
+ throw new Error("No runtime upgrade path defined in config");
68
+ }
69
+ await upgradeRuntimeChopsticks(ctx, path, providerName);
70
+ },
71
+ jumpRounds: async (options) => {
72
+ const api = context.polkadotJs(options.providerName);
73
+ if (!containsPallet(api, "ParachainStaking")) {
74
+ throw new Error("ParachainStaking pallet is not enabled");
75
+ }
76
+ const wsUrl = await getWsUrlFromConfig(options.providerName);
77
+ const url = new URL(wsUrl);
78
+ const port = Number.parseInt(url.port, 10);
79
+ await jumpRoundsChopsticks(api, port, options.rounds);
80
+ },
81
+ };
82
+ testCases({
83
+ context: ctx,
84
+ it: testCase,
85
+ log: logger.info.bind(logger),
86
+ logger,
87
+ });
88
+ };
89
+ const containsPallet = (polkadotJsApi, palletName) => {
90
+ const metadata = polkadotJsApi.runtimeMetadata.asLatest;
91
+ const systemPalletIndex = metadata.pallets.findIndex((pallet) => pallet.name.toString() === palletName);
92
+ return systemPalletIndex !== -1;
93
+ };
@@ -0,0 +1,27 @@
1
+ import type { ChopsticksBlockCreation, GenericContext } from "../../api/types/index.js";
2
+ import type { WsProvider } from "@polkadot/api";
3
+ import type { ApiTypes, AugmentedEvent } from "@polkadot/api/types";
4
+ import type { EventRecord } from "@polkadot/types/interfaces";
5
+ export declare function getWsFromConfig(providerName?: string, timeout?: number): Promise<WsProvider>;
6
+ export declare function getWsUrlFromConfig(providerName?: string): Promise<string>;
7
+ export declare function sendNewBlockAndCheck(context: GenericContext, expectedEvents: AugmentedEvent<ApiTypes>[]): Promise<{
8
+ match: boolean;
9
+ events: EventRecord[];
10
+ }>;
11
+ export declare function createChopsticksBlock(context: GenericContext, options?: ChopsticksBlockCreation): Promise<{
12
+ result: string;
13
+ }>;
14
+ export declare function sendSetHeadRequest(newHead: string, providerName?: string): Promise<string>;
15
+ export declare function sendNewBlockRequest(params?: {
16
+ providerName?: string;
17
+ count?: number;
18
+ to?: number;
19
+ timeout?: number;
20
+ }): Promise<string>;
21
+ export declare function sendSetStorageRequest(params: {
22
+ providerName?: string;
23
+ module: string;
24
+ method: string;
25
+ methodParams: any[];
26
+ }): Promise<void>;
27
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/foundations/chopsticks/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,uBAAuB,EAAE,cAAc,EAAE,iCAAiC;AACxF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AAK9D,wBAAsB,eAAe,CACnC,YAAY,CAAC,EAAE,MAAM,EACrB,OAAO,CAAC,EAAE,MAAM,GACf,OAAO,CAAC,UAAU,CAAC,CA+BrB;AAED,wBAAsB,kBAAkB,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB/E;AAED,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,cAAc,CAAC,QAAQ,CAAC,EAAE,GACzC,OAAO,CAAC;IACT,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB,CAAC,CAoBD;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,cAAc,EACvB,OAAO,GAAE,uBAAkD;;GA4C5D;AAED,wBAAsB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,mBAW9E;AAED,wBAAsB,mBAAmB,CAAC,MAAM,CAAC,EAAE;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,mBAiBA;AAED,wBAAsB,qBAAqB,CAAC,MAAM,EAAE;IAClD,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,GAAG,EAAE,CAAC;CACrB,iBASA"}
@@ -0,0 +1,133 @@
1
+ import chalk from "chalk";
2
+ import { setTimeout } from "node:timers/promises";
3
+ import { MoonwallContext } from "../../cli/lib/globalContext.js";
4
+ export async function getWsFromConfig(providerName, timeout) {
5
+ if (providerName) {
6
+ const provider = (await MoonwallContext.getContext()).environment.providers.find(({ name }) => name === providerName);
7
+ if (typeof provider === "undefined") {
8
+ throw new Error(`Cannot find provider ${chalk.bgWhiteBright.blackBright(providerName)}`);
9
+ }
10
+ if (!provider.ws) {
11
+ throw new Error("Provider does not have an attached ws() property ");
12
+ }
13
+ return provider.ws(timeout);
14
+ }
15
+ const provider = (await MoonwallContext.getContext()).environment.providers.find(({ type }) => type === "polkadotJs");
16
+ if (typeof provider === "undefined") {
17
+ throw new Error(`Cannot find providers of type ${chalk.bgWhiteBright.blackBright("polkadotJs")}`);
18
+ }
19
+ if (!provider.ws) {
20
+ throw new Error("Provider does not have an attached ws() property ");
21
+ }
22
+ return provider.ws(timeout);
23
+ }
24
+ export async function getWsUrlFromConfig(providerName) {
25
+ // Import the environment config directly which has the connections property
26
+ const { getEnvironmentFromConfig } = await import("../../cli/lib/configReader.js");
27
+ const env = getEnvironmentFromConfig();
28
+ if (providerName) {
29
+ const connection = env.connections?.find(({ name }) => name === providerName);
30
+ if (connection?.endpoints && connection.endpoints.length > 0) {
31
+ return connection.endpoints[0];
32
+ }
33
+ }
34
+ // Default to first polkadotJs connection
35
+ const connection = env.connections?.find(({ type }) => type === "polkadotJs");
36
+ if (!connection || !connection.endpoints || connection.endpoints.length === 0) {
37
+ throw new Error("No WebSocket endpoint found in configuration");
38
+ }
39
+ return connection.endpoints[0];
40
+ }
41
+ export async function sendNewBlockAndCheck(context, expectedEvents) {
42
+ const newBlock = await sendNewBlockRequest();
43
+ const api = context.polkadotJs();
44
+ const apiAt = await api.at(newBlock);
45
+ const actualEvents = (await apiAt.query.system.events());
46
+ const match = expectedEvents.every((eEvt) => {
47
+ return actualEvents
48
+ .map((aEvt) => {
49
+ if (api.events.system.ExtrinsicSuccess.is(aEvt.event) &&
50
+ aEvt.event.data.dispatchInfo?.class?.toString() !== "Normal") {
51
+ return false;
52
+ }
53
+ return eEvt.is(aEvt.event);
54
+ })
55
+ .reduce((acc, curr) => acc || curr, false);
56
+ });
57
+ return { match, events: actualEvents };
58
+ }
59
+ export async function createChopsticksBlock(context, options = { allowFailures: false }) {
60
+ const result = await sendNewBlockRequest(options);
61
+ const apiAt = await context.polkadotJs(options.providerName).at(result);
62
+ const actualEvents = await apiAt.query.system.events();
63
+ if (options?.expectEvents) {
64
+ const match = options.expectEvents.every((eEvt) => {
65
+ const found = actualEvents
66
+ .map((aEvt) => eEvt.is(aEvt.event))
67
+ .reduce((acc, curr) => acc || curr, false);
68
+ if (!found) {
69
+ const message = `Event ${chalk.bgWhiteBright.blackBright(eEvt.meta.name)} not present in block`;
70
+ if (options.logger) {
71
+ // Handle both pino Logger (has .error) and LogFn (callable)
72
+ if ("error" in options.logger) {
73
+ options.logger.error(message);
74
+ }
75
+ else {
76
+ options.logger(message);
77
+ }
78
+ }
79
+ else {
80
+ console.error(message);
81
+ }
82
+ }
83
+ return found;
84
+ });
85
+ if (!match) {
86
+ throw new Error("Expected events not present in block");
87
+ }
88
+ }
89
+ if (options && options.allowFailures === true) {
90
+ // Skip ExtrinsicFailure Asserts
91
+ }
92
+ else {
93
+ for (const event of actualEvents) {
94
+ if (context.polkadotJs().events.system.ExtrinsicFailed.is(event.event)) {
95
+ throw new Error(`ExtrinsicFailed event detected, enable 'allowFailures' if this is expected.`);
96
+ }
97
+ }
98
+ }
99
+ return { result };
100
+ }
101
+ export async function sendSetHeadRequest(newHead, providerName) {
102
+ const ws = providerName ? await getWsFromConfig(providerName) : await getWsFromConfig();
103
+ let result = "";
104
+ await ws.isReady;
105
+ result = await ws.send("dev_setHead", [newHead]);
106
+ await ws.disconnect();
107
+ return result;
108
+ }
109
+ export async function sendNewBlockRequest(params) {
110
+ const ws = params
111
+ ? await getWsFromConfig(params.providerName, params.timeout)
112
+ : await getWsFromConfig();
113
+ let result = "";
114
+ while (!ws.isConnected) {
115
+ await setTimeout(100);
116
+ }
117
+ if (params?.count || params?.to) {
118
+ result = await ws.send("dev_newBlock", [{ count: params.count, to: params.to }]);
119
+ }
120
+ else {
121
+ result = await ws.send("dev_newBlock", [{ count: 1 }]);
122
+ }
123
+ await ws.disconnect();
124
+ return result;
125
+ }
126
+ export async function sendSetStorageRequest(params) {
127
+ const ws = params ? await getWsFromConfig(params.providerName) : await getWsFromConfig();
128
+ while (!ws.isConnected) {
129
+ await setTimeout(100);
130
+ }
131
+ await ws.send("dev_setStorage", [{ [params.module]: { [params.method]: params.methodParams } }]);
132
+ await ws.disconnect();
133
+ }
@@ -0,0 +1,3 @@
1
+ import type { FoundationHandler } from "../../api/types/index.js";
2
+ export declare const devHandler: FoundationHandler<"dev">;
3
+ //# sourceMappingURL=handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/foundations/dev/handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAQV,iBAAiB,EAGlB,iCAAiC;AAsBlC,eAAO,MAAM,UAAU,EAAE,iBAAiB,CAAC,KAAK,CA0K/C,CAAC"}
@@ -0,0 +1,136 @@
1
+ import { ALITH_PRIVATE_KEY, BALTATHAR_PRIVATE_KEY, CHARLETH_PRIVATE_KEY, DOROTHY_PRIVATE_KEY, alith, createEthersTransaction, createViemTransaction, jumpBlocksDev, jumpRoundsDev, } from "../../util/index.js";
2
+ import { Keyring } from "@polkadot/api";
3
+ import { createDevBlock } from "./helpers.js";
4
+ import { getEnvironmentFromConfig, isEthereumDevConfig } from "../../services/config/index.js";
5
+ import { deployCreateCompiledContract, interactWithContract, interactWithPrecompileContract, } from "../../contracts/index.js";
6
+ export const devHandler = ({ testCases, context, testCase, logger }) => {
7
+ const env = getEnvironmentFromConfig();
8
+ const ethCompatible = isEthereumDevConfig();
9
+ const accountTypeLookup = () => {
10
+ const metadata = ctx.polkadotJs().runtimeMetadata.asLatest;
11
+ const systemPalletIndex = metadata.pallets.findIndex((pallet) => pallet.name.toString() === "System");
12
+ const systemAccountStorage = metadata.pallets[systemPalletIndex].storage
13
+ .unwrap()
14
+ .items.find((storage) => storage.name.toString() === "Account");
15
+ if (!systemAccountStorage) {
16
+ throw new Error("Account storage not found");
17
+ }
18
+ const systemAccountStorageType = systemAccountStorage.type;
19
+ return metadata.lookup.getTypeDef(systemAccountStorageType.asMap.key).type;
20
+ };
21
+ const newKeyring = () => {
22
+ const isEth = accountTypeLookup() === "AccountId20";
23
+ const keyring = new Keyring({
24
+ type: isEth ? "ethereum" : "sr25519",
25
+ });
26
+ return {
27
+ alice: keyring.addFromUri(isEth ? ALITH_PRIVATE_KEY : "//Alice", {
28
+ name: "Alice default",
29
+ }),
30
+ bob: keyring.addFromUri(isEth ? BALTATHAR_PRIVATE_KEY : "//Bob", {
31
+ name: "Bob default",
32
+ }),
33
+ charlie: keyring.addFromUri(isEth ? CHARLETH_PRIVATE_KEY : "//Charlie", {
34
+ name: "Charlie default",
35
+ }),
36
+ dave: keyring.addFromUri(isEth ? DOROTHY_PRIVATE_KEY : "//Dave", {
37
+ name: "Dave default",
38
+ }),
39
+ };
40
+ };
41
+ const containsPallet = (palletName) => {
42
+ const metadata = context.polkadotJs().runtimeMetadata.asLatest;
43
+ const systemPalletIndex = metadata.pallets.findIndex((pallet) => pallet.name.toString() === palletName);
44
+ return systemPalletIndex !== -1;
45
+ };
46
+ const ctx = {
47
+ ...context,
48
+ get isEthereumChain() {
49
+ return accountTypeLookup() === "AccountId20";
50
+ },
51
+ get isSubstrateChain() {
52
+ return accountTypeLookup() === "AccountId32";
53
+ },
54
+ get pjsApi() {
55
+ return context.polkadotJs();
56
+ },
57
+ get isParachainStaking() {
58
+ return containsPallet("ParachainStaking");
59
+ },
60
+ get keyring() {
61
+ return newKeyring();
62
+ },
63
+ createBlock: async (transactions, options) => {
64
+ const defaults = {
65
+ signer: env.defaultSigner || alith,
66
+ allowFailures: env.defaultAllowFailures === undefined ? true : env.defaultAllowFailures,
67
+ finalize: env.defaultFinalization === undefined ? true : env.defaultFinalization,
68
+ };
69
+ return await createDevBlock(context, { ...defaults, ...options }, transactions);
70
+ },
71
+ createTxn: !ethCompatible
72
+ ? undefined
73
+ : (options) => {
74
+ const { libraryType = "viem", ...txnOptions } = options;
75
+ return libraryType === "viem"
76
+ ? createViemTransaction(ctx, txnOptions)
77
+ : createEthersTransaction(ctx, txnOptions);
78
+ },
79
+ readPrecompile: !ethCompatible
80
+ ? undefined
81
+ : async (options) => {
82
+ const response = await interactWithPrecompileContract(ctx, {
83
+ call: true,
84
+ ...options,
85
+ });
86
+ return response;
87
+ },
88
+ writePrecompile: !ethCompatible
89
+ ? undefined
90
+ : async (options) => {
91
+ const response = await interactWithPrecompileContract(ctx, {
92
+ call: false,
93
+ ...options,
94
+ });
95
+ return response;
96
+ },
97
+ readContract: !ethCompatible
98
+ ? undefined
99
+ : async (options) => {
100
+ const response = await interactWithContract(ctx, {
101
+ call: true,
102
+ ...options,
103
+ });
104
+ return response;
105
+ },
106
+ writeContract: !ethCompatible
107
+ ? undefined
108
+ : async (options) => {
109
+ const response = await interactWithContract(ctx, {
110
+ call: false,
111
+ ...options,
112
+ });
113
+ return response;
114
+ },
115
+ deployContract: !ethCompatible
116
+ ? undefined
117
+ : async (contractName, options) => {
118
+ return await deployCreateCompiledContract(ctx, contractName, options);
119
+ },
120
+ jumpBlocks: async (blocks) => {
121
+ await jumpBlocksDev(context.polkadotJs(), blocks);
122
+ },
123
+ jumpRounds: async (rounds) => {
124
+ if (!ctx.isParachainStaking) {
125
+ throw new Error("ParachainStaking pallet is not enabled");
126
+ }
127
+ await jumpRoundsDev(context.polkadotJs(), rounds);
128
+ },
129
+ };
130
+ testCases({
131
+ context: ctx,
132
+ it: testCase,
133
+ log: logger.info.bind(logger),
134
+ logger,
135
+ });
136
+ };
@@ -0,0 +1,27 @@
1
+ import type { BlockCreation, ExtrinsicCreation, GenericContext } from "../../api/types/index.js";
2
+ import type { ApiTypes, SubmittableExtrinsic } from "@polkadot/api/types";
3
+ export declare function getDevProviderPath(): Promise<string>;
4
+ export type CreatedBlockResult = {
5
+ block: {
6
+ duration: number;
7
+ hash: string;
8
+ };
9
+ result: ExtrinsicCreation | ExtrinsicCreation[] | null;
10
+ };
11
+ export type CallType<TApi extends ApiTypes> = SubmittableExtrinsic<TApi> | Promise<SubmittableExtrinsic<TApi>> | `0x${string}` | Promise<string>;
12
+ export declare function createDevBlock<ApiType extends ApiTypes, Calls extends CallType<ApiType> | Array<CallType<ApiType>>>(context: GenericContext, options: BlockCreation, transactions?: Calls): Promise<{
13
+ block: {
14
+ duration: number;
15
+ hash: string;
16
+ proofSize?: number;
17
+ };
18
+ result?: undefined;
19
+ } | {
20
+ block: {
21
+ duration: number;
22
+ hash: string;
23
+ proofSize?: number;
24
+ };
25
+ result: any;
26
+ }>;
27
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../src/foundations/dev/helpers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EAEb,iBAAiB,EACjB,cAAc,EACf,iCAAiC;AAQlC,OAAO,KAAK,EAAE,QAAQ,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAa1E,wBAAsB,kBAAkB,oBAKvC;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE;QACL,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE,iBAAiB,GAAG,iBAAiB,EAAE,GAAG,IAAI,CAAC;CACxD,CAAC;AAEF,MAAM,MAAM,QAAQ,CAAC,IAAI,SAAS,QAAQ,IACtC,oBAAoB,CAAC,IAAI,CAAC,GAC1B,OAAO,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC,GACnC,KAAK,MAAM,EAAE,GACb,OAAO,CAAC,MAAM,CAAC,CAAC;AAgBpB,wBAAsB,cAAc,CAClC,OAAO,SAAS,QAAQ,EACxB,KAAK,SAAS,QAAQ,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,EAC1D,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,KAAK;;;;;;;;;;;;;;GAqKtE"}