Skip to content

Total issuance and burn accounting are broken #2274

@bdmason

Description

@bdmason

Calculations

total_issuance = subnet_alpha_out + subnet_alpha_in + subnet_alpha_in_provided

burn = subnet_alpha_out - SUM(total_hotkey_alpha) (taking only the total hotkey alpha entries where netuid matches the subnet).

Problem

Burning happens on chain in 2 ways:

  1. The burn extrinsic: reducing a coldkey's stake without reducing subnet_alpha_out.
  2. Incentive distribution: increasing subnet_alpha_out as normal in run_coinbase.rs but not giving the alpha to the keys owned by the subnet.

There was a 3rd way, in the chain's subsidy mechanism, but that was a small amount and was implemented by accident as it should have been recycling instead, so should probably be ignored.

In both scenarios a diff is increased between the accounting storage of owned alpha on a subnet (subnet_alpha_out), and stake owned by accounts (the sum of total_hotkey_alpha where the netuid matches the subnet). This diff is issued but inaccessible alpha, known as burned alpha.

subnet_alpha_out has been updated incorrectly since dtao launch, leading to the chain not knowing what the correct issuance is on subnets, and not being able to derive the correct burn amount on a subnet.

Evidence

Query the storage on block 6874108 (any block will give similar results, this is just one I picked). 6 subnets have greater total_hotkey_alpha than subnet_alpha_out. 6 subnets have a negative burn, and root accounting is off by ~562k TAO.

  {
    "netuid": 0,
    "diff": "-561931452490774"
  },
  {
    "netuid": 17,
    "diff": "-5409469998121"
  },
  {
    "netuid": 32,
    "diff": "-3529669489799"
  },
  {
    "netuid": 55,
    "diff": "-2585186709697"
  },
  {
    "netuid": 53,
    "diff": "-312311125448"
  },
  {
    "netuid": 20,
    "diff": "-216796023194"
  },
  {
    "netuid": 2,
    "diff": "-180977417688"
  },

If you query block 4929350, which is roughly a day after dtao launch, the diff is negative for every single subnet.

Impact

  • In the distant future, the alpha halvenings will happen at the wrong time.
  • In the even further distant future the max supply of 21m tokens will not be respected.
  • Right now nobody knows the correct amount of alpha burned without manually indexing the chain through the various burning mechanisms that have been implemented.

I believe we have the correct burn totals at Taostats, but it's a very complex indexer so there could be errors I haven't spotted.

Taking subnet 17 as an example, taostats (~67k) & taomarketcap (~71k) have a similar burn amounts (less than 5% difference), tao.app shows 0, the chain shows -5409 alpha burned.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions