Skip to content
Open J Tools
Many to Many 0.001 SOL per transfer Platform fee Open tool

Many to Many Transfer moves SOL or one SPL token across paired wallets, where each sender you import pays its own matched recipient an explicit amount. The whole list runs as one batch, and every transfer is signed in your own browser, so the sender keys never touch a server.

Many to Many j.tools/en/tools/many-to-many

Open tool

Platform fee

0.001 SOL per transfer

Network fee, rent and transaction value are separate.

When this tool fits

#when-this-tool-fits
  • You have many source wallets and each one needs to fund its own specific recipient in a single run.
  • You are distributing SOL or one SPL token across a fixed sender-to-recipient mapping.
  • You already hold a list of sender private keys plus a matching list of recipient addresses, in the same order.
  • You want per-row amounts (a Max sweep on some rows, a fixed number on others) rather than one identical amount everywhere.

Before you start

#before-you-start
  • A connected wallet is optional (how to connect). It never signs and never pays; it only labels the run so the commission can be attributed. What the batch actually needs is a working RPC connection, which the page sets up for you.
  • Your sender private keys, ready to import (base58, base64, or byte-array). Keys are used only in the browser.
  • A matching list of recipient public addresses. The two lists pair by position.
  • For SPL mode, the token mint you want to move. Pick it with the built-in token selector.
  • Enough SOL in each sender to cover its amount, the platform fee, and the network base fee. SPL recipients that need a new token account add a small one-time rent on top.

Use only short-lived operational wallets; never enter a seed phrase or a long-term wallet key.

How to use it

#how-to-use-it
  1. Pick the asset and import rows

    You can connect a wallet at the top of the tool. Leave the token on SOL for native transfers, or open the token selector and pick an SPL token. Then use Import senders to paste the private keys and Import recipients to paste the addresses, in the same order.

  2. Review the pair preview

    Pick an amount mode to fill every row at once: Max sends each sender’s full spendable balance, Fixed sets one amount per row, and Percentage sends a share of each sender’s balance. Then read the Pairs table (from, to, each sender’s balance, amount, and status) and fix any pair that still needs a sender or a recipient.

  3. Execute the batch

    Check the Summary panel (platform fee for the ready count, estimated network fee, and total to send). Click Send, whose label counts the pairs that are ready, and watch each row’s status until the result window shows what was sent, failed, or skipped.

Key settings

#key-settings
  • Token type: follows the token you pick. SOL moves native SOL; any other mint makes the whole batch an SPL run.
  • Token mint: Required for SPL. The single mint moved for every pair, picked with the token selector.
  • Sender key (from): The private key that signs that row’s transfer in the browser. Accepts base58, base64, or byte-array.
  • Recipient (to): The public address that the matched sender pays.
  • Amount: The amount for that pair, in SOL units (SOL mode) or token units (SPL mode).
  • Bulk mode: Auto-fills every row at once with Max, Fixed, or Percentage. Fills live, no Apply button. Edited rows lock until you change the control.
  • Platform fee: 0.001 SOL per transfer, charged on-chain inside each sender’s own transaction. The fee wallet is set by the platform, not by you.
  • Import clean-up: An import drops repeated keys or addresses inside one paste, so the rows after a duplicate move up. Check the pairs after every import.

Fees and costs

#fees-and-costs
CostAmount
J Tools platform fee0.001 SOL per transfer
Solana network feePaid to validators during the transaction; shown in the live summary.
Rent and transaction valueRent for a new recipient token account comes from the sender; not part of the platform fee.

Before you sign

#before-you-sign

Check the live summary before signing. The app is the current source of truth for amount, fee and route.

Common issues

#common-issues
  • Rent dust skip (M2M_RENT_DUST). A row that would leave its sender with a tiny non-zero SOL balance below Solana’s rent-exempt minimum is skipped instead of failing. In SPL mode the same check applies to the SOL left after fees. Send Max, or lower the amount so the sender either keeps enough or empties fully.
  • Not enough SOL (M2M_INSUFFICIENT_SOL). The sender cannot cover its amount plus fees, or an SPL sender lacks the SOL for the fee and any new-account rent. Top that sender up. Zero-amount rows skip too.
  • Unmatched rows. A recipient with no sender across from it cannot send, and a sender with no recipient shows as missing a recipient. Line the two lists up in the same order and keep them the same length.
  • Confirmation timeout (CONFIRM_TIMEOUT). A transaction did not confirm in time, even after the tool re-sent it and checked the chain history once more, so it is marked failed. Use Keep only failed, which keeps the failed and skipped rows, and retry.
  • A sender is not a regular wallet. The address behind that key looks like a token or nonce account, so it cannot send funds and the row is skipped.
  • A long list slows down, it does not get rejected. Rows are signed and broadcast in chunks of 100, and the broadcast endpoint allows 120 requests a minute per IP. There is no fixed transfer cap, so a very long run just takes longer and needs watching row by row.

Practical tips

#practical-tips
  • Validate both sides of the pairing. Recipients are already public addresses, so they go straight into Wallet Scope. Senders come in as private keys, so derive their public addresses first and scan them in a second pass. A mispasted row is caught before it becomes a paid transfer; split lists longer than Wallet Scope’s 500-address cap across passes.
  • Use Max for clean sweeps. When you want each sender emptied to its recipient, Max accounts for fees and the rent minimum so you avoid the dust skip.
  • Split large mappings deliberately. Nothing stops you pasting thousands of pairs, but a run you cannot watch is a run you cannot fix. Break long lists into batches that keep paired rows together rather than slicing a pair across two runs.
#related-tools

Help

#help

The tool on this page

Many to Many

j.tools/en/tools/many-to-many

Platform fee
0.001 SOL per transfer
Network fee, rent and transaction value are separate.
Open tool