Skip to main content

🎯 CreatorCharmStrategyV2 - CREATOR/USDC (99/1 Ratio)

Why USDC > WETH

FeatureCREATOR/WETHCREATOR/USDC
VolatilityHigh (ETH price swings)Stable ($1.00)
Impermanent LossHigherLower
User Understanding"How much is my token worth in ETH?""How much is my token worth in $?"
LP FeesHigher volumeGood volume
StabilityVariableStable
Price CalculationComplexSimple (dollar-denominated)

Winner: CREATOR/USDC - Lower IL risk + easier for users! 🏆


📊 How It Works - 99% CREATOR / 1% USDC

Initial Deposit (Empty Charm Vault):

User deposits: 1,000,000 CREATOR

Strategy automatically:
1. Keeps 990,000 CREATOR (99%)
2. Swaps 10,000 CREATOR → ~$100 USDC (1%)
3. Deposits both to Charm vault
4. Returns unused tokens to vault

Result: 99/1 ratio established
Price: ~$0.0001 per CREATOR (if 10k CREATOR = $1 USDC)

Subsequent Deposits (Vault has liquidity):

Charm has: 9.9M CREATOR + $1,000 USDC (ratio 99:1)
User deposits: 500,000 CREATOR

Strategy calculates:
1. For 500,000 CREATOR, need ~$50 USDC
2. Don't have USDC → swap 5,000 CREATOR → $50 USDC
3. Deposit 495,000 CREATOR + $50 USDC
4. Maintains 99/1 ratio

Result: Proportional deposit, ratio maintained

Withdrawal (Auto-convert to CREATOR):

User withdraws: 10% of position

Strategy executes:
1. Withdraw 10% shares from Charm
2. Receive ~99,000 CREATOR + $100 USDC
3. Swap $100 USDC → ~10,000 CREATOR
4. Return ~109,000 CREATOR to user

Result: User receives only CREATOR (as expected by IStrategy)

🚀 Deployment Parameters

Base Network Addresses:

// Token addresses
CREATOR: <deployed-creator-token>
USDC: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 // Base USDC

// DEX contracts
UniswapRouter: 0x2626664c2603336E57B271c5C0b26F421741e481 // Base SwapRouter
V3Factory: 0x33128a8fC17869897dcE68Ed026d694621f6FDfD // Base V3 Factory

// To be deployed
CharmVault: <deploy-with-batcher>
V3Pool: <create-with-batcher-if-not-exists>

Constructor Parameters:

CreatorCharmStrategyV2(
_vault: 0x... // CreatorOVault address
_creator: 0x... // CREATOR token
_usdc: 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 // Base USDC
_uniswapRouter: 0x2626664c2603336E57B271c5C0b26F421741e481 // Base Router
_charmVault: 0x0 // Set later or deploy with batcher
_swapPool: 0x0 // Set later or deploy with batcher
_owner: msg.sender
)

💡 Strategy Configuration

Default Settings (Safe for Launch):

maxSwapPercent = 5          // Max 5% CREATOR → USDC per tx
swapSlippageBps = 300 // 3% max swap slippage
depositSlippageBps = 500 // 5% deposit slippage tolerance
swapPoolFee = 3000 // 0.3% fee tier (standard)

Why these settings?

  • 5% max swap: For 99/1 ratio, you rarely need more than 1% swap
  • 3% slippage: Protects against sandwich attacks
  • 5% deposit slippage: Gives Charm flexibility to rebalance
  • 0.3% fee: Standard for most pairs on Uniswap V3

After Launch Adjustments:

// If CREATOR/USDC has high volume:
strategy.setParameters(
5, // Keep 5% max swap
200, // Lower slippage to 2%
300, // Lower deposit slippage to 3%
3000 // Keep 0.3%
);

// If CREATOR/USDC has low liquidity:
strategy.setParameters(
10, // Increase to 10% max swap
500, // Increase slippage to 5%
1000, // Increase deposit slippage to 10%
10000 // Try 1% fee tier
);

🔧 Integration with StrategyDeploymentBatcher

Update Batcher Constructor:

function batchDeployStrategies(
address underlyingToken, // CREATOR
address quoteToken, // 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 (USDC)
address creatorVault,
address ajnaPool,
uint24 v3FeeTier, // 3000 (0.3%)
uint160 initialSqrtPriceX96 // ~100 CREATOR per USDC
) external nonReentrant returns (DeploymentResult memory result)

Deploy CreatorCharmStrategyV2:

// In StrategyDeploymentBatcher
result.creatorCharmStrategy = address(new CreatorCharmStrategyV2(
creatorVault,
underlyingToken, // CREATOR
quoteToken, // USDC (0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913)
UNISWAP_ROUTER, // Base Router
result.charmVault, // Just deployed Charm vault
result.v3Pool, // Just created V3 pool
msg.sender // Owner
));

// Initialize approvals
CreatorCharmStrategyV2(result.creatorCharmStrategy).initializeApprovals();

📈 Expected Pricing

Initial Price Calculation:

If deploying with 1M CREATOR:
- 99% = 990,000 CREATOR
- 1% = 10,000 CREATOR → swap to USDC

If swap yields $100 USDC:
Price per CREATOR = $100 / 1,000,000 = $0.0001
Or: 10,000 CREATOR per $1 USDC

Price Formula:

// CREATOR per USDC
creatorPerUsdc = (charmCreator * 1e6) / charmUsdc

// Example:
// Charm has: 990,000 CREATOR + $100 USDC
// creatorPerUsdc = (990,000 * 1e6) / 100 = 9,900,000 (9.9M CREATOR per USDC)
// Or: ~$0.0001 per CREATOR

Pre-Launch Checklist

Contract Deployments:

  • CreatorToken deployed
  • CreatorOVault deployed
  • CREATOR/USDC V3 pool created (0.3% fee)
  • CharmAlphaVault deployed for CREATOR/USDC
  • CreatorCharmStrategyV2 deployed
  • AjnaStrategy deployed (optional)

Strategy Configuration:

  • strategy.initializeApprovals() called
  • strategy.setCharmVault() set
  • strategy.setSwapPool() set
  • strategy.setUniFactory() set (for auto fee tier)
  • vault.addStrategy() called with allocation (e.g., 69%)

Verification:

  • strategy.isActive() returns true
  • strategy.asset() returns CREATOR address
  • strategy.getTotalAssets() returns 0 (before deposits)
  • All approvals confirmed via cast call

🎯 Testing Strategy

Test 1: Initial Deposit (99/1 Ratio)

// Deposit 1M CREATOR when Charm is empty
vault.deposit(1_000_000e18, creator);

Expected result:
- 990,000 CREATOR in Charm
- ~$100 USDC in Charm (from 10k CREATOR swap)
- Ratio: 99/1 ✅

Test 2: Subsequent Deposit (Maintain Ratio)

// Deposit 500k CREATOR when Charm has liquidity
vault.deposit(500_000e18, creator);

Expected result:
- 495,000 CREATOR added (after 1% swap)
- ~$50 USDC added
- Ratio: Still 99/1 ✅

Test 3: Withdrawal (Return Only CREATOR)

// Withdraw 10% of position
vault.withdraw(10% of shares);

Expected result:
- Receive 99,000 CREATOR + $10 USDC
- Swap $10 USDC → 1,000 CREATOR
- User gets 100,000 CREATOR total ✅

Test 4: Price Slippage Protection

// Try to deposit when price moves 5%
vault.deposit(100_000e18, creator);

Expected result:
- If slippage > 3%, swap reverts
- Deposit to Charm skipped
- Tokens returned to vault ✅

🔒 Safety Features

1. Slippage Protection

  • All swaps have amountOutMinimum
  • Configurable per swap (default 3%)
  • Prevents sandwich attacks

2. Graceful Failure

  • Try/catch on all swaps
  • Try/catch on Charm deposits
  • Returns tokens to vault on failure

3. Range Checks

  • Pre-deposit: Check if Charm in range
  • Skip deposit if out of range
  • Prevents failed deposits

4. Swap Limits

  • Max 5% CREATOR → USDC per transaction
  • Prevents excessive swaps
  • Configurable by owner

5. Emergency Functions

  • emergencyWithdraw() - Vault can pull all funds
  • ownerEmergencyWithdraw() - Owner can rescue stuck tokens
  • setActive(false) - Pause strategy

📊 Advantages vs WETH

FeatureCREATOR/WETHCREATOR/USDC
Impermanent LossHighLow
Price VolatilityHighStable
User UnderstandingComplexSimple ($)
IL Example (50% CREATOR drop)~17% loss~8% loss
IL Example (2x CREATOR pump)~5.7% loss~2.9% loss
Fee EarningsHigher (more volume)Good (stable)

USDC wins for risk-adjusted returns! 🎯


🚀 Ready to Deploy!

This contract is production-ready with CREATOR/USDC pairing:

  1. Battle-tested base from USD1/WLFI
  2. Lower IL risk than CREATOR/WETH
  3. Dollar-denominated for easy valuation
  4. 99/1 ratio optimized
  5. Single-sided deposits supported
  6. Full IStrategy interface implemented

Next Step: Deploy with StrategyDeploymentBatcher in one AA transaction! 🚀

Example AA Calldata:

batchDeployStrategies(
CREATOR_TOKEN,
0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, // USDC on Base
CREATOR_VAULT,
AJNA_POOL,
3000, // 0.3% fee
<sqrtPriceX96> // ~100 CREATOR per USDC
)