0, "No recipients provided"); uint256 totalAmount = 0; for (uint256 i = 0; i < _amounts.length; i++) { totalAmount += _amounts[i]; } IERC20 token = IERC20(_token); require( to"> 0, "No recipients provided"); uint256 totalAmount = 0; for (uint256 i = 0; i < _amounts.length; i++) { totalAmount += _amounts[i]; } IERC20 token = IERC20(_token); require( to"> 0, "No recipients provided"); uint256 totalAmount = 0; for (uint256 i = 0; i < _amounts.length; i++) { totalAmount += _amounts[i]; } IERC20 token = IERC20(_token); require( to">
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
    function transfer(address to, uint256 amount) external returns (bool);
    function transferFrom(address from, address to, uint256 amount) external returns (bool);
    function balanceOf(address account) external view returns (uint256);
}
contract TokenAirdropper {
    event AirdropExecuted(
        address indexed token,
        address indexed sender,
        uint256 totalRecipients,
        uint256 totalAmount
    );
    function airdrop(
        address _token,
        address[] calldata _recipients,
        uint256[] calldata _amounts
    ) external {
        require(_recipients.length == _amounts.length, "Arrays length mismatch");
        require(_recipients.length > 0, "No recipients provided");
        uint256 totalAmount = 0;
        for (uint256 i = 0; i < _amounts.length; i++) {
            totalAmount += _amounts[i];
        }
        IERC20 token = IERC20(_token);
        require(
            token.transferFrom(msg.sender, address(this), totalAmount),
            "Transfer to airdropper failed"
        );
        for (uint256 i = 0; i < _recipients.length; i++) {
            require(_recipients[i] != address(0), "Invalid recipient address");
            require(_amounts[i] > 0, "Amount must be greater than 0");

            require(
                token.transfer(_recipients[i], _amounts[i]),
                "Transfer to recipient failed"
            );
        }
        emit AirdropExecuted(_token, msg.sender, _recipients.length, totalAmount);
    }
    function getAirdropCost(
        address _token,
        address[] calldata _recipients,
        uint256[] calldata _amounts
    ) external view returns (uint256) {
        require(_recipients.length == _amounts.length, "Arrays length mismatch");

        uint256 totalAmount = 0;
        for (uint256 i = 0; i < _amounts.length; i++) {
            totalAmount += _amounts[i];
        }

        return totalAmount;
    }