pragma solidity 0.8.19;
/**
bbbbbbbb dddddddd
b::::::b d::::::d
b::::::b d::::::d
b::::::b d::::::d
b:::::b d:::::d
ggggggggg ggggg aaaaaaaaaaaaa ssssssssss b:::::bbbbbbbbb aaaaaaaaaaaaa ddddddddd:::::d
g:::::::::ggg::::g a::::::::::::a ss::::::::::s b::::::::::::::bb a::::::::::::a dd::::::::::::::d
g:::::::::::::::::g aaaaaaaaa:::::ass:::::::::::::s b::::::::::::::::b aaaaaaaaa:::::a d::::::::::::::::d
g::::::ggggg::::::gg a::::as::::::ssss:::::s b:::::bbbbb:::::::b a::::ad:::::::ddddd:::::d
g:::::g g:::::g aaaaaaa:::::a s:::::s ssssss b:::::b b::::::b aaaaaaa:::::ad::::::d d:::::d
g:::::g g:::::g aa::::::::::::a s::::::s b:::::b b:::::b aa::::::::::::ad:::::d d:::::d
g:::::g g:::::g a::::aaaa::::::a s::::::s b:::::b b:::::b a::::aaaa::::::ad:::::d d:::::d
g::::::g g:::::ga::::a a:::::assssss s:::::s b:::::b b:::::ba::::a a:::::ad:::::d d:::::d
g:::::::ggggg:::::ga::::a a:::::as:::::ssss::::::s b:::::bbbbbb::::::ba::::a a:::::ad::::::ddddd::::::dd
g::::::::::::::::ga:::::aaaa::::::as::::::::::::::s b::::::::::::::::b a:::::aaaa::::::a d:::::::::::::::::d
gg::::::::::::::g a::::::::::aa:::as:::::::::::ss b:::::::::::::::b a::::::::::aa:::a d:::::::::ddd::::d
gggggggg::::::g aaaaaaaaaa aaaa sssssssssss bbbbbbbbbbbbbbbb aaaaaaaaaa aaaa ddddddddd ddddd
g:::::g
gggggg g:::::g
g:::::gg gg:::::g
g::::::ggg:::::::g
gg:::::::::::::g
ggg::::::ggg
gggggg
*/
/**
* @title GasliteDrop
* @notice Turbo gas optimized bulk transfers of ERC20, ERC721, and ETH
* @author Harrison (@PopPunkOnChain)
* @author Gaslite (@GasliteGG)
* @author Pop Punk LLC (@PopPunkLLC)
*/
contract GasliteDrop {
/**
* @notice Airdrop ERC721 tokens to a list of addresses
* @param _nft The address of the ERC721 contract
* @param _addresses The addresses to airdrop to
* @param _tokenIds The tokenIds to airdrop
*/
function airdropERC721(
address _nft,
address[] calldata _addresses,
uint256[] calldata _tokenIds
) external payable {
assembly {
// Check that the number of addresses matches the number of tokenIds
if iszero(eq(_tokenIds.length, _addresses.length)) {
revert(0, 0)
}
// transferFrom(address from, address to, uint256 tokenId)
mstore(0x00, hex"23b872dd")
// from address
mstore(0x04, caller())
// end of array
let end := add(_addresses.offset, shl(5, _addresses.length))
// diff = _addresses.offset - _tokenIds.offset
let diff := sub(_addresses.offset, _tokenIds.offset)
// Loop through the addresses
for { let addressOffset := _addresses.offset } 1 {} {
// to address
mstore(0x24, calldataload(addressOffset))
// tokenId
mstore(0x44, calldataload(sub(addressOffset, diff)))
// transfer the token
if iszero(call(gas(), _nft, 0, 0x00, 0x64, 0, 0)){
revert(0, 0)
}
// increment the address offset
addressOffset := add(addressOffset, 0x20)
// if addressOffset >= end, break
if iszero(lt(addressOffset, end)) { break }
}
}
}
/**
* @notice Airdrop ERC20 tokens to a list of addresses
* @param _token The address of the ERC20 contract
* @param _addresses The addresses to airdrop to
* @param _amounts The amounts to airdrop
* @param _totalAmount The total amount to airdrop
*/
function airdropERC20(
address _token,
address[] calldata _addresses,
uint256[] calldata _amounts,
uint256 _totalAmount
) external payable {
assembly {
// Check that the number of addresses matches the number of amounts
if iszero(eq(_amounts.length, _addresses.length)) {
revert(0, 0)
}
// transferFrom(address from, address to, uint256 amount)
mstore(0x00, hex"23b872dd")
// from address
mstore(0x04, caller())
// to address (this contract)
mstore(0x24, address())
// total amount
mstore(0x44, _totalAmount)
// transfer total amount to this contract
if iszero(call(gas(), _token, 0, 0x00, 0x64, 0, 0)){
revert(0, 0)
}
// transfer(address to, uint256 value)
mstore(0x00, hex"a9059cbb")
// end of array
let end := add(_addresses.offset, shl(5, _addresses.length))
// diff = _addresses.offset - _amounts.offset
let diff := sub(_addresses.offset, _amounts.offset)
// Loop through the addresses
for { let addressOffset := _addresses.offset } 1 {} {
// to address
mstore(0x04, calldataload(addressOffset))
// amount
mstore(0x24, calldataload(sub(addressOffset, diff)))
// transfer the tokens
if iszero(call(gas(), _token, 0, 0x00, 0x64, 0, 0)){
revert(0, 0)
}
// increment the address offset
addressOffset := add(addressOffset, 0x20)
// if addressOffset >= end, break
if iszero(lt(addressOffset, end)) { break }
}
}
}
/**
* @notice Airdrop ETH to a list of addresses
* @param _addresses The addresses to airdrop to
* @param _amounts The amounts to airdrop
*/
function airdropETH(
address[] calldata _addresses,
uint256[] calldata _amounts
) external payable {
assembly {
// Check that the number of addresses matches the number of amounts
if iszero(eq(_amounts.length, _addresses.length)) {
revert(0, 0)
}
// iterator
let i := _addresses.offset
// end of array
let end := add(i, shl(5, _addresses.length))
// diff = _addresses.offset - _amounts.offset
let diff := sub(_amounts.offset, _addresses.offset)
// Loop through the addresses
for {} 1 {} {
// transfer the ETH
if iszero(
call(gas(), calldataload(i), calldataload(add(i, diff)), 0x00, 0x00, 0x00, 0x00)
) { revert(0x00, 0x00) }
// increment the iterator
i := add(i, 0x20)
// if i >= end, break
if eq(end, i) { break }
}
}
}
}[
{
"name": "airdropERC20",
"type": "function",
"inputs": [
{
"name": "_token",
"type": "address",
"internalType": "address"
},
{
"name": "_addresses",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "_amounts",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "_totalAmount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "airdropERC721",
"type": "function",
"inputs": [
{
"name": "_nft",
"type": "address",
"internalType": "address"
},
{
"name": "_addresses",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "_tokenIds",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "airdropETH",
"type": "function",
"inputs": [
{
"name": "_addresses",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "_amounts",
"type": "uint256[]",
"internalType": "uint256[]"
}
],
"outputs": [],
"stateMutability": "payable"
}
]0x608060405234801561001057600080fd5b506103a8806100206000396000f3fe6080604052600436106100345760003560e01c80631d5659fb1461003957806382947abe1461004e578063c1a3800614610061575b600080fd5b61004c6100473660046101fc565b610074565b005b61004c61005c36600461027d565b6100ce565b61004c61006f366004610306565b610150565b82811461008057600080fd5b6323b872dd60e01b600052336004528260051b8401828503855b80356024528181033560445260008060646000808c5af16100ba57600080fd5b60200182811061009a575050505050505050565b8382146100da57600080fd5b6323b872dd60e01b60005233600452306024528060445260008060646000808a5af161010557600080fd5b63a9059cbb60e01b6000528360051b8501838603865b80356004528181033560245260008060646000808d5af161013b57600080fd5b60200182811061011b57505050505050505050565b82811461015c57600080fd5b838360051b81018584035b6000806000808487013587355af161017e57600080fd5b6020830192508282036101675750505050505050565b80356001600160a01b03811681146101ab57600080fd5b919050565b60008083601f8401126101c257600080fd5b50813567ffffffffffffffff8111156101da57600080fd5b6020830191508360208260051b85010111156101f557600080fd5b9250929050565b60008060008060006060868803121561021457600080fd5b61021d86610194565b9450602086013567ffffffffffffffff8082111561023a57600080fd5b61024689838a016101b0565b9096509450604088013591508082111561025f57600080fd5b5061026c888289016101b0565b969995985093965092949392505050565b6000806000806000806080878903121561029657600080fd5b61029f87610194565b9550602087013567ffffffffffffffff808211156102bc57600080fd5b6102c88a838b016101b0565b909750955060408901359150808211156102e157600080fd5b506102ee89828a016101b0565b979a9699509497949695606090950135949350505050565b6000806000806040858703121561031c57600080fd5b843567ffffffffffffffff8082111561033457600080fd5b610340888389016101b0565b9096509450602087013591508082111561035957600080fd5b50610366878288016101b0565b9598949750955050505056fea26469706673582212201eaa2eb11b3862990a7a0536c105ed50378efa44d5d36dc8e3363ae17b3612bd64736f6c63430008130033
0x6080604052600436106100345760003560e01c80631d5659fb1461003957806382947abe1461004e578063c1a3800614610061575b600080fd5b61004c6100473660046101fc565b610074565b005b61004c61005c36600461027d565b6100ce565b61004c61006f366004610306565b610150565b82811461008057600080fd5b6323b872dd60e01b600052336004528260051b8401828503855b80356024528181033560445260008060646000808c5af16100ba57600080fd5b60200182811061009a575050505050505050565b8382146100da57600080fd5b6323b872dd60e01b60005233600452306024528060445260008060646000808a5af161010557600080fd5b63a9059cbb60e01b6000528360051b8501838603865b80356004528181033560245260008060646000808d5af161013b57600080fd5b60200182811061011b57505050505050505050565b82811461015c57600080fd5b838360051b81018584035b6000806000808487013587355af161017e57600080fd5b6020830192508282036101675750505050505050565b80356001600160a01b03811681146101ab57600080fd5b919050565b60008083601f8401126101c257600080fd5b50813567ffffffffffffffff8111156101da57600080fd5b6020830191508360208260051b85010111156101f557600080fd5b9250929050565b60008060008060006060868803121561021457600080fd5b61021d86610194565b9450602086013567ffffffffffffffff8082111561023a57600080fd5b61024689838a016101b0565b9096509450604088013591508082111561025f57600080fd5b5061026c888289016101b0565b969995985093965092949392505050565b6000806000806000806080878903121561029657600080fd5b61029f87610194565b9550602087013567ffffffffffffffff808211156102bc57600080fd5b6102c88a838b016101b0565b909750955060408901359150808211156102e157600080fd5b506102ee89828a016101b0565b979a9699509497949695606090950135949350505050565b6000806000806040858703121561031c57600080fd5b843567ffffffffffffffff8082111561033457600080fd5b610340888389016101b0565b9096509450602087013591508082111561035957600080fd5b50610366878288016101b0565b9598949750955050505056fea26469706673582212201eaa2eb11b3862990a7a0536c105ed50378efa44d5d36dc8e3363ae17b3612bd64736f6c63430008130033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| no event logs emitted by this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| no internal transactions found for this address yet (traced blocks + on-demand) | ||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xb6f0e6…8d02e8 | airdropERC20 | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x8bd6…2137 | IN | GasliteDrop | $0.000 ETH | 0.00030526 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xd765…4db6 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0x5892…200f | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xc094…552b | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xb745…c82f | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xb223…9bfa | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xf78c…afde | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xecf9…cb1b | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xab35…07b9 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xdf30…be3e | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xa232…efe3 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xa915…fa6b | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xad77…185a | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0x6435…f417 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0x9f7c…4ec7 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xb9d7…19bb | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xd911…a32a | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xb394…9db1 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0x75e5…3547 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0x9155…552b | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0x0122…e539 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0x7742…6885 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0x4123…2237 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xc99b…db38 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0x42ac…0db4 | 20,000 TOFU | Tofu The Dog (TOFU) | |
| 0xb6f0e657…8d02e8 | Transfer | 15,082,321 | 28 days agoMon, 20 Jul 2026 23:04:57 UTC | 0x3afc…d641 | OUT | 0xd2b9…2a2a | 20,000 TOFU | Tofu The Dog (TOFU) |