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;
}