Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

closeYieldVault can leave residual FCM position due to precision/rounding

Abierto
#178 1 comentario 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
45/100
Tipo de issue
Error
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
blockchain
Área
blockchain

Línea de trabajo

Start at closeYieldVault and trace how the UFix64 amounts and swap quote are used to repay debt and unwind collateral. Add precision edge-case tests around the UFix64 minimum unit of 0.00000001, using the numerical example as a guide. Done means closeYieldVault either leaves zero or explicitly allowed dust, or reverts without burning the strategy.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Summary

closeYieldVault can succeed while leaving a tiny non-zero FCM position (small residual debt/collateral).

Root cause: close flow relies on UFix64 (8 decimals) plus swap quote rounding, so exact repay amounts are not always representable in one pass.

This is separate from #152.

Why this matters

  • A user expects "close" to mean fully closed.
  • Current behavior can leave a small residual position after close.
  • Residual is usually tiny, but this breaks close invariants and creates inconsistent behavior.

Expected behavior

On close, protocol should either:

  1. Fully unwind debt/collateral to zero (or a defined dust threshold), then burn; or
  2. Revert and keep vault open if full unwind cannot be guaranteed.

Acceptance criteria

  • After closeYieldVault, residual debt/collateral is zero (or <= explicit dust threshold).
  • No successful close that burns strategy while leaving non-zero position above threshold.
  • Precision edge-case tests added around UFix64 minimum unit (0.00000001).

Numerical example (what is happening)

Observed close flow (mainnet investigation):

  • Before close:

    • Collateral: 0.00001000 WETH
    • Debt: 0.02038486 MOET
    • getYieldVaultBalance(): 0.00000996 WETH (less than full collateral)
  • During close:

    • 0.01911391 tauUSDFv swapped to 0.02030333 MOET for repayment
  • After close:

    • Residual debt: 0.00008153 MOET
    • Residual collateral: 0.00000004 WETH

Precision constraint:

  • Price used: 3312.54037990 MOET/WETH
  • Exact collateral needed for residual debt: ~0.00000002461253 WETH
  • UFix64 step is 0.00000001, so exact amount is not representable
    • 0.00000002 underpays
    • 0.00000003 clears debt (with small overpayment)
Lenguaje dominante
Cadence
Estrellas
41
Forks
0
Métricas de merge de PR
Sin PR fusionados en 30 d

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de onflow/FlowYieldVaults

Todos los issues de onflow/FlowYieldVaults

Issues similares

Más issues de Blockchain

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.