@mysten-incubation/devstack 0.1.1 → 0.2.0
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.
- package/README.md +6 -3
- package/dashboard-ui/assets/grpc-a4usE3Nk.js +3 -0
- package/dashboard-ui/assets/index-B82Bh84P.css +1 -0
- package/dashboard-ui/assets/index-CRYJ4pru.js +1277 -0
- package/dashboard-ui/index.html +2 -2
- package/dist/api/define-capabilities.d.mts +1 -20
- package/dist/api/define-capabilities.mjs +15 -22
- package/dist/api/define-capabilities.mjs.map +1 -1
- package/dist/api/define-devstack-with.d.mts +7 -1
- package/dist/api/define-devstack-with.mjs.map +1 -1
- package/dist/api/define-devstack.mjs.map +1 -1
- package/dist/api/define-plugin.d.mts +2 -1
- package/dist/api/inference-network.d.mts +31 -17
- package/dist/api/inference-network.mjs +40 -43
- package/dist/api/inference-network.mjs.map +1 -1
- package/dist/api/load-config.mjs +88 -0
- package/dist/api/load-config.mjs.map +1 -0
- package/dist/api/mode-narrowed-factory.d.mts +1 -1
- package/dist/api/mode-narrowed-factory.mjs.map +1 -1
- package/dist/api/run-stack-internal.mjs +202 -0
- package/dist/api/run-stack-internal.mjs.map +1 -0
- package/dist/api/run-stack.d.mts +82 -31
- package/dist/api/run-stack.mjs +22 -141
- package/dist/api/run-stack.mjs.map +1 -1
- package/dist/build-integrations/dapp-kit/index.d.mts +61 -0
- package/dist/build-integrations/dapp-kit/index.mjs +58 -0
- package/dist/build-integrations/dapp-kit/index.mjs.map +1 -0
- package/dist/build-integrations/playwright/config.d.mts +1 -30
- package/dist/build-integrations/playwright/config.mjs +1 -27
- package/dist/build-integrations/playwright/config.mjs.map +1 -1
- package/dist/build-integrations/playwright/errors.d.mts +4 -7
- package/dist/build-integrations/playwright/errors.mjs.map +1 -1
- package/dist/build-integrations/playwright/global-setup.d.mts +42 -71
- package/dist/build-integrations/playwright/global-setup.mjs +142 -218
- package/dist/build-integrations/playwright/global-setup.mjs.map +1 -1
- package/dist/build-integrations/playwright/index.d.mts +2 -2
- package/dist/build-integrations/playwright/index.mjs +2 -2
- package/dist/build-integrations/playwright/stack-context.d.mts +3 -1
- package/dist/build-integrations/playwright/stack-context.mjs +4 -2
- package/dist/build-integrations/playwright/stack-context.mjs.map +1 -1
- package/dist/build-integrations/playwright/wallet-context.mjs +44 -19
- package/dist/build-integrations/playwright/wallet-context.mjs.map +1 -1
- package/dist/build-integrations/runtime/cold-start-url.mjs.map +1 -1
- package/dist/build-integrations/runtime/conventional-routes.mjs.map +1 -1
- package/dist/build-integrations/runtime/dapp-kit-slot.mjs.map +1 -1
- package/dist/build-integrations/runtime/discover.d.mts +6 -4
- package/dist/build-integrations/runtime/discover.mjs +15 -4
- package/dist/build-integrations/runtime/discover.mjs.map +1 -1
- package/dist/build-integrations/runtime/endpoint-registry.mjs.map +1 -1
- package/dist/build-integrations/runtime/errors.mjs.map +1 -1
- package/dist/build-integrations/runtime/read-stack-context.mjs +3 -3
- package/dist/build-integrations/runtime/read-stack-context.mjs.map +1 -1
- package/dist/build-integrations/runtime/resolve-discovery-env.d.mts +23 -7
- package/dist/build-integrations/runtime/resolve-discovery-env.mjs +25 -12
- package/dist/build-integrations/runtime/resolve-discovery-env.mjs.map +1 -1
- package/dist/build-integrations/runtime/stack-context.d.mts +2 -2
- package/dist/build-integrations/vite/index.d.mts +84 -19
- package/dist/build-integrations/vite/index.mjs +203 -28
- package/dist/build-integrations/vite/index.mjs.map +1 -1
- package/dist/build-integrations/vitest/config.d.mts +20 -2
- package/dist/build-integrations/vitest/config.mjs +16 -4
- package/dist/build-integrations/vitest/config.mjs.map +1 -1
- package/dist/build-integrations/vitest/env.d.mts +18 -10
- package/dist/build-integrations/vitest/env.mjs +11 -10
- package/dist/build-integrations/vitest/env.mjs.map +1 -1
- package/dist/build-integrations/vitest/errors.d.mts +7 -11
- package/dist/build-integrations/vitest/errors.mjs +3 -4
- package/dist/build-integrations/vitest/errors.mjs.map +1 -1
- package/dist/build-integrations/vitest/global-setup.d.mts +35 -0
- package/dist/build-integrations/vitest/global-setup.mjs +156 -0
- package/dist/build-integrations/vitest/global-setup.mjs.map +1 -0
- package/dist/build-integrations/vitest/index.d.mts +3 -2
- package/dist/build-integrations/vitest/index.mjs +3 -2
- package/dist/build-integrations/vitest/setup.mjs +2 -2
- package/dist/build-integrations/vitest/setup.mjs.map +1 -1
- package/dist/build-integrations/vitest/stack-context.d.mts +5 -3
- package/dist/build-integrations/vitest/stack-context.mjs +3 -2
- package/dist/build-integrations/vitest/stack-context.mjs.map +1 -1
- package/dist/cli/bail.mjs.map +1 -1
- package/dist/cli/doctor-probes.mjs +1 -3
- package/dist/cli/doctor-probes.mjs.map +1 -1
- package/dist/cli/main.d.mts +23 -1
- package/dist/cli/main.mjs +63 -8
- package/dist/cli/main.mjs.map +1 -1
- package/dist/cli/prune-direct.mjs.map +1 -1
- package/dist/cli/snapshot-reader.mjs.map +1 -1
- package/dist/cli/up-lifecycle.mjs.map +1 -1
- package/dist/cli/wirings/apply.mjs +28 -21
- package/dist/cli/wirings/apply.mjs.map +1 -1
- package/dist/cli/wirings/codegen.mjs +108 -0
- package/dist/cli/wirings/codegen.mjs.map +1 -0
- package/dist/cli/wirings/config-loader.mjs +12 -62
- package/dist/cli/wirings/config-loader.mjs.map +1 -1
- package/dist/cli/wirings/dump-ids.mjs +86 -0
- package/dist/cli/wirings/dump-ids.mjs.map +1 -0
- package/dist/cli/wirings/engine-command.mjs +1 -1
- package/dist/cli/wirings/engine-command.mjs.map +1 -1
- package/dist/cli/wirings/identity.mjs +2 -2
- package/dist/cli/wirings/identity.mjs.map +1 -1
- package/dist/cli/wirings/provide-file-system.mjs.map +1 -1
- package/dist/cli/wirings/read-devstack-version.mjs +17 -0
- package/dist/cli/wirings/read-devstack-version.mjs.map +1 -0
- package/dist/cli/wirings/snapshot.mjs +27 -34
- package/dist/cli/wirings/snapshot.mjs.map +1 -1
- package/dist/cli/wirings/up-ipc.mjs +147 -0
- package/dist/cli/wirings/up-ipc.mjs.map +1 -0
- package/dist/cli/wirings/up.mjs +218 -198
- package/dist/cli/wirings/up.mjs.map +1 -1
- package/dist/cli/wirings/wipe.mjs +1 -1
- package/dist/cli/wirings/wipe.mjs.map +1 -1
- package/dist/contracts/chain-probe.d.mts +1 -1
- package/dist/contracts/chain-probe.mjs +1 -1
- package/dist/contracts/chain-probe.mjs.map +1 -1
- package/dist/contracts/codegenable.d.mts +60 -6
- package/dist/contracts/codegenable.mjs +28 -0
- package/dist/contracts/codegenable.mjs.map +1 -0
- package/dist/contracts/config-bindings.mjs +162 -0
- package/dist/contracts/config-bindings.mjs.map +1 -0
- package/dist/contracts/container-runtime.d.mts +23 -17
- package/dist/contracts/plugin-expander.mjs.map +1 -1
- package/dist/contracts/snapshotable.d.mts +5 -7
- package/dist/contracts/wallet-protocol.d.mts +2 -5
- package/dist/contracts/wallet-protocol.mjs +2 -5
- package/dist/contracts/wallet-protocol.mjs.map +1 -1
- package/dist/index.d.mts +21 -26
- package/dist/index.mjs +8 -9
- package/dist/orchestrators/boot.d.mts +28 -0
- package/dist/orchestrators/boot.mjs +440 -0
- package/dist/orchestrators/boot.mjs.map +1 -0
- package/dist/orchestrators/codegen/bindings.d.mts +13 -1
- package/dist/orchestrators/codegen/bindings.mjs +23 -9
- package/dist/orchestrators/codegen/bindings.mjs.map +1 -1
- package/dist/orchestrators/codegen/config-runtime.mjs +208 -0
- package/dist/orchestrators/codegen/config-runtime.mjs.map +1 -0
- package/dist/orchestrators/codegen/emit.mjs +1 -1
- package/dist/orchestrators/codegen/emit.mjs.map +1 -1
- package/dist/orchestrators/codegen/errors.mjs +21 -1
- package/dist/orchestrators/codegen/errors.mjs.map +1 -1
- package/dist/orchestrators/codegen/format.mjs +2 -0
- package/dist/orchestrators/codegen/format.mjs.map +1 -1
- package/dist/orchestrators/codegen/gitignore.mjs +30 -11
- package/dist/orchestrators/codegen/gitignore.mjs.map +1 -1
- package/dist/orchestrators/codegen/id-config.mjs +107 -0
- package/dist/orchestrators/codegen/id-config.mjs.map +1 -0
- package/dist/orchestrators/codegen/output-location.mjs +23 -32
- package/dist/orchestrators/codegen/output-location.mjs.map +1 -1
- package/dist/orchestrators/codegen/paths.mjs +8 -1
- package/dist/orchestrators/codegen/paths.mjs.map +1 -1
- package/dist/orchestrators/codegen/permissions.mjs.map +1 -1
- package/dist/orchestrators/codegen/service.mjs +286 -58
- package/dist/orchestrators/codegen/service.mjs.map +1 -1
- package/dist/orchestrators/layers.mjs +31 -0
- package/dist/orchestrators/layers.mjs.map +1 -0
- package/dist/orchestrators/lifecycle-prune/errors.mjs.map +1 -1
- package/dist/orchestrators/lifecycle-prune/index.mjs +8 -10
- package/dist/orchestrators/lifecycle-prune/index.mjs.map +1 -1
- package/dist/orchestrators/network-options.d.mts +52 -0
- package/dist/orchestrators/network-options.mjs +43 -0
- package/dist/orchestrators/network-options.mjs.map +1 -0
- package/dist/orchestrators/router/cleanup.mjs.map +1 -1
- package/dist/orchestrators/router/cors.mjs.map +1 -1
- package/dist/orchestrators/router/entrypoints.mjs.map +1 -1
- package/dist/orchestrators/router/errors.mjs.map +1 -1
- package/dist/orchestrators/router/file-provider.mjs.map +1 -1
- package/dist/orchestrators/router/hostname.mjs.map +1 -1
- package/dist/orchestrators/router/profile.mjs +1 -1
- package/dist/orchestrators/router/profile.mjs.map +1 -1
- package/dist/orchestrators/router/service.d.mts +2 -2
- package/dist/orchestrators/router/service.mjs +12 -27
- package/dist/orchestrators/router/service.mjs.map +1 -1
- package/dist/orchestrators/router/traefik-container.mjs +1 -1
- package/dist/orchestrators/router/traefik-container.mjs.map +1 -1
- package/dist/orchestrators/snapshot/capture.mjs +171 -195
- package/dist/orchestrators/snapshot/capture.mjs.map +1 -1
- package/dist/orchestrators/snapshot/descriptor.d.mts +1 -1
- package/dist/orchestrators/snapshot/descriptor.mjs +53 -11
- package/dist/orchestrators/snapshot/descriptor.mjs.map +1 -1
- package/dist/orchestrators/snapshot/identity-guard.mjs +3 -5
- package/dist/orchestrators/snapshot/identity-guard.mjs.map +1 -1
- package/dist/orchestrators/snapshot/image-bundle-tags.mjs +32 -101
- package/dist/orchestrators/snapshot/image-bundle-tags.mjs.map +1 -1
- package/dist/orchestrators/snapshot/index.mjs +1 -4
- package/dist/orchestrators/snapshot/integrity.mjs.map +1 -1
- package/dist/orchestrators/snapshot/interrupted-restore.mjs +116 -0
- package/dist/orchestrators/snapshot/interrupted-restore.mjs.map +1 -0
- package/dist/orchestrators/snapshot/phase-error.mjs.map +1 -1
- package/dist/orchestrators/snapshot/prune.mjs +40 -31
- package/dist/orchestrators/snapshot/prune.mjs.map +1 -1
- package/dist/orchestrators/snapshot/restore.mjs +221 -196
- package/dist/orchestrators/snapshot/restore.mjs.map +1 -1
- package/dist/orchestrators/snapshot/service.mjs +72 -62
- package/dist/orchestrators/snapshot/service.mjs.map +1 -1
- package/dist/orchestrators/snapshot/wipe.mjs +67 -56
- package/dist/orchestrators/snapshot/wipe.mjs.map +1 -1
- package/dist/plugins/account/codegen.mjs +3 -0
- package/dist/plugins/account/codegen.mjs.map +1 -1
- package/dist/plugins/account/errors.d.mts +2 -2
- package/dist/plugins/account/errors.mjs +1 -4
- package/dist/plugins/account/errors.mjs.map +1 -1
- package/dist/plugins/account/funding.mjs +3 -27
- package/dist/plugins/account/funding.mjs.map +1 -1
- package/dist/plugins/account/index.d.mts +3 -8
- package/dist/plugins/account/index.mjs +71 -35
- package/dist/plugins/account/index.mjs.map +1 -1
- package/dist/plugins/account/keypair.d.mts +8 -7
- package/dist/plugins/account/keypair.mjs +5 -18
- package/dist/plugins/account/keypair.mjs.map +1 -1
- package/dist/plugins/account/lease.mjs.map +1 -1
- package/dist/plugins/account/registry.d.mts +1 -46
- package/dist/plugins/account/registry.mjs.map +1 -1
- package/dist/plugins/account/service.d.mts +43 -34
- package/dist/plugins/account/service.mjs +9 -54
- package/dist/plugins/account/service.mjs.map +1 -1
- package/dist/plugins/account/snapshot.mjs.map +1 -1
- package/dist/plugins/account/variants/ephemeral.mjs.map +1 -1
- package/dist/plugins/account/variants/impersonate.mjs.map +1 -1
- package/dist/plugins/account/variants/signer.mjs.map +1 -1
- package/dist/plugins/action/discriminator.mjs.map +1 -1
- package/dist/plugins/action/errors.mjs +1 -4
- package/dist/plugins/action/errors.mjs.map +1 -1
- package/dist/plugins/action/execute.mjs +3 -4
- package/dist/plugins/action/execute.mjs.map +1 -1
- package/dist/plugins/action/index.d.mts +2 -2
- package/dist/plugins/action/index.mjs +7 -11
- package/dist/plugins/action/index.mjs.map +1 -1
- package/dist/plugins/action/service.d.mts +5 -7
- package/dist/plugins/action/service.mjs +2 -16
- package/dist/plugins/action/service.mjs.map +1 -1
- package/dist/plugins/coin/address-resolution.mjs.map +1 -1
- package/dist/plugins/coin/codegen.mjs +97 -16
- package/dist/plugins/coin/codegen.mjs.map +1 -1
- package/dist/plugins/coin/discovery.mjs.map +1 -1
- package/dist/plugins/coin/errors.mjs +1 -4
- package/dist/plugins/coin/errors.mjs.map +1 -1
- package/dist/plugins/coin/index.d.mts +4 -34
- package/dist/plugins/coin/index.mjs +47 -28
- package/dist/plugins/coin/index.mjs.map +1 -1
- package/dist/plugins/coin/metadata.d.mts +1 -0
- package/dist/plugins/coin/metadata.mjs +8 -9
- package/dist/plugins/coin/metadata.mjs.map +1 -1
- package/dist/plugins/coin/mint.mjs +7 -21
- package/dist/plugins/coin/mint.mjs.map +1 -1
- package/dist/plugins/coin/registry.mjs +33 -20
- package/dist/plugins/coin/registry.mjs.map +1 -1
- package/dist/plugins/coin/service.d.mts +1 -1
- package/dist/plugins/coin/service.mjs +1 -8
- package/dist/plugins/coin/service.mjs.map +1 -1
- package/dist/plugins/coin/snapshot.mjs.map +1 -1
- package/dist/plugins/coin/type-strings.mjs.map +1 -1
- package/dist/plugins/dashboard/domain.mjs +106 -167
- package/dist/plugins/dashboard/domain.mjs.map +1 -1
- package/dist/plugins/dashboard/index.mjs +13 -13
- package/dist/plugins/dashboard/index.mjs.map +1 -1
- package/dist/plugins/dashboard/origin-policy.mjs +3 -3
- package/dist/plugins/dashboard/origin-policy.mjs.map +1 -1
- package/dist/plugins/dashboard/routable.mjs.map +1 -1
- package/dist/plugins/dashboard/schema/builder.mjs.map +1 -1
- package/dist/plugins/dashboard/schema/enums.mjs.map +1 -1
- package/dist/plugins/dashboard/schema/root.mjs +23 -44
- package/dist/plugins/dashboard/schema/root.mjs.map +1 -1
- package/dist/plugins/dashboard/schema/types.mjs +37 -91
- package/dist/plugins/dashboard/schema/types.mjs.map +1 -1
- package/dist/plugins/dashboard/schema.mjs.map +1 -1
- package/dist/plugins/dashboard/server.mjs.map +1 -1
- package/dist/plugins/deepbook/codegen.d.mts +12 -11
- package/dist/plugins/deepbook/codegen.mjs +108 -11
- package/dist/plugins/deepbook/codegen.mjs.map +1 -1
- package/dist/plugins/deepbook/deploy.mjs +7 -14
- package/dist/plugins/deepbook/deploy.mjs.map +1 -1
- package/dist/plugins/deepbook/errors.mjs +4 -2
- package/dist/plugins/deepbook/errors.mjs.map +1 -1
- package/dist/plugins/deepbook/faucet-strategy.mjs +4 -10
- package/dist/plugins/deepbook/faucet-strategy.mjs.map +1 -1
- package/dist/plugins/deepbook/hash.mjs.map +1 -1
- package/dist/plugins/deepbook/index.d.mts +38 -34
- package/dist/plugins/deepbook/index.mjs +133 -64
- package/dist/plugins/deepbook/index.mjs.map +1 -1
- package/dist/plugins/deepbook/plugin-key.mjs.map +1 -1
- package/dist/plugins/deepbook/pyth/index.mjs +4 -8
- package/dist/plugins/deepbook/pyth/index.mjs.map +1 -1
- package/dist/plugins/deepbook/snapshot.mjs +0 -1
- package/dist/plugins/deepbook/snapshot.mjs.map +1 -1
- package/dist/plugins/deepbook/type-strings.mjs.map +1 -1
- package/dist/plugins/deepbook/types.d.mts +2 -1
- package/dist/plugins/deepbook/types.mjs.map +1 -1
- package/dist/plugins/faucet/dispatcher.d.mts +3 -3
- package/dist/plugins/faucet/dispatcher.mjs.map +1 -1
- package/dist/plugins/faucet/errors.mjs.map +1 -1
- package/dist/plugins/faucet/http.mjs +2 -10
- package/dist/plugins/faucet/http.mjs.map +1 -1
- package/dist/plugins/faucet/index.mjs +0 -1
- package/dist/plugins/faucet/index.mjs.map +1 -1
- package/dist/plugins/host-service/errors.d.mts +1 -3
- package/dist/plugins/host-service/errors.mjs +1 -2
- package/dist/plugins/host-service/errors.mjs.map +1 -1
- package/dist/plugins/host-service/index.d.mts +1 -2
- package/dist/plugins/host-service/index.mjs +11 -11
- package/dist/plugins/host-service/index.mjs.map +1 -1
- package/dist/plugins/host-service/routable.mjs.map +1 -1
- package/dist/plugins/host-service/service.mjs +13 -13
- package/dist/plugins/host-service/service.mjs.map +1 -1
- package/dist/plugins/internal/acquire-on-chain-artifact.mjs.map +1 -1
- package/dist/plugins/internal/codegen-helpers.mjs +2 -0
- package/dist/plugins/internal/codegen-helpers.mjs.map +1 -1
- package/dist/plugins/internal/funding-failure-error.mjs.map +1 -1
- package/dist/plugins/{postgres → internal/postgres-sidecar}/connection.mjs +1 -1
- package/dist/plugins/internal/postgres-sidecar/connection.mjs.map +1 -0
- package/dist/plugins/{postgres → internal/postgres-sidecar}/db-ensure.mjs +30 -16
- package/dist/plugins/internal/postgres-sidecar/db-ensure.mjs.map +1 -0
- package/dist/plugins/internal/postgres-sidecar/errors.mjs +21 -0
- package/dist/plugins/internal/postgres-sidecar/errors.mjs.map +1 -0
- package/dist/{substrate/runtime/scoped-multimap → plugins/internal/postgres-sidecar}/index.mjs +1 -0
- package/dist/plugins/internal/postgres-sidecar/service.mjs +121 -0
- package/dist/plugins/internal/postgres-sidecar/service.mjs.map +1 -0
- package/dist/plugins/package/build.mjs +2 -2
- package/dist/plugins/package/build.mjs.map +1 -1
- package/dist/plugins/package/codegen.d.mts +7 -14
- package/dist/plugins/package/codegen.mjs +187 -59
- package/dist/plugins/package/codegen.mjs.map +1 -1
- package/dist/plugins/package/dep-resolution.mjs +51 -3
- package/dist/plugins/package/dep-resolution.mjs.map +1 -1
- package/dist/plugins/package/errors.mjs +1 -4
- package/dist/plugins/package/errors.mjs.map +1 -1
- package/dist/plugins/package/git-source.d.mts +18 -0
- package/dist/plugins/package/git-source.mjs +119 -0
- package/dist/plugins/package/git-source.mjs.map +1 -0
- package/dist/plugins/package/index.d.mts +28 -19
- package/dist/plugins/package/index.mjs +107 -32
- package/dist/plugins/package/index.mjs.map +1 -1
- package/dist/plugins/package/mode-known.mjs +2 -2
- package/dist/plugins/package/mode-known.mjs.map +1 -1
- package/dist/plugins/package/mode-local.mjs +18 -35
- package/dist/plugins/package/mode-local.mjs.map +1 -1
- package/dist/plugins/package/publish-executor.mjs +13 -8
- package/dist/plugins/package/publish-executor.mjs.map +1 -1
- package/dist/plugins/package/publish-output.d.mts +1 -11
- package/dist/plugins/package/publish-output.mjs +1 -9
- package/dist/plugins/package/publish-output.mjs.map +1 -1
- package/dist/plugins/package/registry.d.mts +1 -1
- package/dist/plugins/package/registry.mjs +26 -14
- package/dist/plugins/package/registry.mjs.map +1 -1
- package/dist/plugins/package/service.mjs.map +1 -1
- package/dist/plugins/package/snapshot.mjs.map +1 -1
- package/dist/plugins/router-entrypoints.mjs +1 -3
- package/dist/plugins/router-entrypoints.mjs.map +1 -1
- package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs +1 -2
- package/dist/plugins/seal/bootstrap-assets/cargo-image.mjs.map +1 -1
- package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs +1 -6
- package/dist/plugins/seal/bootstrap-assets/source-fetch.mjs.map +1 -1
- package/dist/plugins/seal/codegen.d.mts +1 -5
- package/dist/plugins/seal/codegen.mjs +83 -12
- package/dist/plugins/seal/codegen.mjs.map +1 -1
- package/dist/plugins/seal/config-render.mjs +2 -6
- package/dist/plugins/seal/config-render.mjs.map +1 -1
- package/dist/plugins/seal/deploy.mjs +18 -29
- package/dist/plugins/seal/deploy.mjs.map +1 -1
- package/dist/plugins/seal/errors.d.mts +4 -5
- package/dist/plugins/seal/errors.mjs +1 -8
- package/dist/plugins/seal/errors.mjs.map +1 -1
- package/dist/plugins/seal/index.d.mts +7 -28
- package/dist/plugins/seal/index.mjs +69 -47
- package/dist/plugins/seal/index.mjs.map +1 -1
- package/dist/plugins/seal/key-manager.mjs.map +1 -1
- package/dist/plugins/seal/key-server.mjs +1 -6
- package/dist/plugins/seal/key-server.mjs.map +1 -1
- package/dist/plugins/seal/keygen.mjs +2 -3
- package/dist/plugins/seal/keygen.mjs.map +1 -1
- package/dist/plugins/seal/mode/fork-known.mjs.map +1 -1
- package/dist/plugins/seal/mode/live.mjs +1 -1
- package/dist/plugins/seal/mode/live.mjs.map +1 -1
- package/dist/plugins/seal/mode/local-keygen.mjs +4 -10
- package/dist/plugins/seal/mode/local-keygen.mjs.map +1 -1
- package/dist/plugins/seal/plugin-key.mjs.map +1 -1
- package/dist/plugins/seal/registry-publish.mjs.map +1 -1
- package/dist/plugins/seal/routable.mjs.map +1 -1
- package/dist/plugins/seal/service.mjs.map +1 -1
- package/dist/plugins/seal/snapshot.mjs +1 -2
- package/dist/plugins/seal/snapshot.mjs.map +1 -1
- package/dist/plugins/sui/auto-tick.mjs +5 -5
- package/dist/plugins/sui/auto-tick.mjs.map +1 -1
- package/dist/plugins/sui/chain-build-container.mjs +2 -2
- package/dist/plugins/sui/chain-build-container.mjs.map +1 -1
- package/dist/plugins/sui/chain-probe.mjs +4 -4
- package/dist/plugins/sui/chain-probe.mjs.map +1 -1
- package/dist/plugins/sui/codegen.d.mts +9 -7
- package/dist/plugins/sui/codegen.mjs +49 -46
- package/dist/plugins/sui/codegen.mjs.map +1 -1
- package/dist/plugins/sui/errors.d.mts +1 -1
- package/dist/plugins/sui/errors.mjs +1 -9
- package/dist/plugins/sui/errors.mjs.map +1 -1
- package/dist/{substrate/runtime/sui-execute → plugins/sui/exec}/index.d.mts +1 -1
- package/dist/{substrate/runtime/sui-execute → plugins/sui/exec}/index.mjs +3 -7
- package/dist/plugins/sui/exec/index.mjs.map +1 -0
- package/dist/{substrate/runtime/sui-execute → plugins/sui/exec}/sign-and-dispatch.mjs +1 -1
- package/dist/plugins/sui/exec/sign-and-dispatch.mjs.map +1 -0
- package/dist/plugins/sui/fork-faucet-strategy.mjs +2 -6
- package/dist/plugins/sui/fork-faucet-strategy.mjs.map +1 -1
- package/dist/plugins/sui/fork-orchestration.mjs +13 -23
- package/dist/plugins/sui/fork-orchestration.mjs.map +1 -1
- package/dist/plugins/sui/fork-transaction.mjs.map +1 -1
- package/dist/plugins/sui/index.d.mts +34 -83
- package/dist/plugins/sui/index.mjs +200 -68
- package/dist/plugins/sui/index.mjs.map +1 -1
- package/dist/{substrate/runtime/sui-ledger → plugins/sui/ledger}/object-ref.mjs +1 -1
- package/dist/plugins/sui/ledger/object-ref.mjs.map +1 -0
- package/dist/plugins/sui/local-faucet-strategy.mjs +1 -5
- package/dist/plugins/sui/local-faucet-strategy.mjs.map +1 -1
- package/dist/plugins/sui/log-attrs.mjs +11 -0
- package/dist/plugins/sui/log-attrs.mjs.map +1 -0
- package/dist/plugins/sui/mode/external.mjs +4 -12
- package/dist/plugins/sui/mode/external.mjs.map +1 -1
- package/dist/plugins/sui/mode/fork.mjs +19 -16
- package/dist/plugins/sui/mode/fork.mjs.map +1 -1
- package/dist/plugins/sui/mode/live.mjs +4 -17
- package/dist/plugins/sui/mode/live.mjs.map +1 -1
- package/dist/plugins/sui/mode/local.d.mts +1 -0
- package/dist/plugins/sui/mode/local.mjs +203 -61
- package/dist/plugins/sui/mode/local.mjs.map +1 -1
- package/dist/plugins/sui/mode/shared-boot.mjs +18 -23
- package/dist/plugins/sui/mode/shared-boot.mjs.map +1 -1
- package/dist/plugins/sui/mode/shared.d.mts +6 -7
- package/dist/plugins/sui/mode/shared.mjs.map +1 -1
- package/dist/plugins/sui/mode/spec.d.mts +23 -6
- package/dist/{substrate/runtime/sui-move-build → plugins/sui/move}/index.mjs +28 -30
- package/dist/plugins/sui/move/index.mjs.map +1 -0
- package/dist/plugins/sui/move-summary-runner.mjs +8 -4
- package/dist/plugins/sui/move-summary-runner.mjs.map +1 -1
- package/dist/{substrate/network.d.mts → plugins/sui/network-config.d.mts} +11 -10
- package/dist/plugins/sui/network-resolver.d.mts +6 -6
- package/dist/plugins/sui/routable.mjs.map +1 -1
- package/dist/plugins/sui/service.mjs +10 -6
- package/dist/plugins/sui/service.mjs.map +1 -1
- package/dist/plugins/sui/snapshot.mjs +10 -5
- package/dist/plugins/sui/snapshot.mjs.map +1 -1
- package/dist/plugins/wallet/codegen.d.mts +8 -6
- package/dist/plugins/wallet/codegen.mjs +4 -10
- package/dist/plugins/wallet/codegen.mjs.map +1 -1
- package/dist/plugins/wallet/errors.mjs +1 -4
- package/dist/plugins/wallet/errors.mjs.map +1 -1
- package/dist/plugins/wallet/index.d.mts +3 -6
- package/dist/plugins/wallet/index.mjs +16 -21
- package/dist/plugins/wallet/index.mjs.map +1 -1
- package/dist/plugins/wallet/origin-policy.mjs +3 -3
- package/dist/plugins/wallet/origin-policy.mjs.map +1 -1
- package/dist/plugins/wallet/pairing.mjs +6 -24
- package/dist/plugins/wallet/pairing.mjs.map +1 -1
- package/dist/plugins/wallet/protocol.mjs.map +1 -1
- package/dist/plugins/wallet/routable.mjs.map +1 -1
- package/dist/plugins/wallet/server.mjs +17 -24
- package/dist/plugins/wallet/server.mjs.map +1 -1
- package/dist/plugins/wallet/service.d.mts +2 -2
- package/dist/plugins/wallet/service.mjs +4 -15
- package/dist/plugins/wallet/service.mjs.map +1 -1
- package/dist/plugins/wallet/snapshot.mjs.map +1 -1
- package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs +1 -5
- package/dist/plugins/walrus/bootstrap-assets/cargo-image.mjs.map +1 -1
- package/dist/plugins/walrus/codegen.d.mts +2 -13
- package/dist/plugins/walrus/codegen.mjs +93 -28
- package/dist/plugins/walrus/codegen.mjs.map +1 -1
- package/dist/plugins/walrus/deploy-paths.mjs +2 -3
- package/dist/plugins/walrus/deploy-paths.mjs.map +1 -1
- package/dist/plugins/walrus/deploy.mjs +26 -19
- package/dist/plugins/walrus/deploy.mjs.map +1 -1
- package/dist/plugins/walrus/errors.mjs +1 -8
- package/dist/plugins/walrus/errors.mjs.map +1 -1
- package/dist/plugins/walrus/faucet-strategy.mjs +15 -1
- package/dist/plugins/walrus/faucet-strategy.mjs.map +1 -1
- package/dist/plugins/walrus/index.d.mts +13 -44
- package/dist/plugins/walrus/index.mjs +119 -122
- package/dist/plugins/walrus/index.mjs.map +1 -1
- package/dist/plugins/walrus/mode/known-deploy.mjs +6 -6
- package/dist/plugins/walrus/mode/known-deploy.mjs.map +1 -1
- package/dist/plugins/walrus/mode/local-cluster.d.mts +2 -2
- package/dist/plugins/walrus/mode/local-cluster.mjs +2 -10
- package/dist/plugins/walrus/mode/local-cluster.mjs.map +1 -1
- package/dist/plugins/walrus/plugin-key.mjs.map +1 -1
- package/dist/plugins/walrus/registry-publish.mjs.map +1 -1
- package/dist/plugins/walrus/routable.mjs.map +1 -1
- package/dist/plugins/walrus/service.mjs.map +1 -1
- package/dist/plugins/walrus/snapshot.mjs +3 -3
- package/dist/plugins/walrus/snapshot.mjs.map +1 -1
- package/dist/plugins/walrus/storage-nodes.mjs +53 -14
- package/dist/plugins/walrus/storage-nodes.mjs.map +1 -1
- package/dist/plugins/walrus/wal-swap.mjs +4 -8
- package/dist/plugins/walrus/wal-swap.mjs.map +1 -1
- package/dist/primitives/artifact-publisher.mjs.map +1 -1
- package/dist/primitives/cache.d.mts +1 -1
- package/dist/runtime/docker/client.mjs +47 -3
- package/dist/runtime/docker/client.mjs.map +1 -1
- package/dist/runtime/docker/container.mjs +37 -57
- package/dist/runtime/docker/container.mjs.map +1 -1
- package/dist/runtime/docker/errors.mjs.map +1 -1
- package/dist/runtime/docker/exec.mjs +2 -2
- package/dist/runtime/docker/exec.mjs.map +1 -1
- package/dist/runtime/docker/image.mjs +10 -11
- package/dist/runtime/docker/image.mjs.map +1 -1
- package/dist/runtime/docker/index.mjs +0 -1
- package/dist/runtime/docker/inspect-and-decode.mjs.map +1 -1
- package/dist/runtime/docker/inventory.mjs +9 -9
- package/dist/runtime/docker/inventory.mjs.map +1 -1
- package/dist/runtime/docker/labels.mjs +12 -1
- package/dist/runtime/docker/labels.mjs.map +1 -1
- package/dist/runtime/docker/network.mjs +6 -6
- package/dist/runtime/docker/network.mjs.map +1 -1
- package/dist/runtime/docker/render-run-args.mjs.map +1 -1
- package/dist/runtime/docker/service.mjs +31 -45
- package/dist/runtime/docker/service.mjs.map +1 -1
- package/dist/runtime/docker/sweep.mjs +14 -64
- package/dist/runtime/docker/sweep.mjs.map +1 -1
- package/dist/runtime/docker/volume.mjs +1 -1
- package/dist/runtime/docker/volume.mjs.map +1 -1
- package/dist/runtime/docker/wrap.mjs +14 -2
- package/dist/runtime/docker/wrap.mjs.map +1 -1
- package/dist/substrate/brand.d.mts +2 -5
- package/dist/substrate/brand.mjs +3 -2
- package/dist/substrate/brand.mjs.map +1 -1
- package/dist/substrate/cross-process.mjs +2 -16
- package/dist/substrate/cross-process.mjs.map +1 -1
- package/dist/substrate/event-time.mjs +0 -2
- package/dist/substrate/event-time.mjs.map +1 -1
- package/dist/substrate/events.d.mts +46 -16
- package/dist/substrate/identity.d.mts +11 -5
- package/dist/substrate/manifest.d.mts +33 -26
- package/dist/substrate/manifest.mjs +8 -3
- package/dist/substrate/manifest.mjs.map +1 -1
- package/dist/substrate/options.d.mts +33 -4
- package/dist/substrate/plugin-ctx.d.mts +70 -0
- package/dist/substrate/plugin-ctx.mjs +66 -0
- package/dist/substrate/plugin-ctx.mjs.map +1 -0
- package/dist/substrate/plugin.d.mts +46 -38
- package/dist/substrate/plugin.mjs +13 -9
- package/dist/substrate/plugin.mjs.map +1 -1
- package/dist/substrate/projection.d.mts +1 -1
- package/dist/substrate/runtime/atomic-write.mjs +3 -4
- package/dist/substrate/runtime/atomic-write.mjs.map +1 -1
- package/dist/substrate/runtime/cache/schema.mjs.map +1 -1
- package/dist/substrate/runtime/cache/service.mjs +50 -20
- package/dist/substrate/runtime/cache/service.mjs.map +1 -1
- package/dist/substrate/runtime/config-validation.mjs.map +1 -1
- package/dist/substrate/runtime/control-plane/domain.mjs +34 -12
- package/dist/substrate/runtime/control-plane/domain.mjs.map +1 -1
- package/dist/substrate/runtime/control-plane/service.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/command-channel/channel.mjs +14 -17
- package/dist/substrate/runtime/cross-process/command-channel/channel.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/command-channel/file-channel.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/command-channel/protocol.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/command-channel/runtime-control-lock.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/index.mjs +0 -2
- package/dist/substrate/runtime/cross-process/live-clock.mjs +1 -1
- package/dist/substrate/runtime/cross-process/live-clock.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/liveness.mjs +11 -18
- package/dist/substrate/runtime/cross-process/liveness.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/reclaim-stale-file.mjs +2 -2
- package/dist/substrate/runtime/cross-process/reclaim-stale-file.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/roster.mjs +17 -127
- package/dist/substrate/runtime/cross-process/roster.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/self-pid.mjs.map +1 -1
- package/dist/substrate/runtime/cross-process/stack-lock.mjs +29 -28
- package/dist/substrate/runtime/cross-process/stack-lock.mjs.map +1 -1
- package/dist/substrate/runtime/current-plugin.mjs.map +1 -1
- package/dist/substrate/runtime/errors.mjs +1 -13
- package/dist/substrate/runtime/errors.mjs.map +1 -1
- package/dist/substrate/runtime/format-unknown-error.mjs.map +1 -1
- package/dist/substrate/runtime/host-bind-mount-owner.mjs.map +1 -1
- package/dist/substrate/runtime/host-gateway.mjs.map +1 -1
- package/dist/substrate/runtime/host-tree-tar/index.mjs +15 -163
- package/dist/substrate/runtime/host-tree-tar/index.mjs.map +1 -1
- package/dist/substrate/runtime/http-probe.d.mts +1 -3
- package/dist/substrate/runtime/http-probe.mjs.map +1 -1
- package/dist/substrate/runtime/index.mjs +1 -6
- package/dist/substrate/runtime/lease-broker/service.mjs +5 -23
- package/dist/substrate/runtime/lease-broker/service.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/dep-graph.mjs +3 -3
- package/dist/substrate/runtime/lifecycle/dep-graph.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/graph-input-id.d.mts +1 -0
- package/dist/substrate/runtime/lifecycle/graph-input-id.mjs +133 -0
- package/dist/substrate/runtime/lifecycle/graph-input-id.mjs.map +1 -0
- package/dist/substrate/runtime/lifecycle/index.mjs +2 -2
- package/dist/substrate/runtime/lifecycle/plugin-registry.d.mts +1 -1
- package/dist/substrate/runtime/lifecycle/plugin-registry.mjs +22 -1
- package/dist/substrate/runtime/lifecycle/plugin-registry.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/ready-gate.mjs +2 -15
- package/dist/substrate/runtime/lifecycle/ready-gate.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/selective-restart.mjs +29 -25
- package/dist/substrate/runtime/lifecycle/selective-restart.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/signals.mjs +1 -1
- package/dist/substrate/runtime/lifecycle/signals.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/state-machine.mjs.map +1 -1
- package/dist/substrate/runtime/lifecycle/watch-attribution.d.mts +1 -1
- package/dist/substrate/runtime/lifecycle/watch-attribution.mjs +0 -1
- package/dist/substrate/runtime/lifecycle/watch-attribution.mjs.map +1 -1
- package/dist/substrate/runtime/managed-container.d.mts +5 -1
- package/dist/substrate/runtime/managed-container.mjs +8 -10
- package/dist/substrate/runtime/managed-container.mjs.map +1 -1
- package/dist/substrate/runtime/manifest/manifest.mjs +8 -30
- package/dist/substrate/runtime/manifest/manifest.mjs.map +1 -1
- package/dist/substrate/runtime/mode-errors.d.mts +1 -2
- package/dist/substrate/runtime/mode-errors.mjs.map +1 -1
- package/dist/substrate/runtime/observability/cascade-formatter.mjs +1 -11
- package/dist/substrate/runtime/observability/cascade-formatter.mjs.map +1 -1
- package/dist/substrate/runtime/observability/ignore-with-log.mjs.map +1 -1
- package/dist/substrate/runtime/observability/index.d.mts +1 -1
- package/dist/substrate/runtime/observability/index.mjs +4 -6
- package/dist/substrate/runtime/observability/log-attrs.mjs +46 -0
- package/dist/substrate/runtime/observability/log-attrs.mjs.map +1 -0
- package/dist/substrate/runtime/observability/log-store.mjs.map +1 -1
- package/dist/substrate/runtime/observability/logger.mjs +3 -3
- package/dist/substrate/runtime/observability/logger.mjs.map +1 -1
- package/dist/substrate/runtime/observability/output-truncate.mjs.map +1 -1
- package/dist/substrate/runtime/observability/pretty-error.mjs.map +1 -1
- package/dist/substrate/runtime/observability/process-lines.mjs.map +1 -1
- package/dist/substrate/runtime/observability/redaction.mjs.map +1 -1
- package/dist/substrate/runtime/observability/subprocess-capture.mjs +2 -2
- package/dist/substrate/runtime/observability/subprocess-capture.mjs.map +1 -1
- package/dist/substrate/runtime/passthrough-or-wrap.mjs.map +1 -1
- package/dist/substrate/runtime/paths.mjs +27 -9
- package/dist/substrate/runtime/paths.mjs.map +1 -1
- package/dist/substrate/runtime/phase-preserving-produce.mjs.map +1 -1
- package/dist/substrate/runtime/port-broker/service.mjs +10 -27
- package/dist/substrate/runtime/port-broker/service.mjs.map +1 -1
- package/dist/substrate/runtime/post-acquire-tasks.mjs.map +1 -1
- package/dist/substrate/runtime/probes.d.mts +2 -3
- package/dist/substrate/runtime/probes.mjs.map +1 -1
- package/dist/substrate/runtime/process-supervisor.mjs.map +1 -1
- package/dist/substrate/runtime/projection/operational-endpoints.mjs.map +1 -1
- package/dist/substrate/runtime/projection/state-ref.mjs.map +1 -1
- package/dist/substrate/runtime/projection/update.mjs +87 -11
- package/dist/substrate/runtime/projection/update.mjs.map +1 -1
- package/dist/substrate/runtime/random-suffix.mjs.map +1 -1
- package/dist/substrate/runtime/reconcile/fs-plan.mjs +146 -0
- package/dist/substrate/runtime/reconcile/fs-plan.mjs.map +1 -0
- package/dist/substrate/runtime/reconcile/graph.mjs +19 -0
- package/dist/substrate/runtime/reconcile/graph.mjs.map +1 -0
- package/dist/substrate/runtime/reconcile/index.mjs +5 -0
- package/dist/substrate/runtime/reconcile/label.mjs +41 -0
- package/dist/substrate/runtime/reconcile/label.mjs.map +1 -0
- package/dist/substrate/runtime/reconcile/spec.mjs +15 -0
- package/dist/substrate/runtime/reconcile/spec.mjs.map +1 -0
- package/dist/substrate/runtime/retry-policy.d.mts +2 -3
- package/dist/substrate/runtime/retry-policy.mjs.map +1 -1
- package/dist/substrate/runtime/routed-url.mjs.map +1 -1
- package/dist/substrate/runtime/runtime-decode.mjs.map +1 -1
- package/dist/substrate/runtime/scoped-http-server.mjs.map +1 -1
- package/dist/substrate/runtime/stage-and-swap/index.mjs +49 -12
- package/dist/substrate/runtime/stage-and-swap/index.mjs.map +1 -1
- package/dist/substrate/runtime/strategy-registry/chain-keyed-strategy-for.mjs.map +1 -1
- package/dist/substrate/runtime/strategy-registry/chain-probe-for.mjs.map +1 -1
- package/dist/substrate/runtime/strategy-registry/service.mjs +29 -17
- package/dist/substrate/runtime/strategy-registry/service.mjs.map +1 -1
- package/dist/substrate/runtime/subnet-broker.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/acquire-node.mjs +188 -56
- package/dist/substrate/runtime/supervisor/acquire-node.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/background-tasks.mjs +79 -65
- package/dist/substrate/runtime/supervisor/background-tasks.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/command-loop.mjs +82 -23
- package/dist/substrate/runtime/supervisor/command-loop.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/contribution-dispatcher.mjs +16 -0
- package/dist/substrate/runtime/supervisor/contribution-dispatcher.mjs.map +1 -0
- package/dist/substrate/runtime/supervisor/errors.mjs +11 -2
- package/dist/substrate/runtime/supervisor/errors.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/index.mjs +2 -0
- package/dist/substrate/runtime/supervisor/shutdown.mjs +6 -6
- package/dist/substrate/runtime/supervisor/shutdown.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/start-supervisor.mjs +60 -70
- package/dist/substrate/runtime/supervisor/start-supervisor.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/state.d.mts +1 -1
- package/dist/substrate/runtime/supervisor/state.mjs +1 -1
- package/dist/substrate/runtime/supervisor/state.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/teardown.mjs +10 -9
- package/dist/substrate/runtime/supervisor/teardown.mjs.map +1 -1
- package/dist/substrate/runtime/supervisor/wiring.mjs +6 -20
- package/dist/substrate/runtime/supervisor/wiring.mjs.map +1 -1
- package/dist/substrate/runtime/tar/reader.mjs +216 -0
- package/dist/substrate/runtime/tar/reader.mjs.map +1 -0
- package/dist/substrate/runtime/typed-env.mjs.map +1 -1
- package/dist/substrate/versioned-doc-schema.mjs.map +1 -1
- package/dist/substrate/versioned-doc-sync.mjs +5 -5
- package/dist/substrate/versioned-doc-sync.mjs.map +1 -1
- package/dist/surfaces/cli/command-tree.mjs +49 -7
- package/dist/surfaces/cli/command-tree.mjs.map +1 -1
- package/dist/surfaces/cli/commands/config.mjs +1 -1
- package/dist/surfaces/cli/commands/config.mjs.map +1 -1
- package/dist/surfaces/cli/commands/confirm-node.mjs.map +1 -1
- package/dist/surfaces/cli/commands/confirm.mjs.map +1 -1
- package/dist/surfaces/cli/commands/doctor.mjs +1 -1
- package/dist/surfaces/cli/commands/doctor.mjs.map +1 -1
- package/dist/surfaces/cli/commands/prune-picker-entry.mjs.map +1 -1
- package/dist/surfaces/cli/commands/prune-picker.mjs.map +1 -1
- package/dist/surfaces/cli/commands/prune.mjs +1 -1
- package/dist/surfaces/cli/commands/prune.mjs.map +1 -1
- package/dist/surfaces/cli/commands/snapshot.mjs +1 -1
- package/dist/surfaces/cli/commands/snapshot.mjs.map +1 -1
- package/dist/surfaces/cli/commands/status.mjs +1 -1
- package/dist/surfaces/cli/commands/status.mjs.map +1 -1
- package/dist/surfaces/cli/commands/supervisor-presence.mjs.map +1 -1
- package/dist/surfaces/cli/commands/wipe.mjs +3 -4
- package/dist/surfaces/cli/commands/wipe.mjs.map +1 -1
- package/dist/surfaces/cli/envelope.mjs.map +1 -1
- package/dist/surfaces/cli/errors.mjs.map +1 -1
- package/dist/surfaces/cli/flags.mjs.map +1 -1
- package/dist/surfaces/cli/index.mjs +45 -14
- package/dist/surfaces/cli/index.mjs.map +1 -1
- package/dist/surfaces/cli/output.mjs.map +1 -1
- package/dist/surfaces/cli/sysexits.mjs.map +1 -1
- package/dist/surfaces/tui/app.mjs +0 -21
- package/dist/surfaces/tui/app.mjs.map +1 -1
- package/dist/surfaces/tui/dashboard.mjs +0 -48
- package/dist/surfaces/tui/dashboard.mjs.map +1 -1
- package/dist/surfaces/tui/display-derivation.mjs +80 -16
- package/dist/surfaces/tui/display-derivation.mjs.map +1 -1
- package/dist/surfaces/tui/errors.mjs.map +1 -1
- package/dist/surfaces/tui/event-log.mjs +0 -9
- package/dist/surfaces/tui/event-log.mjs.map +1 -1
- package/dist/surfaces/tui/heartbeat.mjs.map +1 -1
- package/dist/surfaces/tui/index.mjs +2 -2
- package/dist/surfaces/tui/index.mjs.map +1 -1
- package/dist/surfaces/tui/input.mjs.map +1 -1
- package/dist/surfaces/tui/mode-detect.mjs.map +1 -1
- package/dist/surfaces/tui/mount-ink.mjs.map +1 -1
- package/dist/surfaces/tui/plain-renderer.mjs +26 -19
- package/dist/surfaces/tui/plain-renderer.mjs.map +1 -1
- package/dist/surfaces/tui/resource-table.mjs +8 -10
- package/dist/surfaces/tui/resource-table.mjs.map +1 -1
- package/images/postgres/Dockerfile +0 -1
- package/images/sui/Dockerfile +27 -54
- package/images/sui/entrypoint.sh +17 -179
- package/package.json +23 -15
- package/dashboard-ui/assets/index-Bmi1UtAg.js +0 -1356
- package/dashboard-ui/assets/index-D5EShVt4.js +0 -3
- package/dashboard-ui/assets/index-Deml9drg.css +0 -1
- package/dist/api/plugin-errors.d.mts +0 -7
- package/dist/api/plugin-errors.mjs +0 -10
- package/dist/api/plugin-errors.mjs.map +0 -1
- package/dist/cli/wirings/build-verb-layers.mjs +0 -42
- package/dist/cli/wirings/build-verb-layers.mjs.map +0 -1
- package/dist/contracts/capability-decl.d.mts +0 -40
- package/dist/orchestrators/built-in-plugin-layers.mjs +0 -54
- package/dist/orchestrators/built-in-plugin-layers.mjs.map +0 -1
- package/dist/orchestrators/run.mjs +0 -91
- package/dist/orchestrators/run.mjs.map +0 -1
- package/dist/orchestrators/runtime-composition.d.mts +0 -10
- package/dist/orchestrators/runtime-composition.mjs +0 -252
- package/dist/orchestrators/runtime-composition.mjs.map +0 -1
- package/dist/orchestrators/snapshot/capture-command.d.mts +0 -1
- package/dist/orchestrators/snapshot/capture-command.mjs +0 -25
- package/dist/orchestrators/snapshot/capture-command.mjs.map +0 -1
- package/dist/orchestrators/snapshot/pending-marker.mjs +0 -99
- package/dist/orchestrators/snapshot/pending-marker.mjs.map +0 -1
- package/dist/orchestrators/snapshot/recover-pending.mjs +0 -223
- package/dist/orchestrators/snapshot/recover-pending.mjs.map +0 -1
- package/dist/orchestrators/snapshot/state-document.d.mts +0 -1
- package/dist/orchestrators/snapshot/state-document.mjs +0 -58
- package/dist/orchestrators/snapshot/state-document.mjs.map +0 -1
- package/dist/plugins/account/spans.mjs +0 -16
- package/dist/plugins/account/spans.mjs.map +0 -1
- package/dist/plugins/account/variants/env.mjs +0 -24
- package/dist/plugins/account/variants/env.mjs.map +0 -1
- package/dist/plugins/account/variants/inline.mjs +0 -13
- package/dist/plugins/account/variants/inline.mjs.map +0 -1
- package/dist/plugins/account/variants/keystore.mjs +0 -91
- package/dist/plugins/account/variants/keystore.mjs.map +0 -1
- package/dist/plugins/action/spans.mjs +0 -11
- package/dist/plugins/action/spans.mjs.map +0 -1
- package/dist/plugins/coin/spans.mjs +0 -20
- package/dist/plugins/coin/spans.mjs.map +0 -1
- package/dist/plugins/deepbook/spans.mjs +0 -18
- package/dist/plugins/deepbook/spans.mjs.map +0 -1
- package/dist/plugins/faucet/spans.mjs +0 -12
- package/dist/plugins/faucet/spans.mjs.map +0 -1
- package/dist/plugins/package/spans.mjs +0 -14
- package/dist/plugins/package/spans.mjs.map +0 -1
- package/dist/plugins/postgres/codegen.mjs +0 -42
- package/dist/plugins/postgres/codegen.mjs.map +0 -1
- package/dist/plugins/postgres/connection.d.mts +0 -33
- package/dist/plugins/postgres/connection.mjs.map +0 -1
- package/dist/plugins/postgres/db-ensure.mjs.map +0 -1
- package/dist/plugins/postgres/errors.d.mts +0 -60
- package/dist/plugins/postgres/errors.mjs +0 -29
- package/dist/plugins/postgres/errors.mjs.map +0 -1
- package/dist/plugins/postgres/index.d.mts +0 -37
- package/dist/plugins/postgres/index.mjs +0 -68
- package/dist/plugins/postgres/index.mjs.map +0 -1
- package/dist/plugins/postgres/routable.mjs +0 -33
- package/dist/plugins/postgres/routable.mjs.map +0 -1
- package/dist/plugins/postgres/service.d.mts +0 -50
- package/dist/plugins/postgres/service.mjs +0 -179
- package/dist/plugins/postgres/service.mjs.map +0 -1
- package/dist/plugins/postgres/snapshot.mjs +0 -32
- package/dist/plugins/postgres/snapshot.mjs.map +0 -1
- package/dist/plugins/postgres/spans.mjs +0 -11
- package/dist/plugins/postgres/spans.mjs.map +0 -1
- package/dist/plugins/seal/spans.mjs +0 -18
- package/dist/plugins/seal/spans.mjs.map +0 -1
- package/dist/plugins/sui/spans.mjs +0 -17
- package/dist/plugins/sui/spans.mjs.map +0 -1
- package/dist/plugins/wallet/spans.mjs +0 -22
- package/dist/plugins/wallet/spans.mjs.map +0 -1
- package/dist/plugins/walrus/registry-publish.d.mts +0 -24
- package/dist/plugins/walrus/spans.mjs +0 -18
- package/dist/plugins/walrus/spans.mjs.map +0 -1
- package/dist/runtime/docker/logs.d.mts +0 -1
- package/dist/runtime/docker/logs.mjs +0 -34
- package/dist/runtime/docker/logs.mjs.map +0 -1
- package/dist/substrate/runtime/artifact-publisher/index.mjs +0 -86
- package/dist/substrate/runtime/artifact-publisher/index.mjs.map +0 -1
- package/dist/substrate/runtime/capability-sinks/index.d.mts +0 -1
- package/dist/substrate/runtime/capability-sinks/index.mjs +0 -3
- package/dist/substrate/runtime/capability-sinks/layer.d.mts +0 -1
- package/dist/substrate/runtime/capability-sinks/layer.mjs +0 -31
- package/dist/substrate/runtime/capability-sinks/layer.mjs.map +0 -1
- package/dist/substrate/runtime/capability-sinks/service.d.mts +0 -95
- package/dist/substrate/runtime/capability-sinks/service.mjs +0 -69
- package/dist/substrate/runtime/capability-sinks/service.mjs.map +0 -1
- package/dist/substrate/runtime/cross-process/lock.d.mts +0 -1
- package/dist/substrate/runtime/cross-process/lock.mjs +0 -23
- package/dist/substrate/runtime/cross-process/lock.mjs.map +0 -1
- package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs +0 -113
- package/dist/substrate/runtime/cross-process/snapshot-reservation.mjs.map +0 -1
- package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs +0 -31
- package/dist/substrate/runtime/lifecycle/lifecycle-fact.mjs.map +0 -1
- package/dist/substrate/runtime/observability/formatter-registry.d.mts +0 -1
- package/dist/substrate/runtime/observability/formatter-registry.mjs +0 -48
- package/dist/substrate/runtime/observability/formatter-registry.mjs.map +0 -1
- package/dist/substrate/runtime/observability/span-store.d.mts +0 -1
- package/dist/substrate/runtime/observability/span-store.mjs +0 -110
- package/dist/substrate/runtime/observability/span-store.mjs.map +0 -1
- package/dist/substrate/runtime/observability/spans.d.mts +0 -1
- package/dist/substrate/runtime/observability/spans.mjs +0 -87
- package/dist/substrate/runtime/observability/spans.mjs.map +0 -1
- package/dist/substrate/runtime/projection/index.mjs +0 -4
- package/dist/substrate/runtime/projection/persisted.mjs +0 -213
- package/dist/substrate/runtime/projection/persisted.mjs.map +0 -1
- package/dist/substrate/runtime/scoped-multimap/service.mjs +0 -52
- package/dist/substrate/runtime/scoped-multimap/service.mjs.map +0 -1
- package/dist/substrate/runtime/scoped-ref-map/index.mjs +0 -2
- package/dist/substrate/runtime/scoped-ref-map/service.mjs +0 -83
- package/dist/substrate/runtime/scoped-ref-map/service.mjs.map +0 -1
- package/dist/substrate/runtime/state-store/index.mjs +0 -3
- package/dist/substrate/runtime/state-store/schema.d.mts +0 -1
- package/dist/substrate/runtime/state-store/schema.mjs +0 -41
- package/dist/substrate/runtime/state-store/schema.mjs.map +0 -1
- package/dist/substrate/runtime/state-store/service.d.mts +0 -1
- package/dist/substrate/runtime/state-store/service.mjs +0 -145
- package/dist/substrate/runtime/state-store/service.mjs.map +0 -1
- package/dist/substrate/runtime/sui-execute/index.mjs.map +0 -1
- package/dist/substrate/runtime/sui-execute/sign-and-dispatch.mjs.map +0 -1
- package/dist/substrate/runtime/sui-ledger/object-ref.mjs.map +0 -1
- package/dist/substrate/runtime/sui-move-build/index.mjs.map +0 -1
- package/dist/substrate/runtime/supervisor/dispatch-contributions.mjs +0 -151
- package/dist/substrate/runtime/supervisor/dispatch-contributions.mjs.map +0 -1
- package/dist/substrate/state-store.d.mts +0 -1
- /package/dist/orchestrators/{snapshot/pending-marker.d.mts → codegen/id-config.d.mts} +0 -0
- /package/dist/orchestrators/snapshot/{recover-pending.d.mts → interrupted-restore.d.mts} +0 -0
- /package/dist/{substrate/runtime/sui-execute → plugins/sui/exec}/sign-and-dispatch.d.mts +0 -0
- /package/dist/plugins/{postgres/snapshot.d.mts → sui/ledger/object-ref.d.mts} +0 -0
- /package/dist/{substrate/runtime/sui-move-build → plugins/sui/move}/index.d.mts +0 -0
- /package/dist/substrate/runtime/{state-store/index.d.mts → reconcile/graph.d.mts} +0 -0
- /package/dist/substrate/runtime/{cross-process/snapshot-reservation.d.mts → supervisor/contribution-dispatcher.d.mts} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"codegen.mjs","names":[],"sources":["../../../src/plugins/deepbook/codegen.ts"],"sourcesContent":["// Deepbook plugin — Codegenable contribution.\n//\n//
|
|
1
|
+
{"version":3,"file":"codegen.mjs","names":[],"sources":["../../../src/plugins/deepbook/codegen.ts"],"sourcesContent":["// Deepbook plugin — Codegenable contribution, via the UNIFIED config-binding\n// declaration.\n//\n// ONE declaration, TWO derivations. A deepbook instance declares its\n// `deepbook.ts` contribution ONCE as a `ConfigBindingSet` (rooted under its\n// instance name). The framework derives both behaviors (see\n// `contracts/config-bindings.ts`):\n// - LIVE (boot): bakes the resolved deployment (package / registry / pool\n// ids, pyth feed ids, …) AND feeds the generic id-config `values`\n// channel.\n// - STATIC (committed tree): emits `resolveValue('deepbook:<name>', '<key>')`\n// so the committed `deepbook.ts` carries NO baked on-chain id / URL.\n//\n// STRUCTURAL fields (`name`, `network`) stay literals. The scalar ids\n// (`packageId` / `registryId` / `adminCapId` / `deepTreasuryId`) and the\n// composite values (`pools` / `pyth` / `margin` / endpoint URLs) are RUNTIME\n// (loaded config data). The composite values carry interleaved structural\n// names + runtime ids in array shapes the flat config-path model can't split,\n// so each is resolved as ONE whole-value blob through the generic channel.\n\nimport type { CodegenableDecl } from '../../contracts/codegenable.ts';\nimport {\n\tkeyedBucketSpec,\n\tliveBucketCodegen,\n\tstaticBucketCodegen,\n\ttype BucketField,\n\ttype SiblingBucketSpec,\n} from '../../contracts/config-bindings.ts';\nimport type { JsonValue } from '../../orchestrators/codegen/id-config.ts';\n\nexport interface DeepbookBindings {\n\treadonly name: string;\n\treadonly network: string;\n\treadonly packageId: string;\n\treadonly registryId: string;\n\treadonly adminCapId: string | null;\n\treadonly deepTreasuryId: string | null;\n\t/** Per-pool typed shape (informational only — pools resolve as one blob):\n\t * `{ name, poolId, base, quote, baseCoinType, quoteCoinType }`. */\n\treadonly pools: ReadonlyArray<{\n\t\treadonly name: string;\n\t\treadonly poolId: string;\n\t\treadonly base: string;\n\t\treadonly quote: string;\n\t\treadonly baseCoinType: string;\n\t\treadonly quoteCoinType: string;\n\t}>;\n\treadonly pyth: {\n\t\treadonly packageId: string | null;\n\t\treadonly stateId: string | null;\n\t\treadonly wormholeStateId: string | null;\n\t\treadonly feeds: ReadonlyArray<{\n\t\t\treadonly symbol: string;\n\t\t\treadonly feedId: string;\n\t\t\treadonly priceInfoObjectId: string;\n\t\t\treadonly price: string;\n\t\t\treadonly expo: number;\n\t\t}>;\n\t} | null;\n\treadonly margin: {\n\t\treadonly packageId: string;\n\t\treadonly registryId: string;\n\t} | null;\n\treadonly serverUrl: string | null;\n\treadonly indexerUrl: string | null;\n}\n\n/** User-declared known/override deployment ids, available at factory time. A\n * KNOWN or OVERRIDE deployment's ids are DECLARED config (not loaded-at-runtime\n * data), so the committed `deepbook.ts` bakes them as LITERALS. Only the\n * always-declared scalar ids + the (declared, feed-less) pyth blob are carried;\n * the dynamically-discovered fields (`adminCapId` for known, `pools`, server\n * URLs) stay `resolveValue`. */\nexport interface DeepbookKnownIds {\n\treadonly packageId: string;\n\treadonly registryId: string;\n\treadonly deepTreasuryId?: string | null;\n\treadonly pyth?: DeepbookBindings['pyth'];\n}\n\n/** Static-config shape a deepbook instance can describe BEFORE acquire —\n * the structural names the stack-free `staticCodegen` hook needs. When\n * `known` is present (known / override mode), its declared ids are baked as\n * literals; otherwise (local mode) every id resolves at app build/dev time. */\nexport interface DeepbookStaticConfig {\n\treadonly name: string;\n\treadonly network: string;\n\treadonly known?: DeepbookKnownIds;\n}\n\ntype DeepbookLiveState = DeepbookBindings;\n\n/** TS source-type strings for the resolved deepbook fields, so the committed\n * `deepbook.ts` carries the SAME concrete types `DeepbookBindings` declares\n * (the generic `resolveValue` channel would otherwise return `unknown`). The\n * composite blobs (`pools`/`pyth`/`margin`) inline the structural literal\n * types so no emitted type-import is needed. */\nconst POOL_TS_TYPE =\n\t'ReadonlyArray<{ readonly name: string; readonly poolId: string; readonly base: string; readonly quote: string; readonly baseCoinType: string; readonly quoteCoinType: string }>';\nconst PYTH_TS_TYPE =\n\t'{ readonly packageId: string | null; readonly stateId: string | null; readonly wormholeStateId: string | null; readonly feeds: ReadonlyArray<{ readonly symbol: string; readonly feedId: string; readonly priceInfoObjectId: string; readonly price: string; readonly expo: number }> } | null';\nconst MARGIN_TS_TYPE = '{ readonly packageId: string; readonly registryId: string } | null';\n\n/** Build the deepbook instance's config-binding spec for `name`. `name` /\n * `network` are structural literals; the deployment ids + composite values\n * are runtime-resolved (`resolveValue`). */\nconst deepbookBucketSpec = (\n\tstructural: DeepbookStaticConfig,\n): SiblingBucketSpec<DeepbookLiveState> => {\n\tconst known = structural.known;\n\t// A known/override deployment's declared scalar ids are config, baked as\n\t// literals; a local deployment's ids are dynamic, resolved at build/dev time.\n\tconst idField = (\n\t\tkey: 'packageId' | 'registryId',\n\t\tlive: (s: DeepbookLiveState) => JsonValue,\n\t): BucketField<DeepbookLiveState> =>\n\t\tknown !== undefined\n\t\t\t? { key, variant: 'literal', value: known[key] }\n\t\t\t: { key, variant: 'resolved', tsType: 'string', live };\n\tconst fields: ReadonlyArray<BucketField<DeepbookLiveState>> = [\n\t\t{ key: 'name', variant: 'literal', value: structural.name },\n\t\t{ key: 'network', variant: 'literal', value: structural.network },\n\t\tidField('packageId', (s) => s.packageId),\n\t\tidField('registryId', (s) => s.registryId),\n\t\t// `adminCapId` is null for known/override (never declared there) and\n\t\t// dynamically captured for local — always resolved.\n\t\t{ key: 'adminCapId', variant: 'resolved', tsType: 'string | null', live: (s) => s.adminCapId },\n\t\t// `deepTreasuryId` is a declared known-deployment id when present; a\n\t\t// dynamic local capture otherwise.\n\t\tknown !== undefined\n\t\t\t? {\n\t\t\t\t\tkey: 'deepTreasuryId',\n\t\t\t\t\tvariant: 'literal',\n\t\t\t\t\tvalue: (known.deepTreasuryId ?? null) as JsonValue,\n\t\t\t\t}\n\t\t\t: {\n\t\t\t\t\tkey: 'deepTreasuryId',\n\t\t\t\t\tvariant: 'resolved',\n\t\t\t\t\ttsType: 'string | null',\n\t\t\t\t\tlive: (s) => s.deepTreasuryId,\n\t\t\t\t},\n\t\t// `pools` is always dynamically discovered (even known/override start\n\t\t// empty + may be populated live) — resolved as one whole-value blob.\n\t\t{\n\t\t\tkey: 'pools',\n\t\t\tvariant: 'resolved',\n\t\t\ttsType: POOL_TS_TYPE,\n\t\t\tlive: (s) => s.pools as unknown as JsonValue,\n\t\t},\n\t\t// `pyth` is a DECLARED testnet/mainnet blob for known deployments\n\t\t// (literal); a dynamically-deployed mock-Pyth blob for local (resolved).\n\t\tknown !== undefined\n\t\t\t? { key: 'pyth', variant: 'literal', value: (known.pyth ?? null) as JsonValue }\n\t\t\t: {\n\t\t\t\t\tkey: 'pyth',\n\t\t\t\t\tvariant: 'resolved',\n\t\t\t\t\ttsType: PYTH_TS_TYPE,\n\t\t\t\t\tlive: (s) => s.pyth as unknown as JsonValue,\n\t\t\t\t},\n\t\t{\n\t\t\tkey: 'margin',\n\t\t\tvariant: 'resolved',\n\t\t\ttsType: MARGIN_TS_TYPE,\n\t\t\tlive: (s) => s.margin as unknown as JsonValue,\n\t\t},\n\t\t{ key: 'serverUrl', variant: 'resolved', tsType: 'string | null', live: (s) => s.serverUrl },\n\t\t{ key: 'indexerUrl', variant: 'resolved', tsType: 'string | null', live: (s) => s.indexerUrl },\n\t];\n\treturn keyedBucketSpec({ bucket: 'deepbook.ts', kind: 'deepbook', key: structural.name, fields });\n};\n\n/** Build the LIVE Codegenable contribution for a deepbook instance. Bakes\n * the resolved deployment + feeds the generic id-config `values` channel.\n * Every instance folds into one `generated/deepbook.ts` exporting\n * `export const deepbook = { <name>: DeepbookBindings, ... }`. */\nexport const makeDeepbookCodegenable = (bindings: DeepbookBindings): CodegenableDecl =>\n\tliveBucketCodegen(\n\t\tdeepbookBucketSpec({ name: bindings.name, network: bindings.network }),\n\t\tbindings,\n\t);\n\n/** Build the STATIC (stack-free) Codegenable contribution for a deepbook\n * instance. Emits `resolveValue('deepbook:<name>', '<key>')` for the runtime\n * fields; the committed `deepbook.ts` carries no baked on-chain id / URL. */\nexport const makeDeepbookStaticCodegen = (config: DeepbookStaticConfig): CodegenableDecl =>\n\tstaticBucketCodegen(deepbookBucketSpec(config));\n"],"mappings":";;;;;;;AAiGA,MAAM,eACL;AACD,MAAM,eACL;AACD,MAAM,iBAAiB;;;;AAKvB,MAAM,sBACL,eAC0C;CAC1C,MAAM,QAAQ,WAAW;CAGzB,MAAM,WACL,KACA,SAEA,UAAU,KAAA,IACP;EAAE;EAAK,SAAS;EAAW,OAAO,MAAM;CAAK,IAC7C;EAAE;EAAK,SAAS;EAAY,QAAQ;EAAU;CAAK;CACvD,MAAM,SAAwD;EAC7D;GAAE,KAAK;GAAQ,SAAS;GAAW,OAAO,WAAW;EAAK;EAC1D;GAAE,KAAK;GAAW,SAAS;GAAW,OAAO,WAAW;EAAQ;EAChE,QAAQ,cAAc,MAAM,EAAE,SAAS;EACvC,QAAQ,eAAe,MAAM,EAAE,UAAU;EAGzC;GAAE,KAAK;GAAc,SAAS;GAAY,QAAQ;GAAiB,OAAO,MAAM,EAAE;EAAW;EAG7F,UAAU,KAAA,IACP;GACA,KAAK;GACL,SAAS;GACT,OAAQ,MAAM,kBAAkB;EACjC,IACC;GACA,KAAK;GACL,SAAS;GACT,QAAQ;GACR,OAAO,MAAM,EAAE;EAChB;EAGF;GACC,KAAK;GACL,SAAS;GACT,QAAQ;GACR,OAAO,MAAM,EAAE;EAChB;EAGA,UAAU,KAAA,IACP;GAAE,KAAK;GAAQ,SAAS;GAAW,OAAQ,MAAM,QAAQ;EAAmB,IAC5E;GACA,KAAK;GACL,SAAS;GACT,QAAQ;GACR,OAAO,MAAM,EAAE;EAChB;EACF;GACC,KAAK;GACL,SAAS;GACT,QAAQ;GACR,OAAO,MAAM,EAAE;EAChB;EACA;GAAE,KAAK;GAAa,SAAS;GAAY,QAAQ;GAAiB,OAAO,MAAM,EAAE;EAAU;EAC3F;GAAE,KAAK;GAAc,SAAS;GAAY,QAAQ;GAAiB,OAAO,MAAM,EAAE;EAAW;CAC9F;CACA,OAAO,gBAAgB;EAAE,QAAQ;EAAe,MAAM;EAAY,KAAK,WAAW;EAAM;CAAO,CAAC;AACjG;;;;;AAMA,MAAa,2BAA2B,aACvC,kBACC,mBAAmB;CAAE,MAAM,SAAS;CAAM,SAAS,SAAS;AAAQ,CAAC,GACrE,QACD;;;;AAKD,MAAa,6BAA6B,WACzC,oBAAoB,mBAAmB,MAAM,CAAC"}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { chainId } from "../../substrate/brand.mjs";
|
|
2
1
|
import { probeManyLenient } from "../../substrate/runtime/probes.mjs";
|
|
3
2
|
import { STALE_OBJECT_VERSION_RETRY_PROFILE, makeSpacedRetrySchedule } from "../../substrate/runtime/retry-policy.mjs";
|
|
4
|
-
import { executeSuiTx, formatExecutedFailure, isSuiStaleObjectVersionError } from "
|
|
3
|
+
import { executeSuiTx, formatExecutedFailure, isSuiStaleObjectVersionError } from "../sui/exec/index.mjs";
|
|
4
|
+
import { currentLedgerObjectRef } from "../sui/ledger/object-ref.mjs";
|
|
5
|
+
import "../sui/index.mjs";
|
|
5
6
|
import { artifactPublishError } from "../../primitives/artifact-publisher.mjs";
|
|
6
7
|
import { acquireOnChainArtifact } from "../internal/acquire-on-chain-artifact.mjs";
|
|
7
|
-
import { DeepbookSpans } from "./spans.mjs";
|
|
8
8
|
import { deepbookPluginError } from "./errors.mjs";
|
|
9
|
-
import { currentLedgerObjectRef } from "../../substrate/runtime/sui-ledger/object-ref.mjs";
|
|
10
9
|
import { stableContentHash } from "./hash.mjs";
|
|
11
10
|
import { isPoolForPair } from "./type-strings.mjs";
|
|
12
11
|
import { Effect } from "effect";
|
|
@@ -145,7 +144,7 @@ const createDeepbookPools = (publisher, sdk, chain, signer, pkg, pools) => Effec
|
|
|
145
144
|
if (pools.length === 0) return { pools: [] };
|
|
146
145
|
const produced = yield* acquireOnChainArtifact(publisher, {
|
|
147
146
|
namespace: "deepbook/pools",
|
|
148
|
-
chain
|
|
147
|
+
chain,
|
|
149
148
|
contentHash: poolInputsHash(pkg, signer, pools),
|
|
150
149
|
verify: (cached) => buildVerifyProbe(sdk, cached),
|
|
151
150
|
produce: Effect.gen(function* () {
|
|
@@ -195,10 +194,7 @@ const createDeepbookPools = (publisher, sdk, chain, signer, pkg, pools) => Effec
|
|
|
195
194
|
const resolvedPools = pools.map((pool) => producedPools.get(pool.name));
|
|
196
195
|
if (resolvedPools.some((pool) => pool === void 0)) return yield* Effect.fail(deepbookPluginError("create-pools", "deepbook pool creation did not return every pool."));
|
|
197
196
|
return fromCachedPools({ pools: resolvedPools.filter((pool) => pool !== void 0) });
|
|
198
|
-
})
|
|
199
|
-
[DeepbookSpans.packageId]: pkg.packageId,
|
|
200
|
-
[DeepbookSpans.poolCount]: pools.length
|
|
201
|
-
} }));
|
|
197
|
+
});
|
|
202
198
|
const poolByName = (pools, name) => pools.find((pool) => pool.name === name);
|
|
203
199
|
const pickCreatedBalanceManager = (changes) => {
|
|
204
200
|
for (const change of changes) {
|
|
@@ -300,7 +296,7 @@ const seedDeepbookPools = (publisher, sdk, chain, signer, pkg, specs, pools) =>
|
|
|
300
296
|
if (pool === void 0) return yield* Effect.fail(deepbookPluginError("create-pools", `deepbook seed pool '${spec.name}' was not created.`));
|
|
301
297
|
const result = yield* acquireOnChainArtifact(publisher, {
|
|
302
298
|
namespace: `deepbook/seed/${spec.name}`,
|
|
303
|
-
chain
|
|
299
|
+
chain,
|
|
304
300
|
contentHash: seedInputsHash(pkg, signer, spec, pool),
|
|
305
301
|
verify: (cached) => buildSeedVerifyProbe(sdk, cached),
|
|
306
302
|
produce: Effect.gen(function* () {
|
|
@@ -365,10 +361,7 @@ const seedDeepbookPools = (publisher, sdk, chain, signer, pkg, specs, pools) =>
|
|
|
365
361
|
seeded.push(result);
|
|
366
362
|
}
|
|
367
363
|
return seeded;
|
|
368
|
-
})
|
|
369
|
-
[DeepbookSpans.packageId]: pkg.packageId,
|
|
370
|
-
[DeepbookSpans.poolCount]: specs.filter((spec) => spec.seed !== void 0).length
|
|
371
|
-
} }));
|
|
364
|
+
});
|
|
372
365
|
//#endregion
|
|
373
366
|
export { createDeepbookPools, seedDeepbookPools };
|
|
374
367
|
|
|
@@ -1 +1 @@
|
|
|
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":";;;;;;;;;;;;;;;;AAqGA,MAAM,mBAAmB,YAA4D,EACpF,OAAO,OAAO,MAAM,KAAK,UAAU;CAClC,MAAM,KAAK;CACX,QAAQ,KAAK;CACb,MAAM,KAAK;CACX,OAAO,KAAK;CACZ,cAAc,KAAK;CACnB,eAAe,KAAK;CACpB,UAAU,OAAO,KAAK,SAAS;CAC/B,SAAS,OAAO,KAAK,QAAQ;CAC7B,SAAS,OAAO,KAAK,QAAQ;CAC7B,EAAE,EACH;AAED,MAAM,gBAAgB,MAAgC,YAAwC;CAC7F,MAAM,KAAK;CACX;CACA,MAAM,KAAK;CACX,OAAO,KAAK;CACZ,cAAc,mBAAmB,KAAK,aAAa;CACnD,eAAe,mBAAmB,KAAK,cAAc;CACrD,UAAU,KAAK,SAAS,UAAU;CAClC,SAAS,KAAK,QAAQ,UAAU;CAChC,SAAS,KAAK,QAAQ,UAAU;CAChC;AAED,MAAM,kBACL,KACA,QACA,UAEA,kBACC;CACC;CACA,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,GAAG,MACD,KAAK,SACL;EACC,KAAK;EACL,mBAAmB,KAAK,aAAa;EACrC,mBAAmB,KAAK,cAAc;EACtC,KAAK,SAAS,UAAU;EACxB,KAAK,QAAQ,UAAU;EACvB,KAAK,QAAQ,UAAU;EACvB,OAAO,KAAK,YAAY;EACxB,OAAO,KAAK,WAAW;EACvB,CAAC,KAAK,IAAI,CACX,CACA,MAAM;CACR,CAAC,KAAK,KAAK,CACZ;AAEF,MAAM,kBACL,KACA,QACA,MACA,SAEA,kBACC;CACC;CACA,IAAI;CACJ,IAAI;CACJ,OAAO;CACP,KAAK;CACL,KAAK;CACL,mBAAmB,KAAK,aAAa;CACrC,mBAAmB,KAAK,cAAc;CACtC,KAAK,MAAM,YAAY,UAAU,IAAI;CACrC,KAAK,MAAM,aAAa,UAAU,IAAI;CACtC,IAAI,KAAK,MAAM,UAAU,EAAE,EAAE,KAAK,OAAO,UACxC;EACC;EACA,MAAM;EACN,MAAM,MAAM,UAAU;EACtB,MAAM,SAAS,UAAU;EACzB,MAAM,eAAe,UAAU,IAAI;EACnC,OAAO,MAAM,eAAe,MAAM;EAClC,CAAC,KAAK,IAAI,CACX;CACD,CAAC,KAAK,KAAK,CACZ;AAEF,MAAM,uBACL,KACA,aAEA,OAAO,WAAW;CACjB,WAAW,IAAI,KAAK,UAAU,EAAE,UAAU,CAAC;CAC3C,aAAa;CACb,CAAC,CAAC,KAAK,OAAO,YAAY,OAAO,QAAQ,KAAK,CAAC,CAAC;AAElD,MAAM,oBACL,KACA,WAEA,OAAO,IAAI,aAAa;AAIvB,MAAI,OAHmB,iBACtB,OAAO,MAAM,KAAK,SAAS,oBAAoB,KAAK,KAAK,OAAO,CAAC,CACjE,EACW,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,KAAA,EAAU,CAAE,QAAO;AACrE,QAAO;EACN;AAEH,MAAM,wBACL,KACA,WAEA,OAAO,IAAI,aAAa;CACvB,MAAM,MAAM,OAAO,oBAAoB,KAAK,OAAO,iBAAiB;AACpE,KAAI,QAAQ,QAAQ,QAAQ,KAAA,EAAW,QAAO;AAC9C,QAAO;EACN;AAEH,MAAM,sBACL,KACA,QACA,KACA,SAEA,OAAO,WAAW;CACjB,KAAK,YAAY;EAChB,MAAM,KAAK,IAAI,aAAa;AAC5B,KAAG,UAAU,OAAO,QAAQ;AAC5B,KAAG,SAAS;GACX,QAAQ,GAAG,IAAI,UAAU;GACzB,eAAe,CAAC,KAAK,cAAc,KAAK,cAAc;GACtD,WAAW,CAAC,GAAG,OAAO,IAAI,WAAW,CAAC;GACtC,CAAC;EAKF,MAAM,SAAQ,MAJO,IAAI,OAAO,KAAK,oBAAoB;GACxD,aAAa;GACb,SAAS;IAAE,gBAAgB;IAAM,SAAS;IAAM;GAChD,CAAC,EACmB,iBAAiB,IAAI,eAAe,IAAI;AAC7D,MAAI,UAAU,KAAA,EAAW,QAAO;EAChC,MAAM,aAAa,oBAAoB,IAAI,QAAQ,MAAM,MAAM,CAAC;AAMhE,MAAI,eAAe,oBAAoB,MAAM,CAAE,QAAO;AACtD,SAAO;;CAER,aAAa;CACb,CAAC,CAAC,KAAK,OAAO,YAAY,OAAO,QAAQ,KAAK,CAAC,CAAC;AAElD,MAAM,qBACL,KACA,QACA,KACA,UAEA,OAAO,IAAI,aAAa;CACvB,MAAM,wBAAQ,IAAI,KAAiC;AACnD,MAAK,MAAM,QAAQ,OAAO;EACzB,MAAM,SAAS,OAAO,mBAAmB,KAAK,QAAQ,KAAK,KAAK;AAChE,MAAI,WAAW,KACd,OAAM,IAAI,KAAK,MAAM,aAAa,MAAM,OAAO,CAAC;;AAGlD,QAAO;EACN;AASH,MAAM,mBACL,SAKA,SACmB;AACnB,MAAK,MAAM,UAAU,SAAS;EAC7B,MAAM,OAAO,OAAO;AACpB,MAAI,OAAO,gBAAgB,aAAa,SAAS,KAAA,EAAW;AAC5D,MAAI,cAAc,MAAM,KAAK,cAAc,KAAK,cAAc,CAC7D,QAAO,OAAO;;AAGhB,QAAO;;AAGR,MAAM,oBAAoB,OAAsB,QAC/C,oBAAoB,OAAO,IAAI,SAAS,yBAAyB,IAAI,SAAS,OAAO,IAAI,CAAC;AAE3F,MAAM,uBAAuB;AAC7B,MAAM,6BAA6B;AACnC,MAAM,gBAAgB;AACtB,MAAM,WAAW,mBAAmB,gBAAgB;AACpD,MAAM,kBAAkB;AACxB,MAAM,+BAA+B;;;;;;AAMrC,MAAM,oCACL,WAEA,aAAa,OAAO,CAAC,KACpB,OAAO,MAAM;CACZ,UAAU,wBACT,mCAAmC,SACnC,mCAAmC,SACnC;CACD,OAAO;CACP,CAAC,CACF;AAMF,MAAa,uBACZ,WACA,KACA,OACA,QACA,KACA,UAEA,OAAO,IAAI,aAAa;AACvB,KAAI,MAAM,WAAW,EAAG,QAAO,EAAE,OAAO,EAAE,EAAE;CAE5C,MAAM,WAAW,OAAO,uBAGtB,WAAW;EACZ,WAAW;EACX,OAAOA,QAAa,MAAM;EAC1B,aAAa,eAAe,KAAK,QAAQ,MAAM;EAC/C,SAAS,WAAW,iBAAiB,KAAK,OAAO;EACjD,SAAS,OAAO,IAAI,aAAa;GAChC,MAAM,gBAAgB,OAAO,kBAAkB,KAAK,QAAQ,KAAK,MAAM;GACvE,MAAM,eAAe,MAAM,QAAQ,SAAS,CAAC,cAAc,IAAI,KAAK,KAAK,CAAC;GAE1E,MAAM,cAAoC,EAAE;AAC5C,OAAI,aAAa,SAAS,GAAG;IAC5B,MAAM,SAAS,OAAO,aAAa;KAClC,QAAQ,IAAI;KACZ;KACA,OAAO,YAAY;MAClB,MAAM,KAAK,IAAI,aAAa;AAC5B,SAAG,UAAU,OAAO,QAAQ;AAC5B,SAAG,aAAa,IAAY;AAC5B,SAAG,SAAS;OACX,QAAQ,GAAG,IAAI,UAAU;OACzB,WAAW,CAAC,GAAG,OAAO,IAAI,WAAW,EAAE,GAAG,OAAO,IAAI,WAAW,CAAC;OACjE,CAAC;AACF,WAAK,MAAM,QAAQ,aAClB,IAAG,SAAS;OACX,QAAQ,GAAG,IAAI,UAAU;OACzB,eAAe,CAAC,KAAK,cAAc,KAAK,cAAc;OACtD,WAAW;QACV,GAAG,OAAO,IAAI,WAAW;QACzB,GAAG,KAAK,IAAI,KAAK,SAAS;QAC1B,GAAG,KAAK,IAAI,KAAK,QAAQ;QACzB,GAAG,KAAK,IAAI,KAAK,QAAQ;QACzB,GAAG,KAAK,KAAK,KAAK,YAAY;QAC9B,GAAG,KAAK,KAAK,KAAK,WAAW;QAC7B,GAAG,OAAO,IAAI,WAAW;QACzB;OACD,CAAC;AAEH,aAAO,GAAG,MAAM,EACf,QAAQ,IAAI,QACZ,CAAC;;KAEH,CAAC,CAAC,KACF,OAAO,UACL,QACA,qBACC,kBACA,qCAAqC,IAAI,UACzC,CACF,CACD;AACD,QAAI,OAAO,UAAU,oBACpB,QAAO,OAAO,OAAO,KACpB,qBACC,kBACA,yDACC,sBAAsB,OAAO,kBAAkB,CAChD,CACD;IAEF,MAAM,UAAU,OAAO;AAEvB,SAAK,MAAM,QAAQ,cAAc;KAChC,MAAM,SAAS,gBAAgB,QAAQ,eAAe,KAAK;AAC3D,SAAI,WAAW,KACd,QAAO,OAAO,OAAO,KACpB,qBACC,kBACA,kBAAkB,KAAK,KAAK,uCAChB,QAAQ,OAAO,IAC3B,CACD;AAEF,iBAAY,KAAK,aAAa,MAAM,OAAO,CAAC;;;AAI9C,UAAO,EACN,OAAO,MACL,KACC,SACA,cAAc,IAAI,KAAK,KAAK,IAAI,YAAY,MAAM,MAAM,EAAE,SAAS,KAAK,KAAK,CAC9E,CACA,QAAQ,SAAqC,SAAS,KAAA,EAAU,EAClE;IACA;EACF,CAAC,CAAC,KAAK,OAAO,UAAU,QAAQ,iBAAiB,gBAAgB,IAAI,CAAC,CAAC;CAExE,MAAM,gBAAgB,IAAI,IAAI,SAAS,MAAM,KAAK,SAAS,CAAC,KAAK,MAAM,KAAK,CAAC,CAAC;CAC9E,MAAM,gBAAgB,MAAM,KAAK,SAAS,cAAc,IAAI,KAAK,KAAK,CAAC;AACvE,KAAI,cAAc,MAAM,SAAS,SAAS,KAAA,EAAU,CACnD,QAAO,OAAO,OAAO,KACpB,oBAAoB,gBAAgB,oDAAoD,CACxF;AAGF,QAAO,gBAAgB,EACtB,OAAO,cAAc,QAAQ,SAAqC,SAAS,KAAA,EAAU,EACrF,CAAC;EACD,CAAC,KACF,OAAO,SAAS,wCAAwC,EACvD,YAAY;EACV,cAAc,YAAY,IAAI;EAC9B,cAAc,YAAY,MAAM;CACjC,EACD,CAAC,CACF;AAMF,MAAM,cAAc,OAAoC,SACvD,MAAM,MAAM,SAAS,KAAK,SAAS,KAAK;AAEzC,MAAM,6BACL,YAKmB;AACnB,MAAK,MAAM,UAAU,SAAS;AAC7B,MAAI,OAAO,gBAAgB,UAAW;AACtC,MAAI,OAAO,YAAY,SAAS,oCAAoC,CACnE,QAAO,OAAO;;AAGhB,QAAO;;AAGR,MAAM,6BACL,IACA,KACA,QACA,KACA,gBACA,UACA,WACI;AACJ,KAAI,WAAW,KAAA,KAAa,WAAW,GAAI;AAC3C,QAAO,yBAAyB,IAAI,KAAK,QAAQ,UAAU,OAAO,CAAC,MAAM,SAAS;AACjF,KAAG,SAAS;GACX,QAAQ,GAAG,IAAI,UAAU;GACzB,eAAe,CAAC,SAAS;GACzB,WAAW,CAAC,gBAAgB,KAAK;GACjC,CAAC;GACD;;AAGH,MAAM,eAAe,QAAyB;AAC7C,KAAI,eAAe,MAAO,QAAO,IAAI;AACrC,KAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC5C,MAAI,aAAa,OAAO,OAAO,IAAI,YAAY,SAAU,QAAO,IAAI;AACpE,MAAI,YAAY,OAAO,OAAO,IAAI,WAAW,SAAU,QAAO,IAAI;;AAEnE,QAAO,OAAO,IAAI;;AAGnB,MAAM,sBACL,UACA,QACA,UACA,WAC+C;AAC/C,KAAI,aAAa,KAAA,KAAa,WAAW,KAAA,KAAa,WAAW,GAChE,QAAO,OAAO;AAEf,QAAO,SACL,QAAQ;EAAE,SAAS,OAAO;EAAS;EAAQ,CAAC,CAC5C,KACA,OAAO,UACL,QACA,qBACC,kBACA,oCAAoC,SAAS,iBAC3B,OAAO,KAAK,WAAW,OAAO,IAAI,YAAY,IAAI,GACpE,CACF,CACD;;AAUH,MAAa,6BAA6B,OACzC,KACA,QACA,UACA,QACA,YAIK;CACL,MAAM,WAAwB,EAAE;CAChC,IAAI,kBAAkB;CACtB,IAAI,SAAwB;AAC5B,IAAG;EACF,MAAM,OAAO,MAAM,IAAI,OAAO,KAAK,UAAU;GAC5C,OAAO,OAAO;GACd;GACA;GACA,OAAO;GACP,CAAC;AACF,OAAK,MAAM,QAAQ,KAAK,SAAS;AAChC,YAAS,KAAK,KAAK;AACnB,sBAAmB,OAAO,KAAK,QAAQ;AACvC,OAAI,mBAAmB,OAAQ;;AAEhC,WAAS,KAAK;AACd,MAAI,mBAAmB,OAAQ;AAC/B,MAAI,CAAC,KAAK,YAAa;UACf,WAAW;AAEpB,KAAI,kBAAkB,UAAU,SAAS,WAAW,EACnD,OAAM,IAAI,MACT,cAAc,OAAO,KAAK,qBAAqB,SAAS,OAAO,QAAQ,aAC1D,OAAO,cAAc,gBAAgB,GAClD;AAGF,QAAO;EAAE;EAAU;EAAiB;;AAGrC,MAAa,4BAA4B,OACxC,IACA,KACA,QACA,qBACI;CAEJ,MAAM,EAAE,aAAa,MAAM,2BAC1B,KACA,QACA,UAJuB,kBAAkB,kBAMzC,qCACA;CACD,MAAM,UAAU,MAAM,QAAQ,IAC7B,SAAS,KAAK,SAAS,uBAAuB,KAAK,KAAK,SAAS,CAAC,CAClE;AACD,IAAG,aAAa,gBAAgB;AAChC,IAAG,YAAY,6BAA6B;AAC5C,IAAG,cAAc,QAAQ;;AAG1B,MAAM,wBACL,MACA,UAEC,mBAAmB,KAAK,aAAa,KAAK,WAAY,KAAK,cAAc,KAAM,OAC/E,mBAAmB,KAAK,cAAc,KAAK,WAAY,KAAK,eAAe,KAAM;AAEnF,MAAM,eAAe,OACpB,IACA,KACA,UACA,YACI;CAUJ,MAAM,wBAAuB,MATV,IAAI,KAAK,UAAU,EAAE,UAAU,CAAC,EASlB,QAAQ,OAAO,QAAQ;AACxD,KAAI,yBAAyB,KAAA,EAC5B,OAAM,IAAI,MAAM,oBAAoB,SAAS,kBAAkB;AAEhE,QAAO,GAAG,gBAAgB;EACzB;EACA;EACA;EACA,CAAC;;AAGH,MAAM,2BAA2B,OAChC,IACA,KACA,QACA,UACA,WACI;AACJ,KAAI,mBAAmB,SAAS,KAAK,UAAU;EAC9C,MAAM,CAAC,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC;AAC3D,SAAO;;CAGR,MAAM,EAAE,UAAU,oBAAoB,MAAM,2BAC3C,KACA,QACA,UACA,QACA,wBACA;CAED,MAAM,gBAAgB,SAAS;AAC/B,KAAI,kBAAkB,KAAA,EACrB,OAAM,IAAI,MACT,cAAc,OAAO,KAAK,WAAW,SAAS,mCAC9C;CAEF,MAAM,QAAQ,MAAM,uBAAuB,KAAK,cAAc,SAAS;CACvE,MAAM,OAAO,MAAM,QAAQ,IAC1B,SAAS,MAAM,EAAE,CAAC,KAAK,SAAS,uBAAuB,KAAK,KAAK,SAAS,CAAC,CAC3E;CACD,MAAM,WAAW,GAAG,UAAU,MAAM;AACpC,KAAI,KAAK,SAAS,EACjB,IAAG,WACF,UACA,KAAK,KAAK,SAAS,GAAG,UAAU,KAAK,CAAC,CACtC;AAEF,KAAI,oBAAoB,OAAQ,QAAO;CACvC,MAAM,CAAC,QAAQ,GAAG,WAAW,UAAU,CAAC,GAAG,KAAK,IAAI,OAAO,CAAC,CAAC;AAC7D,QAAO;;AAGR,MAAa,qBACZ,WACA,KACA,OACA,QACA,KACA,OACA,UAEA,OAAO,IAAI,aAAa;CACvB,MAAM,SAAmC,EAAE;AAC3C,MAAK,MAAM,QAAQ,OAAO;EACzB,MAAM,OAAO,KAAK;AAClB,MAAI,SAAS,KAAA,KAAa,KAAK,OAAO,WAAW,EAAG;EACpD,MAAM,OAAO,WAAW,OAAO,KAAK,KAAK;AACzC,MAAI,SAAS,KAAA,EACZ,QAAO,OAAO,OAAO,KACpB,oBAAoB,gBAAgB,uBAAuB,KAAK,KAAK,oBAAoB,CACzF;EAGF,MAAM,SAAS,OAAO,uBAGpB,WAAW;GACZ,WAAW,iBAAiB,KAAK;GACjC,OAAOA,QAAa,MAAM;GAC1B,aAAa,eAAe,KAAK,QAAQ,MAAM,KAAK;GACpD,SAAS,WAAW,qBAAqB,KAAK,OAAO;GACrD,SAAS,OAAO,IAAI,aAAa;AAC/B,WAAO,mBACN,KAAK,qBACL,QACA,KAAK,cACL,KAAK,WACL;AACD,WAAO,mBACN,KAAK,sBACL,QACA,KAAK,eACL,KAAK,YACL;IAED,MAAM,SAAS,OAAO,iCAAiC;KACtD,QAAQ,IAAI;KACZ;KACA,OAAO,YAAY;MAClB,MAAM,KAAK,IAAI,aAAa;AAC5B,SAAG,UAAU,OAAO,QAAQ;AAC5B,YAAM,0BAA0B,IAAI,KAAK,QAAQ,qBAAqB,MAAM,KAAK,CAAC;MAClF,MAAM,WAAW,MAAM,aAAa,IAAI,KAAK,IAAI,YAAY,KAAK;MAClE,MAAM,aAAa,MAAM,aAAa,IAAI,KAAK,KAAK,QAAQ,KAAK;MACjE,MAAM,iBAAiB,GAAG,SAAS;OAClC,QAAQ,GAAG,IAAI,UAAU;OACzB,WAAW,EAAE;OACb,CAAC;AACF,SAAG,SAAS;OACX,QAAQ,GAAG,IAAI,UAAU;OACzB,WAAW,CAAC,gBAAgB,SAAS;OACrC,CAAC;AACF,YAAM,0BACL,IACA,KACA,QACA,KACA,gBACA,KAAK,cACL,KAAK,WACL;AACD,YAAM,0BACL,IACA,KACA,QACA,KACA,gBACA,KAAK,eACL,KAAK,YACL;MAED,MAAM,aAAa,GAAG,SAAS;OAC9B,QAAQ,GAAG,IAAI,UAAU;OACzB,WAAW,CAAC,eAAe;OAC3B,CAAC;AACF,WAAK,MAAM,CAAC,OAAO,UAAU,KAAK,OAAO,SAAS,CACjD,IAAG,SAAS;OACX,QAAQ,GAAG,IAAI,UAAU;OACzB,eAAe,CAAC,KAAK,cAAc,KAAK,cAAc;OACtD,WAAW;QACV;QACA;QACA;QACA,GAAG,KAAK,IAAI,MAAM,iBAAiB,OAAO,QAAQ,EAAE,CAAC;QACrD,GAAG,KAAK,GAAG,qBAAqB;QAChC,GAAG,KAAK,GAAG,2BAA2B;QACtC,GAAG,KAAK,IAAI,MAAM,MAAM;QACxB,GAAG,KAAK,IAAI,MAAM,SAAS;QAC3B,GAAG,KAAK,KAAK,MAAM,SAAS,MAAM;QAClC,GAAG,KAAK,KAAK,MAAM,eAAe,MAAM;QACxC,GAAG,KAAK,IAAI,cAAc;QAC1B,GAAG,OAAO,OAAO;QACjB;OACD,CAAC;AAEH,SAAG,gBAAgB,CAAC,eAAe,EAAE,OAAO,QAAQ;AACpD,aAAO,GAAG,MAAM,EAAE,QAAQ,IAAI,QAAQ,CAAC;;KAExC,CAAC,CAAC,KACF,OAAO,UACL,QACA,qBACC,kBACA,8CAA8C,KAAK,KAAK,KAAK,IAAI,UACjE,CACF,CACD;AACD,QAAI,OAAO,UAAU,oBACpB,QAAO,OAAO,OAAO,KACpB,qBACC,kBACA,iEAAiE,KAAK,KAAK,MAC1E,sBAAsB,OAAO,kBAAkB,CAChD,CACD;IAEF,MAAM,UAAU,OAAO;IAEvB,MAAM,mBAAmB,0BAA0B,QAAQ,cAAc;AACzE,QAAI,qBAAqB,KACxB,QAAO,OAAO,OAAO,KACpB,qBACC,kBACA,mEACY,QAAQ,OAAO,IAC3B,CACD;AAEF,WAAO;KAAE,UAAU,KAAK;KAAM;KAAkB,QAAQ,QAAQ;KAAQ;KACvE;GACF,CAAC,CAAC,KAAK,OAAO,UAAU,QAAQ,iBAAiB,gBAAgB,IAAI,CAAC,CAAC;AAEzE,SAAO,KAAK,OAAO;;AAEpB,QAAO;EACN,CAAC,KACF,OAAO,SAAS,sCAAsC,EACrD,YAAY;EACV,cAAc,YAAY,IAAI;EAC9B,cAAc,YAAY,MAAM,QAAQ,SAAS,KAAK,SAAS,KAAA,EAAU,CAAC;CAC3E,EACD,CAAC,CACF"}
|
|
1
|
+
{"version":3,"file":"deploy.mjs","names":[],"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 {\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 { CoinValue } from '../coin/index.ts';\nimport {\n\tcurrentLedgerObjectRef,\n\texecuteSuiTx,\n\tformatExecutedFailure,\n\tisSuiStaleObjectVersionError,\n\ttype ResolvedSigner,\n\ttype SuiSdkShim,\n} from '../sui/index.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 { 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,\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});\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,\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\tyield* requestSeedFunding(\n\t\t\t\t\t\tspec.baseFundingStrategy,\n\t\t\t\t\t\tsigner,\n\t\t\t\t\t\tpool.baseCoinType,\n\t\t\t\t\t\tseed.baseAmount,\n\t\t\t\t\t);\n\t\t\t\t\tyield* requestSeedFunding(\n\t\t\t\t\t\tspec.quoteFundingStrategy,\n\t\t\t\t\t\tsigner,\n\t\t\t\t\t\tpool.quoteCoinType,\n\t\t\t\t\t\tseed.quoteAmount,\n\t\t\t\t\t);\n\n\t\t\t\t\tconst result = yield* executeSuiTxWithStaleObjectRetry({\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\tawait setExplicitSeedGasPayment(tx, sdk, signer, seedSuiDepositAmount(pool, seed));\n\t\t\t\t\t\t\tconst registry = await sharedObject(tx, sdk, pkg.registryId, true);\n\t\t\t\t\t\t\tconst poolObject = await sharedObject(tx, sdk, pool.poolId, true);\n\t\t\t\t\t\t\tconst balanceManager = tx.moveCall({\n\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::balance_manager::new`,\n\t\t\t\t\t\t\t\targuments: [],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::balance_manager::register_balance_manager`,\n\t\t\t\t\t\t\t\targuments: [balanceManager, registry],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tawait depositIntoBalanceManager(\n\t\t\t\t\t\t\t\ttx,\n\t\t\t\t\t\t\t\tsdk,\n\t\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\tbalanceManager,\n\t\t\t\t\t\t\t\tpool.baseCoinType,\n\t\t\t\t\t\t\t\tseed.baseAmount,\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tawait depositIntoBalanceManager(\n\t\t\t\t\t\t\t\ttx,\n\t\t\t\t\t\t\t\tsdk,\n\t\t\t\t\t\t\t\tsigner,\n\t\t\t\t\t\t\t\tpkg,\n\t\t\t\t\t\t\t\tbalanceManager,\n\t\t\t\t\t\t\t\tpool.quoteCoinType,\n\t\t\t\t\t\t\t\tseed.quoteAmount,\n\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\tconst tradeProof = tx.moveCall({\n\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::balance_manager::generate_proof_as_owner`,\n\t\t\t\t\t\t\t\targuments: [balanceManager],\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tfor (const [index, order] of seed.orders.entries()) {\n\t\t\t\t\t\t\t\ttx.moveCall({\n\t\t\t\t\t\t\t\t\ttarget: `${pkg.packageId}::pool::place_limit_order`,\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\tpoolObject,\n\t\t\t\t\t\t\t\t\t\tbalanceManager,\n\t\t\t\t\t\t\t\t\t\ttradeProof,\n\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\ttx.pure.u8(ORDER_TYPE_POST_ONLY),\n\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\ttx.pure.u64(order.price),\n\t\t\t\t\t\t\t\t\t\ttx.pure.u64(order.quantity),\n\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\ttx.pure.bool(order.payWithDeep ?? false),\n\t\t\t\t\t\t\t\t\t\ttx.pure.u64(MAX_TIMESTAMP),\n\t\t\t\t\t\t\t\t\t\ttx.object.clock(),\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\ttx.transferObjects([balanceManager], signer.address);\n\t\t\t\t\t\t\treturn tx.build({ client: sdk.client });\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 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),\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 seed transaction on-chain execution failed for pool '${spec.name}' ` +\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\tconst balanceManagerId = pickCreatedBalanceManager(receipt.objectChanges);\n\t\t\t\t\tif (balanceManagerId === null) {\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 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}\n\t\t\t\t\treturn { poolName: spec.name, balanceManagerId, digest: receipt.digest };\n\t\t\t\t}),\n\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});\n"],"mappings":"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"}
|
|
@@ -14,8 +14,10 @@ const deepbookConfigError = (field, message, hint, cause) => makeDeepbookConfigE
|
|
|
14
14
|
hint,
|
|
15
15
|
cause
|
|
16
16
|
});
|
|
17
|
-
/**
|
|
18
|
-
*
|
|
17
|
+
/** The catchable error tags this plugin exposes. Consumed by the
|
|
18
|
+
* acquire-body `passthroughOrWrap` (to let typed deepbook failures
|
|
19
|
+
* through unwrapped) and pinned against the user-facing error catalog
|
|
20
|
+
* by the error-catalog-parity test. */
|
|
19
21
|
const DEEPBOOK_ERROR_TAGS = [
|
|
20
22
|
"DeepbookPluginError",
|
|
21
23
|
"ForkIncompatibleError",
|
|
@@ -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 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/**
|
|
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/** The catchable error tags this plugin exposes. Consumed by the\n * acquire-body `passthroughOrWrap` (to let typed deepbook failures\n * through unwrapped) and pinned against the user-facing error catalog\n * by the error-catalog-parity test. */\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,CAAC,OACxC;CAAE,MAAM;CAAuB;CAAO;CAAS,GAAG;AAAM;AAQnF,MAAM,0BAA0B,kBAAkB,qBAAqB;AAEvE,MAAa,uBACZ,OACA,SACA,MACA,UACyB,wBAAwB;CAAE;CAAO;CAAS;CAAM;AAAM,CAAC;;;;;AASjF,MAAa,sBAA4D;CACxE;CACA;CACA;AACD"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import
|
|
1
|
+
import { formatExecutedFailure } from "../sui/exec/index.mjs";
|
|
2
|
+
import { signAndDispatch } from "../sui/exec/sign-and-dispatch.mjs";
|
|
3
|
+
import "../sui/index.mjs";
|
|
4
4
|
import "../account/index.mjs";
|
|
5
|
-
import { DeepbookSpans } from "./spans.mjs";
|
|
6
5
|
import { deepbookPluginError } from "./errors.mjs";
|
|
7
6
|
import { Effect } from "effect";
|
|
8
7
|
import { Transaction } from "@mysten/sui/transactions";
|
|
@@ -75,12 +74,7 @@ const makeDeepbookDeepFundingStrategy = (opts) => ({
|
|
|
75
74
|
onFailed: (failure) => Effect.fail(deepbookPluginError("fund-deep", `DeepBook DEEP funding transaction failed on-chain for account '${account.name}' (address=${account.address}) ` + formatExecutedFailure(failure))),
|
|
76
75
|
onSuccess: () => Effect.void
|
|
77
76
|
});
|
|
78
|
-
})
|
|
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()
|
|
83
|
-
} }))
|
|
77
|
+
})
|
|
84
78
|
});
|
|
85
79
|
const makeDeepbookDeepFundingContribution = (strategy) => ({
|
|
86
80
|
kind: "strategy-contributor",
|
|
@@ -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 {\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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"}
|
|
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, type AccountFundingStrategy } from '../account/index.ts';\nimport { formatExecutedFailure, signAndDispatch, type SuiSdkShim } from '../sui/index.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\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}),\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 +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,
|
|
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,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,CAAC,OAAO,KAAK,CAAC"}
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import { CodegenableDecl } from "../../contracts/codegenable.mjs";
|
|
2
|
-
import { SnapshotableDecl } from "../../contracts/snapshotable.mjs";
|
|
3
|
-
import { StrategyContributorDecl } from "../../contracts/strategy-contributor.mjs";
|
|
4
1
|
import { Plugin, ResourceRef } from "../../substrate/plugin.mjs";
|
|
5
2
|
import { ModeNamespace } from "../../api/mode-narrowed-factory.mjs";
|
|
6
|
-
import { SuiClient } from "../sui/mode/shared.mjs";
|
|
7
3
|
import { SuiOptions } from "../sui/mode/spec.mjs";
|
|
4
|
+
import { SuiClient } from "../sui/mode/shared.mjs";
|
|
8
5
|
import { DeepbookConfigError, DeepbookError, DeepbookPhase, DeepbookPluginError } from "./errors.mjs";
|
|
9
6
|
import { DeepbookDeepFundingStrategy } from "./faucet-strategy.mjs";
|
|
10
7
|
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";
|
|
11
|
-
import { DeepbookBindings
|
|
8
|
+
import { DeepbookBindings } from "./codegen.mjs";
|
|
12
9
|
//#region src/plugins/deepbook/index.d.ts
|
|
13
10
|
/** The deepbook resolved value. Mode-asymmetric:
|
|
14
11
|
*
|
|
@@ -17,7 +14,7 @@ import { DeepbookBindings, DeepbookPoolBinding } from "./codegen.mjs";
|
|
|
17
14
|
* are `null` when the corresponding sub-feature is not enabled. */
|
|
18
15
|
interface DeepbookResolved {
|
|
19
16
|
readonly mode: 'local' | 'override' | 'known';
|
|
20
|
-
readonly
|
|
17
|
+
readonly network: string;
|
|
21
18
|
readonly packageId: string;
|
|
22
19
|
readonly registryId: string;
|
|
23
20
|
readonly adminCapId: string | null;
|
|
@@ -42,16 +39,26 @@ interface DeepbookOverrideOptions extends DeepbookCommonOptions {
|
|
|
42
39
|
readonly packageId: string;
|
|
43
40
|
readonly registryId: string;
|
|
44
41
|
readonly adminCapId: string;
|
|
45
|
-
readonly
|
|
42
|
+
readonly network?: string;
|
|
46
43
|
}
|
|
47
|
-
/** Local mode wraps an explicitly supplied local DeepBook package.
|
|
44
|
+
/** Local mode wraps an explicitly supplied local DeepBook package.
|
|
45
|
+
*
|
|
46
|
+
* Explicit-config discipline: `publisher`, `package`, and `pools` are all
|
|
47
|
+
* REQUIRED — the caller publishes the DeepBook Move tree, funds a publisher,
|
|
48
|
+
* and declares the pools. There is no zero-arg auto-synthesis; an
|
|
49
|
+
* under-specified `deepbook({ mode: 'local' })` fails fast with a tagged
|
|
50
|
+
* config error (see the guard in `resolveLocalOptions`). `pyth` stays
|
|
51
|
+
* optional — pass it to seed local mock price feeds, omit it for a
|
|
52
|
+
* feed-less DeX. */
|
|
48
53
|
interface DeepbookLocalOptions<Publisher extends AccountMemberAlias = AccountMemberAlias, Package extends DeepbookPackageMember = DeepbookPackageMember, Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [], Pyth extends PythOptions | undefined = undefined> extends DeepbookCommonOptions {
|
|
49
|
-
/** Publisher account — Direct Member Ref (locked API decision). */
|
|
54
|
+
/** Publisher account — Direct Member Ref (locked API decision). Required. */
|
|
50
55
|
readonly publisher: Publisher;
|
|
51
56
|
/** Published DeepBook package member. The package must capture the
|
|
52
|
-
* `registry::Registry` and `registry::DeepbookAdminCap` object ids.
|
|
57
|
+
* `registry::Registry` and `registry::DeepbookAdminCap` object ids.
|
|
58
|
+
* Required. */
|
|
53
59
|
readonly package: Package;
|
|
54
|
-
/** Optional local mock-Pyth package + feed setup.
|
|
60
|
+
/** Optional local mock-Pyth package + feed setup. Omit for a feed-less
|
|
61
|
+
* local DeX. */
|
|
55
62
|
readonly pyth?: Pyth;
|
|
56
63
|
/** Capture key for the package-created `registry::Registry`. */
|
|
57
64
|
readonly registryIdKey?: string;
|
|
@@ -59,14 +66,18 @@ interface DeepbookLocalOptions<Publisher extends AccountMemberAlias = AccountMem
|
|
|
59
66
|
readonly adminCapIdKey?: string;
|
|
60
67
|
/** Optional capture key for a DEEP treasury object used by SDK bindings. */
|
|
61
68
|
readonly deepTreasuryIdKey?: string;
|
|
62
|
-
/** Pools to create after the DeepBook package publishes.
|
|
63
|
-
*
|
|
64
|
-
|
|
69
|
+
/** Pools to create after the DeepBook package publishes. OPTIONAL: when
|
|
70
|
+
* omitted, a single unseeded (empty-book) `DEEP/SUI` pool is synthesized
|
|
71
|
+
* (the DEEP coin comes from `package`, SUI is built-in — no extra package
|
|
72
|
+
* needed), so a minimal `deepbook({ mode:'local', publisher, package })`
|
|
73
|
+
* boots a usable DeX. Pass `[]` explicitly for a known-empty deployment, or your own
|
|
74
|
+
* pools for full control. */
|
|
75
|
+
readonly pools?: Pools;
|
|
65
76
|
}
|
|
66
77
|
type DeepbookKnownNetwork = 'mainnet' | 'testnet';
|
|
67
78
|
interface DeepbookKnownCommonOptions extends DeepbookCommonOptions {
|
|
68
|
-
/** Optional
|
|
69
|
-
readonly
|
|
79
|
+
/** Optional network override (defaults to the configured network). */
|
|
80
|
+
readonly network?: string;
|
|
70
81
|
}
|
|
71
82
|
interface DeepbookKnownNetworkOptions extends DeepbookKnownCommonOptions {
|
|
72
83
|
readonly network: DeepbookKnownNetwork;
|
|
@@ -86,29 +97,23 @@ type DeepbookOptions<Publisher extends AccountMemberAlias = AccountMemberAlias,
|
|
|
86
97
|
} & DeepbookOverrideOptions) | ({
|
|
87
98
|
readonly mode: 'known';
|
|
88
99
|
} & DeepbookKnownOptions);
|
|
89
|
-
type DeepbookLocalEmptyPoolOptions<Publisher extends AccountMemberAlias, Package extends DeepbookPackageMember, Pyth extends PythOptions | undefined = undefined> = Omit<DeepbookLocalOptions<Publisher, Package, readonly [], Pyth>, 'pools'> & {
|
|
90
|
-
readonly pools: readonly [];
|
|
91
|
-
};
|
|
92
100
|
type PoolCoinRefs<Pools extends ReadonlyArray<DeepbookPoolSpec>> = Pools[number] extends DeepbookPoolSpec<infer Base, infer Quote> ? Base | Quote : never;
|
|
93
101
|
type PoolCoinRefTuple<Pools extends ReadonlyArray<DeepbookPoolSpec>> = Pools extends readonly [] ? readonly [] : readonly PoolCoinRefs<Pools>[];
|
|
94
102
|
type PythRefs<Pyth extends PythOptions | undefined> = Pyth extends PythOptions<infer Package, infer Pusher> ? readonly [Pusher, Package] : readonly [];
|
|
95
103
|
declare const buildOverridePlugin: (opts: DeepbookOverrideOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
|
|
96
104
|
readonly mode: SuiOptions["mode"];
|
|
97
|
-
}>]
|
|
98
|
-
declare const buildLocalPlugin: <const Publisher extends AccountMemberAlias, const Package extends DeepbookPackageMember, const Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [], const Pyth extends PythOptions | undefined = undefined>(
|
|
105
|
+
}>]>;
|
|
106
|
+
declare const buildLocalPlugin: <const Publisher extends AccountMemberAlias, const Package extends DeepbookPackageMember, const Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [], const Pyth extends PythOptions | undefined = undefined>(rawOpts: DeepbookLocalOptions<Publisher, Package, Pools, Pyth>) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
|
|
99
107
|
readonly mode: SuiOptions["mode"];
|
|
100
|
-
}>, Publisher, Package, ...PythRefs<Pyth>, ...PoolCoinRefTuple<Pools>]
|
|
108
|
+
}>, Publisher, Package, ...PythRefs<Pyth>, ...PoolCoinRefTuple<Pools>]>;
|
|
101
109
|
declare const buildKnownPlugin: (opts: DeepbookKnownOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
|
|
102
110
|
readonly mode: SuiOptions["mode"];
|
|
103
|
-
}>]
|
|
111
|
+
}>]>;
|
|
104
112
|
/** Env-driven factory. Defaults to local mode on localnet when passed local
|
|
105
113
|
* options. Explicit `override` and `known` modes bypass env inference. */
|
|
106
114
|
type DeepbookLocalMember<Publisher extends AccountMemberAlias, Package extends DeepbookPackageMember, Pools extends ReadonlyArray<DeepbookPoolSpec>, Pyth extends PythOptions | undefined = undefined> = ReturnType<typeof buildLocalPlugin<Publisher, Package, Pools, Pyth>>;
|
|
107
115
|
type DeepbookOverrideMember = ReturnType<typeof buildOverridePlugin>;
|
|
108
116
|
type DeepbookKnownMember = ReturnType<typeof buildKnownPlugin>;
|
|
109
|
-
declare function deepbookCore<const Publisher extends AccountMemberAlias, const Package extends DeepbookPackageMember, const Pyth extends PythOptions | undefined = undefined>(opts: {
|
|
110
|
-
readonly mode: 'local';
|
|
111
|
-
} & DeepbookLocalEmptyPoolOptions<Publisher, Package, Pyth>): DeepbookLocalMember<Publisher, Package, readonly [], Pyth>;
|
|
112
117
|
declare function deepbookCore<const Publisher extends AccountMemberAlias, const Package extends DeepbookPackageMember, const Pools extends ReadonlyArray<DeepbookPoolSpec> = readonly [], const Pyth extends PythOptions | undefined = undefined>(opts: {
|
|
113
118
|
readonly mode: 'local';
|
|
114
119
|
} & DeepbookLocalOptions<Publisher, Package, Pools, Pyth>): DeepbookLocalMember<Publisher, Package, Pools, Pyth>;
|
|
@@ -118,17 +123,16 @@ declare function deepbookCore(opts: {
|
|
|
118
123
|
declare function deepbookCore(opts: {
|
|
119
124
|
readonly mode: 'known';
|
|
120
125
|
} & DeepbookKnownOptions): DeepbookKnownMember;
|
|
121
|
-
declare function deepbookCore<const Publisher extends AccountMemberAlias, const Package extends DeepbookPackageMember, const Pyth extends PythOptions | undefined = undefined>(opts: DeepbookLocalEmptyPoolOptions<Publisher, Package, Pyth>): DeepbookLocalMember<Publisher, Package, readonly [], Pyth>;
|
|
122
126
|
declare function deepbookCore<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>): DeepbookLocalMember<Publisher, Package, Pools, Pyth>;
|
|
123
127
|
/** Mode-narrowed factory namespace.
|
|
124
128
|
*
|
|
125
129
|
* Usage:
|
|
126
|
-
* const local = { mode: 'local',
|
|
130
|
+
* const local = { mode: 'local', network: 'localnet' } as const;
|
|
127
131
|
* deepbookFor(local).local({publisher, package, pools}) // OK
|
|
128
132
|
* deepbookFor(local).override({packageId, registryId, adminCapId}) // OK
|
|
129
133
|
* deepbookFor(local).known({...}) // OK
|
|
130
134
|
*
|
|
131
|
-
* const fork = { mode: 'fork',
|
|
135
|
+
* const fork = { mode: 'fork', network: 'mainnet-fork', upstream: 'mainnet' } as const;
|
|
132
136
|
* deepbookFor(fork).local({...}) // COMPILE ERROR
|
|
133
137
|
* deepbookFor(fork).override({...}) // COMPILE ERROR
|
|
134
138
|
*
|
|
@@ -138,23 +142,23 @@ declare const deepbookFor: ModeNamespace<{
|
|
|
138
142
|
local: {
|
|
139
143
|
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 & {
|
|
140
144
|
readonly mode: SuiOptions["mode"];
|
|
141
|
-
}>, Publisher, Package, ...PythRefs<Pyth>, ...PoolCoinRefTuple<Pools>]
|
|
145
|
+
}>, Publisher, Package, ...PythRefs<Pyth>, ...PoolCoinRefTuple<Pools>]>;
|
|
142
146
|
override: (opts: DeepbookOverrideOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
|
|
143
147
|
readonly mode: SuiOptions["mode"];
|
|
144
|
-
}>]
|
|
148
|
+
}>]>;
|
|
145
149
|
known: (opts: DeepbookKnownOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
|
|
146
150
|
readonly mode: SuiOptions["mode"];
|
|
147
|
-
}>]
|
|
151
|
+
}>]>;
|
|
148
152
|
};
|
|
149
153
|
live: {
|
|
150
154
|
known: (opts: DeepbookKnownOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
|
|
151
155
|
readonly mode: SuiOptions["mode"];
|
|
152
|
-
}>]
|
|
156
|
+
}>]>;
|
|
153
157
|
};
|
|
154
158
|
fork: {
|
|
155
159
|
known: (opts: DeepbookKnownOptions) => Plugin<`deepbook/${string}`, DeepbookResolved, readonly [ResourceRef<"sui", SuiClient & {
|
|
156
160
|
readonly mode: SuiOptions["mode"];
|
|
157
|
-
}>]
|
|
161
|
+
}>]>;
|
|
158
162
|
};
|
|
159
163
|
}>;
|
|
160
164
|
//#endregion
|