Contracts & Addresses
All ZenSats contracts are deployed on Ethereum Mainnet. Below you'll find addresses, descriptions, and links to verify contracts on Etherscan.
Verify Everything
Always verify contract addresses before interacting. All contracts are verified on Etherscan with publicly viewable source code. Never send funds to addresses you haven't personally verified.
ZenSats Core Contracts
Zenji Vault (ERC4626)
Main vault contract that accepts WBTC deposits and coordinates carry trade strategy
AaveLoanManager
Loan manager for borrowing USDT via Aave V3
PmUsdCrvUsdStrategy
Yield strategy that provides pmUSD/crvUSD liquidity and compounds CRV rewards
ZenjiViewHelper
Helper contract for complex view functions (health, LTV bounds, etc.)
VaultTracker
Tracks vault performance and calculates APR
RebalanceKeeper
Automation keeper for monitoring and triggering vault rebalances
CrvToCrvUsdSwapper
Swapper contract for CRV → crvUSD reward conversions
UniversalRouterV3Swapper
Swapper contract for USDT/WBTC/ETH conversions via Uniswap Universal Router V3
Asset Contracts
| Asset | Symbol | Type | Decimals | Address |
|---|---|---|---|---|
| Wrapped Bitcoin (WBTC) | WBTC | Collateral Asset | 8 | 0x2260...C599 |
| Tether USD (USDT) | USDT | Debt Asset | 6 | 0xdAC1...1ec7 |
| crvUSD (Curve USD) | crvUSD | Yield Asset | 18 | 0xf939...1b4E |
| pmUSD | pmUSD | Strategy Token | 18 | 0xC0c1...4DdF |
Oracle Contracts
External Protocol Integrations
Aave V3 Pool
Lending pool for WBTC collateral and USDT borrowing
Curve USDT/crvUSD Pool
Two-pool for USDT ↔ crvUSD swaps in yield strategy
Curve pmUSD/crvUSD Pool
StableSwapNG pool for pmUSD/crvUSD liquidity
pmUSD Token
pmUSD token contract used in the pmUSD/crvUSD pool
Stake DAO Reward Vault
Reward vault distributing CRV incentives
ABIs
All contract ABIs are available in the frontend codebase:Integration Examples
Reading Vault Data
import { readContract } from '@wagmi/core';
import { VAULT_ABI, VIEW_HELPER_ABI } from '$lib/contracts/config';
import { VAULTS } from '$lib/config/vaults';
const vault = VAULTS['wbtc-pmusd'];
// Get total assets
const totalAssets = await readContract(wagmiConfig, {
address: vault.vaultAddress,
abi: VAULT_ABI,
functionName: 'totalAssets'
});
// Get current LTV
const ltvBounds = await readContract(wagmiConfig, {
address: vault.viewHelperAddress,
abi: VIEW_HELPER_ABI,
functionName: 'getLtvBounds',
args: [vault.vaultAddress]
});Depositing Collateral
import { writeContract, waitForTransactionReceipt } from '@wagmi/core';
import { VAULTS } from '$lib/config/vaults';
const vault = VAULTS['wbtc-pmusd']; // or any vault slug
// 1. Approve vault to spend collateral
const approveHash = await writeContract(wagmiConfig, {
address: vault.asset.address,
abi: ERC20_ABI,
functionName: 'approve',
args: [vault.vaultAddress, amountToDeposit]
});
await waitForTransactionReceipt(wagmiConfig, { hash: approveHash });
// 2. Deposit collateral
const depositHash = await writeContract(wagmiConfig, {
address: vault.vaultAddress,
abi: VAULT_ABI,
functionName: 'deposit',
args: [amountToDeposit, userAddress]
});
await waitForTransactionReceipt(wagmiConfig, { hash: depositHash });Monitoring Events
import { VAULTS } from '$lib/config/vaults';
const vault = VAULTS['wbtc-pmusd'];
// Listen for deposits
publicClient.watchContractEvent({
address: vault.vaultAddress,
abi: VAULT_ABI,
eventName: 'Deposit',
onLogs: (logs) => {
logs.forEach((log) => {
console.log('Deposit:', {
sender: log.args.sender,
owner: log.args.owner,
assets: log.args.assets,
shares: log.args.shares
});
});
}
});
// Listen for governance changes
publicClient.watchContractEvent({
address: vault.vaultAddress,
abi: VAULT_ABI,
eventName: 'StrategyChangeProposed',
onLogs: (logs) => {
console.warn('Strategy change proposed!', logs);
}
});Useful Links
View vault's DeFi positions and holdings
View transactions and contract code
Review source code and contracts
Choose a vault and get started
Security
Security Status
- ✓ All contracts are verified on Etherscan with public source code
- ✓ Open source and available for community review
- ✓ Uses OpenZeppelin battle-tested libraries
- ⚠️ Not yet formally audited by a third-party security firm
A formal security audit has not yet been completed. Use at your own risk.