Errors

internal

A chain-side invariant failed; nothing to fix client-side — report it if it persists

View as Markdown

The chain hit an internal invariant it could not uphold: an arithmetic overflow, an unreachable branch, a storage inconsistency, or a failure in an underlying pallet.

There is usually nothing to fix client-side. retry once in case it was state-dependent; if it persists, report it upstream with the exact chain error name from the diagnostic.

Remediation

A chain-side invariant failed; nothing to fix client-side — report it if it persists

Chain errors

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

Chain errorDescription
AnnouncementDepositInvariantViolatedInternal invariant failure in announce: recomputing the announcement deposit returned nothing after the pending announcements were updated. Inspect the caller's Announcements entry and the announcement deposit constants; this indicates a pallet bug rather than bad input.
ArithmeticOverflowConverting a TAO amount to alpha during batched order execution overflowed the fixed-point range, typically when the pool price is tiny relative to the batch's total buy TAO. Check the subnet's current alpha price against the batch's aggregate buy amounts.
ContractRevertedThe contract ran to completion but returned with the REVERT flag set, rolling back its state changes; only extrinsics surface this as an error. Dry-run the call via RPC and decode the returned output data for the contract's error value.
ContractTrappedThe contract aborted with a WASM trap, e.g. a panic, unreachable instruction, or memory violation, instead of returning normally. Dry-run the call with debug messages enabled and check the input data against the contract's expectations.
CurrencyErrorA balance hold, release, or burn inside pallet-safe-mode failed while managing an enter/extend deposit. Check the account's free balance and existing holds under the safe-mode EnterOrExtend hold reason.
DrandConnectionFailureDeclared for failures reaching the drand HTTP API, but pulse fetching happens in the offchain worker, which logs errors instead of raising this. Check the node's offchain worker logs and outbound connectivity to the drand endpoints.
FailedToScheduleThe scheduler could not place the call into the agenda, typically because the target block's agenda is full or the schedule parameters are unusable. Check Agenda at the target block against MaxScheduledPerBlock and pick a different block if it is saturated.
FeeOverflowFee arithmetic overflowed, either multiplying the fee per gas by gas_limit or converting the EVM fee into Substrate balance decimals. Check for absurdly large gas_limit or fee-per-gas values in the transaction.
OverflowA checked arithmetic operation overflowed, e.g. incrementing NextSubnetLeaseId when registering a leased network, or adding to a crowdloan's raised amount or contributor count. Internal guard; inspect the amounts involved as this should not occur with realistic values.
PaymentOverflowArithmetic overflowed while computing the total payment or refund for an EVM transaction, such as refunding remaining gas at the effective gas price. Check for extreme gas price or gas limit values in the transaction.
ReentrancyEVM execution re-entered the pallet while another EVM execution was already in progress on the same thread, e.g. a precompile or runtime call dispatching back into the EVM. Inspect precompiles and runtime code that invoke the EVM from within an EVM call.
StorageOverflowTemplate leftover in the drand pallet for a counter increment overflowing u32::MAX; no current code path raises it. If seen, inspect the drand pallet's stored counters for values near the u32 limit.
TerminatedInConstructorThe contract called seal_terminate inside its constructor, self-destructing during instantiation, which is forbidden. Inspect the constructor logic; termination is only allowed in regular message calls.
UidMapCouldNotBeClearedDuring a UID reshuffle or trim, clearing the subnet's Uids map left residual entries (the storage clear returned a cursor). Internal state inconsistency rather than a caller error; inspect the Uids storage for the netuid and report it.
UndefinedCatch-all EVM validation error for cases without a dedicated variant, such as a malformed EIP-7702 authorization list or an unknown validation failure. Inspect the raw transaction for unsupported fields and check the node logs.
UnderflowA checked subtraction underflowed in crowdloan accounting, e.g. raised exceeding cap when computing remaining room, or a contributor count decrement, indicating inconsistent state. Inspect the Crowdloans and Contributions entries for the crowdloan_id.
UnexpectedUnreserveLeftoverWhile lowering a commitment deposit, Currency::unreserve failed to return the full difference, leaving a leftover, which signals an internal inconsistency. Check the account's reserved balance against the deposit recorded in CommitmentOf.
Unreachableannounce_next_key could not identify the current block author via the FindAuthors lookup, which should be impossible in a normally authored block. Check the block's author digest and the shield pallet's authorship wiring.

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