gate-evm-tools 1.0.26 → 1.0.28

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 (338) hide show
  1. package/README.md +14 -0
  2. package/bin/workflow.cjs +19 -0
  3. package/dist/core/BytecodeChecker.d.ts.map +1 -1
  4. package/dist/core/BytecodeChecker.js +16 -1
  5. package/dist/core/BytecodeChecker.js.map +1 -1
  6. package/dist/core/legacyProxyArtifact.d.ts +6 -0
  7. package/dist/core/legacyProxyArtifact.d.ts.map +1 -0
  8. package/dist/core/legacyProxyArtifact.js +36 -0
  9. package/dist/core/legacyProxyArtifact.js.map +1 -0
  10. package/dist-runtime/config/hardhatAdapters.d.ts +7 -0
  11. package/dist-runtime/config/hardhatAdapters.js +61 -0
  12. package/dist-runtime/config/hardhatAdapters.js.map +1 -0
  13. package/dist-runtime/config/networks.d.ts +32 -0
  14. package/dist-runtime/config/networks.js +275 -0
  15. package/dist-runtime/config/networks.js.map +1 -0
  16. package/dist-runtime/config/openzeppelin.d.ts +28 -0
  17. package/dist-runtime/config/openzeppelin.js +144 -0
  18. package/dist-runtime/config/openzeppelin.js.map +1 -0
  19. package/dist-runtime/config/rpc.d.ts +7 -0
  20. package/dist-runtime/config/rpc.js +19 -0
  21. package/dist-runtime/config/rpc.js.map +1 -0
  22. package/dist-runtime/config/zksyncSolcPath.d.ts +1 -0
  23. package/dist-runtime/config/zksyncSolcPath.js +61 -0
  24. package/dist-runtime/config/zksyncSolcPath.js.map +1 -0
  25. package/dist-runtime/migrate.d.ts +13 -0
  26. package/dist-runtime/migrate.js +208 -0
  27. package/dist-runtime/migrate.js.map +1 -0
  28. package/dist-runtime/package.json +1 -0
  29. package/dist-runtime/projectHardhat.d.ts +4 -0
  30. package/dist-runtime/projectHardhat.js +16 -0
  31. package/dist-runtime/projectHardhat.js.map +1 -0
  32. package/dist-runtime/runtime-identity.json +4 -0
  33. package/dist-runtime/template-migration.json +293 -0
  34. package/dist-runtime/workflow/checkCode.d.ts +1 -0
  35. package/dist-runtime/workflow/checkCode.js +16 -0
  36. package/dist-runtime/workflow/checkCode.js.map +1 -0
  37. package/dist-runtime/workflow/checkCodeFinalize.d.ts +1 -0
  38. package/dist-runtime/workflow/checkCodeFinalize.js +11 -0
  39. package/dist-runtime/workflow/checkCodeFinalize.js.map +1 -0
  40. package/dist-runtime/workflow/checkCodePlan.d.ts +1 -0
  41. package/dist-runtime/workflow/checkCodePlan.js +11 -0
  42. package/dist-runtime/workflow/checkCodePlan.js.map +1 -0
  43. package/dist-runtime/workflow/cli.d.ts +1 -0
  44. package/dist-runtime/workflow/cli.js +302 -0
  45. package/dist-runtime/workflow/cli.js.map +1 -0
  46. package/dist-runtime/workflow/commitContractInfo.d.ts +1 -0
  47. package/dist-runtime/workflow/commitContractInfo.js +64 -0
  48. package/dist-runtime/workflow/commitContractInfo.js.map +1 -0
  49. package/dist-runtime/workflow/create2Hashes.d.ts +1 -0
  50. package/dist-runtime/workflow/create2Hashes.js +76 -0
  51. package/dist-runtime/workflow/create2Hashes.js.map +1 -0
  52. package/dist-runtime/workflow/forkSourceProxy.d.ts +1 -0
  53. package/dist-runtime/workflow/forkSourceProxy.js +151 -0
  54. package/dist-runtime/workflow/forkSourceProxy.js.map +1 -0
  55. package/dist-runtime/workflow/importState.d.ts +1 -0
  56. package/dist-runtime/workflow/importState.js +193 -0
  57. package/dist-runtime/workflow/importState.js.map +1 -0
  58. package/dist-runtime/workflow/lib/authority.d.ts +28 -0
  59. package/dist-runtime/workflow/lib/authority.js +122 -0
  60. package/dist-runtime/workflow/lib/authority.js.map +1 -0
  61. package/dist-runtime/workflow/lib/calldata.d.ts +2 -0
  62. package/dist-runtime/workflow/lib/calldata.js +8 -0
  63. package/dist-runtime/workflow/lib/calldata.js.map +1 -0
  64. package/dist-runtime/workflow/lib/calls.d.ts +23 -0
  65. package/dist-runtime/workflow/lib/calls.js +316 -0
  66. package/dist-runtime/workflow/lib/calls.js.map +1 -0
  67. package/dist-runtime/workflow/lib/checkCode/args.d.ts +2 -0
  68. package/dist-runtime/workflow/lib/checkCode/args.js +68 -0
  69. package/dist-runtime/workflow/lib/checkCode/args.js.map +1 -0
  70. package/dist-runtime/workflow/lib/checkCode/command.d.ts +5 -0
  71. package/dist-runtime/workflow/lib/checkCode/command.js +35 -0
  72. package/dist-runtime/workflow/lib/checkCode/command.js.map +1 -0
  73. package/dist-runtime/workflow/lib/checkCode/dependencies.d.ts +6 -0
  74. package/dist-runtime/workflow/lib/checkCode/dependencies.js +125 -0
  75. package/dist-runtime/workflow/lib/checkCode/dependencies.js.map +1 -0
  76. package/dist-runtime/workflow/lib/checkCode/finalize.d.ts +17 -0
  77. package/dist-runtime/workflow/lib/checkCode/finalize.js +174 -0
  78. package/dist-runtime/workflow/lib/checkCode/finalize.js.map +1 -0
  79. package/dist-runtime/workflow/lib/checkCode/index.d.ts +3 -0
  80. package/dist-runtime/workflow/lib/checkCode/index.js +20 -0
  81. package/dist-runtime/workflow/lib/checkCode/index.js.map +1 -0
  82. package/dist-runtime/workflow/lib/checkCode/plan.d.ts +22 -0
  83. package/dist-runtime/workflow/lib/checkCode/plan.js +145 -0
  84. package/dist-runtime/workflow/lib/checkCode/plan.js.map +1 -0
  85. package/dist-runtime/workflow/lib/checkCodeReport.d.ts +25 -0
  86. package/dist-runtime/workflow/lib/checkCodeReport.js +102 -0
  87. package/dist-runtime/workflow/lib/checkCodeReport.js.map +1 -0
  88. package/dist-runtime/workflow/lib/checkCodeRunner.d.ts +87 -0
  89. package/dist-runtime/workflow/lib/checkCodeRunner.js +964 -0
  90. package/dist-runtime/workflow/lib/checkCodeRunner.js.map +1 -0
  91. package/dist-runtime/workflow/lib/cliTool.d.ts +10 -0
  92. package/dist-runtime/workflow/lib/cliTool.js +25 -0
  93. package/dist-runtime/workflow/lib/cliTool.js.map +1 -0
  94. package/dist-runtime/workflow/lib/config.d.ts +33 -0
  95. package/dist-runtime/workflow/lib/config.js +100 -0
  96. package/dist-runtime/workflow/lib/config.js.map +1 -0
  97. package/dist-runtime/workflow/lib/contractInfoCandidates.d.ts +82 -0
  98. package/dist-runtime/workflow/lib/contractInfoCandidates.js +441 -0
  99. package/dist-runtime/workflow/lib/contractInfoCandidates.js.map +1 -0
  100. package/dist-runtime/workflow/lib/controlledMulticallAbi.d.ts +2 -0
  101. package/dist-runtime/workflow/lib/controlledMulticallAbi.js +10 -0
  102. package/dist-runtime/workflow/lib/controlledMulticallAbi.js.map +1 -0
  103. package/dist-runtime/workflow/lib/create2.d.ts +49 -0
  104. package/dist-runtime/workflow/lib/create2.js +194 -0
  105. package/dist-runtime/workflow/lib/create2.js.map +1 -0
  106. package/dist-runtime/workflow/lib/create2Hashes.d.ts +22 -0
  107. package/dist-runtime/workflow/lib/create2Hashes.js +57 -0
  108. package/dist-runtime/workflow/lib/create2Hashes.js.map +1 -0
  109. package/dist-runtime/workflow/lib/deploymentInfo.d.ts +40 -0
  110. package/dist-runtime/workflow/lib/deploymentInfo.js +240 -0
  111. package/dist-runtime/workflow/lib/deploymentInfo.js.map +1 -0
  112. package/dist-runtime/workflow/lib/deploymentRecords.d.ts +137 -0
  113. package/dist-runtime/workflow/lib/deploymentRecords.js +374 -0
  114. package/dist-runtime/workflow/lib/deploymentRecords.js.map +1 -0
  115. package/dist-runtime/workflow/lib/deployments.d.ts +21 -0
  116. package/dist-runtime/workflow/lib/deployments.js +240 -0
  117. package/dist-runtime/workflow/lib/deployments.js.map +1 -0
  118. package/dist-runtime/workflow/lib/erc1967.d.ts +5 -0
  119. package/dist-runtime/workflow/lib/erc1967.js +29 -0
  120. package/dist-runtime/workflow/lib/erc1967.js.map +1 -0
  121. package/dist-runtime/workflow/lib/errors.d.ts +6 -0
  122. package/dist-runtime/workflow/lib/errors.js +77 -0
  123. package/dist-runtime/workflow/lib/errors.js.map +1 -0
  124. package/dist-runtime/workflow/lib/executionId.d.ts +7 -0
  125. package/dist-runtime/workflow/lib/executionId.js +26 -0
  126. package/dist-runtime/workflow/lib/executionId.js.map +1 -0
  127. package/dist-runtime/workflow/lib/executionPlan.d.ts +85 -0
  128. package/dist-runtime/workflow/lib/executionPlan.js +450 -0
  129. package/dist-runtime/workflow/lib/executionPlan.js.map +1 -0
  130. package/dist-runtime/workflow/lib/executionProgress.d.ts +5 -0
  131. package/dist-runtime/workflow/lib/executionProgress.js +100 -0
  132. package/dist-runtime/workflow/lib/executionProgress.js.map +1 -0
  133. package/dist-runtime/workflow/lib/external.d.ts +62 -0
  134. package/dist-runtime/workflow/lib/external.js +282 -0
  135. package/dist-runtime/workflow/lib/external.js.map +1 -0
  136. package/dist-runtime/workflow/lib/externalExecutionScanner.d.ts +64 -0
  137. package/dist-runtime/workflow/lib/externalExecutionScanner.js +638 -0
  138. package/dist-runtime/workflow/lib/externalExecutionScanner.js.map +1 -0
  139. package/dist-runtime/workflow/lib/forkSnapshot.d.ts +34 -0
  140. package/dist-runtime/workflow/lib/forkSnapshot.js +167 -0
  141. package/dist-runtime/workflow/lib/forkSnapshot.js.map +1 -0
  142. package/dist-runtime/workflow/lib/gateTool.d.ts +16 -0
  143. package/dist-runtime/workflow/lib/gateTool.js +177 -0
  144. package/dist-runtime/workflow/lib/gateTool.js.map +1 -0
  145. package/dist-runtime/workflow/lib/gateToolSync.d.ts +22 -0
  146. package/dist-runtime/workflow/lib/gateToolSync.js +253 -0
  147. package/dist-runtime/workflow/lib/gateToolSync.js.map +1 -0
  148. package/dist-runtime/workflow/lib/lock.d.ts +52 -0
  149. package/dist-runtime/workflow/lib/lock.js +269 -0
  150. package/dist-runtime/workflow/lib/lock.js.map +1 -0
  151. package/dist-runtime/workflow/lib/migrationState.d.ts +103 -0
  152. package/dist-runtime/workflow/lib/migrationState.js +920 -0
  153. package/dist-runtime/workflow/lib/migrationState.js.map +1 -0
  154. package/dist-runtime/workflow/lib/operatorExecution.d.ts +28 -0
  155. package/dist-runtime/workflow/lib/operatorExecution.js +134 -0
  156. package/dist-runtime/workflow/lib/operatorExecution.js.map +1 -0
  157. package/dist-runtime/workflow/lib/parameters.d.ts +58 -0
  158. package/dist-runtime/workflow/lib/parameters.js +323 -0
  159. package/dist-runtime/workflow/lib/parameters.js.map +1 -0
  160. package/dist-runtime/workflow/lib/pendingDeploymentReuse.d.ts +29 -0
  161. package/dist-runtime/workflow/lib/pendingDeploymentReuse.js +277 -0
  162. package/dist-runtime/workflow/lib/pendingDeploymentReuse.js.map +1 -0
  163. package/dist-runtime/workflow/lib/proxy.d.ts +18 -0
  164. package/dist-runtime/workflow/lib/proxy.js +19 -0
  165. package/dist-runtime/workflow/lib/proxy.js.map +1 -0
  166. package/dist-runtime/workflow/lib/registryCommit.d.ts +33 -0
  167. package/dist-runtime/workflow/lib/registryCommit.js +319 -0
  168. package/dist-runtime/workflow/lib/registryCommit.js.map +1 -0
  169. package/dist-runtime/workflow/lib/release.d.ts +57 -0
  170. package/dist-runtime/workflow/lib/release.js +256 -0
  171. package/dist-runtime/workflow/lib/release.js.map +1 -0
  172. package/dist-runtime/workflow/lib/releaseFinalize.d.ts +14 -0
  173. package/dist-runtime/workflow/lib/releaseFinalize.js +571 -0
  174. package/dist-runtime/workflow/lib/releaseFinalize.js.map +1 -0
  175. package/dist-runtime/workflow/lib/releaseParameters.d.ts +43 -0
  176. package/dist-runtime/workflow/lib/releaseParameters.js +184 -0
  177. package/dist-runtime/workflow/lib/releaseParameters.js.map +1 -0
  178. package/dist-runtime/workflow/lib/reporter.d.ts +39 -0
  179. package/dist-runtime/workflow/lib/reporter.js +452 -0
  180. package/dist-runtime/workflow/lib/reporter.js.map +1 -0
  181. package/dist-runtime/workflow/lib/resultPaths.d.ts +17 -0
  182. package/dist-runtime/workflow/lib/resultPaths.js +29 -0
  183. package/dist-runtime/workflow/lib/resultPaths.js.map +1 -0
  184. package/dist-runtime/workflow/lib/runtimeVersion.d.ts +10 -0
  185. package/dist-runtime/workflow/lib/runtimeVersion.js +46 -0
  186. package/dist-runtime/workflow/lib/runtimeVersion.js.map +1 -0
  187. package/dist-runtime/workflow/lib/signer.d.ts +10 -0
  188. package/dist-runtime/workflow/lib/signer.js +105 -0
  189. package/dist-runtime/workflow/lib/signer.js.map +1 -0
  190. package/dist-runtime/workflow/lib/signerIdentity.d.ts +1 -0
  191. package/dist-runtime/workflow/lib/signerIdentity.js +23 -0
  192. package/dist-runtime/workflow/lib/signerIdentity.js.map +1 -0
  193. package/dist-runtime/workflow/lib/simulation.d.ts +35 -0
  194. package/dist-runtime/workflow/lib/simulation.js +282 -0
  195. package/dist-runtime/workflow/lib/simulation.js.map +1 -0
  196. package/dist-runtime/workflow/lib/simulationCallers.d.ts +44 -0
  197. package/dist-runtime/workflow/lib/simulationCallers.js +260 -0
  198. package/dist-runtime/workflow/lib/simulationCallers.js.map +1 -0
  199. package/dist-runtime/workflow/lib/sourceRpcPolicy.d.ts +1 -0
  200. package/dist-runtime/workflow/lib/sourceRpcPolicy.js +43 -0
  201. package/dist-runtime/workflow/lib/sourceRpcPolicy.js.map +1 -0
  202. package/dist-runtime/workflow/lib/state.d.ts +6 -0
  203. package/dist-runtime/workflow/lib/state.js +25 -0
  204. package/dist-runtime/workflow/lib/state.js.map +1 -0
  205. package/dist-runtime/workflow/lib/staticValidation.d.ts +22 -0
  206. package/dist-runtime/workflow/lib/staticValidation.js +124 -0
  207. package/dist-runtime/workflow/lib/staticValidation.js.map +1 -0
  208. package/dist-runtime/workflow/lib/zksyncForkCapability.d.ts +27 -0
  209. package/dist-runtime/workflow/lib/zksyncForkCapability.js +52 -0
  210. package/dist-runtime/workflow/lib/zksyncForkCapability.js.map +1 -0
  211. package/dist-runtime/workflow/lib/zksyncForkRunner.d.ts +57 -0
  212. package/dist-runtime/workflow/lib/zksyncForkRunner.js +344 -0
  213. package/dist-runtime/workflow/lib/zksyncForkRunner.js.map +1 -0
  214. package/dist-runtime/workflow/reconcileExternal.d.ts +1 -0
  215. package/dist-runtime/workflow/reconcileExternal.js +87 -0
  216. package/dist-runtime/workflow/reconcileExternal.js.map +1 -0
  217. package/dist-runtime/workflow/reconcileExternalRun.d.ts +1 -0
  218. package/dist-runtime/workflow/reconcileExternalRun.js +77 -0
  219. package/dist-runtime/workflow/reconcileExternalRun.js.map +1 -0
  220. package/dist-runtime/workflow/releaseFinalize.d.ts +1 -0
  221. package/dist-runtime/workflow/releaseFinalize.js +11 -0
  222. package/dist-runtime/workflow/releaseFinalize.js.map +1 -0
  223. package/dist-runtime/workflow/run.d.ts +40 -0
  224. package/dist-runtime/workflow/run.js +858 -0
  225. package/dist-runtime/workflow/run.js.map +1 -0
  226. package/dist-runtime/workflow/staticValidate.d.ts +1 -0
  227. package/dist-runtime/workflow/staticValidate.js +26 -0
  228. package/dist-runtime/workflow/staticValidate.js.map +1 -0
  229. package/dist-runtime/workflow/steps/call.d.ts +3 -0
  230. package/dist-runtime/workflow/steps/call.js +9 -0
  231. package/dist-runtime/workflow/steps/call.js.map +1 -0
  232. package/dist-runtime/workflow/steps/check.d.ts +3 -0
  233. package/dist-runtime/workflow/steps/check.js +9 -0
  234. package/dist-runtime/workflow/steps/check.js.map +1 -0
  235. package/dist-runtime/workflow/steps/custom.d.ts +3 -0
  236. package/dist-runtime/workflow/steps/custom.js +33 -0
  237. package/dist-runtime/workflow/steps/custom.js.map +1 -0
  238. package/dist-runtime/workflow/steps/deploy.d.ts +3 -0
  239. package/dist-runtime/workflow/steps/deploy.js +596 -0
  240. package/dist-runtime/workflow/steps/deploy.js.map +1 -0
  241. package/dist-runtime/workflow/steps/upgrade.d.ts +3 -0
  242. package/dist-runtime/workflow/steps/upgrade.js +466 -0
  243. package/dist-runtime/workflow/steps/upgrade.js.map +1 -0
  244. package/dist-runtime/workflow/steps/view.d.ts +3 -0
  245. package/dist-runtime/workflow/steps/view.js +9 -0
  246. package/dist-runtime/workflow/steps/view.js.map +1 -0
  247. package/docs/direct-package-acceptance.md +20 -0
  248. package/docs/external-infrastructure-acceptance.md +33 -0
  249. package/docs/network-runtime-acceptance.md +18 -0
  250. package/docs/plans/2026-09-09-workflow-extraction.md +16 -0
  251. package/docs/superpowers/plans/2026-07-22-manifest-bootstrap-transaction.md +50 -0
  252. package/docs/superpowers/plans/2026-07-22-manifest-review-remediation.md +49 -0
  253. package/docs/superpowers/plans/2026-08-17-custody-hardhat-signers.md +227 -0
  254. package/docs/superpowers/plans/2026-09-09-remove-template-infrastructure-contracts.md +11 -0
  255. package/docs/workflow-reference.md +1181 -0
  256. package/docs/workflow-runtime-acceptance.md +17 -0
  257. package/docs/workflow-runtime.md +56 -0
  258. package/package.json +26 -5
  259. package/runtime/config/hardhatAdapters.ts +58 -0
  260. package/runtime/config/networks.ts +305 -0
  261. package/runtime/config/openzeppelin.ts +173 -0
  262. package/runtime/config/rpc.ts +27 -0
  263. package/runtime/config/zksyncSolcPath.ts +59 -0
  264. package/runtime/hardhat-types.d.ts +2 -0
  265. package/runtime/migrate.ts +154 -0
  266. package/runtime/projectHardhat.ts +10 -0
  267. package/runtime/template-migration.json +293 -0
  268. package/runtime/workflow/checkCode.ts +13 -0
  269. package/runtime/workflow/checkCodeFinalize.ts +8 -0
  270. package/runtime/workflow/checkCodePlan.ts +8 -0
  271. package/runtime/workflow/cli.ts +356 -0
  272. package/runtime/workflow/commitContractInfo.ts +63 -0
  273. package/runtime/workflow/create2Hashes.ts +79 -0
  274. package/runtime/workflow/forkSourceProxy.ts +193 -0
  275. package/runtime/workflow/importState.ts +190 -0
  276. package/runtime/workflow/lib/authority.ts +170 -0
  277. package/runtime/workflow/lib/calldata.ts +9 -0
  278. package/runtime/workflow/lib/calls.ts +407 -0
  279. package/runtime/workflow/lib/checkCode/args.ts +76 -0
  280. package/runtime/workflow/lib/checkCode/command.ts +36 -0
  281. package/runtime/workflow/lib/checkCode/dependencies.ts +112 -0
  282. package/runtime/workflow/lib/checkCode/finalize.ts +198 -0
  283. package/runtime/workflow/lib/checkCode/index.ts +18 -0
  284. package/runtime/workflow/lib/checkCode/plan.ts +163 -0
  285. package/runtime/workflow/lib/checkCodeReport.ts +133 -0
  286. package/runtime/workflow/lib/checkCodeRunner.ts +1225 -0
  287. package/runtime/workflow/lib/cliTool.ts +31 -0
  288. package/runtime/workflow/lib/config.ts +130 -0
  289. package/runtime/workflow/lib/contractInfoCandidates.ts +690 -0
  290. package/runtime/workflow/lib/controlledMulticallAbi.ts +6 -0
  291. package/runtime/workflow/lib/create2.ts +278 -0
  292. package/runtime/workflow/lib/create2Hashes.ts +83 -0
  293. package/runtime/workflow/lib/deploymentInfo.ts +286 -0
  294. package/runtime/workflow/lib/deploymentRecords.ts +576 -0
  295. package/runtime/workflow/lib/deployments.ts +276 -0
  296. package/runtime/workflow/lib/erc1967.ts +57 -0
  297. package/runtime/workflow/lib/errors.ts +95 -0
  298. package/runtime/workflow/lib/executionId.ts +35 -0
  299. package/runtime/workflow/lib/executionPlan.ts +550 -0
  300. package/runtime/workflow/lib/executionProgress.ts +127 -0
  301. package/runtime/workflow/lib/external.ts +372 -0
  302. package/runtime/workflow/lib/externalExecutionScanner.ts +892 -0
  303. package/runtime/workflow/lib/forkSnapshot.ts +231 -0
  304. package/runtime/workflow/lib/gateTool.ts +261 -0
  305. package/runtime/workflow/lib/gateToolSync.ts +398 -0
  306. package/runtime/workflow/lib/lock.ts +388 -0
  307. package/runtime/workflow/lib/migrationState.ts +1246 -0
  308. package/runtime/workflow/lib/operatorExecution.ts +174 -0
  309. package/runtime/workflow/lib/parameters.ts +438 -0
  310. package/runtime/workflow/lib/pendingDeploymentReuse.ts +428 -0
  311. package/runtime/workflow/lib/proxy.ts +45 -0
  312. package/runtime/workflow/lib/registryCommit.ts +455 -0
  313. package/runtime/workflow/lib/release.ts +329 -0
  314. package/runtime/workflow/lib/releaseFinalize.ts +711 -0
  315. package/runtime/workflow/lib/releaseParameters.ts +248 -0
  316. package/runtime/workflow/lib/reporter.ts +502 -0
  317. package/runtime/workflow/lib/resultPaths.ts +49 -0
  318. package/runtime/workflow/lib/runtimeVersion.ts +28 -0
  319. package/runtime/workflow/lib/signer.ts +124 -0
  320. package/runtime/workflow/lib/signerIdentity.ts +22 -0
  321. package/runtime/workflow/lib/simulation.ts +415 -0
  322. package/runtime/workflow/lib/simulationCallers.ts +335 -0
  323. package/runtime/workflow/lib/sourceRpcPolicy.ts +41 -0
  324. package/runtime/workflow/lib/state.ts +25 -0
  325. package/runtime/workflow/lib/staticValidation.ts +142 -0
  326. package/runtime/workflow/lib/zksyncForkCapability.ts +80 -0
  327. package/runtime/workflow/lib/zksyncForkRunner.ts +505 -0
  328. package/runtime/workflow/reconcileExternal.ts +86 -0
  329. package/runtime/workflow/reconcileExternalRun.ts +88 -0
  330. package/runtime/workflow/releaseFinalize.ts +8 -0
  331. package/runtime/workflow/run.ts +1072 -0
  332. package/runtime/workflow/staticValidate.ts +23 -0
  333. package/runtime/workflow/steps/call.ts +10 -0
  334. package/runtime/workflow/steps/check.ts +10 -0
  335. package/runtime/workflow/steps/custom.ts +43 -0
  336. package/runtime/workflow/steps/deploy.ts +772 -0
  337. package/runtime/workflow/steps/upgrade.ts +599 -0
  338. package/runtime/workflow/steps/view.ts +10 -0
@@ -0,0 +1,22 @@
1
+ import { getAddress, isAddress, ZeroAddress } from "ethers";
2
+
3
+ const normalizedAddress = (value: string, label: string): string => {
4
+ const candidate = value.trim();
5
+ if (!isAddress(candidate) || getAddress(candidate) === ZeroAddress) {
6
+ throw new Error(`${label} must be a valid non-zero EVM address`);
7
+ }
8
+ return getAddress(candidate);
9
+ };
10
+
11
+ export const assertExecutionSignerAddress = (
12
+ actualAddress: string,
13
+ expectedTaskAddress?: string,
14
+ ): string => {
15
+ const actual = normalizedAddress(actualAddress, "execution signer");
16
+ if (expectedTaskAddress === undefined) return actual;
17
+ const expected = normalizedAddress(expectedTaskAddress, "deployment signer address");
18
+ if (actual.toLowerCase() !== expected.toLowerCase()) {
19
+ throw new Error("execution signer does not match deployment signer address");
20
+ }
21
+ return actual;
22
+ };
@@ -0,0 +1,415 @@
1
+ import { isAddress } from "ethers";
2
+ import { config as hardhatConfig, ethers, network } from "../../projectHardhat";
3
+ import {
4
+ CapturedChainSnapshotV1,
5
+ ForkSnapshotV1,
6
+ isCapturedZkSyncChainSnapshot,
7
+ parseForkSnapshotJson,
8
+ parseZkSyncBlockDetails,
9
+ } from "./forkSnapshot";
10
+ import { getERC1967Implementation } from "./erc1967";
11
+ import { resolveZkSyncForkCapability } from "./zksyncForkCapability";
12
+ import { resolveZkSyncForkRunner } from "./zksyncForkRunner";
13
+
14
+ export type WorkflowMode = "execute" | "simulate" | "verify";
15
+
16
+ export interface SimulationFork {
17
+ snapshot?: ForkSnapshotV1;
18
+ }
19
+
20
+ type WithoutVersion<T> = T extends unknown ? Omit<T, "version"> : never;
21
+
22
+ type ZkSyncForkSnapshot = Extract<
23
+ ForkSnapshotV1,
24
+ { runner: { kind: "anvil-zksync" } }
25
+ >;
26
+ type EvmForkSnapshot = Exclude<ForkSnapshotV1, ZkSyncForkSnapshot>;
27
+
28
+ export type SimulationForkEvidence =
29
+ | WithoutVersion<EvmForkSnapshot>
30
+ | (WithoutVersion<ZkSyncForkSnapshot> & { runnerProtocolVersion: number });
31
+
32
+ export const resolveWorkflowMode = (
33
+ args: Record<string, string | boolean>,
34
+ ): WorkflowMode => {
35
+ const mode = typeof args.mode === "string" ? args.mode : "execute";
36
+ if (
37
+ mode !== "execute"
38
+ && mode !== "simulate"
39
+ && mode !== "verify"
40
+ ) {
41
+ throw new Error(`Unsupported workflow mode: ${mode}`);
42
+ }
43
+ return mode;
44
+ };
45
+
46
+ const sourceProxyUrl = (): string => {
47
+ const value = process.env.GATE_SIMULATION_SOURCE_RPC_URL?.trim();
48
+ if (!value) throw new Error("Simulation source-chain proxy URL is missing");
49
+ let parsed: URL;
50
+ try {
51
+ parsed = new URL(value);
52
+ } catch {
53
+ throw new Error("Simulation source-chain proxy URL is invalid");
54
+ }
55
+ if (
56
+ parsed.protocol !== "http:"
57
+ || parsed.hostname !== "127.0.0.1"
58
+ || !parsed.port
59
+ || parsed.pathname === "/"
60
+ || parsed.username
61
+ || parsed.password
62
+ || parsed.search
63
+ || parsed.hash
64
+ ) {
65
+ throw new Error("Simulation source-chain proxy must use a tokenized loopback URL");
66
+ }
67
+ return parsed.toString();
68
+ };
69
+
70
+ const rpcRequest = async <T>(
71
+ url: string,
72
+ method: string,
73
+ params: unknown[],
74
+ ): Promise<T> => {
75
+ let response: Response;
76
+ try {
77
+ response = await fetch(url, {
78
+ method: "POST",
79
+ headers: { "content-type": "application/json" },
80
+ body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }),
81
+ });
82
+ } catch {
83
+ throw new Error(`Simulation source RPC ${method} request failed`);
84
+ }
85
+ if (!response.ok) {
86
+ throw new Error(`Simulation source RPC ${method} request failed`);
87
+ }
88
+ let body: unknown;
89
+ try {
90
+ body = await response.json();
91
+ } catch {
92
+ throw new Error(`Simulation source RPC ${method} returned invalid JSON`);
93
+ }
94
+ if (!body || typeof body !== "object" || Array.isArray(body)) {
95
+ throw new Error(`Simulation source RPC ${method} returned an invalid response`);
96
+ }
97
+ const envelope = body as { result?: T; error?: unknown };
98
+ if (envelope.error !== undefined || envelope.result === undefined) {
99
+ throw new Error(`Simulation source RPC ${method} failed`);
100
+ }
101
+ return envelope.result;
102
+ };
103
+
104
+ const blockTag = (blockNumber: number): string => `0x${blockNumber.toString(16)}`;
105
+
106
+ const rpcQuantity = (value: unknown, label: string): number => {
107
+ if (typeof value !== "string" || !/^0x(?:0|[1-9a-fA-F][0-9a-fA-F]*)$/.test(value)) {
108
+ throw new Error(`${label} must be a canonical RPC quantity`);
109
+ }
110
+ const parsed = BigInt(value);
111
+ if (parsed > BigInt(Number.MAX_SAFE_INTEGER)) {
112
+ throw new Error(`${label} exceeds the safe integer range`);
113
+ }
114
+ return Number(parsed);
115
+ };
116
+
117
+ const assertBlockHash = (
118
+ block: unknown,
119
+ snapshot: CapturedChainSnapshotV1,
120
+ label: string,
121
+ ): void => {
122
+ if (!block || typeof block !== "object" || Array.isArray(block)) {
123
+ throw new Error(`${label} fork block is missing`);
124
+ }
125
+ const hash = (block as { hash?: unknown }).hash;
126
+ if (
127
+ typeof hash !== "string"
128
+ || hash.toLowerCase() !== snapshot.blockHash.toLowerCase()
129
+ ) {
130
+ throw new Error(`${label} fork block hash mismatch at ${snapshot.blockNumber}`);
131
+ }
132
+ };
133
+
134
+ interface SimulationInfrastructureTarget {
135
+ create2?: { factory?: string };
136
+ multicall?: { controlledMulticall?: string };
137
+ uups?: { placeholderImplementation?: string };
138
+ }
139
+
140
+ const requiredInfrastructureAddress = (
141
+ value: string | undefined,
142
+ label: string,
143
+ ): string => {
144
+ if (!value || !isAddress(value)) {
145
+ throw new Error(`${label} must be configured as an EVM address for simulation`);
146
+ }
147
+ return value;
148
+ };
149
+
150
+ export const assertCurrentStateInfrastructure = async (
151
+ targetId: string,
152
+ target: SimulationInfrastructureTarget,
153
+ snapshot: CapturedChainSnapshotV1 | undefined,
154
+ ): Promise<void> => {
155
+ if (!snapshot) return;
156
+ const infrastructure = [
157
+ {
158
+ label: "CREATE2 Factory",
159
+ address: requiredInfrastructureAddress(target.create2?.factory, "CREATE2 Factory"),
160
+ },
161
+ {
162
+ label: "Controlled Multicall",
163
+ address: requiredInfrastructureAddress(
164
+ target.multicall?.controlledMulticall,
165
+ "Controlled Multicall",
166
+ ),
167
+ },
168
+ {
169
+ label: "UUPS Placeholder",
170
+ address: requiredInfrastructureAddress(
171
+ target.uups?.placeholderImplementation,
172
+ "UUPS Placeholder",
173
+ ),
174
+ },
175
+ ];
176
+ const code = await Promise.all(infrastructure.map((entry) => (
177
+ ethers.provider.getCode(entry.address, snapshot.blockNumber)
178
+ )));
179
+ for (const [index, entry] of infrastructure.entries()) {
180
+ if (!code[index] || code[index] === "0x") {
181
+ throw new Error(
182
+ `${entry.label} on ${targetId} captured block ${snapshot.blockNumber} is missing code at ${entry.address}`,
183
+ );
184
+ }
185
+ }
186
+ };
187
+
188
+ export const assertSimulationSourceInfrastructure = async (
189
+ targetId: string,
190
+ target: SimulationInfrastructureTarget,
191
+ simulation: SimulationFork,
192
+ ): Promise<void> => assertCurrentStateInfrastructure(targetId, target, simulation.snapshot);
193
+
194
+ export const assertCurrentStateUupsSourceState = async (
195
+ snapshot: CapturedChainSnapshotV1 | undefined,
196
+ proxy: string,
197
+ ): Promise<void> => {
198
+ if (!snapshot) return;
199
+ const [proxyCode, oldImplementation] = await Promise.all([
200
+ ethers.provider.getCode(proxy, snapshot.blockNumber),
201
+ getERC1967Implementation(ethers.provider, proxy, snapshot.blockNumber),
202
+ ]);
203
+ if (!proxyCode || proxyCode === "0x") {
204
+ throw new Error(
205
+ `UUPS proxy ${proxy} is missing code at captured block ${snapshot.blockNumber}`,
206
+ );
207
+ }
208
+ if (!oldImplementation) {
209
+ throw new Error(
210
+ `UUPS proxy ${proxy} has no implementation at captured block ${snapshot.blockNumber}`,
211
+ );
212
+ }
213
+ const implementationCode = await ethers.provider.getCode(
214
+ oldImplementation,
215
+ snapshot.blockNumber,
216
+ );
217
+ if (!implementationCode || implementationCode === "0x") {
218
+ throw new Error(
219
+ `UUPS implementation ${oldImplementation} is missing code at captured block ${snapshot.blockNumber}`,
220
+ );
221
+ }
222
+ };
223
+
224
+ export const assertSimulationUupsSourceState = async (
225
+ simulation: SimulationFork,
226
+ proxy: string,
227
+ ): Promise<void> => assertCurrentStateUupsSourceState(simulation.snapshot, proxy);
228
+
229
+ export const verifySimulationForkSnapshot = async (
230
+ simulation: SimulationFork,
231
+ ): Promise<void> => {
232
+ const snapshot = simulation.snapshot;
233
+ if (!snapshot) return;
234
+ const [sourceBlock, localBlock, sourceZkSyncBlockDetails] = await Promise.all([
235
+ rpcRequest<unknown>(
236
+ sourceProxyUrl(),
237
+ "eth_getBlockByNumber",
238
+ [blockTag(snapshot.blockNumber), false],
239
+ ),
240
+ network.provider.request({
241
+ method: "eth_getBlockByNumber",
242
+ params: [blockTag(snapshot.blockNumber), false],
243
+ }),
244
+ snapshot.runner.kind === "anvil-zksync"
245
+ ? rpcRequest<unknown>(
246
+ sourceProxyUrl(),
247
+ "zks_getBlockDetails",
248
+ [snapshot.blockNumber],
249
+ )
250
+ : Promise.resolve(undefined),
251
+ ]);
252
+ assertBlockHash(sourceBlock, snapshot, "Source-chain");
253
+ assertBlockHash(
254
+ localBlock,
255
+ snapshot,
256
+ snapshot.runner.kind === "hardhat" ? "Local EVM" : "Local EraVM",
257
+ );
258
+ if (
259
+ snapshot.runner.kind === "anvil-zksync"
260
+ && isCapturedZkSyncChainSnapshot(snapshot)
261
+ ) {
262
+ const metadata = parseZkSyncBlockDetails(
263
+ sourceZkSyncBlockDetails,
264
+ snapshot.blockNumber,
265
+ );
266
+ if (
267
+ metadata.protocolVersion !== snapshot.protocolVersion
268
+ || metadata.l1BatchNumber !== snapshot.l1BatchNumber
269
+ ) {
270
+ throw new Error("Source-chain zkSync protocol metadata mismatch");
271
+ }
272
+ }
273
+ };
274
+
275
+ export const simulationForkEvidence = (
276
+ simulation: SimulationFork,
277
+ ): SimulationForkEvidence | undefined => {
278
+ const snapshot = simulation.snapshot;
279
+ if (!snapshot) return undefined;
280
+ if (snapshot.runner.kind === "anvil-zksync") {
281
+ if (!isCapturedZkSyncChainSnapshot(snapshot)) {
282
+ throw new Error("zkSync simulation snapshot is missing protocol metadata");
283
+ }
284
+ const capability = resolveZkSyncForkCapability(snapshot.protocolVersion);
285
+ if (!capability || capability.runner.version !== snapshot.runner.version) {
286
+ throw new Error(
287
+ `zkSync protocol ${snapshot.protocolVersion} does not have an approved fork runner`,
288
+ );
289
+ }
290
+ return {
291
+ sourceNetwork: snapshot.sourceNetwork,
292
+ chainId: snapshot.chainId,
293
+ blockNumber: snapshot.blockNumber,
294
+ blockHash: snapshot.blockHash,
295
+ protocolVersion: snapshot.protocolVersion,
296
+ runnerProtocolVersion: capability.runnerProtocolVersion,
297
+ l1BatchNumber: snapshot.l1BatchNumber,
298
+ runner: { ...snapshot.runner },
299
+ };
300
+ }
301
+ return {
302
+ sourceNetwork: snapshot.sourceNetwork,
303
+ chainId: snapshot.chainId,
304
+ blockNumber: snapshot.blockNumber,
305
+ blockHash: snapshot.blockHash,
306
+ runner: { ...snapshot.runner },
307
+ };
308
+ };
309
+
310
+ export const setupSimulationFork = async (targetId: string): Promise<SimulationFork> => {
311
+ const targetNetwork = (
312
+ hardhatConfig.networks as Record<string, { zksync?: boolean }>
313
+ )[targetId];
314
+ if (targetNetwork?.zksync === true) {
315
+ if (
316
+ network.name !== "zkFork"
317
+ || (network.config as { zksync?: boolean }).zksync !== true
318
+ ) {
319
+ throw new Error(
320
+ `zkSync target "${targetId}" requires the pinned EraVM fork network`,
321
+ );
322
+ }
323
+ const snapshot = parseForkSnapshotJson(
324
+ process.env.GATE_SIMULATION_FORK_SNAPSHOT_JSON,
325
+ targetId,
326
+ );
327
+ if (
328
+ snapshot.runner.kind !== "anvil-zksync"
329
+ || !isCapturedZkSyncChainSnapshot(snapshot)
330
+ ) {
331
+ throw new Error(`zkSync target "${targetId}" requires an anvil-zksync fork snapshot`);
332
+ }
333
+ const approvedRunner = resolveZkSyncForkRunner(snapshot.protocolVersion);
334
+ if (!approvedRunner || snapshot.runner.version !== approvedRunner.version) {
335
+ throw new Error(
336
+ `zkSync protocol ${snapshot.protocolVersion} does not have an approved fork runner`,
337
+ );
338
+ }
339
+ const [runtimeChainId, forkBlock] = await Promise.all([
340
+ network.provider.request({ method: "eth_chainId", params: [] }),
341
+ network.provider.request({
342
+ method: "eth_getBlockByNumber",
343
+ params: [blockTag(snapshot.blockNumber), false],
344
+ }),
345
+ ]);
346
+ if (
347
+ typeof runtimeChainId !== "string"
348
+ || !/^0x[0-9a-fA-F]+$/.test(runtimeChainId)
349
+ || BigInt(runtimeChainId) !== BigInt(snapshot.chainId)
350
+ ) {
351
+ throw new Error(
352
+ `EraVM simulation chainId does not match target chainId ${snapshot.chainId}`,
353
+ );
354
+ }
355
+ assertBlockHash(forkBlock, snapshot, "Local EraVM");
356
+ return { snapshot };
357
+ }
358
+ if (network.name !== "hardhat") {
359
+ throw new Error("Simulation mode must run with --network hardhat");
360
+ }
361
+ if (targetId === "hardhat") {
362
+ return {};
363
+ }
364
+ const snapshot = parseForkSnapshotJson(
365
+ process.env.GATE_SIMULATION_FORK_SNAPSHOT_JSON,
366
+ targetId,
367
+ );
368
+ if (snapshot.runner.kind !== "hardhat") {
369
+ throw new Error(`EVM target "${targetId}" requires a Hardhat fork snapshot`);
370
+ }
371
+ const forkRpcUrl = sourceProxyUrl();
372
+ const sourceBlock = await rpcRequest<unknown>(
373
+ forkRpcUrl,
374
+ "eth_getBlockByNumber",
375
+ [blockTag(snapshot.blockNumber), false],
376
+ );
377
+ assertBlockHash(sourceBlock, snapshot, "Source-chain");
378
+
379
+ await network.provider.request({
380
+ method: "hardhat_reset",
381
+ params: [
382
+ {
383
+ forking: {
384
+ jsonRpcUrl: forkRpcUrl,
385
+ blockNumber: snapshot.blockNumber,
386
+ },
387
+ },
388
+ ],
389
+ });
390
+
391
+ const [runtimeChainId, forkBlock] = await Promise.all([
392
+ network.provider.request({ method: "eth_chainId", params: [] }),
393
+ network.provider.request({
394
+ method: "eth_getBlockByNumber",
395
+ params: [blockTag(snapshot.blockNumber), false],
396
+ }),
397
+ ]);
398
+ if (
399
+ typeof runtimeChainId !== "string"
400
+ || !/^0x[0-9a-fA-F]+$/.test(runtimeChainId)
401
+ || BigInt(runtimeChainId) !== BigInt(snapshot.chainId)
402
+ ) {
403
+ throw new Error(
404
+ `Simulation fork chainId does not match target chainId ${snapshot.chainId}`,
405
+ );
406
+ }
407
+ assertBlockHash(forkBlock, snapshot, "Local EVM");
408
+
409
+ await network.provider.request({
410
+ method: "hardhat_mine",
411
+ params: ["0x1"],
412
+ });
413
+
414
+ return { snapshot };
415
+ };