# rate_limited (/docs/errors/rate-limited)

The chain enforces per-key rate limits on certain calls (registration, weight setting, stake movement, child hotkey changes) to keep the network stable.

The limit is measured in blocks since the same key last performed the same kind of call, so retrying immediately will fail with the same error. wait for the window to pass (typically a few blocks to a few hundred blocks depending on the call), then retry.

## Remediation [#remediation]

Wait for the rate-limit window to pass, then retry

## Chain errors [#chain-errors]

The exact chain error names (from the extrinsic receipt) that classify to `rate_limited`; the description says what triggered the failure and where to check. Each name has its own page:

| Chain error                                                                                     | Description                                                                                                                                                                                                                                                           |
| ----------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`AddStakeBurnRateLimitExceeded`](/docs/errors/chain/AddStakeBurnRateLimitExceeded)             | The add-stake-and-burn operation was submitted again before its per-key rate-limit window elapsed. Wait some blocks and retry; no active raise site exists in current code, so this mainly appears on older runtimes.                                                 |
| [`CommittingWeightsTooFast`](/docs/errors/chain/CommittingWeightsTooFast)                       | The neuron committed weights again before the per-UID rate limit elapsed since its last commit on that subnet. Compare blocks since the last commit against the `weights_rate_limit` hyperparameter (`btcli sudo get --netuid <n>`) and wait.                         |
| [`DelegateTxRateLimitExceeded`](/docs/errors/chain/DelegateTxRateLimitExceeded)                 | The delegate changed its take again before the per-hotkey take-change rate limit elapsed. Compare blocks since the hotkey's last take transaction against the `TxDelegateTakeRateLimit` storage item and retry later.                                                 |
| [`EvmKeyAssociateRateLimitExceeded`](/docs/errors/chain/EvmKeyAssociateRateLimitExceeded)       | `associate_evm_key` was called again before the per-UID rate limit since the last association elapsed. Compare blocks since the association recorded in the `AssociatedEvmAddress` storage against the `EvmKeyAssociateRateLimit` runtime constant and retry later.   |
| [`HotKeySetTxRateLimitExceeded`](/docs/errors/chain/HotKeySetTxRateLimitExceeded)               | The coldkey attempted a hotkey set/swap before `TxRateLimit` blocks had passed since its last such transaction. Check the coldkey's last transaction block against the `TxRateLimit` storage value and wait the remaining blocks.                                     |
| [`HotKeySwapOnSubnetIntervalNotPassed`](/docs/errors/chain/HotKeySwapOnSubnetIntervalNotPassed) | A hotkey swap on a subnet was attempted before `HotkeySwapOnSubnetInterval` blocks passed since the coldkey's last swap on that netuid. Compare `LastHotkeySwapOnNetuid` for the coldkey with the current block and retry after the interval.                         |
| [`NetworkTxRateLimitExceeded`](/docs/errors/chain/NetworkTxRateLimitExceeded)                   | The coldkey attempted register\_network again before the network registration rate limit elapsed since its previous registration. Check the coldkey's last register-network block against the `NetworkRateLimit` storage value and wait the remaining blocks.         |
| [`ServingRateLimitExceeded`](/docs/errors/chain/ServingRateLimitExceeded)                       | `serve_axon` or `serve_prometheus` was called again before enough blocks passed since the neuron's last serving update. Check the axon's last update block in `Axons` against the `ServingRateLimit` (serving\_rate\_limit hyperparameter) and wait.                  |
| [`SettingWeightsTooFast`](/docs/errors/chain/SettingWeightsTooFast)                             | The neuron set weights again before `WeightsSetRateLimit` blocks elapsed since its last weight update on that subnet. Check the weights\_rate\_limit hyperparameter and the neuron's `LastUpdate` entry, then wait the remaining blocks.                              |
| [`SpaceLimitExceeded`](/docs/errors/chain/SpaceLimitExceeded)                                   | The commitment would push the account's byte quota for the current epoch over the cap; each `set_commitment` consumes at least 100 bytes. Check `UsedSpaceOf` for the netuid and account against `MaxSpace`, or wait for the next epoch to reset usage.               |
| [`StakingRateLimitExceeded`](/docs/errors/chain/StakingRateLimitExceeded)                       | Staking operations (add\_stake, remove\_stake, and similar) were submitted faster than the per-block staking rate limit allows for the hotkey-coldkey pair. Space the transactions out and retry in a later block.                                                    |
| [`SubnetBuybackRateLimitExceeded`](/docs/errors/chain/SubnetBuybackRateLimitExceeded)           | A subnet buyback operation (staking TAO and immediately burning the acquired alpha, e.g. via `add_stake_burn`) was repeated within its rate-limit window. Wait for the window to pass before retrying the buyback.                                                    |
| [`TooManyRegistrationsThisBlock`](/docs/errors/chain/TooManyRegistrationsThisBlock)             | Registrations in the current block already reached the subnet's per-block cap (`MaxRegistrationsPerBlock`, the max\_regs\_per\_block hyperparameter); root registration enforces the same cap on netuid 0. Retry in the next block.                                   |
| [`TooManyRegistrationsThisInterval`](/docs/errors/chain/TooManyRegistrationsThisInterval)       | Registrations in the current interval reached the cap of three times `TargetRegistrationsPerInterval` for the subnet. Compare `RegistrationsThisInterval` against that hyperparameter and wait for the next interval to start.                                        |
| [`TooSoon`](/docs/errors/chain/TooSoon)                                                         | A forced GRANDPA authority change was signalled too soon after the previous one. Check the Grandpa `NextForced` storage and wait until the current block passes it before signalling another forced change.                                                           |
| [`TxChildkeyTakeRateLimitExceeded`](/docs/errors/chain/TxChildkeyTakeRateLimitExceeded)         | `set_childkey_take` was called again for the hotkey on this subnet before its rate-limit window elapsed. Check the block of the last childkey-take change against `TxChildkeyTakeRateLimit` and wait out the remainder.                                               |
| [`TxRateLimitExceeded`](/docs/errors/chain/TxRateLimitExceeded)                                 | An owner or admin transaction (e.g. `set_children`, tempo or hyperparameter updates, setting the owner hotkey) was repeated within its rate-limit window for that key and subnet. Check when the same transaction type last succeeded and wait for the limit to pass. |

The same explanation is available in the terminal: `btcli explain rate_limited` (or `btcli explain <ChainErrorName>` for one exact chain error).
