@mysten-incubation/devstack 0.0.1 → 0.1.1

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 (838) hide show
  1. package/README.md +8 -4
  2. package/dashboard-ui/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  3. package/dashboard-ui/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  4. package/dashboard-ui/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  5. package/dashboard-ui/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  6. package/dashboard-ui/assets/geist-mono-cyrillic-ext-wght-normal-I4S5GZfc.woff2 +0 -0
  7. package/dashboard-ui/assets/geist-mono-cyrillic-wght-normal-BmXc_FBt.woff2 +0 -0
  8. package/dashboard-ui/assets/geist-mono-latin-ext-wght-normal-DrnZ1wKl.woff2 +0 -0
  9. package/dashboard-ui/assets/geist-mono-latin-wght-normal-B_7UjwxQ.woff2 +0 -0
  10. package/dashboard-ui/assets/geist-mono-symbols2-wght-normal-GZpp1pK2.woff2 +0 -0
  11. package/dashboard-ui/assets/geist-mono-vietnamese-wght-normal-D8KDMBhC.woff2 +0 -0
  12. package/dashboard-ui/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  13. package/dashboard-ui/assets/index-Bmi1UtAg.js +1356 -0
  14. package/dashboard-ui/assets/index-D5EShVt4.js +3 -0
  15. package/dashboard-ui/assets/index-Deml9drg.css +1 -0
  16. package/dashboard-ui/index.html +13 -0
  17. package/dist/api/define-capabilities.d.mts +14 -3
  18. package/dist/api/define-capabilities.mjs +18 -1
  19. package/dist/api/define-capabilities.mjs.map +1 -1
  20. package/dist/api/define-devstack.d.mts +1 -1
  21. package/dist/api/define-devstack.mjs +6 -26
  22. package/dist/api/define-devstack.mjs.map +1 -1
  23. package/dist/api/define-plugin.d.mts +1 -0
  24. package/dist/api/define-plugin.mjs +2 -0
  25. package/dist/api/inference-network.d.mts +132 -0
  26. package/dist/api/inference-network.mjs +105 -16
  27. package/dist/api/inference-network.mjs.map +1 -1
  28. package/dist/api/plugin-errors.d.mts +7 -0
  29. package/dist/api/run-stack.d.mts +20 -9
  30. package/dist/api/run-stack.mjs +56 -29
  31. package/dist/api/run-stack.mjs.map +1 -1
  32. package/dist/build-integrations/playwright/config.d.mts +6 -4
  33. package/dist/build-integrations/playwright/config.mjs +5 -3
  34. package/dist/build-integrations/playwright/config.mjs.map +1 -1
  35. package/dist/build-integrations/playwright/errors.d.mts +1 -1
  36. package/dist/build-integrations/playwright/global-setup.d.mts +43 -17
  37. package/dist/build-integrations/playwright/global-setup.mjs +250 -13
  38. package/dist/build-integrations/playwright/global-setup.mjs.map +1 -1
  39. package/dist/build-integrations/playwright/index.d.mts +5 -3
  40. package/dist/build-integrations/playwright/index.mjs +4 -2
  41. package/dist/build-integrations/playwright/stack-context.d.mts +0 -1
  42. package/dist/build-integrations/playwright/stack-context.mjs +24 -63
  43. package/dist/build-integrations/playwright/stack-context.mjs.map +1 -1
  44. package/dist/build-integrations/playwright/wallet-context.d.mts +7 -10
  45. package/dist/build-integrations/playwright/wallet-context.mjs +8 -13
  46. package/dist/build-integrations/playwright/wallet-context.mjs.map +1 -1
  47. package/dist/build-integrations/runtime/cold-start-url.d.mts +5 -0
  48. package/dist/build-integrations/runtime/cold-start-url.mjs +4 -3
  49. package/dist/build-integrations/runtime/cold-start-url.mjs.map +1 -1
  50. package/dist/build-integrations/runtime/conventional-routes.d.mts +51 -0
  51. package/dist/build-integrations/runtime/conventional-routes.mjs +92 -0
  52. package/dist/build-integrations/runtime/conventional-routes.mjs.map +1 -0
  53. package/dist/build-integrations/runtime/discover.d.mts +38 -30
  54. package/dist/build-integrations/runtime/discover.mjs +73 -70
  55. package/dist/build-integrations/runtime/discover.mjs.map +1 -1
  56. package/dist/build-integrations/runtime/endpoint-registry.d.mts +3 -1
  57. package/dist/build-integrations/runtime/endpoint-registry.mjs +3 -1
  58. package/dist/build-integrations/runtime/endpoint-registry.mjs.map +1 -1
  59. package/dist/build-integrations/runtime/index.d.mts +7 -2
  60. package/dist/build-integrations/runtime/index.mjs +9 -2
  61. package/dist/build-integrations/runtime/manifest-types.d.mts +2 -0
  62. package/dist/build-integrations/runtime/manifest-types.mjs +3 -0
  63. package/dist/build-integrations/runtime/playwright-stack-context-slot.d.mts +29 -0
  64. package/dist/build-integrations/runtime/playwright-stack-context-slot.mjs +10 -0
  65. package/dist/build-integrations/runtime/playwright-stack-context-slot.mjs.map +1 -0
  66. package/dist/build-integrations/runtime/read-stack-context.d.mts +1 -1
  67. package/dist/build-integrations/runtime/read-stack-context.mjs +10 -4
  68. package/dist/build-integrations/runtime/read-stack-context.mjs.map +1 -1
  69. package/dist/build-integrations/runtime/resolve-discovery-env.d.mts +48 -0
  70. package/dist/build-integrations/runtime/resolve-discovery-env.mjs +42 -0
  71. package/dist/build-integrations/runtime/resolve-discovery-env.mjs.map +1 -0
  72. package/dist/build-integrations/runtime/stack-context.d.mts +1 -1
  73. package/dist/build-integrations/runtime/wallet-paths.mjs +2 -0
  74. package/dist/build-integrations/vite/index.d.mts +51 -0
  75. package/dist/build-integrations/vite/index.mjs +73 -0
  76. package/dist/build-integrations/vite/index.mjs.map +1 -0
  77. package/dist/build-integrations/vitest/env.d.mts +4 -3
  78. package/dist/build-integrations/vitest/env.mjs +6 -4
  79. package/dist/build-integrations/vitest/env.mjs.map +1 -1
  80. package/dist/build-integrations/vitest/errors.d.mts +25 -4
  81. package/dist/build-integrations/vitest/errors.mjs +15 -2
  82. package/dist/build-integrations/vitest/errors.mjs.map +1 -1
  83. package/dist/build-integrations/vitest/index.d.mts +2 -2
  84. package/dist/build-integrations/vitest/index.mjs +3 -3
  85. package/dist/build-integrations/vitest/setup.d.mts +4 -2
  86. package/dist/build-integrations/vitest/setup.mjs +2 -2
  87. package/dist/build-integrations/vitest/setup.mjs.map +1 -1
  88. package/dist/build-integrations/vitest/stack-context.d.mts +0 -1
  89. package/dist/build-integrations/vitest/stack-context.mjs +33 -13
  90. package/dist/build-integrations/vitest/stack-context.mjs.map +1 -1
  91. package/dist/cli/bail.mjs +23 -0
  92. package/dist/cli/bail.mjs.map +1 -0
  93. package/dist/{surfaces/cli/commands → cli}/doctor-probes.mjs +26 -16
  94. package/dist/cli/doctor-probes.mjs.map +1 -0
  95. package/dist/cli/main.d.mts +15 -1
  96. package/dist/cli/main.mjs +166 -482
  97. package/dist/cli/main.mjs.map +1 -1
  98. package/dist/cli/prune-direct.mjs +31 -201
  99. package/dist/cli/prune-direct.mjs.map +1 -1
  100. package/dist/cli/snapshot-reader.mjs +14 -11
  101. package/dist/cli/snapshot-reader.mjs.map +1 -1
  102. package/dist/cli/up-lifecycle.mjs +4 -1
  103. package/dist/cli/up-lifecycle.mjs.map +1 -1
  104. package/dist/cli/wirings/apply.mjs +95 -0
  105. package/dist/cli/wirings/apply.mjs.map +1 -0
  106. package/dist/cli/wirings/build-verb-layers.mjs +42 -0
  107. package/dist/cli/wirings/build-verb-layers.mjs.map +1 -0
  108. package/dist/cli/wirings/config-loader.mjs +69 -0
  109. package/dist/cli/wirings/config-loader.mjs.map +1 -0
  110. package/dist/cli/wirings/engine-command.mjs +30 -0
  111. package/dist/cli/wirings/engine-command.mjs.map +1 -0
  112. package/dist/cli/wirings/identity.mjs +72 -0
  113. package/dist/cli/wirings/identity.mjs.map +1 -0
  114. package/dist/cli/wirings/provide-file-system.mjs +7 -0
  115. package/dist/cli/wirings/provide-file-system.mjs.map +1 -0
  116. package/dist/cli/wirings/snapshot.mjs +177 -0
  117. package/dist/cli/wirings/snapshot.mjs.map +1 -0
  118. package/dist/cli/wirings/up.mjs +287 -0
  119. package/dist/cli/wirings/up.mjs.map +1 -0
  120. package/dist/cli/wirings/wipe.mjs +40 -0
  121. package/dist/cli/wirings/wipe.mjs.map +1 -0
  122. package/dist/contracts/capability-decl.d.mts +0 -2
  123. package/dist/contracts/codegenable.d.mts +43 -0
  124. package/dist/contracts/container-runtime.d.mts +26 -1
  125. package/dist/contracts/faucet-strategy.d.mts +25 -0
  126. package/dist/contracts/funding-strategy.d.mts +42 -0
  127. package/dist/contracts/plugin-expander.mjs +60 -0
  128. package/dist/contracts/plugin-expander.mjs.map +1 -0
  129. package/dist/contracts/projection.d.mts +5 -3
  130. package/dist/contracts/renderer.d.mts +23 -0
  131. package/dist/contracts/routable.d.mts +14 -1
  132. package/dist/contracts/snapshotable.d.mts +25 -3
  133. package/dist/contracts/wallet-protocol.d.mts +52 -0
  134. package/dist/contracts/wallet-protocol.mjs +52 -0
  135. package/dist/contracts/wallet-protocol.mjs.map +1 -0
  136. package/dist/index.d.mts +26 -25
  137. package/dist/index.mjs +20 -13
  138. package/dist/{runtime → orchestrators}/built-in-plugin-layers.mjs +10 -5
  139. package/dist/orchestrators/built-in-plugin-layers.mjs.map +1 -0
  140. package/dist/orchestrators/codegen/bindings.d.mts +1 -2
  141. package/dist/orchestrators/codegen/bindings.mjs +52 -186
  142. package/dist/orchestrators/codegen/bindings.mjs.map +1 -1
  143. package/dist/orchestrators/codegen/emit.mjs +19 -1
  144. package/dist/orchestrators/codegen/emit.mjs.map +1 -1
  145. package/dist/orchestrators/codegen/errors.mjs +8 -3
  146. package/dist/orchestrators/codegen/errors.mjs.map +1 -1
  147. package/dist/orchestrators/codegen/format.mjs +47 -39
  148. package/dist/orchestrators/codegen/format.mjs.map +1 -1
  149. package/dist/orchestrators/codegen/gitignore.mjs +3 -1
  150. package/dist/orchestrators/codegen/gitignore.mjs.map +1 -1
  151. package/dist/orchestrators/codegen/output-location.mjs +41 -0
  152. package/dist/orchestrators/codegen/output-location.mjs.map +1 -0
  153. package/dist/orchestrators/codegen/paths.d.mts +1 -1
  154. package/dist/orchestrators/codegen/paths.mjs +40 -14
  155. package/dist/orchestrators/codegen/paths.mjs.map +1 -1
  156. package/dist/orchestrators/codegen/permissions.mjs +3 -1
  157. package/dist/orchestrators/codegen/permissions.mjs.map +1 -1
  158. package/dist/orchestrators/codegen/service.mjs +157 -105
  159. package/dist/orchestrators/codegen/service.mjs.map +1 -1
  160. package/dist/orchestrators/lifecycle-prune/errors.mjs +31 -0
  161. package/dist/orchestrators/lifecycle-prune/errors.mjs.map +1 -0
  162. package/dist/orchestrators/lifecycle-prune/index.mjs +350 -0
  163. package/dist/orchestrators/lifecycle-prune/index.mjs.map +1 -0
  164. package/dist/orchestrators/router/cleanup.mjs +26 -27
  165. package/dist/orchestrators/router/cleanup.mjs.map +1 -1
  166. package/dist/orchestrators/router/entrypoints.mjs +2 -2
  167. package/dist/orchestrators/router/entrypoints.mjs.map +1 -1
  168. package/dist/orchestrators/router/file-provider.mjs +14 -5
  169. package/dist/orchestrators/router/file-provider.mjs.map +1 -1
  170. package/dist/orchestrators/router/hostname.mjs +19 -55
  171. package/dist/orchestrators/router/hostname.mjs.map +1 -1
  172. package/dist/orchestrators/router/index.mjs +11 -0
  173. package/dist/orchestrators/router/profile.mjs +2 -2
  174. package/dist/orchestrators/router/sentinels.mjs +26 -0
  175. package/dist/orchestrators/router/sentinels.mjs.map +1 -0
  176. package/dist/orchestrators/router/service.mjs +40 -37
  177. package/dist/orchestrators/router/service.mjs.map +1 -1
  178. package/dist/orchestrators/router/traefik-container.mjs +27 -16
  179. package/dist/orchestrators/router/traefik-container.mjs.map +1 -1
  180. package/dist/{substrate/runtime → orchestrators}/run.mjs +26 -21
  181. package/dist/orchestrators/run.mjs.map +1 -0
  182. package/dist/orchestrators/runtime-composition.d.mts +1 -1
  183. package/dist/orchestrators/runtime-composition.mjs +123 -39
  184. package/dist/orchestrators/runtime-composition.mjs.map +1 -1
  185. package/dist/orchestrators/snapshot/capture-command.d.mts +1 -0
  186. package/dist/orchestrators/snapshot/capture-command.mjs +25 -0
  187. package/dist/orchestrators/snapshot/capture-command.mjs.map +1 -0
  188. package/dist/orchestrators/snapshot/capture.mjs +42 -28
  189. package/dist/orchestrators/snapshot/capture.mjs.map +1 -1
  190. package/dist/orchestrators/snapshot/descriptor.mjs +35 -10
  191. package/dist/orchestrators/snapshot/descriptor.mjs.map +1 -1
  192. package/dist/orchestrators/snapshot/identity-guard.mjs +1 -1
  193. package/dist/orchestrators/snapshot/index.mjs +13 -0
  194. package/dist/orchestrators/snapshot/integrity.d.mts +1 -1
  195. package/dist/orchestrators/snapshot/integrity.mjs +73 -17
  196. package/dist/orchestrators/snapshot/integrity.mjs.map +1 -1
  197. package/dist/orchestrators/snapshot/pending-marker.d.mts +1 -0
  198. package/dist/orchestrators/snapshot/pending-marker.mjs +99 -0
  199. package/dist/orchestrators/snapshot/pending-marker.mjs.map +1 -0
  200. package/dist/orchestrators/snapshot/phase-error.mjs +23 -0
  201. package/dist/orchestrators/snapshot/phase-error.mjs.map +1 -0
  202. package/dist/orchestrators/snapshot/prune.mjs +20 -55
  203. package/dist/orchestrators/snapshot/prune.mjs.map +1 -1
  204. package/dist/orchestrators/snapshot/recover-pending.d.mts +1 -0
  205. package/dist/orchestrators/snapshot/recover-pending.mjs +223 -0
  206. package/dist/orchestrators/snapshot/recover-pending.mjs.map +1 -0
  207. package/dist/orchestrators/snapshot/restore.mjs +118 -84
  208. package/dist/orchestrators/snapshot/restore.mjs.map +1 -1
  209. package/dist/orchestrators/snapshot/service.mjs +53 -56
  210. package/dist/orchestrators/snapshot/service.mjs.map +1 -1
  211. package/dist/orchestrators/snapshot/state-document.d.mts +1 -0
  212. package/dist/orchestrators/snapshot/state-document.mjs +47 -7
  213. package/dist/orchestrators/snapshot/state-document.mjs.map +1 -1
  214. package/dist/orchestrators/snapshot/wipe.mjs +67 -10
  215. package/dist/orchestrators/snapshot/wipe.mjs.map +1 -1
  216. package/dist/plugins/account/codegen.mjs +9 -8
  217. package/dist/plugins/account/codegen.mjs.map +1 -1
  218. package/dist/plugins/account/errors.d.mts +33 -6
  219. package/dist/plugins/account/errors.mjs.map +1 -1
  220. package/dist/plugins/account/funding.d.mts +29 -19
  221. package/dist/plugins/account/funding.mjs +84 -66
  222. package/dist/plugins/account/funding.mjs.map +1 -1
  223. package/dist/plugins/account/index.d.mts +2 -4
  224. package/dist/plugins/account/index.mjs +64 -31
  225. package/dist/plugins/account/index.mjs.map +1 -1
  226. package/dist/plugins/account/keypair.mjs +6 -9
  227. package/dist/plugins/account/keypair.mjs.map +1 -1
  228. package/dist/plugins/account/lease.mjs +1 -0
  229. package/dist/plugins/account/lease.mjs.map +1 -1
  230. package/dist/plugins/account/registry.d.mts +14 -1
  231. package/dist/plugins/account/registry.mjs +18 -18
  232. package/dist/plugins/account/registry.mjs.map +1 -1
  233. package/dist/plugins/account/service.d.mts +23 -4
  234. package/dist/plugins/account/service.mjs +83 -45
  235. package/dist/plugins/account/service.mjs.map +1 -1
  236. package/dist/plugins/account/snapshot.mjs +2 -5
  237. package/dist/plugins/account/snapshot.mjs.map +1 -1
  238. package/dist/plugins/account/spans.mjs +16 -0
  239. package/dist/plugins/account/spans.mjs.map +1 -0
  240. package/dist/plugins/account/variants/keystore.mjs +6 -8
  241. package/dist/plugins/account/variants/keystore.mjs.map +1 -1
  242. package/dist/plugins/action/build-context.d.mts +3 -2
  243. package/dist/plugins/action/errors.d.mts +16 -12
  244. package/dist/plugins/action/errors.mjs.map +1 -1
  245. package/dist/plugins/action/execute.mjs +65 -103
  246. package/dist/plugins/action/execute.mjs.map +1 -1
  247. package/dist/plugins/action/index.d.mts +0 -2
  248. package/dist/plugins/action/index.mjs +17 -13
  249. package/dist/plugins/action/index.mjs.map +1 -1
  250. package/dist/plugins/action/service.mjs +38 -35
  251. package/dist/plugins/action/service.mjs.map +1 -1
  252. package/dist/plugins/action/spans.mjs +11 -0
  253. package/dist/plugins/action/spans.mjs.map +1 -0
  254. package/dist/plugins/coin/codegen.mjs +9 -8
  255. package/dist/plugins/coin/codegen.mjs.map +1 -1
  256. package/dist/plugins/coin/discovery.mjs +8 -4
  257. package/dist/plugins/coin/discovery.mjs.map +1 -1
  258. package/dist/plugins/coin/index.d.mts +11 -29
  259. package/dist/plugins/coin/index.mjs +56 -27
  260. package/dist/plugins/coin/index.mjs.map +1 -1
  261. package/dist/plugins/coin/metadata.mjs +8 -15
  262. package/dist/plugins/coin/metadata.mjs.map +1 -1
  263. package/dist/plugins/coin/mint.d.mts +30 -11
  264. package/dist/plugins/coin/mint.mjs +78 -74
  265. package/dist/plugins/coin/mint.mjs.map +1 -1
  266. package/dist/plugins/coin/registry.mjs +4 -7
  267. package/dist/plugins/coin/registry.mjs.map +1 -1
  268. package/dist/plugins/coin/service.d.mts +39 -1
  269. package/dist/plugins/coin/service.mjs +11 -4
  270. package/dist/plugins/coin/service.mjs.map +1 -1
  271. package/dist/plugins/coin/spans.mjs +20 -0
  272. package/dist/plugins/coin/spans.mjs.map +1 -0
  273. package/dist/plugins/dashboard/domain.mjs +402 -0
  274. package/dist/plugins/dashboard/domain.mjs.map +1 -0
  275. package/dist/plugins/dashboard/index.d.mts +29 -0
  276. package/dist/plugins/dashboard/index.mjs +91 -0
  277. package/dist/plugins/dashboard/index.mjs.map +1 -0
  278. package/dist/plugins/dashboard/origin-policy.mjs +36 -0
  279. package/dist/plugins/dashboard/origin-policy.mjs.map +1 -0
  280. package/dist/plugins/dashboard/routable.mjs +27 -0
  281. package/dist/plugins/dashboard/routable.mjs.map +1 -0
  282. package/dist/plugins/dashboard/schema/builder.mjs +21 -0
  283. package/dist/plugins/dashboard/schema/builder.mjs.map +1 -0
  284. package/dist/plugins/dashboard/schema/enums.mjs +72 -0
  285. package/dist/plugins/dashboard/schema/enums.mjs.map +1 -0
  286. package/dist/plugins/dashboard/schema/root.mjs +351 -0
  287. package/dist/plugins/dashboard/schema/root.mjs.map +1 -0
  288. package/dist/plugins/dashboard/schema/types.mjs +508 -0
  289. package/dist/plugins/dashboard/schema/types.mjs.map +1 -0
  290. package/dist/plugins/dashboard/schema.mjs +11 -0
  291. package/dist/plugins/dashboard/schema.mjs.map +1 -0
  292. package/dist/plugins/dashboard/server.mjs +166 -0
  293. package/dist/plugins/dashboard/server.mjs.map +1 -0
  294. package/dist/plugins/deepbook/deploy.mjs +53 -115
  295. package/dist/plugins/deepbook/deploy.mjs.map +1 -1
  296. package/dist/plugins/deepbook/errors.mjs +1 -0
  297. package/dist/plugins/deepbook/errors.mjs.map +1 -1
  298. package/dist/plugins/deepbook/faucet-strategy.mjs +47 -34
  299. package/dist/plugins/deepbook/faucet-strategy.mjs.map +1 -1
  300. package/dist/plugins/deepbook/hash.mjs +9 -0
  301. package/dist/plugins/deepbook/hash.mjs.map +1 -0
  302. package/dist/plugins/deepbook/index.d.mts +1 -10
  303. package/dist/plugins/deepbook/index.mjs +25 -22
  304. package/dist/plugins/deepbook/index.mjs.map +1 -1
  305. package/dist/plugins/deepbook/pyth/index.mjs +26 -55
  306. package/dist/plugins/deepbook/pyth/index.mjs.map +1 -1
  307. package/dist/plugins/deepbook/snapshot.mjs +17 -29
  308. package/dist/plugins/deepbook/snapshot.mjs.map +1 -1
  309. package/dist/plugins/deepbook/spans.mjs +18 -0
  310. package/dist/plugins/deepbook/spans.mjs.map +1 -0
  311. package/dist/plugins/deepbook/type-strings.mjs +65 -0
  312. package/dist/plugins/deepbook/type-strings.mjs.map +1 -0
  313. package/dist/plugins/deepbook/types.d.mts +2 -3
  314. package/dist/plugins/deepbook/types.mjs.map +1 -1
  315. package/dist/plugins/faucet/dispatcher.d.mts +21 -2
  316. package/dist/plugins/faucet/dispatcher.mjs +1 -2
  317. package/dist/plugins/faucet/dispatcher.mjs.map +1 -1
  318. package/dist/plugins/faucet/errors.d.mts +11 -24
  319. package/dist/plugins/faucet/errors.mjs.map +1 -1
  320. package/dist/plugins/faucet/http.mjs +33 -14
  321. package/dist/plugins/faucet/http.mjs.map +1 -1
  322. package/dist/plugins/faucet/index.d.mts +15 -5
  323. package/dist/plugins/faucet/index.mjs +3 -0
  324. package/dist/plugins/faucet/index.mjs.map +1 -1
  325. package/dist/plugins/faucet/spans.mjs +12 -0
  326. package/dist/plugins/faucet/spans.mjs.map +1 -0
  327. package/dist/plugins/host-service/errors.d.mts +1 -1
  328. package/dist/plugins/host-service/index.mjs +34 -8
  329. package/dist/plugins/host-service/index.mjs.map +1 -1
  330. package/dist/plugins/host-service/routable.mjs +2 -1
  331. package/dist/plugins/host-service/routable.mjs.map +1 -1
  332. package/dist/plugins/host-service/service.d.mts +21 -0
  333. package/dist/plugins/host-service/service.mjs +136 -81
  334. package/dist/plugins/host-service/service.mjs.map +1 -1
  335. package/dist/plugins/internal/acquire-on-chain-artifact.mjs +23 -0
  336. package/dist/plugins/internal/acquire-on-chain-artifact.mjs.map +1 -0
  337. package/dist/plugins/internal/codegen-helpers.mjs +18 -0
  338. package/dist/plugins/internal/codegen-helpers.mjs.map +1 -0
  339. package/dist/plugins/internal/funding-failure-error.mjs +32 -0
  340. package/dist/plugins/internal/funding-failure-error.mjs.map +1 -0
  341. package/dist/plugins/package/build.mjs +1 -1
  342. package/dist/plugins/package/build.mjs.map +1 -1
  343. package/dist/plugins/package/codegen.mjs +26 -0
  344. package/dist/plugins/package/codegen.mjs.map +1 -1
  345. package/dist/plugins/package/errors.d.mts +16 -6
  346. package/dist/plugins/package/errors.mjs.map +1 -1
  347. package/dist/plugins/package/index.d.mts +0 -4
  348. package/dist/plugins/package/index.mjs +27 -21
  349. package/dist/plugins/package/index.mjs.map +1 -1
  350. package/dist/plugins/package/mode-known.mjs +26 -12
  351. package/dist/plugins/package/mode-known.mjs.map +1 -1
  352. package/dist/plugins/package/mode-local.mjs +47 -41
  353. package/dist/plugins/package/mode-local.mjs.map +1 -1
  354. package/dist/plugins/package/publish-executor.mjs +55 -114
  355. package/dist/plugins/package/publish-executor.mjs.map +1 -1
  356. package/dist/plugins/package/registry.mjs +2 -1
  357. package/dist/plugins/package/registry.mjs.map +1 -1
  358. package/dist/plugins/package/service.mjs.map +1 -1
  359. package/dist/plugins/package/spans.mjs +14 -0
  360. package/dist/plugins/package/spans.mjs.map +1 -0
  361. package/dist/plugins/postgres/db-ensure.mjs +19 -12
  362. package/dist/plugins/postgres/db-ensure.mjs.map +1 -1
  363. package/dist/plugins/postgres/errors.d.mts +5 -0
  364. package/dist/plugins/postgres/errors.mjs.map +1 -1
  365. package/dist/plugins/postgres/index.mjs +10 -17
  366. package/dist/plugins/postgres/index.mjs.map +1 -1
  367. package/dist/plugins/postgres/service.mjs +58 -24
  368. package/dist/plugins/postgres/service.mjs.map +1 -1
  369. package/dist/plugins/postgres/snapshot.mjs.map +1 -1
  370. package/dist/plugins/postgres/spans.mjs +11 -0
  371. package/dist/plugins/postgres/spans.mjs.map +1 -0
  372. package/dist/plugins/router-entrypoints.mjs +4 -4
  373. package/dist/plugins/router-entrypoints.mjs.map +1 -1
  374. package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs +15 -13
  375. package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs.map +1 -1
  376. package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs +15 -19
  377. package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs.map +1 -1
  378. package/dist/plugins/seal/codegen.d.mts +2 -3
  379. package/dist/plugins/seal/codegen.mjs.map +1 -1
  380. package/dist/plugins/seal/config-render.mjs +35 -8
  381. package/dist/plugins/seal/config-render.mjs.map +1 -1
  382. package/dist/plugins/seal/deploy.mjs +31 -39
  383. package/dist/plugins/seal/deploy.mjs.map +1 -1
  384. package/dist/plugins/seal/errors.d.mts +1 -3
  385. package/dist/plugins/seal/errors.mjs +7 -1
  386. package/dist/plugins/seal/errors.mjs.map +1 -1
  387. package/dist/plugins/seal/index.d.mts +1 -6
  388. package/dist/plugins/seal/index.mjs +40 -14
  389. package/dist/plugins/seal/index.mjs.map +1 -1
  390. package/dist/plugins/seal/key-manager.d.mts +1 -9
  391. package/dist/plugins/seal/key-manager.mjs +2 -18
  392. package/dist/plugins/seal/key-manager.mjs.map +1 -1
  393. package/dist/plugins/seal/key-server.mjs +37 -36
  394. package/dist/plugins/seal/key-server.mjs.map +1 -1
  395. package/dist/plugins/seal/keygen.mjs +16 -17
  396. package/dist/plugins/seal/keygen.mjs.map +1 -1
  397. package/dist/plugins/seal/mode/fork-known.mjs +36 -14
  398. package/dist/plugins/seal/mode/fork-known.mjs.map +1 -1
  399. package/dist/plugins/seal/mode/live.d.mts +6 -4
  400. package/dist/plugins/seal/mode/live.mjs +14 -21
  401. package/dist/plugins/seal/mode/live.mjs.map +1 -1
  402. package/dist/plugins/seal/mode/local-keygen.mjs +57 -21
  403. package/dist/plugins/seal/mode/local-keygen.mjs.map +1 -1
  404. package/dist/plugins/seal/registry-publish.mjs +1 -0
  405. package/dist/plugins/seal/registry-publish.mjs.map +1 -1
  406. package/dist/plugins/seal/routable.mjs.map +1 -1
  407. package/dist/plugins/seal/service.mjs.map +1 -1
  408. package/dist/plugins/seal/spans.mjs +18 -0
  409. package/dist/plugins/seal/spans.mjs.map +1 -0
  410. package/dist/plugins/sui/auto-tick.mjs +17 -23
  411. package/dist/plugins/sui/auto-tick.mjs.map +1 -1
  412. package/dist/plugins/sui/chain-build-container.mjs +18 -0
  413. package/dist/plugins/sui/chain-build-container.mjs.map +1 -0
  414. package/dist/plugins/sui/chain-probe.d.mts +5 -5
  415. package/dist/plugins/sui/chain-probe.mjs +28 -58
  416. package/dist/plugins/sui/chain-probe.mjs.map +1 -1
  417. package/dist/plugins/sui/codegen.mjs +26 -0
  418. package/dist/plugins/sui/codegen.mjs.map +1 -1
  419. package/dist/plugins/sui/errors.d.mts +2 -29
  420. package/dist/plugins/sui/errors.mjs +1 -3
  421. package/dist/plugins/sui/errors.mjs.map +1 -1
  422. package/dist/plugins/sui/fork-faucet-strategy.d.mts +1 -0
  423. package/dist/plugins/sui/fork-faucet-strategy.mjs +55 -0
  424. package/dist/plugins/sui/fork-faucet-strategy.mjs.map +1 -0
  425. package/dist/plugins/sui/fork-orchestration.d.mts +1 -0
  426. package/dist/plugins/sui/fork-orchestration.mjs +170 -2
  427. package/dist/plugins/sui/fork-orchestration.mjs.map +1 -1
  428. package/dist/plugins/sui/fork-transaction.d.mts +2 -0
  429. package/dist/plugins/sui/fork-transaction.mjs +92 -28
  430. package/dist/plugins/sui/fork-transaction.mjs.map +1 -1
  431. package/dist/plugins/sui/index.d.mts +33 -70
  432. package/dist/plugins/sui/index.mjs +58 -35
  433. package/dist/plugins/sui/index.mjs.map +1 -1
  434. package/dist/plugins/{faucet/strategies/sui-local.mjs → sui/local-faucet-strategy.mjs} +10 -7
  435. package/dist/plugins/sui/local-faucet-strategy.mjs.map +1 -0
  436. package/dist/plugins/sui/mode/external.mjs +7 -13
  437. package/dist/plugins/sui/mode/external.mjs.map +1 -1
  438. package/dist/plugins/sui/mode/fork.mjs +136 -59
  439. package/dist/plugins/sui/mode/fork.mjs.map +1 -1
  440. package/dist/plugins/sui/mode/live.mjs +10 -16
  441. package/dist/plugins/sui/mode/live.mjs.map +1 -1
  442. package/dist/plugins/sui/mode/local.mjs +37 -36
  443. package/dist/plugins/sui/mode/local.mjs.map +1 -1
  444. package/dist/plugins/sui/mode/shared-boot.mjs +38 -115
  445. package/dist/plugins/sui/mode/shared-boot.mjs.map +1 -1
  446. package/dist/plugins/sui/mode/shared.d.mts +1 -5
  447. package/dist/plugins/sui/mode/shared.mjs.map +1 -1
  448. package/dist/plugins/sui/mode/spec.d.mts +18 -0
  449. package/dist/plugins/sui/move-summary-runner.mjs +207 -0
  450. package/dist/plugins/sui/move-summary-runner.mjs.map +1 -0
  451. package/dist/plugins/sui/network-resolver.d.mts +4 -3
  452. package/dist/plugins/sui/service.mjs.map +1 -1
  453. package/dist/plugins/sui/snapshot.mjs +3 -0
  454. package/dist/plugins/sui/snapshot.mjs.map +1 -1
  455. package/dist/plugins/sui/spans.mjs +17 -0
  456. package/dist/plugins/sui/spans.mjs.map +1 -0
  457. package/dist/plugins/wallet/codegen.d.mts +0 -1
  458. package/dist/plugins/wallet/codegen.mjs +8 -9
  459. package/dist/plugins/wallet/codegen.mjs.map +1 -1
  460. package/dist/plugins/wallet/index.d.mts +6 -8
  461. package/dist/plugins/wallet/index.mjs +46 -35
  462. package/dist/plugins/wallet/index.mjs.map +1 -1
  463. package/dist/plugins/wallet/origin-policy.mjs +12 -28
  464. package/dist/plugins/wallet/origin-policy.mjs.map +1 -1
  465. package/dist/plugins/wallet/pairing.mjs +6 -4
  466. package/dist/plugins/wallet/pairing.mjs.map +1 -1
  467. package/dist/plugins/wallet/protocol.d.mts +1 -0
  468. package/dist/plugins/wallet/protocol.mjs +5 -44
  469. package/dist/plugins/wallet/protocol.mjs.map +1 -1
  470. package/dist/plugins/wallet/routable.mjs +2 -8
  471. package/dist/plugins/wallet/routable.mjs.map +1 -1
  472. package/dist/plugins/wallet/server.mjs +36 -44
  473. package/dist/plugins/wallet/server.mjs.map +1 -1
  474. package/dist/plugins/wallet/service.d.mts +1 -5
  475. package/dist/plugins/wallet/service.mjs +22 -18
  476. package/dist/plugins/wallet/service.mjs.map +1 -1
  477. package/dist/plugins/wallet/spans.mjs +22 -0
  478. package/dist/plugins/wallet/spans.mjs.map +1 -0
  479. package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs +33 -8
  480. package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs.map +1 -1
  481. package/dist/plugins/walrus/codegen.d.mts +3 -3
  482. package/dist/plugins/walrus/codegen.mjs.map +1 -1
  483. package/dist/plugins/walrus/deploy-paths.mjs +21 -5
  484. package/dist/plugins/walrus/deploy-paths.mjs.map +1 -1
  485. package/dist/plugins/walrus/deploy.mjs +67 -69
  486. package/dist/plugins/walrus/deploy.mjs.map +1 -1
  487. package/dist/plugins/walrus/errors.mjs +1 -0
  488. package/dist/plugins/walrus/errors.mjs.map +1 -1
  489. package/dist/plugins/walrus/faucet-strategy.mjs +12 -7
  490. package/dist/plugins/walrus/faucet-strategy.mjs.map +1 -1
  491. package/dist/plugins/walrus/index.d.mts +2 -13
  492. package/dist/plugins/walrus/index.mjs +18 -23
  493. package/dist/plugins/walrus/index.mjs.map +1 -1
  494. package/dist/plugins/walrus/mode/known-deploy.mjs +7 -5
  495. package/dist/plugins/walrus/mode/known-deploy.mjs.map +1 -1
  496. package/dist/plugins/walrus/mode/local-cluster.mjs +26 -7
  497. package/dist/plugins/walrus/mode/local-cluster.mjs.map +1 -1
  498. package/dist/plugins/walrus/registry-publish.mjs.map +1 -1
  499. package/dist/plugins/walrus/routable.mjs +7 -23
  500. package/dist/plugins/walrus/routable.mjs.map +1 -1
  501. package/dist/plugins/walrus/service.mjs.map +1 -1
  502. package/dist/plugins/walrus/spans.mjs +18 -0
  503. package/dist/plugins/walrus/spans.mjs.map +1 -0
  504. package/dist/plugins/walrus/storage-nodes.d.mts +6 -2
  505. package/dist/plugins/walrus/storage-nodes.mjs +15 -8
  506. package/dist/plugins/walrus/storage-nodes.mjs.map +1 -1
  507. package/dist/plugins/walrus/wal-swap.mjs +58 -15
  508. package/dist/plugins/walrus/wal-swap.mjs.map +1 -1
  509. package/dist/primitives/artifact-publisher.d.mts +1 -1
  510. package/dist/primitives/artifact-publisher.mjs +15 -0
  511. package/dist/primitives/artifact-publisher.mjs.map +1 -0
  512. package/dist/runtime/docker/client.mjs +17 -4
  513. package/dist/runtime/docker/client.mjs.map +1 -1
  514. package/dist/runtime/docker/container.mjs +219 -132
  515. package/dist/runtime/docker/container.mjs.map +1 -1
  516. package/dist/runtime/docker/errors.mjs +0 -6
  517. package/dist/runtime/docker/errors.mjs.map +1 -1
  518. package/dist/runtime/docker/exec.mjs +21 -18
  519. package/dist/runtime/docker/exec.mjs.map +1 -1
  520. package/dist/runtime/docker/image.mjs +36 -13
  521. package/dist/runtime/docker/image.mjs.map +1 -1
  522. package/dist/runtime/docker/index.mjs +14 -0
  523. package/dist/runtime/docker/inspect-and-decode.mjs +51 -0
  524. package/dist/runtime/docker/inspect-and-decode.mjs.map +1 -0
  525. package/dist/runtime/docker/inventory.mjs +14 -11
  526. package/dist/runtime/docker/inventory.mjs.map +1 -1
  527. package/dist/runtime/docker/labels.mjs +38 -5
  528. package/dist/runtime/docker/labels.mjs.map +1 -1
  529. package/dist/runtime/docker/logs.d.mts +1 -1
  530. package/dist/runtime/docker/logs.mjs.map +1 -1
  531. package/dist/runtime/docker/network.mjs +83 -47
  532. package/dist/runtime/docker/network.mjs.map +1 -1
  533. package/dist/runtime/docker/render-run-args.mjs +82 -0
  534. package/dist/runtime/docker/render-run-args.mjs.map +1 -0
  535. package/dist/runtime/docker/service.d.mts +1 -1
  536. package/dist/runtime/docker/service.mjs +12 -7
  537. package/dist/runtime/docker/service.mjs.map +1 -1
  538. package/dist/runtime/docker/sweep.mjs +118 -43
  539. package/dist/runtime/docker/sweep.mjs.map +1 -1
  540. package/dist/runtime/docker/volume.mjs +2 -0
  541. package/dist/runtime/docker/volume.mjs.map +1 -1
  542. package/dist/runtime/docker/wrap.mjs +30 -1
  543. package/dist/runtime/docker/wrap.mjs.map +1 -1
  544. package/dist/substrate/cross-process.mjs +14 -8
  545. package/dist/substrate/cross-process.mjs.map +1 -1
  546. package/dist/substrate/event-time.mjs +33 -0
  547. package/dist/substrate/event-time.mjs.map +1 -0
  548. package/dist/substrate/events.d.mts +28 -8
  549. package/dist/substrate/identity.d.mts +2 -1
  550. package/dist/substrate/manifest.d.mts +68 -5
  551. package/dist/substrate/manifest.mjs +34 -5
  552. package/dist/substrate/manifest.mjs.map +1 -1
  553. package/dist/substrate/network.d.mts +3 -5
  554. package/dist/substrate/options.d.mts +0 -2
  555. package/dist/substrate/plugin.d.mts +13 -0
  556. package/dist/substrate/plugin.mjs +4 -2
  557. package/dist/substrate/plugin.mjs.map +1 -1
  558. package/dist/substrate/projection.d.mts +35 -3
  559. package/dist/substrate/runtime/artifact-publisher/index.mjs +19 -9
  560. package/dist/substrate/runtime/artifact-publisher/index.mjs.map +1 -1
  561. package/dist/substrate/runtime/atomic-write.mjs +97 -32
  562. package/dist/substrate/runtime/atomic-write.mjs.map +1 -1
  563. package/dist/substrate/runtime/cache/index.mjs +3 -0
  564. package/dist/substrate/runtime/cache/schema.mjs +2 -2
  565. package/dist/substrate/runtime/cache/schema.mjs.map +1 -1
  566. package/dist/substrate/runtime/cache/service.mjs +9 -7
  567. package/dist/substrate/runtime/cache/service.mjs.map +1 -1
  568. package/dist/substrate/runtime/capability-sinks/index.d.mts +1 -1
  569. package/dist/substrate/runtime/capability-sinks/index.mjs +3 -0
  570. package/dist/substrate/runtime/capability-sinks/layer.mjs +1 -1
  571. package/dist/substrate/runtime/capability-sinks/service.d.mts +61 -2
  572. package/dist/substrate/runtime/capability-sinks/service.mjs +21 -26
  573. package/dist/substrate/runtime/capability-sinks/service.mjs.map +1 -1
  574. package/dist/substrate/runtime/config-validation.d.mts +1 -13
  575. package/dist/substrate/runtime/config-validation.mjs +2 -91
  576. package/dist/substrate/runtime/config-validation.mjs.map +1 -1
  577. package/dist/substrate/runtime/container-runtime.d.mts +1 -0
  578. package/dist/substrate/runtime/container-runtime.mjs +2 -0
  579. package/dist/substrate/runtime/control-plane/domain.mjs +101 -0
  580. package/dist/substrate/runtime/control-plane/domain.mjs.map +1 -0
  581. package/dist/substrate/runtime/control-plane/service.mjs +7 -0
  582. package/dist/substrate/runtime/control-plane/service.mjs.map +1 -0
  583. package/dist/substrate/runtime/cross-process/command-channel/channel.mjs +46 -19
  584. package/dist/substrate/runtime/cross-process/command-channel/channel.mjs.map +1 -1
  585. package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs +30 -12
  586. package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs.map +1 -1
  587. package/dist/substrate/runtime/cross-process/command-channel/index.mjs +5 -0
  588. package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs +11 -2
  589. package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs.map +1 -1
  590. package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs +1 -1
  591. package/dist/substrate/runtime/cross-process/index.mjs +11 -0
  592. package/dist/substrate/runtime/cross-process/live-clock.mjs +34 -0
  593. package/dist/substrate/runtime/cross-process/live-clock.mjs.map +1 -0
  594. package/dist/substrate/runtime/cross-process/liveness.mjs +52 -10
  595. package/dist/substrate/runtime/cross-process/liveness.mjs.map +1 -1
  596. package/dist/substrate/runtime/cross-process/lock.d.mts +1 -0
  597. package/dist/substrate/runtime/cross-process/lock.mjs +23 -0
  598. package/dist/substrate/runtime/cross-process/lock.mjs.map +1 -0
  599. package/dist/substrate/runtime/cross-process/reclaim-stale-file.mjs +64 -0
  600. package/dist/substrate/runtime/cross-process/reclaim-stale-file.mjs.map +1 -0
  601. package/dist/substrate/runtime/cross-process/roster.mjs +97 -83
  602. package/dist/substrate/runtime/cross-process/roster.mjs.map +1 -1
  603. package/dist/substrate/runtime/cross-process/self-pid.mjs +8 -0
  604. package/dist/substrate/runtime/cross-process/self-pid.mjs.map +1 -0
  605. package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs +24 -28
  606. package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs.map +1 -1
  607. package/dist/substrate/runtime/cross-process/stack-lock.mjs +41 -20
  608. package/dist/substrate/runtime/cross-process/stack-lock.mjs.map +1 -1
  609. package/dist/substrate/runtime/current-plugin.mjs +2 -2
  610. package/dist/substrate/runtime/current-plugin.mjs.map +1 -1
  611. package/dist/substrate/runtime/errors.mjs +12 -6
  612. package/dist/substrate/runtime/errors.mjs.map +1 -1
  613. package/dist/substrate/runtime/format-unknown-error.mjs +30 -0
  614. package/dist/substrate/runtime/format-unknown-error.mjs.map +1 -0
  615. package/dist/substrate/runtime/host-bind-mount-owner.mjs +10 -0
  616. package/dist/substrate/runtime/host-bind-mount-owner.mjs.map +1 -0
  617. package/dist/substrate/runtime/host-gateway.mjs +20 -0
  618. package/dist/substrate/runtime/host-gateway.mjs.map +1 -0
  619. package/dist/substrate/runtime/host-tree-tar/index.mjs +61 -50
  620. package/dist/substrate/runtime/host-tree-tar/index.mjs.map +1 -1
  621. package/dist/substrate/runtime/http-probe.d.mts +1 -1
  622. package/dist/substrate/runtime/index.mjs +14 -0
  623. package/dist/substrate/runtime/lease-broker/index.d.mts +1 -1
  624. package/dist/substrate/runtime/lease-broker/index.mjs +2 -0
  625. package/dist/substrate/runtime/lease-broker/service.d.mts +1 -64
  626. package/dist/substrate/runtime/lease-broker/service.mjs +1 -1
  627. package/dist/substrate/runtime/lease-broker/service.mjs.map +1 -1
  628. package/dist/substrate/runtime/lifecycle/dep-graph.mjs +22 -3
  629. package/dist/substrate/runtime/lifecycle/dep-graph.mjs.map +1 -1
  630. package/dist/substrate/runtime/lifecycle/index.mjs +9 -0
  631. package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs.map +1 -1
  632. package/dist/substrate/runtime/lifecycle/plugin-registry.mjs +20 -3
  633. package/dist/substrate/runtime/lifecycle/plugin-registry.mjs.map +1 -1
  634. package/dist/substrate/runtime/lifecycle/selective-restart.mjs +1 -1
  635. package/dist/substrate/runtime/lifecycle/signals.mjs +5 -5
  636. package/dist/substrate/runtime/lifecycle/signals.mjs.map +1 -1
  637. package/dist/substrate/runtime/lifecycle/state-machine.mjs +1 -1
  638. package/dist/substrate/runtime/managed-container.d.mts +19 -1
  639. package/dist/substrate/runtime/managed-container.mjs +20 -1
  640. package/dist/substrate/runtime/managed-container.mjs.map +1 -1
  641. package/dist/substrate/runtime/manifest/index.mjs +3 -0
  642. package/dist/substrate/runtime/manifest/manifest.mjs +15 -11
  643. package/dist/substrate/runtime/manifest/manifest.mjs.map +1 -1
  644. package/dist/substrate/runtime/mode-errors.mjs +20 -0
  645. package/dist/substrate/runtime/mode-errors.mjs.map +1 -0
  646. package/dist/substrate/runtime/observability/cascade-formatter.mjs +9 -13
  647. package/dist/substrate/runtime/observability/cascade-formatter.mjs.map +1 -1
  648. package/dist/substrate/runtime/observability/formatter-registry.mjs +19 -36
  649. package/dist/substrate/runtime/observability/formatter-registry.mjs.map +1 -1
  650. package/dist/substrate/runtime/observability/ignore-with-log.d.mts +1 -0
  651. package/dist/substrate/runtime/observability/ignore-with-log.mjs +17 -0
  652. package/dist/substrate/runtime/observability/ignore-with-log.mjs.map +1 -0
  653. package/dist/substrate/runtime/observability/index.d.mts +1 -1
  654. package/dist/substrate/runtime/observability/index.mjs +13 -0
  655. package/dist/substrate/runtime/observability/log-store.d.mts +1 -0
  656. package/dist/substrate/runtime/observability/log-store.mjs +175 -0
  657. package/dist/substrate/runtime/observability/log-store.mjs.map +1 -0
  658. package/dist/substrate/runtime/observability/logger.d.mts +2 -1
  659. package/dist/substrate/runtime/observability/logger.mjs +5 -9
  660. package/dist/substrate/runtime/observability/logger.mjs.map +1 -1
  661. package/dist/substrate/runtime/observability/output-truncate.mjs +35 -0
  662. package/dist/substrate/runtime/observability/output-truncate.mjs.map +1 -0
  663. package/dist/substrate/runtime/observability/pretty-error.mjs +9 -12
  664. package/dist/substrate/runtime/observability/pretty-error.mjs.map +1 -1
  665. package/dist/substrate/runtime/observability/redaction.d.mts +2 -13
  666. package/dist/substrate/runtime/observability/redaction.mjs +8 -14
  667. package/dist/substrate/runtime/observability/redaction.mjs.map +1 -1
  668. package/dist/substrate/runtime/observability/span-store.d.mts +1 -0
  669. package/dist/substrate/runtime/observability/span-store.mjs +110 -0
  670. package/dist/substrate/runtime/observability/span-store.mjs.map +1 -0
  671. package/dist/substrate/runtime/observability/spans.mjs +14 -14
  672. package/dist/substrate/runtime/observability/spans.mjs.map +1 -1
  673. package/dist/substrate/runtime/observability/subprocess-capture.mjs +1 -1
  674. package/dist/substrate/runtime/passthrough-or-wrap.mjs +33 -0
  675. package/dist/substrate/runtime/passthrough-or-wrap.mjs.map +1 -0
  676. package/dist/substrate/runtime/paths.d.mts +1 -1
  677. package/dist/substrate/runtime/paths.mjs +4 -3
  678. package/dist/substrate/runtime/paths.mjs.map +1 -1
  679. package/dist/substrate/runtime/phase-preserving-produce.mjs +40 -0
  680. package/dist/substrate/runtime/phase-preserving-produce.mjs.map +1 -0
  681. package/dist/substrate/runtime/port-broker/index.mjs +3 -0
  682. package/dist/substrate/runtime/port-broker/service.mjs +170 -126
  683. package/dist/substrate/runtime/port-broker/service.mjs.map +1 -1
  684. package/dist/substrate/runtime/post-acquire-tasks.mjs +1 -1
  685. package/dist/substrate/runtime/post-acquire-tasks.mjs.map +1 -1
  686. package/dist/substrate/runtime/probes.d.mts +7 -5
  687. package/dist/substrate/runtime/probes.mjs +3 -1
  688. package/dist/substrate/runtime/probes.mjs.map +1 -1
  689. package/dist/substrate/runtime/projection/index.mjs +4 -0
  690. package/dist/substrate/runtime/projection/operational-endpoints.mjs +1 -2
  691. package/dist/substrate/runtime/projection/operational-endpoints.mjs.map +1 -1
  692. package/dist/substrate/runtime/projection/persisted.mjs +33 -15
  693. package/dist/substrate/runtime/projection/persisted.mjs.map +1 -1
  694. package/dist/substrate/runtime/projection/state-ref.mjs +26 -2
  695. package/dist/substrate/runtime/projection/state-ref.mjs.map +1 -1
  696. package/dist/substrate/runtime/projection/update.mjs +88 -24
  697. package/dist/substrate/runtime/projection/update.mjs.map +1 -1
  698. package/dist/substrate/runtime/random-suffix.mjs +11 -0
  699. package/dist/substrate/runtime/random-suffix.mjs.map +1 -0
  700. package/dist/substrate/runtime/retry-policy.d.mts +59 -1
  701. package/dist/substrate/runtime/retry-policy.mjs +66 -1
  702. package/dist/substrate/runtime/retry-policy.mjs.map +1 -1
  703. package/dist/substrate/runtime/routed-url.d.mts +1 -0
  704. package/dist/substrate/runtime/routed-url.mjs +79 -0
  705. package/dist/substrate/runtime/routed-url.mjs.map +1 -0
  706. package/dist/substrate/runtime/runtime-decode.d.mts +1 -1
  707. package/dist/substrate/runtime/runtime-decode.mjs.map +1 -1
  708. package/dist/substrate/runtime/scoped-http-server.mjs +2 -3
  709. package/dist/substrate/runtime/scoped-http-server.mjs.map +1 -1
  710. package/dist/substrate/runtime/scoped-multimap/index.mjs +2 -0
  711. package/dist/substrate/runtime/scoped-multimap/service.mjs +52 -0
  712. package/dist/substrate/runtime/scoped-multimap/service.mjs.map +1 -0
  713. package/dist/substrate/runtime/scoped-ref-map/index.mjs +2 -0
  714. package/dist/substrate/runtime/scoped-ref-map/service.mjs +2 -2
  715. package/dist/substrate/runtime/scoped-ref-map/service.mjs.map +1 -1
  716. package/dist/substrate/runtime/stage-and-swap/index.mjs +72 -4
  717. package/dist/substrate/runtime/stage-and-swap/index.mjs.map +1 -1
  718. package/dist/substrate/runtime/state-store/index.d.mts +1 -0
  719. package/dist/substrate/runtime/state-store/index.mjs +3 -0
  720. package/dist/substrate/runtime/state-store/schema.d.mts +1 -0
  721. package/dist/substrate/runtime/state-store/schema.mjs +19 -14
  722. package/dist/substrate/runtime/state-store/schema.mjs.map +1 -1
  723. package/dist/substrate/runtime/state-store/service.d.mts +1 -0
  724. package/dist/substrate/runtime/state-store/service.mjs +145 -0
  725. package/dist/substrate/runtime/state-store/service.mjs.map +1 -0
  726. package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.d.mts +1 -0
  727. package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.mjs +33 -0
  728. package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.mjs.map +1 -0
  729. package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs +1 -1
  730. package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs.map +1 -1
  731. package/dist/substrate/runtime/strategy-registry/index.mjs +4 -0
  732. package/dist/substrate/runtime/strategy-registry/service.mjs +19 -33
  733. package/dist/substrate/runtime/strategy-registry/service.mjs.map +1 -1
  734. package/dist/substrate/runtime/subnet-broker.mjs +60 -0
  735. package/dist/substrate/runtime/subnet-broker.mjs.map +1 -0
  736. package/dist/substrate/runtime/sui-execute/index.d.mts +21 -1
  737. package/dist/substrate/runtime/sui-execute/index.mjs +84 -20
  738. package/dist/substrate/runtime/sui-execute/index.mjs.map +1 -1
  739. package/dist/substrate/runtime/sui-execute/sign-and-dispatch.d.mts +1 -0
  740. package/dist/substrate/runtime/sui-execute/sign-and-dispatch.mjs +32 -0
  741. package/dist/substrate/runtime/sui-execute/sign-and-dispatch.mjs.map +1 -0
  742. package/dist/substrate/runtime/sui-ledger/object-ref.mjs +32 -0
  743. package/dist/substrate/runtime/sui-ledger/object-ref.mjs.map +1 -0
  744. package/dist/substrate/runtime/sui-move-build/index.mjs +93 -19
  745. package/dist/substrate/runtime/sui-move-build/index.mjs.map +1 -1
  746. package/dist/substrate/runtime/supervisor/acquire-node.mjs +181 -0
  747. package/dist/substrate/runtime/supervisor/acquire-node.mjs.map +1 -0
  748. package/dist/substrate/runtime/supervisor/background-tasks.mjs +144 -0
  749. package/dist/substrate/runtime/supervisor/background-tasks.mjs.map +1 -0
  750. package/dist/substrate/runtime/supervisor/command-loop.mjs +68 -0
  751. package/dist/substrate/runtime/supervisor/command-loop.mjs.map +1 -0
  752. package/dist/substrate/runtime/supervisor/dispatch-contributions.mjs +151 -0
  753. package/dist/substrate/runtime/supervisor/dispatch-contributions.mjs.map +1 -0
  754. package/dist/substrate/runtime/supervisor/errors.d.mts +1 -0
  755. package/dist/substrate/runtime/supervisor/errors.mjs +9 -0
  756. package/dist/substrate/runtime/supervisor/errors.mjs.map +1 -0
  757. package/dist/substrate/runtime/supervisor/index.d.mts +1 -0
  758. package/dist/substrate/runtime/supervisor/index.mjs +3 -0
  759. package/dist/substrate/runtime/supervisor/shutdown.mjs +51 -0
  760. package/dist/substrate/runtime/supervisor/shutdown.mjs.map +1 -0
  761. package/dist/substrate/runtime/supervisor/start-supervisor.d.mts +1 -0
  762. package/dist/substrate/runtime/supervisor/start-supervisor.mjs +250 -0
  763. package/dist/substrate/runtime/supervisor/start-supervisor.mjs.map +1 -0
  764. package/dist/substrate/runtime/supervisor/state.d.mts +1 -0
  765. package/dist/substrate/runtime/supervisor/state.mjs +22 -0
  766. package/dist/substrate/runtime/supervisor/state.mjs.map +1 -0
  767. package/dist/substrate/runtime/supervisor/teardown.mjs +57 -0
  768. package/dist/substrate/runtime/supervisor/teardown.mjs.map +1 -0
  769. package/dist/substrate/runtime/supervisor/types.d.mts +1 -0
  770. package/dist/substrate/runtime/supervisor/wiring.mjs +133 -0
  771. package/dist/substrate/runtime/supervisor/wiring.mjs.map +1 -0
  772. package/dist/substrate/runtime/typed-env.mjs +8 -0
  773. package/dist/substrate/runtime/typed-env.mjs.map +1 -0
  774. package/dist/substrate/state-store.d.mts +1 -0
  775. package/dist/substrate/versioned-doc-schema.mjs +17 -0
  776. package/dist/substrate/versioned-doc-schema.mjs.map +1 -0
  777. package/dist/substrate/versioned-doc-sync.mjs +94 -0
  778. package/dist/substrate/versioned-doc-sync.mjs.map +1 -0
  779. package/dist/surfaces/cli/command-tree.mjs.map +1 -1
  780. package/dist/surfaces/cli/commands/index.mjs +9 -0
  781. package/dist/surfaces/cli/commands/prune-picker-entry.mjs +13 -0
  782. package/dist/surfaces/cli/commands/prune-picker-entry.mjs.map +1 -0
  783. package/dist/surfaces/cli/commands/prune-picker.mjs +3 -2
  784. package/dist/surfaces/cli/commands/prune-picker.mjs.map +1 -1
  785. package/dist/surfaces/cli/commands/prune.mjs +34 -17
  786. package/dist/surfaces/cli/commands/prune.mjs.map +1 -1
  787. package/dist/surfaces/cli/commands/status.mjs +2 -2
  788. package/dist/surfaces/cli/commands/status.mjs.map +1 -1
  789. package/dist/surfaces/cli/commands/supervisor-presence.mjs +5 -3
  790. package/dist/surfaces/cli/commands/supervisor-presence.mjs.map +1 -1
  791. package/dist/surfaces/cli/commands/wipe.mjs +38 -4
  792. package/dist/surfaces/cli/commands/wipe.mjs.map +1 -1
  793. package/dist/surfaces/cli/errors.mjs +1 -1
  794. package/dist/surfaces/cli/errors.mjs.map +1 -1
  795. package/dist/surfaces/cli/flags.mjs +0 -1
  796. package/dist/surfaces/cli/flags.mjs.map +1 -1
  797. package/dist/surfaces/cli/index.mjs +98 -18
  798. package/dist/surfaces/cli/index.mjs.map +1 -1
  799. package/dist/surfaces/cli/output.mjs +1 -0
  800. package/dist/surfaces/cli/output.mjs.map +1 -1
  801. package/dist/surfaces/cli/sysexits.mjs +2 -1
  802. package/dist/surfaces/cli/sysexits.mjs.map +1 -1
  803. package/dist/surfaces/tui/app.mjs +25 -3
  804. package/dist/surfaces/tui/app.mjs.map +1 -1
  805. package/dist/surfaces/tui/display-derivation.mjs +23 -74
  806. package/dist/surfaces/tui/display-derivation.mjs.map +1 -1
  807. package/dist/surfaces/tui/event-log.mjs +35 -23
  808. package/dist/surfaces/tui/event-log.mjs.map +1 -1
  809. package/dist/surfaces/tui/input.mjs +5 -1
  810. package/dist/surfaces/tui/input.mjs.map +1 -1
  811. package/dist/surfaces/tui/plain-renderer.mjs +70 -34
  812. package/dist/surfaces/tui/plain-renderer.mjs.map +1 -1
  813. package/package.json +24 -4
  814. package/dist/contracts/liveness-classifier.d.mts +0 -19
  815. package/dist/contracts/network-resolver.d.mts +0 -15
  816. package/dist/contracts/network-resolver.mjs +0 -7
  817. package/dist/contracts/network-resolver.mjs.map +0 -1
  818. package/dist/orchestrators/codegen/extras.mjs +0 -16
  819. package/dist/orchestrators/codegen/extras.mjs.map +0 -1
  820. package/dist/plugins/deepbook/routable.mjs +0 -21
  821. package/dist/plugins/deepbook/routable.mjs.map +0 -1
  822. package/dist/plugins/faucet/service.d.mts +0 -20
  823. package/dist/plugins/faucet/strategies/sui-local.d.mts +0 -23
  824. package/dist/plugins/faucet/strategies/sui-local.mjs.map +0 -1
  825. package/dist/plugins/sui/seed-objects.d.mts +0 -18
  826. package/dist/plugins/sui/seed-objects.mjs +0 -25
  827. package/dist/plugins/sui/seed-objects.mjs.map +0 -1
  828. package/dist/runtime/built-in-plugin-layers.mjs.map +0 -1
  829. package/dist/substrate/runtime/context-helpers.mjs +0 -32
  830. package/dist/substrate/runtime/context-helpers.mjs.map +0 -1
  831. package/dist/substrate/runtime/run.mjs.map +0 -1
  832. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs +0 -30
  833. package/dist/substrate/runtime/strategy-registry/faucet-capability-for.mjs.map +0 -1
  834. package/dist/substrate/runtime/supervisor.d.mts +0 -1
  835. package/dist/substrate/runtime/supervisor.mjs +0 -831
  836. package/dist/substrate/runtime/supervisor.mjs.map +0 -1
  837. package/dist/surfaces/cli/commands/doctor-probes.mjs.map +0 -1
  838. /package/dist/{substrate/runtime/strategy-registry/faucet-capability-for.d.mts → plugins/faucet/http.d.mts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"deploy.mjs","names":["brandContentHash","brandChainId"],"sources":["../../../src/plugins/deepbook/deploy.ts"],"sourcesContent":["// DeepBook local deployment helpers.\n//\n// The package itself is published by the generic `localPackage(...)` plugin.\n// This module owns the DeepBook-specific follow-up transaction: initialize the\n// registry's BalanceManager map and create the requested admin pools.\n\nimport { createHash } from 'node:crypto';\n\nimport { Effect, Schema, type Scope } from 'effect';\nimport { bcs } from '@mysten/sui/bcs';\nimport { Transaction } from '@mysten/sui/transactions';\nimport { normalizeStructTag, normalizeSuiAddress } from '@mysten/sui/utils';\n\nimport {\n\tchainId as brandChainId,\n\tcontentHash as brandContentHash,\n\ttype ContentHash,\n} from '../../substrate/brand.ts';\nimport type {\n\tArtifactPublishError,\n\tArtifactPublisher,\n} from '../../primitives/artifact-publisher.ts';\nimport type { SuiSdkShim } from '../sui/chain-probe.ts';\nimport type { CoinValue } from '../coin/index.ts';\nimport type {\n\tResolvedSigner,\n\tSuiExecuteError,\n\tSuiExecuteClient,\n} from '../../substrate/runtime/sui-execute/index.ts';\nimport { executeSuiTx } from '../../substrate/runtime/sui-execute/index.ts';\n\nimport { deepbookPluginError, type DeepbookPluginError } from './errors.ts';\nimport type { DeepbookPhase } from './errors.ts';\nimport type { DeepbookPool, DeepbookPoolSeedLiquidity } from './types.ts';\n\n// ---------------------------------------------------------------------------\n// Inputs / outputs\n// ---------------------------------------------------------------------------\n\nexport interface DeepbookDeployment {\n\treadonly packageId: string;\n\treadonly registryId: string;\n\treadonly adminCapId: string;\n\treadonly deepTreasuryId?: string | null;\n}\n\ntype CoinFundingStrategy = NonNullable<CoinValue['fundingStrategy']>;\n\nexport interface ResolvedDeepbookPoolSpec {\n\treadonly name: string;\n\treadonly base: string;\n\treadonly quote: string;\n\treadonly baseCoinType: string;\n\treadonly quoteCoinType: string;\n\treadonly baseFundingStrategy?: CoinFundingStrategy;\n\treadonly quoteFundingStrategy?: CoinFundingStrategy;\n\treadonly tickSize: bigint;\n\treadonly lotSize: bigint;\n\treadonly minSize: bigint;\n\treadonly whitelisted: boolean;\n\treadonly stablePool: boolean;\n\treadonly seed?: DeepbookPoolSeedLiquidity;\n}\n\nexport interface DeepbookPoolsResult {\n\treadonly pools: ReadonlyArray<DeepbookPool>;\n}\n\nexport interface DeepbookPoolSeedResult {\n\treadonly poolName: string;\n\treadonly balanceManagerId: string;\n\treadonly digest: string;\n}\n\ninterface CachedDeepbookPool {\n\treadonly name: string;\n\treadonly poolId: string;\n\treadonly base: string;\n\treadonly quote: string;\n\treadonly baseCoinType: string;\n\treadonly quoteCoinType: string;\n\treadonly tickSize: string;\n\treadonly lotSize: string;\n\treadonly minSize: string;\n}\n\ninterface CachedDeepbookPoolsResult {\n\treadonly pools: ReadonlyArray<CachedDeepbookPool>;\n}\n\ninterface CachedDeepbookSeedResult {\n\treadonly poolName: string;\n\treadonly balanceManagerId: string;\n\treadonly digest: string;\n}\n\ninterface SimulateResult {\n\treadonly commandResults?: ReadonlyArray<{\n\t\treadonly returnValues?: ReadonlyArray<{\n\t\t\treadonly bcs?: Uint8Array;\n\t\t}>;\n\t}>;\n}\n\nconst CachedDeepbookPoolSchema = Schema.Struct({\n\tname: Schema.String,\n\tpoolId: Schema.String,\n\tbase: Schema.String,\n\tquote: Schema.String,\n\tbaseCoinType: Schema.String,\n\tquoteCoinType: Schema.String,\n\ttickSize: Schema.String,\n\tlotSize: Schema.String,\n\tminSize: Schema.String,\n});\n\nconst CachedDeepbookPoolsSchema = Schema.Struct({\n\tpools: Schema.Array(CachedDeepbookPoolSchema),\n});\n\nconst CachedDeepbookSeedResultSchema = Schema.Struct({\n\tpoolName: Schema.String,\n\tbalanceManagerId: Schema.String,\n\tdigest: Schema.String,\n});\n\nconst stableContentHash = (input: string): ContentHash =>\n\tbrandContentHash(createHash('sha256').update(input).digest('hex'));\n\nconst fromCachedPools = (cached: CachedDeepbookPoolsResult): DeepbookPoolsResult => ({\n\tpools: cached.pools.map((pool) => ({\n\t\tname: pool.name,\n\t\tpoolId: pool.poolId,\n\t\tbase: pool.base,\n\t\tquote: pool.quote,\n\t\tbaseCoinType: pool.baseCoinType,\n\t\tquoteCoinType: pool.quoteCoinType,\n\t\ttickSize: BigInt(pool.tickSize),\n\t\tlotSize: BigInt(pool.lotSize),\n\t\tminSize: BigInt(pool.minSize),\n\t})),\n});\n\nconst toCachedPool = (spec: ResolvedDeepbookPoolSpec, poolId: string): CachedDeepbookPool => ({\n\tname: spec.name,\n\tpoolId,\n\tbase: spec.base,\n\tquote: spec.quote,\n\tbaseCoinType: normalizeStructTag(spec.baseCoinType),\n\tquoteCoinType: normalizeStructTag(spec.quoteCoinType),\n\ttickSize: spec.tickSize.toString(),\n\tlotSize: spec.lotSize.toString(),\n\tminSize: spec.minSize.toString(),\n});\n\nconst poolInputsHash = (\n\tpkg: DeepbookDeployment,\n\tsigner: ResolvedSigner,\n\tpools: ReadonlyArray<ResolvedDeepbookPoolSpec>,\n) =>\n\tstableContentHash(\n\t\t[\n\t\t\t'v1',\n\t\t\tpkg.packageId,\n\t\t\tpkg.registryId,\n\t\t\tpkg.adminCapId,\n\t\t\tsigner.address,\n\t\t\t...pools\n\t\t\t\t.map((pool) =>\n\t\t\t\t\t[\n\t\t\t\t\t\tpool.name,\n\t\t\t\t\t\tnormalizeStructTag(pool.baseCoinType),\n\t\t\t\t\t\tnormalizeStructTag(pool.quoteCoinType),\n\t\t\t\t\t\tpool.tickSize.toString(),\n\t\t\t\t\t\tpool.lotSize.toString(),\n\t\t\t\t\t\tpool.minSize.toString(),\n\t\t\t\t\t\tString(pool.whitelisted),\n\t\t\t\t\t\tString(pool.stablePool),\n\t\t\t\t\t].join('|'),\n\t\t\t\t)\n\t\t\t\t.sort(),\n\t\t].join('||'),\n\t);\n\nconst seedInputsHash = (\n\tpkg: DeepbookDeployment,\n\tsigner: ResolvedSigner,\n\tspec: ResolvedDeepbookPoolSpec,\n\tpool: DeepbookPool,\n) =>\n\tstableContentHash(\n\t\t[\n\t\t\t'v3',\n\t\t\tpkg.packageId,\n\t\t\tpkg.registryId,\n\t\t\tsigner.address,\n\t\t\tspec.name,\n\t\t\tpool.poolId,\n\t\t\tnormalizeStructTag(pool.baseCoinType),\n\t\t\tnormalizeStructTag(pool.quoteCoinType),\n\t\t\tspec.seed?.baseAmount?.toString() ?? '0',\n\t\t\tspec.seed?.quoteAmount?.toString() ?? '0',\n\t\t\t...(spec.seed?.orders ?? []).map((order, index) =>\n\t\t\t\t[\n\t\t\t\t\tindex,\n\t\t\t\t\torder.side,\n\t\t\t\t\torder.price.toString(),\n\t\t\t\t\torder.quantity.toString(),\n\t\t\t\t\torder.clientOrderId?.toString() ?? '',\n\t\t\t\t\tString(order.payWithDeep ?? false),\n\t\t\t\t].join('|'),\n\t\t\t),\n\t\t].join('||'),\n\t);\n\nconst buildVerifyProbe = (\n\tsdk: SuiSdkShim,\n\tcached: CachedDeepbookPoolsResult,\n): Effect.Effect<CachedDeepbookPoolsResult | null, never> =>\n\tEffect.gen(function* () {\n\t\tfor (const pool of cached.pools) {\n\t\t\tconst raw = yield* Effect.tryPromise({\n\t\t\t\ttry: () => sdk.core.getObject({ objectId: pool.poolId }),\n\t\t\t\tcatch: () => null,\n\t\t\t}).pipe(Effect.catch(() => Effect.succeed(null)));\n\t\t\tif (raw === null || raw === undefined) return null;\n\t\t}\n\t\treturn cached;\n\t});\n\nconst buildSeedVerifyProbe = (\n\tsdk: SuiSdkShim,\n\tcached: CachedDeepbookSeedResult,\n): Effect.Effect<CachedDeepbookSeedResult | null, never> =>\n\tEffect.gen(function* () {\n\t\tconst raw = yield* Effect.tryPromise({\n\t\t\ttry: () => sdk.core.getObject({ objectId: cached.balanceManagerId }),\n\t\t\tcatch: () => null,\n\t\t}).pipe(Effect.catch(() => Effect.succeed(null)));\n\t\tif (raw === null || raw === undefined) return null;\n\t\treturn cached;\n\t});\n\nconst simulateClient = (\n\tsdk: SuiSdkShim,\n): {\n\treadonly core: {\n\t\treadonly simulateTransaction: (args: {\n\t\t\treadonly transaction: Transaction;\n\t\t\treadonly include: { readonly commandResults: boolean; readonly effects: boolean };\n\t\t}) => Promise<SimulateResult>;\n\t};\n} =>\n\tsdk.client as {\n\t\treadonly core: {\n\t\t\treadonly simulateTransaction: (args: {\n\t\t\t\treadonly transaction: Transaction;\n\t\t\t\treadonly include: { readonly commandResults: boolean; readonly effects: boolean };\n\t\t\t}) => Promise<SimulateResult>;\n\t\t};\n\t};\n\nconst findExistingPoolId = (\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tspec: ResolvedDeepbookPoolSpec,\n): Effect.Effect<string | null, never> =>\n\tEffect.tryPromise({\n\t\ttry: async () => {\n\t\t\tconst tx = new Transaction();\n\t\t\ttx.setSender(signer.address);\n\t\t\ttx.moveCall({\n\t\t\t\ttarget: `${pkg.packageId}::pool::get_pool_id_by_asset`,\n\t\t\t\ttypeArguments: [spec.baseCoinType, spec.quoteCoinType],\n\t\t\t\targuments: [tx.object(pkg.registryId)],\n\t\t\t});\n\t\t\tconst result = await simulateClient(sdk).core.simulateTransaction({\n\t\t\t\ttransaction: tx,\n\t\t\t\tinclude: { commandResults: true, effects: true },\n\t\t\t});\n\t\t\tconst bytes = result.commandResults?.[0]?.returnValues?.[0]?.bcs;\n\t\t\tif (bytes === undefined) return null;\n\t\t\treturn normalizeSuiAddress(bcs.Address.parse(bytes));\n\t\t},\n\t\tcatch: () => null,\n\t}).pipe(Effect.catch(() => Effect.succeed(null)));\n\nconst findExistingPools = (\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tpools: ReadonlyArray<ResolvedDeepbookPoolSpec>,\n): Effect.Effect<ReadonlyMap<string, CachedDeepbookPool>, never> =>\n\tEffect.gen(function* () {\n\t\tconst found = new Map<string, CachedDeepbookPool>();\n\t\tfor (const pool of pools) {\n\t\t\tconst poolId = yield* findExistingPoolId(sdk, signer, pkg, pool);\n\t\t\tif (poolId !== null) {\n\t\t\t\tfound.set(pool.name, toCachedPool(pool, poolId));\n\t\t\t}\n\t\t}\n\t\treturn found;\n\t});\n\nconst pickCreatedPool = (\n\tchanges: ReadonlyArray<{\n\t\treadonly objectId: string;\n\t\treadonly objectType?: string;\n\t\treadonly idOperation?: string;\n\t}>,\n\tspec: ResolvedDeepbookPoolSpec,\n): string | null => {\n\tconst base = normalizeStructTag(spec.baseCoinType);\n\tconst quote = normalizeStructTag(spec.quoteCoinType);\n\tfor (const change of changes) {\n\t\tconst type = change.objectType;\n\t\tif (change.idOperation !== 'Created' || type === undefined) continue;\n\t\tif (!type.includes('::pool::Pool<')) continue;\n\t\tif (type.includes(base) && type.includes(quote)) {\n\t\t\treturn change.objectId;\n\t\t}\n\t}\n\treturn null;\n};\n\nconst mapArtifactError = (phase: DeepbookPhase, err: ArtifactPublishError): DeepbookPluginError =>\n\tdeepbookPluginError(phase, err._tag === 'ArtifactPublishError' ? err.detail : String(err));\n\ntype SuiTransactionBuildClient = Parameters<Transaction['build']>[0] extends\n\t| { readonly client?: infer C }\n\t| undefined\n\t? C\n\t: never;\n\nconst transactionBuildClient = (sdk: SuiSdkShim): SuiTransactionBuildClient =>\n\tsdk.client as SuiTransactionBuildClient;\n\nconst ORDER_TYPE_POST_ONLY = 3;\nconst SELF_MATCHING_CANCEL_TAKER = 1;\nconst MAX_TIMESTAMP = 18_446_744_073_709_551_615n;\nconst SUI_TYPE = normalizeStructTag('0x2::sui::SUI');\nconst SEED_GAS_BUDGET = 500_000_000n;\nconst LOCALNET_REFERENCE_GAS_PRICE = 1000n;\nconst STALE_OBJECT_RETRY_DELAY_MS = 500;\nconst STALE_OBJECT_MAX_RETRIES = 20;\n\nconst decodeErrorMessage = (message: string) => {\n\ttry {\n\t\treturn decodeURIComponent(message);\n\t} catch {\n\t\treturn message;\n\t}\n};\n\nconst isStaleObjectVersionError = (err: { readonly message: string }) => {\n\tconst message = decodeErrorMessage(err.message);\n\treturn (\n\t\tmessage.includes('needs to be rebuilt because object') && message.includes('current version')\n\t);\n};\n\nconst executeSuiTxWithStaleObjectRetry = (\n\tparams: Parameters<typeof executeSuiTx>[0],\n\tattempt = 0,\n): ReturnType<typeof executeSuiTx> =>\n\texecuteSuiTx(params).pipe(\n\t\tEffect.catch((err: SuiExecuteError) =>\n\t\t\tisStaleObjectVersionError(err) && attempt < STALE_OBJECT_MAX_RETRIES\n\t\t\t\t? Effect.sleep(`${STALE_OBJECT_RETRY_DELAY_MS} millis`).pipe(\n\t\t\t\t\t\tEffect.andThen(executeSuiTxWithStaleObjectRetry(params, attempt + 1)),\n\t\t\t\t\t)\n\t\t\t\t: Effect.fail(err),\n\t\t),\n\t);\n\n// ---------------------------------------------------------------------------\n// Create whitelisted pools\n// ---------------------------------------------------------------------------\n\nexport const createDeepbookPools = (\n\tpublisher: ArtifactPublisher,\n\tsdk: SuiSdkShim,\n\tchain: string,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tpools: ReadonlyArray<ResolvedDeepbookPoolSpec>,\n): Effect.Effect<DeepbookPoolsResult, DeepbookPluginError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tif (pools.length === 0) return { pools: [] };\n\n\t\tconst produced = yield* publisher\n\t\t\t.publish<CachedDeepbookPoolsResult, CachedDeepbookPoolsResult>({\n\t\t\t\tnamespace: 'deepbook/pools',\n\t\t\t\tchain: brandChainId(chain),\n\t\t\t\tcontentHash: poolInputsHash(pkg, signer, pools),\n\t\t\t\tverifySchema: CachedDeepbookPoolsSchema,\n\t\t\t\tverify: (cached) => buildVerifyProbe(sdk, cached),\n\t\t\t\tproduce: Effect.gen(function* () {\n\t\t\t\t\tconst existingPools = yield* findExistingPools(sdk, signer, pkg, pools);\n\t\t\t\t\tconst missingPools = pools.filter((pool) => !existingPools.has(pool.name));\n\n\t\t\t\t\tconst cachedPools: CachedDeepbookPool[] = [];\n\t\t\t\t\tif (missingPools.length > 0) {\n\t\t\t\t\t\tconst receipt = yield* executeSuiTx({\n\t\t\t\t\t\t\tclient: sdk.client as SuiExecuteClient,\n\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\tbuild: async () => {\n\t\t\t\t\t\t\t\tconst tx = new Transaction();\n\t\t\t\t\t\t\t\ttx.setSender(signer.address);\n\t\t\t\t\t\t\t\ttx.setGasBudget(500_000_000);\n\t\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::registry::init_balance_manager_map`,\n\t\t\t\t\t\t\t\t\targuments: [tx.object(pkg.registryId), tx.object(pkg.adminCapId)],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tfor (const pool of missingPools) {\n\t\t\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::pool::create_pool_admin`,\n\t\t\t\t\t\t\t\t\t\ttypeArguments: [pool.baseCoinType, pool.quoteCoinType],\n\t\t\t\t\t\t\t\t\t\targuments: [\n\t\t\t\t\t\t\t\t\t\t\ttx.object(pkg.registryId),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(pool.tickSize),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(pool.lotSize),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(pool.minSize),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.bool(pool.whitelisted),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.bool(pool.stablePool),\n\t\t\t\t\t\t\t\t\t\t\ttx.object(pkg.adminCapId),\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\treturn tx.build({\n\t\t\t\t\t\t\t\t\tclient: transactionBuildClient(sdk),\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}).pipe(\n\t\t\t\t\t\t\tEffect.mapError(\n\t\t\t\t\t\t\t\t(err): ArtifactPublishError => ({\n\t\t\t\t\t\t\t\t\t_tag: 'ArtifactPublishError',\n\t\t\t\t\t\t\t\t\treason: 'produce-failed',\n\t\t\t\t\t\t\t\t\tdetail: `deepbook pool transaction failed: ${err.message}`,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tfor (const pool of missingPools) {\n\t\t\t\t\t\t\tconst poolId = pickCreatedPool(receipt.objectChanges, pool);\n\t\t\t\t\t\t\tif (poolId === null) {\n\t\t\t\t\t\t\t\treturn yield* Effect.fail({\n\t\t\t\t\t\t\t\t\t_tag: 'ArtifactPublishError' as const,\n\t\t\t\t\t\t\t\t\treason: 'produce-failed' as const,\n\t\t\t\t\t\t\t\t\tdetail:\n\t\t\t\t\t\t\t\t\t\t`deepbook pool '${pool.name}' not found in objectChanges ` +\n\t\t\t\t\t\t\t\t\t\t`(digest=${receipt.digest}).`,\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tcachedPools.push(toCachedPool(pool, poolId));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn {\n\t\t\t\t\t\tpools: pools\n\t\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t\t(pool) =>\n\t\t\t\t\t\t\t\t\texistingPools.get(pool.name) ?? cachedPools.find((p) => p.name === pool.name),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t.filter((pool): pool is CachedDeepbookPool => pool !== undefined),\n\t\t\t\t\t} satisfies CachedDeepbookPoolsResult;\n\t\t\t\t}),\n\t\t\t\tregister: () => Effect.void,\n\t\t\t})\n\t\t\t.pipe(Effect.mapError((err) => mapArtifactError('create-pools', err)));\n\n\t\tconst producedPools = new Map(produced.pools.map((pool) => [pool.name, pool]));\n\t\tconst resolvedPools = pools.map((pool) => producedPools.get(pool.name));\n\t\tif (resolvedPools.some((pool) => pool === undefined)) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\tdeepbookPluginError('create-pools', 'deepbook pool creation did not return every pool.'),\n\t\t\t);\n\t\t}\n\n\t\treturn fromCachedPools({\n\t\t\tpools: resolvedPools.filter((pool): pool is CachedDeepbookPool => pool !== undefined),\n\t\t});\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.deepbook.createPools', {\n\t\t\tattributes: {\n\t\t\t\t'deepbook.packageId': pkg.packageId,\n\t\t\t\t'deepbook.pool.count': pools.length,\n\t\t\t},\n\t\t}),\n\t);\n\n// ---------------------------------------------------------------------------\n// Seed local liquidity\n// ---------------------------------------------------------------------------\n\nconst poolByName = (pools: ReadonlyArray<DeepbookPool>, name: string): DeepbookPool | undefined =>\n\tpools.find((pool) => pool.name === name);\n\nconst pickCreatedBalanceManager = (\n\tchanges: ReadonlyArray<{\n\t\treadonly objectId: string;\n\t\treadonly objectType?: string;\n\t\treadonly idOperation?: string;\n\t}>,\n): string | null => {\n\tfor (const change of changes) {\n\t\tif (change.idOperation !== 'Created') continue;\n\t\tif (change.objectType?.includes('::balance_manager::BalanceManager')) {\n\t\t\treturn change.objectId;\n\t\t}\n\t}\n\treturn null;\n};\n\nconst depositIntoBalanceManager = (\n\ttx: Transaction,\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tbalanceManager: ReturnType<Transaction['moveCall']>,\n\tcoinType: string,\n\tamount: bigint | undefined,\n) => {\n\tif (amount === undefined || amount === 0n) return;\n\treturn splitOwnedCoinForBalance(tx, sdk, signer, coinType, amount).then((coin) => {\n\t\ttx.moveCall({\n\t\t\ttarget: `${pkg.packageId}::balance_manager::deposit`,\n\t\t\ttypeArguments: [coinType],\n\t\t\targuments: [balanceManager, coin],\n\t\t});\n\t});\n};\n\nconst errorDetail = (err: unknown): string => {\n\tif (err instanceof Error) return err.message;\n\tif (typeof err === 'object' && err !== null) {\n\t\tif ('message' in err && typeof err.message === 'string') return err.message;\n\t\tif ('detail' in err && typeof err.detail === 'string') return err.detail;\n\t}\n\treturn String(err);\n};\n\nconst requestSeedFunding = (\n\tstrategy: CoinFundingStrategy | undefined,\n\tsigner: ResolvedSigner,\n\tcoinType: string,\n\tamount: bigint | undefined,\n): Effect.Effect<void, ArtifactPublishError> => {\n\tif (strategy === undefined || amount === undefined || amount === 0n) {\n\t\treturn Effect.void;\n\t}\n\treturn strategy.request({ address: signer.address, amount }).pipe(\n\t\tEffect.mapError(\n\t\t\t(err): ArtifactPublishError => ({\n\t\t\t\t_tag: 'ArtifactPublishError',\n\t\t\t\treason: 'produce-failed',\n\t\t\t\tdetail:\n\t\t\t\t\t`deepbook seed funding failed for ${coinType} ` +\n\t\t\t\t\t`to publisher '${signer.name}' amount=${amount}: ${errorDetail(err)}`,\n\t\t\t}),\n\t\t),\n\t);\n};\n\nconst coinListClient = (\n\tsdk: SuiSdkShim,\n): {\n\treadonly core: {\n\t\treadonly listCoins: (args: {\n\t\t\treadonly owner: string;\n\t\t\treadonly coinType: string;\n\t\t\treadonly cursor?: string | null;\n\t\t\treadonly limit?: number;\n\t\t}) => Promise<{\n\t\t\treadonly objects: ReadonlyArray<{\n\t\t\t\treadonly objectId: string;\n\t\t\t\treadonly version: string | number;\n\t\t\t\treadonly digest: string;\n\t\t\t\treadonly balance: string | number | bigint;\n\t\t\t}>;\n\t\t\treadonly hasNextPage: boolean;\n\t\t\treadonly cursor: string | null;\n\t\t}>;\n\t};\n} =>\n\tsdk.client as {\n\t\treadonly core: {\n\t\t\treadonly listCoins: (args: {\n\t\t\t\treadonly owner: string;\n\t\t\t\treadonly coinType: string;\n\t\t\t\treadonly cursor?: string | null;\n\t\t\t\treadonly limit?: number;\n\t\t\t}) => Promise<{\n\t\t\t\treadonly objects: ReadonlyArray<{\n\t\t\t\t\treadonly objectId: string;\n\t\t\t\t\treadonly version: string | number;\n\t\t\t\t\treadonly digest: string;\n\t\t\t\t\treadonly balance: string | number | bigint;\n\t\t\t\t}>;\n\t\t\t\treadonly hasNextPage: boolean;\n\t\t\t\treadonly cursor: string | null;\n\t\t\t}>;\n\t\t};\n\t};\n\ninterface OwnedCoin {\n\treadonly objectId: string;\n\treadonly version: string | number;\n\treadonly digest: string;\n\treadonly balance: string | number | bigint;\n}\n\nexport const selectOwnedCoinsForBalance = async (\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tcoinType: string,\n\tamount: bigint,\n\tpurpose: string,\n): Promise<{\n\treadonly selected: ReadonlyArray<OwnedCoin>;\n\treadonly selectedBalance: bigint;\n}> => {\n\tconst selected: OwnedCoin[] = [];\n\tlet selectedBalance = 0n;\n\tlet cursor: string | null = null;\n\tdo {\n\t\tconst page = await coinListClient(sdk).core.listCoins({\n\t\t\towner: signer.address,\n\t\t\tcoinType,\n\t\t\tcursor,\n\t\t\tlimit: 50,\n\t\t});\n\t\tfor (const coin of page.objects) {\n\t\t\tselected.push(coin);\n\t\t\tselectedBalance += BigInt(coin.balance);\n\t\t\tif (selectedBalance >= amount) break;\n\t\t}\n\t\tcursor = page.cursor;\n\t\tif (selectedBalance >= amount) break;\n\t\tif (!page.hasNextPage) break;\n\t} while (cursor !== null);\n\n\tif (selectedBalance < amount || selected.length === 0) {\n\t\tthrow new Error(\n\t\t\t`publisher '${signer.name}' has insufficient ${coinType} for ${purpose}: ` +\n\t\t\t\t`required ${amount}, available ${selectedBalance}.`,\n\t\t);\n\t}\n\n\treturn { selected, selectedBalance };\n};\n\nconst ledgerObjectClient = (\n\tsdk: SuiSdkShim,\n): {\n\treadonly ledgerService: {\n\t\treadonly getObject: (args: {\n\t\t\treadonly objectId: string;\n\t\t\treadonly readMask?: { readonly paths: ReadonlyArray<string> };\n\t\t}) => Promise<{\n\t\t\treadonly response?: {\n\t\t\t\treadonly object?: {\n\t\t\t\t\treadonly objectId?: string;\n\t\t\t\t\treadonly version?: string | number | bigint;\n\t\t\t\t\treadonly digest?: string;\n\t\t\t\t};\n\t\t\t};\n\t\t}>;\n\t};\n} =>\n\tsdk.client as {\n\t\treadonly ledgerService: {\n\t\t\treadonly getObject: (args: {\n\t\t\t\treadonly objectId: string;\n\t\t\t\treadonly readMask?: { readonly paths: ReadonlyArray<string> };\n\t\t\t}) => Promise<{\n\t\t\t\treadonly response?: {\n\t\t\t\t\treadonly object?: {\n\t\t\t\t\t\treadonly objectId?: string;\n\t\t\t\t\t\treadonly version?: string | number | bigint;\n\t\t\t\t\t\treadonly digest?: string;\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t}>;\n\t\t};\n\t};\n\nconst currentLedgerObjectRef = async (\n\tsdk: SuiSdkShim,\n\tobjectId: string,\n): Promise<{\n\treadonly objectId: string;\n\treadonly version: string | number;\n\treadonly digest: string;\n}> => {\n\tconst raw = await ledgerObjectClient(sdk).ledgerService.getObject({\n\t\tobjectId,\n\t\treadMask: { paths: ['object_id', 'version', 'digest'] },\n\t});\n\tconst object = raw.response?.object;\n\tif (\n\t\tobject === undefined ||\n\t\tobject.objectId === undefined ||\n\t\tobject.version === undefined ||\n\t\tobject.digest === undefined\n\t) {\n\t\tthrow new Error(`object '${objectId}' was not found while resolving a DeepBook seed input.`);\n\t}\n\treturn {\n\t\tobjectId: object.objectId,\n\t\tversion: object.version.toString(),\n\t\tdigest: object.digest,\n\t};\n};\n\nexport const setExplicitSeedGasPayment = async (\n\ttx: Transaction,\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tsuiDepositAmount: bigint,\n) => {\n\tconst requiredBalance = SEED_GAS_BUDGET + suiDepositAmount;\n\tconst { selected } = await selectOwnedCoinsForBalance(\n\t\tsdk,\n\t\tsigner,\n\t\tSUI_TYPE,\n\t\trequiredBalance,\n\t\t'DeepBook seed gas and SUI deposits',\n\t);\n\tconst gasRefs = await Promise.all(\n\t\tselected.map((coin) => currentLedgerObjectRef(sdk, coin.objectId)),\n\t);\n\ttx.setGasBudget(SEED_GAS_BUDGET);\n\ttx.setGasPrice(LOCALNET_REFERENCE_GAS_PRICE);\n\ttx.setGasPayment(gasRefs);\n};\n\nconst seedSuiDepositAmount = (\n\tpool: Pick<DeepbookPool, 'baseCoinType' | 'quoteCoinType'>,\n\tseed: DeepbookPoolSeedLiquidity,\n): bigint =>\n\t(normalizeStructTag(pool.baseCoinType) === SUI_TYPE ? (seed.baseAmount ?? 0n) : 0n) +\n\t(normalizeStructTag(pool.quoteCoinType) === SUI_TYPE ? (seed.quoteAmount ?? 0n) : 0n);\n\nconst sharedObject = async (\n\ttx: Transaction,\n\tsdk: SuiSdkShim,\n\tobjectId: string,\n\tmutable: boolean,\n) => {\n\tconst raw = (await sdk.core.getObject({ objectId })) as {\n\t\treadonly object?: {\n\t\t\treadonly owner?: {\n\t\t\t\treadonly Shared?: {\n\t\t\t\t\treadonly initialSharedVersion?: string | number;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n\tconst initialSharedVersion = raw.object?.owner?.Shared?.initialSharedVersion;\n\tif (initialSharedVersion === undefined) {\n\t\tthrow new Error(`DeepBook object '${objectId}' is not shared.`);\n\t}\n\treturn tx.sharedObjectRef({\n\t\tobjectId,\n\t\tinitialSharedVersion,\n\t\tmutable,\n\t});\n};\n\nconst splitOwnedCoinForBalance = async (\n\ttx: Transaction,\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tcoinType: string,\n\tamount: bigint,\n) => {\n\tif (normalizeStructTag(coinType) === SUI_TYPE) {\n\t\tconst [coin] = tx.splitCoins(tx.gas, [tx.pure.u64(amount)]);\n\t\treturn coin;\n\t}\n\n\tconst { selected, selectedBalance } = await selectOwnedCoinsForBalance(\n\t\tsdk,\n\t\tsigner,\n\t\tcoinType,\n\t\tamount,\n\t\t'DeepBook seed deposit',\n\t);\n\n\tconst firstSelected = selected[0];\n\tif (firstSelected === undefined) {\n\t\tthrow new Error(\n\t\t\t`publisher '${signer.name}' has no ${coinType} coins for DeepBook seed deposit.`,\n\t\t);\n\t}\n\tconst first = await currentLedgerObjectRef(sdk, firstSelected.objectId);\n\tconst rest = await Promise.all(\n\t\tselected.slice(1).map((coin) => currentLedgerObjectRef(sdk, coin.objectId)),\n\t);\n\tconst baseCoin = tx.objectRef(first);\n\tif (rest.length > 0) {\n\t\ttx.mergeCoins(\n\t\t\tbaseCoin,\n\t\t\trest.map((coin) => tx.objectRef(coin)),\n\t\t);\n\t}\n\tif (selectedBalance === amount) return baseCoin;\n\tconst [coin] = tx.splitCoins(baseCoin, [tx.pure.u64(amount)]);\n\treturn coin;\n};\n\nexport const seedDeepbookPools = (\n\tpublisher: ArtifactPublisher,\n\tsdk: SuiSdkShim,\n\tchain: string,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tspecs: ReadonlyArray<ResolvedDeepbookPoolSpec>,\n\tpools: ReadonlyArray<DeepbookPool>,\n): Effect.Effect<ReadonlyArray<DeepbookPoolSeedResult>, DeepbookPluginError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tconst seeded: DeepbookPoolSeedResult[] = [];\n\t\tfor (const spec of specs) {\n\t\t\tconst seed = spec.seed;\n\t\t\tif (seed === undefined || seed.orders.length === 0) continue;\n\t\t\tconst pool = poolByName(pools, spec.name);\n\t\t\tif (pool === undefined) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tdeepbookPluginError('create-pools', `deepbook seed pool '${spec.name}' was not created.`),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst result = yield* publisher\n\t\t\t\t.publish<CachedDeepbookSeedResult, CachedDeepbookSeedResult>({\n\t\t\t\t\tnamespace: `deepbook/seed/${spec.name}`,\n\t\t\t\t\tchain: brandChainId(chain),\n\t\t\t\t\tcontentHash: seedInputsHash(pkg, signer, spec, pool),\n\t\t\t\t\tverifySchema: CachedDeepbookSeedResultSchema,\n\t\t\t\t\tverify: (cached) => buildSeedVerifyProbe(sdk, cached),\n\t\t\t\t\tproduce: Effect.gen(function* () {\n\t\t\t\t\t\tyield* requestSeedFunding(\n\t\t\t\t\t\t\tspec.baseFundingStrategy,\n\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\tpool.baseCoinType,\n\t\t\t\t\t\t\tseed.baseAmount,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tyield* requestSeedFunding(\n\t\t\t\t\t\t\tspec.quoteFundingStrategy,\n\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\tpool.quoteCoinType,\n\t\t\t\t\t\t\tseed.quoteAmount,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst receipt = yield* executeSuiTxWithStaleObjectRetry({\n\t\t\t\t\t\t\tclient: sdk.client as SuiExecuteClient,\n\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\tbuild: async () => {\n\t\t\t\t\t\t\t\tconst tx = new Transaction();\n\t\t\t\t\t\t\t\ttx.setSender(signer.address);\n\t\t\t\t\t\t\t\tawait setExplicitSeedGasPayment(tx, sdk, signer, seedSuiDepositAmount(pool, seed));\n\t\t\t\t\t\t\t\tconst registry = await sharedObject(tx, sdk, pkg.registryId, true);\n\t\t\t\t\t\t\t\tconst poolObject = await sharedObject(tx, sdk, pool.poolId, true);\n\t\t\t\t\t\t\t\tconst balanceManager = tx.moveCall({\n\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::balance_manager::new`,\n\t\t\t\t\t\t\t\t\targuments: [],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::balance_manager::register_balance_manager`,\n\t\t\t\t\t\t\t\t\targuments: [balanceManager, registry],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tawait depositIntoBalanceManager(\n\t\t\t\t\t\t\t\t\ttx,\n\t\t\t\t\t\t\t\t\tsdk,\n\t\t\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\t\tbalanceManager,\n\t\t\t\t\t\t\t\t\tpool.baseCoinType,\n\t\t\t\t\t\t\t\t\tseed.baseAmount,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tawait depositIntoBalanceManager(\n\t\t\t\t\t\t\t\t\ttx,\n\t\t\t\t\t\t\t\t\tsdk,\n\t\t\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\t\tbalanceManager,\n\t\t\t\t\t\t\t\t\tpool.quoteCoinType,\n\t\t\t\t\t\t\t\t\tseed.quoteAmount,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst tradeProof = tx.moveCall({\n\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::balance_manager::generate_proof_as_owner`,\n\t\t\t\t\t\t\t\t\targuments: [balanceManager],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tfor (const [index, order] of seed.orders.entries()) {\n\t\t\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::pool::place_limit_order`,\n\t\t\t\t\t\t\t\t\t\ttypeArguments: [pool.baseCoinType, pool.quoteCoinType],\n\t\t\t\t\t\t\t\t\t\targuments: [\n\t\t\t\t\t\t\t\t\t\t\tpoolObject,\n\t\t\t\t\t\t\t\t\t\t\tbalanceManager,\n\t\t\t\t\t\t\t\t\t\t\ttradeProof,\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(order.clientOrderId ?? BigInt(index + 1)),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u8(ORDER_TYPE_POST_ONLY),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u8(SELF_MATCHING_CANCEL_TAKER),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(order.price),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(order.quantity),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.bool(order.side === 'bid'),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.bool(order.payWithDeep ?? false),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(MAX_TIMESTAMP),\n\t\t\t\t\t\t\t\t\t\t\ttx.object.clock(),\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttx.transferObjects([balanceManager], signer.address);\n\t\t\t\t\t\t\t\treturn tx.build({ client: transactionBuildClient(sdk) });\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}).pipe(\n\t\t\t\t\t\t\tEffect.mapError(\n\t\t\t\t\t\t\t\t(err): ArtifactPublishError => ({\n\t\t\t\t\t\t\t\t\t_tag: 'ArtifactPublishError',\n\t\t\t\t\t\t\t\t\treason: 'produce-failed',\n\t\t\t\t\t\t\t\t\tdetail: `deepbook seed transaction failed for pool '${spec.name}': ${err.message}`,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst balanceManagerId = pickCreatedBalanceManager(receipt.objectChanges);\n\t\t\t\t\t\tif (balanceManagerId === null) {\n\t\t\t\t\t\t\treturn yield* Effect.fail({\n\t\t\t\t\t\t\t\t_tag: 'ArtifactPublishError' as const,\n\t\t\t\t\t\t\t\treason: 'produce-failed' as const,\n\t\t\t\t\t\t\t\tdetail:\n\t\t\t\t\t\t\t\t\t`deepbook seed BalanceManager not found in objectChanges ` +\n\t\t\t\t\t\t\t\t\t`(digest=${receipt.digest}).`,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { poolName: spec.name, balanceManagerId, digest: receipt.digest };\n\t\t\t\t\t}),\n\t\t\t\t\tregister: () => Effect.void,\n\t\t\t\t})\n\t\t\t\t.pipe(Effect.mapError((err) => mapArtifactError('create-pools', err)));\n\n\t\t\tseeded.push(result);\n\t\t}\n\t\treturn seeded;\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.deepbook.seedPools', {\n\t\t\tattributes: {\n\t\t\t\t'deepbook.packageId': pkg.packageId,\n\t\t\t\t'deepbook.pool.count': specs.filter((spec) => spec.seed !== undefined).length,\n\t\t\t},\n\t\t}),\n\t);\n"],"mappings":"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"}
1
+ {"version":3,"file":"deploy.mjs","names":["brandChainId"],"sources":["../../../src/plugins/deepbook/deploy.ts"],"sourcesContent":["// DeepBook local deployment helpers.\n//\n// The package itself is published by the generic `localPackage(...)` plugin.\n// This module owns the DeepBook-specific follow-up transaction: initialize the\n// registry's BalanceManager map and create the requested admin pools.\n\nimport { Effect, type Scope } from 'effect';\nimport { bcs } from '@mysten/sui/bcs';\nimport { Transaction } from '@mysten/sui/transactions';\nimport { normalizeStructTag, normalizeSuiAddress } from '@mysten/sui/utils';\n\nimport { chainId as brandChainId } from '../../substrate/brand.ts';\nimport {\n\tartifactPublishError,\n\ttype ArtifactPublishError,\n\ttype ArtifactPublisher,\n} from '../../primitives/artifact-publisher.ts';\nimport { acquireOnChainArtifact } from '../internal/acquire-on-chain-artifact.ts';\nimport type { SuiSdkShim } from '../sui/index.ts';\nimport type { CoinValue } from '../coin/index.ts';\nimport type { ResolvedSigner } from '../../substrate/runtime/sui-execute/index.ts';\nimport {\n\texecuteSuiTx,\n\tformatExecutedFailure,\n\tisSuiStaleObjectVersionError,\n} from '../../substrate/runtime/sui-execute/index.ts';\nimport { currentLedgerObjectRef } from '../../substrate/runtime/sui-ledger/object-ref.ts';\nimport { probeManyLenient } from '../../substrate/runtime/probes.ts';\nimport {\n\tmakeSpacedRetrySchedule,\n\tSTALE_OBJECT_VERSION_RETRY_PROFILE,\n} from '../../substrate/runtime/retry-policy.ts';\n\nimport { deepbookPluginError, type DeepbookPluginError } from './errors.ts';\nimport type { DeepbookPhase } from './errors.ts';\nimport { stableContentHash } from './hash.ts';\nimport { DeepbookSpans } from './spans.ts';\nimport { isPoolForPair } from './type-strings.ts';\nimport type { DeepbookPool, DeepbookPoolSeedLiquidity } from './types.ts';\n\n// ---------------------------------------------------------------------------\n// Inputs / outputs\n// ---------------------------------------------------------------------------\n\nexport interface DeepbookDeployment {\n\treadonly packageId: string;\n\treadonly registryId: string;\n\treadonly adminCapId: string;\n\treadonly deepTreasuryId?: string | null;\n}\n\ntype CoinFundingStrategy = NonNullable<CoinValue['fundingStrategy']>;\n\nexport interface ResolvedDeepbookPoolSpec {\n\treadonly name: string;\n\treadonly base: string;\n\treadonly quote: string;\n\treadonly baseCoinType: string;\n\treadonly quoteCoinType: string;\n\treadonly baseFundingStrategy?: CoinFundingStrategy;\n\treadonly quoteFundingStrategy?: CoinFundingStrategy;\n\treadonly tickSize: bigint;\n\treadonly lotSize: bigint;\n\treadonly minSize: bigint;\n\treadonly whitelisted: boolean;\n\treadonly stablePool: boolean;\n\treadonly seed?: DeepbookPoolSeedLiquidity;\n}\n\nexport interface DeepbookPoolsResult {\n\treadonly pools: ReadonlyArray<DeepbookPool>;\n}\n\nexport interface DeepbookPoolSeedResult {\n\treadonly poolName: string;\n\treadonly balanceManagerId: string;\n\treadonly digest: string;\n}\n\ninterface CachedDeepbookPool {\n\treadonly name: string;\n\treadonly poolId: string;\n\treadonly base: string;\n\treadonly quote: string;\n\treadonly baseCoinType: string;\n\treadonly quoteCoinType: string;\n\treadonly tickSize: string;\n\treadonly lotSize: string;\n\treadonly minSize: string;\n}\n\ninterface CachedDeepbookPoolsResult {\n\treadonly pools: ReadonlyArray<CachedDeepbookPool>;\n}\n\ninterface CachedDeepbookSeedResult {\n\treadonly poolName: string;\n\treadonly balanceManagerId: string;\n\treadonly digest: string;\n}\n\nconst fromCachedPools = (cached: CachedDeepbookPoolsResult): DeepbookPoolsResult => ({\n\tpools: cached.pools.map((pool) => ({\n\t\tname: pool.name,\n\t\tpoolId: pool.poolId,\n\t\tbase: pool.base,\n\t\tquote: pool.quote,\n\t\tbaseCoinType: pool.baseCoinType,\n\t\tquoteCoinType: pool.quoteCoinType,\n\t\ttickSize: BigInt(pool.tickSize),\n\t\tlotSize: BigInt(pool.lotSize),\n\t\tminSize: BigInt(pool.minSize),\n\t})),\n});\n\nconst toCachedPool = (spec: ResolvedDeepbookPoolSpec, poolId: string): CachedDeepbookPool => ({\n\tname: spec.name,\n\tpoolId,\n\tbase: spec.base,\n\tquote: spec.quote,\n\tbaseCoinType: normalizeStructTag(spec.baseCoinType),\n\tquoteCoinType: normalizeStructTag(spec.quoteCoinType),\n\ttickSize: spec.tickSize.toString(),\n\tlotSize: spec.lotSize.toString(),\n\tminSize: spec.minSize.toString(),\n});\n\nconst poolInputsHash = (\n\tpkg: DeepbookDeployment,\n\tsigner: ResolvedSigner,\n\tpools: ReadonlyArray<ResolvedDeepbookPoolSpec>,\n) =>\n\tstableContentHash(\n\t\t[\n\t\t\t'v1',\n\t\t\tpkg.packageId,\n\t\t\tpkg.registryId,\n\t\t\tpkg.adminCapId,\n\t\t\tsigner.address,\n\t\t\t...pools\n\t\t\t\t.map((pool) =>\n\t\t\t\t\t[\n\t\t\t\t\t\tpool.name,\n\t\t\t\t\t\tnormalizeStructTag(pool.baseCoinType),\n\t\t\t\t\t\tnormalizeStructTag(pool.quoteCoinType),\n\t\t\t\t\t\tpool.tickSize.toString(),\n\t\t\t\t\t\tpool.lotSize.toString(),\n\t\t\t\t\t\tpool.minSize.toString(),\n\t\t\t\t\t\tString(pool.whitelisted),\n\t\t\t\t\t\tString(pool.stablePool),\n\t\t\t\t\t].join('|'),\n\t\t\t\t)\n\t\t\t\t.sort(),\n\t\t].join('||'),\n\t);\n\nconst seedInputsHash = (\n\tpkg: DeepbookDeployment,\n\tsigner: ResolvedSigner,\n\tspec: ResolvedDeepbookPoolSpec,\n\tpool: DeepbookPool,\n) =>\n\tstableContentHash(\n\t\t[\n\t\t\t'v3',\n\t\t\tpkg.packageId,\n\t\t\tpkg.registryId,\n\t\t\tsigner.address,\n\t\t\tspec.name,\n\t\t\tpool.poolId,\n\t\t\tnormalizeStructTag(pool.baseCoinType),\n\t\t\tnormalizeStructTag(pool.quoteCoinType),\n\t\t\tspec.seed?.baseAmount?.toString() ?? '0',\n\t\t\tspec.seed?.quoteAmount?.toString() ?? '0',\n\t\t\t...(spec.seed?.orders ?? []).map((order, index) =>\n\t\t\t\t[\n\t\t\t\t\tindex,\n\t\t\t\t\torder.side,\n\t\t\t\t\torder.price.toString(),\n\t\t\t\t\torder.quantity.toString(),\n\t\t\t\t\torder.clientOrderId?.toString() ?? '',\n\t\t\t\t\tString(order.payWithDeep ?? false),\n\t\t\t\t].join('|'),\n\t\t\t),\n\t\t].join('||'),\n\t);\n\nconst sdkGetObjectLenient = (\n\tsdk: SuiSdkShim,\n\tobjectId: string,\n): Effect.Effect<unknown | null, never> =>\n\tEffect.tryPromise({\n\t\ttry: () => sdk.core.getObject({ objectId }),\n\t\tcatch: () => null,\n\t}).pipe(Effect.catch(() => Effect.succeed(null)));\n\nconst buildVerifyProbe = (\n\tsdk: SuiSdkShim,\n\tcached: CachedDeepbookPoolsResult,\n): Effect.Effect<CachedDeepbookPoolsResult | null, never> =>\n\tEffect.gen(function* () {\n\t\tconst results = yield* probeManyLenient(\n\t\t\tcached.pools.map((pool) => sdkGetObjectLenient(sdk, pool.poolId)),\n\t\t);\n\t\tif (results.some((raw) => raw === null || raw === undefined)) return null;\n\t\treturn cached;\n\t});\n\nconst buildSeedVerifyProbe = (\n\tsdk: SuiSdkShim,\n\tcached: CachedDeepbookSeedResult,\n): Effect.Effect<CachedDeepbookSeedResult | null, never> =>\n\tEffect.gen(function* () {\n\t\tconst raw = yield* sdkGetObjectLenient(sdk, cached.balanceManagerId);\n\t\tif (raw === null || raw === undefined) return null;\n\t\treturn cached;\n\t});\n\nconst findExistingPoolId = (\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tspec: ResolvedDeepbookPoolSpec,\n): Effect.Effect<string | null, never> =>\n\tEffect.tryPromise({\n\t\ttry: async () => {\n\t\t\tconst tx = new Transaction();\n\t\t\ttx.setSender(signer.address);\n\t\t\ttx.moveCall({\n\t\t\t\ttarget: `${pkg.packageId}::pool::get_pool_id_by_asset`,\n\t\t\t\ttypeArguments: [spec.baseCoinType, spec.quoteCoinType],\n\t\t\t\targuments: [tx.object(pkg.registryId)],\n\t\t\t});\n\t\t\tconst result = await sdk.client.core.simulateTransaction({\n\t\t\t\ttransaction: tx,\n\t\t\t\tinclude: { commandResults: true, effects: true },\n\t\t\t});\n\t\t\tconst bytes = result.commandResults?.[0]?.returnValues?.[0]?.bcs;\n\t\t\tif (bytes === undefined) return null;\n\t\t\tconst normalized = normalizeSuiAddress(bcs.Address.parse(bytes));\n\t\t\t// DeepBook's `get_pool_id_by_asset` returns the all-zeros\n\t\t\t// address when no pool exists for the asset pair (rather\n\t\t\t// than raising). Treat the sentinel as \"not found\" so the\n\t\t\t// outer create-or-find loop creates the pool instead of\n\t\t\t// adopting `0x0` as a live pool id.\n\t\t\tif (normalized === normalizeSuiAddress('0x0')) return null;\n\t\t\treturn normalized;\n\t\t},\n\t\tcatch: () => null,\n\t}).pipe(Effect.catch(() => Effect.succeed(null)));\n\nconst findExistingPools = (\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tpools: ReadonlyArray<ResolvedDeepbookPoolSpec>,\n): Effect.Effect<ReadonlyMap<string, CachedDeepbookPool>, never> =>\n\tEffect.gen(function* () {\n\t\tconst found = new Map<string, CachedDeepbookPool>();\n\t\tfor (const pool of pools) {\n\t\t\tconst poolId = yield* findExistingPoolId(sdk, signer, pkg, pool);\n\t\t\tif (poolId !== null) {\n\t\t\t\tfound.set(pool.name, toCachedPool(pool, poolId));\n\t\t\t}\n\t\t}\n\t\treturn found;\n\t});\n\n// All `missingPools` are created in ONE batched transaction, so the\n// receipt's `objectChanges` carries every created `Pool<…>` together.\n// Match each spec by parsing the pool's `Pool<Base, Quote>` generic\n// arguments and comparing them POSITIONALLY against the spec — a plain\n// `type.includes(base) && type.includes(quote)` cross-matches a reversed\n// pair (`DEEP/SUI` + `SUI/DEEP`) or a coin type that is a substring of\n// another, collapsing two specs onto one objectId and dropping a pool.\nconst pickCreatedPool = (\n\tchanges: ReadonlyArray<{\n\t\treadonly objectId: string;\n\t\treadonly objectType?: string;\n\t\treadonly idOperation?: string;\n\t}>,\n\tspec: ResolvedDeepbookPoolSpec,\n): string | null => {\n\tfor (const change of changes) {\n\t\tconst type = change.objectType;\n\t\tif (change.idOperation !== 'Created' || type === undefined) continue;\n\t\tif (isPoolForPair(type, spec.baseCoinType, spec.quoteCoinType)) {\n\t\t\treturn change.objectId;\n\t\t}\n\t}\n\treturn null;\n};\n\nconst mapArtifactError = (phase: DeepbookPhase, err: ArtifactPublishError): DeepbookPluginError =>\n\tdeepbookPluginError(phase, err._tag === 'ArtifactPublishError' ? err.detail : String(err));\n\nconst ORDER_TYPE_POST_ONLY = 3;\nconst SELF_MATCHING_CANCEL_TAKER = 1;\nconst MAX_TIMESTAMP = 18_446_744_073_709_551_615n;\nconst SUI_TYPE = normalizeStructTag('0x2::sui::SUI');\nconst SEED_GAS_BUDGET = 500_000_000n;\nconst LOCALNET_REFERENCE_GAS_PRICE = 1000n;\n/** Retry `executeSuiTx` when the SDK reports a stale object version\n * (concurrent re-versioning of a shared registry / pool object). The\n * build closure rebuilds the transaction with fresh refs each attempt;\n * caps at `STALE_OBJECT_VERSION_RETRY_PROFILE.attempts` so a true\n * failure surfaces instead of looping forever. */\nconst executeSuiTxWithStaleObjectRetry = (\n\tparams: Parameters<typeof executeSuiTx>[0],\n): ReturnType<typeof executeSuiTx> =>\n\texecuteSuiTx(params).pipe(\n\t\tEffect.retry({\n\t\t\tschedule: makeSpacedRetrySchedule(\n\t\t\t\tSTALE_OBJECT_VERSION_RETRY_PROFILE.delayMs,\n\t\t\t\tSTALE_OBJECT_VERSION_RETRY_PROFILE.attempts,\n\t\t\t),\n\t\t\twhile: isSuiStaleObjectVersionError,\n\t\t}),\n\t);\n\n// ---------------------------------------------------------------------------\n// Create whitelisted pools\n// ---------------------------------------------------------------------------\n\nexport const createDeepbookPools = (\n\tpublisher: ArtifactPublisher,\n\tsdk: SuiSdkShim,\n\tchain: string,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tpools: ReadonlyArray<ResolvedDeepbookPoolSpec>,\n): Effect.Effect<DeepbookPoolsResult, DeepbookPluginError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tif (pools.length === 0) return { pools: [] };\n\n\t\tconst produced = yield* acquireOnChainArtifact<\n\t\t\tCachedDeepbookPoolsResult,\n\t\t\tCachedDeepbookPoolsResult\n\t\t>(publisher, {\n\t\t\tnamespace: 'deepbook/pools',\n\t\t\tchain: brandChainId(chain),\n\t\t\tcontentHash: poolInputsHash(pkg, signer, pools),\n\t\t\tverify: (cached) => buildVerifyProbe(sdk, cached),\n\t\t\tproduce: Effect.gen(function* () {\n\t\t\t\tconst existingPools = yield* findExistingPools(sdk, signer, pkg, pools);\n\t\t\t\tconst missingPools = pools.filter((pool) => !existingPools.has(pool.name));\n\n\t\t\t\tconst cachedPools: CachedDeepbookPool[] = [];\n\t\t\t\tif (missingPools.length > 0) {\n\t\t\t\t\tconst result = yield* executeSuiTx({\n\t\t\t\t\t\tclient: sdk.client,\n\t\t\t\t\t\tsigner,\n\t\t\t\t\t\tbuild: async () => {\n\t\t\t\t\t\t\tconst tx = new Transaction();\n\t\t\t\t\t\t\ttx.setSender(signer.address);\n\t\t\t\t\t\t\ttx.setGasBudget(500_000_000);\n\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::registry::init_balance_manager_map`,\n\t\t\t\t\t\t\t\targuments: [tx.object(pkg.registryId), tx.object(pkg.adminCapId)],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfor (const pool of missingPools) {\n\t\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::pool::create_pool_admin`,\n\t\t\t\t\t\t\t\t\ttypeArguments: [pool.baseCoinType, pool.quoteCoinType],\n\t\t\t\t\t\t\t\t\targuments: [\n\t\t\t\t\t\t\t\t\t\ttx.object(pkg.registryId),\n\t\t\t\t\t\t\t\t\t\ttx.pure.u64(pool.tickSize),\n\t\t\t\t\t\t\t\t\t\ttx.pure.u64(pool.lotSize),\n\t\t\t\t\t\t\t\t\t\ttx.pure.u64(pool.minSize),\n\t\t\t\t\t\t\t\t\t\ttx.pure.bool(pool.whitelisted),\n\t\t\t\t\t\t\t\t\t\ttx.pure.bool(pool.stablePool),\n\t\t\t\t\t\t\t\t\t\ttx.object(pkg.adminCapId),\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn tx.build({\n\t\t\t\t\t\t\t\tclient: sdk.client,\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t}).pipe(\n\t\t\t\t\t\tEffect.mapError(\n\t\t\t\t\t\t\t(err): ArtifactPublishError =>\n\t\t\t\t\t\t\t\tartifactPublishError(\n\t\t\t\t\t\t\t\t\t'produce-failed',\n\t\t\t\t\t\t\t\t\t`deepbook pool transaction failed: ${err.message}`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t\tif (result.$kind === 'FailedTransaction') {\n\t\t\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\t\t\tartifactPublishError(\n\t\t\t\t\t\t\t\t'produce-failed',\n\t\t\t\t\t\t\t\t`deepbook pool transaction on-chain execution failed ` +\n\t\t\t\t\t\t\t\t\tformatExecutedFailure(result.FailedTransaction),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\tconst receipt = result.Transaction;\n\n\t\t\t\t\tfor (const pool of missingPools) {\n\t\t\t\t\t\tconst poolId = pickCreatedPool(receipt.objectChanges, pool);\n\t\t\t\t\t\tif (poolId === null) {\n\t\t\t\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\t\t\t\tartifactPublishError(\n\t\t\t\t\t\t\t\t\t'produce-failed',\n\t\t\t\t\t\t\t\t\t`deepbook pool '${pool.name}' not found in objectChanges ` +\n\t\t\t\t\t\t\t\t\t\t`(digest=${receipt.digest}).`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcachedPools.push(toCachedPool(pool, poolId));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tpools: pools\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t(pool) =>\n\t\t\t\t\t\t\t\texistingPools.get(pool.name) ?? cachedPools.find((p) => p.name === pool.name),\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.filter((pool): pool is CachedDeepbookPool => pool !== undefined),\n\t\t\t\t} satisfies CachedDeepbookPoolsResult;\n\t\t\t}),\n\t\t}).pipe(Effect.mapError((err) => mapArtifactError('create-pools', err)));\n\n\t\tconst producedPools = new Map(produced.pools.map((pool) => [pool.name, pool]));\n\t\tconst resolvedPools = pools.map((pool) => producedPools.get(pool.name));\n\t\tif (resolvedPools.some((pool) => pool === undefined)) {\n\t\t\treturn yield* Effect.fail(\n\t\t\t\tdeepbookPluginError('create-pools', 'deepbook pool creation did not return every pool.'),\n\t\t\t);\n\t\t}\n\n\t\treturn fromCachedPools({\n\t\t\tpools: resolvedPools.filter((pool): pool is CachedDeepbookPool => pool !== undefined),\n\t\t});\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.deepbook.createPools', {\n\t\t\tattributes: {\n\t\t\t\t[DeepbookSpans.packageId]: pkg.packageId,\n\t\t\t\t[DeepbookSpans.poolCount]: pools.length,\n\t\t\t},\n\t\t}),\n\t);\n\n// ---------------------------------------------------------------------------\n// Seed local liquidity\n// ---------------------------------------------------------------------------\n\nconst poolByName = (pools: ReadonlyArray<DeepbookPool>, name: string): DeepbookPool | undefined =>\n\tpools.find((pool) => pool.name === name);\n\nconst pickCreatedBalanceManager = (\n\tchanges: ReadonlyArray<{\n\t\treadonly objectId: string;\n\t\treadonly objectType?: string;\n\t\treadonly idOperation?: string;\n\t}>,\n): string | null => {\n\tfor (const change of changes) {\n\t\tif (change.idOperation !== 'Created') continue;\n\t\tif (change.objectType?.includes('::balance_manager::BalanceManager')) {\n\t\t\treturn change.objectId;\n\t\t}\n\t}\n\treturn null;\n};\n\nconst depositIntoBalanceManager = (\n\ttx: Transaction,\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tbalanceManager: ReturnType<Transaction['moveCall']>,\n\tcoinType: string,\n\tamount: bigint | undefined,\n) => {\n\tif (amount === undefined || amount === 0n) return;\n\treturn splitOwnedCoinForBalance(tx, sdk, signer, coinType, amount).then((coin) => {\n\t\ttx.moveCall({\n\t\t\ttarget: `${pkg.packageId}::balance_manager::deposit`,\n\t\t\ttypeArguments: [coinType],\n\t\t\targuments: [balanceManager, coin],\n\t\t});\n\t});\n};\n\nconst errorDetail = (err: unknown): string => {\n\tif (err instanceof Error) return err.message;\n\tif (typeof err === 'object' && err !== null) {\n\t\tif ('message' in err && typeof err.message === 'string') return err.message;\n\t\tif ('detail' in err && typeof err.detail === 'string') return err.detail;\n\t}\n\treturn String(err);\n};\n\nconst requestSeedFunding = (\n\tstrategy: CoinFundingStrategy | undefined,\n\tsigner: ResolvedSigner,\n\tcoinType: string,\n\tamount: bigint | undefined,\n): Effect.Effect<void, ArtifactPublishError> => {\n\tif (strategy === undefined || amount === undefined || amount === 0n) {\n\t\treturn Effect.void;\n\t}\n\treturn strategy\n\t\t.request({ address: signer.address, amount })\n\t\t.pipe(\n\t\t\tEffect.mapError(\n\t\t\t\t(err): ArtifactPublishError =>\n\t\t\t\t\tartifactPublishError(\n\t\t\t\t\t\t'produce-failed',\n\t\t\t\t\t\t`deepbook seed funding failed for ${coinType} ` +\n\t\t\t\t\t\t\t`to publisher '${signer.name}' amount=${amount}: ${errorDetail(err)}`,\n\t\t\t\t\t),\n\t\t\t),\n\t\t);\n};\n\ninterface OwnedCoin {\n\treadonly objectId: string;\n\treadonly version: string | number;\n\treadonly digest: string;\n\treadonly balance: string | number | bigint;\n}\n\nexport const selectOwnedCoinsForBalance = async (\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tcoinType: string,\n\tamount: bigint,\n\tpurpose: string,\n): Promise<{\n\treadonly selected: ReadonlyArray<OwnedCoin>;\n\treadonly selectedBalance: bigint;\n}> => {\n\tconst selected: OwnedCoin[] = [];\n\tlet selectedBalance = 0n;\n\tlet cursor: string | null = null;\n\tdo {\n\t\tconst page = await sdk.client.core.listCoins({\n\t\t\towner: signer.address,\n\t\t\tcoinType,\n\t\t\tcursor,\n\t\t\tlimit: 50,\n\t\t});\n\t\tfor (const coin of page.objects) {\n\t\t\tselected.push(coin);\n\t\t\tselectedBalance += BigInt(coin.balance);\n\t\t\tif (selectedBalance >= amount) break;\n\t\t}\n\t\tcursor = page.cursor;\n\t\tif (selectedBalance >= amount) break;\n\t\tif (!page.hasNextPage) break;\n\t} while (cursor !== null);\n\n\tif (selectedBalance < amount || selected.length === 0) {\n\t\tthrow new Error(\n\t\t\t`publisher '${signer.name}' has insufficient ${coinType} for ${purpose}: ` +\n\t\t\t\t`required ${amount}, available ${selectedBalance}.`,\n\t\t);\n\t}\n\n\treturn { selected, selectedBalance };\n};\n\nexport const setExplicitSeedGasPayment = async (\n\ttx: Transaction,\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tsuiDepositAmount: bigint,\n) => {\n\tconst requiredBalance = SEED_GAS_BUDGET + suiDepositAmount;\n\tconst { selected } = await selectOwnedCoinsForBalance(\n\t\tsdk,\n\t\tsigner,\n\t\tSUI_TYPE,\n\t\trequiredBalance,\n\t\t'DeepBook seed gas and SUI deposits',\n\t);\n\tconst gasRefs = await Promise.all(\n\t\tselected.map((coin) => currentLedgerObjectRef(sdk, coin.objectId)),\n\t);\n\ttx.setGasBudget(SEED_GAS_BUDGET);\n\ttx.setGasPrice(LOCALNET_REFERENCE_GAS_PRICE);\n\ttx.setGasPayment(gasRefs);\n};\n\nconst seedSuiDepositAmount = (\n\tpool: Pick<DeepbookPool, 'baseCoinType' | 'quoteCoinType'>,\n\tseed: DeepbookPoolSeedLiquidity,\n): bigint =>\n\t(normalizeStructTag(pool.baseCoinType) === SUI_TYPE ? (seed.baseAmount ?? 0n) : 0n) +\n\t(normalizeStructTag(pool.quoteCoinType) === SUI_TYPE ? (seed.quoteAmount ?? 0n) : 0n);\n\nconst sharedObject = async (\n\ttx: Transaction,\n\tsdk: SuiSdkShim,\n\tobjectId: string,\n\tmutable: boolean,\n) => {\n\tconst raw = (await sdk.core.getObject({ objectId })) as {\n\t\treadonly object?: {\n\t\t\treadonly owner?: {\n\t\t\t\treadonly Shared?: {\n\t\t\t\t\treadonly initialSharedVersion?: string | number;\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t};\n\tconst initialSharedVersion = raw.object?.owner?.Shared?.initialSharedVersion;\n\tif (initialSharedVersion === undefined) {\n\t\tthrow new Error(`DeepBook object '${objectId}' is not shared.`);\n\t}\n\treturn tx.sharedObjectRef({\n\t\tobjectId,\n\t\tinitialSharedVersion,\n\t\tmutable,\n\t});\n};\n\nconst splitOwnedCoinForBalance = async (\n\ttx: Transaction,\n\tsdk: SuiSdkShim,\n\tsigner: ResolvedSigner,\n\tcoinType: string,\n\tamount: bigint,\n) => {\n\tif (normalizeStructTag(coinType) === SUI_TYPE) {\n\t\tconst [coin] = tx.splitCoins(tx.gas, [tx.pure.u64(amount)]);\n\t\treturn coin;\n\t}\n\n\tconst { selected, selectedBalance } = await selectOwnedCoinsForBalance(\n\t\tsdk,\n\t\tsigner,\n\t\tcoinType,\n\t\tamount,\n\t\t'DeepBook seed deposit',\n\t);\n\n\tconst firstSelected = selected[0];\n\tif (firstSelected === undefined) {\n\t\tthrow new Error(\n\t\t\t`publisher '${signer.name}' has no ${coinType} coins for DeepBook seed deposit.`,\n\t\t);\n\t}\n\tconst first = await currentLedgerObjectRef(sdk, firstSelected.objectId);\n\tconst rest = await Promise.all(\n\t\tselected.slice(1).map((coin) => currentLedgerObjectRef(sdk, coin.objectId)),\n\t);\n\tconst baseCoin = tx.objectRef(first);\n\tif (rest.length > 0) {\n\t\ttx.mergeCoins(\n\t\t\tbaseCoin,\n\t\t\trest.map((coin) => tx.objectRef(coin)),\n\t\t);\n\t}\n\tif (selectedBalance === amount) return baseCoin;\n\tconst [coin] = tx.splitCoins(baseCoin, [tx.pure.u64(amount)]);\n\treturn coin;\n};\n\nexport const seedDeepbookPools = (\n\tpublisher: ArtifactPublisher,\n\tsdk: SuiSdkShim,\n\tchain: string,\n\tsigner: ResolvedSigner,\n\tpkg: DeepbookDeployment,\n\tspecs: ReadonlyArray<ResolvedDeepbookPoolSpec>,\n\tpools: ReadonlyArray<DeepbookPool>,\n): Effect.Effect<ReadonlyArray<DeepbookPoolSeedResult>, DeepbookPluginError, Scope.Scope> =>\n\tEffect.gen(function* () {\n\t\tconst seeded: DeepbookPoolSeedResult[] = [];\n\t\tfor (const spec of specs) {\n\t\t\tconst seed = spec.seed;\n\t\t\tif (seed === undefined || seed.orders.length === 0) continue;\n\t\t\tconst pool = poolByName(pools, spec.name);\n\t\t\tif (pool === undefined) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tdeepbookPluginError('create-pools', `deepbook seed pool '${spec.name}' was not created.`),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst result = yield* acquireOnChainArtifact<\n\t\t\t\tCachedDeepbookSeedResult,\n\t\t\t\tCachedDeepbookSeedResult\n\t\t\t>(publisher, {\n\t\t\t\tnamespace: `deepbook/seed/${spec.name}`,\n\t\t\t\tchain: brandChainId(chain),\n\t\t\t\tcontentHash: seedInputsHash(pkg, signer, spec, pool),\n\t\t\t\tverify: (cached) => buildSeedVerifyProbe(sdk, cached),\n\t\t\t\tproduce: Effect.gen(function* () {\n\t\t\t\t\t\tyield* requestSeedFunding(\n\t\t\t\t\t\t\tspec.baseFundingStrategy,\n\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\tpool.baseCoinType,\n\t\t\t\t\t\t\tseed.baseAmount,\n\t\t\t\t\t\t);\n\t\t\t\t\t\tyield* requestSeedFunding(\n\t\t\t\t\t\t\tspec.quoteFundingStrategy,\n\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\tpool.quoteCoinType,\n\t\t\t\t\t\t\tseed.quoteAmount,\n\t\t\t\t\t\t);\n\n\t\t\t\t\t\tconst result = yield* executeSuiTxWithStaleObjectRetry({\n\t\t\t\t\t\t\tclient: sdk.client,\n\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\tbuild: async () => {\n\t\t\t\t\t\t\t\tconst tx = new Transaction();\n\t\t\t\t\t\t\t\ttx.setSender(signer.address);\n\t\t\t\t\t\t\t\tawait setExplicitSeedGasPayment(tx, sdk, signer, seedSuiDepositAmount(pool, seed));\n\t\t\t\t\t\t\t\tconst registry = await sharedObject(tx, sdk, pkg.registryId, true);\n\t\t\t\t\t\t\t\tconst poolObject = await sharedObject(tx, sdk, pool.poolId, true);\n\t\t\t\t\t\t\t\tconst balanceManager = tx.moveCall({\n\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::balance_manager::new`,\n\t\t\t\t\t\t\t\t\targuments: [],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::balance_manager::register_balance_manager`,\n\t\t\t\t\t\t\t\t\targuments: [balanceManager, registry],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tawait depositIntoBalanceManager(\n\t\t\t\t\t\t\t\t\ttx,\n\t\t\t\t\t\t\t\t\tsdk,\n\t\t\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\t\tbalanceManager,\n\t\t\t\t\t\t\t\t\tpool.baseCoinType,\n\t\t\t\t\t\t\t\t\tseed.baseAmount,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\tawait depositIntoBalanceManager(\n\t\t\t\t\t\t\t\t\ttx,\n\t\t\t\t\t\t\t\t\tsdk,\n\t\t\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\t\tbalanceManager,\n\t\t\t\t\t\t\t\t\tpool.quoteCoinType,\n\t\t\t\t\t\t\t\t\tseed.quoteAmount,\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst tradeProof = tx.moveCall({\n\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::balance_manager::generate_proof_as_owner`,\n\t\t\t\t\t\t\t\t\targuments: [balanceManager],\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tfor (const [index, order] of seed.orders.entries()) {\n\t\t\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::pool::place_limit_order`,\n\t\t\t\t\t\t\t\t\t\ttypeArguments: [pool.baseCoinType, pool.quoteCoinType],\n\t\t\t\t\t\t\t\t\t\targuments: [\n\t\t\t\t\t\t\t\t\t\t\tpoolObject,\n\t\t\t\t\t\t\t\t\t\t\tbalanceManager,\n\t\t\t\t\t\t\t\t\t\t\ttradeProof,\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(order.clientOrderId ?? BigInt(index + 1)),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u8(ORDER_TYPE_POST_ONLY),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u8(SELF_MATCHING_CANCEL_TAKER),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(order.price),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(order.quantity),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.bool(order.side === 'bid'),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.bool(order.payWithDeep ?? false),\n\t\t\t\t\t\t\t\t\t\t\ttx.pure.u64(MAX_TIMESTAMP),\n\t\t\t\t\t\t\t\t\t\t\ttx.object.clock(),\n\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttx.transferObjects([balanceManager], signer.address);\n\t\t\t\t\t\t\t\treturn tx.build({ client: sdk.client });\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t}).pipe(\n\t\t\t\t\t\t\tEffect.mapError(\n\t\t\t\t\t\t\t\t(err): ArtifactPublishError =>\n\t\t\t\t\t\t\t\t\tartifactPublishError(\n\t\t\t\t\t\t\t\t\t\t'produce-failed',\n\t\t\t\t\t\t\t\t\t\t`deepbook seed transaction failed for pool '${spec.name}': ${err.message}`,\n\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tif (result.$kind === 'FailedTransaction') {\n\t\t\t\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\t\t\t\tartifactPublishError(\n\t\t\t\t\t\t\t\t\t'produce-failed',\n\t\t\t\t\t\t\t\t\t`deepbook seed transaction on-chain execution failed for pool '${spec.name}' ` +\n\t\t\t\t\t\t\t\t\t\tformatExecutedFailure(result.FailedTransaction),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst receipt = result.Transaction;\n\n\t\t\t\t\t\tconst balanceManagerId = pickCreatedBalanceManager(receipt.objectChanges);\n\t\t\t\t\t\tif (balanceManagerId === null) {\n\t\t\t\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\t\t\t\tartifactPublishError(\n\t\t\t\t\t\t\t\t\t'produce-failed',\n\t\t\t\t\t\t\t\t\t`deepbook seed BalanceManager not found in objectChanges ` +\n\t\t\t\t\t\t\t\t\t\t`(digest=${receipt.digest}).`,\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn { poolName: spec.name, balanceManagerId, digest: receipt.digest };\n\t\t\t\t\t}),\n\t\t\t\t}).pipe(Effect.mapError((err) => mapArtifactError('create-pools', err)));\n\n\t\t\tseeded.push(result);\n\t\t}\n\t\treturn seeded;\n\t}).pipe(\n\t\tEffect.withSpan('devstack.plugin.deepbook.seedPools', {\n\t\t\tattributes: {\n\t\t\t\t[DeepbookSpans.packageId]: pkg.packageId,\n\t\t\t\t[DeepbookSpans.poolCount]: specs.filter((spec) => spec.seed !== undefined).length,\n\t\t\t},\n\t\t}),\n\t);\n"],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import "../../substrate/runtime/mode-errors.mjs";
1
2
  import { defineConfigError } from "../../substrate/runtime/config-validation.mjs";
2
3
  //#region src/plugins/deepbook/errors.ts
3
4
  const deepbookPluginError = (phase, message, parts = {}) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"errors.mjs","names":[],"sources":["../../../src/plugins/deepbook/errors.ts"],"sourcesContent":["// Deepbook plugin — typed errors.\n//\n// Errors raised and consumed inside the DeepBook plugin live here.\n// Cross-service errors that deepbook *consumes* but the substrate\n// raises (e.g. `ArtifactPublishError`, `SuiExecuteError`,\n// `ContainerRuntimeError`) come from the substrate's primitives — we\n// don't redeclare those.\n//\n// `ForkIncompatibleError` is a cross-cutting mode-refusal shape\n// owned by `substrate/runtime/mode-errors.ts`; deepbook contributes\n// the `deepbookLocal` variant via the factory in `index.ts`.\n//\n// Effect v4: plain interfaces with `_tag` discriminator (per\n// surrounding L2 subsystem style — STYLE_GUIDE §2). `Effect.catchTag`\n// matches on `_tag`.\n\n// `ForkIncompatibleError` is the canonical substrate shape — import for\n// local use; do NOT re-export from this barrel. Consumers reach the\n// canonical type via `substrate/runtime/mode-errors.ts` (or the\n// root barrel once wired). Re-exporting per-plugin would collide with\n// the walrus / seal barrels under a single root-barrel re-export.\nimport { ForkIncompatibleError } from '../../substrate/runtime/mode-errors.ts';\nimport { defineConfigError, type ConfigIssue } from '../../substrate/runtime/config-validation.ts';\n\n/** Phases for `DeepbookPluginError`. Closed sum — keeps the\n * cause-walker's display table small. */\nexport type DeepbookPhase =\n\t| 'image-pull'\n\t| 'network'\n\t| 'publish'\n\t| 'create-pools'\n\t| 'pyth-publish'\n\t| 'pyth-feed'\n\t| 'pyth-pusher'\n\t| 'indexer'\n\t| 'server'\n\t| 'market-maker'\n\t| 'fund-deep'\n\t| 'margin-publish'\n\t| 'margin-seed'\n\t| 'mint-deep'\n\t| 'mint-usdc';\n\n/** Generic Deepbook plugin error. Raised by the plugin's acquire\n * body, sugar factories, and per-phase helpers. */\nexport interface DeepbookPluginError {\n\treadonly _tag: 'DeepbookPluginError';\n\treadonly phase: DeepbookPhase;\n\treadonly message: string;\n\treadonly cause?: unknown;\n\t/** Optional subprocess capture envelope. */\n\treadonly stderr?: string;\n\treadonly stdout?: string;\n\treadonly exitCode?: number;\n}\n\nexport const deepbookPluginError = (\n\tphase: DeepbookPhase,\n\tmessage: string,\n\tparts: Omit<DeepbookPluginError, '_tag' | 'phase' | 'message'> = {},\n): DeepbookPluginError => ({ _tag: 'DeepbookPluginError', phase, message, ...parts });\n\n/**\n * Synchronous factory-time refusal when the user explicitly composes\n * the local deepbook deploy against a fork network.\n *\n * Deepbook's publish path requires the Move SDK JSON-RPC against a\n * read-write chain; sui-fork is read-only over gRPC `simulate`. We\n * refuse synchronously at factory time with an actionable hint\n * pointing at `deepbook.live(...)` (when implemented) or the known\n * canonical deployment branch.\n *\n * Primary refusal is TYPE-LEVEL via the `deepbookFor(network).<mode>`\n * mode-narrowed namespace — fork networks expose no `local` branch.\n * This runtime shape is defense-in-depth for callers that bypass\n * the typed namespace (e.g. via dynamic dispatch).\n */\nexport const forkIncompatibleError = (network: string): ForkIncompatibleError =>\n\tnew ForkIncompatibleError({\n\t\tvariant: 'deepbookLocal',\n\t\tnetwork,\n\t\tmessage: 'deepbook local deploy does not support fork networks.',\n\t\thint:\n\t\t\t'deepbook local publish requires JSON-RPC + signing rights; sui-fork only exposes gRPC simulate. ' +\n\t\t\t'Use deepbookFor(network).known({...}) to wrap an already-deployed deepbook instance.',\n\t});\n\n/** Configuration error — synchronous factory-time guards (missing\n * required fields, conflicting pool ids, ambiguous publisher). */\nexport interface DeepbookConfigError extends ConfigIssue {\n\treadonly _tag: 'DeepbookConfigError';\n}\n\nconst makeDeepbookConfigError = defineConfigError('DeepbookConfigError');\n\nexport const deepbookConfigError = (\n\tfield: string,\n\tmessage: string,\n\thint?: string,\n\tcause?: unknown,\n): DeepbookConfigError => makeDeepbookConfigError({ field, message, hint, cause });\n\n/** Union of every error a deepbook-plugin caller may encounter. */\nexport type DeepbookError = DeepbookPluginError | ForkIncompatibleError | DeepbookConfigError;\n\n/** Error tags this plugin contributes — surfaced to the cause walker\n * via `PluginErrorContribution`. */\nexport const DEEPBOOK_ERROR_TAGS: ReadonlyArray<DeepbookError['_tag']> = [\n\t'DeepbookPluginError',\n\t'ForkIncompatibleError',\n\t'DeepbookConfigError',\n] as const;\n"],"mappings":";;AAwDA,MAAa,uBACZ,OACA,SACA,QAAiE,EAAE,MACzC;CAAE,MAAM;CAAuB;CAAO;CAAS,GAAG;CAAO;AAiCpF,MAAM,0BAA0B,kBAAkB,sBAAsB;AAExE,MAAa,uBACZ,OACA,SACA,MACA,UACyB,wBAAwB;CAAE;CAAO;CAAS;CAAM;CAAO,CAAC;;;AAOlF,MAAa,sBAA4D;CACxE;CACA;CACA;CACA"}
1
+ {"version":3,"file":"errors.mjs","names":[],"sources":["../../../src/plugins/deepbook/errors.ts"],"sourcesContent":["// Deepbook plugin — typed errors.\n//\n// Errors raised and consumed inside the DeepBook plugin live here.\n// Cross-service errors that deepbook *consumes* but the substrate\n// raises (e.g. `ArtifactPublishError`, `SuiExecuteError`,\n// `ContainerRuntimeError`) come from the substrate's primitives — we\n// don't redeclare those.\n//\n// `ForkIncompatibleError` is a cross-cutting mode-refusal shape owned by\n// `substrate/runtime/mode-errors.ts`. Deepbook does NOT raise it itself\n// (there is no deepbook-side factory) and the local/known/override modes\n// never refuse on it directly; it stays in this plugin's error union +\n// `DEEPBOOK_ERROR_TAGS` as defense-in-depth so the cause walker still\n// attributes a mode-refusal surfaced through a deepbook dependency to the\n// deepbook plugin rather than wrapping it as an opaque `'publish'` error.\n//\n// Effect v4: plain interfaces with `_tag` discriminator (per\n// surrounding L2 subsystem style — STYLE_GUIDE §2). `Effect.catchTag`\n// matches on `_tag`.\n\n// `ForkIncompatibleError` is the canonical substrate shape — import for\n// local use; do NOT re-export from this barrel. Consumers reach the\n// canonical type via `substrate/runtime/mode-errors.ts` (or the\n// root barrel once wired). Re-exporting per-plugin would collide with\n// the walrus / seal barrels under a single root-barrel re-export.\nimport { ForkIncompatibleError } from '../../substrate/runtime/mode-errors.ts';\nimport { defineConfigError, type ConfigIssue } from '../../substrate/runtime/config-validation.ts';\n\n/** Phases for `DeepbookPluginError`. Closed sum — keeps the\n * cause-walker's display table small. */\nexport type DeepbookPhase =\n\t| 'image-pull'\n\t| 'network'\n\t| 'publish'\n\t| 'create-pools'\n\t| 'pyth-publish'\n\t| 'pyth-feed'\n\t| 'pyth-pusher'\n\t| 'indexer'\n\t| 'server'\n\t| 'market-maker'\n\t| 'fund-deep'\n\t| 'margin-publish'\n\t| 'margin-seed'\n\t| 'mint-deep'\n\t| 'mint-usdc';\n\n/** Generic Deepbook plugin error. Raised by the plugin's acquire\n * body, sugar factories, and per-phase helpers. */\nexport interface DeepbookPluginError {\n\treadonly _tag: 'DeepbookPluginError';\n\treadonly phase: DeepbookPhase;\n\treadonly message: string;\n\treadonly cause?: unknown;\n\t/** Optional subprocess capture envelope. */\n\treadonly stderr?: string;\n\treadonly stdout?: string;\n\treadonly exitCode?: number;\n}\n\nexport const deepbookPluginError = (\n\tphase: DeepbookPhase,\n\tmessage: string,\n\tparts: Omit<DeepbookPluginError, '_tag' | 'phase' | 'message'> = {},\n): DeepbookPluginError => ({ _tag: 'DeepbookPluginError', phase, message, ...parts });\n\n/** Configuration error — synchronous factory-time guards (missing\n * required fields, conflicting pool ids, ambiguous publisher). */\nexport interface DeepbookConfigError extends ConfigIssue {\n\treadonly _tag: 'DeepbookConfigError';\n}\n\nconst makeDeepbookConfigError = defineConfigError('DeepbookConfigError');\n\nexport const deepbookConfigError = (\n\tfield: string,\n\tmessage: string,\n\thint?: string,\n\tcause?: unknown,\n): DeepbookConfigError => makeDeepbookConfigError({ field, message, hint, cause });\n\n/** Union of every error a deepbook-plugin caller may encounter. */\nexport type DeepbookError = DeepbookPluginError | ForkIncompatibleError | DeepbookConfigError;\n\n/** Error tags this plugin contributes — surfaced to the cause walker\n * via `PluginErrorContribution`. */\nexport const DEEPBOOK_ERROR_TAGS: ReadonlyArray<DeepbookError['_tag']> = [\n\t'DeepbookPluginError',\n\t'ForkIncompatibleError',\n\t'DeepbookConfigError',\n] as const;\n"],"mappings":";;;AA4DA,MAAa,uBACZ,OACA,SACA,QAAiE,EAAE,MACzC;CAAE,MAAM;CAAuB;CAAO;CAAS,GAAG;CAAO;AAQpF,MAAM,0BAA0B,kBAAkB,sBAAsB;AAExE,MAAa,uBACZ,OACA,SACA,MACA,UACyB,wBAAwB;CAAE;CAAO;CAAS;CAAM;CAAO,CAAC;;;AAOlF,MAAa,sBAA4D;CACxE;CACA;CACA;CACA"}
@@ -1,3 +1,8 @@
1
+ import { signAndDispatch } from "../../substrate/runtime/sui-execute/sign-and-dispatch.mjs";
2
+ import { formatExecutedFailure } from "../../substrate/runtime/sui-execute/index.mjs";
3
+ import { AccountSpans } from "../account/spans.mjs";
4
+ import "../account/index.mjs";
5
+ import { DeepbookSpans } from "./spans.mjs";
1
6
  import { deepbookPluginError } from "./errors.mjs";
2
7
  import { Effect } from "effect";
3
8
  import { Transaction } from "@mysten/sui/transactions";
@@ -15,16 +20,19 @@ const decimalToRaw = (value, scalar, round) => {
15
20
  return Effect.succeed(BigInt(round === "ceil" ? Math.ceil(scaled) : Math.floor(scaled)));
16
21
  };
17
22
  const applyInputBuffer = (raw, bufferBps) => (raw * (10000n + bufferBps) + 9999n) / 10000n;
18
- const buildDeepbookClient = (req, suiSdk) => new DeepBookClient({
19
- address: req.account.address,
23
+ const buildDeepbookClient = (account, suiSdk) => new DeepBookClient({
24
+ address: account.address,
20
25
  client: suiSdk.client,
21
26
  network: "testnet"
22
27
  });
23
28
  const makeDeepbookDeepFundingStrategy = (opts) => ({
24
29
  usesAccountSigner: true,
30
+ requiresRecipientAccount: true,
25
31
  request: (req) => Effect.gen(function* () {
26
32
  if (req.amount <= 0n) return;
27
- const deepBook = buildDeepbookClient(req, opts.suiSdk);
33
+ const account = req.account;
34
+ if (account === void 0) return yield* Effect.fail(deepbookPluginError("fund-deep", "DeepBook DEEP funding spends the recipient account’s own SUI, so it requires a resolved account signer."));
35
+ const deepBook = buildDeepbookClient(account, opts.suiSdk);
28
36
  const quote = yield* Effect.tryPromise({
29
37
  try: () => deepBook.getQuoteQuantityIn(DEEPBOOK_DEEP_POOL_KEY, req.amount, false),
30
38
  catch: (cause) => deepbookPluginError("fund-deep", `DeepBook DEEP funding quote failed for ${req.amount} base units.`, { cause })
@@ -35,38 +43,43 @@ const makeDeepbookDeepFundingStrategy = (opts) => ({
35
43
  if (quoteInRaw <= 0n) return yield* Effect.fail(deepbookPluginError("fund-deep", `DeepBook DEEP funding quote returned zero SUI input for ${req.amount} base units.`));
36
44
  const quoteAmountRaw = applyInputBuffer(quoteInRaw, opts.inputBufferBps ?? DEFAULT_INPUT_BUFFER_BPS);
37
45
  const deepAmountRaw = yield* decimalToRaw(quote.deepRequired, DEEP_SCALAR, "ceil");
38
- yield* req.account.withTransactionSigner((lockedSigner) => Effect.gen(function* () {
39
- const tx = yield* Effect.try({
40
- try: () => {
41
- const transaction = new Transaction();
42
- transaction.setSender(req.account.address);
43
- const [baseCoin, quoteCoin, deepCoin] = transaction.add(deepBook.deepBook.swapExactQuantity({
44
- poolKey: DEEPBOOK_DEEP_POOL_KEY,
45
- amount: quoteAmountRaw,
46
- deepAmount: deepAmountRaw,
47
- minOut: req.amount,
48
- isBaseToCoin: false
49
- }));
50
- transaction.transferObjects([
51
- baseCoin,
52
- quoteCoin,
53
- deepCoin
54
- ], req.address);
55
- return transaction;
56
- },
57
- catch: (cause) => deepbookPluginError("fund-deep", "DeepBook DEEP funding transaction build failed.", { cause })
58
- });
59
- const txBytes = yield* Effect.tryPromise({
60
- try: () => tx.build({ client: opts.suiSdk.client }),
61
- catch: (cause) => deepbookPluginError("fund-deep", `DeepBook DEEP funding transaction serialization failed: ${cause instanceof Error ? cause.message : String(cause)}.`, { cause })
62
- });
63
- yield* lockedSigner.signAndExecute(txBytes).pipe(Effect.mapError((cause) => deepbookPluginError("fund-deep", `DeepBook DEEP funding transaction failed for account '${req.account.name}'.`, { cause })));
64
- })).pipe(Effect.asVoid);
46
+ yield* signAndDispatch({
47
+ signerSource: account,
48
+ buildTxBytes: () => Effect.gen(function* () {
49
+ const tx = yield* Effect.try({
50
+ try: () => {
51
+ const transaction = new Transaction();
52
+ transaction.setSender(account.address);
53
+ const [baseCoin, quoteCoin, deepCoin] = transaction.add(deepBook.deepBook.swapExactQuantity({
54
+ poolKey: DEEPBOOK_DEEP_POOL_KEY,
55
+ amount: quoteAmountRaw,
56
+ deepAmount: deepAmountRaw,
57
+ minOut: req.amount,
58
+ isBaseToCoin: false
59
+ }));
60
+ transaction.transferObjects([
61
+ baseCoin,
62
+ quoteCoin,
63
+ deepCoin
64
+ ], req.address);
65
+ return transaction;
66
+ },
67
+ catch: (cause) => deepbookPluginError("fund-deep", "DeepBook DEEP funding transaction build failed.", { cause })
68
+ });
69
+ return yield* Effect.tryPromise({
70
+ try: () => tx.build({ client: opts.suiSdk.client }),
71
+ catch: (cause) => deepbookPluginError("fund-deep", `DeepBook DEEP funding transaction serialization failed: ${cause instanceof Error ? cause.message : String(cause)}.`, { cause })
72
+ });
73
+ }),
74
+ mapSignError: (cause) => deepbookPluginError("fund-deep", `DeepBook DEEP funding transaction failed for account '${account.name}'.`, { cause }),
75
+ onFailed: (failure) => Effect.fail(deepbookPluginError("fund-deep", `DeepBook DEEP funding transaction failed on-chain for account '${account.name}' (address=${account.address}) ` + formatExecutedFailure(failure))),
76
+ onSuccess: () => Effect.void
77
+ });
65
78
  }).pipe(Effect.withSpan("devstack.plugin.deepbook.fundDeep", { attributes: {
66
- "account.name": req.account.name,
67
- "account.address": req.account.address,
68
- "fund.coin": DEEPBOOK_TESTNET_DEEP_COIN_TYPE,
69
- "fund.amount": req.amount.toString()
79
+ [AccountSpans.name]: req.account?.name ?? "(unresolved)",
80
+ [AccountSpans.address]: req.account?.address ?? req.address,
81
+ [DeepbookSpans.fundCoin]: DEEPBOOK_TESTNET_DEEP_COIN_TYPE,
82
+ [DeepbookSpans.fundAmount]: req.amount.toString()
70
83
  } }))
71
84
  });
72
85
  const makeDeepbookDeepFundingContribution = (strategy) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"faucet-strategy.mjs","names":[],"sources":["../../../src/plugins/deepbook/faucet-strategy.ts"],"sourcesContent":["// DeepBook DEEP funding strategy.\n//\n// Testnet DEEP has no public mint faucet. The usable funding path is a\n// real DeepBook swap from the requesting account's SUI balance into\n// DEEP. This strategy is contributed by the known testnet DeepBook\n// plugin under the standard `coinType:<fullCoinType>` key, so accounts\n// can request DEEP through the same cross-cutting funding pipeline as\n// SUI and WAL.\n\nimport { Effect } from 'effect';\n\nimport { DeepBookClient, type DeepBookCompatibleClient } from '@mysten/deepbook-v3';\nimport { Transaction } from '@mysten/sui/transactions';\n\nimport type { StrategyContributorDecl } from '../../contracts/strategy-contributor.ts';\nimport type { AccountFundingRequest, AccountFundingStrategy } from '../account/funding.ts';\nimport type { SuiSdkShim } from '../sui/chain-probe.ts';\n\nimport { deepbookPluginError, type DeepbookPluginError } from './errors.ts';\n\nexport const DEEPBOOK_TESTNET_DEEP_COIN_TYPE =\n\t'0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP' as const;\nexport const DEEPBOOK_DEEP_FAUCET_STRATEGY_KEY =\n\t`coinType:${DEEPBOOK_TESTNET_DEEP_COIN_TYPE}` as const;\n\nconst DEEPBOOK_DEEP_POOL_KEY = 'DEEP_SUI';\nconst DEEP_SCALAR = 1_000_000n;\nconst SUI_SCALAR = 1_000_000_000n;\nconst DEFAULT_INPUT_BUFFER_BPS = 500n;\n\ntype TransactionBuildClient = Parameters<Transaction['build']>[0] extends\n\t| { readonly client?: infer Client }\n\t| undefined\n\t? Client\n\t: never;\n\nexport interface DeepbookDeepFundingStrategyOptions {\n\treadonly suiSdk: SuiSdkShim;\n\t/** Extra SUI input above the quote. 500 bps means 5%. */\n\treadonly inputBufferBps?: bigint;\n}\n\nexport type DeepbookDeepFundingStrategy = AccountFundingStrategy<DeepbookPluginError>;\n\nconst decimalToRaw = (\n\tvalue: number,\n\tscalar: bigint,\n\tround: 'ceil' | 'floor',\n): Effect.Effect<bigint, DeepbookPluginError> => {\n\tconst scaled = value * Number(scalar);\n\tif (!Number.isFinite(scaled) || scaled < 0) {\n\t\treturn Effect.fail(\n\t\t\tdeepbookPluginError(\n\t\t\t\t'fund-deep',\n\t\t\t\t`DeepBook quote returned an invalid decimal amount: ${value}.`,\n\t\t\t),\n\t\t);\n\t}\n\treturn Effect.succeed(BigInt(round === 'ceil' ? Math.ceil(scaled) : Math.floor(scaled)));\n};\n\nconst applyInputBuffer = (raw: bigint, bufferBps: bigint): bigint =>\n\t(raw * (10_000n + bufferBps) + 9_999n) / 10_000n;\n\nconst buildDeepbookClient = (req: AccountFundingRequest, suiSdk: SuiSdkShim): DeepBookClient =>\n\tnew DeepBookClient({\n\t\taddress: req.account.address,\n\t\tclient: suiSdk.client as DeepBookCompatibleClient,\n\t\tnetwork: 'testnet',\n\t});\n\nexport const makeDeepbookDeepFundingStrategy = (\n\topts: DeepbookDeepFundingStrategyOptions,\n): DeepbookDeepFundingStrategy => ({\n\tusesAccountSigner: true,\n\trequest: (req) =>\n\t\tEffect.gen(function* () {\n\t\t\tif (req.amount <= 0n) return;\n\n\t\t\tconst deepBook = buildDeepbookClient(req, opts.suiSdk);\n\t\t\tconst quote = yield* Effect.tryPromise({\n\t\t\t\ttry: () => deepBook.getQuoteQuantityIn(DEEPBOOK_DEEP_POOL_KEY, req.amount, false),\n\t\t\t\tcatch: (cause): DeepbookPluginError =>\n\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t`DeepBook DEEP funding quote failed for ${req.amount} base units.`,\n\t\t\t\t\t\t{ cause },\n\t\t\t\t\t),\n\t\t\t});\n\n\t\t\tconst baseOutRaw = yield* decimalToRaw(quote.baseOut, DEEP_SCALAR, 'floor');\n\t\t\tif (baseOutRaw < req.amount) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t`DeepBook DEEP funding quote cannot satisfy ${req.amount} base units; quoted ${baseOutRaw}.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst quoteInRaw = yield* decimalToRaw(quote.quoteIn, SUI_SCALAR, 'ceil');\n\t\t\tif (quoteInRaw <= 0n) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t`DeepBook DEEP funding quote returned zero SUI input for ${req.amount} base units.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst quoteAmountRaw = applyInputBuffer(\n\t\t\t\tquoteInRaw,\n\t\t\t\topts.inputBufferBps ?? DEFAULT_INPUT_BUFFER_BPS,\n\t\t\t);\n\t\t\tconst deepAmountRaw = yield* decimalToRaw(quote.deepRequired, DEEP_SCALAR, 'ceil');\n\n\t\t\tyield* req.account\n\t\t\t\t.withTransactionSigner((lockedSigner) =>\n\t\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\t\tconst tx = yield* Effect.try({\n\t\t\t\t\t\t\ttry: () => {\n\t\t\t\t\t\t\t\tconst transaction = new Transaction();\n\t\t\t\t\t\t\t\ttransaction.setSender(req.account.address);\n\t\t\t\t\t\t\t\tconst [baseCoin, quoteCoin, deepCoin] = transaction.add(\n\t\t\t\t\t\t\t\t\tdeepBook.deepBook.swapExactQuantity({\n\t\t\t\t\t\t\t\t\t\tpoolKey: DEEPBOOK_DEEP_POOL_KEY,\n\t\t\t\t\t\t\t\t\t\tamount: quoteAmountRaw,\n\t\t\t\t\t\t\t\t\t\tdeepAmount: deepAmountRaw,\n\t\t\t\t\t\t\t\t\t\tminOut: req.amount,\n\t\t\t\t\t\t\t\t\t\tisBaseToCoin: false,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\ttransaction.transferObjects([baseCoin, quoteCoin, deepCoin], req.address);\n\t\t\t\t\t\t\t\treturn transaction;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcatch: (cause): DeepbookPluginError =>\n\t\t\t\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t\t\t\t'DeepBook DEEP funding transaction build failed.',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tconst txBytes = yield* Effect.tryPromise({\n\t\t\t\t\t\t\ttry: () =>\n\t\t\t\t\t\t\t\ttx.build({\n\t\t\t\t\t\t\t\t\tclient: opts.suiSdk.client as TransactionBuildClient,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\tcatch: (cause): DeepbookPluginError =>\n\t\t\t\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t\t\t\t`DeepBook DEEP funding transaction serialization failed: ${\n\t\t\t\t\t\t\t\t\t\tcause instanceof Error ? cause.message : String(cause)\n\t\t\t\t\t\t\t\t\t}.`,\n\t\t\t\t\t\t\t\t\t{ cause },\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tyield* lockedSigner\n\t\t\t\t\t\t\t.signAndExecute(txBytes)\n\t\t\t\t\t\t\t.pipe(\n\t\t\t\t\t\t\t\tEffect.mapError(\n\t\t\t\t\t\t\t\t\t(cause): DeepbookPluginError =>\n\t\t\t\t\t\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t\t\t\t\t\t`DeepBook DEEP funding transaction failed for account '${req.account.name}'.`,\n\t\t\t\t\t\t\t\t\t\t\t{ cause },\n\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t);\n\t\t\t\t\t}),\n\t\t\t\t)\n\t\t\t\t.pipe(Effect.asVoid);\n\t\t}).pipe(\n\t\t\tEffect.withSpan('devstack.plugin.deepbook.fundDeep', {\n\t\t\t\tattributes: {\n\t\t\t\t\t'account.name': req.account.name,\n\t\t\t\t\t'account.address': req.account.address,\n\t\t\t\t\t'fund.coin': DEEPBOOK_TESTNET_DEEP_COIN_TYPE,\n\t\t\t\t\t'fund.amount': req.amount.toString(),\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n});\n\nexport const makeDeepbookDeepFundingContribution = (\n\tstrategy: DeepbookDeepFundingStrategy,\n): StrategyContributorDecl<\n\ttypeof DEEPBOOK_DEEP_FAUCET_STRATEGY_KEY,\n\tDeepbookDeepFundingStrategy\n> => ({\n\tkind: 'strategy-contributor',\n\tcapabilityKey: DEEPBOOK_DEEP_FAUCET_STRATEGY_KEY,\n\tstrategy,\n\tautoMounted: true,\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"faucet-strategy.mjs","names":[],"sources":["../../../src/plugins/deepbook/faucet-strategy.ts"],"sourcesContent":["// DeepBook DEEP funding strategy.\n//\n// Testnet DEEP has no public mint faucet. The usable funding path is a\n// real DeepBook swap from the requesting account's SUI balance into\n// DEEP. This strategy is contributed by the known testnet DeepBook\n// plugin under the standard `coinType:<fullCoinType>` key, so accounts\n// can request DEEP through the same cross-cutting funding pipeline as\n// SUI and WAL.\n\nimport { Effect } from 'effect';\n\nimport { DeepBookClient, type DeepBookCompatibleClient } from '@mysten/deepbook-v3';\nimport { Transaction } from '@mysten/sui/transactions';\n\nimport type { StrategyContributorDecl } from '../../contracts/strategy-contributor.ts';\nimport {\n\tAccountSpans,\n\ttype AccountFundingRequest,\n\ttype AccountFundingStrategy,\n} from '../account/index.ts';\nimport type { SuiSdkShim } from '../sui/index.ts';\nimport { formatExecutedFailure } from '../../substrate/runtime/sui-execute/index.ts';\nimport { signAndDispatch } from '../../substrate/runtime/sui-execute/sign-and-dispatch.ts';\n\nimport { deepbookPluginError, type DeepbookPluginError } from './errors.ts';\nimport { DeepbookSpans } from './spans.ts';\n\nexport const DEEPBOOK_TESTNET_DEEP_COIN_TYPE =\n\t'0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP' as const;\nexport const DEEPBOOK_DEEP_FAUCET_STRATEGY_KEY =\n\t`coinType:${DEEPBOOK_TESTNET_DEEP_COIN_TYPE}` as const;\n\nconst DEEPBOOK_DEEP_POOL_KEY = 'DEEP_SUI';\nconst DEEP_SCALAR = 1_000_000n;\nconst SUI_SCALAR = 1_000_000_000n;\nconst DEFAULT_INPUT_BUFFER_BPS = 500n;\n\nexport interface DeepbookDeepFundingStrategyOptions {\n\treadonly suiSdk: SuiSdkShim;\n\t/** Extra SUI input above the quote. 500 bps means 5%. */\n\treadonly inputBufferBps?: bigint;\n}\n\nexport type DeepbookDeepFundingStrategy = AccountFundingStrategy<DeepbookPluginError>;\n\nconst decimalToRaw = (\n\tvalue: number,\n\tscalar: bigint,\n\tround: 'ceil' | 'floor',\n): Effect.Effect<bigint, DeepbookPluginError> => {\n\tconst scaled = value * Number(scalar);\n\tif (!Number.isFinite(scaled) || scaled < 0) {\n\t\treturn Effect.fail(\n\t\t\tdeepbookPluginError(\n\t\t\t\t'fund-deep',\n\t\t\t\t`DeepBook quote returned an invalid decimal amount: ${value}.`,\n\t\t\t),\n\t\t);\n\t}\n\treturn Effect.succeed(BigInt(round === 'ceil' ? Math.ceil(scaled) : Math.floor(scaled)));\n};\n\nconst applyInputBuffer = (raw: bigint, bufferBps: bigint): bigint =>\n\t(raw * (10_000n + bufferBps) + 9_999n) / 10_000n;\n\nconst buildDeepbookClient = (\n\taccount: NonNullable<AccountFundingRequest['account']>,\n\tsuiSdk: SuiSdkShim,\n): DeepBookClient =>\n\tnew DeepBookClient({\n\t\taddress: account.address,\n\t\tclient: suiSdk.client as DeepBookCompatibleClient,\n\t\tnetwork: 'testnet',\n\t});\n\nexport const makeDeepbookDeepFundingStrategy = (\n\topts: DeepbookDeepFundingStrategyOptions,\n): DeepbookDeepFundingStrategy => ({\n\tusesAccountSigner: true,\n\t// The swap buys DEEP with the recipient account's own SUI, so the recipient\n\t// must be a resolved account with a signer — funding an arbitrary 0x address\n\t// is rejected by the dispatcher/dashboard on this flag.\n\trequiresRecipientAccount: true,\n\trequest: (req) =>\n\t\tEffect.gen(function* () {\n\t\t\tif (req.amount <= 0n) return;\n\n\t\t\tconst account = req.account;\n\t\t\tif (account === undefined) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t'DeepBook DEEP funding spends the recipient account’s own SUI, so it requires a resolved account signer.',\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst deepBook = buildDeepbookClient(account, opts.suiSdk);\n\t\t\tconst quote = yield* Effect.tryPromise({\n\t\t\t\ttry: () => deepBook.getQuoteQuantityIn(DEEPBOOK_DEEP_POOL_KEY, req.amount, false),\n\t\t\t\tcatch: (cause): DeepbookPluginError =>\n\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t`DeepBook DEEP funding quote failed for ${req.amount} base units.`,\n\t\t\t\t\t\t{ cause },\n\t\t\t\t\t),\n\t\t\t});\n\n\t\t\tconst baseOutRaw = yield* decimalToRaw(quote.baseOut, DEEP_SCALAR, 'floor');\n\t\t\tif (baseOutRaw < req.amount) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t`DeepBook DEEP funding quote cannot satisfy ${req.amount} base units; quoted ${baseOutRaw}.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst quoteInRaw = yield* decimalToRaw(quote.quoteIn, SUI_SCALAR, 'ceil');\n\t\t\tif (quoteInRaw <= 0n) {\n\t\t\t\treturn yield* Effect.fail(\n\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t`DeepBook DEEP funding quote returned zero SUI input for ${req.amount} base units.`,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst quoteAmountRaw = applyInputBuffer(\n\t\t\t\tquoteInRaw,\n\t\t\t\topts.inputBufferBps ?? DEFAULT_INPUT_BUFFER_BPS,\n\t\t\t);\n\t\t\tconst deepAmountRaw = yield* decimalToRaw(quote.deepRequired, DEEP_SCALAR, 'ceil');\n\n\t\t\tyield* signAndDispatch({\n\t\t\t\tsignerSource: account,\n\t\t\t\tbuildTxBytes: () =>\n\t\t\t\t\tEffect.gen(function* () {\n\t\t\t\t\t\tconst tx = yield* Effect.try({\n\t\t\t\t\t\t\ttry: () => {\n\t\t\t\t\t\t\t\tconst transaction = new Transaction();\n\t\t\t\t\t\t\t\ttransaction.setSender(account.address);\n\t\t\t\t\t\t\t\tconst [baseCoin, quoteCoin, deepCoin] = transaction.add(\n\t\t\t\t\t\t\t\t\tdeepBook.deepBook.swapExactQuantity({\n\t\t\t\t\t\t\t\t\t\tpoolKey: DEEPBOOK_DEEP_POOL_KEY,\n\t\t\t\t\t\t\t\t\t\tamount: quoteAmountRaw,\n\t\t\t\t\t\t\t\t\t\tdeepAmount: deepAmountRaw,\n\t\t\t\t\t\t\t\t\t\tminOut: req.amount,\n\t\t\t\t\t\t\t\t\t\tisBaseToCoin: false,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\ttransaction.transferObjects([baseCoin, quoteCoin, deepCoin], req.address);\n\t\t\t\t\t\t\t\treturn transaction;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcatch: (cause): DeepbookPluginError =>\n\t\t\t\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t\t\t\t'DeepBook DEEP funding transaction build failed.',\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\tcause,\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\treturn yield* Effect.tryPromise({\n\t\t\t\t\t\t\ttry: () => tx.build({ client: opts.suiSdk.client }),\n\t\t\t\t\t\t\tcatch: (cause): DeepbookPluginError =>\n\t\t\t\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t\t\t\t`DeepBook DEEP funding transaction serialization failed: ${\n\t\t\t\t\t\t\t\t\t\tcause instanceof Error ? cause.message : String(cause)\n\t\t\t\t\t\t\t\t\t}.`,\n\t\t\t\t\t\t\t\t\t{ cause },\n\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t});\n\t\t\t\t\t}),\n\t\t\t\tmapSignError: (cause): DeepbookPluginError =>\n\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t`DeepBook DEEP funding transaction failed for account '${account.name}'.`,\n\t\t\t\t\t\t{ cause },\n\t\t\t\t\t),\n\t\t\t\tonFailed: (failure) =>\n\t\t\t\t\tEffect.fail(\n\t\t\t\t\t\tdeepbookPluginError(\n\t\t\t\t\t\t\t'fund-deep',\n\t\t\t\t\t\t\t`DeepBook DEEP funding transaction failed on-chain ` +\n\t\t\t\t\t\t\t\t`for account '${account.name}' (address=${account.address}) ` +\n\t\t\t\t\t\t\t\tformatExecutedFailure(failure),\n\t\t\t\t\t\t),\n\t\t\t\t\t),\n\t\t\t\tonSuccess: () => Effect.void,\n\t\t\t});\n\t\t}).pipe(\n\t\t\tEffect.withSpan('devstack.plugin.deepbook.fundDeep', {\n\t\t\t\tattributes: {\n\t\t\t\t\t[AccountSpans.name]: req.account?.name ?? '(unresolved)',\n\t\t\t\t\t[AccountSpans.address]: req.account?.address ?? req.address,\n\t\t\t\t\t[DeepbookSpans.fundCoin]: DEEPBOOK_TESTNET_DEEP_COIN_TYPE,\n\t\t\t\t\t[DeepbookSpans.fundAmount]: req.amount.toString(),\n\t\t\t\t},\n\t\t\t}),\n\t\t),\n});\n\nexport const makeDeepbookDeepFundingContribution = (\n\tstrategy: DeepbookDeepFundingStrategy,\n): StrategyContributorDecl<\n\ttypeof DEEPBOOK_DEEP_FAUCET_STRATEGY_KEY,\n\tDeepbookDeepFundingStrategy\n> => ({\n\tkind: 'strategy-contributor',\n\tcapabilityKey: DEEPBOOK_DEEP_FAUCET_STRATEGY_KEY,\n\tstrategy,\n\tautoMounted: true,\n});\n"],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { contentHash } from "../../substrate/brand.mjs";
2
+ import { createHash } from "node:crypto";
3
+ //#region src/plugins/deepbook/hash.ts
4
+ /** sha256 the canonical input string and brand it as a `ContentHash`. */
5
+ const stableContentHash = (input) => contentHash(createHash("sha256").update(input).digest("hex"));
6
+ //#endregion
7
+ export { stableContentHash };
8
+
9
+ //# sourceMappingURL=hash.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.mjs","names":["brandContentHash"],"sources":["../../../src/plugins/deepbook/hash.ts"],"sourcesContent":["// Shared stable content-hash helper for the DeepBook plugin family.\n//\n// `deploy.ts` (pools + seed cache keys) and `pyth/index.ts` (feed cache\n// key) both derive an `ArtifactPublisher` content hash from a canonical\n// `||`-joined input string. Both used the identical sha256 → branded\n// `ContentHash` derivation; this module is the single definition both\n// import so the brand stays consistent across the DeepBook artifacts.\n\nimport { createHash } from 'node:crypto';\n\nimport { contentHash as brandContentHash, type ContentHash } from '../../substrate/brand.ts';\n\n/** sha256 the canonical input string and brand it as a `ContentHash`. */\nexport const stableContentHash = (input: string): ContentHash =>\n\tbrandContentHash(createHash('sha256').update(input).digest('hex'));\n"],"mappings":";;;;AAaA,MAAa,qBAAqB,UACjCA,YAAiB,WAAW,SAAS,CAAC,OAAO,MAAM,CAAC,OAAO,MAAM,CAAC"}
@@ -3,12 +3,11 @@ import { SnapshotableDecl } from "../../contracts/snapshotable.mjs";
3
3
  import { StrategyContributorDecl } from "../../contracts/strategy-contributor.mjs";
4
4
  import { Plugin, ResourceRef } from "../../substrate/plugin.mjs";
5
5
  import { ModeNamespace } from "../../api/mode-narrowed-factory.mjs";
6
- import { SeedObjectsAccumulator } from "../sui/seed-objects.mjs";
7
6
  import { SuiClient } from "../sui/mode/shared.mjs";
8
7
  import { SuiOptions } from "../sui/mode/spec.mjs";
9
8
  import { DeepbookConfigError, DeepbookError, DeepbookPhase, DeepbookPluginError } from "./errors.mjs";
10
9
  import { DeepbookDeepFundingStrategy } from "./faucet-strategy.mjs";
11
- import { AccountMemberAlias, CoinMemberAlias, DEEP_PRICE_FEED_ID, DeepbookPackageMember, DeepbookPool, DeepbookPoolCoin, DeepbookPoolSeedLiquidity, DeepbookPoolSeedOrder, DeepbookPoolSpec, PythFeed, PythHandle, PythOptions, PythPackageMember, PythPriceFeedId, SUI_PRICE_FEED_ID, USDC_PRICE_FEED_ID, pythPriceFeedId } from "./types.mjs";
10
+ import { AccountMemberAlias, CoinMemberAlias, DEEP_PRICE_FEED_ID, DeepbookPackageMember, DeepbookPool, DeepbookPoolCoin, DeepbookPoolSeedLiquidity, DeepbookPoolSeedOrder, DeepbookPoolSpec, PythHandle, PythOptions, SUI_PRICE_FEED_ID, USDC_PRICE_FEED_ID, pythPriceFeedId } from "./types.mjs";
12
11
  import { DeepbookBindings, DeepbookPoolBinding } from "./codegen.mjs";
13
12
  //#region src/plugins/deepbook/index.d.ts
14
13
  /** The deepbook resolved value. Mode-asymmetric:
@@ -95,15 +94,12 @@ type PoolCoinRefTuple<Pools extends ReadonlyArray<DeepbookPoolSpec>> = Pools ext
95
94
  type PythRefs<Pyth extends PythOptions | undefined> = Pyth extends PythOptions<infer Package, infer Pusher> ? readonly [Pusher, Package] : readonly [];
96
95
  declare const buildOverridePlugin: (opts: DeepbookOverrideOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
97
96
  readonly mode: SuiOptions["mode"];
98
- readonly seedObjects: SeedObjectsAccumulator;
99
97
  }>], readonly [SnapshotableDecl, CodegenableDecl<"deepbook-network">]>;
100
98
  declare const buildLocalPlugin: <const Publisher extends AccountMemberAlias, const Package extends DeepbookPackageMember, const Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [], const Pyth extends PythOptions | undefined = undefined>(opts: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
101
99
  readonly mode: SuiOptions["mode"];
102
- readonly seedObjects: SeedObjectsAccumulator;
103
100
  }>, Publisher, Package, ...PythRefs<Pyth>, ...PoolCoinRefTuple<Pools>], readonly [SnapshotableDecl, CodegenableDecl<"deepbook-network">]>;
104
101
  declare const buildKnownPlugin: (opts: DeepbookKnownOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
105
102
  readonly mode: SuiOptions["mode"];
106
- readonly seedObjects: SeedObjectsAccumulator;
107
103
  }>], readonly [SnapshotableDecl, CodegenableDecl<"deepbook-network">, ...StrategyContributorDecl<"coinType:0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP", DeepbookDeepFundingStrategy>[]]>;
108
104
  /** Env-driven factory. Defaults to local mode on localnet when passed local
109
105
  * options. Explicit `override` and `known` modes bypass env inference. */
@@ -142,27 +138,22 @@ declare const deepbookFor: ModeNamespace<{
142
138
  local: {
143
139
  local: <const Publisher extends AccountMemberAlias, const Package extends DeepbookPackageMember, const Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [], const Pyth extends PythOptions | undefined = undefined>(opts: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
144
140
  readonly mode: SuiOptions["mode"];
145
- readonly seedObjects: SeedObjectsAccumulator;
146
141
  }>, Publisher, Package, ...PythRefs<Pyth>, ...PoolCoinRefTuple<Pools>], readonly [SnapshotableDecl, CodegenableDecl<"deepbook-network">]>;
147
142
  override: (opts: DeepbookOverrideOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
148
143
  readonly mode: SuiOptions["mode"];
149
- readonly seedObjects: SeedObjectsAccumulator;
150
144
  }>], readonly [SnapshotableDecl, CodegenableDecl<"deepbook-network">]>;
151
145
  known: (opts: DeepbookKnownOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
152
146
  readonly mode: SuiOptions["mode"];
153
- readonly seedObjects: SeedObjectsAccumulator;
154
147
  }>], readonly [SnapshotableDecl, CodegenableDecl<"deepbook-network">, ...StrategyContributorDecl<"coinType:0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP", DeepbookDeepFundingStrategy>[]]>;
155
148
  };
156
149
  live: {
157
150
  known: (opts: DeepbookKnownOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
158
151
  readonly mode: SuiOptions["mode"];
159
- readonly seedObjects: SeedObjectsAccumulator;
160
152
  }>], readonly [SnapshotableDecl, CodegenableDecl<"deepbook-network">, ...StrategyContributorDecl<"coinType:0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP", DeepbookDeepFundingStrategy>[]]>;
161
153
  };
162
154
  fork: {
163
155
  known: (opts: DeepbookKnownOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
164
156
  readonly mode: SuiOptions["mode"];
165
- readonly seedObjects: SeedObjectsAccumulator;
166
157
  }>], readonly [SnapshotableDecl, CodegenableDecl<"deepbook-network">, ...StrategyContributorDecl<"coinType:0x36dbef866a1d62bf7328989a10fb2f07d769f4ee587c0de4a0a256e57e0a58a8::deep::DEEP", DeepbookDeepFundingStrategy>[]]>;
167
158
  };
168
159
  }>;
@@ -1,10 +1,13 @@
1
1
  import { definePlugin, resource } from "../../substrate/plugin.mjs";
2
+ import "../../api/define-plugin.mjs";
3
+ import { setCurrentPluginPhase } from "../../substrate/runtime/current-plugin.mjs";
4
+ import { ArtifactPublisherService } from "../../substrate/runtime/artifact-publisher/index.mjs";
2
5
  import { pluginErrorContributions } from "../../api/plugin-errors.mjs";
3
6
  import { defineModeNamespace } from "../../api/mode-narrowed-factory.mjs";
4
- import { setCurrentPluginPhase } from "../../substrate/runtime/current-plugin.mjs";
5
7
  import { suiResource } from "../sui/index.mjs";
6
- import { ArtifactPublisherService } from "../../substrate/runtime/artifact-publisher/index.mjs";
8
+ import { passthroughOrWrap } from "../../substrate/runtime/passthrough-or-wrap.mjs";
7
9
  import { deepbookPluginKey } from "./plugin-key.mjs";
10
+ import { DeepbookSpans } from "./spans.mjs";
8
11
  import { DEEPBOOK_ERROR_TAGS, deepbookConfigError, deepbookPluginError } from "./errors.mjs";
9
12
  import { makeDeepbookCodegenable } from "./codegen.mjs";
10
13
  import { makeDeepbookDeepFundingContribution, makeDeepbookDeepFundingStrategy } from "./faucet-strategy.mjs";
@@ -57,9 +60,14 @@ const requireCapturedId = (pkg, key, kind) => {
57
60
  if (typeof value === "string" && value.length > 0) return Effect.succeed(value);
58
61
  return Effect.fail(deepbookPluginError("publish", `deepbook local package '${pkg.name}' is missing captured ${kind} '${key}'.`));
59
62
  };
60
- const resolvePoolSpecs = (pools, coinValuesByRefId) => pools.map((pool) => {
61
- const base = coinValuesByRefId.get(pool.base.coin.id);
62
- const quote = coinValuesByRefId.get(pool.quote.coin.id);
63
+ const requirePoolCoinValue = (coinValuesByRefId, poolName, side, coinRefId) => {
64
+ const value = coinValuesByRefId.get(coinRefId);
65
+ if (value === void 0) return Effect.fail(deepbookConfigError("pools", `deepbook: pool '${poolName}' ${side} coin '${coinRefId}' was not resolved by the dependency tuple.`, "This is a compose-time bug — ensure the coin member is included in `dependsOn`/`poolCoinRefs`."));
66
+ return Effect.succeed(value);
67
+ };
68
+ const resolvePoolSpecs = (pools, coinValuesByRefId) => Effect.forEach(pools, (pool) => Effect.gen(function* () {
69
+ const base = yield* requirePoolCoinValue(coinValuesByRefId, pool.name, "base", pool.base.coin.id);
70
+ const quote = yield* requirePoolCoinValue(coinValuesByRefId, pool.name, "quote", pool.quote.coin.id);
63
71
  return {
64
72
  name: pool.name,
65
73
  base: pool.base.key,
@@ -75,7 +83,7 @@ const resolvePoolSpecs = (pools, coinValuesByRefId) => pools.map((pool) => {
75
83
  stablePool: pool.stablePool ?? false,
76
84
  ...pool.seed === void 0 ? {} : { seed: pool.seed }
77
85
  };
78
- });
86
+ }));
79
87
  const assertUniquePoolNames = (name, pools) => {
80
88
  const seen = /* @__PURE__ */ new Set();
81
89
  for (const pool of pools) {
@@ -97,6 +105,7 @@ const buildOverridePlugin = (opts) => {
97
105
  id: deepbookResource.id,
98
106
  dependsOn: [suiResource],
99
107
  role: "task",
108
+ section: "service",
100
109
  pluginKey: deepbookPluginKey(name),
101
110
  start: (deps) => Effect.sync(() => {
102
111
  const [sui] = deps;
@@ -144,6 +153,7 @@ const buildLocalPlugin = (opts) => {
144
153
  id: deepbookResource.id,
145
154
  dependsOn,
146
155
  role: "task",
156
+ section: "service",
147
157
  pluginKey: deepbookPluginKey(name),
148
158
  start: (deps) => Effect.gen(function* () {
149
159
  const [sui, publisher, deepbookPackage, ...extraValues] = deps;
@@ -151,9 +161,9 @@ const buildLocalPlugin = (opts) => {
151
161
  const pythValues = extraValues.slice(0, pythValueCount);
152
162
  const coinValues = extraValues.slice(pythValueCount);
153
163
  yield* Effect.annotateCurrentSpan({
154
- "deepbook.name": name,
155
- "deepbook.chain": sui.chain,
156
- "deepbook.publisher": publisher.address
164
+ [DeepbookSpans.name]: name,
165
+ [DeepbookSpans.chain]: sui.chain,
166
+ [DeepbookSpans.publisher]: publisher.address
157
167
  });
158
168
  yield* setCurrentPluginPhase("reading deployment captures");
159
169
  const registryId = yield* requireCapturedId(deepbookPackage, opts.registryIdKey ?? "registryId", "registryId");
@@ -172,7 +182,7 @@ const buildLocalPlugin = (opts) => {
172
182
  const value = coinValues[i];
173
183
  if (ref !== void 0 && value !== void 0) coinValuesByRefId.set(ref.id, value);
174
184
  }
175
- const poolSpecs = resolvePoolSpecs(opts.pools, coinValuesByRefId);
185
+ const poolSpecs = yield* resolvePoolSpecs(opts.pools, coinValuesByRefId);
176
186
  const artifactPublisher = yield* ArtifactPublisherService;
177
187
  yield* setCurrentPluginPhase(opts.pyth === void 0 ? "creating pools" : "initializing Pyth feeds");
178
188
  const pyth = opts.pyth === void 0 ? null : yield* initLocalPythFeeds(artifactPublisher, sui.sdk, sui.chain, pythValues[0], { packageId: pythValues[1].packageId }, opts.pyth.feeds);
@@ -196,18 +206,9 @@ const buildLocalPlugin = (opts) => {
196
206
  marketMakerRunning: seedResults.length > 0,
197
207
  deepFundingStrategy: null
198
208
  };
199
- }).pipe(Effect.catch((err) => {
200
- if (typeof err === "object" && err !== null && "_tag" in err && (err._tag === "DeepbookPluginError" || err._tag === "DeepbookConfigError" || err._tag === "ForkIncompatibleError")) return Effect.fail(err);
201
- return Effect.fail(deepbookPluginError("publish", `deepbook acquire failed: ${String(err)}`));
202
- })),
203
- capabilities: ({ value: resolved, runtime: acquireCtx }) => {
204
- return [makeLocalSnapshotable({
205
- name,
206
- app: acquireCtx.identity.app,
207
- stack: acquireCtx.identity.stack,
208
- indexerEnabled: false,
209
- serverEnabled: false
210
- }), makeDeepbookCodegenable({
209
+ }).pipe(passthroughOrWrap.for()(DEEPBOOK_ERROR_TAGS, (err) => deepbookPluginError("publish", `deepbook acquire failed: ${String(err)}`, { cause: err }))),
210
+ capabilities: ({ value: resolved }) => {
211
+ return [makeLocalSnapshotable({ name }), makeDeepbookCodegenable({
211
212
  name,
212
213
  chain: resolved.chain,
213
214
  packageId: resolved.packageId,
@@ -257,6 +258,8 @@ const buildKnownPlugin = (opts) => {
257
258
  id: deepbookResource.id,
258
259
  dependsOn: [suiResource],
259
260
  role: "task",
261
+ section: "service",
262
+ pluginKey: deepbookPluginKey(name),
260
263
  start: (deps) => Effect.sync(() => {
261
264
  const [sui] = deps;
262
265
  const chain = opts.chain ?? known?.chain ?? sui.chain;