EVM Batch Transfer (Sepolia and other testnets)

Connect MetaMask or any EIP-1193 wallet on a testnet, paste addresses and amounts, and send them all with one signature per batch through a minimal, open-source disperse contract.

Transactions are signed in your wallet. This page has no server, keeps no keys and charges no fee. Test networks only. Mainnet: .

What is an EVM batch transfer?

An EVM batch transfer is a single transaction that calls a disperse contract with arrays of recipients and amounts; the contract forwards the native coin to each address, or pulls tokens with transferFrom and pushes them with transfer, all atomically. One signature replaces hundreds, and the sender pays gas once. This page is restricted to Sepolia and other testnets by a chain-ID check.

Steps

  1. Switch your wallet to Sepolia (the page offers a switch button) and make sure you hold some test ETH.
  2. Pick native coin or paste a token contract. The page reads the symbol, decimals and your balance.
  3. Pick the batch contract: the known Sepolia disperse contract, one you deployed earlier, a custom address, or deploy a fresh one (about 0.4M gas).
  4. Paste recipients, check the summary, and click Send. Watch the log; each batch links to the block explorer.

Gas and limits

The sender pays all gas. A batch of 150 native transfers to fresh addresses on Sepolia costs roughly 4 to 5 million gas in one transaction, far cheaper in signatures and time than 150 separate sends. If the wallet's estimate fails, reduce the recipients per transaction.

Verifying the contract

The BatchTransfer source is 50 lines and compiles with solc 0.8.28 (optimizer on, 200 runs). The published JSON contains the ABI and creation bytecode; you can reproduce it with the same compiler settings or verify the deployed contract on the explorer with the source file.

Related: validate the list first with the address validator, convert token amounts with the decimals converter, inspect the calldata with the ABI decoder.

Frequently asked questions

Which contract is used?

On Sepolia the page defaults to the well-known disperse contract at 0xD152f549545093347A162Dce210e7293f1452150, which has been in use since 2018 and is deployed at the same address on many chains. On other testnets, or if you prefer your own, the page deploys the BatchTransfer contract whose source is linked above; the address is remembered in your browser.

Why do I need an approval for tokens?

The contract pulls the exact total from your wallet with transferFrom and pushes it to each recipient in the same transaction. The approval is for that exact amount, not unlimited, and is consumed by the batch.

What is the maximum per transaction?

Each native transfer costs roughly 9,000 to 35,000 gas depending on whether the recipient is new; token transfers about 30,000 to 55,000. With a 30M block gas limit, 150 recipients is a safe default; raise it to 300 if the chain allows and lower it if a transaction fails with out-of-gas.

Does it work with USDT-style tokens that do not return a bool?

Yes. The BatchTransfer contract tolerates tokens that return nothing and only reverts on a false return or a revert, so legacy tokens work.

Why is my mainnet wallet rejected?

By design. Ethereum, BNB Smart Chain, Polygon, Base, Arbitrum, OP Mainnet and others are blocked at the chain-ID check and the contract deployment button is never shown. For mainnet use, see the contact note at the bottom of the tool.