# Kusama: Fixing The Total Issuance TLDR: A historic bug caused the Total Issuance tracking to deviate from the actual Issuance. I propose a [whitelisted call](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.ibp.network%2Fkusama#/extrinsics/decode/0x0409010bc197e4aa3b33) to re-align them. The underlying issue has already been resolved. There was an [issue discovered](https://github.com/polkadot-fellows/runtimes/issues/147) on Kusama that the sum of all accounts' balances does not match the Total Issuance stored in `pallet-balances`. This is a serious issue, since third parties rely on its accuracy for tracking the total amount of existing tokens. The underlying problem was fixed by [#1222](https://github.com/paritytech/polkadot-sdk/pull/1222) and [#3707](https://github.com/paritytech/polkadot-sdk/pull/3707). The TI has not drifted further, but the same problem is present on Polkadot. ## The Difference First, it is necessary to measure the exact drift between the expected and the actual Total Issuance. This can be done by querying a node at a fixed block height. Two things have to be queried: all account entries and the TI variable from the balances pallet. Conveniently, [this script](https://github.com/ggwpez/substrate-scripts/blob/master/check-ti-complete.py) does both. The exact numbers were determined by running these commands against a Kusama archive RPC: ```bash python3 check-ti-complete.py --url <RPC> block --trace 24407008 python3 check-ti-complete.py --url <RPC> block --trace 23780225 ``` :::spoiler ```bash git clone https://github.com/ggwpez/substrate-scripts # Setup local Python env python3 -m venv venv venv/bin/pip install substrate-interface venv/bin/python3 check-ti-complete.py --url wss://rpc.ibp.network/kusama block 23780225 --trace ``` ::: Console output from both commands: ```pre [24407008] The TotalIssuance is larger than the sum of all accounts TI. TI: 15,311,516.288236268 KSM, Sum: 15,311,459.956873074 KSM [24407008] TI must be decreased by 15311516288236268206 - 15311459956873073389 = 56331363194817 (56.331363194817 KSM) [23780225] The TotalIssuance is larger than the sum of all accounts TI. TI: 15,131,305.14570446 KSM, Sum: 15,131,248.814341264 KSM [23780225] TI must be decreased by 15131305145704458736 - 15131248814341263919 = 56331363194817 (56.331363194817 KSM) ``` The JSON output in the file `blocks-ti.json` tells us the resulting numbers: ```json {"block": 24407008, "sum": 15311459956873073389, "ti": 15311516288236268206, "runtime": "Parity Polkadot", "diff": 56331363194817} {"block": 23780225, "sum": 15131248814341263919, "ti": 15131305145704458736, "runtime": "Parity Polkadot", "diff": 56331363194817} ``` This means that the difference is now stable since the last runtime upgrade that was 626,783 blocks ago. The `diff` field shows shows the exact difference in planks: `56331363194817`. The TI is larger than the sum; we therefore need to *decrease* the TI by that amount. ## Referendum The call to fix this is [pallet-balances::force_adjust_total_issuance](https://github.com/paritytech/polkadot-sdk/pull/3001): ```rust fn force_adjust_total_issuance( direction: AdjustmentDirection, #[pallet::compact] delta: T::Balance, ) ``` `AdjustmentDirection` can be either `Increase` or `Decrease`. This can be used to correct the TI to be re-aligned with the actual sum of all accounts' balances. The final call is [0x0409010bc197e4aa3b33](https://polkadot.js.org/apps/?rpc=wss%3A%2F%2Frpc.ibp.network%2Fkusama#/extrinsics/decode/0x0409010bc197e4aa3b33): ![Screenshot 2024-08-09 at 17.07.56](https://hackmd.io/_uploads/S1dCg3X5R.png) A similar post and referendum for Polkadot will follow once it was executed correctly on Kusama.