chore: Misc improvements:

- Don't use payable(receiver).transfer(amount) and use OpenZeppelin's Address.sendValue instead
- In Univ4Executor send funds to the poolManager and not msg.sender
- In OneTransferFromOnly:
  - rename method name
  - don't pass the sender but hardcode it to caller() (msg.sender)
  - Move marking the transfer as done up (before we actually transfer) to prevent reentrancy attacks

Took 18 minutes
This commit is contained in:
Diana Carvalho
2025-05-16 10:49:49 +01:00
parent 99d5df4f77
commit fcd85c047f
6 changed files with 23 additions and 29 deletions

View File

@@ -23,6 +23,7 @@ import {SafeCast} from "@uniswap/v4-core/src/libraries/SafeCast.sol";
import {TransientStateLibrary} from
"@uniswap/v4-core/src/libraries/TransientStateLibrary.sol";
import "../OneTransferFromOnly.sol";
import "@openzeppelin/contracts/utils/Address.sol";
error UniswapV4Executor__InvalidDataLength();
error UniswapV4Executor__NotPoolManager();
@@ -410,14 +411,14 @@ contract UniswapV4Executor is
} else {
if (transferFromNeeded) {
// transferFrom swapper's wallet into the core contract
_transfer(msg.sender);
_transfer(address(poolManager));
} else if (transferNeeded) {
address tokenIn = Currency.unwrap(currency);
// transfer from router contract into the core contract
if (tokenIn == address(0)) {
payable(msg.sender).transfer(amount);
Address.sendValue(payable(address(poolManager)), amount);
} else {
IERC20(tokenIn).safeTransfer(msg.sender, amount);
IERC20(tokenIn).safeTransfer(address(poolManager), amount);
}
}
// slither-disable-next-line unused-return