๐ Account Abstraction Strategy Deployment Guide
โ What We've Builtโ
A complete AA-compatible deployment system for Charm + Ajna strategies!
๐ฏ The Problemโ
Traditional deployment requires multiple transactions:
- Deploy Charm Vault โ wait
- Deploy Charm Strategy โ wait
- Deploy Creator Charm Strategy โ wait
- Deploy Ajna Strategy โ wait
- Add Charm to vault โ wait
- Add Ajna to vault โ wait
Total: 6 transactions, ~5-10 minutes
๐ก The Solutionโ
With Account Abstraction, we batch everything into ONE transaction:
AA Batch Transaction:
โโ Deploy Charm Vault
โโ Deploy Charm Strategy
โโ Connect Strategy to Vault
โโ Deploy Creator Charm Strategy
โโ Deploy Ajna Strategy
โโ Add all strategies to Creator Vault
Total: 1 transaction, ~30 seconds โจ
๐ฆ New Contractsโ
StrategyDeploymentBatcher.solโ
Deploys all strategies in one call:
function batchDeployStrategies(
address underlyingToken, // AKITA
address quoteToken, // USDC
address creatorVault, // Your vault
address ajnaPool, // Ajna pool
uint24 v3FeeTier, // 3000 (0.3%)
uint160 initialSqrtPriceX96 // Initial price
) external returns (DeploymentResult memory)
Returns:
charmVault- Charm Alpha Vault addresscharmStrategy- Rebalancing strategycreatorCharmStrategy- Vault integrationajnaStrategy- Ajna integrationv3Pool- Uniswap V3 pool
๐ Deployment Flowโ
Option A: With Account Abstraction (Recommended)โ
// Using ethers.js + AA SDK
import { encodeFunctionData } from 'viem'
// 1. Deploy batcher contract
const batcher = await deploy('StrategyDeploymentBatcher')
// 2. Create AA batch call
const calls = [
{
to: batcher.address,
data: encodeFunctionData({
abi: batcherABI,
functionName: 'batchDeployStrategies',
args: [AKITA, USDC, vault, ajnaPool, 3000, sqrtPrice]
})
}
]
// 3. Execute via AA wallet
const result = await aaWallet.executeBatch(calls)
// Done! All strategies deployed in 1 tx
Option B: Without AA (Standard)โ
# Deploy batcher
forge create StrategyDeploymentBatcher --rpc-url base
# Call batchDeployStrategies
cast send $BATCHER "batchDeployStrategies(...)" --rpc-url base
# Still 1 transaction, but you need a funded wallet
๐งช Testingโ
Local Simulation:โ
cd /home/akitav2/projects/CreatorVault
# Run test script
forge script script/TestAADeployment.s.sol -vvv
# This will:
# โ
Deploy batcher
# โ
Simulate batch deployment
# โ
Verify all contracts
# โ
Generate batch calls for AA
Testnet Testing:โ
# Deploy to Base Sepolia
forge script script/TestAADeployment.s.sol \
--rpc-url base-sepolia \
--broadcast
# Check deployment
cast call $CHARM_VAULT "totalSupply()" --rpc-url base-sepolia
๐ What Gets Deployedโ
1. V3 Poolโ
- Token Pair: AKITA/USDC
- Fee Tier: 0.3%
- Initial Price: $0.0001/AKITA
- Purpose: Base for Charm LP strategy
2. Charm Alpha Vaultโ
- Manages V3 LP positions
- Issues vault shares
- Collects fees
- Purpose: Automated LP management
3. Charm Alpha Strategyโ
- Rebalancing logic
- Base + Limit orders
- TWAP protection
- Purpose: Keeps LP in range
4. Creator Charm Strategyโ
- Implements
IStrategy - Connects vault to Charm
- Handles deposits/withdrawals
- Purpose: Vault integration
5. Ajna Strategyโ
- Implements
IStrategy - Connects vault to Ajna
- Lending yield
- Purpose: Diversified yield
๐ฐ Allocationโ
After deployment, your vault will have:
Total Assets: 100%
โโ 69.00% โ Charm (AKITA/USDC LP)
โโ 21.39% โ Ajna (Lending)
โโ 9.61% โ Idle (Reserves)
๐ Security Considerationsโ
Deployment Security:โ
- Deterministic Addresses - Use CREATE2 if needed
- Governance Setup - Batcher sets deployer as initial governance
- Strategy Verification - Always verify strategies before adding to vault
- Keeper Setup - Assign keeper for rebalancing
Post-Deployment:โ
# Transfer Charm governance to multisig
cast send $CHARM_VAULT "setGovernance(address)" $MULTISIG
# Accept from multisig
cast send $CHARM_VAULT "acceptGovernance()" --private-key $MULTISIG_KEY
๐ Expected Gas Costsโ
With AA (Batched):โ
Operation Gas Cost
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Deploy V3 Pool (if new) ~500k
Deploy Charm Vault ~3.5M
Deploy Charm Strategy ~1.5M
Deploy Creator Strategy ~800k
Deploy Ajna Strategy ~800k
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
TOTAL ~7.1M gas
At 1 gwei = ~$0.014
At 10 gwei = ~$0.14
Without AA (Sequential):โ
Same contracts, but 5 transactions
+ Network overhead
+ Time wasted between txs
๐ฏ Integration with Existing Vaultโ
Step 1: Deploy Strategiesโ
StrategyDeploymentBatcher batcher = new StrategyDeploymentBatcher();
DeploymentResult memory result = batcher.batchDeployStrategies(...);
Step 2: Add to Vaultโ
vault.addStrategy(result.creatorCharmStrategy, 0.69e18); // 69%
vault.addStrategy(result.ajnaStrategy, 0.2139e18); // 21.39%
Step 3: Verifyโ
uint256 charmAllocation = vault.strategies(result.creatorCharmStrategy);
uint256 ajnaAllocation = vault.strategies(result.ajnaStrategy);
assert(charmAllocation == 0.69e18);
assert(ajnaAllocation == 0.2139e18);
๐ Troubleshootingโ
"Pool already exists"โ
โ Good! Batcher will use existing pool
"Invalid sqrt price"โ
Check price calculation:
// For $0.0001/AKITA:
uint160 sqrtPriceX96 = 250541448375047931186413801569;
"Strategy not connected"โ
Batcher auto-connects. If manual deployment:
cast send $CHARM_VAULT "setStrategy(address)" $STRATEGY
"Out of gas"โ
Increase gas limit:
--gas-limit 10000000
๐ Code Examplesโ
Full AA Deployment:โ
import { SmartAccount } from '@account-abstraction/sdk'
async function deployWithAA() {
// 1. Setup AA wallet
const aaWallet = new SmartAccount(...)
// 2. Deploy batcher
const batcher = await aaWallet.deploy('StrategyDeploymentBatcher')
// 3. Batch deploy strategies
const tx = await aaWallet.executeBatch([
{
to: batcher.address,
data: batcher.interface.encodeFunctionData('batchDeployStrategies', [
AKITA_ADDRESS,
USDC_ADDRESS,
VAULT_ADDRESS,
AJNA_POOL_ADDRESS,
3000,
SQRT_PRICE
])
},
{
to: VAULT_ADDRESS,
data: vault.interface.encodeFunctionData('addStrategy', [
'0x...', // creatorCharmStrategy
ethers.parseEther('0.69')
])
},
{
to: VAULT_ADDRESS,
data: vault.interface.encodeFunctionData('addStrategy', [
'0x...', // ajnaStrategy
ethers.parseEther('0.2139')
])
}
])
await tx.wait()
console.log('All strategies deployed!')
}
โ Success Checklistโ
- Batcher deployed
- V3 pool created/found
- Charm vault deployed
- Charm strategy deployed
- Charm strategy connected to vault
- Creator Charm strategy deployed
- Ajna strategy deployed
- Strategies added to creator vault
- Allocations verified (69% + 21.39% + 9.61% = 100%)
- Governance transferred
- Keeper configured
๐ You're Ready!โ
The AA deployment system is production-ready:
โ
Single transaction deployment
โ
Gas efficient batching
โ
Tested and verified
โ
Compatible with all AA wallets
Deploy with confidence! ๐