Skip to main content

REQUIRED APPROVALS CHECKLIST

🎯 QUICK ANSWER:

What You (Protocol Owner) Must Do:

// CRITICAL - Do this after deploying CCALaunchStrategy:
CCALaunchStrategy(ccaAddress).setApprovedLauncher(
VAULT_ACTIVATION_BATCHER_ADDRESS,
true
);

That's it! Only 1 critical approval needed.


📋 FULL CHECKLIST:

1. Deploy Contracts:

# Deploy these once:
forge create StrategyDeploymentBatcher
forge create VaultActivationBatcher
forge create CCALaunchStrategy

2. CRITICAL APPROVAL:

// From your multisig (0x7d429eCbdcE5ff516D6e0a93299cbBa97203f2d3):
ccaStrategy.setApprovedLauncher(vaultActivationBatcherAddress, true);

3. Users Approve Their Tokens:

// Each user does this before deploying:
creatorToken.approve(strategyDeploymentBatcherAddress, MAX_UINT);

🔐 COINBASE SMART WALLET (Optional):

If using Coinbase Smart Wallet features:

Session Keys (Optional):

  • Allow batch transactions without signing each time
  • Set expiry (e.g., 24 hours)

Paymaster (Optional):

  • Enable gasless transactions for users
  • Set spending limits per contract

Contract Whitelist (Optional):

  • Add StrategyDeploymentBatcher
  • Add VaultActivationBatcher

None of these are REQUIRED, just nice-to-have for better UX.


⚠️ WHAT HAPPENS IF YOU FORGET:

If you forget setApprovedLauncher():

User calls batchActivate()

VaultActivationBatcher calls cca.launchAuctionSimple()

Modifier checks: onlyApprovedOrOwner

Batcher is not approved ❌

TRANSACTION REVERTS ❌

If user forgets token approval:

User calls batchDeployStrategies()

Batcher tries transferFrom(user, batcher, amount)

User hasn't approved tokens ❌

TRANSACTION REVERTS ❌

FINAL CHECKLIST:

Before Launch:

  • Deploy StrategyDeploymentBatcher
  • Deploy VaultActivationBatcher
  • Deploy CCALaunchStrategy
  • Call setApprovedLauncher() ⚠️ CRITICAL!

Per User:

  • User approves CREATOR token to batcher
  • User calls batchDeployStrategies()

That's all that's REQUIRED!

Everything else (session keys, paymaster, whitelisting) is optional UX improvements.


🚀 DEPLOYMENT SCRIPT:

// 1. Deploy (one time)
const batcher = await deploy("StrategyDeploymentBatcher");
const activationBatcher = await deploy("VaultActivationBatcher");
const cca = await deploy("CCALaunchStrategy");

// 2. CRITICAL APPROVAL (one time)
await cca.setApprovedLauncher(activationBatcher.address, true);
console.log("✅ Batcher approved!");

// 3. User approves (per user)
await creatorToken.connect(user).approve(batcher.address, MAX);
console.log("✅ User approved!");

// 4. User deploys (per user)
await batcher.connect(user).batchDeployStrategies(...);
console.log("✅ Deployed!");

Done! 🎉