A scenario is a calculation protocols really run (daily interest, a loan, a bonding curve) repeated N times in each library's own number format. Each result is compared with the same loop in 300-digit arithmetic, and the score is how many digits are still correct. After 10,000 days of daily compounding, BL19 keeps 67.4 digits, BL127 34.8 and Solady 14.8.
| Floating point | Fixed point | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| scenario · median digits | BL19 | Quad | BL127 | 64.64 | Solady | Solmate | PRB SD | PRB UD | snek | Balancer | OZ | Uniswap | Maker | Aave | Morpho | Frax | Euler |
| Daily compound interest | 67.4 | 29.9 | 34.8 | 15.6 | 14.8 | 14.8 | 14.8 | 14.8 | 14.8 | 14.8 | 14.8 | 14.8 | 23.3 | — | — | — | — |
| Compound interest in one pow | 67.4 | 30.4 | 34.8 | 15.2 | 14.2 | 14.2 | 13.0 | 13.0 | 14.2 | 15.2 | — | — | — | — | — | — | — |
| Square-root bonding curve | 70.2 | 30.4 | 40.6 | 21.3 | 20.1 | 20.1 | 20.1 | 20.1 | 20.1 | 18.1 | 20.1 | — | — | — | — | — | — |
| exp(ln(x)) round trip | 71.3 | 28.9 | 38.8 | 15.0 | 14.1 | 14.1 | 12.9 | 12.9 | 14.1 | 14.0 | — | — | — | — | — | — | — |
| Amortising loan | 64.6 | 25.7 | 31.2 | 12.0 | 11.9 | 11.9 | 11.9 | 11.9 | 11.9 | 11.9 | 11.9 | 11.9 | — | — | — | — | — |
| Running geometric mean | 71.3 | 33.1 | 38.5 | 18.9 | 17.6 | 17.6 | 16.9 | 16.9 | 17.6 | 17.6 | — | — | — | — | — | — | — |
| Black-Scholes d1 along a price path | 68.0 | 30.1 | 37.0 | 18.2 | 17.3 | 17.3 | 16.8 | 16.8 | 17.3 | 17.7 | — | — | — | — | — | — | — |
| Cumulative product of small factors | 69.0 | 29.9 | 34.8 | 15.5 | 14.2 | 14.2 | 14.2 | 14.2 | 14.2 | 14.2 | 14.2 | 14.2 | — | — | — | — | — |
| Annual compounding at 10% for 10,000 years | 67.4 | 29.7 | 35.6 | 16.8 | 21.3 | 21.3 | 21.3 | 21.3 | 21.3 | 21.3 | 21.3 | 21.3 | 27.4 | — | — | — | — |
| Per-second accrual | 71.2 | 24.8 | 29.8 | 10.1 | 9.0 | 9.0 | 8.0 | 8.0 | 9.0 | 9.4 | — | — | 18.3 | — | — | — | — |
| Continuous accrual | 71.2 | 33.2 | 37.2 | 18.1 | 18.0 | 18.0 | 17.7 | 17.7 | 18.0 | 17.9 | — | — | — | 1.2 | 1.2 | — | — |
| An option walking out of the money | 66.2 | 28.0 | 25.2 | 6.6 | 4.5 | 4.5 | 4.5 | — | 4.5 | 4.5 | — | — | — | — | — | — | — |
| Decay, the share released | 59.9 | 22.2 | 26.7 | 7.5 | 7.2 | 7.2 | 5.9 | — | 7.2 | 7.2 | — | — | — | — | — | — | — |
| An adaptive rate after an idle period | 71.3 | 33.8 | 29.6 | 10.5 | 9.2 | 9.2 | 9.2 | 9.2 | 9.2 | 9.2 | — | — | — | — | — | 1.2 | 2.4 |
Median correct digits at N = 10,000 over each scenario's inputs, each capped at what the library's format holds at that size (BL19 71.3, binary128 34.0, a fixed-point library its last place). A dash means the library has no model for the scenario or reverted on every input. Per-second accrual is BL127's lowest score because a per-second rate rounded to 2−128 holds about 29 digits; against the rate as stored, BL127 keeps 40. BL127Lib returns the same words as BL127, so it is not shown. Hover a cell for detail; the ladder has every N from 1.
BL127's and BL19's deployed contracts checked live on Sepolia: 1,913 results at block 12,017,732, 0 mismatches. The other libraries' results reproduce locally with make ladder. 2026-10-29, runner 0x7683126a…. Re-run: uv run scripts/ladder/livecap.py
Step by step
Each of the 14 scenarios from N = 1 to 10,000, input by input.
edgesWhere formats break
139 single calls at the ends of each library's range: where results go to zero or revert.
per opGas and precision per op
Every op against every library that offers it.
wadTo the last wei
BlockulatorWad and every library's WAD functions on the same inputs: how often each is a wei off.
deployedAave and Morpho live
The deployed markets against the formula each says it computes.
normal cdfEvery on-chain Φ(x)
The normal CDF and erfc of each library that has one, at the same exact points, with the gas of a call.
incidentsFive exploits, replayed
Real attacks rerun from their own transactions, and what would have stopped each one.