Error Reference
Xian surfaces errors from a few distinct layers. Knowing which layer produced the error makes debugging much faster.
Linter Errors
The contract linter reports structured Rust compiler diagnostics. Semantic rules use xian.lint.E###; parser, IR, and admission-limit failures use xian.syntax.*, xian.ir.*, and xian.limit.* respectively. These include:
- forbidden syntax
- illegal imports
- invalid decorators
- invalid type annotations
- nested function definitions
See:
Transaction Validation Errors
These happen before execution, during mempool admission:
- invalid signature
- wrong
chain_id - nonce mismatch
- insufficient balance for the supplied chi limit on paid-fee networks
- submitted chi above the configured 0-fee transaction or block cap
These transactions do not enter the block execution path.
Runtime Execution Errors
These happen during contract execution:
- failed
assert - out-of-chi
- runtime exceptions
Execution outputs also classify these failures under error_class:
contract_assertion: a contractassertfailedcontract_error: another contract-level exception escapedchi_exceeded: execution ran out of chi budgetcall_limit_exceeded: the deterministic instruction/call cap was hit
Effects:
- state changes for that transaction are rolled back
- consumed chi are recorded; paid-fee networks charge the matching execution fee
- emitted events from that transaction are discarded
Query/Service Errors
Optional services can also fail independently:
- dashboard unavailable
- BDS disabled, catching up, or unavailable for indexed/history reads
- GraphQL unavailable because BDS is not running
- RPC or WebSocket connection failures
Those are operational errors, not consensus errors. Raw current-state ABCI queries can be healthy even when BDS-backed indexed reads are degraded or catching up.