# invalid_argument (/docs/errors/invalid-argument)

An argument was rejected before or at submission: a malformed address, an out-of-range value, a bad signature, or an extrinsic the node refused to accept into its pool.

Check the argument values against the operation's schema (`btcli tools` prints the machine-readable catalog; `--help` on any command shows its parameters).

## Remediation [#remediation]

Check the argument values against the operation schema

## Chain errors [#chain-errors]

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

| Chain error                                                                                                           | Description                                                                                                                                                                                                                                                                                             |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`AccountRejectsLockedAlpha`](/docs/errors/chain/AccountRejectsLockedAlpha)                                           | Locked alpha was being transferred to a coldkey whose `AccountFlags` do not have the accept-locked-alpha bit set, e.g. during a lock transfer or coldkey swap of locks. Check the destination coldkey's `AccountFlags` storage and have the recipient opt in to receiving locked alpha before retrying. |
| [`ActivityCutoffFactorMilliOutOfBounds`](/docs/errors/chain/ActivityCutoffFactorMilliOutOfBounds)                     | The `factor_milli` argument to set the activity-cutoff factor was outside the allowed 1000-50000 per-mille range (1 to 50 tempos). Adjust the argument to fall within those bounds before resubmitting.                                                                                                 |
| [`ActivityCutoffTooLow`](/docs/errors/chain/ActivityCutoffTooLow)                                                     | An admin tried to set the subnet's activity cutoff below the chain-wide minimum. Compare the requested value against the `MinActivityCutoff` storage item and current `activity_cutoff` in `btcli sudo get --netuid <n>`.                                                                               |
| [`AlphaHighTooLow`](/docs/errors/chain/AlphaHighTooLow)                                                               | The `alpha_high` argument to set liquid-alpha values was below the minimum of roughly 0.025 (1638/65535 in u16 units). Raise `alpha_high` in the `sudo_set_alpha_values` call; current values are in the `AlphaValues` storage per netuid.                                                              |
| [`AlphaLowOutOfRange`](/docs/errors/chain/AlphaLowOutOfRange)                                                         | The `alpha_low` argument to set liquid-alpha values was below the \~0.025 minimum (1638/65535) or greater than `alpha_high`. Choose alpha\_low within that range and not exceeding alpha\_high; current settings are in the `AlphaValues` storage for the netuid.                                       |
| [`AmountTooLow`](/docs/errors/chain/AmountTooLow)                                                                     | A stake, unstake, move or swap amount was zero or its TAO equivalent fell below the minimum stake threshold after fees and slippage. Compare the amount against the `DefaultMinStake` storage item and the subnet's alpha price before retrying with a larger amount.                                   |
| [`AnnouncedColdkeyHashDoesNotMatch`](/docs/errors/chain/AnnouncedColdkeyHashDoesNotMatch)                             | The `new_coldkey` passed to `coldkey_swap` hashes to a different value than the hash committed in the earlier `announce_coldkey_swap`. Verify the announced hash in the `ColdkeySwapAnnouncements` storage matches the BlakeTwo256 hash of the coldkey you are swapping to.                             |
| [`BadEncKeyLen`](/docs/errors/chain/BadEncKeyLen)                                                                     | The `enc_key` passed to `announce_next_key` is not the exact ML-KEM-768 encapsulation key length (1184 bytes). Check the byte length of the `enc_key` argument before announcing.                                                                                                                       |
| [`BlockDurationTooLong`](/docs/errors/chain/BlockDurationTooLong)                                                     | The requested `end` block is more than `MaximumBlockDuration` blocks after the current block. Compare `end` minus the current block number against the `MaximumBlockDuration` pallet constant when calling `create` or `update_end`.                                                                    |
| [`BlockDurationTooShort`](/docs/errors/chain/BlockDurationTooShort)                                                   | The requested `end` block is fewer than `MinimumBlockDuration` blocks after the current block. Compare `end` minus the current block number against the `MinimumBlockDuration` pallet constant when calling `create` or `update_end`.                                                                   |
| [`CanNotSetRootNetworkWeights`](/docs/errors/chain/CanNotSetRootNetworkWeights)                                       | `set_weights` was called with netuid 0, the root network, where normal weight setting is not allowed. Use a non-root `netuid` argument; root weights are handled by a separate mechanism.                                                                                                               |
| [`CannotAddSelfAsDelegateDependency`](/docs/errors/chain/CannotAddSelfAsDelegateDependency)                           | A contract called `lock_delegate_dependency` with its own code hash, which is not permitted. Check the code hash argument passed to the delegate dependency API against the contract's own code hash.                                                                                                   |
| [`CannotBurnOrRecycleOnRootSubnet`](/docs/errors/chain/CannotBurnOrRecycleOnRootSubnet)                               | `recycle_alpha` or `burn_alpha` was called with netuid 0, and TAO on the root subnet cannot be burned or recycled. Pass a non-root `netuid` argument for the subnet whose alpha you want to recycle or burn.                                                                                            |
| [`CannotEndInPast`](/docs/errors/chain/CannotEndInPast)                                                               | The `end` block passed to `create` or `update_end` is not after the current block. Compare the `end` argument against the current block number; it must be strictly greater.                                                                                                                            |
| [`CapTooLow`](/docs/errors/chain/CapTooLow)                                                                           | On `create` the `cap` is not strictly greater than the initial `deposit`, or on `update_cap` the new cap is below the amount already raised. Compare the cap argument against the `deposit` or the `raised` field of the `Crowdloans` entry.                                                            |
| [`ChainIdMismatch`](/docs/errors/chain/ChainIdMismatch)                                                               | The order payload's `chain_id` field differs from this chain's configured EVM chain id, e.g. an order signed for testnet was submitted to mainnet. Compare the order's `chain_id` with the runtime's `pallet_evm_chain_id` value and re-sign if needed.                                                 |
| [`ChildParentInconsistency`](/docs/errors/chain/ChildParentInconsistency)                                             | A `set_children` or parent-delegation call would make the same hotkey appear as both a child and a parent, or referenced a child missing from the proposed mapping. Inspect the `ChildKeys` and `ParentKeys` storage for the hotkeys involved and remove the overlap.                                   |
| [`CodeInUse`](/docs/errors/chain/CodeInUse)                                                                           | `remove_code` was refused because at least one contract instance still references the code hash. Check the code's reference count and terminate or `set_code` the contracts using it before removal.                                                                                                    |
| [`CodeRejected`](/docs/errors/chain/CodeRejected)                                                                     | The uploaded WASM failed validation, most often because it imports a host API the node does not support, e.g. newer ink! against an older node. Rerun the node with `-lruntime::contracts=debug` to see the detailed rejection reason.                                                                  |
| [`ContributionTooLow`](/docs/errors/chain/ContributionTooLow)                                                         | The `amount` passed to `contribute` is below the crowdloan's configured minimum contribution. Check the `min_contribution` field of the `Crowdloans` entry for the `crowdloan_id` and contribute at least that amount.                                                                                  |
| [`DecodingFailed`](/docs/errors/chain/DecodingFailed)                                                                 | Input bytes passed to a contract API host function could not be SCALE-decoded into the expected type. Check the encoding of the call's input data or the argument bytes the contract passes to the runtime API.                                                                                         |
| [`DelegateTakeTooHigh`](/docs/errors/chain/DelegateTakeTooHigh)                                                       | The `take` argument exceeds the maximum delegate take allowed by the chain (18% by default). Compare the requested value against the `MaxDelegateTake` storage item and lower it.                                                                                                                       |
| [`DelegateTakeTooLow`](/docs/errors/chain/DelegateTakeTooLow)                                                         | The `take` argument was below the `MinDelegateTake` minimum, or `increase_take`/`decrease_take` was not strictly increasing/decreasing relative to the current take. Check the hotkey's current take in the `Delegates` storage and the `MinDelegateTake` storage item.                                 |
| [`DeltaZero`](/docs/errors/chain/DeltaZero)                                                                           | The issuance adjustment was called with a delta of zero, which is meaningless. Check the `delta` argument to `force_adjust_total_issuance` and pass a strictly positive amount.                                                                                                                         |
| [`DepositCannotBeWithdrawn`](/docs/errors/chain/DepositCannotBeWithdrawn)                                             | The creator called `withdraw` but holds nothing above the initial deposit, which stays locked until the crowdloan is dissolved. Compare the creator's `Contributions` entry with the `deposit` field of the `Crowdloans` entry.                                                                         |
| [`DepositTooLow`](/docs/errors/chain/DepositTooLow)                                                                   | The `deposit` argument to `create` is below the pallet's required minimum. Check the `MinimumDeposit` pallet constant and create the crowdloan with at least that initial deposit.                                                                                                                      |
| [`DuplicateChild`](/docs/errors/chain/DuplicateChild)                                                                 | The children list passed to `set_children` contains the same child hotkey more than once. Deduplicate the `children` argument; current relations are visible in the `ChildKeys` storage for the parent hotkey and netuid.                                                                               |
| [`DuplicateOrderInBatch`](/docs/errors/chain/DuplicateOrderInBatch)                                                   | Two entries in one `execute_batched_orders` call hash to the same order id, meaning the identical signed payload was included twice, which hard-fails the batch. Deduplicate by the blake2-256 hash of each SCALE-encoded `VersionedOrder`.                                                             |
| [`DuplicateUids`](/docs/errors/chain/DuplicateUids)                                                                   | The `uids` vector passed to `set_weights` (or a reveal) contains the same UID more than once. Deduplicate the uids/values pairs before submitting; each target neuron may appear only once per weight vector.                                                                                           |
| [`FailedToExtractRuntimeVersion`](/docs/errors/chain/FailedToExtractRuntimeVersion)                                   | The new runtime code passed to `set_code` did not yield a readable version: calling `Core_version` or decoding `RuntimeVersion` failed. Check that the submitted blob is a valid, complete runtime wasm and not truncated or compressed incorrectly.                                                    |
| [`FeeRateTooHigh`](/docs/errors/chain/FeeRateTooHigh)                                                                 | `set_fee_rate` was called with a rate above the swap pallet's `MaxFeeRate` config constant. Compare the `rate` argument (u16-scaled fraction) against `MaxFeeRate` before submitting.                                                                                                                   |
| [`GasLimitTooHigh`](/docs/errors/chain/GasLimitTooHigh)                                                               | The transaction's `gas_limit` exceeds the block gas limit configured for the EVM. Compare the `gas_limit` argument against the chain's block gas limit and lower it.                                                                                                                                    |
| [`GasLimitTooLow`](/docs/errors/chain/GasLimitTooLow)                                                                 | The transaction's `gas_limit` is below the intrinsic gas required, or too small to cover the weight and proof-size base cost. Raise the `gas_limit` argument, comparing against an `eth_estimateGas` result.                                                                                            |
| [`GasPriceTooLow`](/docs/errors/chain/GasPriceTooLow)                                                                 | The offered fee cannot satisfy the current base fee: `max_fee_per_gas` is below the block base fee, the priority fee exceeds the max fee, or the fee inputs are inconsistent. Check `max_fee_per_gas` and `max_priority_fee_per_gas` against the chain's base fee.                                      |
| [`IncorrectCommitRevealVersion`](/docs/errors/chain/IncorrectCommitRevealVersion)                                     | The `commit_reveal_version` argument does not match the chain's current commit-reveal weights version. Query the `CommitRevealWeightsVersion` storage item and upgrade or configure the client to commit with that version.                                                                             |
| [`IncorrectPartialFillAmount`](/docs/errors/chain/IncorrectPartialFillAmount)                                         | The `partial_fill` amount is zero or exceeds the order's remaining unfilled amount, or a full execution was submitted against an order already partially filled. Compare `partial_fill` with `order.amount` minus the filled amount recorded in `Orders`.                                               |
| [`IncorrectWeightVersionKey`](/docs/errors/chain/IncorrectWeightVersionKey)                                           | The `version_key` supplied with set\_weights is older than the subnet's required weights version. Compare it against the `WeightsVersionKey` hyperparameter (`btcli sudo get --netuid <n>`) and update the validator software or the key.                                                               |
| [`Indeterministic`](/docs/errors/chain/Indeterministic)                                                               | Code flagged as non-deterministic (e.g. using floating point) was used where determinism is enforced, such as on-chain instantiation or calls. Check the determinism mode the code was uploaded with and rebuild the contract deterministically.                                                        |
| [`InputForwarded`](/docs/errors/chain/InputForwarded)                                                                 | The contract forwarded its input to a callee via `seal_call` with the FORWARD\_INPUT flag and then tried to read or forward it again. Check the call flags used; use CLONE\_INPUT when the input is still needed afterwards.                                                                            |
| [`InputLengthsUnequal`](/docs/errors/chain/InputLengthsUnequal)                                                       | A batch weights call passed vectors of different lengths, e.g. netuids vs commit hashes, or uids vs values, salts and version\_keys in batch reveal. Check that every parallel vector argument in the batch extrinsic has the same length.                                                              |
| [`InsufficientInputAmount`](/docs/errors/chain/InsufficientInputAmount)                                               | Declared for swap inputs too small to execute, but no current code path raises it since the user-liquidity code was removed. If seen on an older runtime, check that the swap input amount is nonzero and large enough to produce output.                                                               |
| [`InvalidCallFlags`](/docs/errors/chain/InvalidCallFlags)                                                             | The flags bitmask given to `seal_call` or `seal_delegate_call` contains an unknown or disallowed combination; delegate calls accept only a restricted flag set. Check the flags argument against the supported `CallFlags` bit values.                                                                  |
| [`InvalidChainId`](/docs/errors/chain/InvalidChainId)                                                                 | The EIP-155 chain id encoded in the signed transaction does not match this chain's configured chain id. Compare the transaction's chain id with the value returned by `eth_chainId` and re-sign the transaction.                                                                                        |
| [`InvalidChild`](/docs/errors/chain/InvalidChild)                                                                     | The children or parents list includes the pivot hotkey itself (a self-loop), including during a hotkey swap when the new hotkey is already a child or parent of the old one. Check the `children` argument and `ChildKeys`/`ParentKeys` for the hotkeys involved.                                       |
| [`InvalidChildkeyTake`](/docs/errors/chain/InvalidChildkeyTake)                                                       | The childkey take is outside the allowed range for the subnet: below the effective minimum or above `MaxChildkeyTake`. Query `MinChildkeyTake` and `MaxChildkeyTake` and pick a `take` value within those bounds.                                                                                       |
| [`InvalidDerivedAccount`](/docs/errors/chain/InvalidDerivedAccount)                                                   | Deriving the sub-account for `as_derivative` failed to decode into a valid account id from the (caller, index) entropy. Check the `index` argument and the caller account used for derivation.                                                                                                          |
| [`InvalidDerivedAccountId`](/docs/errors/chain/InvalidDerivedAccountId)                                               | Deriving the pure proxy account id from the provided entropy failed to decode into a valid account. Check the spawner, `proxy_type`, and `index` arguments used with `create_pure` (or the equivalent lookup when destroying one).                                                                      |
| [`InvalidDifficulty`](/docs/errors/chain/InvalidDifficulty)                                                           | The submitted proof-of-work hash does not meet the required difficulty (the faucet uses a fixed 1,000,000; PoW registration uses the subnet's difficulty). Check the `Difficulty` storage for the netuid and regenerate work against the current block.                                                 |
| [`InvalidEquivocationProof`](/docs/errors/chain/InvalidEquivocationProof)                                             | The submitted GRANDPA equivocation proof does not demonstrate a real double-vote: the two votes may be identical, from different rounds or set ids, or badly signed. Verify the proof contains two distinct votes by the same authority in the same round and authority set.                            |
| [`InvalidFinalizationConfig`](/docs/errors/chain/InvalidFinalizationConfig)                                           | Exactly one of `call` or `target_address` must be set, but both or neither were provided to `create`, or the stored crowdloan holds an inconsistent pair at `finalize` time. Check those two fields on the `create` arguments or the `Crowdloans` entry.                                                |
| [`InvalidIdentity`](/docs/errors/chain/InvalidIdentity)                                                               | The submitted coldkey or subnet identity failed validation, typically a field exceeding its allowed byte length or malformed data. Check each identity field's length against the limits enforced by the chain before calling set\_identity or set\_subnet\_identity.                                   |
| [`InvalidIpAddress`](/docs/errors/chain/InvalidIpAddress)                                                             | The `ip` argument to serve\_axon or serve\_prometheus is not a valid address for the declared `ip_type` (prometheus additionally rejects the zero address). Verify the IP encodes correctly as IPv4 or IPv6 and matches the `ip_type` passed.                                                           |
| [`InvalidIpType`](/docs/errors/chain/InvalidIpType)                                                                   | The `ip_type` argument to serve\_axon or serve\_prometheus is not 4 or 6. Check the value being sent by the miner or client; only IPv4 (4) and IPv6 (6) are accepted.                                                                                                                                   |
| [`InvalidKeyOwnershipProof`](/docs/errors/chain/InvalidKeyOwnershipProof)                                             | The key ownership proof does not establish that the offending GRANDPA key belonged to the claimed validator at that session. Regenerate the proof via the `generate_key_ownership_proof` runtime API for the exact set id and authority id in the report.                                               |
| [`InvalidLeaseBeneficiary`](/docs/errors/chain/InvalidLeaseBeneficiary)                                               | The account registering a leased network is not the creator of the crowdloan currently being finalized. Check the crowdloan's `creator` field in the crowdloan pallet storage and submit the call from that coldkey.                                                                                    |
| [`InvalidLiquidityValue`](/docs/errors/chain/InvalidLiquidityValue)                                                   | Legacy error from the removed V3 user-liquidity code, raised when an added or removed liquidity amount was below the pallet's `MinimumLiquidity`. Not raised on current runtimes; on older ones compare the `liquidity` argument to `MinimumLiquidity`.                                                 |
| [`InvalidNonce`](/docs/errors/chain/InvalidNonce)                                                                     | The transaction nonce does not match the sender's current account nonce, being either too low (already used) or too high. Compare the transaction's `nonce` with the sender's on-chain nonce from `eth_getTransactionCount`.                                                                            |
| [`InvalidNumRootClaim`](/docs/errors/chain/InvalidNumRootClaim)                                                       | The value passed to sudo\_set\_num\_root\_claims exceeds the compile-time maximum number of root claims. Check the `new_value` argument against the chain's `MAX_NUM_ROOT_CLAIMS` constant and pass a smaller number.                                                                                   |
| [`InvalidPort`](/docs/errors/chain/InvalidPort)                                                                       | The `port` argument to serve\_axon or serve\_prometheus is 0, which is rejected. Check the miner or client axon configuration and serve on a non-zero port.                                                                                                                                             |
| [`InvalidRecoveredPublicKey`](/docs/errors/chain/InvalidRecoveredPublicKey)                                           | The EVM key association signature recovered to a public key whose keccak hash does not equal the supplied `evm_key`. Verify the signature was produced by the claimed EVM key over the hotkey plus block hash message (EIP-191 format).                                                                 |
| [`InvalidRevealCommitHashNotMatch`](/docs/errors/chain/InvalidRevealCommitHashNotMatch)                               | The revealed uids, values, salt and version\_key hash to a value that matches none of the hotkey's pending non-expired commits. Check that the reveal parameters and salt exactly match what was committed, and inspect `WeightCommits` for the hotkey and netuid.                                      |
| [`InvalidRootClaimThreshold`](/docs/errors/chain/InvalidRootClaimThreshold)                                           | The value passed to set the root claim threshold exceeds the chain's maximum allowed threshold. Check the `new_value` argument against the `MAX_ROOT_CLAIM_THRESHOLD` constant and the current `RootClaimableThreshold` for the netuid.                                                                 |
| [`InvalidRoundNumber`](/docs/errors/chain/InvalidRoundNumber)                                                         | A submitted drand pulse has an unacceptable round: the first pulse ever stored must have a round greater than zero, and each later pulse must be exactly `LastStoredRound` plus one. Compare the pulse round against `LastStoredRound`.                                                                 |
| [`InvalidSchedule`](/docs/errors/chain/InvalidSchedule)                                                               | The pallet's schedule is misconfigured, e.g. a zero weight or zero `ref_time_by_fuel` for a basic operation, making gas conversion impossible. This is a runtime configuration issue; inspect the `Schedule` constant rather than call arguments.                                                       |
| [`InvalidSeal`](/docs/errors/chain/InvalidSeal)                                                                       | The seal hash recomputed from the supplied `block_number`, `nonce` and key does not equal the submitted `work`. Verify the PoW solver built the seal for the same key and block it submits, and that the work bytes were not corrupted in transit.                                                      |
| [`InvalidSignature`](/docs/errors/chain/InvalidSignature)                                                             | Signature verification failed: the sender of an Ethereum or EVM transaction could not be recovered from its signature, or a limit order's Sr25519 signature does not match the order payload and signer. Check the signing key, chain id, and the exact payload bytes that were signed.                 |
| [`InvalidSpecName`](/docs/errors/chain/InvalidSpecName)                                                               | The new runtime's `spec_name` does not match the current runtime, so `set_code` refuses the upgrade. Check the `RuntimeVersion` embedded in the new wasm and ensure the spec name is identical to the chain's current one.                                                                              |
| [`InvalidSubnetNumber`](/docs/errors/chain/InvalidSubnetNumber)                                                       | A root-claim call passed an empty subnet set or more subnets than the per-call maximum (claim\_root, or KeepSubnets in set\_root\_claim\_type). Check the `subnets` argument is non-empty and within the `MAX_SUBNET_CLAIMS` limit.                                                                     |
| [`InvalidTickRange`](/docs/errors/chain/InvalidTickRange)                                                             | Legacy error from the removed V3 user-liquidity code, raised when `tick_low` was not below `tick_high` or a tick failed to convert to a sqrt price. Not raised on current runtimes; check the tick range arguments on older ones.                                                                       |
| [`InvalidValue`](/docs/errors/chain/InvalidValue)                                                                     | A generic out-of-range parameter on an admin or sudo call, e.g. mechanism counts, emission splits summing away from 65535, max UIDs or take bounds. Check the specific argument against the min/max storage items the extrinsic validates (e.g. `MinAllowedUids`, `MaxMechanismCount`).                 |
| [`InvalidVotingPowerEmaAlpha`](/docs/errors/chain/InvalidVotingPowerEmaAlpha)                                         | The alpha passed to set the voting power EMA exceeds 10^18, which represents 1.0. Check the `alpha` argument to sudo\_set\_voting\_power\_ema\_alpha; it must be at most 10^18, and the current value is in `VotingPowerEmaAlpha` per netuid.                                                           |
| [`InvalidWorkBlock`](/docs/errors/chain/InvalidWorkBlock)                                                             | The `block_number` in the proof-of-work submission is in the future or more than 3 blocks old, so the work is stale. Compare the submitted block number with the current chain height and regenerate the PoW against a fresh block.                                                                     |
| [`LeaseCannotEndInThePast`](/docs/errors/chain/LeaseCannotEndInThePast)                                               | The `end_block` supplied when registering a leased network is not after the current block. Check the current chain height and pass an `end_block` in the future, or omit it for a perpetual lease.                                                                                                      |
| [`LeaseHasNoEndBlock`](/docs/errors/chain/LeaseHasNoEndBlock)                                                         | The lease being terminated is perpetual (its `end_block` is None), so it can never be ended this way. Check the lease's `end_block` field in `SubnetLeases` for the given lease id.                                                                                                                     |
| [`LockHotkeyMismatch`](/docs/errors/chain/LockHotkeyMismatch)                                                         | The coldkey already has a conviction lock on this subnet bound to a different hotkey, and locks for one coldkey per subnet must target a single hotkey. Check the existing lock's hotkey in the lock storage for the coldkey and netuid, or move the lock first.                                        |
| [`MaxAllowedUIdsLessThanCurrentUIds`](/docs/errors/chain/MaxAllowedUIdsLessThanCurrentUIds)                           | `sudo_set_max_allowed_uids` was given a value below the number of neurons already registered on the subnet. Compare the `max_allowed_uids` argument against `SubnetworkN` for that netuid.                                                                                                              |
| [`MaxAllowedUidsGreaterThanDefaultMaxAllowedUids`](/docs/errors/chain/MaxAllowedUidsGreaterThanDefaultMaxAllowedUids) | `sudo_set_max_allowed_uids` was given a value above the chain-wide ceiling. Compare the `max_allowed_uids` argument against the `DefaultMaxAllowedUids` storage value.                                                                                                                                  |
| [`MaxAllowedUidsLessThanMinAllowedUids`](/docs/errors/chain/MaxAllowedUidsLessThanMinAllowedUids)                     | `sudo_set_max_allowed_uids` was given a value below the subnet's configured minimum. Compare the `max_allowed_uids` argument against `MinAllowedUids` for that netuid.                                                                                                                                  |
| [`MaxValidatorsLargerThanMaxUIds`](/docs/errors/chain/MaxValidatorsLargerThanMaxUIds)                                 | `sudo_set_max_allowed_validators` was given a value exceeding the subnet's UID capacity. Compare the `max_allowed_validators` argument against `MaxAllowedUids` for that netuid.                                                                                                                        |
| [`MaxWeightTooLow`](/docs/errors/chain/MaxWeightTooLow)                                                               | The `max_weight` argument supplied with the final multisig approval is lower than the actual weight of the call being dispatched. Compute the call's real dispatch weight and pass a `max_weight` at least that large to `as_multi`.                                                                    |
| [`MaximumContributionTooLow`](/docs/errors/chain/MaximumContributionTooLow)                                           | The `new_max_contribution` passed to `set_max_contribution` is below the crowdloan's `min_contribution` or below the creator's existing contribution. Check both against the `Crowdloans` entry and the creator's `Contributions` entry.                                                                |
| [`MinAllowedUidsGreaterThanCurrentUids`](/docs/errors/chain/MinAllowedUidsGreaterThanCurrentUids)                     | `sudo_set_min_allowed_uids` was given a value not strictly below the number of neurons currently registered on the subnet. Compare the `min_allowed_uids` argument against `SubnetworkN` for that netuid.                                                                                               |
| [`MinAllowedUidsGreaterThanMaxAllowedUids`](/docs/errors/chain/MinAllowedUidsGreaterThanMaxAllowedUids)               | `sudo_set_min_allowed_uids` was given a value not strictly below the subnet's maximum UID capacity. Compare the `min_allowed_uids` argument against `MaxAllowedUids` for that netuid.                                                                                                                   |
| [`MinimumContributionTooHigh`](/docs/errors/chain/MinimumContributionTooHigh)                                         | The `new_min_contribution` passed to `update_min_contribution` exceeds the crowdloan's configured per-contributor maximum. Compare it with the `MaxContributions` entry for the `crowdloan_id`.                                                                                                         |
| [`MinimumContributionTooLow`](/docs/errors/chain/MinimumContributionTooLow)                                           | The minimum contribution given to `create` or `update_min_contribution` is below the chain-wide floor. Check the `AbsoluteMinimumContribution` pallet constant and raise the `min_contribution` argument to at least that value.                                                                        |
| [`MinimumThreshold`](/docs/errors/chain/MinimumThreshold)                                                             | The multisig `threshold` argument was below 2, which these calls do not accept. Pass a threshold of 2 or more, or use `as_multi_threshold_1` for the single-approval case.                                                                                                                              |
| [`Named`](/docs/errors/chain/Named)                                                                                   | An unnamed scheduler function was used on a task that was scheduled with a name. Use the named variants (`cancel_named`, `schedule_named`) with the task's id, which you can find via the `Lookup` storage map.                                                                                         |
| [`NegativeSigmoidSteepness`](/docs/errors/chain/NegativeSigmoidSteepness)                                             | A non-root caller (subnet owner) passed a negative value to `sudo_set_alpha_sigmoid_steepness`; negative steepness values are reserved for the root origin. Use a non-negative `steepness` or submit the call as root.                                                                                  |
| [`NewColdKeyIsHotkey`](/docs/errors/chain/NewColdKeyIsHotkey)                                                         | The proposed new coldkey in a coldkey swap is already an existing hotkey account, which is not allowed. Check the `Owner` storage for the candidate key to confirm it is not registered as a hotkey, and pick a fresh coldkey.                                                                          |
| [`NewHotKeyIsSameWithOld`](/docs/errors/chain/NewHotKeyIsSameWithOld)                                                 | swap\_hotkey was called with `new_hotkey` equal to the current hotkey, so there is nothing to swap. Check the extrinsic arguments and supply a different destination hotkey.                                                                                                                            |
| [`NewHotKeyNotCleanForRootSwap`](/docs/errors/chain/NewHotKeyNotCleanForRootSwap)                                     | The destination hotkey has pending root claimable dividends, non-zero root stake, or root-claimed history, so root accounting cannot merge safely. Check `RootClaimable` and root-subnet stake for the new hotkey; claim or clear them, or use a fresh hotkey.                                          |
| [`NoApprovalsNeeded`](/docs/errors/chain/NoApprovalsNeeded)                                                           | The multisig call does not need any more approvals; it is only waiting for final execution with the full call data. Instead of another `approve_as_multi`, submit `as_multi` with the complete call to dispatch it.                                                                                     |
| [`NoMigrationPerformed`](/docs/errors/chain/NoMigrationPerformed)                                                     | A `migrate` call ran but no migration step executed, either because no migration is pending or the supplied `weight_limit` is too small for one step. Check the in-progress migration status and increase the weight limit argument.                                                                    |
| [`NoSelfProxy`](/docs/errors/chain/NoSelfProxy)                                                                       | An account attempted to register itself as its own proxy, which is not allowed. Check the `delegate` argument to `add_proxy` and ensure it differs from the calling (delegator) account.                                                                                                                |
| [`NoTimepoint`](/docs/errors/chain/NoTimepoint)                                                                       | No timepoint was supplied but this multisig operation is already underway, so the approval cannot be matched to it. Read the operation's `when` field from the `Multisigs` entry for the call hash and pass that height and index as `maybe_timepoint`.                                                 |
| [`NonDefaultComposite`](/docs/errors/chain/NonDefaultComposite)                                                       | The account cannot be killed because its composite account data is not in the default state. Check the account's `System.Account` entry; all balance and data fields must be default before the account can be removed this way.                                                                        |
| [`NonZeroRefCount`](/docs/errors/chain/NonZeroRefCount)                                                               | The account cannot be purged because other pallets still reference it. Check the `consumers`, `providers`, and `sufficients` counters in the account's `System.Account` record; all references must be released first.                                                                                  |
| [`NotPermittedOnRootSubnet`](/docs/errors/chain/NotPermittedOnRootSubnet)                                             | An admin-utils call that only applies to regular subnets (burn half-life, burn increase multiplier, owner-cut flags, or the subnet emission toggle) was targeted at the root network. Check that the `netuid` argument is not the root netuid 0.                                                        |
| [`NotRootSubnet`](/docs/errors/chain/NotRootSubnet)                                                                   | A call that only operates on the root network, such as setting root network weights, was given a non-root netuid. Check the netuid argument; root operations must target netuid 0.                                                                                                                      |
| [`OrderNetUidMismatch`](/docs/errors/chain/OrderNetUidMismatch)                                                       | An order inside an `execute_batched_orders` call has a `netuid` field different from the batch's `netuid` parameter, which hard-fails the entire batch. Check each order payload's `netuid` against the batch argument and split mismatched orders out.                                                 |
| [`OutOfBounds`](/docs/errors/chain/OutOfBounds)                                                                       | A pointer and length pair passed to a contract API host function references memory outside the contract's sandbox. Check the buffer pointers and lengths the contract passes to seal functions; this usually indicates a low-level contract bug.                                                        |
| [`OutputBufferTooSmall`](/docs/errors/chain/OutputBufferTooSmall)                                                     | The output buffer the contract supplied to an API call is smaller than the data the runtime needs to write back. Check the output length pointer the contract passes and enlarge the buffer; usually a contract-side bug.                                                                               |
| [`PauseFailed`](/docs/errors/chain/PauseFailed)                                                                       | A GRANDPA pause was signalled while the authority set is not live, i.e. it is already paused or a pause is already pending. Check the Grandpa `State` storage before signalling a pause.                                                                                                                |
| [`PreLogExists`](/docs/errors/chain/PreLogExists)                                                                     | An `ethereum.transact` extrinsic was submitted in a block that already carries a pre-log digest, meaning an Ethereum transaction is being injected by other means. Check the block's digest for a pre-runtime Ethereum log; transact is not allowed alongside it.                                       |
| [`ProportionOverflow`](/docs/errors/chain/ProportionOverflow)                                                         | The child proportions passed to `set_children` sum to more than u64::MAX. Reduce the per-child proportion values so their total fits in a u64; each proportion is a fraction of u64::MAX.                                                                                                               |
| [`PulseVerificationError`](/docs/errors/chain/PulseVerificationError)                                                 | BLS signature verification of a submitted drand pulse against the stored beacon configuration failed. Check the pulse's signature and round against the `BeaconConfig` storage (drand quicknet public key).                                                                                             |
| [`ReentranceDenied`](/docs/errors/chain/ReentranceDenied)                                                             | A call tried to re-enter a contract already on the call stack without reentrancy being allowed, or contract code called back into the contracts pallet through the runtime. Check the callee address against the current call stack and the ALLOW\_REENTRY call flag.                                   |
| [`RegistrationNotPermittedOnRootSubnet`](/docs/errors/chain/RegistrationNotPermittedOnRootSubnet)                     | A neuron registration or child-hotkey operation (`register`, `burned_register`, `set_children`) was called with the root netuid, where these calls are invalid. Check the netuid argument; use a regular subnet, or `root_register` for root membership.                                                |
| [`RelayerMissMatch`](/docs/errors/chain/RelayerMissMatch)                                                             | The order's `relayer` allowlist is set but the account that submitted the execution transaction is not in it. Compare the extrinsic's signing account against the `relayer` list in the signed order payload.                                                                                           |
| [`RelayerRequiredForPartialFill`](/docs/errors/chain/RelayerRequiredForPartialFill)                                   | A `partial_fill` was requested for an order whose `relayer` field is empty; partial fills are only permitted on orders that restrict who may execute them. Check the order payload and either set a relayer list or execute the full amount.                                                            |
| [`Requested`](/docs/errors/chain/Requested)                                                                           | The preimage cannot be unnoted while there are still outstanding requests for it. Check the request count in the hash's request status; all requests must be cleared before the preimage can be removed.                                                                                                |
| [`RescheduleNoChange`](/docs/errors/chain/RescheduleNoChange)                                                         | The reschedule was rejected because the new dispatch time equals the task's currently scheduled time. Check the task's existing slot in `Agenda` and pass a genuinely different `when` block.                                                                                                           |
| [`ResumeFailed`](/docs/errors/chain/ResumeFailed)                                                                     | A GRANDPA resume was signalled while the authority set is not paused, i.e. it is live or already pending a resume. Check the Grandpa `State` storage before signalling a resume.                                                                                                                        |
| [`RevealPeriodTooLarge`](/docs/errors/chain/RevealPeriodTooLarge)                                                     | `set_reveal_period` was given a commit-reveal period above the compiled-in maximum number of epochs. Lower the `reveal_period` argument; the current setting is readable from `RevealPeriodEpochs` for the netuid.                                                                                      |
| [`RevealPeriodTooSmall`](/docs/errors/chain/RevealPeriodTooSmall)                                                     | `set_reveal_period` was given a commit-reveal period below the compiled-in minimum number of epochs. Raise the `reveal_period` argument; the current setting is readable from `RevealPeriodEpochs` for the netuid.                                                                                      |
| [`RootNetUidNotAllowed`](/docs/errors/chain/RootNetUidNotAllowed)                                                     | The order or batch targets the root subnet, netuid 0, which the limit orders pallet does not serve. Check the `netuid` field of the order payload or the `netuid` parameter of the batch call and target a non-root subnet.                                                                             |
| [`SameNetuid`](/docs/errors/chain/SameNetuid)                                                                         | A stake swap or move where coldkey, hotkey, and subnet are all unchanged, so `origin_netuid` equals `destination_netuid` with nothing to transition. Check the call arguments; at least the subnet or one of the keys must differ.                                                                      |
| [`SenderInSignatories`](/docs/errors/chain/SenderInSignatories)                                                       | The multisig sender was included in the `other_signatories` list, but that list must contain only the remaining signatories. Remove the sender's own account from `other_signatories` before resubmitting.                                                                                              |
| [`SignatoriesOutOfOrder`](/docs/errors/chain/SignatoriesOutOfOrder)                                                   | The `other_signatories` list is not sorted in strictly ascending account order, which the multisig pallet requires for a canonical account derivation. Sort the list and remove duplicates before resubmitting.                                                                                         |
| [`SpecVersionNeedsToIncrease`](/docs/errors/chain/SpecVersionNeedsToIncrease)                                         | The new runtime's `spec_version` is not greater than the current one, so the upgrade is rejected. Check the `RuntimeVersion` in the new wasm and bump `spec_version` above the version currently on chain.                                                                                              |
| [`TargetBlockNumberInPast`](/docs/errors/chain/TargetBlockNumberInPast)                                               | The scheduler was given a dispatch block that is not in the future. Compare the `when` argument against the current block number and choose a strictly later block.                                                                                                                                     |
| [`TempoOutOfBounds`](/docs/errors/chain/TempoOutOfBounds)                                                             | The subnet owner gave `sudo_set_tempo` a tempo outside the allowed MIN\_TEMPO to MAX\_TEMPO range (360-50,400 blocks). Check the tempo argument against those chain constants and pick a value inside the bounds; only root may set a tempo outside them.                                               |
| [`TerminatedWhileReentrant`](/docs/errors/chain/TerminatedWhileReentrant)                                             | `seal_terminate` was called on a contract that appears more than once on the call stack, so termination was refused. Check the call chain for reentrant calls into the contract being terminated.                                                                                                       |
| [`TooFew`](/docs/errors/chain/TooFew)                                                                                 | The bulk preimage upgrade was requested with zero hashes, so there is nothing to do. Pass at least one hash to `ensure_updated`.                                                                                                                                                                        |
| [`TooFewSignatories`](/docs/errors/chain/TooFewSignatories)                                                           | The multisig signatory list is too short: `other_signatories` must contain at least one account besides the sender. Check the length of `other_signatories` against the threshold you are using.                                                                                                        |
| [`UidVecContainInvalidOne`](/docs/errors/chain/UidVecContainInvalidOne)                                               | The weight submission includes a UID that is not registered on the subnet, i.e. at least one entry is not below `SubnetworkN`. Check the `uids` argument against the subnet's neuron count in the metagraph (`btcli subnets metagraph`).                                                                |
| [`UnableToRecoverPublicKey`](/docs/errors/chain/UnableToRecoverPublicKey)                                             | While associating an EVM key, the secp256k1 public key recovered from the supplied signature could not be parsed. Check that the signature was produced by signing the expected EIP-191 message (hotkey plus block hash) with the EVM private key.                                                      |
| [`UnexpectedTimepoint`](/docs/errors/chain/UnexpectedTimepoint)                                                       | A timepoint was supplied but no multisig operation is underway for this call hash; the first approval must open the operation with no timepoint. Pass `maybe_timepoint: None` on the opening call, or verify the call hash matches an existing `Multisigs` entry.                                       |
| [`UnverifiedPulse`](/docs/errors/chain/UnverifiedPulse)                                                               | Declared for drand pulses that fail validity checks, but current code raises `PulseVerificationError` for verification failures and silently skips unverified pulses. If seen on an older runtime, check the pulse signature against `BeaconConfig`.                                                    |
| [`ValueNotInBounds`](/docs/errors/chain/ValueNotInBounds)                                                             | An admin-utils argument fell outside its allowed range: `min_burn` must be below `MinBurnUpperBound` and the subnet's max burn, `max_burn` above `MaxBurnLowerBound` and the min burn, and `max_epochs_per_block` at least 1. Check the argument against those bounds.                                  |
| [`WeightVecLengthIsLow`](/docs/errors/chain/WeightVecLengthIsLow)                                                     | The weight submission has fewer entries than the subnet's minimum (setting only a self-weight is the one exception). Compare the vector length against the `MinAllowedWeights` (min\_allowed\_weights hyperparameter) for the netuid.                                                                   |
| [`WeightVecNotEqualSize`](/docs/errors/chain/WeightVecNotEqualSize)                                                   | The `uids` and `values` vectors passed to a weight-setting call have different lengths, so they cannot be paired. Check the call arguments; both vectors must have exactly one value per UID.                                                                                                           |
| [`WrongTimepoint`](/docs/errors/chain/WrongTimepoint)                                                                 | The timepoint supplied does not match the one recorded when this multisig operation was opened. Read the correct `when` height and index from the `Multisigs` entry for the call hash and resubmit with that exact timepoint.                                                                           |
| [`XCMDecodeFailed`](/docs/errors/chain/XCMDecodeFailed)                                                               | The bytes the contract passed to `xcm_execute` or `xcm_send` could not be decoded as a versioned XCM message. Check the XCM encoding and version the contract produces against what the runtime supports.                                                                                               |
| [`ZeroShareInBatch`](/docs/errors/chain/ZeroShareInBatch)                                                             | An order's pro-rata share of the batch output floored to zero, so the whole batch was rejected rather than consuming that order's input for no payout. Check the order's `amount` relative to the batch totals and retry it in a differently composed batch.                                            |

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