# limit_exceeded (/docs/errors/limit-exceeded)

A chain-side capacity limit was hit: too many children, weights above the maximum, no free UID slots on the subnet, the subnet limit reached, or a batch/queue at its configured maximum.

These are hard caps rather than timing windows, so retrying unchanged will fail again. reduce the size or count of the request, or free capacity first (e.g. remove a child before adding another).

## Remediation [#remediation]

A chain-side capacity limit was hit; reduce the size or count of the request

## Chain errors [#chain-errors]

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

| Chain error                                                                                           | Description                                                                                                                                                                                                                                                           |
| ----------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`BondsMovingAverageMaxReached`](/docs/errors/chain/BondsMovingAverageMaxReached)                     | A subnet owner called `sudo_set_bonds_moving_average` with a value above 975000, the cap for owner-set values; root is exempt. Lower the `bonds_moving_average` argument or submit the call as root.                                                                  |
| [`CapRaised`](/docs/errors/chain/CapRaised)                                                           | A contribution was attempted on a crowdloan whose `raised` amount has already reached its `cap`, so no further contributions are accepted. Compare the `raised` and `cap` fields of the `Crowdloans` entry for the `crowdloan_id`.                                    |
| [`CodeTooLarge`](/docs/errors/chain/CodeTooLarge)                                                     | The code blob passed to `instantiate_with_code` or `upload_code` exceeds the maximum code length in the pallet's schedule. Compare the WASM binary size against the schedule's code length limit and shrink the contract.                                             |
| [`EvmKeyAssociationLimitExceeded`](/docs/errors/chain/EvmKeyAssociationLimitExceeded)                 | The EVM address is already associated with the maximum number of UIDs allowed on this subnet. Inspect the `AssociatedUidsByEvmAddress` storage for the (netuid, evm\_key) pair and free a slot or use a different EVM address.                                        |
| [`LockIdOverFlow`](/docs/errors/chain/LockIdOverFlow)                                                 | The global network-registration lock id counter reached its u32 maximum while queueing a subnet registration, so no new lock could be created. Check the `NetworkRegistrationLockId` storage value; this indicates lock id exhaustion, not a balance problem.         |
| [`MaxCallDepthReached`](/docs/errors/chain/MaxCallDepthReached)                                       | A nested contract call would exceed the maximum call stack depth defined in the pallet schedule. Inspect the cross-contract call chain for deep or unbounded recursion and flatten it or raise the configured depth.                                                  |
| [`MaxContributionReached`](/docs/errors/chain/MaxContributionReached)                                 | The contributor's cumulative contribution already equals the crowdloan's per-contributor cap, so further contributions are rejected. Compare their `Contributions` entry with the `MaxContributions` value for the `crowdloan_id`.                                    |
| [`MaxContributorsReached`](/docs/errors/chain/MaxContributorsReached)                                 | The crowdloan already has the maximum number of distinct contributors, so accounts without an existing contribution are rejected. Compare the `contributors_count` field of the `Crowdloans` entry with the `MaxContributors` pallet constant.                        |
| [`MaxDelegateDependenciesReached`](/docs/errors/chain/MaxDelegateDependenciesReached)                 | `lock_delegate_dependency` failed because the contract already holds the maximum number of delegate dependencies allowed by the runtime. Check the `MaxDelegateDependencies` config value and unlock unused dependencies first.                                       |
| [`MaxWeightExceeded`](/docs/errors/chain/MaxWeightExceeded)                                           | After normalization, one of the submitted weights exceeds the subnet's maximum weight limit (self-weight is exempt). Check the `MaxWeightsLimit` hyperparameter (`btcli sudo get --netuid <n>`) and flatten the weight vector before setting.                         |
| [`NoNeuronIdAvailable`](/docs/errors/chain/NoNeuronIdAvailable)                                       | Registration could not obtain a uid: the subnet's `MaxAllowedUids` is 0, or the subnet is full and every neuron is immune from pruning. Check `SubnetworkN` versus `MaxAllowedUids` for the netuid and retry after immunity periods expire.                           |
| [`OutOfGas`](/docs/errors/chain/OutOfGas)                                                             | The contract exhausted the gas limit supplied for this execution before completing. Increase the `gas_limit` argument on `call` or `instantiate`; dry-run the call via RPC to estimate the required weight.                                                           |
| [`OutOfTransientStorage`](/docs/errors/chain/OutOfTransientStorage)                                   | A write would exceed the per-execution byte limit for transient storage. Check how much data the contract places in transient storage during the call against the runtime's transient storage limit.                                                                  |
| [`RandomSubjectTooLong`](/docs/errors/chain/RandomSubjectTooLong)                                     | The subject buffer given to the deprecated `seal_random` API exceeds the schedule's `subject_len` limit. Shorten the randomness subject the contract passes or check the schedule's limits section.                                                                   |
| [`RegistrationPriceLimitExceeded`](/docs/errors/chain/RegistrationPriceLimitExceeded)                 | `burned_register` with a price limit failed because the subnet's current registration burn cost exceeds the supplied `limit_price`. Check the current burn via `Burn` storage or `btcli subnets list` and raise the limit or wait for the cost to decay.              |
| [`StorageDepositLimitExhausted`](/docs/errors/chain/StorageDepositLimitExhausted)                     | The execution created more storage than the caller's `storage_deposit_limit` allows to be charged. Raise the `storage_deposit_limit` argument or reduce storage usage; a dry-run reports the required `storage_deposit`.                                              |
| [`SubnetLimitReached`](/docs/errors/chain/SubnetLimitReached)                                         | `register_network` failed because the subnet count is at the network limit and no existing subnet is eligible to be pruned. Check the number of registered subnets (`btcli subnets list`) against the subnet limit and retry once a subnet becomes prunable.          |
| [`TooBig`](/docs/errors/chain/TooBig)                                                                 | The preimage exceeds the maximum size the pallet will store on-chain (4 MiB). Check the byte length of the preimage against the pallet's `MAX_SIZE` limit before noting it.                                                                                           |
| [`TooMany`](/docs/errors/chain/TooMany)                                                               | A limit was exceeded: more preimage hashes than `MAX_HASH_UPGRADE_BULK_COUNT` were passed to `ensure_updated`, or the account has hit its proxy or announcement cap. Check the account's `Proxies` and `Announcements` entries against `MaxProxies` and `MaxPending`. |
| [`TooManyCalls`](/docs/errors/chain/TooManyCalls)                                                     | The batch submitted to the utility pallet contains more calls than the batched-calls limit allows. Check the length of the `calls` vector and split the work across multiple smaller `batch`, `batch_all`, or `force_batch` submissions.                              |
| [`TooManyChildren`](/docs/errors/chain/TooManyChildren)                                               | `set_children` was called with more than 5 child hotkeys for a parent on the subnet. Trim the children list to at most 5 entries.                                                                                                                                     |
| [`TooManyFieldsInCommitmentInfo`](/docs/errors/chain/TooManyFieldsInCommitmentInfo)                   | The `CommitmentInfo` passed to `set_commitment` contains more entries in `fields` than the pallet's `MaxFields` config allows. Count the fields in the `info` argument and trim to the `MaxFields` limit.                                                             |
| [`TooManyFreezes`](/docs/errors/chain/TooManyFreezes)                                                 | The account already has the maximum number of balance freezes, so a new freeze cannot be added. Check the account's `Freezes` entry against the `MaxFreezes` constant; an existing freeze must be thawed first.                                                       |
| [`TooManyHolds`](/docs/errors/chain/TooManyHolds)                                                     | The account already carries the maximum number of balance holds, one per hold reason variant. Check the account's `Holds` entry; an existing hold must be released before a new reason can place another.                                                             |
| [`TooManyPendingExtrinsics`](/docs/errors/chain/TooManyPendingExtrinsics)                             | `store_encrypted` was rejected because the shield pallet's queue of encrypted extrinsics is already at capacity. Compare the `PendingExtrinsics` count against `MaxPendingExtrinsicsLimit` and wait for queued items to be processed or expire.                       |
| [`TooManyReserves`](/docs/errors/chain/TooManyReserves)                                               | The account already has the maximum number of named reserves. Check the account's `Reserves` entry against the `MaxReserves` constant; a named reserve must be unreserved before adding another.                                                                      |
| [`TooManySignatories`](/docs/errors/chain/TooManySignatories)                                         | The multisig signatory list exceeds the maximum allowed. Compare the length of `other_signatories` plus the sender against the pallet's `MaxSignatories` constant.                                                                                                    |
| [`TooManyTopics`](/docs/errors/chain/TooManyTopics)                                                   | The number of topics passed to `seal_deposit_event` exceeds the schedule's `event_topics` limit. Reduce the number of indexed topics in the contract's event definition or compare against the schedule limit.                                                        |
| [`TooManyUIDsPerMechanism`](/docs/errors/chain/TooManyUIDsPerMechanism)                               | Setting max UIDs or mechanism count would make max\_uids times mechanism\_count exceed the chain default of 256 UIDs per subnet. Check `MaxAllowedUids` and the subnet's mechanism count so their product stays within the limit.                                     |
| [`TooManyUnrevealedCommits`](/docs/errors/chain/TooManyUnrevealedCommits)                             | `commit_weights` (or a CRv3 commit) failed because the hotkey already has 10 unrevealed commits queued on the subnet. Inspect `WeightCommits` for the hotkey and reveal or let old commits expire before committing again.                                            |
| [`TrimmingWouldExceedMaxImmunePercentage`](/docs/errors/chain/TrimmingWouldExceedMaxImmunePercentage) | Trimming the subnet's UIDs cannot proceed because immune neurons would make up at least the maximum immune share (80%) of the reduced slot count. Check neurons still in `ImmunityPeriod` and retry after their immunity lapses or with a higher max UID target.      |
| [`UidsLengthExceedUidsInSubNet`](/docs/errors/chain/UidsLengthExceedUidsInSubNet)                     | The weight submission contains more UID entries than there are neurons registered on the subnet. Compare the length of the `uids` argument against `SubnetworkN` for the netuid and trim the vector.                                                                  |
| [`ValueTooLarge`](/docs/errors/chain/ValueTooLarge)                                                   | A value written to contract storage or emitted as event data exceeds the `MaxValueSize` limit. Compare the size of the stored value or event payload against the runtime's maximum value size constant.                                                               |
| [`WeightExceedsAbsoluteMax`](/docs/errors/chain/WeightExceedsAbsoluteMax)                             | `set_on_initialize_weight` or `set_max_extrinsic_weight` was given a value above the shield pallet's hard cap of half the total block weight. Compare the `value` argument against the `MAX_ON_INITIALIZE_WEIGHT` constant.                                           |

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