Airdrop
0xa5a3497bc7835d7afe7ea87b8fdda5737dcb7f6b
Verification
Verified
v0.8.28+commit.7893614a
Type
Contract
1,747 bytes
ABI entries
7
0 read · 3 write
License
none
Contract information
- Address
- 0xa5a3497bc7835d7afe7ea87b8fdda5737dcb7f6b
- Chain
- Robinhood Chain (4663)
- Compiler
- v0.8.28+commit.7893614a
- Optimization
- Enabled
- Creator
- 0xc34df8fbeB…49A33d7610
- Creation tx
- 0x2d731ff784…d56fbcde96
Token
Not a token
This contract does not expose ERC-20 metadata.
Read contract (0)
No read functions
The ABI is unavailable or exposes no view functions.
ABI
[
{
"inputs": [],
"name": "EtherTransferFailed",
"type": "error"
},
{
"inputs": [],
"name": "InsufficientEther",
"type": "error"
},
{
"inputs": [],
"name": "InvalidArrays",
"type": "error"
},
{
"inputs": [
{
"internalType": "address",
"name": "token",
"type": "address"
}
],
"name": "SafeERC20FailedOperation",
"type": "error"
},
{
"inputs": [
{
"internalType": "address[]",
"name": "recipients",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
}
],
"name": "airdropEther",
"outputs": [],
"stateMutability": "payable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address[]",
"name": "recipients",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
}
],
"name": "airdropToken",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "contract IERC20",
"name": "token",
"type": "address"
},
{
"internalType": "address[]",
"name": "recipients",
"type": "address[]"
},
{
"internalType": "uint256[]",
"name": "values",
"type": "uint256[]"
}
],
"name": "airdropTokenSimple",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
]Source code
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.28;
import {IERC20} from "@openzeppelin/contracts/token/ERC20/IERC20.sol";
import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol";
contract Airdrop {
using SafeERC20 for IERC20;
error InvalidArrays();
error InsufficientEther();
error EtherTransferFailed();
function airdropEther(
address[] calldata recipients,
uint256[] calldata values
) external payable {
_validate(recipients.length, values.length);
uint256 total = _sum(values);
if (msg.value < total) revert InsufficientEther();
for (uint256 i; i < recipients.length; ++i) {
(bool success,) = payable(recipients[i]).call{value: values[i]}("");
if (!success) revert EtherTransferFailed();
}
uint256 refund = msg.value - total;
if (refund != 0) {
(bool success,) = payable(msg.sender).call{value: refund}("");
if (!success) revert EtherTransferFailed();
}
}
function airdropToken(
IERC20 token,
address[] calldata recipients,
uint256[] calldata values
) external {
_validate(recipients.length, values.length);
token.safeTransferFrom(msg.sender, address(this), _sum(values));
for (uint256 i; i < recipients.length; ++i)
token.safeTransfer(recipients[i], values[i]);
}
function airdropTokenSimple(
IERC20 token,
address[] calldata recipients,
uint256[] calldata values
) external {
_validate(recipients.length, values.length);
for (uint256 i; i < recipients.length; ++i)
token.safeTransferFrom(msg.sender, recipients[i], values[i]);
}
function _sum(uint256[] calldata values) private pure returns (uint256 total) {
for (uint256 i; i < values.length; ++i) total += values[i];
}
function _validate(uint256 recipients, uint256 values) private pure {
if (recipients == 0 || recipients != values) revert InvalidArrays();
}
}Chain explorer2808msChain node76ms