Skip to main content

Common Error Scenarios


Scenario 1: Opening Position Fails

// Error: InsufficientFunds (2)
// Cause: User balance too low
// Solution: Deposit collateral first

await deposit(connection, programId, user, tokenMint, amount);

Scenario 2: Limit Order Not Executing

// Error: PriceConditionNotMet (82)
// Cause: Market price hasn't reached trigger
// Solution: Wait or recreate order at market price

Scenario 3: Withdrawal Rejected

// Error: RiskCheckFailed (164)
// Cause: Withdrawal would cause liquidation
// Solution: Close positions or reduce withdrawal

const userInfo = await getUserAccountInfo(
connection,
programId,
user,
tokenMint
);

const maxWithdraw = userInfo.freeBalance;

Scenario 4: Cannot Close Position

// Error: InsufficientAmount (304)
// Cause: Closing more than position size
// Solution: Close only available amount

const position = await getPositionsByPair(
connection,
programId,
user,
"BTC-USD"
);

const availableSize = position.long.size - position.long.freeze;

Error Prevention Checklist

Before Any Operation

  • Config initialized (InvalidAccount)
  • System not paused (TradingPaused)
  • User account initialized (InvalidUserAccount)

Before Trading

  • Asset initialized & enabled (AssetNotInitialized, AssetNotEnabled)
  • Pool exists & has liquidity (PoolNotFound, InsufficientLiquidity)
  • Order size within limits (OrderTooSmall, OrderTooLarge)
  • Sufficient balance (InsufficientFunds)
  • Keeper authorized (UnauthorizedKeeper)
  • Oracle price fresh (StalePriceData)

Before Closing

  • Position exists (PositionNotFound)
  • Close amount ≤ available size (InsufficientAmount)
  • Deal IDs valid (DealNotFound)

Before Deposit / Withdrawal

  • Amount ≥ minimum (DepositAmountTooSmall)
  • Withdrawal won’t cause liquidation (RiskCheckFailed)

Error Code Lookup

Convert Hex Error to Decimal

echo $((16#7B))  # Output: 123

Find Error by Code in Source

grep "= 123" error.rs