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,53 @@
1
+ /** Recoverable file-only commit. SQLite supplies an OS-released cross-process mutex;
2
+ * the fsynced intent survives that mutex's rollback after a process crash. */
3
+ import fs from 'node:fs';
4
+ import path from 'node:path';
5
+ import {randomUUID,createHash} from 'node:crypto';
6
+ import {DatabaseSync} from 'node:sqlite';
7
+ import {canonicalJson,semanticHash,exactObject} from '../workflow/lib/canonicalData';
8
+ import {portablePath,safeId} from './protocol';
9
+ export interface DevelopmentFile {path:string;before:string|null;after:string}
10
+ export interface DevelopmentFileCommit {root:string;executionId:string;identity:string;files:DevelopmentFile[]}
11
+ export const byteHash=(bytes:string|Buffer)=>createHash('sha256').update(bytes).digest('hex');
12
+ export function developmentPath(root:string,relative:string):string {
13
+ portablePath(relative,'materialization path');let current=fs.realpathSync(root);
14
+ for(const part of relative.split('/')){current=path.join(current,part);if(fs.existsSync(current)){const s=fs.lstatSync(current);if(s.isSymbolicLink()||(!s.isDirectory()&&!s.isFile())||s.isFile()&&s.nlink!==1)throw Error('Unsafe materialization path');}}
15
+ return current;
16
+ }
17
+ export function fileBytes(root:string,relative:string):string|null {const file=developmentPath(root,relative);return fs.existsSync(file)?fs.readFileSync(file,'utf8'):null;}
18
+ function syncDir(directory:string){const fd=fs.openSync(directory,'r');try{fs.fsyncSync(fd);}finally{fs.closeSync(fd);}}
19
+ function mkdir(directory:string){if(fs.existsSync(directory))return;mkdir(path.dirname(directory));fs.mkdirSync(directory,{mode:0o700});syncDir(path.dirname(directory));}
20
+ export function atomicDevelopmentWrite(root:string,relative:string,bytes:string):void {
21
+ const file=developmentPath(root,relative);mkdir(path.dirname(file));const temp=`${file}.${randomUUID()}.tmp`;
22
+ const fd=fs.openSync(temp,'wx',0o600);try{fs.writeFileSync(fd,bytes);fs.fsyncSync(fd);}finally{fs.closeSync(fd);}
23
+ fs.renameSync(temp,file);syncDir(path.dirname(file));
24
+ }
25
+ export function readDevelopmentJournal(root:string,executionId:string):any|undefined {
26
+ const bytes=fileBytes(root,`.gate-delivery/materialization/${safeId(executionId,'executionId')}.json`);if(bytes===null)return;
27
+ const j=JSON.parse(bytes);exactObject(j,['version','executionId','identity','files','state','intentHash'],'materialization journal');
28
+ if(j.version!==1||j.executionId!==executionId||!['prepared','committed'].includes(j.state)||!Array.isArray(j.files)||!j.files.length)throw Error('Invalid materialization journal');
29
+ for(const f of j.files){exactObject(f,['path','before','after','beforeHash','afterHash'],'journal file');portablePath(f.path,'journal path');if((f.before!==null&&typeof f.before!=='string')||typeof f.after!=='string'||f.beforeHash!==(f.before===null?null:byteHash(f.before))||f.afterHash!==byteHash(f.after))throw Error('Invalid materialization journal bytes');}
30
+ if(new Set(j.files.map((f:any)=>f.path)).size!==j.files.length||j.intentHash!==semanticHash({version:j.version,executionId:j.executionId,identity:j.identity,files:j.files}))throw Error('Invalid materialization journal identity');return j;
31
+ }
32
+ export async function withDevelopmentFileLock<T>(root:string,work:()=>Promise<T>):Promise<T> {
33
+ const file=developmentPath(root,'.gate-delivery/materialization.sqlite');mkdir(path.dirname(file));const db=new DatabaseSync(file);
34
+ try{db.exec('PRAGMA busy_timeout=5000; PRAGMA synchronous=FULL; BEGIN IMMEDIATE');return await work();}finally{try{db.exec('ROLLBACK');}finally{db.close();}}
35
+ }
36
+ /** Caller holds no file lock. onFileCommitted is a progress notification, never acceptance authority. */
37
+ export async function commitDevelopmentFiles(input:DevelopmentFileCommit,onFileCommitted?:(path:string)=>void):Promise<any> {
38
+ return withDevelopmentFileLock(input.root,()=>commitDevelopmentFilesLocked(input,onFileCommitted));
39
+ }
40
+ export async function commitDevelopmentFilesLocked(input:DevelopmentFileCommit,onFileCommitted?:(path:string)=>void):Promise<any> {
41
+ safeId(input.executionId,'executionId');if(!/^[a-f0-9]{64}$/.test(input.identity)||!input.files.length)throw Error('Invalid materialization identity/files');
42
+ const files=input.files.map(f=>{exactObject(f,['path','before','after'],'materialization file');developmentPath(input.root,f.path);if((f.before!==null&&typeof f.before!=='string')||typeof f.after!=='string')throw Error('Invalid file bytes');return {...f,beforeHash:f.before===null?null:byteHash(f.before),afterHash:byteHash(f.after)};});
43
+ if(new Set(files.map(f=>f.path)).size!==files.length)throw Error('Duplicate materialization path');
44
+ const body={version:1,executionId:input.executionId,identity:input.identity,files},intentHash=semanticHash(body);
45
+ let journal=readDevelopmentJournal(input.root,input.executionId);
46
+ if(journal&&journal.intentHash!==intentHash)throw Error('Materialization identity/candidate conflict');
47
+ const journalPath=`.gate-delivery/materialization/${input.executionId}.json`;
48
+ // Validate the entire set before changing even the first file.
49
+ for(const f of files){const bytes=fileBytes(input.root,f.path);if(bytes!==f.before&&bytes!==f.after)throw Error(`Materialization byte conflict: ${f.path}`);if(journal?.state==='committed'&&bytes!==f.after)throw Error(`Committed materialization conflict: ${f.path}`);}
50
+ if(!journal){journal={...body,state:'prepared',intentHash};atomicDevelopmentWrite(input.root,journalPath,canonicalJson(journal)+'\n');}
51
+ for(const f of files){const current=fileBytes(input.root,f.path);if(current===f.after)continue;if(current!==f.before)throw Error(`Materialization byte conflict: ${f.path}`);atomicDevelopmentWrite(input.root,f.path,f.after);onFileCommitted?.(f.path);}
52
+ journal={...journal,state:'committed'};atomicDevelopmentWrite(input.root,journalPath,canonicalJson(journal)+'\n');return journal;
53
+ }
@@ -0,0 +1,60 @@
1
+ /** Structural observation validation grants neither chain finality nor send authority. */
2
+ import { canonicalJson, deepFreeze, exactObject, nonempty } from '../workflow/lib/canonicalData';
3
+ import { strictData } from './data';
4
+ import type { DeliveryPlan } from './plan';
5
+ export type ObservationState = 'included-unfinalized' | 'finalized-success' | 'finalized-reverted';
6
+ export interface TransactionObservation {
7
+ observationId: string;
8
+ executionId: string;
9
+ planHash: string;
10
+ chainId: string;
11
+ target: string;
12
+ transaction: DeliveryPlan['transactions'][number];
13
+ transactionHash: string;
14
+ state: ObservationState;
15
+ blockNumber: string;
16
+ blockHash: string;
17
+ safe?: {
18
+ envelopeId: string;
19
+ innerCallIndex: number;
20
+ transactionIndex: string;
21
+ };
22
+ }
23
+ /** Trusted producer must verify exact transaction/chain inclusion, execution outcome,
24
+ * canonicality and configured finality. A user JSON object or receipt hash is not this capability.
25
+ * Hosts must supply this port from controlled code, never agent-supplied implementations. */
26
+ export interface TrustedObservationPort {
27
+ readObservation(observationId: string): Promise<TransactionObservation | undefined>;
28
+ }
29
+ export interface TrustedFinalizedProgressPort {
30
+ readFinalized(observationId: string): Promise<TransactionObservation | undefined>;
31
+ }
32
+ export function uint256(raw: unknown, label: string): string {
33
+ if (typeof raw !== 'string' || !/^(0|[1-9][0-9]*)$/.test(raw) || BigInt(raw) >= 2n ** 256n)
34
+ throw new Error(`Invalid canonical uint256 ${label}`);
35
+ return raw;
36
+ }
37
+ export function hash32(raw: unknown, label: string): string {
38
+ if (typeof raw !== 'string' || !/^0x[0-9a-f]{64}$/.test(raw))
39
+ throw new Error(`Invalid ${label}`);
40
+ return raw;
41
+ }
42
+ export function parseObservation(raw: unknown, plan: DeliveryPlan, index: number): TransactionObservation {
43
+ const data = strictData(raw);
44
+ const v = exactObject(data, ['observationId', 'executionId', 'planHash', 'chainId', 'target', 'transaction', 'transactionHash', 'state', 'blockNumber', 'blockHash', ...(Object.hasOwn(data as object, 'safe') ? ['safe'] : [])], 'transaction observation');
45
+ if (v.safe !== undefined) {
46
+ const m = exactObject(v.safe, ['envelopeId', 'innerCallIndex', 'transactionIndex'], 'Safe observation mapping');
47
+ if (typeof m.envelopeId !== 'string' || !/^[0-9a-f]{64}$/.test(m.envelopeId) || !Number.isSafeInteger(m.innerCallIndex) || Number(m.innerCallIndex) < 0)
48
+ throw Error('Invalid Safe observation mapping');
49
+ uint256(m.transactionIndex, 'Safe transactionIndex');
50
+ }
51
+ nonempty(v.observationId, 'observationId');
52
+ hash32(v.transactionHash, 'transactionHash');
53
+ hash32(v.blockHash, 'blockHash');
54
+ uint256(v.blockNumber, 'blockNumber');
55
+ if (!['included-unfinalized', 'finalized-success', 'finalized-reverted'].includes(String(v.state)))
56
+ throw new Error('Invalid observation state');
57
+ if (v.executionId !== plan.executionId || v.planHash !== plan.planHash || v.chainId !== plan.chainId || v.target !== plan.target || !plan.transactions[index] || canonicalJson(v.transaction) !== canonicalJson(plan.transactions[index]))
58
+ throw new Error('Observation plan identity/order mismatch');
59
+ return deepFreeze(v as unknown as TransactionObservation);
60
+ }
@@ -0,0 +1,349 @@
1
+ import Ajv from "ajv";
2
+ import {
3
+ deepFreeze,
4
+ semanticHash,
5
+ canonicalJson,
6
+ } from "../workflow/lib/canonicalData";
7
+ import { strictData, ownPath, pointerPart, pointerParts } from "./data";
8
+ export { strictData } from "./data";
9
+
10
+ type Schema = Record<string, any>;
11
+ type Policy =
12
+ | { kind: "copy"; target: string; path: string }
13
+ | { kind: "manual" }
14
+ | { kind: "computed"; producer: string; version: string };
15
+ export interface ManualObservation {
16
+ source: string;
17
+ value: unknown;
18
+ }
19
+ export interface ComputedObservation {
20
+ producer: string;
21
+ version: string;
22
+ inputs: unknown;
23
+ output: unknown;
24
+ }
25
+ export interface ParameterInputs {
26
+ schema: Schema;
27
+ target: string;
28
+ values: unknown;
29
+ sources?: Record<string, unknown>;
30
+ manual?: Record<string, ManualObservation>;
31
+ computed?: Record<string, ComputedObservation>;
32
+ }
33
+ export interface TrustedParameterProducer {
34
+ version: string;
35
+ produce(inputs: unknown): unknown;
36
+ }
37
+ export interface LeafProvenance {
38
+ target: string;
39
+ path: string;
40
+ policy: Policy["kind"];
41
+ valueIdentity: string;
42
+ observation: Record<string, unknown>;
43
+ }
44
+ export interface ResolvedDeliveryParameters extends Required<ParameterInputs> {
45
+ version: 1;
46
+ provenance: LeafProvenance[];
47
+ identity: string;
48
+ }
49
+ const DIALECT = "http://json-schema.org/draft-07/schema#";
50
+ const KEYWORDS = new Set([
51
+ "$schema",
52
+ "title",
53
+ "description",
54
+ "type",
55
+ "properties",
56
+ "required",
57
+ "additionalProperties",
58
+ "items",
59
+ "minItems",
60
+ "maxItems",
61
+ "uniqueItems",
62
+ "minProperties",
63
+ "maxProperties",
64
+ "enum",
65
+ "const",
66
+ "minimum",
67
+ "maximum",
68
+ "exclusiveMinimum",
69
+ "exclusiveMaximum",
70
+ "multipleOf",
71
+ "minLength",
72
+ "maxLength",
73
+ "pattern",
74
+ "x-policy",
75
+ ]);
76
+ const ajv = new Ajv({
77
+ strict: true,
78
+ allErrors: true,
79
+ coerceTypes: false,
80
+ useDefaults: false,
81
+ removeAdditional: false,
82
+ ownProperties: true,
83
+ });
84
+ ajv.addKeyword({ keyword: "x-policy", valid: true });
85
+ function checkedSchema(raw: Schema): Schema {
86
+ const schema = strictData(raw);
87
+ if (schema.$schema !== DIALECT)
88
+ throw new Error("Delivery schema requires explicit draft-07 dialect");
89
+ const visit = (s: Schema, root = false): void => {
90
+ if (!s || typeof s !== "object" || Array.isArray(s))
91
+ throw new Error("Delivery schema nodes must be objects");
92
+ for (const key of Object.keys(s))
93
+ if (!KEYWORDS.has(key))
94
+ throw new Error(`Unsupported delivery schema keyword ${key}`);
95
+ if (!root && s.$schema !== undefined)
96
+ throw new Error("Nested schema dialect unsupported");
97
+ if (
98
+ ![
99
+ "object",
100
+ "array",
101
+ "string",
102
+ "boolean",
103
+ "integer",
104
+ "number",
105
+ "null",
106
+ ].includes(s.type)
107
+ )
108
+ throw new Error("Each delivery schema node requires one explicit type");
109
+ if (s.type === "object") {
110
+ if (
111
+ s.additionalProperties !== false ||
112
+ !s.properties ||
113
+ typeof s.properties !== "object" ||
114
+ Array.isArray(s.properties)
115
+ )
116
+ throw new Error(
117
+ "Object schemas require properties and additionalProperties:false",
118
+ );
119
+ if (
120
+ Object.keys(s.properties).some((key) =>
121
+ ["__proto__", "constructor", "prototype"].includes(key),
122
+ )
123
+ )
124
+ throw new Error(
125
+ "Delivery schemas explicitly disallow prototype-like property names",
126
+ );
127
+ Object.values(s.properties).forEach((child) => visit(child as Schema));
128
+ } else if (
129
+ s.properties !== undefined ||
130
+ s.additionalProperties !== undefined
131
+ )
132
+ throw new Error("Object keywords require object type");
133
+ if (s.type === "array") visit(s.items);
134
+ else if (s.items !== undefined)
135
+ throw new Error("items requires array type");
136
+ if (s["x-policy"] !== undefined) {
137
+ const p = s["x-policy"];
138
+ if (!p || typeof p !== "object" || Array.isArray(p))
139
+ throw new Error("Invalid parameter policy");
140
+ const keys =
141
+ p.kind === "copy"
142
+ ? ["kind", "target", "path"]
143
+ : p.kind === "computed"
144
+ ? ["kind", "producer", "version"]
145
+ : p.kind === "manual"
146
+ ? ["kind"]
147
+ : [];
148
+ if (
149
+ !keys.length ||
150
+ Object.keys(p).sort().join() !== keys.sort().join() ||
151
+ keys.some((k) => typeof p[k] !== "string" || (k !== "path" && !p[k]))
152
+ )
153
+ throw new Error("Invalid parameter policy fields");
154
+ if (p.kind === "copy") pointerParts(p.path);
155
+ }
156
+ };
157
+ visit(schema, true);
158
+ // Ajv's code generator rejects some prototype-like property names; refuse these schema
159
+ // names explicitly rather than silently omitting validation. strictData itself preserves them.
160
+ ajv.compile(schema);
161
+ return schema;
162
+ }
163
+ function attest(
164
+ input: Required<ParameterInputs>,
165
+ producers?: Record<string, TrustedParameterProducer>,
166
+ ): LeafProvenance[] {
167
+ const schema = checkedSchema(input.schema),
168
+ validate = ajv.compile(schema);
169
+ if (!validate(input.values))
170
+ throw new Error(
171
+ `Delivery parameter schema: ${ajv.errorsText(validate.errors)}`,
172
+ );
173
+ if (!input.target || typeof input.target !== "string")
174
+ throw new Error("Parameter target required");
175
+ const provenance: LeafProvenance[] = [];
176
+ const usedManual = new Set<string>(),
177
+ usedComputed = new Set<string>();
178
+ const visit = (
179
+ s: Schema,
180
+ value: unknown,
181
+ path: string,
182
+ inherited?: { policy: Policy; root: string },
183
+ ) => {
184
+ const selected = s["x-policy"]
185
+ ? { policy: s["x-policy"] as Policy, root: path }
186
+ : inherited;
187
+ const entries =
188
+ value && typeof value === "object"
189
+ ? Object.entries(value).sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))
190
+ : [];
191
+ if (entries.length) {
192
+ for (const [key, v] of entries)
193
+ visit(
194
+ s.type === "array" ? s.items : s.properties[key],
195
+ v,
196
+ `${path}/${pointerPart(key)}`,
197
+ selected,
198
+ );
199
+ return;
200
+ }
201
+ if (!selected) throw new Error(`Missing parameter policy at ${path}`);
202
+ const p = selected.policy;
203
+ let observation: Record<string, unknown>;
204
+ if (p.kind === "copy") {
205
+ const sourcePath = p.path + path.slice(selected.root.length);
206
+ const source = ownPath(
207
+ input.sources,
208
+ [p.target, ...pointerParts(sourcePath)],
209
+ `Copy source ${p.target}${sourcePath}`,
210
+ );
211
+ if (canonicalJson(source) !== canonicalJson(value))
212
+ throw new Error(`Copy value mismatch at ${path}`);
213
+ observation = {
214
+ target: p.target,
215
+ path: sourcePath,
216
+ contentIdentity: semanticHash(source),
217
+ sourceIdentity: semanticHash(ownPath(input.sources, [p.target])),
218
+ };
219
+ } else if (p.kind === "manual") {
220
+ const o = ownPath(input.manual, [path]) as ManualObservation;
221
+ usedManual.add(path);
222
+ if (
223
+ !o ||
224
+ Object.keys(o).sort().join() !== "source,value" ||
225
+ typeof o.source !== "string" ||
226
+ !o.source ||
227
+ canonicalJson(o.value) !== canonicalJson(value)
228
+ )
229
+ throw new Error(`Manual observation mismatch at ${path}`);
230
+ observation = {
231
+ source: o.source,
232
+ contentIdentity: semanticHash(o.value),
233
+ };
234
+ } else {
235
+ const o = ownPath(input.computed, [path]) as ComputedObservation;
236
+ usedComputed.add(path);
237
+ if (
238
+ !o ||
239
+ Object.keys(o).sort().join() !== "inputs,output,producer,version" ||
240
+ o.producer !== p.producer ||
241
+ o.version !== p.version ||
242
+ canonicalJson(o.output) !== canonicalJson(value)
243
+ )
244
+ throw new Error(`Computed observation mismatch at ${path}`);
245
+ if (producers) {
246
+ const producer = ownPath(producers, [
247
+ p.producer,
248
+ ]) as TrustedParameterProducer;
249
+ if (
250
+ producer.version !== p.version ||
251
+ canonicalJson(
252
+ strictData(producer.produce(deepFreeze(strictData(o.inputs)))),
253
+ ) !== canonicalJson(value)
254
+ )
255
+ throw new Error(`Computed producer mismatch at ${path}`);
256
+ }
257
+ observation = {
258
+ producer: p.producer,
259
+ version: p.version,
260
+ inputIdentity: semanticHash(o.inputs),
261
+ outputIdentity: semanticHash(o.output),
262
+ };
263
+ }
264
+ provenance.push({
265
+ target: input.target,
266
+ path,
267
+ policy: p.kind,
268
+ valueIdentity: semanticHash(value),
269
+ observation,
270
+ });
271
+ };
272
+ visit(schema, input.values, "");
273
+ for (const [observations, used] of [
274
+ [input.manual, usedManual],
275
+ [input.computed, usedComputed],
276
+ ] as const)
277
+ if (Object.keys(observations).some((k) => !used.has(k)))
278
+ throw new Error("Unused parameter observation");
279
+ return provenance.sort((a, b) =>
280
+ a.path < b.path ? -1 : a.path > b.path ? 1 : 0,
281
+ );
282
+ }
283
+ /** Development only. Producers are a versioned trusted seam, not independent production authority. */
284
+ export function resolveDeliveryParameters(
285
+ raw: ParameterInputs & {
286
+ producers?: Record<string, TrustedParameterProducer>;
287
+ },
288
+ ): ResolvedDeliveryParameters {
289
+ const allowed = [
290
+ "schema",
291
+ "target",
292
+ "values",
293
+ "sources",
294
+ "manual",
295
+ "computed",
296
+ "producers",
297
+ ];
298
+ if (
299
+ !raw ||
300
+ typeof raw !== "object" ||
301
+ Array.isArray(raw) ||
302
+ ![Object.prototype, null].includes(Object.getPrototypeOf(raw)) ||
303
+ Object.getOwnPropertySymbols(raw).length
304
+ )
305
+ throw new Error("Parameter inputs require own data fields");
306
+ const detached: Record<string, unknown> = {};
307
+ for (const key of Object.getOwnPropertyNames(raw)) {
308
+ if (!allowed.includes(key))
309
+ throw new Error(
310
+ "Unsupported parameter input field (overrides are not accepted)",
311
+ );
312
+ detached[key] = ownPath(raw, [key], "parameter input");
313
+ }
314
+ raw = detached as unknown as typeof raw;
315
+ const input = strictData({
316
+ schema: raw.schema,
317
+ target: raw.target,
318
+ values: raw.values,
319
+ sources: raw.sources ?? {},
320
+ manual: raw.manual ?? {},
321
+ computed: raw.computed ?? {},
322
+ });
323
+ const provenance = attest(input, raw.producers ?? {});
324
+ const body = { version: 1 as const, ...input, provenance };
325
+ return deepFreeze({ ...body, identity: semanticHash(body) });
326
+ }
327
+ /** Consume a previously trusted identity; no fill-in, override, or producer invocation. */
328
+ export function consumeDeliveryParameters(
329
+ raw: ResolvedDeliveryParameters,
330
+ expectedIdentity: string,
331
+ ): unknown {
332
+ if (arguments.length !== 2)
333
+ throw new Error(
334
+ "Production parameter consumption accepts no override arguments",
335
+ );
336
+ const result = strictData(raw);
337
+ if (
338
+ Object.keys(result).sort().join() !==
339
+ "computed,identity,manual,provenance,schema,sources,target,values,version" ||
340
+ result.version !== 1
341
+ )
342
+ throw new Error("Invalid resolved parameter envelope");
343
+ const { identity, ...body } = result;
344
+ if (identity !== expectedIdentity || identity !== semanticHash(body))
345
+ throw new Error("Resolved parameter identity mismatch");
346
+ if (canonicalJson(attest(result)) !== canonicalJson(result.provenance))
347
+ throw new Error("Resolved parameter provenance mismatch");
348
+ return deepFreeze(result.values);
349
+ }
@@ -0,0 +1,98 @@
1
+ /** Typed evidence consumer. Durable finalized observation production/query is supplied by the launcher (Task6a). */
2
+ import type { ReleaseExecutionTransaction } from '../workflow/lib/transactionPlanner';
3
+ import { canonicalData, canonicalJson, deepFreeze, digest, exactObject, nonempty } from '../workflow/lib/canonicalData';
4
+ import { assertPendingUupsCurrentState, assertPendingUupsPreparation, planDeployment, sameAddress, type PendingUupsBindingInput, type PendingUupsResolution, type PendingUupsResolverPort } from '../workflow/lib/pendingUupsBinding';
5
+ import { parseDeliveryPlan, type DeliveryPlan } from './plan';
6
+ import { parseDerivedBindings, type DerivedBindings } from './bindings';
7
+ import { parsePreparationJournal, type PreparationEntry } from './journal';
8
+ import { validateNetworkAlias } from './policy';
9
+ export interface PendingEvidenceIdentity {
10
+ executionId: string; target: string; inputsHash: string; artifactHash: string; planHash: string;
11
+ selectedStepIds: string[];
12
+ infrastructure: { scheme: 'evm'; factory: string; multicall: string; placeholderImplementation: string };
13
+ derivedValues: DerivedBindings;
14
+ }
15
+ export interface ObservationReference { observationId: string; transactionId: string; transactionHash: string }
16
+ export interface PendingUupsEvidence {
17
+ identity: PendingEvidenceIdentity;
18
+ candidate: { deploymentId: string; executionId: string; target: string; instanceId: string; contractInfoKey: string; address: string };
19
+ plan: DeliveryPlan; preparations: PreparationEntry[]; observations: ObservationReference[];
20
+ }
21
+ export interface FinalizedTransactionObservation {
22
+ observationId: string; executionId: string; target: string; planHash: string;
23
+ transaction: ReleaseExecutionTransaction; transactionHash: string;
24
+ receipt: { transactionHash: string; status: 1; blockNumber: string; blockHash: string };
25
+ }
26
+ export interface FinalizedObservationPort {
27
+ /** Trusted query capability must establish canonical inclusion and configured finality before returning.
28
+ * This consumer cannot establish finality from caller JSON or a `finalized: true` flag. */
29
+ readFinalized(observationId: string): Promise<FinalizedTransactionObservation | undefined>;
30
+ }
31
+ function hash32(raw: unknown, label: string): string {
32
+ if (typeof raw !== 'string' || !/^0x[\da-f]{64}$/.test(raw)) throw new Error(`Invalid ${label}`); return raw;
33
+ }
34
+ function parseIdentity(raw: unknown): PendingEvidenceIdentity {
35
+ const v = exactObject(raw, ['executionId', 'target', 'inputsHash', 'artifactHash', 'planHash', 'selectedStepIds', 'infrastructure', 'derivedValues'], 'pending evidence identity');
36
+ nonempty(v.executionId, 'executionId'); validateNetworkAlias(v.target, 'target', false);
37
+ digest(v.inputsHash, 'inputsHash'); digest(v.artifactHash, 'artifactHash'); digest(v.planHash, 'planHash');
38
+ if (!Array.isArray(v.selectedStepIds) || !v.selectedStepIds.length || v.selectedStepIds.some(id => typeof id !== 'string' || !id) || new Set(v.selectedStepIds).size !== v.selectedStepIds.length) throw new Error('Invalid selectedStepIds');
39
+ const infra = exactObject(v.infrastructure, ['scheme', 'factory', 'multicall', 'placeholderImplementation'], 'pending infrastructure');
40
+ if (infra.scheme !== 'evm') throw new Error('Pending delivery evidence requires EVM');
41
+ for (const key of ['factory', 'multicall', 'placeholderImplementation']) if (typeof infra[key] !== 'string' || !/^0x[\da-f]{40}$/.test(infra[key] as string)) throw new Error('Invalid pending infrastructure address');
42
+ const derived = parseDerivedBindings(v.derivedValues);
43
+ if (derived.executionId !== v.executionId) throw new Error('Pending derived execution identity mismatch');
44
+ return deepFreeze(v as unknown as PendingEvidenceIdentity);
45
+ }
46
+ export async function validatePendingUupsEvidence(options: {
47
+ input: PendingUupsBindingInput; identity: PendingEvidenceIdentity; evidence: unknown; finalized: FinalizedObservationPort;
48
+ }): Promise<PendingUupsResolution> {
49
+ if (!options.finalized || typeof options.finalized.readFinalized !== 'function') throw new Error('Pending reuse requires a trusted finalized observation resolver');
50
+ const identity = parseIdentity(options.identity), input = options.input;
51
+ const v = exactObject(options.evidence, ['identity', 'candidate', 'plan', 'preparations', 'observations'], 'pending UUPS evidence');
52
+ if (canonicalJson(parseIdentity(v.identity)) !== canonicalJson(identity)) throw new Error('Pending evidence identity mismatch');
53
+ const plan = parseDeliveryPlan(v.plan);
54
+ if (plan.executionId !== identity.executionId || plan.target !== identity.target || plan.inputsHash !== identity.inputsHash || plan.planHash !== identity.planHash || canonicalJson(plan.derivedBindings) !== canonicalJson(identity.derivedValues)) throw new Error('Pending plan identity mismatch');
55
+ if (input.network !== identity.target || !identity.selectedStepIds.includes(input.stepId) || input.scheme !== identity.infrastructure.scheme || !sameAddress(input.factory, identity.infrastructure.factory) || !sameAddress(input.multicall, identity.infrastructure.multicall) || !sameAddress(input.placeholderImplementationAddress, identity.infrastructure.placeholderImplementation)) throw new Error('Pending selection/infrastructure identity mismatch');
56
+ const candidate = exactObject(v.candidate, ['deploymentId', 'executionId', 'target', 'instanceId', 'contractInfoKey', 'address'], 'pending candidate');
57
+ if (candidate.deploymentId !== input.taskId || candidate.deploymentId !== plan.deploymentId || candidate.executionId !== identity.executionId || candidate.target !== input.network || candidate.instanceId !== input.instanceId || candidate.contractInfoKey !== input.contractInfoKey) throw new Error('Pending candidate identity mismatch');
58
+ const preparations = parsePreparationJournal(v.preparations, plan.transactions, plan.derivedBindings, { target: plan.target, chainId: plan.chainId, expectedStepIds: plan.deploymentBindings.map(b => b.stepId) });
59
+ for (const entry of preparations) {
60
+ const binding = plan.deploymentBindings.find(b => b.stepId === entry.stepId)!;
61
+ if (binding.preparationHash !== entry.preparationHash || canonicalJson(binding.transactionIds) !== canonicalJson(entry.mappings.map(m => m.transactionId)) || canonicalJson(binding.derivedKeys) !== canonicalJson(entry.derivedKeys)) throw new Error('Pending plan preparation binding mismatch');
62
+ }
63
+ const matching = preparations.filter(p => p.stepId === input.stepId);
64
+ if (matching.length !== 1) throw new Error('Pending evidence requires exactly one matching preparation');
65
+ const entry = matching[0], { request, plan: gatePlan } = entry.prepared;
66
+ assertPendingUupsPreparation(input, entry.change, request, gatePlan);
67
+ const proxy = planDeployment(gatePlan, 'proxy'), implementation = planDeployment(gatePlan, 'implementation');
68
+ if (!sameAddress(candidate.address, proxy.address)) throw new Error('Pending candidate address mismatch');
69
+ if (!Array.isArray(v.observations) || v.observations.length !== plan.transactions.length || !v.observations.length) throw new Error('Pending receipt completeness mismatch');
70
+ const seen = new Set<string>(), observationIds: string[] = [];
71
+ for (const [index, raw] of v.observations.entries()) {
72
+ const ref = exactObject(raw, ['observationId', 'transactionId', 'transactionHash'], 'observation reference');
73
+ const observationId = nonempty(ref.observationId, 'observationId'), tx = plan.transactions[index];
74
+ if (seen.has(observationId) || ref.transactionId !== tx.transactionId) throw new Error('Duplicate or unordered pending receipt mapping');
75
+ seen.add(observationId); observationIds.push(observationId); hash32(ref.transactionHash, 'reference transaction hash');
76
+ const observed = await options.finalized.readFinalized(observationId);
77
+ if (!observed) throw new Error('Finalized observation is unavailable');
78
+ const o = exactObject(observed, ['observationId', 'executionId', 'target', 'planHash', 'transaction', 'transactionHash', 'receipt'], 'finalized observation');
79
+ const receipt = exactObject(o.receipt, ['transactionHash', 'status', 'blockNumber', 'blockHash'], 'finalized receipt');
80
+ if (o.observationId !== observationId || o.executionId !== identity.executionId || o.target !== identity.target || o.planHash !== identity.planHash || o.transactionHash !== ref.transactionHash || canonicalJson(o.transaction) !== canonicalJson(tx) || receipt.transactionHash !== o.transactionHash || receipt.status !== 1) throw new Error('Finalized receipt/transaction/plan identity mismatch');
81
+ hash32(o.transactionHash, 'observed transaction hash'); hash32(receipt.blockHash, 'receipt block hash');
82
+ if (typeof receipt.blockNumber !== 'string' || !/^(0|[1-9][0-9]*)$/.test(receipt.blockNumber)) throw new Error('Invalid finalized block number');
83
+ }
84
+ await assertPendingUupsCurrentState(input, proxy.address, implementation.address);
85
+ return deepFreeze({ implementationAddress: implementation.address, implementationSalt: implementation.salt, proxyAddress: proxy.address, artifactDigest: gatePlan.artifact.digest,
86
+ binding: { executionId: identity.executionId, target: identity.target, planHash: identity.planHash, artifactDigest: gatePlan.artifact.digest, observationIds } });
87
+ }
88
+ export function pendingUupsResolver(input: {
89
+ identity: PendingEvidenceIdentity;
90
+ resolveEvidence(query: PendingUupsBindingInput): Promise<unknown | undefined>;
91
+ finalized: FinalizedObservationPort;
92
+ }): PendingUupsResolverPort {
93
+ const identity = parseIdentity(canonicalData(input.identity));
94
+ return { resolve: async query => {
95
+ const evidence = await input.resolveEvidence(query);
96
+ return evidence === undefined ? undefined : validatePendingUupsEvidence({ input: query, identity, evidence, finalized: input.finalized });
97
+ } };
98
+ }