FAQ

Short answers to the questions users, integrators, and security-conscious readers usually ask first.

What is DCA Onchain?

DCA Onchain is a self-custodial protocol for automated dollar-cost averaging on Base. You deposit USDC into your own strategy account, and scheduled automation periodically buys your chosen asset.

Where does my money go?

Your USDC goes to a UserStrategyAccount created for your strategy. If Aave yield is enabled, idle USDC is supplied to Aave through a per-account yield adapter. Bought assets are forwarded to your destination wallet or held as pending withdrawals if delivery fails.

Can the operator withdraw my funds?

No. The owner Safe can configure protocol settings and pause execution, but it cannot call withdraw() on your strategy account. Only the strategy owner can withdraw.

Can the executor steal funds?

The executor can only call executeBatch. Each strategy account enforces timing, exact amount, nonce use, and target-asset match. The executor cannot withdraw, over-pull, change settings, or lower the oracle floor.

Who runs the automation?

On current Base mainnet deployment, a GitHub Actions bot wallet runs the cron executor as an interim solution. The executor role is a plain address, so the owner Safe can switch to another keeper later with one setExecutor transaction.

What happens if automation is down?

Scheduled buys can be delayed. Your funds remain in your strategy account or Aave adapter and remain withdrawable. Automation downtime is a liveness risk, not a custody transfer.

What assets can I accumulate?

On Base mainnet: WETH, wstETH, cbBTC, and cbETH. All four currently route through Uniswap V3. The Aerodrome adapter is deployed but unused.

Can I change my amount, asset, frequency, or destination later?

No. Strategy parameters are immutable after creation. To change them, withdraw and create a new strategy.

Can I withdraw anytime?

Yes. withdraw() is available to the strategy owner regardless of factory or executor pause state. It is a full exit and permanently closes the strategy.

Why does creating a strategy require multiple transactions?

The frontend first creates the account so it knows the account address. Then you approve USDC to that account. Then you deposit USDC into it. This keeps custody with the strategy account, not the factory.

What fees does the protocol charge?

The default execution fee is 15 bps, or 0.15%, of swap output. The yield fee is 15% of positive Aave yield. The referrer share is 30% of the execution fee, not an extra user fee. Fees have hard on-chain caps.

How was the protocol reviewed?

The contracts were reviewed before mainnet launch, and issues found during that process were resolved in source and covered by regression tests. The security page explains the current user-facing controls and limits.

What happens if a swap price is bad?

The executor submits a quote-based minimum output, and the on-chain oracle computes its own independent floor. The swap must satisfy the stricter of the two. If it cannot, the batch reverts and no trade happens.

What happens if my destination wallet cannot receive the token?

The strategy records the output as a pending withdrawal. You can claim it later with withdrawPending(asset).

Does pause lock user funds?

No. Pausing can block new strategy creation or batch execution, but user withdrawal remains available.

Is the protocol upgradeable?

The MVP contracts are immutable. There is no proxy upgrade path for core contracts. Fixing a core bug would require migration to new contracts, not silently upgrading the existing ones.

Where can developers start?

Start with Architecture, then Contracts, then Price oracle. The live Base addresses are in Deployed contracts and contracts/deployments/base-mainnet.json.