Skip to main content
Coming Soon: The Developers section is under active development. Documentation will be available soon.

Overview

Vault contracts manage pooled capital with curator-defined strategies.

Architecture

VaultFactory

    ├── creates → Vault (USDC, Strategy A)
    ├── creates → Vault (USDC, Strategy B)
    └── creates → Vault (USDT, Strategy C)

VaultFactory Functions

createVault

function createVault(
    string calldata name,
    address asset,
    VaultConfig calldata config
) external returns (address vaultAddress)
Parameters:
NameTypeDescription
namestringVault display name
assetaddressBase asset (USDC, etc.)
configVaultConfigVault configuration

Vault Functions

deposit

function deposit(uint256 amount) external returns (uint256 shares)

withdraw

function withdraw(uint256 shares) external returns (uint256 amount)

rebalance (Curator only)

function rebalance(
    RebalanceAction[] calldata actions
) external onlyCurator

claimFees (Curator only)

function claimFees() external onlyCurator returns (
    uint256 managementFee,
    uint256 performanceFee
)

View Functions

getSharePrice

function getSharePrice() external view returns (uint256)

getTotalAssets

function getTotalAssets() external view returns (uint256)

getAllocation

function getAllocation() external view returns (
    Position[] memory positions,
    uint256 cash
)

Data Structures

VaultConfig

struct VaultConfig {
    address curator;
    uint256 managementFee;    // basis points (100 = 1%)
    uint256 performanceFee;   // basis points
    uint256 hurdleRate;       // basis points
    AllocationRule[] rules;
}

struct AllocationRule {
    address protocol;
    uint256 maxAllocation;    // percentage (100 = 100%)
}

RebalanceAction

struct RebalanceAction {
    ActionType actionType;
    address target;
    uint256 amount;
    bytes data;
}

enum ActionType {
    Deposit,
    Withdraw,
    Lend,
    CancelLend
}

Events

event Deposit(
    address indexed user,
    uint256 amount,
    uint256 shares
);

event Withdraw(
    address indexed user,
    uint256 shares,
    uint256 amount
);

event Rebalance(
    address indexed curator,
    RebalanceAction[] actions
);

event FeeClaimed(
    address indexed curator,
    uint256 managementFee,
    uint256 performanceFee
);

Integration Example

// Deposit to vault
const vault = new ethers.Contract(VAULT_ADDRESS, VAULT_ABI, signer);

// Approve vault to spend USDC
await usdc.approve(VAULT_ADDRESS, amount);

// Deposit and receive shares
const tx = await vault.deposit(ethers.parseUnits('10000', 6));
const receipt = await tx.wait();

const shares = receipt.events.find(e => e.event === 'Deposit').args.shares;
console.log(`Received ${shares} vault shares`);