Stacks Market
Error Codes
This page lists all error code prefixes across the Zest Protocol codebase for easier tracking and debugging.
Error Code Format
Error codes use a 6-digit format where:
- First 3 digits: Contract identifier (prefix)
- Last 3 digits: Specific error code within that contract
Contract Error Prefixes
| Contract | Prefix | Range | Description |
|---|---|---|---|
dao-multisig | 100xxx | u100001-u100007 | Multisig governance errors |
dao-executor | 200xxx | u200001-u200002 | Proposal execution errors |
dao-treasury | 300xxx | u300001 | Treasury operation errors |
v0-4-market | 400xxx | u400001-u400025 | Core market/lending errors |
v0-market-vault | 600xxx | u600001-u600007 | Position storage errors |
pack | 700xxx | u700001 | Bit packing utility errors |
v0-assets (registry) | 710xxx | u710001-u710008 | Asset registry errors |
v0-egroup (registry) | 720xxx | u720001-u720007 | Efficiency group errors |
v0-vault-stx | 800xxx | u800001-u800024 | STX vault errors |
v0-vault-sbtc | 801xxx | u801001-u801023 | sBTC vault errors |
v0-vault-ststx | 802xxx | u802001-u802024 | stSTX vault errors |
v0-vault-usdc | 803xxx | u803001-u803024 | USDC vault errors |
v0-vault-usdh | 804xxx | u804001-u804024 | USDH vault errors |
v0-vault-ststxbtc | 810xxx | u810001-u810024 | stSTXbtc vault errors |
Detailed Error Codes by Contract
dao-multisig (100xxx)
| Code | Name | Description |
|---|---|---|
| u100001 | ERR-DAO | Not authorized as DAO executor |
| u100002 | ERR-SIGNER | Caller is not a signer |
| u100003 | ERR-SANITY-SIGNER | Invalid signer operation |
| u100004 | ERR-SANITY-PROPOSAL | Invalid proposal operation |
| u100005 | ERR-PROPOSAL-EXPIRED | Proposal has expired |
| u100006 | ERR-IMPL-UPDATE-PENDING | Implementation update already scheduled |
| u100007 | ERR-IMPL-UPDATE-NOT-READY | Implementation update timelock not elapsed |
dao-executor (200xxx)
| Code | Name | Description |
|---|---|---|
| u200001 | ERR-AUTH | Not authorized (not current impl) |
| u200002 | ERR-INIT | Initialization failed (not deployer or already initialized) |
dao-treasury (300xxx)
| Code | Name | Description |
|---|---|---|
| u300001 | ERR-AUTH | Not authorized as DAO executor |
market (400xxx)
| Code | Name | Description |
|---|---|---|
| u400001 | ERR-AUTH | Not authorized as DAO executor |
| u400002 | ERR-AMOUNT-ZERO | Amount cannot be zero |
| u400003 | ERR-COLLATERAL-DISABLED | Collateral not enabled for this asset |
| u400004 | ERR-BORROW-DISABLED | Borrowing not enabled for this asset |
| u400005 | ERR-UNHEALTHY | Position would become unhealthy |
| u400006 | ERR-INSUFFICIENT-SCALED-DEBT | Not enough debt to repay |
| u400007 | ERR-INSUFFICIENT-COLLATERAL | Not enough collateral |
| u400008 | ERR-ZERO-LIQUIDATION-AMOUNTS | Liquidation amounts are zero |
| u400009 | ERR-UNKNOWN-VAULT | Asset ID doesn’t map to known vault |
| u400010 | ERR-ORACLE-TYPE | Unknown oracle type |
| u400011 | ERR-ORACLE-CALLCODE | Unknown oracle callcode |
| u400012 | ERR-ORACLE-PYTH | Pyth oracle call failed |
| u400013 | ERR-ORACLE-DIA | DIA oracle call failed |
| u400014 | ERR-ORACLE-INVARIANT | Oracle validation failed |
| u400015 | ERR-ORACLE-MULTI | Multi-oracle resolution failed |
| u400016 | ERR-LIQUIDATION-PAUSED | Liquidations are paused |
| u400017 | ERR-PRICE-CONFIDENCE-LOW | Oracle price confidence too low |
| u400018 | ERR-HEALTHY | Position is healthy (cannot liquidate) |
| u400019 | ERR-SLIPPAGE / ERR-ORACLE-MOCK | Slippage protection triggered / Mock oracle failed |
| u400020 | ERR-DISABLED-COLLATERAL-PRICE-FAILED | Failed to get price for disabled collateral |
| u400021 | ERR-BAD-DEBT-SOCIALIZATION-FAILED | Bad debt socialization failed |
| u400022 | ERR-PRICE-FEED-UPDATE-FAILED | Pyth price feed update failed |
| u400023 | ERR-EGROUP-ASSET-BORROW-DISABLED | Asset borrowing disabled in this egroup |
| u400024 | ERR-LIQUIDATION-BORROW-SAME-BLOCK | Cannot liquidate position borrowed in same block |
| u400025 | ERR-AUTHORIZATION | General authorization failure |
market-vault (600xxx)
| Code | Name | Description |
|---|---|---|
| u600001 | ERR-AUTH | Not authorized as market contract |
| u600002 | ERR-PAUSED | Market vault is paused |
| u600003 | ERR-AMOUNT-ZERO | Amount cannot be zero |
| u600004 | ERR-INSUFFICIENT-COLLATERAL | Insufficient collateral balance |
| u600005 | ERR-INSUFFICIENT-DEBT | Insufficient debt balance |
| u600006 | ERR-UNTRACKED-ACCOUNT | Account not tracked in registry |
| u600007 | ERR-COLLATERAL-TRANSFER-FAILED | Collateral transfer failed |
pack (700xxx)
| Code | Name | Description |
|---|---|---|
| u700001 | ERR-INVALID-U16 | Value exceeds u16 max (65535) |
assets - Registry (710xxx)
| Code | Name | Description |
|---|---|---|
| u710001 | ERR-AUTH | Not authorized as DAO executor |
| u710002 | ERR-LIMIT-REACHED | Maximum assets (64) reached |
| u710003 | ERR-ALREADY-REGISTERED | Asset already registered |
| u710004 | ERR-ALREADY-ENABLED | Asset already enabled for this type |
| u710005 | ERR-NOT-ENABLED | Asset not enabled for this type |
| u710006 | ERR-INVALID-STALENESS | Max staleness cannot be zero |
| u710007 | ERR-INVALID-ASSET | Invalid asset |
| u710008 | ERR-INVALID-ID | Invalid asset ID |
egroup - Registry (720xxx)
| Code | Name | Description |
|---|---|---|
| u720001 | ERR-AUTH | Not authorized as DAO executor |
| u720002 | ERR-ALREADY-REGISTERED | Egroup with this mask already exists |
| u720003 | ERR-LIQ-PARAMS-INVALID | Liquidation parameters invalid |
| u720004 | ERR-LIMIT-REACHED | Maximum egroups reached |
| u720005 | ERR-MASK-UPDATE-FAILED | Mask update failed |
| u720006 | ERR-SUPERSET-INVARIANT-VIOLATION | Superset egroup must have <= LTV-BORROW |
| u720007 | ERR-NO-EGROUP-FOUND | No matching egroup for user mask |
vault-* (800xxx - 810xxx)
All vaults share the same error structure with different prefixes:
| Vault | Prefix |
|---|---|
| vault-stx | 800xxx |
| vault-sbtc | 801xxx |
| vault-ststx | 802xxx |
| vault-usdc | 803xxx |
| vault-usdh | 804xxx |
| vault-ststxbtc | 810xxx |
| Suffix | Name | Description |
|---|---|---|
| 001 | ERR-AUTH | Not authorized |
| 002 | ERR-INIT | Initialization error |
| 003 | ERR-ALREADY-INITIALIZED | Vault already initialized |
| 004 | ERR-REENTRANCY | Reentrancy detected |
| 005 | ERR-RESERVE-VALIDATION | Reserve validation failed |
| 006 | ERR-PAUSED | Operation is paused |
| 007 | ERR-TOKENIZED-VAULT-PRECONDITIONS | Tokenized vault preconditions failed |
| 008 | ERR-TOKENIZED-VAULT-POSTCONDITIONS | Tokenized vault postconditions failed |
| 009 | ERR-AMOUNT-ZERO | Amount cannot be zero |
| 010 | ERR-SLIPPAGE | Slippage protection triggered |
| 011 | ERR-SUPPLY-CAP-EXCEEDED | Supply cap exceeded |
| 012 | ERR-OUTPUT-ZERO | Output amount is zero |
| 013 | ERR-INSUFFICIENT-BALANCE | Insufficient balance |
| 014 | ERR-INSUFFICIENT-LIQUIDITY | Insufficient liquidity |
| 015 | ERR-LENDING-PRECONDITIONS | Lending preconditions failed |
| 016 | ERR-LENDING-POSTCONDITIONS | Lending postconditions failed |
| 017 | ERR-NO-RESERVES | No reserves available |
| 018 | ERR-INSUFFICIENT-VAULT-LIQUIDITY | Insufficient vault liquidity |
| 019 | ERR-DEBT-CAP-EXCEEDED | Debt cap exceeded |
| 020 | ERR-INSUFFICIENT-ASSETS | Insufficient assets |
| 021 | ERR-INVALID-ADDRESS | Invalid address (null address) |
| 022 | ERR-INSUFFICIENT-FLASHLOAN-LIQUIDITY | Insufficient flashloan liquidity |
| 023/024 | ERR-FLASHLOAN-UNAUTHORIZED | Flashloan not authorized |
Debugging Tips
- Error code lookup: Find the contract by prefix (first 3 digits), then specific error by suffix (last 3 digits)
- Common patterns:
xxx001often means authorization failure (ERR-AUTH)xxx002-xxx008often validation/state errors
- DAO errors (100-300): Check multisig approval status and proposal state
- Market errors (400): Usually health/collateral/oracle related
- Vault errors (800-810): Check caps, pauses, balances, and flashloan permissions
Last updated on