closeYieldVault can leave residual FCM position due to precision/rounding
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 45/100
- Tipo di issue
- Bug
- Chiarezza
- Abbastanza chiara
- Stato di attività
- Ferma
- Stack tecnologico
- blockchain
- Ambito
- blockchain
Direzione di ricerca
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.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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:
- Fully unwind debt/collateral to zero (or a defined dust threshold), then burn; or
- 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)
- Collateral:
-
During close:
0.01911391 tauUSDFvswapped to0.02030333 MOETfor repayment
-
After close:
- Residual debt:
0.00008153 MOET - Residual collateral:
0.00000004 WETH
- Residual debt:
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 representable0.00000002underpays0.00000003clears debt (with small overpayment)
- Lingua principale
- Cadence
- Stelle
- 41
- Fork
- 0
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
- Include un Dockerfile o un file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di onflow/FlowYieldVaults
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 25/100
onflow/FlowYieldVaults#274 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 35/100
onflow/FlowYieldVaults#273 ·
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
onflow/FlowYieldVaults#272 ·
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 35/100
onflow/FlowYieldVaults#271 ·
-
Move all test files into `./cadence/tests`Forse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 3/5 1-2 giorni Idoneità per principianti 35/100
onflow/FlowYieldVaults#270 ·
Tutte le issue di onflow/FlowYieldVaults
Issue simili
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 77/100
blinklabs-io/dingo#5367 ·
I maintainer di solito rispondono entro 1 giorno
-
area:byron audit priority:P1
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
KD5UJC-XYZ/scarab#223 ·
I maintainer di solito rispondono entro 1 giorno
-
parse_tapscript refuses opcode 0xff, which bitcoin/bitcoin#36563 vectors spend (issue #2722)Forse già presa @fametrano l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
btclib-org/btclib#2731 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
bug priority:high testing
Difficoltà 2/5 1-3 ore Idoneità per principianti 90/100
Konfirm-xyz/konfirm-contracts#205 ·
I maintainer di solito rispondono entro 1 giorno
-
backend bug core difficulty: easy priority: low
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
trustflow-protocol/trustflow-backend#786 ·
I maintainer di solito rispondono entro 1 giorno