INDEPENDENT CRASH TESTSTEST PROTOCOL PUBLISHED IN FULLRATINGS YOU CANNOT BUYEVERY REPORT DATED & RE-TESTEDPROTOCOLS TESTED ACROSS 12 CHAINSNEW: BRIDGE CRASH SERIES · READ NOW
Home / Test Protocol
Same crash, every protocol

The Test Protocol.

Every rating on BULWARK comes from this document. Anyone can read it, and anyone can re-run the tests it describes.

v1.0Current version4Areas5Scenarios6 monthsRating validity

Principles

Same crash

Every protocol in a class faces the same five scenarios. Results are comparable because the tests are identical.

Weakest link

Stars follow the lowest area score, not the average.

Re-runnable

Each result lists its fork block, its loss figures, and, after disclosure, its test script.

Areas and weights

40%Depositor Protection
25%Market Stress
15%Exit & Liquidity
20%Safety Assist
Depositor Protection
Exploit simulation, access control, admin key risk, contract upgrade risk
40%
Market Stress
Oracle manipulation, depeg, liquidation cascades, a 50% price drop in one hour
25%
Exit & Liquidity
A bank run: 30% of TVL withdrawn in 24 hours, speed and cost of exit
15%
Safety Assist
Audits, bug bounty, timelock, pause and circuit breaker, monitoring, incident history
20%

Weights set the overall score from 0 to 100. Scenario results convert to points: Held is 100%, Degraded 50%, Failed 0% of that sub-criterion.

Rubric

Depositor Protection · 100 points
Sub-criterionPointsFullHalfZero
Frontal Drain scenario30HeldDegradedFailed
Pole Test scenario20HeldDegradedFailed
Admin control (multisig)15Multisig of 3/5 or more with independent signersMultisig 2/3Single key (EOA)
Upgrade timelock1548 hours or more24 to 48 hoursUnder 24 hours, or none
Upgrade scope10Immutable, or upgrades cannot touch fundsUpgradeable with limitsFully upgradeable
Fund isolation10Funds isolated per pool or vaultPartly isolatedOne contract holds all funds
Market Stress · 100 points
Sub-criterionPointsFullHalfZero
Side Impact scenario30HeldDegradedFailed
Rollover scenario30HeldDegradedFailed
Oracle design20Multi-source, TWAP and stale-data checksOne trusted source with stale-data checksSpot price from one pool
Risk parameters20Supply and borrow caps, conservative LTV and documented MEV protectionSome in placeNo limits
Exit & Liquidity · 100 points
Sub-criterionPointsFullHalfZero
Rear Impact scenario40HeldDegradedFailed
Normal withdrawal time20Instant or one blockUp to 7 daysOver 7 days
Exit cost under stress20Slippage under 1%1 to 5%Over 5%
Queue and lock transparency20Queue rules on-chain and documentedDocumented onlyUnclear
Safety Assist · 100 points
Sub-criterionPointsFullHalfZero
Audit25Two or more firms, under 12 months old, all critical and high findings fixedOne firm, or older than 12 monthsNo audit
Bug bounty15Maximum payout of 250,000 USD or 1% of TVL, or moreExists, below that thresholdNone
Pause or circuit breaker15In place, held by a multisig, testedIn place, held by a single keyNone
Monitoring and incident response15Real-time monitoring and a public incident procedureOne of the twoNone
Incident history, 24 months20No loss of fundsLosses fully repaid to usersLosses not repaid
Transparency10Verified code, full docs, known teamPartlyUnverified code

Sub-criteria that don't apply to a class (LTV for a DEX, for example) are replaced with an equivalent, and the replacement is written into the Crash Report.

Star rule

All four areas must reach the minimum for a star level.

80% in every areaComprehensive protection, the benchmark for its class
70% in every areaStrong protection
60% in every areaAdequate protection with clear weaknesses
40% in every areaMinimal protection
20% in every areaVery little protection
0< 20%Did not pass
function computeStars(r) { const min = Math.min(...Object.values(r.areas)); let stars = min >= 80 ? 5 : min >= 70 ? 4 : min >= 60 ? 3 : min >= 40 ? 2 : min >= 20 ? 1 : 0; if (r.criticalFailure) stars = Math.min(stars, 1); return stars; // computed, never entered by hand }

Critical failure

If Frontal Drain or Pole Test drains funds in simulation, the rating is capped at one star, whatever the other scores. The report shows a critical failure banner above the area scores.

Validity and re-tests

A rating is valid for six months. After that its status turns Expired and the stars show in grey until the protocol is re-tested.

Contract upgradeAny upgrade to a tested contract.
New chainA deployment to a chain not covered by the report.
IncidentAn exploit, depeg or loss flagged by the Incident Desk.

Disclosure

Every scenario runs on a mainnet fork (Foundry, Anvil or Tenderly) at a block recorded in the report. No test transactions touch mainnet, and TVL is measured at the fork block.

When a test finds a critical issue, the protocol gets 14 days to fix it. Test scripts are published after that window.

Independence

The lab accepts no payment from any protocol it tests. Holding the token gives access to reports and data, and has no effect on any rating. The analyst who prepares a test cannot sign it.

The approach is inspired by European vehicle safety testing. BULWARK is not affiliated with any vehicle safety program.

Changelog

VersionDateChange
v1.002.11.26First version: four areas, five scenarios, weakest-link star rule.