Skip to content

lending.pool_snapshot: totals aggregate non-borrowable collateral — reports 33% utilization / $29.9M available on a pool at 100% / $0 #73

Description

@spouletmathis

Interface: MCP (via alter-cli mcp)
Alter version: 1.25.0
Platform: macOS 26.6.1 (Build 25G76)
Date: 2026-08-14

Résumé

Sur un pool dont certaines réserves ne sont pas empruntables, totals agrège collatéral pur et actifs empruntables. Résultat : une utilisation de 33 % et $29,9M de liquidité disponible sur un pool réellement à 100 % d'utilisation et $0 de liquidité.

Le détail par réserve est correct — seul l'agrégat induit en erreur.

Repro

alter-cli mcp lending.pool_snapshot --json '{
  "network":"gnosis",
  "pool_address":"0xFb9b496519fCa8473fba1af0850B6B8F476BFdB3",
  "block_tag":"latest"
}' --timeout 90

Observé

totals:
  total_supply_usd:        44 574 025.84
  available_liquidity_usd: 29 936 466.88
  total_debt_usd:          14 711 414.74
  utilization_pct:         33.0

reserves (corrects) :
  WXDAI       supply=5 862 312.02   debt=5 863 207.29  avail=0.0          util=100.02
  USDC        supply=8 843 646.07   debt=8 844 974.11  avail=0.0          util=100.02
  RTW-USD-01  supply=29 868 067.75  debt=0.0           avail=29 936 466.38 util=0.0
  REUSD       supply=0.0            debt=3 233.34      avail=0.5          util=0.0

Attendu

utilization_pct: 100.02 et available_liquidity_usd: 0.0, calculés sur les seuls actifs empruntables (USDC + WXDAI).

RTW-USD-01 est un collatéral pur : borrowing_enabled = false on-chain, LTV 60 %. Sa "liquidité disponible" de $29,9M n'est empruntable par personne. L'inclure dans l'agrégat masque exactement l'information critique sur ce pool : il est gelé, plus aucun prêteur ne peut retirer.

Cause probable — borrowing_enabled non renseigné

Toutes les réserves remontent borrowing_enabled: None, y compris USDC/WXDAI (empruntables) et RTW-USD-01 (non empruntable). Le champ existe dans le schéma mais n'est pas peuplé, ce qui explique sans doute que l'agrégation ne puisse pas distinguer les deux catégories.

À noter : debt_totals_by_asset_type classe correctement collateral_only: 14711402.52, la structure de classification est donc déjà en place côté données.

Suggestions

  1. Peupler borrowing_enabled par réserve depuis la configuration on-chain.
  2. Exclure les réserves non empruntables de utilization_pct et available_liquidity_usd, ou exposer les deux agrégats côte à côte (borrowable_totals existe déjà mais retourne reserve_count: 0 et des zéros).

Impact

Sur RMM v3 (le pool utilisé ici), l'écart entre "33 % d'utilisation, $29,9M disponibles" et "100 %, $0 disponible" est la différence entre un pool sain et un pool en crise de liquidité depuis janvier 2026. Notre script contourne en recalculant sur USDC+WXDAI uniquement, mais un agent qui lit totals de bonne foi conclut l'inverse de la réalité.

Metadata

Metadata

Assignees

Labels

bugSomething isn't working

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions