Attack results
We attacked it. Nothing got through.
First, 30 payments of 0.1 USDC fired at the same moment at a 1 USDC budget: against an ordinary contract, and against Scrip. Then 1,999 recorded attacks, from fake recipients to stolen keys.
An ordinary contract paid out1.40 USDC0.40 USDC over a 1.00 USDC budget
Scrip paid out1.00 USDCexactly the 1.00 USDC budget, the rest refused
The burst, line by line
| Metric | Ordinary contractChecks the balance after paying | ScripReserves the amount before paying |
|---|---|---|
| Transactions | 30 broadcast (10073 ms) | 30 broadcast (9784 ms) |
| Budget cap | 1.00 USDC | 1.00 USDC |
| Merchant received | 1.40 USDC | 1.00 USDC |
| Budget exceeded | EXCEEDED (+0.40 USDC) | HELD (0.00 USDC over) |
| Payments completed | 14 payments | 10 payments |
| Spent (contract) | 1.40 USDC | 1.00 USDC |
| Pending reservations | 0.00 USDC (0 open) | 0.00 USDC (0 open) |
| Defense verdict | VULNERABLE (drain bypasses cap) | PRESERVED |
Attack catalog 1,999 cases, 12 categories, 5 layers
Source: results/attack-catalog.json. 1999 recorded cases; PASS, FAIL, SKIPPED and BREACH labels are shown exactly as the catalog records them.
| Category | Layer A | Layer B | Layer C | Layer D | Layer E | Total |
|---|---|---|---|---|---|---|
| 1. Recipient | PASS 75 | not run | PASS 36 | PASS 15 | PASS 24SKIPPED 11 | PASS 150SKIPPED 11 |
| 2. Amount | PASS 77 | not run | PASS 36 | PASS 15 | PASS 56SKIPPED 19 | PASS 184SKIPPED 19 |
| 3. Budget & parallel | PASS 75 | not run | not run | PASS 10 | PASS 49SKIPPED 26 | PASS 134SKIPPED 26 |
| 4. Approval & nonce | PASS 75 | not run | PASS 68 | PASS 21 | PASS 41SKIPPED 19 | PASS 205SKIPPED 19 |
| 5. Access & identity | PASS 86 | PASS 111 | not run | PASS 12 | PASS 88SKIPPED 12 | PASS 297SKIPPED 12 |
| 6. Delegate & keys | not run | not run | PASS 77 | PASS 10 | PASS 34SKIPPED 11 | PASS 121SKIPPED 11 |
| 7. Gas & resources | not run | PASS 71 | not run | PASS 26 | PASS 30SKIPPED 5 | PASS 127SKIPPED 5 |
| 8. Format & parsing | not run | PASS 60 | PASS 74 | PASS 24 | not run | PASS 158 |
| 9. Facilitator operations | not run | PASS 98 | not run | PASS 27 | not run | PASS 125 |
| 10. Mandate lifecycle | PASS 75 | not run | not run | not run | PASS 59SKIPPED 1 | PASS 134SKIPPED 1 |
| 11. Token & accounting | PASS 102 | not run | not run | not run | PASS 24SKIPPED 1 | PASS 126SKIPPED 1 |
| 12. Outside the guarantee (absurd) | PASS 62 | PASS 45 | PASS 26 | not run | not run | PASS 133 |
| All categories | PASS 627 | PASS 385 | PASS 317 | PASS 160 | PASS 405SKIPPED 105 | 1999 |
Legend: ✓ PASS · ✕ FAIL · – SKIPPED · ⚠ BREACH · – no cases
Outside the guarantee 45 cases
Scenarios outside the Scrip threat model (for example a leaked owner full-access key, a malicious token contract, or a lying RPC). Scrip does not claim to prevent these; they are recorded on purpose as stated limits.
Show all 45 out-of-scope cases (every one labelled as expected)
| ID / Category | Layer | Expected label | Actual label | Verdict |
|---|---|---|---|---|
KAT-A-12-33 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-34 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-35 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-36 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-37 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-38 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-49 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-50 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-51 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-52 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-53 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-54 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-55 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-56 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-57 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-58 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-59 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-60 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-61 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-A-12-62 12. Outside the guarantee (absurd) | A | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-136 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-137 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-138 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-139 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-140 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-141 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-142 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-143 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-144 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-B-12-145 12. Outside the guarantee (absurd) | B | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-01 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-02 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-03 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-04 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-05 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-06 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-07 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-08 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-19 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-20 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-21 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-22 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-23 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-24 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |
KAT-C2-12-25 12. Outside the guarantee (absurd) | C | OUT_OF_SCOPE | OUT_OF_SCOPE | PASS |