Skip to content

Vaults

DEPRECATED for product scope (2026-07-11). DAY is a yield router, not vault tech. Keep only as historical notes. See 38-technical-architecture.md.

Date: 2026-07-11
Status: DEPRECATED — yield router only; vault product out of scope
Brand: DAY · Site: https://dayprotocol.com
Authority: docs/00-product-constitution.md (no custody, fee on yield only, owner sovereign)
Peers: Superform Forms (superform-core / src/forms)


1. What “vaults” means for DAY (three layers)

Section titled “1. What “vaults” means for DAY (three layers)”
LayerWho holds assetsWhat DAY buildsSuperform analog
L0 — Venue vaultsSuilend / NAVI / Scallop / Kamino / …Adapters only (read_apy, deposit, withdraw)Underlying ERC-4626 vault
L1 — DAY Form (wrapper)Still venue + DAY position objectForm that wraps one venue market under DAY policyERC4626Form / Form instance
L2 — DAY Vault (product)DAY vault object (shared) + user/agent sharesCurated / strategy vault users & agents deposit intoSuperVault / multi-source product

Historical note only — we do NOT build L2 vault product. L0 stays external; we never reimplement Suilend.

Agent / Owner
│ deposit / withdraw / harvest (x402-callable)
┌──────────────────────────────┐
│ DAY Vault (L2) │ strategy, share accounting, fee skim on yield
│ · policy: venues, caps │
│ · Auto Yield OFF by default │
└──────────────┬───────────────┘
│ via Forms
┌──────────────────────────────┐
│ DAY Form (L1) │ one venue market adapter binding
└──────────────┬───────────────┘
Venue vault (L0)

2. Constitution constraints on vaults (non-negotiable)

Section titled “2. Constitution constraints on vaults (non-negotiable)”
RuleVault implication
No team custodyVault is an on-chain object; ops keys never own principal
Always withdrawShare redeem → assets to owner (or position), not team
Fee only on yieldPerformance skim at harvest/compound inside vault waterfall; 0% on deposit/withdraw
Stake/deploy OFF defaultVault may hold liquid until owner enables Auto Yield / strategy arm
Agent cannot withdraw principalAgent can deposit (if allowed) + harvest path; redeem principal = owner
Honest numbersVault APY from adapter read_apy / NAV math; null → N/A
Permissionless harvestKeeper can harvest vault yield (bounty); cannot invent amounts

  • One vault → one venue market (e.g. Suilend USDC)
  • Share token / position object = claim on that market under DAY fee policy
  • Superform: one Form ↔ one vault

Use cases: simplest agent deposit, cleanest audit surface.

  • One vault → N Forms (e.g. 70% Suilend, 30% NAVI)
  • Rebalance under owner/policy caps (not free-for-all agent)
  • Superform SuperVault energy without EVM multi-chain day-1
  • Vault shares sit in owner position / vault policy
  • Auto Pay residual from vault yield after survival
  • This is the “autonomous capital” product
  • Permissionless anyone-lists-any-vault (Superform factory) — allowlist first
  • Cross-chain vault share bridging as product core
  • Fee-on-deposit vaults

VaultConfig {
id,
name,
asset, // e.g. USDC type
fee_skim_bps, // default 500; yield only
auto_deploy_default_off, // true
allowed_forms[], // Form ids / venue bindings
max_tvl_micros?,
paused: bool,
}
Vault {
id,
config_id,
total_assets_micros, // liquid + deployed (NAV)
total_shares,
liquid_micros, // not yet in venue
deployed_by_form, // form_id → amount
}

4.3 VaultShare / position (owned by owner or agent)

Section titled “4.3 VaultShare / position (owned by owner or agent)”
// Option A: fungible share coin (if we mint a share type)
// Option B: Position object { vault_id, shares, owner }

MVP recommendation: Position object (clearer agent policy + clawback rules); fungible shares later if needed.

Form {
id,
vault_id?, // or registry global
venue_id, // suilend | navi | …
market_id, // venue-specific
adapter_version,
ready: bool,
}

Maps 1:1 to Superform “vault added to a Form.”


  1. Owner/agent calls deposit(vault, amount) with asset
  2. Shares minted by NAV (amount / price_per_share)
  3. Assets enter Vault.liquid
  4. If Auto Yield / strategy enabled by owner → Form.deploy(liquid→venue)
  5. Else stay liquid until owner arms strategy
  1. Owner only (or account owner) burns shares
  2. If needed: Form.withdraw from venue (min amount)
  3. Asset out to owner (or position)
  4. No fee on withdraw
  1. Form.claim venue yield → vault
  2. Skim fee_bps of yield only → fee sink
  3. Net yield compounds to vault NAV (or Auto Pay residual policy)
  4. Event: VaultHarvested { gross, skim, net }
  • Bridge-funded deposit below minOutno share mint / reverse; funds to owner path
  • Never leave principal in ops wallet

6. API / product surface (dayprotocol.com)

Section titled “6. API / product surface (dayprotocol.com)”
RouteRole
/marketsBrowse L0 venues + L1/L2 DAY vaults (yield MTD first)
/vaultsDAY vault list (product)
/vaults/:idNAV, yield, allocation, Deposit, withdraw (owner), strategy toggle
/providers/:idGroup Forms/vaults by venue protocol
AgentPOST /v1/vaults/:id/deposit · previewDeposit · x402 pay path for fees/gas only — not principal custody

Schemas (versioned):

  • day-vault.v1.json
  • day-vault-plan.v1.json (deposit | withdraw | harvest | rebalance)
  • Keep existing day-*-v1 for routing/enablement

7. Superform → DAY vault steal list (vault-specific)

Section titled “7. Superform → DAY vault steal list (vault-specific)”
StealSuperformDAY vault
Form = adapter to one vaultFormsForm per venue market
Single router entrySuperformRouterVaultRouter / plan executor
StateRequesttyped actionday-vault-plan.v1
Shares after successSuperPositionsmint shares only after assets in vault
actual vs quoteupdateDepositPayloadbridge reconcile before mint
rescueFailedDeposityesvault deposit rescue
Core immutablenon-upgradeable corefreeze fee/withdraw/share math package
Permissionless listcreateSuperformlater; allowlist Forms at launch

Don’t steal for vault MVP: multi-AMB stack, SuperPositions as UX requirement, EVM-only 4626 assumptions (Sui objects first).


gross_yield (from venue claim)
→ protocol_skim = gross * fee_skim_bps / 10000 // default 500
→ net_yield to vault NAV / compound
deposit amount → 0 fee
withdraw amount → 0 fee

Optional later: strategist fee as slice of skim, not extra deposit fee — still yield-only.


WaveDeliverableDone when
W0Spec + schemas day-vault.v1This doc + JSON schema
W1Move: VaultConfig + Vault + share/position + deposit/withdraw (liquid only)Unit tests; no venue yet
W2Form + Suilend Form deploy/withdrawLive prepare-only mainnet evidence
W3Harvest skim + events + keeperPermissionless harvest path
W4FE /vaults + /vaults/:id Depositdayprotocol.com
W5Multi-form allocation vaultV2 strategy
W6Position binding + Auto Pay from vault residualconsumer integration

contracts/sui/
sources/
day.move # protocol fee primitives (existing)
vault.move # Vault + shares (new)
form.move # Form registry (new)
schemas/
day-vault.v1.json
day-vault-plan.v1.json
runtime/
vaults/ # offchain planner / NAV helpers
adapters/ # L0 venue adapters (existing)

Package versioning: vault money math freezes with core major; new Forms = minor/adapters (see docs/22-versioning-strategy.md).

Copyright: Limitless Labs (see docs/23-copyright-and-licensing.md).


  • User/agent can Deposit into a DAY vault and see shares/NAV
  • Owner can fully exit without team
  • Yield harvest takes ≤5% of yield, never principal
  • Strategy arm is opt-in
  • Vault listed on markets with honest yield (or N/A)
  • Contracts open-sourceable as a versioned immutable core when audit+UpgradeCap gate pass

Yes — DAY builds vaults, not only “route to someone else’s market.”

  • Forms wrap venues (Superform lesson)
  • Vaults are the product agents deposit into
  • Constitution still wins: no custody, fee-on-yield, owner exit, default-off deploy
  • Version vault core like Superform core; evolve Forms fast

Next concrete step: schemas/day-vault.v1.json + Move vault.move skeleton (W0–W1).