Documentation Index
Fetch the complete documentation index at: https://docs.adipredictstreet.com/llms.txt
Use this file to discover all available pages before exploring further.
Status: live. Every partner-managed vault is deployed by the
platform’s back-office wallet. Partners do not call
deployVault themselves — the on-chain bootstrap is handled
end-to-end by the backend in response to KYC approval
(single_wallet, or multi_wallet with requirePerWalletKyc=true)
or first-request auto-onboarding (multi_wallet with
requirePerWalletKyc=false). Poll GET /api/me/vault until the
vault address resolves.What triggers it
There are two trigger paths, picked automatically based on the partner record:- KYC approval — single_wallet partners, and multi_wallet
partners with
requirePerWalletKyc=true. The auto-deploy job is enqueued the moment the EOA’skyc_statusflips toAPPROVED(tier ≥ 1). See Partner kinds for the per-flag enforcement matrix. - First request auto-onboarding — multi_wallet partners with
requirePerWalletKyc=false(KYB-onboarded prime brokerage model). The first authenticated request from the partner key that names a previously-unseen sub-account inX-User-Walletcreates thecore.usersrow and enqueues an auto-deploy job right then — without retail KYC for the sub-account.
VaultFactory.deployVault call comes from
the back-office submitter, gas is paid by the platform, and the
result is identical: a fully-initialised VaultImplementation
clone with deposit-limit caps registered against your EOA.
Sequence
Typical end-to-end timing in production: under 15 seconds from trigger todeployed=true. Mainnet target is similar; spikes
during high block latency are visible on the
status page.
Reading deployment status
| Field | Meaning |
|---|---|
vaultAddress | The deterministic vault contract address — populated as soon as the deploy job is enqueued, even if not yet mined. |
deployed | true once VaultFactory.vaultOf(eoa) returns a non-zero address on chain. The off-chain mirror is consistent with the chain within ~1 block. |
deployStatus | See deployStatus values below — seven states tracking the auto-deploy job from enqueue to terminal. |
deployTxHash | Set once the back-office wallet broadcasts the tx. Useful for blockscout cross-reference. |
deployStatus values
| Value | Meaning | Action |
|---|---|---|
not_started | No deploy job enqueued yet for this wallet — typically a brand-new EOA before KYC tier 1 clears (single_wallet) or before the first authenticated request lands (multi_wallet with requirePerWalletKyc=false). | Wait for the trigger to fire; if it’s been more than 15 seconds, see What if auto-deploy doesn’t fire below. |
pending | Job enqueued; awaiting wallet-pool slot. | Poll again in a few seconds. |
building | Match-submitter is constructing the on-chain tx. | Poll again in a few seconds. |
submitted | Tx broadcast; awaiting on-chain finality. deployTxHash is now set. | Poll until confirmed, or subscribe to vault.deploy_confirmed on /ws/user. |
confirmed | Tx mined; vaultOf(eoa) returns the vault address. | Proceed to deposit + trade. deployed: true. |
skipped_existing | Wallet already had an on-chain vault before the auto-deploy system existed (legacy users). | Treat as confirmed — deployed: true. |
failed_permanent | Tx reverted; the job will not retry. | Contact support. The most common cause is a misconfigured back-office wallet pool. |
GET /api/me/vault until deployed: true.
What stays the same
- The on-chain artefact is identical to a manually-deployed vault — same
VaultImplementationclone at the same deterministic address, same ABI, samevaultOf(eoa)lookup. - Vault ownership stays with your associated EOA. The back-office wallet pays gas to deploy but never holds keys to the vault.
- Emergency withdraw, dual-signature withdrawal, splits, merges, and redeems — all unchanged. Auto-deploy only saves the on-chain bootstrap, not custody.
Order.makeris your vault address;Order.signeris your EOA — the EIP-712 domain and signature flow are identical to manual deploy.
What stays your responsibility
approveof USDC to the vault. ERC-20 transferability is owner-only by design — only the EOA that holds USDC can authorise the vault to pull it. The platform cannot bypass that.depositERC20from your EOA. Auto-deploy stops at the vault contract; the actual USDC transfer is a separate user-side tx (or via your wallet provider’s permit flow if it supports EIP-2612).- Custody of the EOA private key — never reaches our infrastructure.
- Gas for trading-side txes (split / merge / convert / withdraw / cancel on-chain) is paid by your EOA. Auto-deploy only covers the deploy bootstrap.
Limits initialisation
Per-EOA deposit caps inDepositLimitRegistry (daily / weekly / monthly)
are initialised by a separate platform job that runs after vault deploy.
Verifying
What if auto-deploy doesn’t fire
For a partner-issued API key, auto-deploy is the only path — operations issuesorders:write / vault:write keys only after
the prerequisite KYC (or partner-level KYB) lands, so by the time
your code runs the trigger is already in flight.
If GET /api/me/vault keeps returning deployStatus:'not_started'
past the typical 15-second window, the most common causes are:
- KYC not actually approved for the EOA (single_wallet path) — call your integration manager.
- multi_wallet
requirePerWalletKyc=trueand the sub-account hasn’t been KYC’d. Either complete KYC for that sub-account or ask operations to flip the partner torequirePerWalletKyc=falseif the prime-brokerage compliance model fits. failed_permanentondeployStatus— the on-chain tx reverted and the job will not retry. Contact support; usually means the back-office wallet pool is degraded.
VaultFactory.deployVault(eoa) is callable on-chain by any address
(the function only stores vaultOwner = eoa and is idempotent), so
in a true emergency a partner can deploy themselves and pay gas —
but operations should be the first call. The contract reference at
Vault contracts → VaultFactory
documents the function signature.