# Statistics
We plan to collect per-milestone information to provide statistics about the Tangle and the ledger state. Ideally, these statistics can also be aggregated in predefined time intervals such as _1 hour_, _24 hours_, _7 days_, and so on.
We are currently looking into implementing the following statistics -- for some we still might have to figure out how to compute them efficiently.
## Tangle statistics
Gathering tangle-based statistics is straightforward, we simply observe what happens in a single milestone. These statistics are also easy to deal with because to aggregate them into time intervals the per-milestone values can simply be summed together.
* [ ] `stardust_payload_activity` - Statistics about the payloads
* [ ] `transaction_count` - Number of transaction payloads in a milestone
* [ ] `tagged_data_count` - Number of tagged data payloads in a milestone
* [ ] `milestone_count` - Number of milestone payloads in a milestone
* [ ] `treasury_transaction_count` - Number of treasury transaction in a milestone
* [ ] `stardust_transaction_activity` - Statistics about transactions
* [ ] `conflicting_count` - Number of conflicting transactions in a milestone
* [ ] `confirmed_count` - Number of confirmed transactions in a milestone
## Protocol parameters
The following statistics simply record the protocol parameters for the current ledger index and _should only be recorded if changed_. We collect these changes to protocol parameters to facilitate analysis like: _"How did the recent changes to the rent structure influence the size of the ledger?"_
* [ ] `stardust_info` (only recorded when changed)
* [ ] `token_supply`
* [ ] `treasury_tokens`
* [ ] `stardust_protocol_parameters` - Protocol parameters (only recorded when changed)
* [ ] `min_pow_score`
* [ ] `below_max_depth`
* [ ] `v_byte_cost`
* [ ] `v_factor_data`
* [ ] `v_factor_key`
If we don't store the parameters together with the time series, the teams would have to get this data from secondary sources, greatly increasing the complexity.
## Ledger statistics
* [ ] `stardust_ledger_outputs` - Shows the distribution of current unspent outputs of the ledger
* [ ] `total_alias_count` - The current number of unspent Alias outputs in the ledger
* [ ] `total_alias_value` - The current number of tokens held by unspent Alias outputs in the ledger
* [ ] `total_basic_count` - The current number of unspent Basic outputs in the ledger
* [ ] `total_basic_value` - The current number of tokens held by unspent Basic outputs in the ledger
* [ ] `total_foundry_count` - The current number of unspent Foundry outputs in the ledger
* [ ] `total_foundry_value` - The current number of tokens held by unspent Foundry outputs in the ledger
* [ ] `total_nft_count` - The current number of unspent Nft outputs in the ledger
* [ ] `total_nft_value` - The current number of tokens held by unspent Nft outputs in the ledger
* [ ] `total_treasury_count` - The current number of unspent Treasury outputs in the ledger
* [ ] `total_treasury_value` - The current number of tokens held by unspent Treasury outputs in the ledger
* [ ] `stardust_claiming_rewards` - Shows information about the claiming rewards
* [ ] `total_claimed_value` - The total number of tokens that have been claimed since genesis.
* [ ] `total_claimed_count` - The total number outputs that have been claimed since genesis.
* [ ] `stardust_alias_activity`
* [ ] `created_count` - The number of Aliases that have been created in the current milestone.
* [ ] `governor_changed_count` - The number Aliases where the governor changed in the current milestone.
* [ ] `state_changed_count` - The number Aliases where the state changed in the current milestone.
* [ ] `destroyed_count` - The number of Aliases that have been destroyed in the current milestone.
* [ ] `stardust_nft_activity`
* [ ] `created_count` - The number of NFTs that have been created (minted) in the current milestone.
* [ ] `transferred_count` - The number NFTs that have been transferred in the current milestone.
* [ ] `destroyed_count` - The number of NFTs that have been destroyed (burned) in the current milestone.
* [ ] `stardust_foundry_activity`
* [ ] `created_count` - The number of Foundries that have been created (minted) in the current milestone.
* [ ] `transferred_count` - The number Foundries that have been transferred in the current milestone.
* [ ] `destroyed_count` - The number of Founrdies that have been destroyed (burned) in the current milestone.
* [ ] `stardust_ledger_size`
* [ ] `total_data_bytes` - The number of data bytes in the ledger
* [ ] `total_key_bytes` - The number of key bytes in the ledger
* [ ] `total_storage_deposit_value` - The current value (_byte cost_) of all storage deposits.
* [ ] `stardust_base_token_activity`
* [ ] `transferred_value` - The number of tokens that has been transferred in the current milestone.
* [ ] `stardust_address_activity`
* [ ] `sending_count` - The number of addresses that have sent funds in the current milestone.
* [ ] `receiving_count` - The number of addresses that have received funds in the current milestone.
* [ ] `total_count` - The number of addresses that have either sent or received funds. :warning: Note that this is not necessarily equal to `sending_count` + `receiving_count` (consider an address that sends to itself).
* [ ] `stardust_address`
* [ ] `address_with_balance_count` - The number of addresses that hold a balance.
* [ ] `stardust_unlock_conditions` - Information about unlock conditions (check for timestamp where appropriate)
* [ ] `total_timelock_count` - The total number of timelocked outputs in the current ledger state
* [ ] `total_timelock_value` - The total amount of tokens that are timelocked in the current ledger state
* [ ] `total_expiration_count` - The total number of timelocked outputs in the current ledger state
* [ ] `total_expiration_value` - The total amount of tokens that are timelocked in the current ledger state
* [ ] `total_storage_deposit_return_count` - The total number of SDRUCs in the current ledger state
* [ ] `total_storage_deposit_return_value` - The total amount of SDRUCS in the current ledger state
# Implementation
This data will be exposed via a read-only InfluxDB instance and can therefore easily be exposed to Grafana.
## What happens to existing APIs?
This new time series database would deprecate most of the current Analytics API. The only thing that we plan on keeping are the `/ledger/richest-addresses` and `ledger/token-distribution` endpoints, which will most likely be moved to the Explorer API though.