# Voting power (/docs/guides/evm/precompiles/voting-power)

| Property            | Value                                        |
| ------------------- | -------------------------------------------- |
| Rust implementation | `VotingPowerPrecompile`                      |
| Solidity interface  | `IVotingPower`                               |
| Address             | `0x000000000000000000000000000000000000080d` |
| Status              | Deployed                                     |

All functions are `view`.

## Functions [#functions]

```text
getVotingPower(uint16,bytes32)
isVotingPowerTrackingEnabled(uint16)
getVotingPowerDisableAtBlock(uint16)
getVotingPowerEmaAlpha(uint16)
getTotalVotingPower(uint16)
```

`getTotalVotingPower` reads a maintained per-subnet aggregate. A one-time
runtime migration initializes the aggregate from existing validator entries;
normal epoch updates, removals, swaps, and tracking disablement keep it in
sync without a precompile-side map scan.

## Added operations [#added-operations]

| Function                     | Source extrinsic                                |
| ---------------------------- | ----------------------------------------------- |
| `enableVotingPowerTracking`  | `SubtensorModule.enable_voting_power_tracking`  |
| `disableVotingPowerTracking` | `SubtensorModule.disable_voting_power_tracking` |

Both calls accept a signed subnet owner as well as Root. The precompile exposes
only the signed path and preserves the pallet's owner checks. The Root-only EMA
configuration call is not exposed.

Source: [`votingPower.sol`](https://github.com/RaoFoundation/subtensor/blob/main/precompiles/src/solidity/votingPower.sol)
