π 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:β
- β More liquid - Higher trading volume
- β Native to ETH - No stablecoin risk
- β Higher LP fees - ETH pairs trade more
- β Better for DeFi - Most protocols use WETH
- β Easier to get - Just wrap ETH
USDC Advantages:β
- β Stable value - No price volatility
- β Lower IL risk - CREATOR/USDC has less impermanent loss
- β 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:
- β Higher volume = more LP fees earned
- β Better liquidity = easier swaps
- β More integrations = more strategies later
- β 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:β
| Factor | CREATOR/USDC | CREATOR/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 |
| OVERALL | 6/10 | 8/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:
- Vault receives only CREATOR
- Charm needs CREATOR + WETH
- 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 β