closeYieldVault can leave residual FCM position due to precision/rounding

未关闭
#178 1 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看

还没有人认领这个 Issue。

评估

难度
4/5
预计耗时
3-5 天
新手友好度
45/100
Issue 类型
缺陷
描述清晰度
基本清楚
活跃度
停滞
技术栈
blockchain
领域
blockchain

调研方向

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.

由索引模型根据 Issue 内容生成。

描述

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)
主要语言
Cadence
星标
41
派生
0
PR 合并指标
30 天内没有已合并 PR

环境准备

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

onflow/FlowYieldVaults 的其他 Issue

查看 onflow/FlowYieldVaults 的全部 Issue

相似的 Issue

更多 Blockchain Issue

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。