Architecture
A vault is a smart contract with its own balance sheet. Strategy modules plug into external protocols. A controller coordinates allocations and risk. An internal points token tracks participation, and an in-house keeper bot performs harvesting and rebalancing.
System components.
Vaults (internal ledger). Custody underlying; maintain
balances[address]
,totalPrincipal
, and an accrual index used to credit profits.Strategy Adapters. Uniform interfaces for
deposit/withdraw/harvest/totalUnderlying
; classes: Lending, Looping, DEX CL-LP.Controller. Holds target parameters, dynamic weight logic, risk caps, and adapter authorizations.
Keeper (in-house). Operates harvests/rebalances per policy. No external automation providers.
Points Token (ERC-20). Transferable token that reflects time- and size-weighted participation.
UI & Indexers. Read on-chain state and events to visualize TVL, allocations, pending rewards, points, and history.
Supported Assets (Rolling Set)
Initial vaults target HyperEVM-native assets such as HYPE, USDT0, UETH, UBTC, feUSD, wstHYPE, USDe, with additional pairs evaluated as venues and liquidity deepen. Exact availability is reflected in the dapp.
Vault Accounting (Internal Ledger, non ERC-4626)
Each depositor has a number in the vault’s books. Profits are credited by multiplying balances with a moving index. Withdrawing returns the updated balance from the books after any strategy unwinds.
Accrual model.
The vault maintains a global accrual index I
that grows when profit is realized (harvest). For depositor u
:
On deposit of
d
at indexI_now
:Record
principal_u += d
andentryIndex_u = I_now
for the deposited tranche.For multiple tranches, store cumulative principal and a weighted entry index (or maintain a per-tranche array).
Credited balance at time
t
:balance_u(t) = principal_u * I(t) / entryIndex_u
If multiple tranches exist, sum each tranche’s
principal * I/entryIndex
.On harvest, convert rewards to underlying, then update
I
as:I_new = I_old * (totalAssets_after / totalAssets_before)
or equivalently, increment
I
byprofit / totalPrincipal_effective
, respecting dust and fee deduction.On withdraw of amount
w
:Compute
maxOwed = balance_u(t)
; redeemmin(w, maxOwed)
; reduceprincipal_u
accordingly by back-solving the principal component removed:principal_removed = redeemed_amount * entryIndex_u / I(t)
Properties.
No share tokens exist; accounting is purely ledger-based.
PPS-like behavior emerges via
I
, which monotonically increases on net profit.Rounding is conservative; dust accumulation is normalized during harvests.
Partial withdrawals reduce principal proportionally to keep future accrual consistent.
Visualization
┌───────────────────────────────────────────────────┐
│ Vault │
│ - internal ledger (balances, principal) │
User deposit ──▶│ - global accrual index I │───▶ User withdraw
│ - controller params (weights, caps, guards) │
└─────┬──────────────────────────┬──────────────────┘
│ │
│ allocate │ reallocate
▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ DEX CL-LP │ │ Lending │ │ Looping │
│ strategy │ │ strategy │ │ strategy │
└───────┬─────────┘ └──────┬─────────┘ └──────┬─────────┘
│ harvest & collect │ harvest │ harvest / delever
▼ ▼ ▼
(fees & emissions) (interest & rewards) (carry & emissions)
└──────────┬───────────────┬──────────────────────────┘
▼ ▼
in-house keeper: claim→swap→fee→index update→redeploy
Last updated