This proposal consists of two key actions executed across two separate Venus Improvement Proposals (VIPs):
- BNB Chain vToken Patch — Deploys the
internalCashfix to the vToken contracts on BNB Chain, closing the donation attack vulnerability that caused the THE market incident. - Non-BNB Chain vToken Patch + Borrow Resume — Deploys the same
internalCashfix to all non-BNB Chain Venus deployments, and unpauses borrowing across all affected markets upon completion.
Background
On March 15, 2026, Venus Protocol experienced a price manipulation attack targeting the THE market, the native token of Thena, on BNB Chain. The attacker exploited a donation attack vector in the protocol’s vToken contracts: rather than depositing through the standard minting process, they transferred more than 36 million THE tokens directly to the vTHE contract address. This bypassed supply cap enforcement entirely and inflated the market’s exchange rate by approximately 3.8 times. Using this artificially inflated THE as collateral, the attacker borrowed assets including CAKE, USDC, BNB, and Bitcoin from the protocol. The incident resulted in approximately $2.15 million in bad debt.
This vulnerability is a known weakness in Compound-forked lending protocols. It had been identified in a prior Code4rena security audit of Venus, and the same technique was used in a February 2025 attack on Venus’s ZKSync deployment, which caused over $700,000 in bad debt. A full post-mortem has been published by Allez Labs here.
As a precautionary measure, borrowing on all non-BNB Chain markets has been paused as of March 20, 2026. Supply, repay, and withdraw actions remain fully operational. The pause will be lifted as part of the upcoming VIPs once the patch is deployed and validated.
As the patch involves changes to core vToken contract logic, and due to on-chain code size limitations, execution is split into two VIPs: one covering BNB Chain, and one covering all non-BNB Chain deployments.
Details
1. BNB Chain — vToken Contract Patch
The root cause of the attack is that _getCashPrior() — the internal function that reports available cash in a vToken market — previously returned the raw result of balanceOf(address(this)) on the underlying token. This meant that any direct token transfer to a vToken contract (a “donation”) would immediately inflate the reported cash balance, distorting the exchange rate and collateral values.
The fix replaces this with an internalCash storage variable that is only ever updated through the protocol’s own transfer functions:
_doTransferInincrementsinternalCashby the actual amount received when users supply assets_doTransferOutdecrementsinternalCashbefore transferring assets back to users on redemption or borrowbadDebtRecovered()incrementsinternalCashwhen bad debt is settled via Shortfall auctions, keeping cash accounting consistent
A new syncCash() function is also introduced to bootstrap internalCash to the real underlying balance immediately after the upgrade. It is gated by the AccessControlManager (ACM) and emits a CashSynced event. Direct token donations to the vToken contract can no longer influence the exchange rate, supply caps, or collateral valuations.
2. Non-BNB Chain — vToken Contract Patch + Borrow Resume
The same internalCash fix is deployed to all seven non-BNB Chain Venus Isolated Pool networks: Arbitrum One, Base Mainnet, Ethereum Mainnet, opBNB Mainnet, OP Mainnet, Unichain Mainnet, and zkSync Mainnet.
The upgrade process per network is:
- The VToken beacon is upgraded to the new implementation via
upgradeTo() syncCash()is called on every market to initializeinternalCashfrom the real underlying balance- Borrowing is unpaused across all markets on each network
Only borrowing was paused as a precautionary measure — supply, repay, and withdraw have remained fully operational throughout. The borrow pause will be lifted as part of this VIP once the patch has been deployed and syncCash() called on all markets.
Action
This proposal spans two VIPs:
1. BNB Chain Patch Fix
- Deploy the patched vToken implementation to BNB Chain
- Replaces
balanceOfbased cash reporting withinternalCashtracked internally via_doTransferIn,_doTransferOut, andbadDebtRecovered() - Calls
syncCash()on all affected markets to initializeinternalCashpost-upgrade
- Replaces
2. Non-BNB Chain Patch Fix
- Deploy the patched vToken implementation to all seven non-BNB Chain networks via beacon upgrade
- Arbitrum One, Base Mainnet, Ethereum Mainnet, opBNB Mainnet, OP Mainnet, Unichain Mainnet, zkSync Mainnet
- Calls
syncCash()on every VToken market across all seven networks post-upgrade
- Unpause borrowing across all markets on all non-BNB Chain deployments
- Supply, repay, and withdraw actions were never affected and remain operational
Summary
If approved, these VIPs will:
- Close the donation attack vulnerability on BNB Chain and all non-BNB Chain vToken contracts by replacing raw
balanceOfcash reporting with internally trackedinternalCash - Restore borrowing across all affected markets on all seven non-BNB Chain networks (Arbitrum One, Base, Ethereum, opBNB, OP Mainnet, Unichain, zkSync)
- Ensure exchange rates, supply caps, and collateral valuations can no longer be manipulated via direct token transfers to vToken contracts
- Maintain uninterrupted supply, repay, and withdraw functionality for all users throughout the patch deployment
We welcome community feedback on this proposal ahead of submitting it for a VIP vote.