gate-evm-tools 1.0.27 → 1.0.31

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 (641) hide show
  1. package/README.md +16 -1
  2. package/bin/cli.js +3 -0
  3. package/bin/delivery.cjs +51 -0
  4. package/bin/manifest-bootstrap.js +4 -15
  5. package/bin/workflow.cjs +1 -1
  6. package/dist/commands/plan/file-store.d.ts.map +1 -0
  7. package/dist/commands/plan/generate-deployment.d.ts +48 -0
  8. package/dist/commands/plan/generate-deployment.d.ts.map +1 -0
  9. package/dist/commands/plan/generate-deployment.js +211 -0
  10. package/dist/commands/plan/generate-deployment.js.map +1 -0
  11. package/dist/commands/plan/helpers.d.ts.map +1 -0
  12. package/dist/commands/plan/index.d.ts +3 -0
  13. package/dist/commands/plan/index.d.ts.map +1 -0
  14. package/dist/commands/plan/index.js +88 -0
  15. package/dist/commands/plan/index.js.map +1 -0
  16. package/dist/commands/sync.js +1 -1
  17. package/dist/commands/sync.js.map +1 -1
  18. package/dist/core/BytecodeChecker.d.ts.map +1 -1
  19. package/dist/core/BytecodeChecker.js +27 -8
  20. package/dist/core/BytecodeChecker.js.map +1 -1
  21. package/dist/core/preparation/artifacts.d.ts +2 -0
  22. package/dist/core/preparation/artifacts.d.ts.map +1 -1
  23. package/dist/core/preparation/artifacts.js +9 -3
  24. package/dist/core/preparation/artifacts.js.map +1 -1
  25. package/dist/core/preparation/evm.d.ts +38 -2
  26. package/dist/core/preparation/evm.d.ts.map +1 -1
  27. package/dist/core/preparation/evm.js +104 -32
  28. package/dist/core/preparation/evm.js.map +1 -1
  29. package/dist/core/preparation/evmManifestSync.d.ts +63 -0
  30. package/dist/core/preparation/evmManifestSync.d.ts.map +1 -0
  31. package/dist/core/preparation/evmManifestSync.js +146 -0
  32. package/dist/core/preparation/evmManifestSync.js.map +1 -0
  33. package/dist/core/preparation/index.d.ts +40 -2
  34. package/dist/core/preparation/index.d.ts.map +1 -1
  35. package/dist/core/preparation/index.js +3 -3
  36. package/dist/core/preparation/index.js.map +1 -1
  37. package/dist/core/preparation/manifest.d.ts +15 -3
  38. package/dist/core/preparation/manifest.d.ts.map +1 -1
  39. package/dist/core/preparation/manifest.js +21 -26
  40. package/dist/core/preparation/manifest.js.map +1 -1
  41. package/dist/core/preparation/normalize.d.ts.map +1 -1
  42. package/dist/core/preparation/normalize.js +14 -9
  43. package/dist/core/preparation/normalize.js.map +1 -1
  44. package/dist/core/preparation/types.d.ts +7 -2
  45. package/dist/core/preparation/types.d.ts.map +1 -1
  46. package/dist/custody/hardhat-runtime.d.ts.map +1 -1
  47. package/dist/custody/hardhat-runtime.js +2 -0
  48. package/dist/custody/hardhat-runtime.js.map +1 -1
  49. package/dist/custody/hardhat.d.ts +1 -0
  50. package/dist/custody/hardhat.d.ts.map +1 -1
  51. package/dist/custody/hardhat.js +1 -0
  52. package/dist/custody/hardhat.js.map +1 -1
  53. package/dist/custody/index.d.ts +1 -0
  54. package/dist/custody/index.d.ts.map +1 -1
  55. package/dist/custody/index.js +1 -0
  56. package/dist/custody/index.js.map +1 -1
  57. package/dist/custody/provider-wait.d.ts +13 -0
  58. package/dist/custody/provider-wait.d.ts.map +1 -0
  59. package/dist/custody/provider-wait.js +78 -0
  60. package/dist/custody/provider-wait.js.map +1 -0
  61. package/dist/delivery/policy.d.ts +6 -0
  62. package/dist/delivery/policy.d.ts.map +1 -0
  63. package/dist/delivery/policy.js +24 -0
  64. package/dist/delivery/policy.js.map +1 -0
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +5 -0
  67. package/dist/index.js.map +1 -1
  68. package/dist/sync/index.d.ts +15 -0
  69. package/dist/sync/index.d.ts.map +1 -1
  70. package/dist/sync/index.js +8 -0
  71. package/dist/sync/index.js.map +1 -1
  72. package/dist/workflow/index.d.ts +6 -1
  73. package/dist/workflow/index.d.ts.map +1 -1
  74. package/dist/workflow/index.js +4 -0
  75. package/dist/workflow/index.js.map +1 -1
  76. package/dist-cjs/core/BytecodeChecker.js +526 -0
  77. package/dist-cjs/core/BytecodeChecker.js.map +1 -0
  78. package/dist-cjs/core/legacyProxyArtifact.js +42 -0
  79. package/dist-cjs/core/legacyProxyArtifact.js.map +1 -0
  80. package/dist-cjs/core/preparation/artifacts.js +11 -4
  81. package/dist-cjs/core/preparation/artifacts.js.map +1 -1
  82. package/dist-cjs/core/preparation/evm.js +105 -32
  83. package/dist-cjs/core/preparation/evm.js.map +1 -1
  84. package/dist-cjs/core/preparation/evmManifestSync.js +155 -0
  85. package/dist-cjs/core/preparation/evmManifestSync.js.map +1 -0
  86. package/dist-cjs/core/preparation/index.js +3 -3
  87. package/dist-cjs/core/preparation/index.js.map +1 -1
  88. package/dist-cjs/core/preparation/manifest.js +23 -28
  89. package/dist-cjs/core/preparation/manifest.js.map +1 -1
  90. package/dist-cjs/core/preparation/normalize.js +14 -9
  91. package/dist-cjs/core/preparation/normalize.js.map +1 -1
  92. package/dist-cjs/custody/hardhat-runtime.js +2 -0
  93. package/dist-cjs/custody/hardhat-runtime.js.map +1 -1
  94. package/dist-cjs/custody/hardhat.js +3 -1
  95. package/dist-cjs/custody/hardhat.js.map +1 -1
  96. package/dist-cjs/custody/index.js +3 -1
  97. package/dist-cjs/custody/index.js.map +1 -1
  98. package/dist-cjs/custody/provider-wait.js +81 -0
  99. package/dist-cjs/custody/provider-wait.js.map +1 -0
  100. package/dist-cjs/delivery/policy.js +29 -0
  101. package/dist-cjs/delivery/policy.js.map +1 -0
  102. package/dist-cjs/sync/index.js +8 -0
  103. package/dist-cjs/sync/index.js.map +1 -1
  104. package/dist-cjs/workflow/index.js +12 -1
  105. package/dist-cjs/workflow/index.js.map +1 -1
  106. package/dist-runtime/config/hardhatAdapters.d.ts +2 -0
  107. package/dist-runtime/config/hardhatAdapters.js +8 -0
  108. package/dist-runtime/config/hardhatAdapters.js.map +1 -1
  109. package/dist-runtime/config/networks.d.ts +25 -1
  110. package/dist-runtime/config/networks.js +8 -2
  111. package/dist-runtime/config/networks.js.map +1 -1
  112. package/dist-runtime/config/openzeppelin.d.ts +2 -1
  113. package/dist-runtime/config/openzeppelin.js +2 -19
  114. package/dist-runtime/config/openzeppelin.js.map +1 -1
  115. package/dist-runtime/delivery/abi.d.ts +14 -0
  116. package/dist-runtime/delivery/abi.js +161 -0
  117. package/dist-runtime/delivery/abi.js.map +1 -0
  118. package/dist-runtime/delivery/aggregate-bootstrap.d.ts +12 -0
  119. package/dist-runtime/delivery/aggregate-bootstrap.js +40 -0
  120. package/dist-runtime/delivery/aggregate-bootstrap.js.map +1 -0
  121. package/dist-runtime/delivery/aggregate-channel.d.ts +28 -0
  122. package/dist-runtime/delivery/aggregate-channel.js +155 -0
  123. package/dist-runtime/delivery/aggregate-channel.js.map +1 -0
  124. package/dist-runtime/delivery/aggregate-inputs.d.ts +168 -0
  125. package/dist-runtime/delivery/aggregate-inputs.js +57 -0
  126. package/dist-runtime/delivery/aggregate-inputs.js.map +1 -0
  127. package/dist-runtime/delivery/aggregate-source.d.ts +25 -0
  128. package/dist-runtime/delivery/aggregate-source.js +79 -0
  129. package/dist-runtime/delivery/aggregate-source.js.map +1 -0
  130. package/dist-runtime/delivery/aggregate-worker.d.ts +1 -0
  131. package/dist-runtime/delivery/aggregate-worker.js +191 -0
  132. package/dist-runtime/delivery/aggregate-worker.js.map +1 -0
  133. package/dist-runtime/delivery/aggregate.d.ts +51 -0
  134. package/dist-runtime/delivery/aggregate.js +190 -0
  135. package/dist-runtime/delivery/aggregate.js.map +1 -0
  136. package/dist-runtime/delivery/bindings.d.ts +21 -0
  137. package/dist-runtime/delivery/bindings.js +53 -0
  138. package/dist-runtime/delivery/bindings.js.map +1 -0
  139. package/dist-runtime/delivery/check-code.d.ts +19 -0
  140. package/dist-runtime/delivery/check-code.js +63 -0
  141. package/dist-runtime/delivery/check-code.js.map +1 -0
  142. package/dist-runtime/delivery/closure-format.d.ts +77 -0
  143. package/dist-runtime/delivery/closure-format.js +225 -0
  144. package/dist-runtime/delivery/closure-format.js.map +1 -0
  145. package/dist-runtime/delivery/codec-pin.d.ts +2 -0
  146. package/dist-runtime/delivery/codec-pin.js +7 -0
  147. package/dist-runtime/delivery/codec-pin.js.map +1 -0
  148. package/dist-runtime/delivery/codec.d.ts +19 -0
  149. package/dist-runtime/delivery/codec.js +73 -0
  150. package/dist-runtime/delivery/codec.js.map +1 -0
  151. package/dist-runtime/delivery/compiler-dependency-pins.d.ts +7 -0
  152. package/dist-runtime/delivery/compiler-dependency-pins.js +1689 -0
  153. package/dist-runtime/delivery/compiler-dependency-pins.js.map +1 -0
  154. package/dist-runtime/delivery/compiler-files.d.ts +40 -0
  155. package/dist-runtime/delivery/compiler-files.js +220 -0
  156. package/dist-runtime/delivery/compiler-files.js.map +1 -0
  157. package/dist-runtime/delivery/compiler-io.d.ts +2 -0
  158. package/dist-runtime/delivery/compiler-io.js +13 -0
  159. package/dist-runtime/delivery/compiler-io.js.map +1 -0
  160. package/dist-runtime/delivery/compiler-pins.d.ts +10 -0
  161. package/dist-runtime/delivery/compiler-pins.js +147 -0
  162. package/dist-runtime/delivery/compiler-pins.js.map +1 -0
  163. package/dist-runtime/delivery/compiler.d.ts +188 -0
  164. package/dist-runtime/delivery/compiler.js +850 -0
  165. package/dist-runtime/delivery/compiler.js.map +1 -0
  166. package/dist-runtime/delivery/config.d.ts +48 -0
  167. package/dist-runtime/delivery/config.js +99 -0
  168. package/dist-runtime/delivery/config.js.map +1 -0
  169. package/dist-runtime/delivery/configuration-definition.d.ts +22 -0
  170. package/dist-runtime/delivery/configuration-definition.js +316 -0
  171. package/dist-runtime/delivery/configuration-definition.js.map +1 -0
  172. package/dist-runtime/delivery/configuration-hre.d.ts +17 -0
  173. package/dist-runtime/delivery/configuration-hre.js +198 -0
  174. package/dist-runtime/delivery/configuration-hre.js.map +1 -0
  175. package/dist-runtime/delivery/configuration-runtime.d.ts +36 -0
  176. package/dist-runtime/delivery/configuration-runtime.js +248 -0
  177. package/dist-runtime/delivery/configuration-runtime.js.map +1 -0
  178. package/dist-runtime/delivery/configuration.d.ts +35 -0
  179. package/dist-runtime/delivery/configuration.js +83 -0
  180. package/dist-runtime/delivery/configuration.js.map +1 -0
  181. package/dist-runtime/delivery/create2.d.ts +3 -0
  182. package/dist-runtime/delivery/create2.js +48 -0
  183. package/dist-runtime/delivery/create2.js.map +1 -0
  184. package/dist-runtime/delivery/custom-closure.d.ts +27 -0
  185. package/dist-runtime/delivery/custom-closure.js +818 -0
  186. package/dist-runtime/delivery/custom-closure.js.map +1 -0
  187. package/dist-runtime/delivery/custom-format.d.ts +35 -0
  188. package/dist-runtime/delivery/custom-format.js +383 -0
  189. package/dist-runtime/delivery/custom-format.js.map +1 -0
  190. package/dist-runtime/delivery/custom.d.ts +32 -0
  191. package/dist-runtime/delivery/custom.js +158 -0
  192. package/dist-runtime/delivery/custom.js.map +1 -0
  193. package/dist-runtime/delivery/data.d.ts +7 -0
  194. package/dist-runtime/delivery/data.js +86 -0
  195. package/dist-runtime/delivery/data.js.map +1 -0
  196. package/dist-runtime/delivery/development.d.ts +91 -0
  197. package/dist-runtime/delivery/development.js +395 -0
  198. package/dist-runtime/delivery/development.js.map +1 -0
  199. package/dist-runtime/delivery/engine.d.ts +9 -0
  200. package/dist-runtime/delivery/engine.js +23 -0
  201. package/dist-runtime/delivery/engine.js.map +1 -0
  202. package/dist-runtime/delivery/eoa-observation.d.ts +43 -0
  203. package/dist-runtime/delivery/eoa-observation.js +145 -0
  204. package/dist-runtime/delivery/eoa-observation.js.map +1 -0
  205. package/dist-runtime/delivery/eoa-signed.d.ts +2 -0
  206. package/dist-runtime/delivery/eoa-signed.js +74 -0
  207. package/dist-runtime/delivery/eoa-signed.js.map +1 -0
  208. package/dist-runtime/delivery/eoa.d.ts +81 -0
  209. package/dist-runtime/delivery/eoa.js +274 -0
  210. package/dist-runtime/delivery/eoa.js.map +1 -0
  211. package/dist-runtime/delivery/execution-db.d.ts +20 -0
  212. package/dist-runtime/delivery/execution-db.js +153 -0
  213. package/dist-runtime/delivery/execution-db.js.map +1 -0
  214. package/dist-runtime/delivery/execution-files.d.ts +9 -0
  215. package/dist-runtime/delivery/execution-files.js +138 -0
  216. package/dist-runtime/delivery/execution-files.js.map +1 -0
  217. package/dist-runtime/delivery/execution-model.d.ts +56 -0
  218. package/dist-runtime/delivery/execution-model.js +66 -0
  219. package/dist-runtime/delivery/execution-model.js.map +1 -0
  220. package/dist-runtime/delivery/execution-store.d.ts +48 -0
  221. package/dist-runtime/delivery/execution-store.js +361 -0
  222. package/dist-runtime/delivery/execution-store.js.map +1 -0
  223. package/dist-runtime/delivery/existing-code.d.ts +37 -0
  224. package/dist-runtime/delivery/existing-code.js +75 -0
  225. package/dist-runtime/delivery/existing-code.js.map +1 -0
  226. package/dist-runtime/delivery/export.d.ts +51 -0
  227. package/dist-runtime/delivery/export.js +69 -0
  228. package/dist-runtime/delivery/export.js.map +1 -0
  229. package/dist-runtime/delivery/forkAudit.d.ts +119 -0
  230. package/dist-runtime/delivery/forkAudit.js +473 -0
  231. package/dist-runtime/delivery/forkAudit.js.map +1 -0
  232. package/dist-runtime/delivery/hardhat.d.ts +3 -0
  233. package/dist-runtime/delivery/hardhat.js +45 -0
  234. package/dist-runtime/delivery/hardhat.js.map +1 -0
  235. package/dist-runtime/delivery/history-registration.d.ts +2 -0
  236. package/dist-runtime/delivery/history-registration.js +17 -0
  237. package/dist-runtime/delivery/history-registration.js.map +1 -0
  238. package/dist-runtime/delivery/identities.d.ts +22 -0
  239. package/dist-runtime/delivery/identities.js +97 -0
  240. package/dist-runtime/delivery/identities.js.map +1 -0
  241. package/dist-runtime/delivery/input-files.d.ts +5 -0
  242. package/dist-runtime/delivery/input-files.js +70 -0
  243. package/dist-runtime/delivery/input-files.js.map +1 -0
  244. package/dist-runtime/delivery/inputs.d.ts +62 -0
  245. package/dist-runtime/delivery/inputs.js +187 -0
  246. package/dist-runtime/delivery/inputs.js.map +1 -0
  247. package/dist-runtime/delivery/journal.d.ts +35 -0
  248. package/dist-runtime/delivery/journal.js +270 -0
  249. package/dist-runtime/delivery/journal.js.map +1 -0
  250. package/dist-runtime/delivery/manifest.d.ts +14 -0
  251. package/dist-runtime/delivery/manifest.js +68 -0
  252. package/dist-runtime/delivery/manifest.js.map +1 -0
  253. package/dist-runtime/delivery/materialization.d.ts +20 -0
  254. package/dist-runtime/delivery/materialization.js +138 -0
  255. package/dist-runtime/delivery/materialization.js.map +1 -0
  256. package/dist-runtime/delivery/observations.d.ts +31 -0
  257. package/dist-runtime/delivery/observations.js +38 -0
  258. package/dist-runtime/delivery/observations.js.map +1 -0
  259. package/dist-runtime/delivery/parameters.d.ts +53 -0
  260. package/dist-runtime/delivery/parameters.js +257 -0
  261. package/dist-runtime/delivery/parameters.js.map +1 -0
  262. package/dist-runtime/delivery/pending.d.ts +70 -0
  263. package/dist-runtime/delivery/pending.js +99 -0
  264. package/dist-runtime/delivery/pending.js.map +1 -0
  265. package/dist-runtime/delivery/plan.d.ts +50 -0
  266. package/dist-runtime/delivery/plan.js +209 -0
  267. package/dist-runtime/delivery/plan.js.map +1 -0
  268. package/dist-runtime/delivery/planning.d.ts +81 -0
  269. package/dist-runtime/delivery/planning.js +302 -0
  270. package/dist-runtime/delivery/planning.js.map +1 -0
  271. package/dist-runtime/delivery/policy.d.ts +4 -0
  272. package/dist-runtime/delivery/policy.js +9 -0
  273. package/dist-runtime/delivery/policy.js.map +1 -0
  274. package/dist-runtime/delivery/preparation.d.ts +6 -0
  275. package/dist-runtime/delivery/preparation.js +158 -0
  276. package/dist-runtime/delivery/preparation.js.map +1 -0
  277. package/dist-runtime/delivery/production-environment.d.ts +2 -0
  278. package/dist-runtime/delivery/production-environment.js +12 -0
  279. package/dist-runtime/delivery/production-environment.js.map +1 -0
  280. package/dist-runtime/delivery/production-finalization.d.ts +86 -0
  281. package/dist-runtime/delivery/production-finalization.js +278 -0
  282. package/dist-runtime/delivery/production-finalization.js.map +1 -0
  283. package/dist-runtime/delivery/production.d.ts +461 -0
  284. package/dist-runtime/delivery/production.js +396 -0
  285. package/dist-runtime/delivery/production.js.map +1 -0
  286. package/dist-runtime/delivery/project-files.d.ts +8 -0
  287. package/dist-runtime/delivery/project-files.js +82 -0
  288. package/dist-runtime/delivery/project-files.js.map +1 -0
  289. package/dist-runtime/delivery/project.d.ts +15 -0
  290. package/dist-runtime/delivery/project.js +157 -0
  291. package/dist-runtime/delivery/project.js.map +1 -0
  292. package/dist-runtime/delivery/protocol.d.ts +49 -0
  293. package/dist-runtime/delivery/protocol.js +112 -0
  294. package/dist-runtime/delivery/protocol.js.map +1 -0
  295. package/dist-runtime/delivery/references.d.ts +19 -0
  296. package/dist-runtime/delivery/references.js +84 -0
  297. package/dist-runtime/delivery/references.js.map +1 -0
  298. package/dist-runtime/delivery/release-graph.d.ts +93 -0
  299. package/dist-runtime/delivery/release-graph.js +106 -0
  300. package/dist-runtime/delivery/release-graph.js.map +1 -0
  301. package/dist-runtime/delivery/release-history-capture.d.ts +7 -0
  302. package/dist-runtime/delivery/release-history-capture.js +76 -0
  303. package/dist-runtime/delivery/release-history-capture.js.map +1 -0
  304. package/dist-runtime/delivery/release-history.d.ts +43 -0
  305. package/dist-runtime/delivery/release-history.js +246 -0
  306. package/dist-runtime/delivery/release-history.js.map +1 -0
  307. package/dist-runtime/delivery/release.d.ts +172 -0
  308. package/dist-runtime/delivery/release.js +209 -0
  309. package/dist-runtime/delivery/release.js.map +1 -0
  310. package/dist-runtime/delivery/safe-manifest.d.ts +9 -0
  311. package/dist-runtime/delivery/safe-manifest.js +13 -0
  312. package/dist-runtime/delivery/safe-manifest.js.map +1 -0
  313. package/dist-runtime/delivery/safe-observation.d.ts +30 -0
  314. package/dist-runtime/delivery/safe-observation.js +487 -0
  315. package/dist-runtime/delivery/safe-observation.js.map +1 -0
  316. package/dist-runtime/delivery/safe-prepare.d.ts +13 -0
  317. package/dist-runtime/delivery/safe-prepare.js +81 -0
  318. package/dist-runtime/delivery/safe-prepare.js.map +1 -0
  319. package/dist-runtime/delivery/safe.d.ts +91 -0
  320. package/dist-runtime/delivery/safe.js +243 -0
  321. package/dist-runtime/delivery/safe.js.map +1 -0
  322. package/dist-runtime/delivery/same-fork-baseline.d.ts +8 -0
  323. package/dist-runtime/delivery/same-fork-baseline.js +20 -0
  324. package/dist-runtime/delivery/same-fork-baseline.js.map +1 -0
  325. package/dist-runtime/delivery/setup.d.ts +31 -0
  326. package/dist-runtime/delivery/setup.js +215 -0
  327. package/dist-runtime/delivery/setup.js.map +1 -0
  328. package/dist-runtime/delivery/source.d.ts +41 -0
  329. package/dist-runtime/delivery/source.js +137 -0
  330. package/dist-runtime/delivery/source.js.map +1 -0
  331. package/dist-runtime/delivery/target-fields.d.ts +2 -0
  332. package/dist-runtime/delivery/target-fields.js +11 -0
  333. package/dist-runtime/delivery/target-fields.js.map +1 -0
  334. package/dist-runtime/delivery/validation.d.ts +9 -0
  335. package/dist-runtime/delivery/validation.js +150 -0
  336. package/dist-runtime/delivery/validation.js.map +1 -0
  337. package/dist-runtime/delivery/verification.d.ts +16 -0
  338. package/dist-runtime/delivery/verification.js +65 -0
  339. package/dist-runtime/delivery/verification.js.map +1 -0
  340. package/dist-runtime/migrate.js +1 -0
  341. package/dist-runtime/migrate.js.map +1 -1
  342. package/dist-runtime/miner/binary.d.ts +2 -0
  343. package/dist-runtime/miner/binary.js +54 -0
  344. package/dist-runtime/miner/binary.js.map +1 -0
  345. package/dist-runtime/miner/cli.d.ts +1 -0
  346. package/dist-runtime/miner/cli.js +131 -0
  347. package/dist-runtime/miner/cli.js.map +1 -0
  348. package/dist-runtime/miner/index.d.ts +5 -0
  349. package/dist-runtime/miner/index.js +13 -0
  350. package/dist-runtime/miner/index.js.map +1 -0
  351. package/dist-runtime/miner/request.d.ts +7 -0
  352. package/dist-runtime/miner/request.js +73 -0
  353. package/dist-runtime/miner/request.js.map +1 -0
  354. package/dist-runtime/miner/runner.d.ts +2 -0
  355. package/dist-runtime/miner/runner.js +131 -0
  356. package/dist-runtime/miner/runner.js.map +1 -0
  357. package/dist-runtime/miner/types.d.ts +89 -0
  358. package/dist-runtime/miner/types.js +3 -0
  359. package/dist-runtime/miner/types.js.map +1 -0
  360. package/dist-runtime/miner/verify.d.ts +2 -0
  361. package/dist-runtime/miner/verify.js +75 -0
  362. package/dist-runtime/miner/verify.js.map +1 -0
  363. package/dist-runtime/runtime-identity.json +2 -2
  364. package/dist-runtime/vendor/plan-codec/index.cjs +820 -0
  365. package/dist-runtime/vendor/plan-codec/index.d.cts +32 -0
  366. package/dist-runtime/vendor/plan-codec/provenance.json +24 -0
  367. package/dist-runtime/workflow/engine.d.ts +14 -0
  368. package/dist-runtime/workflow/engine.js +160 -0
  369. package/dist-runtime/workflow/engine.js.map +1 -0
  370. package/dist-runtime/workflow/lib/authority.d.ts +6 -3
  371. package/dist-runtime/workflow/lib/authority.js.map +1 -1
  372. package/dist-runtime/workflow/lib/calls.d.ts +1 -1
  373. package/dist-runtime/workflow/lib/calls.js +43 -34
  374. package/dist-runtime/workflow/lib/calls.js.map +1 -1
  375. package/dist-runtime/workflow/lib/canonicalData.d.ts +8 -0
  376. package/dist-runtime/workflow/lib/canonicalData.js +68 -0
  377. package/dist-runtime/workflow/lib/canonicalData.js.map +1 -0
  378. package/dist-runtime/workflow/lib/config.d.ts +3 -1
  379. package/dist-runtime/workflow/lib/config.js.map +1 -1
  380. package/dist-runtime/workflow/lib/context.d.ts +76 -0
  381. package/dist-runtime/workflow/lib/context.js +3 -0
  382. package/dist-runtime/workflow/lib/context.js.map +1 -0
  383. package/dist-runtime/workflow/lib/controlledMulticallAbi.d.ts +2 -0
  384. package/dist-runtime/workflow/lib/controlledMulticallAbi.js +10 -0
  385. package/dist-runtime/workflow/lib/controlledMulticallAbi.js.map +1 -0
  386. package/dist-runtime/workflow/lib/create2.d.ts +1 -1
  387. package/dist-runtime/workflow/lib/create2.js +9 -12
  388. package/dist-runtime/workflow/lib/create2.js.map +1 -1
  389. package/dist-runtime/workflow/lib/deployments.d.ts +5 -5
  390. package/dist-runtime/workflow/lib/deployments.js +5 -13
  391. package/dist-runtime/workflow/lib/deployments.js.map +1 -1
  392. package/dist-runtime/workflow/lib/evidencePorts.d.ts +55 -0
  393. package/dist-runtime/workflow/lib/evidencePorts.js +3 -0
  394. package/dist-runtime/workflow/lib/evidencePorts.js.map +1 -0
  395. package/dist-runtime/workflow/lib/executionPlan.d.ts +4 -42
  396. package/dist-runtime/workflow/lib/executionPlan.js +15 -210
  397. package/dist-runtime/workflow/lib/executionPlan.js.map +1 -1
  398. package/dist-runtime/workflow/lib/gateTool.d.ts +6 -2
  399. package/dist-runtime/workflow/lib/gateTool.js +20 -10
  400. package/dist-runtime/workflow/lib/gateTool.js.map +1 -1
  401. package/dist-runtime/workflow/lib/gateToolSync.d.ts +1 -1
  402. package/dist-runtime/workflow/lib/gateToolSync.js +3 -2
  403. package/dist-runtime/workflow/lib/gateToolSync.js.map +1 -1
  404. package/dist-runtime/workflow/lib/operationNames.d.ts +3 -0
  405. package/dist-runtime/workflow/lib/operationNames.js +34 -0
  406. package/dist-runtime/workflow/lib/operationNames.js.map +1 -0
  407. package/dist-runtime/workflow/lib/parameters.d.ts +1 -1
  408. package/dist-runtime/workflow/lib/parameters.js +9 -24
  409. package/dist-runtime/workflow/lib/parameters.js.map +1 -1
  410. package/dist-runtime/workflow/lib/pendingDeploymentReuse.js +18 -52
  411. package/dist-runtime/workflow/lib/pendingDeploymentReuse.js.map +1 -1
  412. package/dist-runtime/workflow/lib/pendingUupsBinding.d.ts +42 -0
  413. package/dist-runtime/workflow/lib/pendingUupsBinding.js +39 -0
  414. package/dist-runtime/workflow/lib/pendingUupsBinding.js.map +1 -0
  415. package/dist-runtime/workflow/lib/plan.d.ts +55 -0
  416. package/dist-runtime/workflow/lib/plan.js +324 -0
  417. package/dist-runtime/workflow/lib/plan.js.map +1 -0
  418. package/dist-runtime/workflow/lib/planCli.d.ts +14 -0
  419. package/dist-runtime/workflow/lib/planCli.js +279 -0
  420. package/dist-runtime/workflow/lib/planCli.js.map +1 -0
  421. package/dist-runtime/workflow/lib/preparationEvidence.d.ts +4 -0
  422. package/dist-runtime/workflow/lib/preparationEvidence.js +19 -0
  423. package/dist-runtime/workflow/lib/preparationEvidence.js.map +1 -0
  424. package/dist-runtime/workflow/lib/proxy.d.ts +3 -2
  425. package/dist-runtime/workflow/lib/proxy.js +3 -4
  426. package/dist-runtime/workflow/lib/proxy.js.map +1 -1
  427. package/dist-runtime/workflow/lib/runtime.d.ts +6 -0
  428. package/dist-runtime/workflow/lib/runtime.js +48 -0
  429. package/dist-runtime/workflow/lib/runtime.js.map +1 -0
  430. package/dist-runtime/workflow/lib/signer.d.ts +3 -2
  431. package/dist-runtime/workflow/lib/signer.js +18 -18
  432. package/dist-runtime/workflow/lib/signer.js.map +1 -1
  433. package/dist-runtime/workflow/lib/simulation.d.ts +13 -6
  434. package/dist-runtime/workflow/lib/simulation.js +39 -31
  435. package/dist-runtime/workflow/lib/simulation.js.map +1 -1
  436. package/dist-runtime/workflow/lib/state.js +3 -3
  437. package/dist-runtime/workflow/lib/state.js.map +1 -1
  438. package/dist-runtime/workflow/lib/staticValidation.d.ts +28 -0
  439. package/dist-runtime/workflow/lib/staticValidation.js +54 -10
  440. package/dist-runtime/workflow/lib/staticValidation.js.map +1 -1
  441. package/dist-runtime/workflow/lib/transactionPlanner.d.ts +62 -0
  442. package/dist-runtime/workflow/lib/transactionPlanner.js +258 -0
  443. package/dist-runtime/workflow/lib/transactionPlanner.js.map +1 -0
  444. package/dist-runtime/workflow/lib/typedValue.d.ts +3 -0
  445. package/dist-runtime/workflow/lib/typedValue.js +76 -0
  446. package/dist-runtime/workflow/lib/typedValue.js.map +1 -0
  447. package/dist-runtime/workflow/lib/validation.d.ts +23 -0
  448. package/dist-runtime/workflow/lib/validation.js +15 -0
  449. package/dist-runtime/workflow/lib/validation.js.map +1 -0
  450. package/dist-runtime/workflow/planAdd.d.ts +1 -0
  451. package/dist-runtime/workflow/planAdd.js +11 -0
  452. package/dist-runtime/workflow/planAdd.js.map +1 -0
  453. package/dist-runtime/workflow/planRead.d.ts +1 -0
  454. package/dist-runtime/workflow/planRead.js +11 -0
  455. package/dist-runtime/workflow/planRead.js.map +1 -0
  456. package/dist-runtime/workflow/planStatus.d.ts +1 -0
  457. package/dist-runtime/workflow/planStatus.js +11 -0
  458. package/dist-runtime/workflow/planStatus.js.map +1 -0
  459. package/dist-runtime/workflow/planWrite.d.ts +1 -0
  460. package/dist-runtime/workflow/planWrite.js +11 -0
  461. package/dist-runtime/workflow/planWrite.js.map +1 -0
  462. package/dist-runtime/workflow/run.d.ts +1 -40
  463. package/dist-runtime/workflow/run.js +68 -136
  464. package/dist-runtime/workflow/run.js.map +1 -1
  465. package/dist-runtime/workflow/staticValidate.js +8 -3
  466. package/dist-runtime/workflow/staticValidate.js.map +1 -1
  467. package/dist-runtime/workflow/steps/call.d.ts +1 -1
  468. package/dist-runtime/workflow/steps/check.d.ts +1 -1
  469. package/dist-runtime/workflow/steps/custom.d.ts +1 -1
  470. package/dist-runtime/workflow/steps/deploy.d.ts +1 -1
  471. package/dist-runtime/workflow/steps/deploy.js +58 -55
  472. package/dist-runtime/workflow/steps/deploy.js.map +1 -1
  473. package/dist-runtime/workflow/steps/upgrade.d.ts +1 -1
  474. package/dist-runtime/workflow/steps/upgrade.js +63 -41
  475. package/dist-runtime/workflow/steps/upgrade.js.map +1 -1
  476. package/dist-runtime/workflow/steps/view.d.ts +1 -1
  477. package/docs/compiler-qualification.md +32 -0
  478. package/docs/configuration-runtime-observation.md +29 -0
  479. package/docs/create2-miner.md +100 -0
  480. package/docs/delivery-aggregate.md +27 -0
  481. package/docs/delivery-custom-input-closure.md +51 -0
  482. package/docs/delivery-development.md +32 -0
  483. package/docs/delivery-eoa.md +46 -0
  484. package/docs/delivery-evm-manifest.md +20 -0
  485. package/docs/delivery-execution-store.md +33 -0
  486. package/docs/delivery-inputs.md +46 -0
  487. package/docs/delivery-parameters.md +65 -0
  488. package/docs/delivery-planning.md +140 -0
  489. package/docs/delivery-release.md +65 -0
  490. package/docs/delivery-safe.md +72 -0
  491. package/docs/delivery-setup.md +146 -0
  492. package/docs/delivery-source.md +67 -0
  493. package/docs/direct-package-acceptance.md +20 -0
  494. package/docs/external-infrastructure-acceptance.md +33 -0
  495. package/docs/network-runtime-acceptance.md +18 -0
  496. package/docs/plans/2026-09-09-workflow-extraction.md +16 -0
  497. package/docs/superpowers/plans/2026-07-22-manifest-bootstrap-transaction.md +50 -0
  498. package/docs/superpowers/plans/2026-07-22-manifest-review-remediation.md +49 -0
  499. package/docs/superpowers/plans/2026-08-17-custody-hardhat-signers.md +227 -0
  500. package/docs/superpowers/plans/2026-09-09-remove-template-infrastructure-contracts.md +11 -0
  501. package/docs/superpowers/plans/2026-09-24-scheme-aware-static-validation.md +193 -0
  502. package/docs/superpowers/plans/2026-10-28-create2-miner.md +82 -0
  503. package/docs/workflow-reference.md +1181 -0
  504. package/docs/workflow-runtime-acceptance.md +17 -0
  505. package/docs/workflow-runtime.md +56 -0
  506. package/package.json +134 -9
  507. package/resources/create2/LICENSE +21 -0
  508. package/resources/create2/README.md +9 -0
  509. package/resources/create2/darwin-arm64/smartflow_miner +0 -0
  510. package/resources/create2/darwin-x64/smartflow_miner +0 -0
  511. package/resources/create2/manifest.json +27 -0
  512. package/runtime/config/hardhatAdapters.ts +8 -0
  513. package/runtime/config/networks.ts +20 -11
  514. package/runtime/config/openzeppelin.ts +3 -21
  515. package/runtime/delivery/abi.ts +225 -0
  516. package/runtime/delivery/aggregate-bootstrap.ts +29 -0
  517. package/runtime/delivery/aggregate-channel.ts +85 -0
  518. package/runtime/delivery/aggregate-inputs.ts +39 -0
  519. package/runtime/delivery/aggregate-source.ts +53 -0
  520. package/runtime/delivery/aggregate-worker.ts +133 -0
  521. package/runtime/delivery/aggregate.ts +139 -0
  522. package/runtime/delivery/bindings.ts +37 -0
  523. package/runtime/delivery/check-code.ts +38 -0
  524. package/runtime/delivery/closure-format.ts +350 -0
  525. package/runtime/delivery/codec-pin.ts +3 -0
  526. package/runtime/delivery/codec.ts +50 -0
  527. package/runtime/delivery/compiler-dependency-pins.ts +1685 -0
  528. package/runtime/delivery/compiler-files.ts +179 -0
  529. package/runtime/delivery/compiler-io.ts +10 -0
  530. package/runtime/delivery/compiler-pins.ts +143 -0
  531. package/runtime/delivery/compiler.ts +700 -0
  532. package/runtime/delivery/config.ts +93 -0
  533. package/runtime/delivery/configuration-definition.ts +133 -0
  534. package/runtime/delivery/configuration-hre.ts +130 -0
  535. package/runtime/delivery/configuration-runtime.ts +163 -0
  536. package/runtime/delivery/configuration.ts +64 -0
  537. package/runtime/delivery/create2.ts +57 -0
  538. package/runtime/delivery/custom-closure.ts +993 -0
  539. package/runtime/delivery/custom-format.ts +464 -0
  540. package/runtime/delivery/custom.ts +219 -0
  541. package/runtime/delivery/data.ts +94 -0
  542. package/runtime/delivery/development.ts +262 -0
  543. package/runtime/delivery/engine.ts +29 -0
  544. package/runtime/delivery/eoa-observation.ts +106 -0
  545. package/runtime/delivery/eoa-signed.ts +55 -0
  546. package/runtime/delivery/eoa.ts +288 -0
  547. package/runtime/delivery/execution-db.ts +131 -0
  548. package/runtime/delivery/execution-files.ts +135 -0
  549. package/runtime/delivery/execution-model.ts +102 -0
  550. package/runtime/delivery/execution-store.ts +411 -0
  551. package/runtime/delivery/existing-code.ts +44 -0
  552. package/runtime/delivery/export.ts +99 -0
  553. package/runtime/delivery/forkAudit.ts +620 -0
  554. package/runtime/delivery/hardhat.ts +38 -0
  555. package/runtime/delivery/history-registration.ts +10 -0
  556. package/runtime/delivery/identities.ts +132 -0
  557. package/runtime/delivery/input-files.ts +46 -0
  558. package/runtime/delivery/inputs.ts +197 -0
  559. package/runtime/delivery/journal.ts +201 -0
  560. package/runtime/delivery/manifest.ts +54 -0
  561. package/runtime/delivery/materialization.ts +53 -0
  562. package/runtime/delivery/observations.ts +60 -0
  563. package/runtime/delivery/parameters.ts +349 -0
  564. package/runtime/delivery/pending.ts +98 -0
  565. package/runtime/delivery/plan.ts +337 -0
  566. package/runtime/delivery/planning.ts +397 -0
  567. package/runtime/delivery/policy.ts +9 -0
  568. package/runtime/delivery/preparation.ts +224 -0
  569. package/runtime/delivery/production-environment.ts +6 -0
  570. package/runtime/delivery/production-finalization.ts +172 -0
  571. package/runtime/delivery/production.ts +375 -0
  572. package/runtime/delivery/project-files.ts +58 -0
  573. package/runtime/delivery/project.ts +117 -0
  574. package/runtime/delivery/protocol.ts +94 -0
  575. package/runtime/delivery/references.ts +106 -0
  576. package/runtime/delivery/release-graph.ts +49 -0
  577. package/runtime/delivery/release-history-capture.ts +32 -0
  578. package/runtime/delivery/release-history.ts +120 -0
  579. package/runtime/delivery/release.ts +128 -0
  580. package/runtime/delivery/safe-manifest.ts +11 -0
  581. package/runtime/delivery/safe-observation.ts +626 -0
  582. package/runtime/delivery/safe-prepare.ts +101 -0
  583. package/runtime/delivery/safe.ts +344 -0
  584. package/runtime/delivery/same-fork-baseline.ts +16 -0
  585. package/runtime/delivery/setup.ts +172 -0
  586. package/runtime/delivery/source.ts +130 -0
  587. package/runtime/delivery/target-fields.ts +7 -0
  588. package/runtime/delivery/validation.ts +247 -0
  589. package/runtime/delivery/verification.ts +47 -0
  590. package/runtime/migrate.ts +1 -0
  591. package/runtime/miner/binary.ts +41 -0
  592. package/runtime/miner/cli.ts +87 -0
  593. package/runtime/miner/index.ts +5 -0
  594. package/runtime/miner/request.ts +54 -0
  595. package/runtime/miner/runner.ts +90 -0
  596. package/runtime/miner/types.ts +71 -0
  597. package/runtime/miner/verify.ts +61 -0
  598. package/runtime/vendor/plan-codec/index.cjs +820 -0
  599. package/runtime/vendor/plan-codec/index.d.cts +32 -0
  600. package/runtime/vendor/plan-codec/provenance.json +24 -0
  601. package/runtime/workflow/engine.ts +174 -0
  602. package/runtime/workflow/lib/authority.ts +3 -3
  603. package/runtime/workflow/lib/calls.ts +46 -37
  604. package/runtime/workflow/lib/canonicalData.ts +45 -0
  605. package/runtime/workflow/lib/config.ts +1 -1
  606. package/runtime/workflow/lib/context.ts +76 -0
  607. package/runtime/workflow/lib/controlledMulticallAbi.ts +6 -0
  608. package/runtime/workflow/lib/create2.ts +10 -12
  609. package/runtime/workflow/lib/deployments.ts +6 -14
  610. package/runtime/workflow/lib/evidencePorts.ts +20 -0
  611. package/runtime/workflow/lib/executionPlan.ts +17 -268
  612. package/runtime/workflow/lib/gateTool.ts +20 -8
  613. package/runtime/workflow/lib/gateToolSync.ts +3 -3
  614. package/runtime/workflow/lib/operationNames.ts +32 -0
  615. package/runtime/workflow/lib/parameters.ts +7 -23
  616. package/runtime/workflow/lib/pendingDeploymentReuse.ts +4 -56
  617. package/runtime/workflow/lib/pendingUupsBinding.ts +43 -0
  618. package/runtime/workflow/lib/plan.ts +334 -0
  619. package/runtime/workflow/lib/planCli.ts +279 -0
  620. package/runtime/workflow/lib/preparationEvidence.ts +14 -0
  621. package/runtime/workflow/lib/proxy.ts +5 -3
  622. package/runtime/workflow/lib/runtime.ts +46 -0
  623. package/runtime/workflow/lib/signer.ts +8 -5
  624. package/runtime/workflow/lib/simulation.ts +41 -17
  625. package/runtime/workflow/lib/state.ts +3 -3
  626. package/runtime/workflow/lib/staticValidation.ts +92 -11
  627. package/runtime/workflow/lib/transactionPlanner.ts +314 -0
  628. package/runtime/workflow/lib/typedValue.ts +46 -0
  629. package/runtime/workflow/lib/validation.ts +50 -0
  630. package/runtime/workflow/planAdd.ts +8 -0
  631. package/runtime/workflow/planRead.ts +8 -0
  632. package/runtime/workflow/planStatus.ts +8 -0
  633. package/runtime/workflow/planWrite.ts +8 -0
  634. package/runtime/workflow/run.ts +41 -174
  635. package/runtime/workflow/staticValidate.ts +8 -3
  636. package/runtime/workflow/steps/call.ts +1 -1
  637. package/runtime/workflow/steps/check.ts +1 -1
  638. package/runtime/workflow/steps/custom.ts +1 -1
  639. package/runtime/workflow/steps/deploy.ts +59 -59
  640. package/runtime/workflow/steps/upgrade.ts +71 -47
  641. package/runtime/workflow/steps/view.ts +1 -1
@@ -1,12 +1,11 @@
1
+ import { assertPendingUupsPreparation, assertPendingUupsCurrentState, planDeployment, sameAddress } from "./pendingUupsBinding";
1
2
  import fs from "fs";
2
3
  import path from "path";
3
4
  import type { Provider } from "ethers";
4
5
  import {
5
6
  canonicalPreparationJson,
6
- hashPreparationRequest,
7
7
  normalizePreparationPlan,
8
8
  normalizePreparationRequest,
9
- type GateToolPreparationPlanV1,
10
9
  } from "gate-evm-tools/workflow";
11
10
  import { readJsonFile } from "./config";
12
11
  import {
@@ -18,7 +17,6 @@ import {
18
17
  type DeploymentChange,
19
18
  type PendingDeploymentReuseEvidence,
20
19
  } from "./deploymentRecords";
21
- import { getERC1967Implementation } from "./erc1967";
22
20
  import { loadReleaseExecutionPlan } from "./executionPlan";
23
21
  import { readParameterLockExecution } from "./lock";
24
22
  import { loadOperatorExecutionResult } from "./operatorExecution";
@@ -55,12 +53,6 @@ const isRecord = (value: unknown): value is Record<string, unknown> => (
55
53
  !!value && typeof value === "object" && !Array.isArray(value)
56
54
  );
57
55
 
58
- const sameAddress = (left: unknown, right: unknown): boolean => (
59
- typeof left === "string"
60
- && typeof right === "string"
61
- && left.toLowerCase() === right.toLowerCase()
62
- );
63
-
64
56
  const sameFingerprint = (left: ReleaseFingerprint, right: ReleaseFingerprint): boolean => (
65
57
  left.manifestHash === right.manifestHash
66
58
  && left.artifactHash === right.artifactHash
@@ -90,17 +82,6 @@ const pendingCandidateFiles = (root: string): string[] => fs.readdirSync(root)
90
82
  .filter((name) => /^contractInfo\.pending\.[A-Za-z0-9][A-Za-z0-9_-]{0,199}\.json$/.test(name))
91
83
  .map((name) => path.join(root, name));
92
84
 
93
- const planDeployment = (
94
- plan: GateToolPreparationPlanV1,
95
- role: "implementation" | "proxy",
96
- ) => {
97
- const matches = plan.deployments.filter((deployment) => deployment.role === role);
98
- if (matches.length !== 1) {
99
- throw new Error(`GateTool plan must contain exactly one ${role} deployment`);
100
- }
101
- return matches[0];
102
- };
103
-
104
85
  const assertSuccessfulVerification = (
105
86
  input: PendingUupsReuseInput,
106
87
  executionId: string,
@@ -283,28 +264,8 @@ const verifyCandidate = async (
283
264
  ));
284
265
  const implementation = planDeployment(plan, "implementation");
285
266
  const proxy = planDeployment(plan, "proxy");
286
- if (
287
- plan.kind !== "uups-placeholder-deploy"
288
- || plan.scheme !== input.scheme
289
- || plan.network !== input.network
290
- || plan.target !== input.network
291
- || request.kind !== "uups-placeholder-deploy"
292
- || request.scheme !== input.scheme
293
- || request.network !== input.network
294
- || request.target !== input.network
295
- || hashPreparationRequest(request) !== plan.requestHash
296
- || !sameAddress(request.factory, input.factory)
297
- || request.proxySalt.toLowerCase() !== input.proxySalt.toLowerCase()
298
- || request.implementationSalt.toLowerCase() !== change.implementationSalt!.toLowerCase()
299
- || !sameAddress(request.placeholderImplementation, input.placeholderImplementationAddress)
300
- || !sameAddress(proxy.address, change.address)
301
- || proxy.salt.toLowerCase() !== input.proxySalt.toLowerCase()
302
- || !sameAddress(implementation.address, change.implementationAddress)
303
- || implementation.salt.toLowerCase() !== change.implementationSalt!.toLowerCase()
304
- || !/^[0-9a-f]{64}$/.test(plan.artifact.digest)
305
- ) {
306
- throw new Error("Pending GateTool evidence does not match the current UUPS deployment");
307
- }
267
+ if (plan.network !== input.network || request.network !== input.network) throw new Error("Pending GateTool network differs from the legacy target");
268
+ assertPendingUupsPreparation(input, change, request, plan);
308
269
 
309
270
  const executionPlan = loadReleaseExecutionPlan({
310
271
  root: input.root,
@@ -344,20 +305,7 @@ const verifyCandidate = async (
344
305
  }
345
306
  }
346
307
 
347
- const proxyCode = await input.provider.getCode(proxy.address, input.blockTag);
348
- const implementationCode = await input.provider.getCode(implementation.address, input.blockTag);
349
- const currentImplementation = await getERC1967Implementation(
350
- input.provider,
351
- proxy.address,
352
- input.blockTag,
353
- );
354
- if (
355
- !proxyCode || proxyCode === "0x"
356
- || !implementationCode || implementationCode === "0x"
357
- || !sameAddress(currentImplementation, implementation.address)
358
- ) {
359
- throw new Error("Pending deployment does not match current on-chain UUPS state");
360
- }
308
+ await assertPendingUupsCurrentState(input, proxy.address, implementation.address);
361
309
 
362
310
  const deploymentRecordPath = path.join(
363
311
  input.taskDir,
@@ -0,0 +1,43 @@
1
+ import type { Provider } from 'ethers';
2
+ import { hashPreparationRequest, type GateToolPreparationPlanV1, type GateToolPreparationRequestV1 } from 'gate-evm-tools/workflow';
3
+ import type { DeploymentChange, PendingDeploymentReuseEvidence } from './deploymentRecords';
4
+ import { getERC1967Implementation } from './erc1967';
5
+ export interface PendingUupsBindingInput {
6
+ taskId: string; network: string; stepId: string; instanceId: string; actualContract: string;
7
+ contractInfoKey: string; scheme: 'evm' | 'zksync-eravm'; factory: string; multicall: string;
8
+ proxySalt: string; expectedAddress?: string; placeholderImplementationAddress: string;
9
+ provider: Pick<Provider, 'getCode' | 'getStorage'>; blockTag?: number;
10
+ }
11
+ export interface PendingReuseBinding { executionId: string; target: string; planHash: string; artifactDigest: string; observationIds: string[] }
12
+ export interface PendingUupsResolution {
13
+ implementationAddress: string; implementationSalt: string; proxyAddress: string; artifactDigest: string;
14
+ legacyEvidence?: PendingDeploymentReuseEvidence;
15
+ binding?: PendingReuseBinding;
16
+ }
17
+ export interface PendingUupsResolverPort { resolve(input: PendingUupsBindingInput): Promise<PendingUupsResolution | undefined> }
18
+ export const sameAddress = (left: unknown, right: unknown): boolean => typeof left === 'string' && typeof right === 'string' && left.toLowerCase() === right.toLowerCase();
19
+ export function planDeployment(plan: GateToolPreparationPlanV1, role: 'implementation' | 'proxy') {
20
+ const matches = plan.deployments.filter(d => d.role === role);
21
+ if (matches.length !== 1) throw new Error(`GateTool plan must contain exactly one ${role} deployment`);
22
+ return matches[0];
23
+ }
24
+ /** Common semantic predicate; no lock, filesystem, finalSimulation or recorder lifecycle. */
25
+ export function assertPendingUupsPreparation(input: PendingUupsBindingInput, change: DeploymentChange, request: GateToolPreparationRequestV1, plan: GateToolPreparationPlanV1): void {
26
+ const implementation = planDeployment(plan, 'implementation'), proxy = planDeployment(plan, 'proxy');
27
+ if (change.stepId !== input.stepId || change.instanceId !== input.instanceId || change.kind !== 'deploy' || change.actualContract !== input.actualContract || change.contractInfoKey !== input.contractInfoKey || change.strategy !== 'create2' || change.proxyKind !== 'uups'
28
+ || !sameAddress(change.factory, input.factory) || !sameAddress(change.multicall, input.multicall) || change.salt?.toLowerCase() !== input.proxySalt.toLowerCase() || !sameAddress(change.placeholderImplementationAddress, input.placeholderImplementationAddress)
29
+ || (input.expectedAddress && !sameAddress(input.expectedAddress, proxy.address))
30
+ || plan.kind !== 'uups-placeholder-deploy' || plan.scheme !== input.scheme || plan.target !== input.network
31
+ || request.kind !== 'uups-placeholder-deploy' || request.scheme !== input.scheme || request.target !== input.network
32
+ || request.network !== plan.network || plan.contract !== request.contract || plan.artifact.contractName !== input.actualContract
33
+ || hashPreparationRequest(request) !== plan.requestHash || !sameAddress(request.factory, input.factory)
34
+ || request.proxySalt.toLowerCase() !== input.proxySalt.toLowerCase() || request.implementationSalt.toLowerCase() !== change.implementationSalt?.toLowerCase()
35
+ || !sameAddress(request.placeholderImplementation, input.placeholderImplementationAddress)
36
+ || !sameAddress(proxy.address, change.address ?? change.predictedAddress) || proxy.salt.toLowerCase() !== input.proxySalt.toLowerCase()
37
+ || !sameAddress(implementation.address, change.implementationAddress) || implementation.salt.toLowerCase() !== change.implementationSalt?.toLowerCase()
38
+ || !/^[0-9a-f]{64}$/.test(plan.artifact.digest)) throw new Error('Pending GateTool evidence does not match the current UUPS deployment');
39
+ }
40
+ export async function assertPendingUupsCurrentState(input: Pick<PendingUupsBindingInput, 'provider' | 'blockTag'>, proxy: string, implementation: string): Promise<void> {
41
+ const [proxyCode, implementationCode, current] = await Promise.all([input.provider.getCode(proxy, input.blockTag), input.provider.getCode(implementation, input.blockTag), getERC1967Implementation(input.provider, proxy, input.blockTag)]);
42
+ if (!proxyCode || proxyCode === '0x' || !implementationCode || implementationCode === '0x' || !sameAddress(current, implementation)) throw new Error('Pending deployment does not match current on-chain UUPS state');
43
+ }
@@ -0,0 +1,334 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import YAML from "yaml";
4
+
5
+ /**
6
+ * Read and write `handoff.md`, the plan-level carrier shared by the GateFlow
7
+ * entry point and the Codex command line.
8
+ *
9
+ * This is deliberately NOT the execution-level `handoff.json`: that one records
10
+ * deployment evidence and is validated byte for byte by the deployment gates.
11
+ * The plan layer says what is to be done; the execution layer proves what was.
12
+ * Keeping them in separate files is the point -- neither should have to carry
13
+ * the other's fields.
14
+ *
15
+ * Nothing here trusts the file. A plan that moves between two runtimes is
16
+ * exactly where a crafted document would be worth writing, so the parse is
17
+ * strict, the forbidden-field list is checked recursively, and the writer is
18
+ * the only sanctioned producer of the deterministic parts.
19
+ */
20
+
21
+ export const PLAN_SCHEMA = "gateflow-plan/v1";
22
+ export const PLAN_FILE = "handoff.md";
23
+ export const SECTIONS = ["development", "audit", "deployment"] as const;
24
+ export type PlanSection = (typeof SECTIONS)[number];
25
+
26
+ export const TASK_STATUSES = ["pending", "ready", "running", "completed", "failed", "cancelled"] as const;
27
+ export type TaskStatus = (typeof TASK_STATUSES)[number];
28
+
29
+ /** Local bindings. A plan changes entry point, so none of these can travel. */
30
+ const FORBIDDEN_FIELDS = [
31
+ "sessionid", "runtimerunid", "stageid", "attemptid", "workspacepath",
32
+ "authorizationid", "executionlock", "localstate", "planid", "workspacerelativepath",
33
+ ];
34
+
35
+ export interface PlanTask {
36
+ planKey: string;
37
+ title: string;
38
+ objective: string;
39
+ acceptance: string[];
40
+ dependsOn: string[];
41
+ status: TaskStatus;
42
+ scope?: Record<string, unknown>;
43
+ parameters?: unknown[];
44
+ expectedArtifacts?: string[];
45
+ allowedChanges?: string[];
46
+ }
47
+
48
+ export interface Plan {
49
+ schema: string;
50
+ taskId: string;
51
+ revision: number;
52
+ title: string;
53
+ sections: Record<PlanSection, "enabled" | "disabled">;
54
+ updatedAt: string;
55
+ tasks: Record<PlanSection, PlanTask[]>;
56
+ }
57
+
58
+ const SAFE_KEY = /^[a-z0-9][a-z0-9-]{0,199}$/;
59
+
60
+ function fail(message: string): never {
61
+ throw new Error(`handoff.md: ${message}`);
62
+ }
63
+
64
+ function normalizeFieldName(key: string): string {
65
+ return key.replace(/[_-]/g, "").toLowerCase();
66
+ }
67
+
68
+ /** Recursive, because a forbidden name is just as bad nested as at the top. */
69
+ function assertNoForbiddenFields(value: unknown, where: string): void {
70
+ if (Array.isArray(value)) {
71
+ value.forEach((item, index) => assertNoForbiddenFields(item, `${where}[${index}]`));
72
+ return;
73
+ }
74
+ if (!value || typeof value !== "object") return;
75
+ for (const [key, child] of Object.entries(value)) {
76
+ if (FORBIDDEN_FIELDS.includes(normalizeFieldName(key))) {
77
+ fail(`${where}.${key} is a local binding and cannot travel between entry points`);
78
+ }
79
+ assertNoForbiddenFields(child, `${where}.${key}`);
80
+ }
81
+ }
82
+
83
+ const ABSOLUTE = /^(?:\/|\\|[A-Za-z]:[\\/]|~\/)/;
84
+
85
+ function assertNoSecretsOrPaths(value: unknown, where: string): void {
86
+ if (typeof value === "string") {
87
+ if (ABSOLUTE.test(value)) fail(`${where} must not be an absolute path`);
88
+ if (/-----BEGIN .*PRIVATE KEY-----/.test(value)) fail(`${where} must not contain a private key`);
89
+ if (/\bBearer\s+\S+/.test(value)) fail(`${where} must not contain a bearer token`);
90
+ if (/[?&](?:api[_-]?key|token|secret)=\S+/i.test(value)) fail(`${where} must not contain a credentialed URL`);
91
+ return;
92
+ }
93
+ if (Array.isArray(value)) {
94
+ value.forEach((item, index) => assertNoSecretsOrPaths(item, `${where}[${index}]`));
95
+ return;
96
+ }
97
+ if (!value || typeof value !== "object") return;
98
+ for (const [key, child] of Object.entries(value)) assertNoSecretsOrPaths(child, `${where}.${key}`);
99
+ }
100
+
101
+ /**
102
+ * Check caller input before it is reduced to known fields. The CLI builds
103
+ * tasks from a whitelist, so a forbidden name dropped there would never reach
104
+ * the parser's check -- it would vanish silently instead of being refused.
105
+ */
106
+ export function assertPortableInput(value: unknown, where: string): void {
107
+ assertNoForbiddenFields(value, where);
108
+ assertNoSecretsOrPaths(value, where);
109
+ }
110
+
111
+ function nonEmptyString(value: unknown, where: string): string {
112
+ if (typeof value !== "string" || !value.trim()) fail(`${where} must be a non-empty string`);
113
+ return value;
114
+ }
115
+
116
+ function stringArray(value: unknown, where: string, options: { min?: number } = {}): string[] {
117
+ if (!Array.isArray(value)) fail(`${where} must be an array`);
118
+ const items = value.map((item, index) => nonEmptyString(item, `${where}[${index}]`));
119
+ if (options.min !== undefined && items.length < options.min) {
120
+ fail(`${where} must contain at least ${options.min} item(s)`);
121
+ }
122
+ return items;
123
+ }
124
+
125
+ function parseTask(raw: unknown, where: string): PlanTask {
126
+ if (!raw || typeof raw !== "object" || Array.isArray(raw)) fail(`${where} must be an object`);
127
+ const value = raw as Record<string, unknown>;
128
+ const planKey = nonEmptyString(value.planKey, `${where}.planKey`);
129
+ if (!SAFE_KEY.test(planKey)) {
130
+ fail(`${where}.planKey must be lower-case alphanumeric with hyphens: "${planKey}"`);
131
+ }
132
+ const status = nonEmptyString(value.status ?? "pending", `${where}.status`);
133
+ if (!(TASK_STATUSES as readonly string[]).includes(status)) {
134
+ fail(`${where}.status must be one of ${TASK_STATUSES.join(", ")}`);
135
+ }
136
+ const task: PlanTask = {
137
+ planKey,
138
+ title: nonEmptyString(value.title, `${where}.title`),
139
+ objective: nonEmptyString(value.objective, `${where}.objective`),
140
+ acceptance: stringArray(value.acceptance, `${where}.acceptance`, { min: 1 }),
141
+ dependsOn: value.dependsOn === undefined ? [] : stringArray(value.dependsOn, `${where}.dependsOn`),
142
+ status: status as TaskStatus,
143
+ };
144
+ if (value.scope !== undefined) task.scope = value.scope as Record<string, unknown>;
145
+ if (value.parameters !== undefined) {
146
+ if (!Array.isArray(value.parameters)) fail(`${where}.parameters must be an array`);
147
+ task.parameters = value.parameters;
148
+ }
149
+ if (value.expectedArtifacts !== undefined) {
150
+ task.expectedArtifacts = stringArray(value.expectedArtifacts, `${where}.expectedArtifacts`);
151
+ }
152
+ if (value.allowedChanges !== undefined) {
153
+ task.allowedChanges = stringArray(value.allowedChanges, `${where}.allowedChanges`);
154
+ }
155
+ assertNoForbiddenFields(task, where);
156
+ assertNoSecretsOrPaths(task, where);
157
+ return task;
158
+ }
159
+
160
+ /** Dependency rules are enforced across the whole plan, not per task. */
161
+ function assertDependencyGraph(tasks: PlanTask[]): void {
162
+ const byKey = new Map(tasks.map((task) => [task.planKey, task]));
163
+ if (byKey.size !== tasks.length) {
164
+ const seen = new Set<string>();
165
+ for (const task of tasks) {
166
+ if (seen.has(task.planKey)) fail(`duplicate planKey "${task.planKey}"`);
167
+ seen.add(task.planKey);
168
+ }
169
+ }
170
+ for (const task of tasks) {
171
+ if (task.dependsOn.includes(task.planKey)) fail(`task "${task.planKey}" depends on itself`);
172
+ for (const dependency of task.dependsOn) {
173
+ if (!byKey.has(dependency)) {
174
+ fail(`task "${task.planKey}" depends on unknown task "${dependency}"`);
175
+ }
176
+ }
177
+ }
178
+ // Iterative colouring; a cycle here means the plan must be re-cut, not patched.
179
+ const state = new Map<string, "visiting" | "done">();
180
+ const visit = (key: string, trail: string[]): void => {
181
+ const current = state.get(key);
182
+ if (current === "done") return;
183
+ if (current === "visiting") fail(`dependency cycle: ${[...trail, key].join(" -> ")}`);
184
+ state.set(key, "visiting");
185
+ for (const dependency of byKey.get(key)!.dependsOn) visit(dependency, [...trail, key]);
186
+ state.set(key, "done");
187
+ };
188
+ for (const task of tasks) visit(task.planKey, []);
189
+ }
190
+
191
+ const FRONTMATTER = /^---\n([\s\S]*?)\n---/;
192
+ const TASK_BLOCK = /```gateflow-task\n([\s\S]*?)\n```/g;
193
+
194
+ export function parsePlan(text: string): Plan {
195
+ const match = text.match(FRONTMATTER);
196
+ if (!match) fail("missing YAML frontmatter");
197
+ let meta: Record<string, unknown>;
198
+ try {
199
+ meta = YAML.parse(match[1]) as Record<string, unknown>;
200
+ } catch (error) {
201
+ fail(`frontmatter is not valid YAML: ${(error as Error).message}`);
202
+ }
203
+ if (!meta || typeof meta !== "object") fail("frontmatter must be a mapping");
204
+ assertNoForbiddenFields(meta, "frontmatter");
205
+ assertNoSecretsOrPaths(meta, "frontmatter");
206
+
207
+ if (meta.schema !== PLAN_SCHEMA) fail(`schema must be "${PLAN_SCHEMA}"`);
208
+ const taskId = nonEmptyString(meta.taskId, "frontmatter.taskId");
209
+ if (!SAFE_KEY.test(taskId)) fail("frontmatter.taskId must be lower-case alphanumeric with hyphens");
210
+ const revision = meta.revision;
211
+ if (!Number.isInteger(revision) || (revision as number) < 1) fail("frontmatter.revision must be a positive integer");
212
+ const title = nonEmptyString(meta.title, "frontmatter.title");
213
+
214
+ // Each heading exactly once, in the fixed order.
215
+ const body = text.slice(match[0].length);
216
+ const headings = [...body.matchAll(/^## (.+)$/gm)].map((item) => item[1].trim());
217
+ if (headings.length !== SECTIONS.length || SECTIONS.some((section, index) => headings[index] !== section)) {
218
+ fail(`body must contain exactly these headings in order: ${SECTIONS.map((s) => `## ${s}`).join(", ")}`);
219
+ }
220
+
221
+ const tasks = {} as Record<PlanSection, PlanTask[]>;
222
+ const sections = {} as Record<PlanSection, "enabled" | "disabled">;
223
+ SECTIONS.forEach((section, index) => {
224
+ const start = body.indexOf(`## ${section}`) + `## ${section}`.length;
225
+ const end = index + 1 < SECTIONS.length ? body.indexOf(`## ${SECTIONS[index + 1]}`) : body.length;
226
+ const chunk = body.slice(start, end);
227
+ const declared = meta.sections;
228
+ const fromFrontmatter = declared && typeof declared === "object" && !Array.isArray(declared)
229
+ ? (declared as Record<string, unknown>)[section]
230
+ : undefined;
231
+ const inline = chunk.match(/^\s*(enabled|disabled)\s*$/m)?.[1];
232
+ const state = (fromFrontmatter ?? inline) as string | undefined;
233
+ if (state !== "enabled" && state !== "disabled") {
234
+ fail(`section "${section}" must declare "enabled" or "disabled"`);
235
+ }
236
+ sections[section] = state;
237
+ const parsed = [...chunk.matchAll(TASK_BLOCK)].map((block, order) => {
238
+ let value: unknown;
239
+ try {
240
+ value = JSON.parse(block[1]);
241
+ } catch (error) {
242
+ fail(`section "${section}" task ${order + 1} is not valid JSON: ${(error as Error).message}`);
243
+ }
244
+ return parseTask(value, `section "${section}" task ${order + 1}`);
245
+ });
246
+ if (state === "disabled" && parsed.length > 0) {
247
+ fail(`section "${section}" is disabled but carries ${parsed.length} task(s)`);
248
+ }
249
+ tasks[section] = parsed;
250
+ });
251
+
252
+ const all = SECTIONS.flatMap((section) => tasks[section]);
253
+ if (all.length === 0) fail("plan contains no tasks in any enabled section");
254
+ assertDependencyGraph(all);
255
+
256
+ return {
257
+ schema: PLAN_SCHEMA,
258
+ taskId,
259
+ revision: revision as number,
260
+ title,
261
+ sections,
262
+ updatedAt: nonEmptyString(meta.updatedAt ?? new Date(0).toISOString(), "frontmatter.updatedAt"),
263
+ tasks,
264
+ };
265
+ }
266
+
267
+ export function renderPlan(plan: Plan): string {
268
+ const frontmatter = YAML.stringify({
269
+ schema: PLAN_SCHEMA,
270
+ taskId: plan.taskId,
271
+ revision: plan.revision,
272
+ title: plan.title,
273
+ sections: plan.sections,
274
+ updatedAt: plan.updatedAt,
275
+ }).trimEnd();
276
+ const body = SECTIONS.map((section) => {
277
+ const blocks = plan.tasks[section]
278
+ .map((task) => `\n\`\`\`gateflow-task\n${JSON.stringify(task, null, 2)}\n\`\`\``)
279
+ .join("\n");
280
+ return `## ${section}\n\n${plan.sections[section]}${blocks}`;
281
+ }).join("\n\n");
282
+ return `---\n${frontmatter}\n---\n\n${body}\n`;
283
+ }
284
+
285
+ export function readPlanFile(root: string, relative: string = PLAN_FILE): Plan {
286
+ const file = path.join(root, relative);
287
+ if (!fs.existsSync(file)) fail(`not found at ${relative}`);
288
+ return parsePlan(fs.readFileSync(file, "utf8"));
289
+ }
290
+
291
+ function writeAtomic(file: string, contents: string): void {
292
+ fs.mkdirSync(path.dirname(file), { recursive: true });
293
+ const temporary = `${file}.${process.pid}.${Date.now()}.tmp`;
294
+ try {
295
+ fs.writeFileSync(temporary, contents);
296
+ fs.renameSync(temporary, file);
297
+ } catch (error) {
298
+ if (fs.existsSync(temporary)) fs.unlinkSync(temporary);
299
+ throw error;
300
+ }
301
+ }
302
+
303
+ export function writePlanFile(root: string, plan: Plan, relative: string = PLAN_FILE): string {
304
+ const file = path.join(root, relative);
305
+ writeAtomic(file, renderPlan(plan));
306
+ return file;
307
+ }
308
+
309
+ export const emptyPlan = (taskId: string, title: string, sections: Record<PlanSection, "enabled" | "disabled">): Plan => ({
310
+ schema: PLAN_SCHEMA,
311
+ taskId,
312
+ revision: 1,
313
+ title,
314
+ sections,
315
+ updatedAt: new Date().toISOString(),
316
+ tasks: { development: [], audit: [], deployment: [] },
317
+ });
318
+
319
+ /** Deterministic summary for callers that only need to report what changed. */
320
+ export function planSummary(plan: Plan): Record<string, unknown> {
321
+ const all = SECTIONS.flatMap((section) => plan.tasks[section]);
322
+ return {
323
+ taskId: plan.taskId,
324
+ revision: plan.revision,
325
+ sections: plan.sections,
326
+ taskCount: all.length,
327
+ tasks: SECTIONS.flatMap((section) => plan.tasks[section].map((task) => ({
328
+ planKey: task.planKey,
329
+ section,
330
+ status: task.status,
331
+ dependsOn: task.dependsOn,
332
+ }))),
333
+ };
334
+ }