From 473a5fec199040e6fa74fea2621cd000c4f4e739 Mon Sep 17 00:00:00 2001 From: Mark Spanbroek Date: Tue, 11 Feb 2025 14:02:17 +0100 Subject: [PATCH] vault: fix accounting of locked value when burning designated tokens --- contracts/vault/VaultBase.sol | 4 +++- test/Vault.tests.js | 5 ++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/contracts/vault/VaultBase.sol b/contracts/vault/VaultBase.sol index 3c639a8..e62ecce 100644 --- a/contracts/vault/VaultBase.sol +++ b/contracts/vault/VaultBase.sol @@ -208,7 +208,7 @@ abstract contract VaultBase { Recipient recipient, uint128 amount ) internal { - Lock memory lock = _locks[controller][fund]; + Lock storage lock = _locks[controller][fund]; require(lock.status() == LockStatus.Locked, VaultFundNotLocked()); Account storage account = _accounts[controller][fund][recipient]; @@ -216,6 +216,8 @@ abstract contract VaultBase { account.balance.designated -= amount; + lock.value -= amount; + _token.safeTransfer(address(0xdead), amount); } diff --git a/test/Vault.tests.js b/test/Vault.tests.js index bdffdc9..dd9561e 100644 --- a/test/Vault.tests.js +++ b/test/Vault.tests.js @@ -641,7 +641,10 @@ describe("Vault", function () { await vault.deposit(fund, account.address, 30) await vault.transfer(fund, account.address, account2.address, 20) await vault.transfer(fund, account2.address, account3.address, 10) - // some tokens are burned + // some designated tokens are burned + await vault.designate(fund, account2.address, 10) + await vault.burnDesignated(fund, account2.address, 5) + // some account is burned await vault.burnAccount(fund, account2.address) await expire() // some tokens are withdrawn