Skip to main content

πŸ” CREATOR/WETH vs CREATOR/USDC Analysis

The Core Problem Doesn't Change​

Current Issue:​

User deposits CREATOR β†’ Vault β†’ Strategy β†’ Charm Vault

Problem: Charm needs BOTH tokens for LP
- CREATOR βœ… (we have this)
- USDC ❌ (we don't have this)

With WETH Instead:​

User deposits CREATOR β†’ Vault β†’ Strategy β†’ Charm Vault

Problem: Charm STILL needs BOTH tokens
- CREATOR βœ… (we have this)
- WETH ❌ (we still don't have this!)

The pair doesn't matter - we need BOTH tokens regardless! ⚠️


πŸ’‘ But WETH Might Be Slightly Better:​

WETH Advantages:​

  1. βœ… More liquid - Higher trading volume
  2. βœ… Native to ETH - No stablecoin risk
  3. βœ… Higher LP fees - ETH pairs trade more
  4. βœ… Better for DeFi - Most protocols use WETH
  5. βœ… Easier to get - Just wrap ETH

USDC Advantages:​

  1. βœ… Stable value - No price volatility
  2. βœ… Lower IL risk - CREATOR/USDC has less impermanent loss
  3. βœ… Dollar-denominated - Easier for users to understand

🎯 The REAL Question: How to Get the Second Token?​

We have 3 options regardless of WETH or USDC:

Option A: Swap Half (Most Viable)​

function deposit(uint256 creatorAmount) external returns (uint256) {
// 1. Take CREATOR tokens
IERC20(CREATOR).transferFrom(vault, address(this), creatorAmount);

// 2. Swap 50% CREATOR β†’ WETH (or USDC)
uint256 halfCreator = creatorAmount / 2;
uint256 wethReceived = _swapOnUniswap(halfCreator);

// 3. Deposit BOTH to Charm
charmVault.deposit(
halfCreator, // CREATOR
wethReceived, // WETH
0, 0, address(this)
);
}

With WETH: βœ… Better - higher liquidity, easier swaps
With USDC: ⚠️ Okay - but less liquid for swaps

Option B: Treasury Provides Match​

// Treasury pre-deposits WETH to strategy
// Strategy uses it to match CREATOR deposits
function deposit(uint256 creatorAmount) external returns (uint256) {
uint256 wethBalance = IERC20(WETH).balanceOf(address(this));
uint256 wethNeeded = _calculateWethNeeded(creatorAmount);

require(wethBalance >= wethNeeded, "Need more WETH");

charmVault.deposit(creatorAmount, wethNeeded, 0, 0, address(this));
}

With WETH: βœ… Treasury can easily get WETH
With USDC: βœ… Treasury can easily get USDC
(Both work equally here)

Option C: Use Flash Liquidity​

// Borrow WETH via flash loan to create LP, then repay
function deposit(uint256 creatorAmount) external returns (uint256) {
// 1. Flash loan WETH
// 2. Create CREATOR/WETH LP
// 3. LP fees pay back flash loan
// 4. Keep excess
}

With WETH: βœ… Many WETH flash loan providers
With USDC: βœ… Many USDC flash loan providers too
(Both work)


πŸ† Winner: CREATOR/WETH​

Recommendation: Use CREATOR/WETH​

Why:

  1. βœ… Higher volume = more LP fees earned
  2. βœ… Better liquidity = easier swaps
  3. βœ… More integrations = more strategies later
  4. βœ… Native token = no stablecoin risk

The swap solution becomes:

// Swap 50% CREATOR β†’ WETH on Uniswap V3
// Then deposit both to Charm

This is easier with WETH because:

  • CREATOR/WETH pool likely has more liquidity than CREATOR/USDC
  • Less hops (direct swap vs might need CREATORβ†’WETHβ†’USDC)
  • Lower slippage

πŸ“Š Comparison Table:​

FactorCREATOR/USDCCREATOR/WETH
Swap Liquidity⚠️ Lowerβœ… Higher
LP Fee Revenue⚠️ Lowerβœ… Higher
IL Riskβœ… Lower⚠️ Higher
DeFi Integration⚠️ Okayβœ… Better
User Understandingβœ… Easier⚠️ Harder
Flash Loan Optionsβœ… Goodβœ… Good
OVERALL6/108/10

πŸ’‘ Practical Implementation:​

With CREATOR/WETH:​

contract CreatorCharmStrategy is IStrategy {
ISwapRouter public constant uniswapRouter = 0x...;

function deposit(uint256 amount) external override returns (uint256) {
// 1. Receive CREATOR
IERC20(CREATOR).transferFrom(vault, address(this), amount);

// 2. Swap 50% to WETH
uint256 halfAmount = amount / 2;
uint256 wethReceived = _swapCreatorForWeth(halfAmount);

// 3. Deposit both to Charm
(uint256 shares,,) = charmVault.deposit(
halfAmount, // CREATOR remaining
wethReceived, // WETH from swap
0, 0,
address(this)
);

return halfAmount + wethReceived; // Total value deposited
}

function _swapCreatorForWeth(uint256 amountIn) internal returns (uint256) {
ISwapRouter.ExactInputSingleParams memory params = ISwapRouter.ExactInputSingleParams({
tokenIn: CREATOR,
tokenOut: WETH,
fee: 3000, // 0.3%
recipient: address(this),
deadline: block.timestamp,
amountIn: amountIn,
amountOutMinimum: 0, // Should calculate slippage
sqrtPriceLimitX96: 0
});

return uniswapRouter.exactInputSingle(params);
}
}

🎯 Final Answer:​

YES - CREATOR/WETH is better than CREATOR/USDC!

But you still need to add swap logic because:

  1. Vault receives only CREATOR
  2. Charm needs CREATOR + WETH
  3. Strategy must swap 50% CREATOR β†’ WETH

WETH is easier to swap to and has better liquidity, so it's the right choice.

Next step: Add Uniswap V3 swap integration to CreatorCharmStrategy βœ