diff --git a/contracts/vault/VaultBase.sol b/contracts/vault/VaultBase.sol index 42a0015..b4e3095 100644 --- a/contracts/vault/VaultBase.sol +++ b/contracts/vault/VaultBase.sol @@ -126,15 +126,13 @@ abstract contract VaultBase { require(lock.isLocked(), LockRequired()); Account memory sender = _getAccount(controller, fund, from); - Account memory receiver = _getAccount(controller, fund, to); - require(amount <= sender.balance.available, InsufficientBalance()); sender.balance.available -= amount; - receiver.balance.available += amount; - _checkAccountInvariant(sender, lock); - _accounts[controller][fund][from] = sender; + + Account memory receiver = _getAccount(controller, fund, to); + receiver.balance.available += amount; _accounts[controller][fund][to] = receiver; } diff --git a/test/Vault.tests.js b/test/Vault.tests.js index 4ab0183..f874a18 100644 --- a/test/Vault.tests.js +++ b/test/Vault.tests.js @@ -292,6 +292,12 @@ describe("Vault", function () { expect(await vault.getBalance(fund, address3)).to.equal(amount) }) + it("can transfer to self", async function () { + await setAutomine(true) + await vault.transfer(fund, address1, address1, amount) + expect(await vault.getBalance(fund, address1)).to.equal(amount); + }) + it("does not transfer more than the balance", async function () { await setAutomine(true) await expect(