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,388 @@
1
+ import crypto from "crypto";
2
+ import fs from "fs";
3
+ import path from "path";
4
+ import { writeJsonFile } from "./config";
5
+ import { validateExecutionId } from "./executionId";
6
+ import { hashValue, ReleaseFingerprint } from "./release";
7
+ import type { ExistingDeploymentPolicies } from "./parameters";
8
+
9
+ const sha256 = (value: string): string => {
10
+ return crypto.createHash("sha256").update(value).digest("hex");
11
+ };
12
+
13
+ export interface ParameterLockTargetSnapshot {
14
+ network: string;
15
+ signer: string;
16
+ admin: string;
17
+ chainId?: number;
18
+ create2Scheme: "evm" | "zksync-eravm";
19
+ create2Factory?: string;
20
+ create2Caller?: string;
21
+ controlledMulticall?: string;
22
+ uupsPlaceholderImplementation?: string;
23
+ leadingZeroBytes?: number;
24
+ }
25
+
26
+ export type FinalSimulation =
27
+ | { status: "pending" }
28
+ | {
29
+ status: "succeeded";
30
+ result: string;
31
+ simulatedAt: string;
32
+ executionPlanHash: string;
33
+ executionPlanPath: string;
34
+ };
35
+
36
+ export interface ParameterLockInput {
37
+ taskDir: string;
38
+ deploymentId: string;
39
+ executionId: string;
40
+ sourceSuperTaskId: string;
41
+ mergeCommit: string;
42
+ selectedExecuteNetworks: string[];
43
+ selectedStepIds: string[];
44
+ operator: string;
45
+ baselineParameters: Record<string, unknown>;
46
+ overrides: Record<string, unknown>;
47
+ resolvedParameters: Record<string, unknown>;
48
+ releaseFingerprint: ReleaseFingerprint;
49
+ finalSimulation: FinalSimulation;
50
+ targetSnapshot: ParameterLockTargetSnapshot;
51
+ existingDeploymentPolicies?: ExistingDeploymentPolicies;
52
+ implementationSalts?: Record<string, string>;
53
+ }
54
+
55
+ export interface ParameterLockExecution extends Omit<ParameterLockInput, "taskDir" | "targetSnapshot"> {
56
+ manifestHash: string;
57
+ parameterHash: string;
58
+ lockedAt: string;
59
+ target: ParameterLockTargetSnapshot;
60
+ }
61
+
62
+ interface ParameterLockFile {
63
+ version: 2;
64
+ deploymentId: string;
65
+ latestExecutionId: string;
66
+ manifestHash: string;
67
+ parametersHash: string;
68
+ executions: ParameterLockExecution[];
69
+ }
70
+
71
+ const isRecord = (value: unknown): value is Record<string, unknown> => {
72
+ return !!value && typeof value === "object" && !Array.isArray(value);
73
+ };
74
+
75
+ const isNonZeroEvmAddress = (value: unknown): value is string => {
76
+ return typeof value === "string"
77
+ && /^0x[0-9a-fA-F]{40}$/.test(value)
78
+ && value.toLowerCase() !== "0x0000000000000000000000000000000000000000";
79
+ };
80
+
81
+ const assertSignerBinding = (
82
+ execution: Pick<ParameterLockExecution, "operator" | "target">,
83
+ ): void => {
84
+ if (!isNonZeroEvmAddress(execution.operator)) {
85
+ throw new Error("Parameter lock operator must be a valid non-zero EVM address");
86
+ }
87
+ if (!isNonZeroEvmAddress(execution.target?.signer)) {
88
+ throw new Error("Parameter lock target signer must be a valid non-zero EVM address");
89
+ }
90
+ if (execution.operator.toLowerCase() !== execution.target.signer.toLowerCase()) {
91
+ throw new Error("Parameter lock operator does not match target signer");
92
+ }
93
+ };
94
+
95
+ const assertCreate2Scheme = (
96
+ value: unknown,
97
+ required: boolean,
98
+ ): void => {
99
+ if (!required && value === undefined) return;
100
+ if (value !== "evm" && value !== "zksync-eravm") {
101
+ throw new Error("Parameter lock target create2Scheme must be evm or zksync-eravm");
102
+ }
103
+ };
104
+
105
+ const assertFinalSimulation = (
106
+ execution: Pick<ParameterLockExecution, "executionId" | "target" | "finalSimulation">,
107
+ ): void => {
108
+ const evidence = execution.finalSimulation;
109
+ if (!isRecord(evidence) || (evidence.status !== "pending" && evidence.status !== "succeeded")) {
110
+ throw new Error("Parameter lock finalSimulation is invalid");
111
+ }
112
+ if (evidence.status === "pending") {
113
+ if (Object.keys(evidence).length !== 1) {
114
+ throw new Error("Pending finalSimulation cannot contain execution evidence");
115
+ }
116
+ return;
117
+ }
118
+ if (typeof evidence.result !== "string" || !evidence.result.trim()) {
119
+ throw new Error("Succeeded finalSimulation requires result");
120
+ }
121
+ if (typeof evidence.simulatedAt !== "string" || !Number.isFinite(Date.parse(evidence.simulatedAt))) {
122
+ throw new Error("Succeeded finalSimulation requires simulatedAt");
123
+ }
124
+ if (typeof evidence.executionPlanHash !== "string" || !/^[0-9a-f]{64}$/.test(evidence.executionPlanHash)) {
125
+ throw new Error("Succeeded finalSimulation requires executionPlanHash");
126
+ }
127
+ const expectedPlanPath = [
128
+ "results",
129
+ execution.target.network,
130
+ execution.executionId,
131
+ "execution-plan.json",
132
+ ].join("/");
133
+ if (evidence.executionPlanPath !== expectedPlanPath) {
134
+ throw new Error("Succeeded finalSimulation executionPlanPath does not match its execution");
135
+ }
136
+ };
137
+
138
+ const validateLockFile = (value: unknown): ParameterLockFile => {
139
+ if (!isRecord(value)) {
140
+ throw new Error("parameters.lock.json must be an object");
141
+ }
142
+ if (!Array.isArray(value.executions)) {
143
+ throw new Error("parameters.lock.json.executions must be an array");
144
+ }
145
+
146
+ const executionIds = new Set<string>();
147
+ for (const [index, execution] of value.executions.entries()) {
148
+ if (!isRecord(execution)) {
149
+ throw new Error(`parameters.lock.json.executions[${index}] must be an object`);
150
+ }
151
+ const executionId = validateExecutionId(
152
+ execution.executionId,
153
+ `parameters.lock.json.executions[${index}].executionId`,
154
+ );
155
+ if (executionIds.has(executionId)) {
156
+ throw new Error("parameters.lock.json contains duplicate executionId: " + executionId);
157
+ }
158
+ executionIds.add(executionId);
159
+ assertSignerBinding(execution as unknown as ParameterLockExecution);
160
+ assertCreate2Scheme(
161
+ isRecord(execution.target) ? execution.target.create2Scheme : undefined,
162
+ false,
163
+ );
164
+ assertFinalSimulation(execution as unknown as ParameterLockExecution);
165
+ }
166
+
167
+ const latestExecutionId = validateExecutionId(
168
+ value.latestExecutionId,
169
+ "parameters.lock.json.latestExecutionId",
170
+ );
171
+ const latestMatches = value.executions.filter(
172
+ (execution) => execution.executionId === latestExecutionId,
173
+ ).length;
174
+ if (latestMatches !== 1) {
175
+ throw new Error(
176
+ "parameters.lock.json.latestExecutionId must identify exactly one execution",
177
+ );
178
+ }
179
+
180
+ return value as unknown as ParameterLockFile;
181
+ };
182
+
183
+ const writeLockFile = (filePath: string, lock: ParameterLockFile): void => {
184
+ writeJsonFile(filePath, validateLockFile(lock));
185
+ };
186
+
187
+ const readLockFile = (filePath: string): ParameterLockFile | undefined => {
188
+ if (!fs.existsSync(filePath)) return undefined;
189
+ let parsed: unknown;
190
+ try {
191
+ parsed = JSON.parse(fs.readFileSync(filePath, "utf8"));
192
+ } catch (error) {
193
+ throw new Error(
194
+ "parameters.lock.json must contain valid JSON: "
195
+ + (error instanceof Error ? error.message : String(error)),
196
+ );
197
+ }
198
+ return validateLockFile(parsed);
199
+ };
200
+
201
+ const immutableExecutionHash = (execution: ParameterLockExecution): string => {
202
+ const { finalSimulation: _finalSimulation, lockedAt: _lockedAt, ...immutable } = execution;
203
+ return hashValue(immutable);
204
+ };
205
+
206
+ const requireSingleNetwork = (networks: string[]): void => {
207
+ if (networks.length !== 1 || !networks[0]) {
208
+ throw new Error("A parameter lock execution must select exactly one network");
209
+ }
210
+ };
211
+
212
+ const buildExecution = (
213
+ input: ParameterLockInput,
214
+ manifestHash: string,
215
+ parameterHash: string,
216
+ ): ParameterLockExecution => {
217
+ const { taskDir: _taskDir, targetSnapshot, ...executionInput } = input;
218
+ return {
219
+ ...executionInput,
220
+ manifestHash,
221
+ parameterHash,
222
+ lockedAt: new Date().toISOString(),
223
+ target: targetSnapshot,
224
+ };
225
+ };
226
+
227
+ export const writeParameterLock = (input: ParameterLockInput): void => {
228
+ const executionId = validateExecutionId(input.executionId);
229
+ requireSingleNetwork(input.selectedExecuteNetworks);
230
+ assertCreate2Scheme(input.targetSnapshot.create2Scheme, true);
231
+ if (input.finalSimulation.status !== "pending") {
232
+ throw new Error("A new parameter lock execution must start with pending finalSimulation");
233
+ }
234
+
235
+ const manifest = fs.readFileSync(path.join(input.taskDir, "manifest.yaml"), "utf8");
236
+ const parameters = fs.readFileSync(path.join(input.taskDir, "parameters.yaml"), "utf8");
237
+ const manifestHash = sha256(manifest);
238
+ const parameterHash = sha256(parameters);
239
+ const lockPath = path.join(input.taskDir, "parameters.lock.json");
240
+ const existing = readLockFile(lockPath);
241
+ const execution = buildExecution(input, manifestHash, parameterHash);
242
+ const previousExecution = existing?.executions.find((item) => item.executionId === executionId);
243
+
244
+ if (previousExecution) {
245
+ if (immutableExecutionHash(previousExecution) !== immutableExecutionHash(execution)) {
246
+ throw new Error("executionId already exists with different content: " + executionId);
247
+ }
248
+ return;
249
+ }
250
+
251
+ writeLockFile(lockPath, {
252
+ version: 2,
253
+ deploymentId: input.deploymentId,
254
+ latestExecutionId: executionId,
255
+ manifestHash,
256
+ parametersHash: parameterHash,
257
+ executions: [...(existing?.executions || []), execution],
258
+ } satisfies ParameterLockFile);
259
+ };
260
+
261
+ export const readParameterLockExecution = (
262
+ taskDir: string,
263
+ executionId: string,
264
+ ): ParameterLockExecution => {
265
+ const validatedExecutionId = validateExecutionId(executionId);
266
+ const lockPath = path.join(taskDir, "parameters.lock.json");
267
+ const lock = readLockFile(lockPath);
268
+ if (!lock) {
269
+ throw new Error("Missing parameters.lock.json");
270
+ }
271
+ const execution = lock.executions.find((item) => item.executionId === validatedExecutionId);
272
+ if (!execution) {
273
+ throw new Error("Unknown parameter lock executionId: " + validatedExecutionId);
274
+ }
275
+ return execution;
276
+ };
277
+
278
+ export const assertParameterLockExecutable = (
279
+ execution: ParameterLockExecution,
280
+ targetId: string,
281
+ currentFingerprint: ReleaseFingerprint,
282
+ ): ParameterLockExecution => {
283
+ validateExecutionId(execution.executionId);
284
+ assertSignerBinding(execution);
285
+ if (
286
+ execution.selectedExecuteNetworks.length !== 1
287
+ || execution.selectedExecuteNetworks[0] !== targetId
288
+ || execution.target.network !== targetId
289
+ ) {
290
+ throw new Error("Parameter lock target does not match requested network " + targetId);
291
+ }
292
+ for (const key of ["manifestHash", "artifactHash", "parametersHash", "configHash"] as const) {
293
+ if (execution.releaseFingerprint[key] !== currentFingerprint[key]) {
294
+ throw new Error("parameter lock fingerprint changed: " + key);
295
+ }
296
+ }
297
+ if (execution.finalSimulation.status !== "succeeded") {
298
+ throw new Error("Parameter lock final simulation has not succeeded");
299
+ }
300
+ return execution;
301
+ };
302
+
303
+ export const recordParameterLockImplementationSalts = (
304
+ taskDir: string,
305
+ executionId: string,
306
+ salts: Record<string, string>,
307
+ ): void => {
308
+ const validatedExecutionId = validateExecutionId(executionId);
309
+ const lockPath = path.join(taskDir, "parameters.lock.json");
310
+ const lock = readLockFile(lockPath);
311
+ if (!lock) throw new Error("Missing parameters.lock.json");
312
+ const index = lock.executions.findIndex((item) => item.executionId === validatedExecutionId);
313
+ if (index < 0) {
314
+ throw new Error("Unknown parameter lock executionId: " + validatedExecutionId);
315
+ }
316
+ const existing = lock.executions[index].implementationSalts || {};
317
+ const next = { ...existing };
318
+ for (const [key, salt] of Object.entries(salts)) {
319
+ if (!key.trim()) throw new Error("implementation salt key must not be empty");
320
+ if (!/^0x[0-9a-fA-F]{64}$/.test(salt)) {
321
+ throw new Error("implementation salt must be bytes32 for " + key);
322
+ }
323
+ if (existing[key] && existing[key].toLowerCase() !== salt.toLowerCase()) {
324
+ throw new Error("implementation salt already locked with different content: " + key);
325
+ }
326
+ next[key] = salt;
327
+ }
328
+ lock.executions[index] = {
329
+ ...lock.executions[index],
330
+ implementationSalts: next,
331
+ };
332
+ writeLockFile(lockPath, lock);
333
+ };
334
+
335
+ export const markParameterLockSimulationSucceeded = (
336
+ taskDir: string,
337
+ executionId: string,
338
+ result: string,
339
+ simulatedAt: string,
340
+ signerAddress: string,
341
+ executionPlanHash: string,
342
+ executionPlanPath: string,
343
+ ): void => {
344
+ const validatedExecutionId = validateExecutionId(executionId);
345
+ const lockPath = path.join(taskDir, "parameters.lock.json");
346
+ const lock = readLockFile(lockPath);
347
+ if (!lock) {
348
+ throw new Error("Missing parameters.lock.json");
349
+ }
350
+ const index = lock.executions.findIndex((item) => item.executionId === validatedExecutionId);
351
+ if (index < 0) {
352
+ throw new Error("Unknown parameter lock executionId: " + validatedExecutionId);
353
+ }
354
+
355
+ const execution = lock.executions[index];
356
+ assertSignerBinding(execution);
357
+ if (
358
+ !isNonZeroEvmAddress(signerAddress)
359
+ || execution.operator.toLowerCase() !== signerAddress.toLowerCase()
360
+ ) {
361
+ throw new Error("Simulation signer does not match parameter lock operator");
362
+ }
363
+
364
+ const current = execution.finalSimulation;
365
+ if (current.status === "succeeded") {
366
+ if (
367
+ current.result !== result
368
+ || current.simulatedAt !== simulatedAt
369
+ || current.executionPlanHash !== executionPlanHash
370
+ || current.executionPlanPath !== executionPlanPath
371
+ ) {
372
+ throw new Error("finalSimulation already succeeded with different evidence");
373
+ }
374
+ return;
375
+ }
376
+
377
+ lock.executions[index] = {
378
+ ...lock.executions[index],
379
+ finalSimulation: {
380
+ status: "succeeded",
381
+ result,
382
+ simulatedAt,
383
+ executionPlanHash,
384
+ executionPlanPath,
385
+ },
386
+ };
387
+ writeLockFile(lockPath, lock);
388
+ };