Skip to content

feat(vip-667): set zero rate model on deprecated vTUSDOLD [BNB Chain] - #773

Closed
Debugger022 wants to merge 1 commit into
mainfrom
vip/667-vtusdold-zero-rate
Closed

Debugger022 wants to merge 1 commit into
mainfrom
vip/667-vtusdold-zero-rate

Conversation

@Debugger022

@Debugger022 Debugger022 commented Oct 1, 2026 •

Copy link
Copy Markdown
Contributor

Summary

This proposal sets a zero rate interest rate model on the deprecated TUSDOLD market (vTUSDOLD) on BNB Chain, so the remaining debt stops growing. Without it, the market's borrow rate reaches the protocol's hard rate ceiling within days, after which repayments, liquidations and any further change to the market revert.

Background

Mint, borrow and enter market are paused on vTUSDOLD, but interest still accrues on the remaining debt. The market has no cash and a 100% reserve factor, so all interest is booked as reserves and borrows minus reserves stays fixed at about 40,000 TUSDOLD. Utilization is computed as borrows / (cash + borrows - reserves) and is not capped, so it rises with the debt. It is about 2,800% today, and the borrow rate rises with it.

When the rate passes the VToken ceiling of 0.0005% per block, accrueInterest reverts. Every action that accrues interest first then reverts too, including repay, liquidate and _setInterestRateModel itself. At the current pace this happens at about 3.8 to 4.0 million TUSDOLD of borrows, roughly two days after October 1, 2026. Once that point is reached, the interest rate model can no longer be changed by governance and only a contract upgrade would restore the market.

This proposal uses the Fast Track timelock, which holds the _setInterestRateModel permission on vTUSDOLD, so that it executes before the ceiling is reached.

Actions

  1. Call _setInterestRateModel(address) on vTUSDOLD with the existing zero rate model WhitePaperInterestRateModel (base rate 0, multiplier 0).

The call accrues interest one final time at the current rate and then switches the model. From then on no interest accrues on vTUSDOLD, and actions that accrue interest first, such as repay and liquidate, can no longer hit the rate ceiling. Pause states, collateral factors and the reserve factor are unchanged.

The existing debt and the reserves already booked are not changed by this proposal. How to settle the remaining positions will be handled separately.

References

Voting options

  • For: Execute the proposal
  • Against: Do not execute the proposal
  • Abstain: Indifferent to execution

Reviewer notes

  • Zero rate model: 0x42Ec3Eb6F23460dFDfa3aE5688f3415CDfE0C6AD is an existing WhitePaperInterestRateModel with baseRatePerBlock = 0 and multiplierPerBlock = 0, read on chain at the fork block. No new contract is deployed.
  • State at fork block 125,068,900: getCash() = 0, totalBorrows ≈ 1,121,872.5, totalReserves ≈ 1,081,896.5, so borrows minus reserves ≈ 39,976 TUSDOLD. borrowRatePerBlock = 1.4757e12.
  • Ceiling: borrowRateMaxMantissa = 0.0005e16 (5e12) in VTokenInterfaces.sol:43, enforced by the require in VToken.sol:589 inside accrueInterest. The current rate is about 30% of it.
  • Permission: the simulation checks that the ACM allows the Fast Track timelock to call _setInterestRateModel(address) on vTUSDOLD, so the proposal is FAST_TRACK.
  • Post VIP: the simulation mines 30 days (5,760,000 blocks), calls accrueInterest(), and asserts totalBorrows and totalReserves are unchanged.

Tests: npx hardhat test simulations/vip-667/bscmainnet.ts --fork bscmainnet gives 11 passing. propose() via proposer Safe requiredGasLimit ≈ 573K (3.41% of the 16.78M per tx cap); execute() gasUsed ≈ 190K.

Utilization on vTUSDOLD is uncapped and keeps rising with the debt, so
the borrow rate will soon pass the VToken ceiling. After that
accrueInterest reverts, blocking repay, liquidate and
_setInterestRateModel itself. Fast Track is used to execute before that
point.
@Debugger022 Debugger022 self-assigned this Oct 1, 2026

@greptile-apps greptile-apps Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Your trial has ended. Reactivate Greptile to resume code reviews.

@Debugger022

Copy link
Copy Markdown
Contributor Author

@Debugger022 Debugger022 closed this Oct 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant