Skip to content

Commit

Permalink
Merge pull request #37 from bcnmy/fix/remediations-chainlight-BTPMQ4-001
Browse files Browse the repository at this point in the history
Fix/remediations chainlight btpmq4 001
  • Loading branch information
livingrockrises authored Nov 18, 2024
2 parents 3004564 + c894397 commit 2439053
Show file tree
Hide file tree
Showing 4 changed files with 32 additions and 3 deletions.
10 changes: 10 additions & 0 deletions contracts/common/BiconomyTokenPaymasterErrors.sol
Original file line number Diff line number Diff line change
Expand Up @@ -75,4 +75,14 @@ contract BiconomyTokenPaymasterErrors {
* @notice Throws when external signer's signature has invalid length
*/
error InvalidSignatureLength();

/**
* @notice Throws when ETH withdrawal fails
*/
error WithdrawalFailed();

/**
* @notice Emitted when ETH is withdrawn from the paymaster
*/
event EthWithdrawn(address indexed recipient, uint256 indexed amount);

Check failure on line 87 in contracts/common/BiconomyTokenPaymasterErrors.sol

View workflow job for this annotation

GitHub Actions / Lint sources

Function order is incorrect, event definition can not go after custom error definition (line 82)
}
20 changes: 19 additions & 1 deletion contracts/token/BiconomyTokenPaymaster.sol
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { ReentrancyGuardTransient } from "@openzeppelin/contracts/utils/Reentran
import { IEntryPoint } from "account-abstraction/interfaces/IEntryPoint.sol";
import { PackedUserOperation, UserOperationLib } from "account-abstraction/core/UserOperationLib.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import { IERC20Metadata } from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import { SafeTransferLib } from "solady/utils/SafeTransferLib.sol";
import { BasePaymaster } from "../base/BasePaymaster.sol";
Expand Down Expand Up @@ -129,10 +130,14 @@ contract BiconomyTokenPaymaster is
// Approve swappable tokens for max amount
uint256 length = swappableTokens.length;
for (uint256 i; i < length; i++) {
IERC20(swappableTokens[i]).approve(address(uniswapRouterArg), type(uint256).max);
SafeERC20.forceApprove(IERC20(swappableTokens[i]), address(uniswapRouterArg), type(uint256).max);
}
}

receive() external payable {
// no need to emit an event here
}

/**
* @dev pull tokens out of paymaster in case they were sent to the paymaster at any point.
* @param token the token deposit to withdraw
Expand All @@ -143,6 +148,19 @@ contract BiconomyTokenPaymaster is
_withdrawERC20(token, target, amount);
}

/**
* @dev Withdraw ETH from the paymaster
* @param recipient The address to send the ETH to
* @param amount The amount of ETH to withdraw
*/
function withdrawEth(address payable recipient, uint256 amount) external payable onlyOwner nonReentrant {
(bool success,) = recipient.call{ value: amount }("");
if (!success) {
revert WithdrawalFailed();
}
emit EthWithdrawn(recipient, amount);
}

/**
* @dev pull tokens out of paymaster in case they were sent to the paymaster at any point.
* @param token the token deposit to withdraw
Expand Down
3 changes: 2 additions & 1 deletion contracts/token/swaps/Uniswapper.sol
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
pragma solidity ^0.8.27;

import "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
import "@uniswap/v3-periphery/contracts/interfaces/ISwapRouter.sol";
import "@uniswap/v3-periphery/contracts/interfaces/IPeripheryPayments.sol";

Expand Down Expand Up @@ -48,7 +49,7 @@ abstract contract Uniswapper {
}

function _setTokenPool(address token, uint24 poolFeeTier) internal {
IERC20(token).approve(address(uniswapRouter), type(uint256).max); // one time max approval
SafeERC20.forceApprove(IERC20(token), address(uniswapRouter), type(uint256).max); // one time max approval
tokenToPools[token] = poolFeeTier; // set mapping of token to uniswap pool to use for swap
}

Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
"url": "https://github.com/bcnmy"
},
"dependencies": {
"@openzeppelin/contracts": "5.0.2",
"@openzeppelin/contracts": "5.1.0",
"@rhinestone/modulekit": "^0.4.10",
"@uniswap/v3-core": "https://github.com/Uniswap/v3-core#0.8",
"@uniswap/v3-periphery": "https://github.com/Uniswap/v3-periphery#0.8",
Expand Down

0 comments on commit 2439053

Please sign in to comment.