Skip to main content

Emerald Vault

Emerald Vault is a suite of ERC4626 tokenized yield vaults deployed on Ethereum mainnet. Each vault accepts a single underlying asset, generates off-chain yield through an external yield manager, and keeps share prices accurate through on-chain NAV updates.

Supported Assets

VaultAssetSymbol
Emerald USDUSDCeUSD
Emerald BTCWBTCeBTC
Emerald ETHWETHeETH
Emerald GoldPAXGeGOLD

Integration Surfaces

Partners can integrate through three surfaces:

  • REST API — query vault state, user positions, NAV history, referral stats, and manage webhooks. The API is served from the Emerald backend and documented via an interactive Swagger UI.
  • Smart Contracts — deposit, withdraw, and read vault state directly on-chain. Vaults implement the ERC4626 standard with a custom withdrawal queue.
  • On-chain referral attribution — partners pass their numeric partnerId to the vault's referral overloads (deposit(assets, receiver, partnerId), depositETH(receiver, partnerId), requestWithdrawal(shares, partnerId)), which emit ReferralDeposit / ReferralWithdrawal events the indexer attributes. (The standalone DepositRouter contract is deprecated — call the vault directly.)

Architecture at a Glance

┌──────────────┐
│ Off-chain │
│ yield │
│ manager │
└──────┬───────┘
│ NAV updates

User ──► deposit() ──► EmeraldVault ──► sweep() ──► Omnibus Wallet
│ │
│ ├── requestWithdrawal()
│ ├── claimWithdrawal()
│ └── cancelWithdrawal()

Partner ──► EmeraldVault.deposit(assets, receiver, partnerId)
(emits ReferralDeposit event → indexer attributes to partner)
  1. Users deposit underlying tokens and receive vault shares.
  2. An admin sweeps deposited tokens to the omnibus wallet for off-chain yield.
  3. Yield is generated off-chain; the admin calls updateNAV to reflect the new managed assets on-chain.
  4. When a user wants to exit, they request a withdrawal, wait the 3-day delay, then claim.