SCCR sensitivity, confidence intervals, and a stress test

BSAHI — SCCR hardening (P2) Refreshed: 2026-09-17 · Instrument: tools/research/sccr_sensitivity.py

Headline

The current reading is SCCR ≤ 0.3196 — an upper bound, for the reason below (2026-10-08, 150 blocks, N=26,586, T=10, C=$925). Across the assumption grid the index spans 0.030 – 3.565 (median 0.356), and stays below 1.0 in 22 of 27 combinations (81.5%) — it crosses only at the corner most favourable to coverage (high N, long T, high C).

The node count N dominates the uncertainty (10.0× across the tested range), so the honest statement is "SCCR is below 1× across essentially all plausible assumptions, dominated by uncertainty in N".

Why the sensitivity is exact, not simulated

The SCCR is analytic in its assumptions:

R_blocks = 365.25 × 24 × 6               (blocks/year)
L_net    = N × T × C / R_blocks           (USD/block)
SCCR     = fee_USD_per_block / L_net

So SCCR is inverse-linear in N, T and C, and linear in the fee. The bands are exact for the stated ranges; no Monte-Carlo approximation is needed for the grid. (A bootstrap is used only for the distribution CI below, where it is the right tool.)

1. Assumption grid (N × T × C)

N (nodes)T (yr)C (USD)L_net (USD/block)SCCRvs 1×
10,0005$5004753.565above
10,0005$9258791.927above
10,0005$1,5001,4261.188above
10,00010$5009511.782above
10,00010$9251,7590.963below
10,00010$1,5002,8520.594below
10,00020$5001,9010.891below
10,00020$9253,5170.482below
10,00020$1,5005,7040.297below
26,5865$5001,2641.341above
26,5865$9252,3380.725below
26,5865$1,5003,7910.447below
26,58610$5002,5270.670below
26,58610$9254,6760.362below
26,58610$1,5007,5820.224below
26,58620$5005,0550.335below
26,58620$9259,3510.181below
26,58620$1,50015,1640.112below
100,0005$5004,7530.356below
100,0005$9258,7930.193below
100,0005$1,50014,2600.119below
100,00010$5009,5060.178below
100,00010$92517,5870.096below
100,00010$1,50028,5190.059below
100,00020$50019,0130.089below
100,00020$92535,1740.048below
100,00020$1,50057,0390.030below

2. Distribution and confidence interval

From the frozen reproduction capture — 155 real blocks (not a model):

statisticvalue
mean0.2896
median0.2326
IQR0.1394 – 0.3555
P5–P950.0827 – 0.7019
min–max0.0590 – 1.2948
bootstrap 95% CI for the mean0.2565 – 0.3259

3. Stress test — which assumption dominates

assumptionrange testedSCCR at lowSCCR at highspread
N10,000–100,0000.96340.096310.0×
T5–200.72480.18124.0×
C500–1,5000.67040.22353.0×

Verdict: SCCR is below 1.0 in 22/27 combinations; it crosses only at the most favourable-for-coverage corner (high N, long T, high C).

Reproduction (copy-paste)

# the full sensitivity + CI + stress test, deterministic
python3 tools/research/sccr_sensitivity.py
# the per-block reproduction that feeds the distribution (JS = Python = C)
bash research/reproduce/cross_check.sh

The script reads data/sccr.json (the dated reading) and the frozen kit output, so both the grid and the CI are reproducible from the repository alone.

Unpublicised-node sensitivity (baseline = strict floor)

Baseline N = 26,586 is Grade B (measured reachable). Unpublicised nodes are Grade D and excluded from the index; they are shown here as an explicit band. Excluding them makes L_net a lower bound and the SCCR an upper bound — the baseline is conservative.

NlayerL_net (USD/block)SCCRfee coverageexternality vs baseline
---:------:---:---:---:
26,586B$4,6760.362436.2%1.00×
32,000C$5,6280.301130.1%1.20×
50,000D$8,7930.192719.3%1.88×
80,000D$14,0700.120412.0%3.01×
100,000D$17,5870.09639.6%3.76×
150,000D$26,3800.06426.4%5.64×
200,000D$35,1740.04824.8%7.52×
265,860D$46,7560.03623.6%10.00×

What the baseline means. N = 26,586 is the observed reachable population. Because SCCR = fees ÷ (N × cost), any additional cost-bearing node (private, NAT'd, Tor-hidden) enlarges the denominator and lowers SCCR. The measured floor is therefore an upper bound — SCCR ≤ 0.3624 — and the externality is a lower bound. This holds unconditionally: it requires only that non-listening nodes bear some positive cost, not that they match the per-node cost model.

Population scenarios — a band, not a measured total

The figures below are scenarios, and they are deliberately not presented as an established interval. ~265,860 is not a measured Bitcoin node count: it applies a historical 9:1 private-to-public topology assumption to today's observed reachable population.

PopulationEvidence statusRoleWhat would move it
---:---------
26,586Grade B — observed reachable (crawler)Primary measured scenarioa larger independent crawl, or the first-party inbound measurement
32,000Grade C — deprecated addrman address sampleHistorical correctionretired — addresses, not nodes
50,000Grade D — modelledSensitivity scenarioan independent reachable-node estimate
80,000Grade D — modelledSensitivity scenarioan independent reachable-node estimate
100,000Grade D — modelledSensitivity scenarioan independent reachable-node estimate
150,000Grade D — scenario (private:public ≈ 4.6:1)Sensitivity scenariothe R = P·(i/o − 1) estimator
200,000Grade D — scenario (private:public ≈ 6.5:1)Sensitivity scenariothe R = P·(i/o − 1) estimator
265,860Grade D — 2019-derived 9:1 assumptionSensitivity scenario, not a measurementre-measure the private:public ratio; the estimator's i-test below
The ~265,860 scenario is not a measured node count. It applies a historical (2019) 9:1 private-to-public topology assumption to today's observed reachable population. BSAHI does not treat it as the current total-node count, and it does not revise the primary N. Erlay's "private" is defined by connectivity (no inbound), which approximates — but is not identical to — this project's unobservable quantity C.

Literature source. Erlay: Efficient Transaction Relay for Bitcoin (Naumenko, Maxwell, Wuille, Fedorova, Beschastnikh; CCS'19 / arXiv:1905.10518) reports private:public ≈ 9:1 for the network at the time (6,000 public + 54,000 private). It is a topology parameter from a simulation, not a census. Note the public set has since grown from ~6,000 to 26,586 — assuming private grew proportionally is unjustified, so if anything the ratio has likely compressed.

The open research question (and how to close it)

Can BSAHI empirically estimate the ratio between independently reachable/listening nodes and non-listening/private nodes — and does the historical 9:1 assumption still hold in 2026?

The evidence ladder, with the rung that promotes each level:

RungEstimateGradeHow it is promoted
1Observed reachable N = 26,586B— (measured)
2Historical prior (9:1)Dcite only; never the headline
3Estimator R = P·(i/o − 1) from a reachable nodeB–Cmeasure a typical node's inbound count i
4Cross-validated (crawler + addrman + inbound agree)Aindependent agreement

The estimator yields a falsifiable prediction: Erlay's 9:1 is algebraically equivalent to a typical listening node holding i ≈ 80 inbound connections (R/P = i/o − 1 with o = 8). Measuring i either corroborates the 2019 ratio on 2026 data or shows the network has become far more listening-heavy (i ≈ 20–40 ⇒ ratio 1.5:1–4:1). See research/private-population-estimator.md.

The baseline infrastructure size (N = 26586) is a strict empirical floor. Because non-listening, private and Tor-hidden validating nodes cannot be audited with Grade B certainty, they are excluded from the primary index. However, because every hidden node independently bears the replication and validation burden, their exclusion means the true network-wide storage externality (L_net) is higher — and the localized fee coverage (SCCR) lower — than reported. The baseline is therefore conservative.

What this does and does not claim

Data source: data/sccr_sensitivity.json — deterministic, frozen-input instrument; re-runnable offline.

← All research · ← Back to Learn