Snapshot-Current-Holders-Then-Send Tool (Ethereum L1 NFT Collection)
Free to download on every platform. Comes pre-installed on BotFone, BotPad and BotFlip — with extra free apps included.
About this app
WHAT IT DOES
This tool enables you to snapshot current holders of an ERC-721 NFT collection on Ethereum mainnet and distribute ERC-20 tokens to each unique holder in a single batch transaction. Instead of manually collecting holder addresses or sending tokens one by one, you specify the NFT contract and a range of token IDs. The tool queries the current owner of each token ID, aggregates unique holders, calculates the total distribution amount, and executes the batch send using the BotGentz sender contract (0xE0F4E170C434071b167ABA0e64DC3689536f2E07). The fee is paid in native ETH. The snapshot is taken at the time of execution, ensuring holders are current as of that moment.
HOW TO USE
Connect your wallet on Ethereum mainnet. Enter the address of the ERC-721 NFT contract, the range of token IDs to snapshot (start and end), the ERC-20 token you want to distribute, and the amount to send per NFT holder. The tool will query each token ID in the range, collect unique holder addresses, display the results for review, and execute the batch send. Each unique holder receives the specified amount, regardless of how many NFTs they hold. The total distribution is calculated as (unique holders × amount per holder).
TECHNICAL MECHANISM
The tool uses the ownerOf(uint256) function from the ERC-721 standard to query the current owner of each token ID in the specified range. It batches these queries to manage RPC limits and avoid rate-limiting, processing 20 token IDs at a time with progress updates. The tool aggregates unique addresses using a Set to deduplicate holders who own multiple NFTs. It reads the distribution token's decimals dynamically and converts the per-holder amount to the appropriate precision. The total distribution amount is the sum of all per-holder amounts. The tool reads the current fee from the BotGentz sender contract using the fee() view function, which is set by the contract owner and may change over time. The fee is attached to the sendERC20 transaction as the value field. The tool displays the contract owner and the fee prominently before you sign. Allowances are set to the exact total distribution amount, never unlimited. The snapshot is performed on-chain and does not rely on external indexing services, ensuring accuracy and decentralization.
WHAT IT CANNOT SEE
- Native ETH as a distribution token (only ERC-20 tokens are supported)
- Any non-ERC-721 standard (e.g., ERC-1155 is not supported)
- Token tax/fee-on-transfer mechanics for non-standard tokens
- Incorrectly entered NFT contract addresses or token IDs (no recovery)
- Contracts that reject transfers (e.g., blacklisted addresses)
- Recurring sends — each execution is a separate transaction
- Rebasing or fee-bearing tokens — assumes standard ERC-20
- Off-chain data or cross-chain state
- Gas cost estimates beyond the contract fee
- Transfers that occur after the snapshot — holders are determined at execution time
- Metadata or attributes of the NFTs (only ownership is queried)
PLEASE NOTE
This tool is designed for Ethereum mainnet (chainId 1) only and uses the standard BotGentz sender contract with native ETH fee payment. The snapshot is taken at the time of execution and does not reflect transfers that occur after the transaction is submitted. Large token ID ranges may require significant time and RPC calls — the tool batches queries to manage this, but very large ranges may be slow. The fee is read live from the contract and may change between reads and transaction execution. Always verify the contract owner, the fee amount, the holder count, and the total distribution amount before signing. You are responsible for ensuring the NFT contract address and token ID range are correct, the tokens are transferable, and you have sufficient ETH for both the fee and gas. The tool does not automatically retry failed transactions or recover from network congestion; each execution is a single, discrete operation.