Methodology

BSAHI — Bitcoin Resource Accounting. How every number in this program is obtained, graded, checked, and reproduced. Version 1.0 · 2026-09-17 · Author: Prateek Poswal (Independent Researcher, ORCID 0009-0005-2139-1877)


1. Principle

A number may only be presented at the strength its evidence supports. This program therefore separates three layers and assigns every dataset a grade, and it treats a published correction as a normal output rather than a failure.

2. The three layers

LayerDefinitionHow to cite
ObservedRead from a node, or from a frozen primary capture with a recorded unit and dateAs a measurement, with its date
ReconstructedDerived by a stated procedure from anchors (interpolation, era means, attribution)As the procedure, not as a measurement
ModelledAssumptions dominate; the output is a scenarioAs a scenario, with assumptions

The authoritative classification of every published number is the Evidence Matrix. Nothing may be called Observed if it is Reconstructed or Modelled.

3. Grades

4. Instruments

InstrumentProducesLayer
tools/research/sccr_live.pySCCR daily readingObserved
tools/research/utxo_state_measure.pygettxoutsetinfo UTXO/state rowsObserved
tools/research/perblock_validation.pyper-block spot samplesObserved
tools/research/production_cost_ratio.pyproducing-side cost scenariosModelled
tools/research/verify_cost_index.pyverification-burden trendModelled
tools/research/sccr_sensitivity.pySCCR bands + CI + stress testModelled
tools/research/integrity_audit.pythe standing checks (§7)—
tools/research/datasets_manifest.pythe versioned dataset index—
research/reproduce/independent reproduction (JS/Python/C + notebook)Observed

5. Data sources

6. Units and conventions

7. Standing integrity checks

tools/research/integrity_audit.py runs on every change and exits non-zero on failure:

  1. Heights/dates — every (height, timestamp) pair is monotonic; a height's chain date is kept distinct from its capture time (they differ by years while a node is syncing).
  2. Anchor consistency — known on-chain anchors match their heights.
  3. Units — derived fields agree with raw ones (hashrate, power, GB decimal).
  4. Provenance — each dataset records schema + generated_at + a source.
  5. Layers — each research dataset is classified Observed/Reconstructed/Modelled.

8. Reproducibility

9. Corrections policy

When a value is wrong, we publish the correction with its cause and regenerate every dependent value. Precedent: a 10× time-horizon error in our own model was found, corrected, documented, and every value regenerated — the conclusion survived, and the correction is part of the record.

10. Known limitations

12. Population and observability

Bitcoin's node population cannot be counted. Every attempt measures a partial view with its own bias, so this program publishes the views and their mechanisms, not a single confident number.

The role axis first. Miners (a few dozen pools) produce blocks and receive fees; validating nodes bear the storage and validation cost and receive nothing. BSAHI's N is the validating set. The two must never be merged.

Four quantities, never conflated:

#quantitylayergrade
Agossip-observed addresses (addrman)observedC
Breachable nodes (a crawler can connect)observedB
Cnon-listening / private nodesunobservableD
Dtotal populationnot observable—

Four instruments (first-party):

instrumentmeasurescadence
verification_population.pyreachable-node composition + activity partitionon capture
seed_census.pyDNS-seed visible addresses (third view)12 h
addrman_churn.pyaddress persistence over time (staleness, measured)12 h
inbound_census.pydistinct peers that dial in (includes non-listening nodes; inbound ≠ non-listening) + their service bits1 h

The direction of the error is stated, not hidden. Non-listening nodes are excluded from the index, so the reported network-wide storage externality (L_net) is a lower bound and the reported SCCR an upper bound; the baseline is conservative. The unpublicised-node band (N = 50K/80K/100K) is published alongside every SCCR figure.

Exact requests only. getnodeaddresses 32000 was a request ceiling that truncated the set; the instruments now use getnodeaddresses 0 (all known addresses). The first exact measurement returned more addresses than the ceiling had — which is why the ceiling figure was retired.

See Measuring the verification population and the Evidence Matrix.

11. Citing

Poswal, P. (2026). Bitcoin Resource Accounting. Bitcoin Sahi. ORCID 0009-0005-2139-1877. Data and code: CC BY 4.0.

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

← All research · ← Back to Learn