Depositing USDC
Add USDC to the 7N7D Trading Vault programmatically.
Coming Soon
The SDK is currently in development. This documentation describes the planned API.
Basic Deposit
import { SevenNSevenD } from '@7n7d/sdk';
const client = new SevenNSevenD({
rpcUrl: process.env.RPC_URL,
privateKey: process.env.PRIVATE_KEY,
});
// Deposit 1000 USDC
const result = await client.vault.deposit('1000');
console.log(`Transaction hash: ${result.hash}`);
console.log(`Shares received: ${result.shares}`);
console.log(`Share price: ${result.sharePrice}`);
Deposit Workflow
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Check USDC │ ──► │ Approve │ ──► │ Deposit │
│ Balance │ │ (if needed) │ │ Execute │
└──────────────┘ └──────────────┘ └──────────────┘
Step-by-Step
1. Check USDC Balance
const balance = await client.getUSDCBalance();
console.log(`USDC Balance: ${balance}`);
if (parseFloat(balance) < 1000) {
throw new Error('Insufficient USDC balance');
}
2. Check Allowance
const allowance = await client.vault.getAllowance();
console.log(`Current allowance: ${allowance}`);
// If allowance is insufficient, approve first
if (parseFloat(allowance) < 1000) {
const approvalTx = await client.vault.approve('1000');
await approvalTx.wait();
console.log('Approval confirmed');
}
3. Execute Deposit
const depositTx = await client.vault.deposit('1000');
const receipt = await depositTx.wait();
console.log(`Deposit confirmed in block ${receipt.blockNumber}`);
Deposit Options
Specify Amount
// Deposit exact USDC amount
await client.vault.deposit('1000'); // 1000 USDC
await client.vault.deposit('1000.50'); // 1000.50 USDC
await client.vault.deposit('0.01'); // 0.01 USDC (minimum)
Deposit Maximum
// Deposit entire USDC balance
const maxDeposit = await client.vault.depositMax();
console.log(`Deposited all USDC: ${maxDeposit.amount}`);
With Options
const result = await client.vault.deposit('1000', {
// Gas settings
gasLimit: 300000, // Custom gas limit
maxFeePerGas: '0.1', // gwei
maxPriorityFeePerGas: '0.01',
// Slippage protection
minShares: '950', // Minimum shares to receive
// Deadline
deadline: Date.now() + 300000, // 5 minutes
});
Helper Functions
Estimate Shares
Before depositing, estimate how many shares you'll receive:
const estimate = await client.vault.estimateDeposit('1000');
console.log(`Depositing: ${estimate.usdcAmount} USDC`);
console.log(`Expected shares: ${estimate.shares}`);
console.log(`Current share price: ${estimate.sharePrice}`);
console.log(`Estimated gas: ${estimate.gasEstimate}`);
Approve with Infinite Allowance
For frequent depositors:
// Approve unlimited USDC (use with caution)
await client.vault.approveMax();
Check Approval Status
const needsApproval = await client.vault.needsApproval('1000');
if (needsApproval) {
await client.vault.approve('1000');
}
await client.vault.deposit('1000');
Convenience Method
One function that handles approval if needed:
// Automatically approves if necessary, then deposits
const result = await client.vault.depositWithApproval('1000');
console.log(`Approval tx: ${result.approvalHash || 'Not needed'}`);
console.log(`Deposit tx: ${result.depositHash}`);
console.log(`Shares received: ${result.shares}`);
Transaction Results
DepositResult Object
interface DepositResult {
// Transaction info
hash: string; // Transaction hash
blockNumber: number; // Block number
// Deposit details
usdcAmount: string; // USDC deposited
shares: string; // Shares received
sharePrice: string; // Price per share
// Gas info
gasUsed: string; // Gas consumed
gasCost: string; // Cost in ETH
}
Access Results
const result = await client.vault.deposit('1000');
// Transaction details
console.log(`TX: ${result.hash}`);
console.log(`Block: ${result.blockNumber}`);
// Deposit details
console.log(`Deposited: ${result.usdcAmount} USDC`);
console.log(`Received: ${result.shares} shares`);
console.log(`At price: $${result.sharePrice} per share`);
// Costs
console.log(`Gas used: ${result.gasUsed}`);
console.log(`Gas cost: ${result.gasCost} ETH`);
Error Handling
import { SDKError } from '@7n7d/sdk';
try {
await client.vault.deposit('1000');
} catch (error) {
if (error instanceof SDKError) {
switch (error.code) {
case 'INSUFFICIENT_BALANCE':
console.log('Not enough USDC in wallet');
break;
case 'INSUFFICIENT_ALLOWANCE':
console.log('Need to approve USDC spending first');
// Auto-fix:
await client.vault.approve('1000');
await client.vault.deposit('1000');
break;
case 'MIN_SHARES_NOT_MET':
console.log('Share price changed, got fewer shares than expected');
break;
case 'DEADLINE_EXCEEDED':
console.log('Transaction took too long');
break;
case 'TRANSACTION_REVERTED':
console.log('Transaction failed:', error.reason);
break;
default:
console.log('Unknown error:', error.message);
}
}
}
Full Example
Complete deposit workflow:
import { SevenNSevenD } from '@7n7d/sdk';
async function depositToVault(amount: string) {
const client = new SevenNSevenD({
rpcUrl: process.env.RPC_URL!,
privateKey: process.env.PRIVATE_KEY!,
});
// 1. Check balance
const balance = await client.getUSDCBalance();
console.log(`Current USDC balance: ${balance}`);
if (parseFloat(balance) < parseFloat(amount)) {
throw new Error(`Insufficient balance. Have ${balance}, need ${amount}`);
}
// 2. Estimate deposit
const estimate = await client.vault.estimateDeposit(amount);
console.log(`Will receive ~${estimate.shares} shares`);
console.log(`Estimated gas cost: ${estimate.gasEstimate} ETH`);
// 3. Deposit with auto-approval
console.log(`Depositing ${amount} USDC...`);
const result = await client.vault.depositWithApproval(amount);
console.log('Deposit successful!');
console.log(` TX Hash: ${result.depositHash}`);
console.log(` Shares: ${result.shares}`);
console.log(` Value: $${result.usdcAmount}`);
// 4. Verify new balance
const newBalance = await client.vault.getBalance();
console.log(`New vault balance: ${newBalance.shares} shares ($${newBalance.usdcValue})`);
return result;
}
// Execute
depositToVault('1000')
.then(result => console.log('Done!', result))
.catch(error => console.error('Failed:', error));
Next: Learn how to Withdraw funds from the vault.