STATUS (STatistical Analysis Tool for Utxo Set) is an open source tool that provides an easy way to access, decode and analyze data from the Bitcoin's utxo set
. The accompanying working paper further explains its design, application, and presents results of a recently performed analysis: https://eprint.iacr.org/2017/1095.pdf
STATUS is coded in Python 2 and works for both the existing versions of Bitcoin Core's utxo set
, that is, the first defined format (versions 0.8 - 0.14) and the recently defined one (version 0.15).
STATUS works, from now on, with 0.15 format. For 0.8-0.14 version refer to ldb_0.14
branch.
STATUS reads from a LevelDB folder (usually located under .bitcoin/chainstate
) and parses all the utxo
entries into a json
file. From the parsed file, STATUS allows you to perform two type of analysis, a utxo
based one, and a transaction
based one, by decoding all the parsed information from the chainstate.
This analysis provides, for every parsed utxo
, the decoding of the stored data, that is: transaction id
and index
that uniquely identifies the utxo
, the value
of the output in Satoshi, the block height
in which the transaction was included, whether the output is coinbase
or not, the scriptPubKey
that locks the output, the script type
, and depending on the database version, the transaction version
.
In addition, this analysis also provides, for every single entry, the script length
, the fee rate at which the utxo
becomes dust
, and the fee rate at which the utxo
becomes non-profitable
.
STATUS allows you to run analysis against non-standard utxos
only by running the analysis with non_std_only
flag set.
Transaction based analysis aggregates data from different utxo
that were created by the same transaction
, providing the following information about it:
The number of unspent outputs
, the total value
and the total length
of those outputs as represented in the utxo set
, the block height
in which the transaction was created, whether the transaction is coinbase
or not and again, the transaction version
(depending on the database version).
With th generated raw data, and using numpy
and matplotlib
Python's libraries, STATUS allows you to run several statistical analyses, such as general data overview (containing the total number of transactions
and utxos
, and the average, median, and standard deviation of utxo
per transaction, size per transactions, and size per utxos
), and different plots for all the parsed data, including the dust
and non-profitable utxos
.