Skip to content

Commit 46f0558

Browse files
committed
ensure bond is returned to account owner
1 parent d07c63e commit 46f0558

File tree

3 files changed

+29
-5
lines changed

3 files changed

+29
-5
lines changed

src/EulerSwapRegistry.sol

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@ contract EulerSwapRegistry is IEulerSwapRegistry, EVCUtil {
314314
bondAmount = validityBonds[pool];
315315

316316
if (bondAmount != 0) {
317+
address owner = evc.getAccountOwner(recipient);
318+
if (owner != address(0)) recipient = owner;
317319
validityBonds[pool] = 0;
318320
(bool success,) = recipient.call{value: bondAmount}("");
319321
require(success, ChallengeMissingBond());

test/Custodian.t.sol

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
pragma solidity ^0.8.24;
33

44
import {
5-
IEVault, IEulerSwap, EulerSwapTestBase, EulerSwap, EulerSwapRegistry, TestERC20
5+
IEVC, IEVault, IEulerSwap, EulerSwapTestBase, EulerSwap, EulerSwapRegistry, TestERC20
66
} from "./EulerSwapTestBase.t.sol";
77

88
contract CuratorTest is EulerSwapTestBase {
@@ -79,4 +79,24 @@ contract CuratorTest is EulerSwapTestBase {
7979

8080
assertEq(eulerSwapRegistry.validityBond(address(eulerSwap)), 0.2e18);
8181
}
82+
83+
function test_bondsSubAccount() public {
84+
(IEulerSwap.StaticParams memory sParams, IEulerSwap.DynamicParams memory dParams) =
85+
getEulerSwapParams(1000e18, 1000e18, 1e18, 1e18, 0.85e18, 0.85e18, 0, address(0), 0, address(0));
86+
IEulerSwap.InitialState memory initialState = IEulerSwap.InitialState({reserve0: 1000e18, reserve1: 1000e18});
87+
88+
sParams.eulerAccount = address(uint160(holder) ^ 1);
89+
90+
vm.deal(holder, 0.123e18);
91+
eulerSwap = createEulerSwapFull(sParams, dParams, initialState);
92+
93+
assertEq(holder.balance, 0);
94+
95+
vm.prank(holder);
96+
evc.setAccountOperator(sParams.eulerAccount, address(eulerSwap), false);
97+
vm.prank(holder);
98+
IEVC(evc).call(address(eulerSwapRegistry), sParams.eulerAccount, 0, abi.encodeCall(EulerSwapRegistry.unregisterPool, ()));
99+
100+
assertEq(holder.balance, 0.123e18);
101+
}
82102
}

test/EulerSwapTestBase.t.sol

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -156,18 +156,20 @@ contract EulerSwapTestBase is EVaultTestBase {
156156
address predictedAddr = eulerSwapFactory.computePoolAddress(sParams, salt);
157157

158158
vm.prank(holder);
159-
evc.setAccountOperator(holder, predictedAddr, true);
159+
evc.setAccountOperator(sParams.eulerAccount, predictedAddr, true);
160160
installedOperator = predictedAddr;
161161

162162
uint256 ethBalance = holder.balance;
163+
163164
vm.prank(holder);
164165
if (expectAccountLiquidityRevert) vm.expectRevert(E_AccountLiquidity.selector);
165-
EulerSwap eulerSwap = EulerSwap(eulerSwapFactory.deployPool(sParams, dParams, initialState, salt));
166-
if (expectAccountLiquidityRevert) return eulerSwap;
166+
bytes memory result = IEVC(evc).call(address(eulerSwapFactory), sParams.eulerAccount, 0, abi.encodeCall(EulerSwapFactory.deployPool, (sParams, dParams, initialState, salt)));
167+
if (expectAccountLiquidityRevert) return EulerSwap(address(0)); // Just to return to test
168+
EulerSwap eulerSwap = EulerSwap(abi.decode(result, (address)));
167169

168170
vm.prank(holder);
169171
if (expectInsufficientValidityBondRevert) vm.expectRevert(EulerSwapRegistry.InsufficientValidityBond.selector);
170-
eulerSwapRegistry.registerPool{value: ethBalance}(address(eulerSwap));
172+
IEVC(evc).call{value: ethBalance}(address(eulerSwapRegistry), sParams.eulerAccount, ethBalance, abi.encodeCall(EulerSwapRegistry.registerPool, (address(eulerSwap))));
171173

172174
return eulerSwap;
173175
}

0 commit comments

Comments
 (0)