diff --git a/contracts/contracts/vault/OETHVaultCore.sol b/contracts/contracts/vault/OETHVaultCore.sol index c437f619f5..0998d99e73 100644 --- a/contracts/contracts/vault/OETHVaultCore.sol +++ b/contracts/contracts/vault/OETHVaultCore.sol @@ -397,15 +397,21 @@ contract OETHVaultCore is VaultCore { override returns (uint256 balance) { + if (_asset != weth) { + return 0; + } + balance = super._checkBalance(_asset); - if (_asset == weth) { - WithdrawalQueueMetadata memory queue = withdrawalQueueMetadata; - // Need to remove WETH that is reserved for the withdrawal queue - if (balance + queue.claimed >= queue.queued) { - return balance + queue.claimed - queue.queued; - } + WithdrawalQueueMetadata memory queue = withdrawalQueueMetadata; + // If there is not enough WETH in the vault and strategies to cover the outstanding withdrawals. + // It can happen if more than half of the users have requested a withdrawal but have not claimed. + if (balance + queue.claimed < queue.queued) { + return 0; } + + // Need to remove WETH that is reserved for the withdrawal queue + return balance + queue.claimed - queue.queued; } /** diff --git a/contracts/test/vault/oeth-vault.js b/contracts/test/vault/oeth-vault.js index 92d7571af9..60d45f1f99 100644 --- a/contracts/test/vault/oeth-vault.js +++ b/contracts/test/vault/oeth-vault.js @@ -2149,6 +2149,11 @@ describe("OETH Vault", function () { // 100 from mints - 99 outstanding withdrawals - 2 from slashing = -1 value which is rounder up to zero expect(await fixture.oethVault.totalValue()).to.equal(0); }); + it("Should have check balance of zero", async () => { + const { oethVault, weth } = fixture; + // 100 from mints - 99 outstanding withdrawals - 2 from slashing = -1 value which is rounder up to zero + expect(await oethVault.checkBalance(weth.address)).to.equal(0); + }); it("Fail to allow user to create a new request due to too many outstanding requests", async () => { const { oethVault, matt } = fixture;