Skip to content

Commit 3103571

Browse files
committed
format
1 parent 8858d7a commit 3103571

File tree

2 files changed

+168
-173
lines changed

2 files changed

+168
-173
lines changed

src/RescueStrategy.sol

Lines changed: 80 additions & 83 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,10 @@ interface IFlashLoan {
3838
) external;
3939
}
4040

41-
4241
contract RescueStrategy {
43-
address immutable public rescueAccount;
44-
address immutable public earnVault;
45-
IERC20 immutable internal _asset;
42+
address public immutable rescueAccount;
43+
address public immutable earnVault;
44+
IERC20 internal immutable _asset;
4645

4746
bool internal rescueActive;
4847

@@ -51,13 +50,13 @@ contract RescueStrategy {
5150
_;
5251
}
5352

54-
modifier rescueLock() {
53+
modifier rescueLock() {
5554
require(!rescueActive, "rescue ongoing");
5655
_assertRescueMode();
5756
rescueActive = true;
58-
_;
57+
_;
5958
rescueActive = false;
60-
}
59+
}
6160

6261
modifier onlyWhenRescueActive() {
6362
require(rescueActive, "vault operations are paused");
@@ -71,59 +70,63 @@ contract RescueStrategy {
7170

7271
event Rescued(address indexed vault, uint256 assets);
7372

74-
constructor(address _rescueAccount, address _earnVault) {
75-
rescueAccount = _rescueAccount;
76-
earnVault = _earnVault;
77-
_asset = IERC20(IEulerEarn(earnVault).asset());
78-
}
73+
constructor(address _rescueAccount, address _earnVault) {
74+
rescueAccount = _rescueAccount;
75+
earnVault = _earnVault;
76+
_asset = IERC20(IEulerEarn(earnVault).asset());
77+
}
7978

8079
// ---------------- VAULT INTERFACE --------------------
8180

82-
function asset() external view returns(address) {
81+
function asset() external view returns (address) {
8382
return address(_asset);
8483
}
8584

8685
// will revert user deposits
87-
function maxDeposit(address) onlyAllowedEarnVault onlyWhenRescueActive external view returns (uint256) {
88-
return type(uint256).max;
89-
}
86+
function maxDeposit(address) external view onlyAllowedEarnVault onlyWhenRescueActive returns (uint256) {
87+
return type(uint256).max;
88+
}
9089

9190
// will revert user withdrawals
92-
function maxWithdraw(address) onlyAllowedEarnVault onlyWhenRescueActive external view returns (uint256) {
93-
return 0;
94-
}
91+
function maxWithdraw(address) external view onlyAllowedEarnVault onlyWhenRescueActive returns (uint256) {
92+
return 0;
93+
}
9594

96-
function previewRedeem(uint256) external pure returns (uint256) {
97-
return 0;
98-
}
95+
function previewRedeem(uint256) external pure returns (uint256) {
96+
return 0;
97+
}
9998

10099
// this reverts acceptCaps to prevent reusing the whitelisted strategy on other vaults
101-
function balanceOf(address) onlyAllowedEarnVault external view returns (uint256) {
102-
return 0;
103-
}
104-
105-
function deposit(uint256 amount, address) onlyAllowedEarnVault onlyWhenRescueActive external returns (uint256) {
106-
SafeERC20Permit2Lib.safeTransferFromWithPermit2(
107-
_asset,
108-
msg.sender,
109-
address(this),
110-
amount,
111-
IEulerEarn(earnVault).permit2Address()
112-
);
100+
function balanceOf(address) external view onlyAllowedEarnVault returns (uint256) {
101+
return 0;
102+
}
103+
104+
function deposit(uint256 amount, address) external onlyAllowedEarnVault onlyWhenRescueActive returns (uint256) {
105+
SafeERC20Permit2Lib.safeTransferFromWithPermit2(
106+
_asset, msg.sender, address(this), amount, IEulerEarn(earnVault).permit2Address()
107+
);
113108

114109
return amount;
115-
}
110+
}
116111

117112
// ---------------- RESCUE FUNCTIONS --------------------
118113

119114
// alternative sources of flashloan
120-
function rescueEuler(uint256 loanAmount, uint256 loops, address flashLoanVault) onlyRescueAccount rescueLock external {
115+
function rescueEuler(uint256 loanAmount, uint256 loops, address flashLoanVault)
116+
external
117+
onlyRescueAccount
118+
rescueLock
119+
{
121120
bytes memory data = abi.encode(loanAmount, loops, flashLoanVault);
122-
IFlashLoan(flashLoanVault).flashLoan(loanAmount, data);
123-
}
121+
IFlashLoan(flashLoanVault).flashLoan(loanAmount, data);
122+
}
124123

125124
// alternative sources of flashloan
126-
function rescueEulerBatch(uint256 loanAmount, uint256 loops, address flashLoanVault) onlyRescueAccount rescueLock external {
125+
function rescueEulerBatch(uint256 loanAmount, uint256 loops, address flashLoanVault)
126+
external
127+
onlyRescueAccount
128+
rescueLock
129+
{
127130
address evc = EVCUtil(earnVault).EVC();
128131

129132
SafeERC20.forceApprove(_asset, flashLoanVault, loanAmount);
@@ -161,53 +164,51 @@ contract RescueStrategy {
161164
});
162165

163166
IEVC(evc).batch(batchItems);
164-
}
167+
}
165168

166-
function rescueAave(uint256 loanAmount, uint256 loops, address pool, address feeProvider) onlyRescueAccount rescueLock external {
169+
function rescueAave(uint256 loanAmount, uint256 loops, address pool, address feeProvider)
170+
external
171+
onlyRescueAccount
172+
rescueLock
173+
{
167174
bytes memory data = abi.encode(loops, feeProvider);
168-
IFlashLoan(pool).flashLoanSimple(address(this), address(_asset), loanAmount, data, 0);
169-
}
175+
IFlashLoan(pool).flashLoanSimple(address(this), address(_asset), loanAmount, data, 0);
176+
}
170177

171178
// alternative sources of flashloan
172-
function rescueMorpho(uint256 loanAmount, uint256 loops, address morpho) onlyRescueAccount rescueLock external {
179+
function rescueMorpho(uint256 loanAmount, uint256 loops, address morpho) external onlyRescueAccount rescueLock {
173180
IFlashLoan(morpho).flashLoan(address(_asset), loanAmount, abi.encode(loops));
174-
}
181+
}
175182

176183
// ---------------- FLASHLOAN CALLBACKS --------------------
177184

178-
function onBatchLoan(uint256 loanAmount, uint256 loops) onlyWhenRescueActive external {
179-
_processFlashLoan(loanAmount, loops);
180-
}
185+
function onBatchLoan(uint256 loanAmount, uint256 loops) external onlyWhenRescueActive {
186+
_processFlashLoan(loanAmount, loops);
187+
}
181188

182-
function onFlashLoan(bytes memory data) onlyWhenRescueActive external {
189+
function onFlashLoan(bytes memory data) external onlyWhenRescueActive {
183190
(uint256 loanAmount, uint256 loops, address flashLoanSource) = abi.decode(data, (uint256, uint256, address));
184191

185-
_processFlashLoan(loanAmount, loops);
192+
_processFlashLoan(loanAmount, loops);
186193

187194
// repay the flashloan
188-
SafeERC20.safeTransfer(
189-
_asset,
190-
flashLoanSource,
191-
loanAmount
192-
);
193-
}
194-
195-
function onMorphoFlashLoan(uint256 amount, bytes memory data) onlyWhenRescueActive external {
195+
SafeERC20.safeTransfer(_asset, flashLoanSource, loanAmount);
196+
}
197+
198+
function onMorphoFlashLoan(uint256 amount, bytes memory data) external onlyWhenRescueActive {
196199
uint256 loops = abi.decode(data, (uint256));
197200

198-
_processFlashLoan(amount, loops);
201+
_processFlashLoan(amount, loops);
199202

200203
SafeERC20.forceApprove(_asset, msg.sender, amount);
201-
}
204+
}
202205

203206
// aave callback
204-
function executeOperation(
205-
address,
206-
uint256 amount,
207-
uint256 premium,
208-
address,
209-
bytes calldata data
210-
) onlyWhenRescueActive external returns (bool) {
207+
function executeOperation(address, uint256 amount, uint256 premium, address, bytes calldata data)
208+
external
209+
onlyWhenRescueActive
210+
returns (bool)
211+
{
211212
(uint256 loops, address feeProvider) = abi.decode(data, (uint256, address));
212213
SafeERC20.safeTransferFrom(_asset, feeProvider, address(this), premium);
213214

@@ -220,29 +221,25 @@ contract RescueStrategy {
220221
// ---------------- HELPERS AND INTERNAL --------------------
221222

222223
// The contract is not supposed to hold any value, but in case of any issues rescue account can exec arbitrary call
223-
function call(address target, bytes memory payload) onlyRescueAccount external {
224-
(bool success,) = target.call(payload);
225-
require(success, "call failed");
226-
}
224+
function call(address target, bytes memory payload) external onlyRescueAccount {
225+
(bool success,) = target.call(payload);
226+
require(success, "call failed");
227+
}
227228

228-
fallback() external {
229-
revert("vault operations are paused");
230-
}
229+
fallback() external {
230+
revert("vault operations are paused");
231+
}
231232

232233
function _processFlashLoan(uint256 loanAmount, uint256 loops) internal {
233-
SafeERC20Permit2Lib.forceApproveMaxWithPermit2(
234-
_asset,
235-
earnVault,
236-
address(0)
237-
);
238-
239-
// deposit to earn, create shares. Assets will come back here if the strategy is first in supply queue
240-
for (uint256 i = 0; i < loops; i++) {
234+
SafeERC20Permit2Lib.forceApproveMaxWithPermit2(_asset, earnVault, address(0));
235+
236+
// deposit to earn, create shares. Assets will come back here if the strategy is first in supply queue
237+
for (uint256 i = 0; i < loops; i++) {
241238
IERC4626(earnVault).deposit(loanAmount, address(this));
242239
}
243240

244241
// withdraw as much as possible to the receiver
245-
uint256 rescuedAmount = IERC4626(earnVault).maxWithdraw(address(this));
242+
uint256 rescuedAmount = IERC4626(earnVault).maxWithdraw(address(this));
246243
IERC4626(earnVault).withdraw(rescuedAmount, rescueAccount, address(this));
247244

248245
// send the remaining shares to the receiver

0 commit comments

Comments
 (0)