# already_exists (/docs/errors/already-exists)

The state the call would create already exists: the hotkey is already registered on the subnet, an announcement or commit is already pending, the identity/symbol is already taken, or the approval was already given.

This is often good news — the goal may already be met, so check the current state before retrying. if you meant to create something new, pick a different identifier or wait for the pending object to clear.

## Remediation [#remediation]

The object or state already exists; treat the goal as met or pick a different target

## Chain errors [#chain-errors]

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

| Chain error                                                                                   | Description                                                                                                                                                                                                                                                                         |
| --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| [`ActiveLockExists`](/docs/errors/chain/ActiveLockExists)                                     | The destination coldkey already holds a lock with nonzero locked mass on that subnet, so a new or transferred lock cannot be created there. Inspect the `Lock` storage for the (coldkey, netuid, hotkey) triple and wait for the existing lock to unlock or remove it first.        |
| [`AlreadyApproved`](/docs/errors/chain/AlreadyApproved)                                       | The sender has already approved this multisig call, so a repeat approval is redundant. Check the `Multisigs` entry for the call hash: the sender's account already appears in its `approvals` list.                                                                                 |
| [`AlreadyDeposited`](/docs/errors/chain/AlreadyDeposited)                                     | The account calling safe-mode `enter` or `extend` already has a safe-mode deposit on hold, so another cannot be placed. Check the account's `Deposits` entries and its balance held under the `EnterOrExtend` hold reason.                                                          |
| [`AlreadyFinalized`](/docs/errors/chain/AlreadyFinalized)                                     | The crowdloan's `finalized` flag is already true, so withdraw, finalize, refund, dissolve, and the update calls are all rejected. Check the `finalized` field of the `Crowdloans` entry for the given `crowdloan_id`.                                                               |
| [`AlreadyFinalizing`](/docs/errors/chain/AlreadyFinalizing)                                   | A `finalize` call was made while another finalization is still in progress, i.e. the dispatched call from a previous finalize has not cleared. Check that the `CurrentCrowdloanId` storage value is empty before retrying.                                                          |
| [`AlreadyNoted`](/docs/errors/chain/AlreadyNoted)                                             | The preimage for this hash has already been noted on-chain, so `note_preimage` has nothing to add. Check `RequestStatusFor` (or legacy `StatusFor`) for the hash before submitting the bytes again.                                                                                 |
| [`AlreadyStored`](/docs/errors/chain/AlreadyStored)                                           | The call data supplied for storage is already stored on-chain for this multisig operation. Check whether the call bytes were previously stored for this call hash before submitting them again.                                                                                     |
| [`AutoEpochAlreadyImminent`](/docs/errors/chain/AutoEpochAlreadyImminent)                     | `trigger_epoch` was called when the next automatic epoch is closer than the `AdminFreezeWindow`, so a manual trigger would have no effect. Check the subnet's tempo and blocks until the next epoch, and simply wait for it to fire.                                                |
| [`ChangePending`](/docs/errors/chain/ChangePending)                                           | A GRANDPA authority-set change has already been signalled and is still pending, so a new change cannot be scheduled. Check the Grandpa `PendingChange` and `State` storage and wait for the pending change to be applied first.                                                     |
| [`ColdKeyAlreadyAssociated`](/docs/errors/chain/ColdKeyAlreadyAssociated)                     | The destination coldkey of a coldkey swap already has staking hotkeys associated with it, so it cannot receive the swapped identity. Check the `StakingHotkeys` storage for the new coldkey and swap to a fresh, unused coldkey instead.                                            |
| [`ColdkeySwapAlreadyDisputed`](/docs/errors/chain/ColdkeySwapAlreadyDisputed)                 | `dispute_coldkey_swap` was called for a coldkey whose pending swap announcement is already under dispute. Check the `ColdkeySwapDisputes` storage for the coldkey; no further dispute action is needed.                                                                             |
| [`ColdkeySwapAnnounced`](/docs/errors/chain/ColdkeySwapAnnounced)                             | The coldkey has a pending swap announcement, so all but a small allow-list of extrinsics are blocked until the swap completes or is cleared. Check the `ColdkeySwapAnnouncements` storage for the coldkey and either finish the swap with `coldkey_swap` or clear the announcement. |
| [`DelegateDependencyAlreadyExists`](/docs/errors/chain/DelegateDependencyAlreadyExists)       | The contract called `lock_delegate_dependency` for a code hash it has already locked. Check the contract's recorded delegate dependencies before adding, and unlock the old entry first if replacing it.                                                                            |
| [`Duplicate`](/docs/errors/chain/Duplicate)                                                   | This delegate is already registered as a proxy for the delegator with the same proxy type and delay. Check the delegator's `Proxies` entry before calling `add_proxy` with the same (delegate, proxy type, delay) tuple.                                                            |
| [`DuplicateContract`](/docs/errors/chain/DuplicateContract)                                   | Instantiation would create a contract at an address already occupied by an existing contract. Check the derived contract address and vary the `salt` argument to obtain a fresh address.                                                                                            |
| [`DuplicateOffenceReport`](/docs/errors/chain/DuplicateOffenceReport)                         | The equivocation proof is valid but this offence has already been reported and recorded. Check whether an equivocation report for the same offender, session, and round was previously submitted before reporting again.                                                            |
| [`Entered`](/docs/errors/chain/Entered)                                                       | Safe-mode is currently active, so `enter` or `force_enter` cannot activate it again and `release_deposit` is blocked until it exits. Check `EnteredUntil` for the block at which safe-mode disengages.                                                                              |
| [`EpochTriggerAlreadyPending`](/docs/errors/chain/EpochTriggerAlreadyPending)                 | `trigger_epoch` was called while a previously triggered epoch is still queued for this subnet. Check the `PendingEpochAt` storage for the netuid and wait for the pending epoch to fire before triggering again.                                                                    |
| [`ExistingVestingSchedule`](/docs/errors/chain/ExistingVestingSchedule)                       | A vesting schedule already exists for the target account and this call cannot add another. Check the account's `Vesting` storage entry before attempting to set a new vested transfer or schedule.                                                                                  |
| [`Exited`](/docs/errors/chain/Exited)                                                         | Safe-mode is not currently active, so `extend`, `force_extend`, or `force_exit` have nothing to act on. Check that `EnteredUntil` contains a value before extending or exiting.                                                                                                     |
| [`FirstEmissionBlockNumberAlreadySet`](/docs/errors/chain/FirstEmissionBlockNumberAlreadySet) | `start_call` was issued for a subnet whose emissions have already been started. Check the `FirstEmissionBlockNumber` storage for the netuid; a non-empty value means the subnet is already emitting and no action is needed.                                                        |
| [`HotKeyAlreadyDelegate`](/docs/errors/chain/HotKeyAlreadyDelegate)                           | `become_delegate` was called for a hotkey that is already a delegate. Check the `Delegates` storage for the hotkey; if it has a take entry it is already delegating and no action is needed.                                                                                        |
| [`HotKeyAlreadyRegisteredInSubNet`](/docs/errors/chain/HotKeyAlreadyRegisteredInSubNet)       | A registration or hotkey swap targeted a hotkey that already holds a UID on the subnet (or, for a swap without a netuid, on any subnet). Check the `Uids` storage for the (netuid, hotkey) pair or `btcli wallet overview`; use a different hotkey or netuid.                       |
| [`NetworkDissolveAlreadyQueued`](/docs/errors/chain/NetworkDissolveAlreadyQueued)             | The subnet is already in the dissolve cleanup queue, so it cannot be queued for dissolution again. Check the `DissolveCleanupQueue` storage value for the netuid before submitting another dissolve request.                                                                        |
| [`OrderAlreadyProcessed`](/docs/errors/chain/OrderAlreadyProcessed)                           | The order id already has a terminal status: execution found it fulfilled, or `cancel_order` found any existing status for it. Check the `Orders` storage map under the blake2-256 hash of the SCALE-encoded `VersionedOrder`.                                                       |
| [`SameAutoStakeHotkeyAlreadySet`](/docs/errors/chain/SameAutoStakeHotkeyAlreadySet)           | The coldkey tried to set its auto-stake destination on a subnet to the hotkey that is already configured. Read `AutoStakeDestination` for the coldkey and netuid before calling; only a different hotkey is accepted.                                                               |
| [`SymbolAlreadyInUse`](/docs/errors/chain/SymbolAlreadyInUse)                                 | The token symbol requested for the subnet is already assigned to another subnet. Scan `TokenSymbol` across netuids and pick a symbol that is not taken.                                                                                                                             |

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