gate-evm-tools 1.0.28 → 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 (618) 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/openzeppelin.d.ts +2 -1
  107. package/dist-runtime/config/openzeppelin.js +2 -19
  108. package/dist-runtime/config/openzeppelin.js.map +1 -1
  109. package/dist-runtime/delivery/abi.d.ts +14 -0
  110. package/dist-runtime/delivery/abi.js +161 -0
  111. package/dist-runtime/delivery/abi.js.map +1 -0
  112. package/dist-runtime/delivery/aggregate-bootstrap.d.ts +12 -0
  113. package/dist-runtime/delivery/aggregate-bootstrap.js +40 -0
  114. package/dist-runtime/delivery/aggregate-bootstrap.js.map +1 -0
  115. package/dist-runtime/delivery/aggregate-channel.d.ts +28 -0
  116. package/dist-runtime/delivery/aggregate-channel.js +155 -0
  117. package/dist-runtime/delivery/aggregate-channel.js.map +1 -0
  118. package/dist-runtime/delivery/aggregate-inputs.d.ts +168 -0
  119. package/dist-runtime/delivery/aggregate-inputs.js +57 -0
  120. package/dist-runtime/delivery/aggregate-inputs.js.map +1 -0
  121. package/dist-runtime/delivery/aggregate-source.d.ts +25 -0
  122. package/dist-runtime/delivery/aggregate-source.js +79 -0
  123. package/dist-runtime/delivery/aggregate-source.js.map +1 -0
  124. package/dist-runtime/delivery/aggregate-worker.d.ts +1 -0
  125. package/dist-runtime/delivery/aggregate-worker.js +191 -0
  126. package/dist-runtime/delivery/aggregate-worker.js.map +1 -0
  127. package/dist-runtime/delivery/aggregate.d.ts +51 -0
  128. package/dist-runtime/delivery/aggregate.js +190 -0
  129. package/dist-runtime/delivery/aggregate.js.map +1 -0
  130. package/dist-runtime/delivery/bindings.d.ts +21 -0
  131. package/dist-runtime/delivery/bindings.js +53 -0
  132. package/dist-runtime/delivery/bindings.js.map +1 -0
  133. package/dist-runtime/delivery/check-code.d.ts +19 -0
  134. package/dist-runtime/delivery/check-code.js +63 -0
  135. package/dist-runtime/delivery/check-code.js.map +1 -0
  136. package/dist-runtime/delivery/closure-format.d.ts +77 -0
  137. package/dist-runtime/delivery/closure-format.js +225 -0
  138. package/dist-runtime/delivery/closure-format.js.map +1 -0
  139. package/dist-runtime/delivery/codec-pin.d.ts +2 -0
  140. package/dist-runtime/delivery/codec-pin.js +7 -0
  141. package/dist-runtime/delivery/codec-pin.js.map +1 -0
  142. package/dist-runtime/delivery/codec.d.ts +19 -0
  143. package/dist-runtime/delivery/codec.js +73 -0
  144. package/dist-runtime/delivery/codec.js.map +1 -0
  145. package/dist-runtime/delivery/compiler-dependency-pins.d.ts +7 -0
  146. package/dist-runtime/delivery/compiler-dependency-pins.js +1689 -0
  147. package/dist-runtime/delivery/compiler-dependency-pins.js.map +1 -0
  148. package/dist-runtime/delivery/compiler-files.d.ts +40 -0
  149. package/dist-runtime/delivery/compiler-files.js +220 -0
  150. package/dist-runtime/delivery/compiler-files.js.map +1 -0
  151. package/dist-runtime/delivery/compiler-io.d.ts +2 -0
  152. package/dist-runtime/delivery/compiler-io.js +13 -0
  153. package/dist-runtime/delivery/compiler-io.js.map +1 -0
  154. package/dist-runtime/delivery/compiler-pins.d.ts +10 -0
  155. package/dist-runtime/delivery/compiler-pins.js +147 -0
  156. package/dist-runtime/delivery/compiler-pins.js.map +1 -0
  157. package/dist-runtime/delivery/compiler.d.ts +188 -0
  158. package/dist-runtime/delivery/compiler.js +850 -0
  159. package/dist-runtime/delivery/compiler.js.map +1 -0
  160. package/dist-runtime/delivery/config.d.ts +48 -0
  161. package/dist-runtime/delivery/config.js +99 -0
  162. package/dist-runtime/delivery/config.js.map +1 -0
  163. package/dist-runtime/delivery/configuration-definition.d.ts +22 -0
  164. package/dist-runtime/delivery/configuration-definition.js +316 -0
  165. package/dist-runtime/delivery/configuration-definition.js.map +1 -0
  166. package/dist-runtime/delivery/configuration-hre.d.ts +17 -0
  167. package/dist-runtime/delivery/configuration-hre.js +198 -0
  168. package/dist-runtime/delivery/configuration-hre.js.map +1 -0
  169. package/dist-runtime/delivery/configuration-runtime.d.ts +36 -0
  170. package/dist-runtime/delivery/configuration-runtime.js +248 -0
  171. package/dist-runtime/delivery/configuration-runtime.js.map +1 -0
  172. package/dist-runtime/delivery/configuration.d.ts +35 -0
  173. package/dist-runtime/delivery/configuration.js +83 -0
  174. package/dist-runtime/delivery/configuration.js.map +1 -0
  175. package/dist-runtime/delivery/create2.d.ts +3 -0
  176. package/dist-runtime/delivery/create2.js +48 -0
  177. package/dist-runtime/delivery/create2.js.map +1 -0
  178. package/dist-runtime/delivery/custom-closure.d.ts +27 -0
  179. package/dist-runtime/delivery/custom-closure.js +818 -0
  180. package/dist-runtime/delivery/custom-closure.js.map +1 -0
  181. package/dist-runtime/delivery/custom-format.d.ts +35 -0
  182. package/dist-runtime/delivery/custom-format.js +383 -0
  183. package/dist-runtime/delivery/custom-format.js.map +1 -0
  184. package/dist-runtime/delivery/custom.d.ts +32 -0
  185. package/dist-runtime/delivery/custom.js +158 -0
  186. package/dist-runtime/delivery/custom.js.map +1 -0
  187. package/dist-runtime/delivery/data.d.ts +7 -0
  188. package/dist-runtime/delivery/data.js +86 -0
  189. package/dist-runtime/delivery/data.js.map +1 -0
  190. package/dist-runtime/delivery/development.d.ts +91 -0
  191. package/dist-runtime/delivery/development.js +395 -0
  192. package/dist-runtime/delivery/development.js.map +1 -0
  193. package/dist-runtime/delivery/engine.d.ts +9 -0
  194. package/dist-runtime/delivery/engine.js +23 -0
  195. package/dist-runtime/delivery/engine.js.map +1 -0
  196. package/dist-runtime/delivery/eoa-observation.d.ts +43 -0
  197. package/dist-runtime/delivery/eoa-observation.js +145 -0
  198. package/dist-runtime/delivery/eoa-observation.js.map +1 -0
  199. package/dist-runtime/delivery/eoa-signed.d.ts +2 -0
  200. package/dist-runtime/delivery/eoa-signed.js +74 -0
  201. package/dist-runtime/delivery/eoa-signed.js.map +1 -0
  202. package/dist-runtime/delivery/eoa.d.ts +81 -0
  203. package/dist-runtime/delivery/eoa.js +274 -0
  204. package/dist-runtime/delivery/eoa.js.map +1 -0
  205. package/dist-runtime/delivery/execution-db.d.ts +20 -0
  206. package/dist-runtime/delivery/execution-db.js +153 -0
  207. package/dist-runtime/delivery/execution-db.js.map +1 -0
  208. package/dist-runtime/delivery/execution-files.d.ts +9 -0
  209. package/dist-runtime/delivery/execution-files.js +138 -0
  210. package/dist-runtime/delivery/execution-files.js.map +1 -0
  211. package/dist-runtime/delivery/execution-model.d.ts +56 -0
  212. package/dist-runtime/delivery/execution-model.js +66 -0
  213. package/dist-runtime/delivery/execution-model.js.map +1 -0
  214. package/dist-runtime/delivery/execution-store.d.ts +48 -0
  215. package/dist-runtime/delivery/execution-store.js +361 -0
  216. package/dist-runtime/delivery/execution-store.js.map +1 -0
  217. package/dist-runtime/delivery/existing-code.d.ts +37 -0
  218. package/dist-runtime/delivery/existing-code.js +75 -0
  219. package/dist-runtime/delivery/existing-code.js.map +1 -0
  220. package/dist-runtime/delivery/export.d.ts +51 -0
  221. package/dist-runtime/delivery/export.js +69 -0
  222. package/dist-runtime/delivery/export.js.map +1 -0
  223. package/dist-runtime/delivery/forkAudit.d.ts +119 -0
  224. package/dist-runtime/delivery/forkAudit.js +473 -0
  225. package/dist-runtime/delivery/forkAudit.js.map +1 -0
  226. package/dist-runtime/delivery/hardhat.d.ts +3 -0
  227. package/dist-runtime/delivery/hardhat.js +45 -0
  228. package/dist-runtime/delivery/hardhat.js.map +1 -0
  229. package/dist-runtime/delivery/history-registration.d.ts +2 -0
  230. package/dist-runtime/delivery/history-registration.js +17 -0
  231. package/dist-runtime/delivery/history-registration.js.map +1 -0
  232. package/dist-runtime/delivery/identities.d.ts +22 -0
  233. package/dist-runtime/delivery/identities.js +97 -0
  234. package/dist-runtime/delivery/identities.js.map +1 -0
  235. package/dist-runtime/delivery/input-files.d.ts +5 -0
  236. package/dist-runtime/delivery/input-files.js +70 -0
  237. package/dist-runtime/delivery/input-files.js.map +1 -0
  238. package/dist-runtime/delivery/inputs.d.ts +62 -0
  239. package/dist-runtime/delivery/inputs.js +187 -0
  240. package/dist-runtime/delivery/inputs.js.map +1 -0
  241. package/dist-runtime/delivery/journal.d.ts +35 -0
  242. package/dist-runtime/delivery/journal.js +270 -0
  243. package/dist-runtime/delivery/journal.js.map +1 -0
  244. package/dist-runtime/delivery/manifest.d.ts +14 -0
  245. package/dist-runtime/delivery/manifest.js +68 -0
  246. package/dist-runtime/delivery/manifest.js.map +1 -0
  247. package/dist-runtime/delivery/materialization.d.ts +20 -0
  248. package/dist-runtime/delivery/materialization.js +138 -0
  249. package/dist-runtime/delivery/materialization.js.map +1 -0
  250. package/dist-runtime/delivery/observations.d.ts +31 -0
  251. package/dist-runtime/delivery/observations.js +38 -0
  252. package/dist-runtime/delivery/observations.js.map +1 -0
  253. package/dist-runtime/delivery/parameters.d.ts +53 -0
  254. package/dist-runtime/delivery/parameters.js +257 -0
  255. package/dist-runtime/delivery/parameters.js.map +1 -0
  256. package/dist-runtime/delivery/pending.d.ts +70 -0
  257. package/dist-runtime/delivery/pending.js +99 -0
  258. package/dist-runtime/delivery/pending.js.map +1 -0
  259. package/dist-runtime/delivery/plan.d.ts +50 -0
  260. package/dist-runtime/delivery/plan.js +209 -0
  261. package/dist-runtime/delivery/plan.js.map +1 -0
  262. package/dist-runtime/delivery/planning.d.ts +81 -0
  263. package/dist-runtime/delivery/planning.js +302 -0
  264. package/dist-runtime/delivery/planning.js.map +1 -0
  265. package/dist-runtime/delivery/policy.d.ts +4 -0
  266. package/dist-runtime/delivery/policy.js +9 -0
  267. package/dist-runtime/delivery/policy.js.map +1 -0
  268. package/dist-runtime/delivery/preparation.d.ts +6 -0
  269. package/dist-runtime/delivery/preparation.js +158 -0
  270. package/dist-runtime/delivery/preparation.js.map +1 -0
  271. package/dist-runtime/delivery/production-environment.d.ts +2 -0
  272. package/dist-runtime/delivery/production-environment.js +12 -0
  273. package/dist-runtime/delivery/production-environment.js.map +1 -0
  274. package/dist-runtime/delivery/production-finalization.d.ts +86 -0
  275. package/dist-runtime/delivery/production-finalization.js +278 -0
  276. package/dist-runtime/delivery/production-finalization.js.map +1 -0
  277. package/dist-runtime/delivery/production.d.ts +461 -0
  278. package/dist-runtime/delivery/production.js +396 -0
  279. package/dist-runtime/delivery/production.js.map +1 -0
  280. package/dist-runtime/delivery/project-files.d.ts +8 -0
  281. package/dist-runtime/delivery/project-files.js +82 -0
  282. package/dist-runtime/delivery/project-files.js.map +1 -0
  283. package/dist-runtime/delivery/project.d.ts +15 -0
  284. package/dist-runtime/delivery/project.js +157 -0
  285. package/dist-runtime/delivery/project.js.map +1 -0
  286. package/dist-runtime/delivery/protocol.d.ts +49 -0
  287. package/dist-runtime/delivery/protocol.js +112 -0
  288. package/dist-runtime/delivery/protocol.js.map +1 -0
  289. package/dist-runtime/delivery/references.d.ts +19 -0
  290. package/dist-runtime/delivery/references.js +84 -0
  291. package/dist-runtime/delivery/references.js.map +1 -0
  292. package/dist-runtime/delivery/release-graph.d.ts +93 -0
  293. package/dist-runtime/delivery/release-graph.js +106 -0
  294. package/dist-runtime/delivery/release-graph.js.map +1 -0
  295. package/dist-runtime/delivery/release-history-capture.d.ts +7 -0
  296. package/dist-runtime/delivery/release-history-capture.js +76 -0
  297. package/dist-runtime/delivery/release-history-capture.js.map +1 -0
  298. package/dist-runtime/delivery/release-history.d.ts +43 -0
  299. package/dist-runtime/delivery/release-history.js +246 -0
  300. package/dist-runtime/delivery/release-history.js.map +1 -0
  301. package/dist-runtime/delivery/release.d.ts +172 -0
  302. package/dist-runtime/delivery/release.js +209 -0
  303. package/dist-runtime/delivery/release.js.map +1 -0
  304. package/dist-runtime/delivery/safe-manifest.d.ts +9 -0
  305. package/dist-runtime/delivery/safe-manifest.js +13 -0
  306. package/dist-runtime/delivery/safe-manifest.js.map +1 -0
  307. package/dist-runtime/delivery/safe-observation.d.ts +30 -0
  308. package/dist-runtime/delivery/safe-observation.js +487 -0
  309. package/dist-runtime/delivery/safe-observation.js.map +1 -0
  310. package/dist-runtime/delivery/safe-prepare.d.ts +13 -0
  311. package/dist-runtime/delivery/safe-prepare.js +81 -0
  312. package/dist-runtime/delivery/safe-prepare.js.map +1 -0
  313. package/dist-runtime/delivery/safe.d.ts +91 -0
  314. package/dist-runtime/delivery/safe.js +243 -0
  315. package/dist-runtime/delivery/safe.js.map +1 -0
  316. package/dist-runtime/delivery/same-fork-baseline.d.ts +8 -0
  317. package/dist-runtime/delivery/same-fork-baseline.js +20 -0
  318. package/dist-runtime/delivery/same-fork-baseline.js.map +1 -0
  319. package/dist-runtime/delivery/setup.d.ts +31 -0
  320. package/dist-runtime/delivery/setup.js +215 -0
  321. package/dist-runtime/delivery/setup.js.map +1 -0
  322. package/dist-runtime/delivery/source.d.ts +41 -0
  323. package/dist-runtime/delivery/source.js +137 -0
  324. package/dist-runtime/delivery/source.js.map +1 -0
  325. package/dist-runtime/delivery/target-fields.d.ts +2 -0
  326. package/dist-runtime/delivery/target-fields.js +11 -0
  327. package/dist-runtime/delivery/target-fields.js.map +1 -0
  328. package/dist-runtime/delivery/validation.d.ts +9 -0
  329. package/dist-runtime/delivery/validation.js +150 -0
  330. package/dist-runtime/delivery/validation.js.map +1 -0
  331. package/dist-runtime/delivery/verification.d.ts +16 -0
  332. package/dist-runtime/delivery/verification.js +65 -0
  333. package/dist-runtime/delivery/verification.js.map +1 -0
  334. package/dist-runtime/migrate.js +1 -0
  335. package/dist-runtime/migrate.js.map +1 -1
  336. package/dist-runtime/miner/binary.d.ts +2 -0
  337. package/dist-runtime/miner/binary.js +54 -0
  338. package/dist-runtime/miner/binary.js.map +1 -0
  339. package/dist-runtime/miner/cli.d.ts +1 -0
  340. package/dist-runtime/miner/cli.js +131 -0
  341. package/dist-runtime/miner/cli.js.map +1 -0
  342. package/dist-runtime/miner/index.d.ts +5 -0
  343. package/dist-runtime/miner/index.js +13 -0
  344. package/dist-runtime/miner/index.js.map +1 -0
  345. package/dist-runtime/miner/request.d.ts +7 -0
  346. package/dist-runtime/miner/request.js +73 -0
  347. package/dist-runtime/miner/request.js.map +1 -0
  348. package/dist-runtime/miner/runner.d.ts +2 -0
  349. package/dist-runtime/miner/runner.js +131 -0
  350. package/dist-runtime/miner/runner.js.map +1 -0
  351. package/dist-runtime/miner/types.d.ts +89 -0
  352. package/dist-runtime/miner/types.js +3 -0
  353. package/dist-runtime/miner/types.js.map +1 -0
  354. package/dist-runtime/miner/verify.d.ts +2 -0
  355. package/dist-runtime/miner/verify.js +75 -0
  356. package/dist-runtime/miner/verify.js.map +1 -0
  357. package/dist-runtime/runtime-identity.json +2 -2
  358. package/dist-runtime/vendor/plan-codec/index.cjs +820 -0
  359. package/dist-runtime/vendor/plan-codec/index.d.cts +32 -0
  360. package/dist-runtime/vendor/plan-codec/provenance.json +24 -0
  361. package/dist-runtime/workflow/engine.d.ts +14 -0
  362. package/dist-runtime/workflow/engine.js +160 -0
  363. package/dist-runtime/workflow/engine.js.map +1 -0
  364. package/dist-runtime/workflow/lib/authority.d.ts +6 -3
  365. package/dist-runtime/workflow/lib/authority.js.map +1 -1
  366. package/dist-runtime/workflow/lib/calls.d.ts +1 -1
  367. package/dist-runtime/workflow/lib/calls.js +43 -34
  368. package/dist-runtime/workflow/lib/calls.js.map +1 -1
  369. package/dist-runtime/workflow/lib/canonicalData.d.ts +8 -0
  370. package/dist-runtime/workflow/lib/canonicalData.js +68 -0
  371. package/dist-runtime/workflow/lib/canonicalData.js.map +1 -0
  372. package/dist-runtime/workflow/lib/config.d.ts +3 -1
  373. package/dist-runtime/workflow/lib/config.js.map +1 -1
  374. package/dist-runtime/workflow/lib/context.d.ts +76 -0
  375. package/dist-runtime/workflow/lib/context.js +3 -0
  376. package/dist-runtime/workflow/lib/context.js.map +1 -0
  377. package/dist-runtime/workflow/lib/create2.d.ts +1 -1
  378. package/dist-runtime/workflow/lib/create2.js +9 -12
  379. package/dist-runtime/workflow/lib/create2.js.map +1 -1
  380. package/dist-runtime/workflow/lib/deployments.d.ts +5 -5
  381. package/dist-runtime/workflow/lib/deployments.js +5 -13
  382. package/dist-runtime/workflow/lib/deployments.js.map +1 -1
  383. package/dist-runtime/workflow/lib/evidencePorts.d.ts +55 -0
  384. package/dist-runtime/workflow/lib/evidencePorts.js +3 -0
  385. package/dist-runtime/workflow/lib/evidencePorts.js.map +1 -0
  386. package/dist-runtime/workflow/lib/executionPlan.d.ts +4 -42
  387. package/dist-runtime/workflow/lib/executionPlan.js +15 -210
  388. package/dist-runtime/workflow/lib/executionPlan.js.map +1 -1
  389. package/dist-runtime/workflow/lib/gateTool.d.ts +6 -2
  390. package/dist-runtime/workflow/lib/gateTool.js +20 -10
  391. package/dist-runtime/workflow/lib/gateTool.js.map +1 -1
  392. package/dist-runtime/workflow/lib/gateToolSync.d.ts +1 -1
  393. package/dist-runtime/workflow/lib/gateToolSync.js +3 -2
  394. package/dist-runtime/workflow/lib/gateToolSync.js.map +1 -1
  395. package/dist-runtime/workflow/lib/operationNames.d.ts +3 -0
  396. package/dist-runtime/workflow/lib/operationNames.js +34 -0
  397. package/dist-runtime/workflow/lib/operationNames.js.map +1 -0
  398. package/dist-runtime/workflow/lib/parameters.d.ts +1 -1
  399. package/dist-runtime/workflow/lib/parameters.js +6 -22
  400. package/dist-runtime/workflow/lib/parameters.js.map +1 -1
  401. package/dist-runtime/workflow/lib/pendingDeploymentReuse.js +18 -52
  402. package/dist-runtime/workflow/lib/pendingDeploymentReuse.js.map +1 -1
  403. package/dist-runtime/workflow/lib/pendingUupsBinding.d.ts +42 -0
  404. package/dist-runtime/workflow/lib/pendingUupsBinding.js +39 -0
  405. package/dist-runtime/workflow/lib/pendingUupsBinding.js.map +1 -0
  406. package/dist-runtime/workflow/lib/plan.d.ts +55 -0
  407. package/dist-runtime/workflow/lib/plan.js +324 -0
  408. package/dist-runtime/workflow/lib/plan.js.map +1 -0
  409. package/dist-runtime/workflow/lib/planCli.d.ts +14 -0
  410. package/dist-runtime/workflow/lib/planCli.js +279 -0
  411. package/dist-runtime/workflow/lib/planCli.js.map +1 -0
  412. package/dist-runtime/workflow/lib/preparationEvidence.d.ts +4 -0
  413. package/dist-runtime/workflow/lib/preparationEvidence.js +19 -0
  414. package/dist-runtime/workflow/lib/preparationEvidence.js.map +1 -0
  415. package/dist-runtime/workflow/lib/proxy.d.ts +3 -2
  416. package/dist-runtime/workflow/lib/proxy.js +3 -4
  417. package/dist-runtime/workflow/lib/proxy.js.map +1 -1
  418. package/dist-runtime/workflow/lib/runtime.d.ts +6 -0
  419. package/dist-runtime/workflow/lib/runtime.js +48 -0
  420. package/dist-runtime/workflow/lib/runtime.js.map +1 -0
  421. package/dist-runtime/workflow/lib/signer.d.ts +3 -2
  422. package/dist-runtime/workflow/lib/signer.js +18 -18
  423. package/dist-runtime/workflow/lib/signer.js.map +1 -1
  424. package/dist-runtime/workflow/lib/simulation.d.ts +13 -6
  425. package/dist-runtime/workflow/lib/simulation.js +39 -31
  426. package/dist-runtime/workflow/lib/simulation.js.map +1 -1
  427. package/dist-runtime/workflow/lib/state.js +3 -3
  428. package/dist-runtime/workflow/lib/state.js.map +1 -1
  429. package/dist-runtime/workflow/lib/staticValidation.d.ts +28 -0
  430. package/dist-runtime/workflow/lib/staticValidation.js +54 -10
  431. package/dist-runtime/workflow/lib/staticValidation.js.map +1 -1
  432. package/dist-runtime/workflow/lib/transactionPlanner.d.ts +62 -0
  433. package/dist-runtime/workflow/lib/transactionPlanner.js +258 -0
  434. package/dist-runtime/workflow/lib/transactionPlanner.js.map +1 -0
  435. package/dist-runtime/workflow/lib/typedValue.d.ts +3 -0
  436. package/dist-runtime/workflow/lib/typedValue.js +76 -0
  437. package/dist-runtime/workflow/lib/typedValue.js.map +1 -0
  438. package/dist-runtime/workflow/lib/validation.d.ts +23 -0
  439. package/dist-runtime/workflow/lib/validation.js +15 -0
  440. package/dist-runtime/workflow/lib/validation.js.map +1 -0
  441. package/dist-runtime/workflow/planAdd.d.ts +1 -0
  442. package/dist-runtime/workflow/planAdd.js +11 -0
  443. package/dist-runtime/workflow/planAdd.js.map +1 -0
  444. package/dist-runtime/workflow/planRead.d.ts +1 -0
  445. package/dist-runtime/workflow/planRead.js +11 -0
  446. package/dist-runtime/workflow/planRead.js.map +1 -0
  447. package/dist-runtime/workflow/planStatus.d.ts +1 -0
  448. package/dist-runtime/workflow/planStatus.js +11 -0
  449. package/dist-runtime/workflow/planStatus.js.map +1 -0
  450. package/dist-runtime/workflow/planWrite.d.ts +1 -0
  451. package/dist-runtime/workflow/planWrite.js +11 -0
  452. package/dist-runtime/workflow/planWrite.js.map +1 -0
  453. package/dist-runtime/workflow/run.d.ts +1 -40
  454. package/dist-runtime/workflow/run.js +68 -136
  455. package/dist-runtime/workflow/run.js.map +1 -1
  456. package/dist-runtime/workflow/staticValidate.js +8 -3
  457. package/dist-runtime/workflow/staticValidate.js.map +1 -1
  458. package/dist-runtime/workflow/steps/call.d.ts +1 -1
  459. package/dist-runtime/workflow/steps/check.d.ts +1 -1
  460. package/dist-runtime/workflow/steps/custom.d.ts +1 -1
  461. package/dist-runtime/workflow/steps/deploy.d.ts +1 -1
  462. package/dist-runtime/workflow/steps/deploy.js +57 -55
  463. package/dist-runtime/workflow/steps/deploy.js.map +1 -1
  464. package/dist-runtime/workflow/steps/upgrade.d.ts +1 -1
  465. package/dist-runtime/workflow/steps/upgrade.js +62 -41
  466. package/dist-runtime/workflow/steps/upgrade.js.map +1 -1
  467. package/dist-runtime/workflow/steps/view.d.ts +1 -1
  468. package/docs/compiler-qualification.md +32 -0
  469. package/docs/configuration-runtime-observation.md +29 -0
  470. package/docs/create2-miner.md +100 -0
  471. package/docs/delivery-aggregate.md +27 -0
  472. package/docs/delivery-custom-input-closure.md +51 -0
  473. package/docs/delivery-development.md +32 -0
  474. package/docs/delivery-eoa.md +46 -0
  475. package/docs/delivery-evm-manifest.md +20 -0
  476. package/docs/delivery-execution-store.md +33 -0
  477. package/docs/delivery-inputs.md +46 -0
  478. package/docs/delivery-parameters.md +65 -0
  479. package/docs/delivery-planning.md +140 -0
  480. package/docs/delivery-release.md +65 -0
  481. package/docs/delivery-safe.md +72 -0
  482. package/docs/delivery-setup.md +146 -0
  483. package/docs/delivery-source.md +67 -0
  484. package/docs/superpowers/plans/2026-09-24-scheme-aware-static-validation.md +193 -0
  485. package/docs/superpowers/plans/2026-10-28-create2-miner.md +82 -0
  486. package/package.json +133 -9
  487. package/resources/create2/LICENSE +21 -0
  488. package/resources/create2/README.md +9 -0
  489. package/resources/create2/darwin-arm64/smartflow_miner +0 -0
  490. package/resources/create2/darwin-x64/smartflow_miner +0 -0
  491. package/resources/create2/manifest.json +27 -0
  492. package/runtime/config/openzeppelin.ts +3 -21
  493. package/runtime/delivery/abi.ts +225 -0
  494. package/runtime/delivery/aggregate-bootstrap.ts +29 -0
  495. package/runtime/delivery/aggregate-channel.ts +85 -0
  496. package/runtime/delivery/aggregate-inputs.ts +39 -0
  497. package/runtime/delivery/aggregate-source.ts +53 -0
  498. package/runtime/delivery/aggregate-worker.ts +133 -0
  499. package/runtime/delivery/aggregate.ts +139 -0
  500. package/runtime/delivery/bindings.ts +37 -0
  501. package/runtime/delivery/check-code.ts +38 -0
  502. package/runtime/delivery/closure-format.ts +350 -0
  503. package/runtime/delivery/codec-pin.ts +3 -0
  504. package/runtime/delivery/codec.ts +50 -0
  505. package/runtime/delivery/compiler-dependency-pins.ts +1685 -0
  506. package/runtime/delivery/compiler-files.ts +179 -0
  507. package/runtime/delivery/compiler-io.ts +10 -0
  508. package/runtime/delivery/compiler-pins.ts +143 -0
  509. package/runtime/delivery/compiler.ts +700 -0
  510. package/runtime/delivery/config.ts +93 -0
  511. package/runtime/delivery/configuration-definition.ts +133 -0
  512. package/runtime/delivery/configuration-hre.ts +130 -0
  513. package/runtime/delivery/configuration-runtime.ts +163 -0
  514. package/runtime/delivery/configuration.ts +64 -0
  515. package/runtime/delivery/create2.ts +57 -0
  516. package/runtime/delivery/custom-closure.ts +993 -0
  517. package/runtime/delivery/custom-format.ts +464 -0
  518. package/runtime/delivery/custom.ts +219 -0
  519. package/runtime/delivery/data.ts +94 -0
  520. package/runtime/delivery/development.ts +262 -0
  521. package/runtime/delivery/engine.ts +29 -0
  522. package/runtime/delivery/eoa-observation.ts +106 -0
  523. package/runtime/delivery/eoa-signed.ts +55 -0
  524. package/runtime/delivery/eoa.ts +288 -0
  525. package/runtime/delivery/execution-db.ts +131 -0
  526. package/runtime/delivery/execution-files.ts +135 -0
  527. package/runtime/delivery/execution-model.ts +102 -0
  528. package/runtime/delivery/execution-store.ts +411 -0
  529. package/runtime/delivery/existing-code.ts +44 -0
  530. package/runtime/delivery/export.ts +99 -0
  531. package/runtime/delivery/forkAudit.ts +620 -0
  532. package/runtime/delivery/hardhat.ts +38 -0
  533. package/runtime/delivery/history-registration.ts +10 -0
  534. package/runtime/delivery/identities.ts +132 -0
  535. package/runtime/delivery/input-files.ts +46 -0
  536. package/runtime/delivery/inputs.ts +197 -0
  537. package/runtime/delivery/journal.ts +201 -0
  538. package/runtime/delivery/manifest.ts +54 -0
  539. package/runtime/delivery/materialization.ts +53 -0
  540. package/runtime/delivery/observations.ts +60 -0
  541. package/runtime/delivery/parameters.ts +349 -0
  542. package/runtime/delivery/pending.ts +98 -0
  543. package/runtime/delivery/plan.ts +337 -0
  544. package/runtime/delivery/planning.ts +397 -0
  545. package/runtime/delivery/policy.ts +9 -0
  546. package/runtime/delivery/preparation.ts +224 -0
  547. package/runtime/delivery/production-environment.ts +6 -0
  548. package/runtime/delivery/production-finalization.ts +172 -0
  549. package/runtime/delivery/production.ts +375 -0
  550. package/runtime/delivery/project-files.ts +58 -0
  551. package/runtime/delivery/project.ts +117 -0
  552. package/runtime/delivery/protocol.ts +94 -0
  553. package/runtime/delivery/references.ts +106 -0
  554. package/runtime/delivery/release-graph.ts +49 -0
  555. package/runtime/delivery/release-history-capture.ts +32 -0
  556. package/runtime/delivery/release-history.ts +120 -0
  557. package/runtime/delivery/release.ts +128 -0
  558. package/runtime/delivery/safe-manifest.ts +11 -0
  559. package/runtime/delivery/safe-observation.ts +626 -0
  560. package/runtime/delivery/safe-prepare.ts +101 -0
  561. package/runtime/delivery/safe.ts +344 -0
  562. package/runtime/delivery/same-fork-baseline.ts +16 -0
  563. package/runtime/delivery/setup.ts +172 -0
  564. package/runtime/delivery/source.ts +130 -0
  565. package/runtime/delivery/target-fields.ts +7 -0
  566. package/runtime/delivery/validation.ts +247 -0
  567. package/runtime/delivery/verification.ts +47 -0
  568. package/runtime/migrate.ts +1 -0
  569. package/runtime/miner/binary.ts +41 -0
  570. package/runtime/miner/cli.ts +87 -0
  571. package/runtime/miner/index.ts +5 -0
  572. package/runtime/miner/request.ts +54 -0
  573. package/runtime/miner/runner.ts +90 -0
  574. package/runtime/miner/types.ts +71 -0
  575. package/runtime/miner/verify.ts +61 -0
  576. package/runtime/vendor/plan-codec/index.cjs +820 -0
  577. package/runtime/vendor/plan-codec/index.d.cts +32 -0
  578. package/runtime/vendor/plan-codec/provenance.json +24 -0
  579. package/runtime/workflow/engine.ts +174 -0
  580. package/runtime/workflow/lib/authority.ts +3 -3
  581. package/runtime/workflow/lib/calls.ts +46 -37
  582. package/runtime/workflow/lib/canonicalData.ts +45 -0
  583. package/runtime/workflow/lib/config.ts +1 -1
  584. package/runtime/workflow/lib/context.ts +76 -0
  585. package/runtime/workflow/lib/create2.ts +10 -12
  586. package/runtime/workflow/lib/deployments.ts +6 -14
  587. package/runtime/workflow/lib/evidencePorts.ts +20 -0
  588. package/runtime/workflow/lib/executionPlan.ts +17 -268
  589. package/runtime/workflow/lib/gateTool.ts +20 -8
  590. package/runtime/workflow/lib/gateToolSync.ts +3 -3
  591. package/runtime/workflow/lib/operationNames.ts +32 -0
  592. package/runtime/workflow/lib/parameters.ts +4 -21
  593. package/runtime/workflow/lib/pendingDeploymentReuse.ts +4 -56
  594. package/runtime/workflow/lib/pendingUupsBinding.ts +43 -0
  595. package/runtime/workflow/lib/plan.ts +334 -0
  596. package/runtime/workflow/lib/planCli.ts +279 -0
  597. package/runtime/workflow/lib/preparationEvidence.ts +14 -0
  598. package/runtime/workflow/lib/proxy.ts +5 -3
  599. package/runtime/workflow/lib/runtime.ts +46 -0
  600. package/runtime/workflow/lib/signer.ts +8 -5
  601. package/runtime/workflow/lib/simulation.ts +41 -17
  602. package/runtime/workflow/lib/state.ts +3 -3
  603. package/runtime/workflow/lib/staticValidation.ts +92 -11
  604. package/runtime/workflow/lib/transactionPlanner.ts +314 -0
  605. package/runtime/workflow/lib/typedValue.ts +46 -0
  606. package/runtime/workflow/lib/validation.ts +50 -0
  607. package/runtime/workflow/planAdd.ts +8 -0
  608. package/runtime/workflow/planRead.ts +8 -0
  609. package/runtime/workflow/planStatus.ts +8 -0
  610. package/runtime/workflow/planWrite.ts +8 -0
  611. package/runtime/workflow/run.ts +41 -174
  612. package/runtime/workflow/staticValidate.ts +8 -3
  613. package/runtime/workflow/steps/call.ts +1 -1
  614. package/runtime/workflow/steps/check.ts +1 -1
  615. package/runtime/workflow/steps/custom.ts +1 -1
  616. package/runtime/workflow/steps/deploy.ts +57 -58
  617. package/runtime/workflow/steps/upgrade.ts +69 -46
  618. package/runtime/workflow/steps/view.ts +1 -1
@@ -0,0 +1,39 @@
1
+ /** Actual multi-root codec projections; selected task order belongs to the canonical codec. */
2
+ import {readDeliverySource,readOwnedDeliverySource} from './source';
3
+ import type {DeliveryRequest} from './protocol';
4
+ import {canonicalJson,deepFreeze,semanticHash} from '../workflow/lib/canonicalData';
5
+ export function openAggregateSources(input:{workspaceRoot:string;projectRoot:string;requests:readonly DeliveryRequest[]}) {
6
+ const read=()=>{
7
+ const sources=input.requests.map(request=>readOwnedDeliverySource({workspaceRoot:input.workspaceRoot,projectRoot:input.projectRoot,request}));
8
+ const groups=new Map<string,typeof sources>();
9
+ for(const source of sources){const key=source.request.sourceRef.path+'\0'+source.request.sourceRef.taskId;const group=groups.get(key)??[];group.push(source);groups.set(key,group);}
10
+ const definitions=[];const tasks=new Map<string,unknown>(),lanes=new Map<string,unknown>();
11
+ let identity:string|undefined;
12
+ for(const group of groups.values()){
13
+ const first=group[0];
14
+ const projection=readDeliverySource({workspaceRoot:input.workspaceRoot,projectRoot:input.projectRoot,request:first.request,
15
+ sourceRoots:group.map(source=>source.invocation.task.planKey)});
16
+ if(group.some(source=>source.observation.sha256!==projection.observation.sha256))throw new Error('Handoff changed during multi-root source capture');
17
+ const definition=projection.sourceDefinition;
18
+ const currentIdentity=canonicalJson([definition.contract,definition.schema,definition.taskId,definition.flow??null]);
19
+ if(identity!==undefined&&identity!==currentIdentity)throw new Error('Conflicting aggregate handoff identity');
20
+ identity=currentIdentity;
21
+ for(const [key,lane] of Object.entries(definition.lanes)){
22
+ if(lanes.has(key)&&canonicalJson(lanes.get(key))!==canonicalJson(lane))throw new Error('Conflicting aggregate lane definition');
23
+ lanes.set(key,lane);
24
+ }
25
+ // Detect conflicting duplicates across documents without sorting/reconstructing any codec task list.
26
+ for(const task of projection.sourceDefinition.tasks){const key=first.request.sourceRef.taskId+'\0'+task.planKey;
27
+ if(tasks.has(key)&&canonicalJson(tasks.get(key))!==canonicalJson(task))throw new Error('Conflicting aggregate source definition');tasks.set(key,task);
28
+ }
29
+ definitions.push({path:first.request.sourceRef.path,definition:projection.sourceDefinition});
30
+ }
31
+ return {sources,definitions:deepFreeze(definitions)};
32
+ };
33
+ const initial=read();
34
+ return Object.freeze({...initial,sourceDefinitionHash:semanticHash(initial.definitions),assertUnchanged(){
35
+ const current=read();
36
+ if(canonicalJson(current.definitions)!==canonicalJson(initial.definitions))throw new Error('Aggregate source definition drift');
37
+ for(let i=0;i<current.sources.length;i++)if(canonicalJson(current.sources[i].invocation.task.scope)!==canonicalJson(initial.sources[i].invocation.task.scope))throw new Error('Aggregate invocation drift');
38
+ }});
39
+ }
@@ -0,0 +1,53 @@
1
+ /** Package-owned EVM source read capability, using the workflow's reviewed allowlist. */
2
+ import http from 'node:http';
3
+ import {randomUUID} from 'node:crypto';
4
+ import {isAllowedSourceRpcMethod} from '../workflow/lib/sourceRpcPolicy';
5
+ import type {DeliveryRequest} from './protocol';
6
+ import type {HardhatRuntimeEnvironment} from 'hardhat/types';
7
+ export interface SourceHandshake {
8
+ version:1;session:string;epoch:string;target:string;proxyUrl:string;
9
+ snapshot:{version:1;sourceNetwork:string;chainId:number;blockNumber:number;blockHash:string;runner:{kind:'hardhat';version:'2.26.3'}};
10
+ }
11
+ export async function openOwnedSource(hre:HardhatRuntimeEnvironment,request:DeliveryRequest,session:string,epoch:string):Promise<{
12
+ handshake:SourceHandshake;check():Promise<void>;close():Promise<void>;
13
+ }> {
14
+ if(hre.network.name!==request.network)throw new Error('Source HRE network mismatch');
15
+ const provider=hre.network.provider;
16
+ const rpc=(method:string,params:unknown[]=[])=>provider.request({method,params});
17
+ const chainId=Number(BigInt(await rpc('eth_chainId') as string));
18
+ if(!Number.isSafeInteger(chainId)||chainId!==hre.network.config.chainId)throw new Error('Source chain identity mismatch');
19
+ const tag=request.fork?'0x'+request.fork.blockNumber.toString(16):'latest';
20
+ const block=await rpc('eth_getBlockByNumber',[tag,false]) as any;
21
+ if(!block||!/^0x[a-fA-F0-9]{64}$/.test(block.hash)||!/^0x[\da-f]+$/i.test(block.number))throw new Error('Source pinned block unavailable');
22
+ const blockNumber=Number(BigInt(block.number)),blockHash=block.hash.toLowerCase();
23
+ if(request.fork&&(request.fork.blockNumber!==blockNumber||request.fork.blockHash.toLowerCase()!==blockHash))throw new Error('Source pinned block mismatch');
24
+ const token=randomUUID(),endpoint='/'+token;
25
+ const reply=(res:http.ServerResponse,status:number,value:unknown)=>{const body=JSON.stringify(value);res.writeHead(status,{'content-type':'application/json','content-length':Buffer.byteLength(body)});res.end(body);};
26
+ const forward=async(raw:any)=>{
27
+ const error=(code:number,message:string)=>({jsonrpc:'2.0',id:raw?.id??null,error:{code,message}});
28
+ if(!raw||typeof raw!=='object'||Array.isArray(raw)||raw.jsonrpc!=='2.0'||typeof raw.method!=='string'||(raw.params!==undefined&&!Array.isArray(raw.params)))return error(-32600,'Invalid JSON-RPC request');
29
+ if(!isAllowedSourceRpcMethod(raw.method))return error(-32601,'Source RPC method is not allowed');
30
+ try{return {jsonrpc:'2.0',id:raw.id??null,result:await rpc(raw.method,raw.params??[])};}catch{return error(-32000,'Source RPC request failed');}
31
+ };
32
+ const server=http.createServer(async(req,res)=>{
33
+ if(req.method!=='POST'||req.url!==endpoint){reply(res,404,{error:'Unknown JSON-RPC endpoint'});return;}
34
+ try{
35
+ const chunks:Buffer[]=[];let size=0;
36
+ for await(const chunk of req){size+=chunk.length;if(size>10*1024*1024)throw new Error();chunks.push(Buffer.from(chunk));}
37
+ const raw=JSON.parse(Buffer.concat(chunks).toString('utf8'));
38
+ reply(res,200,Array.isArray(raw)?await Promise.all(raw.map(forward)):await forward(raw));
39
+ }catch{reply(res,400,{error:'Invalid JSON-RPC payload'});}
40
+ });
41
+ await new Promise<void>((resolve,reject)=>{server.once('error',reject);server.listen(0,'127.0.0.1',resolve);});
42
+ const address=server.address();if(!address||typeof address==='string')throw new Error('Source proxy did not bind');
43
+ return {
44
+ handshake:{version:1,session,epoch,target:request.network,proxyUrl:`http://127.0.0.1:${address.port}${endpoint}`,
45
+ snapshot:{version:1,sourceNetwork:request.network,chainId,blockNumber,blockHash,runner:{kind:'hardhat',version:'2.26.3'}}},
46
+ async check(){
47
+ if(hre.network.provider!==provider||hre.network.name!==request.network)throw new Error('Source provider changed');
48
+ const [chain,current]=await Promise.all([rpc('eth_chainId'),rpc('eth_getBlockByNumber',['0x'+blockNumber.toString(16),false])]) as any[];
49
+ if(Number(BigInt(chain))!==chainId||current?.hash?.toLowerCase()!==blockHash||Number(BigInt(current.number))!==blockNumber)throw new Error('Source pinned block drift');
50
+ },
51
+ close:()=>new Promise<void>((resolve,reject)=>{server.close(error=>error?reject(error):resolve());server.closeAllConnections();}),
52
+ };
53
+ }
@@ -0,0 +1,133 @@
1
+ /** Fixed package entry; business modules are loaded only after the private stage command. */
2
+ import fs from 'node:fs';
3
+ import path from 'node:path';
4
+ import {createRequire} from 'node:module';
5
+ import {parseWorkerMessage,type WorkerMessage} from './aggregate-channel';
6
+ import {strictData} from './data';
7
+ import {canonicalJson,deepFreeze,semanticHash,exactObject} from '../workflow/lib/canonicalData';
8
+ import type {StagedDeliveryCollection,DeliveryCollection} from './planning';
9
+ import type {DeliveryConfigurationHandle,DeliveryConfigurationEvidence} from './configuration';
10
+ import type {DeliveryCompilerCollector,CompilerEvidence} from './compiler';
11
+ import type {openOwnedSource} from './aggregate-source';
12
+
13
+ if(!process.send||!process.connected||require.main!==module){console.error('Aggregate worker requires an owned channel');process.exit(1);}
14
+ let state:'new'|'staging'|'staged'|'checked'|'bound'|'closed'|'failed'='new',last=0;
15
+ let association:{session:string;epoch:string;target:string}|undefined;
16
+ let role:'source'|'target',config:DeliveryConfigurationHandle|undefined,stage:StagedDeliveryCollection|undefined;
17
+ let source:Awaited<ReturnType<typeof openOwnedSource>>|undefined,compiler:DeliveryCompilerCollector|undefined;
18
+ let stagedCompiler:CompilerEvidence|undefined,finalConfiguration:DeliveryConfigurationEvidence|undefined;
19
+ let busy=false,initial:any,contribution:any;
20
+ let phase='protocol';
21
+ async function cleanup(){stage?.close();config?.close();await source?.close();}
22
+ async function dispatch(message:WorkerMessage):Promise<unknown>{
23
+ if(!['stage','bind'].includes(message.command)&&message.data!==null)throw new Error('Unexpected worker command data');
24
+ if(message.command==='stage'){
25
+ if(state!=='new')throw new Error('Duplicate worker stage');
26
+ state='staging';initial=deepFreeze(strictData(message.data)) as any;
27
+ exactObject(initial,initial.role==='source'?['root','workspaceRoot','projectRoot','request','role','handshakePath']:['root','workspaceRoot','projectRoot','request','role','handshake','target','params','steps','deploymentId','businessRoot','executionId','sourceDefinitionHash'],'worker stage input');
28
+ const {parseDeliveryRequest}=require('./protocol') as typeof import('./protocol');
29
+ const request=parseDeliveryRequest(initial.request);role=initial.role;
30
+ if(!['source','target'].includes(role)||request.network!==message.target||request.mode!=='simulate')throw new Error('Worker target mismatch');
31
+ const root=fs.realpathSync(process.cwd());
32
+ if(root!==initial.root)throw new Error('Worker root mismatch');
33
+ process.env.GATE_DELIVERY_CONTEXT=JSON.stringify(request);
34
+ process.env.HARDHAT_NETWORK=role==='source'?request.network:'hardhat';
35
+ if(role==='target'){
36
+ const handshake=initial.handshake;
37
+ if(handshake?.version!==1||handshake.session!==message.session||handshake.target!==message.target||handshake.snapshot.chainId!==initial.target.chainId)throw new Error('Source handshake association mismatch');
38
+ require('./aggregate-bootstrap').establishOwnedFork({network:request.network,chainId:initial.target.chainId,url:handshake.proxyUrl,blockNumber:handshake.snapshot.blockNumber});
39
+ }
40
+ // This is the only project loader; same original project/config/module resolution.
41
+ const req=createRequire(path.join(root,'package.json'));
42
+ phase='project-loader';req('ts-node/register');
43
+ const hre=req('hardhat') as typeof import('hardhat');
44
+ if(role==='source'){
45
+ const {openOwnedSource}=require('./aggregate-source') as typeof import('./aggregate-source');
46
+ phase='source-open';source=await openOwnedSource(hre,request,message.session,message.epoch);
47
+ phase='source-configuration';config=require('./configuration').openDeliveryConfiguration({workspaceRoot:initial.workspaceRoot,projectRoot:initial.projectRoot,network:request.network});
48
+ fs.writeFileSync(initial.handshakePath,JSON.stringify(source.handshake),{flag:'wx',mode:0o600});
49
+ state='staged';return {ready:true,handshake:source.handshake};
50
+ }
51
+ const {stageDeliveryPlan}=require('./planning') as typeof import('./planning');
52
+ const {setupSimulationFork,verifySimulationForkSnapshot}=require('../workflow/lib/simulation') as typeof import('../workflow/lib/simulation');
53
+ const {impersonateWorkflowSimulationSigner}=require('../workflow/lib/signer') as typeof import('../workflow/lib/signer');
54
+ const {WorkflowState}=require('../workflow/lib/state') as typeof import('../workflow/lib/state');
55
+ const {qualifyDeliveryCompiler}=require('./compiler') as typeof import('./compiler');
56
+ phase='fork-setup';const simulation=await setupSimulationFork(hre,request.network,{snapshotJson:JSON.stringify(initial.handshake.snapshot),sourceRpcUrl:initial.handshake.proxyUrl});
57
+ await verifySimulationForkSnapshot(hre,simulation);
58
+ const operator=(request.devSigner??request.operator)!.toLowerCase();
59
+ const signer=await impersonateWorkflowSimulationSigner(hre,operator);
60
+ phase='target-configuration';config=require('./configuration').openDeliveryConfiguration({workspaceRoot:initial.workspaceRoot,projectRoot:initial.projectRoot,network:request.network});
61
+ phase='compile';compiler=await qualifyDeliveryCompiler(hre);
62
+ const header={version:1 as const,schema:'gate-delivery-plan' as const,deploymentId:initial.deploymentId,environment:request.environment,target:request.network,
63
+ chainId:String(initial.target.chainId),executionId:initial.executionId,operator,sourceDefinitionHash:initial.sourceDefinitionHash,runtimeIdentity:config!.snapshot.runtime.declared};
64
+ const context={root,taskDir:path.join(root,initial.businessRoot),taskId:initial.deploymentId,executionId:initial.executionId,targetId:request.network,target:initial.target,targetParams:initial.params,
65
+ existingDeploymentPolicies:{},config:{},mode:'simulate' as const,simulation,signer,signerAddress:operator,
66
+ runtime:{hre,localFork:{provider:hre.network.provider,impersonate:(address:string)=>impersonateWorkflowSimulationSigner(hre,address)}},
67
+ state:new WorkflowState(),externalCalls:[],operatorReceipts:[],reporter:{event(){},result(){}}};
68
+ const identities={read:async()=>header,readSourceBlock:async(blockNumber:number)=>{
69
+ const rpc=async(method:string,params:unknown[])=>{
70
+ const response=await fetch(initial.handshake.proxyUrl,{method:'POST',headers:{'content-type':'application/json'},body:JSON.stringify({jsonrpc:'2.0',id:1,method,params}),signal:AbortSignal.timeout(30000)});
71
+ const data=await response.json() as any;if(data.error)throw new Error('Source read failed');return data.result;
72
+ };
73
+ const [chain,block]=await Promise.all([rpc('eth_chainId',[]),rpc('eth_getBlockByNumber',['0x'+blockNumber.toString(16),false])]);
74
+ return {chainId:BigInt(chain).toString(),blockNumber:Number(BigInt(block.number)),blockHash:block.hash};
75
+ }};
76
+ phase='planning';stage=await stageDeliveryPlan({context,header,identities,steps:initial.steps,derivationSeed:initial.executionId});
77
+ if(!stage.snapshot.preparations.length){
78
+ phase='existing-code-artifacts';
79
+ const {collectExistingCodeArtifacts,requiredExistingAddresses}=require('./existing-code') as typeof import('./existing-code');
80
+ const {fileBytes}=require('./materialization') as typeof import('./materialization');
81
+ await collectExistingCodeArtifacts({target:request.network,addresses:requiredExistingAddresses({plan:stage.payload,verification:stage.snapshot.verification}),registry:JSON.parse(fileBytes(root,'contractInfo.json')??'{}'),metadata:JSON.parse(fileBytes(root,'deploymentInfo.json')??'{"version":1,"networks":{}}'),readArtifact:name=>hre.artifacts.readArtifact(name)});
82
+ }
83
+ phase='staged-reread';stagedCompiler=compiler.evidence();config!.assertUnchanged();
84
+ contribution={compiler:stagedCompiler,custom:stage.payload.customInputClosure,payloadHash:semanticHash(stage.payload),invariantHash:stage.invariantHash,snapshot:stage.snapshot};
85
+ state='staged';return {ready:true,...contribution,observation:{pid:process.pid,manifestDir:process.env.MANIFEST_DEFAULT_DIR,operator,executionId:initial.executionId}};
86
+ }
87
+ if(message.command==='check'){
88
+ phase='barrier';await (require('./compiler-io') as typeof import('./compiler-io')).yieldCompilerIo();
89
+ if(state!=='staged')throw new Error('Worker check order violation');
90
+ if(role==='source'){await source!.check();finalConfiguration=config!.seal() as DeliveryConfigurationEvidence;state='checked';return {configuration:finalConfiguration};}
91
+ await stage!.assertUnchanged();
92
+ if(canonicalJson(compiler!.evidence())!==canonicalJson(stagedCompiler))throw new Error('Compiler contribution drift');
93
+ phase='configuration-seal';finalConfiguration=config!.seal() as DeliveryConfigurationEvidence;
94
+ state='checked';return {configuration:finalConfiguration,...contribution};
95
+ }
96
+ if(message.command==='bind'){
97
+ if(state!=='checked'||role!=='target')throw new Error('Worker bind order violation');
98
+ const input=exactObject(message.data,['inputsHash'],'binding');
99
+ phase='binding';const result=stage!.bind(input.inputsHash as string);
100
+ const {inputsHash:_,planHash:__,...payload}=result.plan;
101
+ if(semanticHash(payload)!==contribution.payloadHash)throw new Error('Final binding changed staged payload');
102
+ state='bound';return result;
103
+ }
104
+ if(message.command==='close'){
105
+ if(!((role==='source'&&state==='checked')||(role==='target'&&state==='bound')))throw new Error('Worker close order violation');
106
+ await cleanup();state='closed';return {closed:true};
107
+ }
108
+ throw new Error('Unsupported worker command');
109
+ }
110
+ process.on('message',async raw=>{
111
+ let message:WorkerMessage;
112
+ try{
113
+ message=parseWorkerMessage(raw);
114
+ if(busy||state==='closed'||state==='failed'||message.id!==last+1)throw new Error('Worker protocol order violation');
115
+ if(!association){if(message.command!=='stage')throw new Error('Worker stage required');association={session:message.session,epoch:message.epoch,target:message.target};}
116
+ if(message.session!==association.session||message.epoch!==association.epoch||message.target!==association.target)throw new Error('Worker protocol association mismatch');
117
+ last=message.id;busy=true;
118
+ const value=await dispatch(message);
119
+ process.send!({...message,data:{ok:true,value}},(error:Error|null)=>{
120
+ if(error){state='failed';process.exit(1);}
121
+ if(state==='closed'){process.disconnect();process.exit(0);}
122
+ });
123
+ busy=false;
124
+ }catch(error){
125
+ state='failed';
126
+ const active=association;
127
+
128
+ if(active&&process.connected)await new Promise<void>(resolve=>process.send!({version:1,...active,id:last,command:(raw as any)?.command,data:{ok:false,value:{phase}}},()=>resolve()));
129
+ await cleanup().catch(()=>{});process.exit(1);
130
+ }
131
+ });
132
+ process.on('disconnect',()=>{if(state!=='closed')process.exit(1);});
133
+ process.once('SIGTERM',()=>{state='failed';void cleanup().finally(()=>process.exit(1));});
@@ -0,0 +1,139 @@
1
+ /** Owned multi-target input qualification. This grants no release-ready or broadcast authority. */
2
+ import fs from 'node:fs';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import {randomUUID} from 'node:crypto';
6
+ import {openDeliveryInputs,consumeDeliveryInputParameters,type DeliveryInputEvidence} from './inputs';
7
+ import {openAggregateSources} from './aggregate-inputs';
8
+ import {parseDeliveryRequest,safeId,type DeliveryRequest} from './protocol';
9
+ import {strictData} from './data';
10
+ import {inputDigest} from './input-files';
11
+ import {projectRoot} from './project-files';
12
+ import {RuntimeObservation} from './configuration-runtime';
13
+ import {OwnedWorker,OwnedWorkerFailure} from './aggregate-channel';
14
+ import {deepFreeze,canonicalJson,semanticHash,exactObject} from '../workflow/lib/canonicalData';
15
+ import type {DeliveryCollection} from './planning';
16
+ import type {DeliveryConfigurationEvidence} from './configuration';
17
+ import type {CompilerEvidence} from './compiler';
18
+ import type {CustomInputClosure} from './custom-closure';
19
+ export interface DeliveryAggregateOptions {
20
+ workspaceRoot:string;projectRoot:string;selection:'development'|'release'|'all';
21
+ targets:Array<{request:DeliveryRequest;executionId:string}>;
22
+ }
23
+ export interface DeliveryAggregate {
24
+ version:1;inputsHash:string;sourceDefinitionHash:string;
25
+ inputs:{business:DeliveryInputEvidence;sourceDefinitions:unknown;runtime:ReturnType<RuntimeObservation['observe']>;
26
+ targets:Array<{target:string;configuration:DeliveryConfigurationEvidence;sourceConfiguration:DeliveryConfigurationEvidence;compiler:CompilerEvidence;custom:CustomInputClosure|null}>;
27
+ files:Array<{path:string;digest:string}>};
28
+ collections:DeliveryCollection[];
29
+ /** Runtime diagnostics stay outside the immutable-input preimage. */
30
+ observations:Array<{target:string;pid:number;sourcePid:number;manifestDir:string;operator:string;executionId:string;payloadHash:string;invariantHash:string;exited:true}>;
31
+ }
32
+ function same(a:unknown,b:unknown,label:string):void{if(canonicalJson(a)!==canonicalJson(b))throw new Error(`${label} drift or mismatch`);}
33
+ /** Derives business data once; only actual worker channels can contribute staged authority. */
34
+ class DiscoveryReplayError extends Error {}
35
+ export async function collectDeliveryAggregate(raw:DeliveryAggregateOptions):Promise<Readonly<DeliveryAggregate>> {
36
+ try{return await collectOwnedAggregate(raw);}
37
+ catch(error){if(error instanceof OwnedWorkerFailure||error instanceof DiscoveryReplayError)throw error;throw new Error('Delivery aggregate input qualification failed');}
38
+ }
39
+ async function collectOwnedAggregate(raw:DeliveryAggregateOptions):Promise<Readonly<DeliveryAggregate>> {
40
+ const input=strictData(raw);
41
+ exactObject(input,['workspaceRoot','projectRoot','selection','targets'],'aggregate options');
42
+ if(!['development','release','all'].includes(input.selection)||!Array.isArray(input.targets)||!input.targets.length)throw new Error('Aggregate requires selected target requests');
43
+ const root=projectRoot(input.workspaceRoot,input.projectRoot),workspace=projectRoot(input.workspaceRoot,'.');
44
+ if(path.resolve(process.cwd())!==root)throw new Error('Aggregate must run from the original project root');
45
+ const targets=input.targets.map(value=>{
46
+ if(!value||Object.keys(value).some(k=>!['request','executionId','expected'].includes(k)))throw new Error('Invalid aggregate target');
47
+ if(Object.hasOwn(value,'expected'))throw new DiscoveryReplayError('Staged replay requires independently closed current inputs; use known-final collection');
48
+ const request=parseDeliveryRequest(value.request);safeId(value.executionId,'executionId');
49
+ if(request.mode!=='simulate'||request.purpose==='prod-execution')throw new Error('Aggregate input qualification requires simulation');
50
+ return {...value,request};
51
+ });
52
+ if(new Set(targets.map(x=>x.request.network)).size!==targets.length||new Set(targets.map(x=>x.executionId)).size!==targets.length)throw new Error('Aggregate target and execution IDs must be distinct');
53
+ // Every invocation gets its own actual environment/network/step/sourceRef validation.
54
+ const sourceOwner=openAggregateSources({workspaceRoot:workspace,projectRoot:input.projectRoot,requests:targets.map(x=>x.request)});
55
+ const {sources,definitions:sourceDefinitions,sourceDefinitionHash}=sourceOwner;
56
+ for(const source of sources){const scope=source.invocation.task.scope!.deployment as any,first=sources[0].invocation.task.scope!.deployment as any;
57
+ for(const key of ['deploymentId','developmentNetwork','releaseTargetNetworks','projectRoot'])same(scope[key],first[key],'Aggregate business scope');
58
+ }
59
+ let runtime:RuntimeObservation|undefined,business:ReturnType<typeof openDeliveryInputs>|undefined;
60
+ const workers:OwnedWorker[]=[];let failure:Error|undefined;
61
+ const session=randomUUID(),directory=fs.mkdtempSync(path.join(os.tmpdir(),'gate-delivery-aggregate-'));
62
+ const live=()=>{if(failure)throw failure;for(const worker of workers)worker.assertLive();};
63
+ const checkSources=()=>sourceOwner.assertUnchanged();
64
+ try{
65
+ runtime=new RuntimeObservation(root);
66
+ business=openDeliveryInputs({workspaceRoot:workspace,projectRoot:input.projectRoot,request:targets[0].request,selection:input.selection});
67
+ same(targets.map(x=>x.request.network),business.snapshot.targets.map(x=>x.id),'Selected target request order');
68
+ const receipts=targets.map(({request})=>business!.parameters(request.network));
69
+ const rows:any[]=[];
70
+ for(const [index,target] of targets.entries()){
71
+ live();checkSources();
72
+ const publicTarget=business.snapshot.targets[index];
73
+ if(publicTarget.environment!==target.request.environment)throw new Error('Selected request environment mismatch');
74
+ const common={root,workspaceRoot:workspace,projectRoot:input.projectRoot,request:target.request};
75
+ const source=new OwnedWorker(root,session,target.request.network,'source',error=>{failure??=error;});workers.push(source);
76
+ const handshakePath=path.join(directory,`${index}.json`);
77
+ const ready=await source.request('stage',{...common,role:'source',handshakePath});
78
+ if(ready.ready!==true||!fs.existsSync(handshakePath))throw new Error('Source handshake is not READY');
79
+ const bytes=fs.readFileSync(handshakePath,'utf8'),handshake=JSON.parse(bytes);
80
+ same(handshake,ready.handshake,'Source handshake');
81
+ if(handshake.version!==1||handshake.session!==session||handshake.epoch!==source.epoch||handshake.target!==target.request.network)throw new Error('Source handshake association mismatch');
82
+ const worker=new OwnedWorker(root,session,target.request.network,'target',error=>{failure??=error;});workers.push(worker);
83
+ const staged=await worker.request('stage',{...common,role:'target',handshake,target:publicTarget,params:business.values(publicTarget.id),steps:business.snapshot.steps,
84
+ deploymentId:business.snapshot.deploymentId,businessRoot:business.snapshot.businessRoot,executionId:target.executionId,sourceDefinitionHash});
85
+ if(staged.ready!==true)throw new Error('Target stage is not READY');
86
+ rows.push({target:publicTarget.id,source,worker,staged});
87
+ }
88
+ // Producer/evaluation ports terminate before the final union. No producer runs below this point.
89
+ checkSources();const sealed=business.seal() as DeliveryInputEvidence;
90
+ for(const [index,receipt] of receipts.entries())same(consumeDeliveryInputParameters(receipt),sealed.parameters[index].resolved.values,'Owned parameter receipt');
91
+ const contributions:DeliveryAggregate['inputs']['targets']=[];
92
+ for(const row of rows){
93
+ live();
94
+ const checked=await row.worker.request('check');
95
+ same(checked.compiler,row.staged.compiler,'Compiler stage');same(checked.custom,row.staged.custom,'Target custom closure');same(checked.payloadHash,row.staged.payloadHash,'Staged payload');same(checked.invariantHash,row.staged.invariantHash,'Staged invariant');
96
+ const sourceChecked=await row.source.request('check');
97
+ contributions.push({target:row.target,configuration:checked.configuration,sourceConfiguration:sourceChecked.configuration,compiler:checked.compiler,custom:checked.custom});
98
+ }
99
+ checkSources();runtime.assertUnchanged();const parentRuntime=runtime.observe();
100
+ const files=new Map<string,string>();
101
+ const add=(path:string,digest:string)=>{if(files.has(path)&&files.get(path)!==digest)throw new Error('Conflicting aggregate immutable input');files.set(path,digest);};
102
+ for(const file of sealed.files)add(file.path,file.digest);
103
+ for(const parameter of sealed.parameters)for(const file of parameter.closure?.files??[])add(file.path,file.digest);
104
+ for(const row of contributions){
105
+ for(const file of row.custom?.files??[])add(file.path,file.digest);
106
+ for(const artifact of row.compiler.artifacts){add(artifact.path,inputDigest(artifact.contents));add(artifact.debugPath,inputDigest(artifact.debugContents));}
107
+ for(const build of row.compiler.builds)add(build.path,inputDigest(build.contents));
108
+ for(const job of row.compiler.jobs)for(const file of job.sources)add(file.path,file.digest);
109
+ for(const file of row.compiler.toolchain.modules)add(file.path,file.digest);
110
+ for(const config of [row.configuration,row.sourceConfiguration]){
111
+ for(const file of config.files)add(file.path,file.digest);
112
+ for(const file of config.runtime.modules)add(file.path,file.digest);
113
+ for(const pkg of [config.runtime.package,...config.runtime.dependencies])for(const file of pkg.payload)add(`${pkg.lockLocation}/${file.path}`,file.digest);
114
+ }
115
+ }
116
+ const union=[...files].sort(([a],[b])=>a.localeCompare(b,'en')).map(([path,digest])=>({path,digest}));
117
+ // No runtime state, observation, plan hash or randomized compiler exact evidence enters this preimage.
118
+ const inputsHash=semanticHash({version:1,business:sealed,sourceDefinitions,runtime:parentRuntime,files:union,
119
+ targets:contributions.map(row=>({target:row.target,configuration:row.configuration.configurationRuntimeHash,sourceConfiguration:row.sourceConfiguration.configurationRuntimeHash,compiler:row.compiler.stableDigest,custom:row.custom}))});
120
+ live();
121
+ const collections:DeliveryCollection[]=[];
122
+ for(const row of rows){
123
+ const collection=await row.worker.request('bind',{inputsHash}) as DeliveryCollection;
124
+ if(collection.plan.inputsHash!==inputsHash||collection.plan.sourceDefinitionHash!==sourceDefinitionHash)throw new Error('Final target identity mismatch');
125
+ const {inputsHash:_,planHash:__,...payload}=collection.plan;
126
+ same(semanticHash(payload),row.staged.payloadHash,'Final staged payload');collections.push(collection);
127
+ }
128
+ // No externally reachable plan exists until every actual child has exited successfully.
129
+ for(const row of rows){if(failure)throw failure;await row.worker.request('close');await row.source.request('close');}
130
+ if(failure)throw failure;
131
+ return deepFreeze({version:1,inputsHash,sourceDefinitionHash,inputs:{business:sealed,sourceDefinitions,runtime:parentRuntime,targets:contributions,files:union},collections,
132
+ observations:rows.map(row=>({target:row.target,...row.staged.observation,sourcePid:row.source.pid,payloadHash:row.staged.payloadHash,invariantHash:row.staged.invariantHash,exited:true}))}) as DeliveryAggregate;
133
+ }finally{
134
+ business?.close();runtime?.close();
135
+ const results=await Promise.allSettled(workers.map(worker=>worker.reap()));
136
+ fs.rmSync(directory,{recursive:true,force:true});
137
+ if(results.some(x=>x.status==='rejected'))throw new Error('Aggregate worker cleanup failed');
138
+ }
139
+ }
@@ -0,0 +1,37 @@
1
+ import type { ExecutionBindings } from '../workflow/lib/context';
2
+ import { canonicalData, exactObject, nonempty, deepFreeze } from '../workflow/lib/canonicalData';
3
+ export interface DerivedBindings { executionId: string; derivationSeed: string; values: Record<string, string> }
4
+ export function parseDerivedBindings(raw: unknown): DerivedBindings {
5
+ const input = exactObject(raw, ['executionId', 'derivationSeed', 'values'], 'derived bindings');
6
+ const values = canonicalData(input.values) as Record<string, unknown>;
7
+ if (!values || typeof values !== 'object' || Array.isArray(values)) throw new Error('derived values must be an object');
8
+ for (const [key, value] of Object.entries(values)) { nonempty(key, 'derived key'); nonempty(value, 'derived value'); }
9
+ return deepFreeze({ executionId: nonempty(input.executionId, 'executionId'), derivationSeed: nonempty(input.derivationSeed, 'derivationSeed'), values: values as Record<string, string> });
10
+ }
11
+ export class DeliveryExecutionBindings implements ExecutionBindings {
12
+ readonly derivationSeed: string;
13
+ private readonly executionId: string;
14
+ private readonly expected?: DerivedBindings;
15
+ private readonly values: Record<string, string> = Object.create(null);
16
+ private sealed = false;
17
+ constructor(input: { executionId: string; derivationSeed: string; expected?: DerivedBindings }) {
18
+ this.executionId = nonempty(input.executionId, 'executionId'); this.derivationSeed = nonempty(input.derivationSeed, 'derivationSeed');
19
+ this.expected = input.expected && parseDerivedBindings(input.expected);
20
+ if (this.expected && (this.expected.executionId !== this.executionId || this.expected.derivationSeed !== this.derivationSeed)) throw new Error('derived binding identity mismatch');
21
+ }
22
+ recordOrAssertDerivedValue(key: string, value: string): void {
23
+ if (this.sealed) throw new Error('derived bindings are sealed');
24
+ nonempty(key, 'derived key'); nonempty(value, 'derived value');
25
+ if (Object.hasOwn(this.values, key)) throw new Error(`duplicate derived binding ${key}`);
26
+ if (this.expected) {
27
+ if (!Object.hasOwn(this.expected.values, key)) throw new Error(`unexpected derived binding ${key}`);
28
+ if (this.expected.values[key] !== value) throw new Error(`derived binding ${key} differs`);
29
+ }
30
+ this.values[key] = value;
31
+ }
32
+ seal(): DerivedBindings {
33
+ if (this.expected && Object.keys(this.expected.values).some(key => !Object.hasOwn(this.values, key))) throw new Error('missing expected derived bindings');
34
+ this.sealed = true;
35
+ return parseDerivedBindings({ executionId: this.executionId, derivationSeed: this.derivationSeed, values: this.values });
36
+ }
37
+ }
@@ -0,0 +1,38 @@
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import {spawn} from 'node:child_process';
4
+ import {randomUUID} from 'node:crypto';
5
+ import {canonicalData,canonicalJson} from '../workflow/lib/canonicalData';
6
+ import {byteHash,developmentPath,atomicDevelopmentWrite} from './materialization';
7
+ export interface ExpectedDevelopmentCode {key:string;contract:string;address:string}
8
+ /** The checker incrementally merges output. A fresh private output file is mandatory. */
9
+ export function validateDevelopmentCheckReport(raw:unknown,target:string,expected:readonly ExpectedDevelopmentCode[]):unknown {
10
+ const value=canonicalData(raw) as any;
11
+ if(!expected.length||new Set(expected.map(e=>e.key)).size!==expected.length)throw Error('Empty expected CheckCode set or key collision');
12
+ if(!value||Array.isArray(value)||canonicalJson(Object.keys(value))!==canonicalJson([target]))throw Error('CheckCode target mismatch');
13
+ const entries=value[target];if(!entries||Array.isArray(entries)||canonicalJson(Object.keys(entries).sort())!==canonicalJson(expected.map(e=>e.key).sort()))throw Error('CheckCode missing/extra entries');
14
+ for(const e of expected){const row=entries[e.key];if(!row||row.contract!==e.contract||row.scheme!=='evm'||typeof row.address!=='string'||row.address.toLowerCase()!==e.address.toLowerCase()||row.matches!==true||row.error!==null||typeof row.reason!=='string'||!Number.isSafeInteger(row.onChainBytecodeLength)||row.onChainBytecodeLength<=0||!Number.isSafeInteger(row.localBytecodeLength)||row.localBytecodeLength<=0)throw Error(`CheckCode identity/match failure: ${e.key}`);}
15
+ return value;
16
+ }
17
+ function command(root:string,cmd:string,args:string[],env:NodeJS.ProcessEnv,log:string):Promise<void> {
18
+ return new Promise((resolve,reject)=>{const output=fs.createWriteStream(log,{flags:'wx',mode:0o600});const child=spawn(cmd,args,{cwd:root,env,stdio:['ignore','pipe','pipe']});child.stdout.pipe(output,{end:false});child.stderr.pipe(output,{end:false});child.on('error',error=>{output.end();reject(error);});child.on('close',code=>{output.end(()=>code===0?resolve():reject(Error(`CheckCode command failed (${code}): ${cmd}; see ${log}`)));});});
19
+ }
20
+ export async function runDevelopmentCheckCode(input:{root:string;target:string;executionId:string;planHash:string;manifestDir:string;registry:string;metadata:string;effective:Record<string,Record<string,string>>;expected:ExpectedDevelopmentCode[];assertArtifacts:()=>Promise<unknown>}):Promise<unknown> {
21
+ const relative=`.gate-delivery/check-code/${input.executionId}/${randomUUID()}`,directory=developmentPath(input.root,relative);fs.mkdirSync(directory,{recursive:true,mode:0o700});
22
+ const effective=canonicalJson(input.effective)+'\n';atomicDevelopmentWrite(input.root,`${relative}/effective.json`,effective);
23
+ const raw=path.join(directory,`${input.target}.raw.json`),env:NodeJS.ProcessEnv={...process.env,HARDHAT_NETWORK:input.target,GATE_WORKFLOW_TARGET:input.target,MANIFEST_DEFAULT_DIR:input.manifestDir};
24
+ // Configuration's runtime loader selects the actual named target, never a fork.
25
+ delete env.GATE_DELIVERY_CONTEXT;
26
+ const snapshot=async()=>{
27
+ if(fs.readFileSync(path.join(input.root,'contractInfo.json'),'utf8')!==input.registry||fs.readFileSync(path.join(input.root,'deploymentInfo.json'),'utf8')!==input.metadata)throw Error('Registry/metadata changed during CheckCode');
28
+ return await input.assertArtifacts();
29
+ };
30
+ await snapshot();await command(input.root,'npm',['run','compile','--','--network',input.target],env,path.join(directory,'compile.log'));await snapshot();
31
+ if(fs.existsSync(raw))throw Error('CheckCode raw output must be fresh');
32
+ await command(input.root,process.execPath,[path.join(input.root,'node_modules/gate-evm-tools/bin/cli.js'),'check','--scheme','evm','--network',input.target,'--config',path.join(directory,'effective.json'),'--output',raw],env,path.join(directory,'check.log'));
33
+ const artifacts=await snapshot();
34
+ if(!fs.existsSync(raw))throw Error('CheckCode completed without raw output');
35
+ const stat=fs.lstatSync(raw);if(!stat.isFile()||stat.isSymbolicLink()||stat.nlink!==1)throw Error('Invalid CheckCode raw output');
36
+ const bytes=fs.readFileSync(raw);validateDevelopmentCheckReport(JSON.parse(bytes.toString('utf8')),input.target,input.expected);
37
+ return {version:1,executionId:input.executionId,planHash:input.planHash,target:input.target,rawFile:`${relative}/${input.target}.raw.json`,rawHash:byteHash(bytes),registryHash:byteHash(input.registry),metadataHash:byteHash(input.metadata),effectiveHash:byteHash(effective),artifacts};
38
+ }