Skip to content

Commit

Permalink
use safe transfer
Browse files Browse the repository at this point in the history
  • Loading branch information
WyattMufson committed Mar 12, 2024
1 parent 91b05b4 commit f1a62d1
Showing 1 changed file with 6 additions and 17 deletions.
23 changes: 6 additions & 17 deletions contracts/DoGClaim.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,19 @@ import { Strings } from "@openzeppelin/contracts/utils/Strings.sol";
import { ECDSA } from "@openzeppelin/contracts/utils/cryptography/ECDSA.sol";
import { MessageHashUtils } from "@openzeppelin/contracts/utils/cryptography/MessageHashUtils.sol";
import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";

error InsufficientBalance(uint256 requested, uint256 available);
error InvalidAddress(address addr);
error InvalidAmount(uint256 amount);
error InvalidTimestamp(uint256 timestamp);
error AlreadyClaimed(uint256 amount, uint256 timestamp);
error InvalidSignature(string message, address recovered, address signer);
error TransferFailed(address sender, address recipient, uint256 amount);

contract DoGClaim is AccessControlUpgradeable {
using ECDSA for bytes32;
using MessageHashUtils for bytes32;
using SafeERC20 for IERC20;

bytes32 public constant ADMIN_ROLE = keccak256("ADMIN_ROLE");
event ClaimSucceeded(address to, uint256 amount, uint256 timestamp);
Expand Down Expand Up @@ -74,10 +75,7 @@ contract DoGClaim is AccessControlUpgradeable {
uint256 _oldBalance = _balance;
_balance = 0;

bool success = IERC20(token).transfer(_msgSender(), _oldBalance);
if (!success) {
revert TransferFailed(address(this), _msgSender(), _oldBalance);
}
IERC20(token).safeTransfer(_msgSender(), _oldBalance);
}

function load(uint256 amount) external onlyRole(ADMIN_ROLE) {
Expand All @@ -86,10 +84,7 @@ contract DoGClaim is AccessControlUpgradeable {
}

_balance += amount;
bool success = IERC20(token).transferFrom(_msgSender(), address(this), amount);
if (!success) {
revert TransferFailed(_msgSender(), address(this), amount);
}
IERC20(token).safeTransferFrom(_msgSender(), address(this), amount);
emit BalanceLoaded(_msgSender(), amount, _balance);
}

Expand Down Expand Up @@ -172,16 +167,10 @@ contract DoGClaim is AccessControlUpgradeable {
uint256 feeAmount = amount * _feeRate / 100;
uint256 withdrawAmount = amount - feeAmount;

bool success = IERC20(token).transfer(_msgSender(), withdrawAmount);
if (!success) {
revert TransferFailed(address(this), _msgSender(), withdrawAmount);
}
IERC20(token).safeTransfer(_msgSender(), withdrawAmount);

if (feeAmount > 0) {
success = IERC20(token).transfer(feeWallet, feeAmount);
if (!success) {
revert TransferFailed(address(this), feeWallet, feeAmount);
}
IERC20(token).safeTransfer(feeWallet, feeAmount);
}

emit ClaimSucceeded(_msgSender(), amount, timestamp);
Expand Down

0 comments on commit f1a62d1

Please sign in to comment.