Safety
Safety
Ditto only proposes moves you can undo, built from fresh standard calls, with every amount checked before and after.
Decode, don't replay
A stranger's transaction is evidence of which contract real people used. Ditto never re-sends their calldata; it builds a fresh standard call for your wallet.
Exit before entry
Before any plan is signed, the whole round trip (deposit, then take it all out) is simulated at the current block. If getting out fails, Ditto refuses.
Verified deployers only
Anyone can be explained; only contracts from known factories and registries (Aave, Compound, Moonwell, Morpho, Euler, Spark, Fluid, Lido, Uniswap, Aerodrome) can be executed.
Exact permissions
Approvals are set to exactly the amount, never unlimited, and must read 0 after the deposit. Leftover permissions get a one-step reset.
Your wallet, bound
Exits start with a 0-value transaction from your wallet to itself, so a different wallet can never be paid out. Every proof checks who signed.
Signed plans
Ditto signs each plan it checked. An edited amount, contract or wallet is refused. Plans expire after 30 minutes.
What Ditto never does
Borrow, leverage, bridge, unlimited approvals, approvals to anything but the recipe's own contract, transactions on contracts outside its recipes, re-sending a stranger's calldata, or more than one transaction per approval.
Exit classes
| Family | Getting out | You must accept |
|---|---|---|
| Lending (Aave, Compound, Moonwell), savings vaults | Instant; simulated now at every step and in every proof | — |
| Lido staking | A withdrawal queue (usually days) or a market sale | queued |
| Liquidity pools | A mix of both tokens that changes with the price | market |