2
2
pragma solidity ^ 0.8.18 ;
3
3
4
4
import {IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol " ;
5
+ import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol " ;
5
6
import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol " ;
6
7
import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol " ;
7
8
import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol " ;
@@ -11,6 +12,8 @@ import {IIBCVoucher} from "./interfaces/lombard/IIBCVoucher.sol";
11
12
import {IEurekaHandler} from "./interfaces/IEurekaHandler.sol " ;
12
13
13
14
contract EurekaHandler is IEurekaHandler , Initializable , UUPSUpgradeable , OwnableUpgradeable {
15
+ using SafeERC20 for IERC20 ;
16
+
14
17
address public ics20Transfer;
15
18
address public swapRouter;
16
19
address public lbtcVoucher;
@@ -43,10 +46,10 @@ contract EurekaHandler is IEurekaHandler, Initializable, UUPSUpgradeable, Ownabl
43
46
44
47
// Collect fees
45
48
if (fees.relayFee > 0 ) {
46
- IERC20 (transferParams.token).transferFrom (msg .sender , fees.relayFeeRecipient, fees.relayFee);
49
+ IERC20 (transferParams.token).safeTransferFrom (msg .sender , fees.relayFeeRecipient, fees.relayFee);
47
50
}
48
51
49
- IERC20 (transferParams.token).transferFrom (msg .sender , address (this ), amount);
52
+ IERC20 (transferParams.token).safeTransferFrom (msg .sender , address (this ), amount);
50
53
51
54
_sendTransfer (
52
55
IICS20TransferMsgs.SendTransferMsg ({
@@ -72,7 +75,7 @@ contract EurekaHandler is IEurekaHandler, Initializable, UUPSUpgradeable, Ownabl
72
75
) external {
73
76
require (block .timestamp < fees.quoteExpiry, "Fee quote expired " );
74
77
75
- IERC20 (swapInputToken).transferFrom (msg .sender , address (this ), swapInputAmount);
78
+ IERC20 (swapInputToken).safeTransferFrom (msg .sender , address (this ), swapInputAmount);
76
79
77
80
uint256 amountOut = _swap (swapInputToken, transferParams.token, swapInputAmount, swapCalldata);
78
81
@@ -82,7 +85,7 @@ contract EurekaHandler is IEurekaHandler, Initializable, UUPSUpgradeable, Ownabl
82
85
83
86
// Collect fees
84
87
if (fees.relayFee > 0 ) {
85
- IERC20 (transferParams.token).transfer (fees.relayFeeRecipient, fees.relayFee);
88
+ IERC20 (transferParams.token).safeTransfer (fees.relayFeeRecipient, fees.relayFee);
86
89
}
87
90
88
91
uint256 amountOutAfterFees = amountOut - _totalFees (fees);
@@ -112,10 +115,10 @@ contract EurekaHandler is IEurekaHandler, Initializable, UUPSUpgradeable, Ownabl
112
115
113
116
// Collect fees
114
117
if (fees.relayFee > 0 ) {
115
- IERC20 (lbtc).transferFrom (msg .sender , fees.relayFeeRecipient, fees.relayFee);
118
+ IERC20 (lbtc).safeTransferFrom (msg .sender , fees.relayFeeRecipient, fees.relayFee);
116
119
}
117
120
118
- IERC20 (lbtc).transferFrom (msg .sender , address (this ), amount);
121
+ IERC20 (lbtc).safeTransferFrom (msg .sender , address (this ), amount);
119
122
120
123
IERC20 (lbtc).approve (lbtcVoucher, amount);
121
124
@@ -139,13 +142,13 @@ contract EurekaHandler is IEurekaHandler, Initializable, UUPSUpgradeable, Ownabl
139
142
function lombardSpend (uint256 amount ) external {
140
143
uint256 lbtcBalanceBefore = IERC20 (lbtc).balanceOf (address (this ));
141
144
142
- IERC20 (lbtcVoucher).transferFrom (msg .sender , address (this ), amount);
145
+ IERC20 (lbtcVoucher).safeTransferFrom (msg .sender , address (this ), amount);
143
146
144
147
IIBCVoucher (lbtcVoucher).spend (amount);
145
148
146
149
uint256 lbtcBalanceAfter = IERC20 (lbtc).balanceOf (address (this ));
147
150
148
- IERC20 (lbtc).transfer (msg .sender , lbtcBalanceAfter - lbtcBalanceBefore);
151
+ IERC20 (lbtc).safeTransfer (msg .sender , lbtcBalanceAfter - lbtcBalanceBefore);
149
152
}
150
153
151
154
function _sendTransfer (IICS20TransferMsgs.SendTransferMsg memory transferMsg ) internal {
0 commit comments