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:
| Name | Type | Description |
|---|
| name | string | Vault display name |
| asset | address | Base asset (USDC, etc.) |
| config | VaultConfig | Vault 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`);