← All posts

One sentence, fourteen steps, three chains

The health factor it has to hold, the fees at every hop, the places it can fail, and the three things that make this plan harder than it looks.

Strategy5 min readDeFiLoops

Most strategy write-ups show you the idea and skip the execution. The execution is where the money goes, so this one does the opposite: the idea takes two paragraphs and the rest is what actually has to happen.

The idea

You hold $1,000 in USDC on Base. You want long cbBTC exposure, you do not want to sell it to raise cash, and you want a yield-bearing real-world asset paying down the borrow so the position services itself.

In one sentence:

Take $1,000, swap half to cbBTC, supply it, borrow $500, bridge it, buy the RWA, and let its yield repay the loan every month.

Four protocols, three chains, and a monthly schedule. By hand this is roughly twenty minutes and eight signatures a month, every month, forever — which is the actual reason people stop running strategies like this, not the strategy being wrong.

The compiled plan

Fourteen steps, three chains, armed forever
  1. 01pull-1000base
    deposit.pull$1,000 USDC from wallet1 call
  2. 02swap-cbbtcbase
    swap.router500 USDC → cbBTC2 calls
  3. 03supply-cbbtcbase
    lend.supply← linked step's output2 calls
  4. 04borrow-500base
    lend.borrow500 USDC · HF 1.562 calls
  5. 05bridge-to-arbbase→arb
    bridge.cctp500 USDC · CCTPoff-chain
  6. 06swap-routearbitrum
    swap.router← linked step's output2 calls
  7. 07bridge-to-etharb→eth
    bridge.cctp500 USDC · CCTPoff-chain
  8. 08swap-usdcethereum
    swap.router← linked step's output2 calls
  9. 09bridge-backeth→base
    bridge.cctp499.50 · $0.50 feeoff-chain
  10. 10buy-rwa-49base
    property.buy49 units @ $10.102 calls
  11. 11claim-yieldbase
    rent.claim_ownmonthly yield1 call
  12. 12redeem-usdcbase
    rent.redeem← linked step's output2 calls
  13. 13repay-500base
    lend.repay500 USDC · Aave v32 calls
  14. 14send-restbase
    transfer.erc20remainder to wallet1 call
14 steps↻ every month
14
steps
3
chains
1.56
health factor
1
signature
One message covers the whole plan.

Reading it

Three things in that board are worth stopping on.

The dotted lines are transaction boundaries

Steps 2→3 and 3→4 are dotted. That is the engine saying a runtime amount cannot be carried across that point, so a new transaction starts. It is not a warning. It is the shape of the plan, stated before you approve it rather than discovered when something reverts.

”← linked step’s output” is not a placeholder

Step 3 supplies what step 2 actually received — the real fill after slippage, not the 500 USDC the plan hoped for. If the swap fills at a worse price, the supply is smaller and the borrow is sized against the smaller collateral. The health factor holds.

The bridges are the expensive part

Steps 5, 7 and 9 cross chains. Each is off-chain — value leaves, time passes, value arrives. They are the slowest steps, the ones with real fees, and the ones a runtime amount cannot cross.

The numbers

Where the money goes
Swap slippage
~0.05–0.3% on 500 USDC through an aggregation router
CCTP fee
$0.50 per crossing, flat — visible as 499.50 on step 9
Gas
Sponsored by the relayer, reimbursed from the plan in USDC
Borrow rate
Aave v3 variable, floating — the largest uncertain cost
RWA entry
49 units @ $10.10, from a $500 budget with rounding

Note what is not a cost: you never bridge gas to Arbitrum or Ethereum. The relayer sponsors those calls and is reimbursed in the asset the plan already holds. For a three-chain plan that is the difference between one signature and about six.

The same plan, at three sizes

The step count does not change with size, but what is worth doing does. Bridge fees are flat, so they dominate a small plan and vanish in a large one.

Plan sizeCCTP feesFees as %StepsWorth automating
$1,000$1.500.15%14Marginal — fees eat a month of yield
$10,000$1.500.015%14Yes
$100,000$1.500.0015%14Yes, and slippage now matters more than fees

Above roughly $10,000 the flat costs stop being the thing to optimise and swap execution becomes the thing to optimise — which is a different plan shape, with the trade split across venues rather than routed through one.

What can go wrong

  1. The swap fills badly

    The supply and borrow size down with it. The health factor is preserved because the borrow is computed from the actual collateral, not the intended collateral.

  2. cbBTC falls

    The health factor drops. At 1.56 there is meaningful room, but this is a leveraged position and it can be liquidated. The plan does not defend it — you would need a separate rule for that, and you should ask what protection costs before assuming it is worth buying.

  3. The RWA yield underpays

    Step 13 repays what step 12 redeemed. A short month leaves debt outstanding, which is fine — it accrues, and the next run repays more. Nothing breaks.

  4. A step reverts

    The plan halts there and reports the state it stopped in. Steps 11–14 simply do not run. The next scheduled run reads your balances fresh rather than assuming.

Repaying by shares, not by amount

One implementation detail that generalises well beyond this plan.

Step 13 repays 500 USDC. If you instead repay the position, repay by shares rather than by a fixed amount — a fixed amount leaves dust debt behind as interest accrues between calculation and execution, and dust debt blocks the withdrawal you were trying to make.

Before

Interest accrues between the read and the transaction. A few wei of debt survive. The subsequent withdraw reverts and the reason is not obvious.

After

The position closes cleanly regardless of how much interest accrued in between.

The same shape shows up with aTokens: withdrawing exactly what you supplied can revert by one wei, because the token rounds down. Whole-position operations should be expressed as whole-position operations.

Was it worth automating?

Twenty minutes and eight signatures a month is not a lot of work. The reason to automate it is not the twenty minutes — it is that a strategy you run by hand is a strategy you run when you remember, at a price you did not choose, and stop running the month you are busy.

The plan above runs on the first of the month whether or not you are paying attention, at a shape you approved once, and stops cleanly if anything is wrong.