From 25d9c15ca7810d94bd454d78b689aea78b9e50df Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Tue, 4 Feb 2025 15:15:51 +0100 Subject: [PATCH] vault: do not delete lock when burning --- contracts/vault/VaultBase.sol | 9 ++------- test/Vault.tests.js | 8 ++++++++ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/contracts/vault/VaultBase.sol b/contracts/vault/VaultBase.sol index 806a1c8..44862a7 100644 --- a/contracts/vault/VaultBase.sol +++ b/contracts/vault/VaultBase.sol @@ -179,7 +179,7 @@ abstract contract VaultBase { Fund fund, Recipient recipient ) internal { - Lock memory lock = _locks[controller][fund]; + Lock storage lock = _locks[controller][fund]; require(lock.isLocked(), LockRequired()); Account memory account = _getAccount(controller, fund, recipient); @@ -189,13 +189,8 @@ abstract contract VaultBase { ); uint128 amount = account.available + account.designated; - lock.value -= amount; - if (lock.value == 0) { - delete _locks[controller][fund]; - } else { - _locks[controller][fund] = lock; - } + lock.value -= amount; delete _accounts[controller][fund][recipient]; diff --git a/test/Vault.tests.js b/test/Vault.tests.js index 07dcd51..d286e94 100644 --- a/test/Vault.tests.js +++ b/test/Vault.tests.js @@ -129,6 +129,14 @@ describe("Vault", function () { const extending = vault.extendLock(fund, expiry - 1) await expect(extending).to.be.revertedWith("InvalidExpiry") }) + + it("does not delete lock when no tokens remain", async function () { + await token.connect(account).approve(vault.address, 30) + await vault.deposit(fund, account.address, 30) + await vault.burn(fund, account.address) + expect((await vault.getLock(fund))[0]).to.not.equal(0) + expect((await vault.getLock(fund))[1]).to.not.equal(0) + }) }) describe("depositing", function () {