Try to break it
Run 35 real attacks against the live contracts in one click, in three groups, and see what stops each one.
Reading that a contract refuses something is one thing. Watching it refuse is better.
The break page runs 35 real attacks against the live AdagBills and AdagGuard, simulated on Arc mainnet's current state: the demo wallet's real loan, the real bills and the real bitcoin price. Nothing is signed or sent. Press Run all 35 attacks; a run takes about a minute, because each simulation waits its turn so the node is never flooded. For each attack the page shows what was tried, what should stop it, with its rule number in the threat model, and the chain's own answer.
The footer names the block the run was pinned to and where it was simulated: on QuickNode when the site is configured with its endpoint, otherwise on dRPC's public endpoint.
What each verdict means
- Refused: the call reverted, for the reason the row names. Nothing happened.
- Held: the call went through and changed nothing it should not. For example,
protectunder the trigger repays nothing, and a stranger'ssetRulewrites only the stranger's own rule. - Allowed by design: one of the two named residuals, which go through on purpose and are named in the threat model: borrowing after Adag's step in the same batch (caught on the next payment), and recording a loan in one block and paying in the next.
- Allowed: the cash payment after a simulated 25% price drop, which adds no debt, so there is nothing to check. A price drop never blocks a cash payment.
A run passes when all 35 behave as the threat model says, and the page then reads "35/35".
The three groups
01 · Paying bills (16 attacks, A1 to A9b), against the current AdagBills and the demo wallet's real Morpho loan:
- paying a bill that is already paid;
- closing the loan and re-borrowing the same shares against less bitcoin;
- borrowing past 40% in the same batch as a payment;
- the named gap of borrowing after Adag's step;
- a supplier paying its own bill;
- writing a bill in cirBTC, WETH, a made-up token, for zero, or with an over-long reference;
- cancelling someone else's bill, or a bill that was already paid;
- paying without an allowance;
- a simulated 25% bitcoin price drop, where a cash payment still goes through and any new debt is refused.
02 · Recording an existing loan (5 attacks, E1 to E5):
- recording and paying in the same batch;
- borrowing more, recording that debt and paying with it, all at once;
- a stranger recording, hoping to change someone else's record;
- recording, then closing the loan and re-borrowing against less bitcoin;
- the named residual: borrowing outside Adag, recording in one block and paying from cash in the next, allowed by design and affecting only that payer's own position.
03 · The loan guard (14 attacks, G1 to G10), against the live AdagGuard. Every row starts from a simulated premise, labelled on the page: the demo payer borrows on Morpho until the loan sits at 38.00%, above its 35% trigger. Nothing of AdagGuard, Morpho or the oracle is overwritten for it.
- repeating
protectat the same price, which finds nothing left to repay; - pulling more than the approval, or more than the wallet holds;
- using another Morpho market, or an id one digit away from Adag's;
- calling
protectunder the trigger, or at the second the rule ends; - a stranger clearing or overwriting someone else's rule;
- a simulated crash of the price to zero, where the repayment is capped at the debt rounded down;
- calling the owner, pause, rescue or upgrade functions a drain would need, which do not exist.
The full suites, from the repository
node packages/contracts/prove-it/attack.mjs
node packages/contracts/prove-it/guard-attack.mjs
They run the same attacks and two more that point the proof script at a lying RPC, and print each one, what should stop it and the decoded revert. The latest runs against the live contracts behaved as the threat model says in every row: 23 of 23 for AdagBills and 14 of 14 for AdagGuard. The rows are on Audit status.
Audit status
Self-audited, with every result published. What was tested, what was found, what was fixed, and what is not covered.
FAQ
Straight answers about company use, Safe payments, bitcoin price drops, the loan guard, recording a loan, alerts, custody, the 40% cap, wallets, costs, audits, Arc and stale prices.