Vaults & Shares
Every atom and triple has an associated vault that holds deposited assets. Users receive shares representing their ownership when they deposit, with prices determined by bonding curves.
What is a Vault?β
A vault is a container for assets associated with an atom or triple:
- Assets: Total deposited value (in native token)
- Shares: Tokenized ownership stakes
- Share Price: Determined by bonding curve
- Vault ID: Same as the atom/triple ID
Depositing to Vaultsβ
Basic Depositβ
import { multiVaultDeposit } from '@0xintuition/protocol'
import { parseEther } from 'viem'
const vaultId = '0x1234...' // Atom or triple ID
const curveId = 1 // LinearCurve
const depositAmount = parseEther('1')
const txHash = await multiVaultDeposit(
{ address, walletClient, publicClient },
{
args: [
account.address, // receiver
vaultId,
curveId,
0n, // minShares (slippage protection)
],
value: depositAmount,
}
)
Preview Depositβ
Check expected shares before depositing:
import { multiVaultPreviewDeposit } from '@0xintuition/protocol'
const expectedShares = await multiVaultPreviewDeposit(
{ address, publicClient },
{ args: [vaultId, curveId, depositAmount] }
)
// Apply slippage tolerance (1%)
const minShares = (expectedShares * 99n) / 100n
const txHash = await multiVaultDeposit(
{ address, walletClient, publicClient },
{
args: [account.address, vaultId, curveId, minShares],
value: depositAmount,
}
)
Batch Depositsβ
Deposit to multiple vaults in one transaction:
import { multiVaultDepositBatch } from '@0xintuition/protocol'
const vaults = ['0x1234...', '0x2345...', '0x3456...']
const curves = [1, 1, 2] // Mix of curves
const deposits = [parseEther('0.5'), parseEther('1'), parseEther('0.25')]
const minShares = [0n, 0n, 0n]
const totalValue = deposits.reduce((a, b) => a + b, 0n)
const txHash = await multiVaultDepositBatch(
{ address, walletClient, publicClient },
{
args: [account.address, vaults, curves, deposits, minShares],
value: totalValue,
}
)
Redeeming Sharesβ
Basic Redemptionβ
import { multiVaultRedeem } from '@0xintuition/protocol'
const shares = parseEther('10')
const txHash = await multiVaultRedeem(
{ address, walletClient, publicClient },
{
args: [
account.address, // receiver
vaultId,
curveId,
shares,
0n, // minAssets (slippage protection)
],
}
)
Preview Redemptionβ
Check expected assets before redeeming:
import { multiVaultPreviewRedeem } from '@0xintuition/protocol'
const expectedAssets = await multiVaultPreviewRedeem(
{ address, publicClient },
{ args: [vaultId, curveId, shares] }
)
// Apply slippage tolerance (1%)
const minAssets = (expectedAssets * 99n) / 100n
const txHash = await multiVaultRedeem(
{ address, walletClient, publicClient },
{
args: [account.address, vaultId, curveId, shares, minAssets],
}
)
Batch Redemptionsβ
import { multiVaultRedeemBatch } from '@0xintuition/protocol'
const vaults = ['0x1234...', '0x2345...']
const curves = [1, 2]
const sharesToRedeem = [parseEther('5'), parseEther('3')]
const minAssets = [0n, 0n]
const txHash = await multiVaultRedeemBatch(
{ address, walletClient, publicClient },
{
args: [sharesToRedeem, account.address, vaults, curves, minAssets],
}
)
Share & Asset Conversionsβ
Convert Assets to Sharesβ
import { multiVaultConvertToShares } from '@0xintuition/protocol'
const shares = await multiVaultConvertToShares(
{ address, publicClient },
{ args: [vaultId, curveId, assets] }
)
Convert Shares to Assetsβ
import { multiVaultConvertToAssets } from '@0xintuition/protocol'
const assets = await multiVaultConvertToAssets(
{ address, publicClient },
{ args: [vaultId, curveId, shares] }
)
Get Current Share Priceβ
import { multiVaultCurrentSharePrice } from '@0xintuition/protocol'
const price = await multiVaultCurrentSharePrice(
{ address, publicClient },
{ args: [vaultId, curveId] }
)
Querying Vault Stateβ
Get User Sharesβ
import { multiVaultGetShares } from '@0xintuition/protocol'
const userShares = await multiVaultGetShares(
{ address, publicClient },
{ args: [userAddress, vaultId] }
)
Get Maximum Redeemable Sharesβ
import { multiVaultMaxRedeem } from '@0xintuition/protocol'
const maxShares = await multiVaultMaxRedeem(
{ address, publicClient },
{ args: [userAddress, vaultId] }
)
Get Vault Detailsβ
import { multiVaultGetVault } from '@0xintuition/protocol'
const vault = await multiVaultGetVault(
{ address, publicClient },
{ args: [vaultId] }
)
Get Vault Typeβ
import { multiVaultGetVaultType } from '@0xintuition/protocol'
const vaultType = await multiVaultGetVaultType(
{ address, publicClient },
{ args: [vaultId] }
)
// Returns: 0 (atom) or 1 (triple)
Feesβ
Deposits and redemptions incur fees:
Entry Feeβ
import { multiVaultEntryFeeAmount } from '@0xintuition/protocol'
const entryFee = await multiVaultEntryFeeAmount(
{ address, publicClient },
{ args: [vaultId, assets] }
)
Exit Feeβ
import { multiVaultExitFeeAmount } from '@0xintuition/protocol'
const exitFee = await multiVaultExitFeeAmount(
{ address, publicClient },
{ args: [vaultId, assets] }
)
Protocol Feeβ
import { multiVaultProtocolFeeAmount } from '@0xintuition/protocol'
const protocolFee = await multiVaultProtocolFeeAmount(
{ address, publicClient },
{ args: [vaultId, assets] }
)
Common Use Casesβ
Signal Support for an Atomβ
const atomId = '0x1234...'
const depositAmount = parseEther('0.5')
const txHash = await multiVaultDeposit(
{ address, walletClient, publicClient },
{
args: [account.address, atomId, 1, 0n],
value: depositAmount,
}
)
Stake For/Against a Statementβ
// Stake FOR a triple
const txHashFor = await multiVaultDeposit(
{ address, walletClient, publicClient },
{
args: [account.address, tripleId, 1, 0n],
value: parseEther('1'),
}
)
// Get counter-triple and stake AGAINST
const triple = await multiVaultGetTriple(
{ address, publicClient },
{ args: [tripleId] }
)
const counterVaultId = triple[4]
const txHashAgainst = await multiVaultDeposit(
{ address, walletClient, publicClient },
{
args: [account.address, counterVaultId, 1, 0n],
value: parseEther('1'),
}
)
Related Functionsβ
- multiVaultDeposit - Deposit to vault
- multiVaultRedeem - Redeem shares
- multiVaultPreviewDeposit - Preview deposit
- multiVaultGetShares - Get user shares
Next Stepsβ
- Bonding Curves - Understand pricing mechanics
- Examples - See complete deposit/redeem workflows