> For the complete documentation index, see [llms.txt](https://docs.j.tools/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.j.tools/tools/wallets/relay-transfer.md).

# Relay Transfer

[Relay Transfer](https://j.tools/en/tools/relay-transfer) moves SOL or an SPL token from one source to a destination by hopping it through a chain of freshly generated intermediate wallets. You choose how many hops, how long to wait between each, and whether to add a priority fee. Each hop drains forward to the next, and the tool tracks the status, signature, and any error for every step along the way.

```mermaid
flowchart LR
  src[Source wallet] -->|send| hop1[Relay hop 1]
  hop1 -->|drain forward| hop2[Relay hop 2]
  hop2 -->|breaks direct link| dest[Destination wallet]

  classDef brand fill:#EF2A2A,stroke:#EF2A2A,color:#ffffff,font-weight:bold;
  classDef soft fill:#1f2937,stroke:#374151,color:#e5e7eb;
  class src,hop1,hop2 soft;
  class dest brand;
```

{% hint style="warning" %}
**About fees.** Every action has two costs: the Solana **network fee** paid to validators, and the **J Tools platform fee**. The platform fee always shows in the app before you confirm, and nothing is charged until you sign. Fees can change over time, so trust the in-app summary rather than a number you saw once.
{% endhint %}

The platform fee here is **per transaction**, and every hop is its own transaction. The final delivery hop counts too, so the total platform fee scales with the number of hops you pick. The in-app summary shows the full estimate before you run anything. See the [Fee schedule](/reference/fee-schedule.md) for the current rate.

## When to use this

* You want staged movement through several intermediate wallets instead of a single direct send.
* You want funds to pass through a configurable number of hops, with delays between them, rather than one visible transfer.
* You want per-hop progress, signatures, and error visibility, plus a recovery file of the generated wallets before the run starts.

If you instead need to fan a token out to many recipients, use [Multi Sender](/tools/wallets/multi-sender.md). To pull balances in from many wallets, use [Batch Collector](/tools/wallets/batch-collector.md). To route between two sets of wallets, see [Multi to Multi Relay](/tools/wallets/multi-to-multi-relay.md). New to keypairs and rent? The [Glossary](/getting-started/glossary.md) covers the terms used here.

## Before you start

* A source. Either a connected wallet, or a private key in the tool's private-key mode. Connected-wallet mode handles SOL only. SPL relays require private-key mode.
* A valid destination wallet address. The field validates it live as you type.
* An amount above zero, and for an SPL relay, the token's mint address (pick it with the built-in token selector).
* Enough source SOL to cover the principal plus every hop's network fee and platform fee. SPL relays need meaningfully more, because each relay wallet is pre-seeded with SOL for its fees and token-account rent. The [SPL vs Token-2022](/concepts/spl-vs-token2022.md) note explains why token transfers carry that account overhead.

{% hint style="danger" %}
**Keep the recovery file.** When a run starts, the private keys for every generated relay wallet are auto-downloaded as an `.xlsx`. If a hop fails, funds sit in the last successful intermediate wallet, and that file is the only way to recover them. Treat it like cash. Store it offline and never paste a key back into chat or any web form.
{% endhint %}

## Step by step

{% stepper %}
{% step %}

### Pick the source

Connect a wallet for a SOL relay, or switch the wallet source to private key. Adapter (connected-wallet) mode is SOL-only; an SPL relay needs private-key mode.
{% endstep %}

{% step %}

### Choose the asset and amount

Select SOL, or pick an SPL token with the token selector and enter its mint. Set the amount. In connected-wallet mode the MAX button fills the available balance minus the estimated per-hop overhead.
{% endstep %}

{% step %}

### Enter the destination

Paste the final wallet address. It is checked as a Solana public key in real time, so a bad address is caught before you run.
{% endstep %}

{% step %}

### Set the relay depth

Choose how many intermediate wallets to route through. Use a preset, the slider up to 2500, or type a custom value up to 5000. The total number of hops is the depth plus one, since the last hop delivers to the destination.
{% endstep %}

{% step %}

### Configure timing and priority

Pick a fixed delay or a random delay between hops, each from 0 to 120 seconds. There is no wait after the final hop. Optionally add a priority fee preset to nudge your transactions through during congestion.
{% endstep %}

{% step %}

### Review and execute

Check the summary: relay count, hop count, send amount, estimated destination amount, network fee, platform fee, and total cost. When it looks right, click **Execute Relay Transfer**.
{% endstep %}

{% step %}

### Let it run

On start, the recovery `.xlsx` of all generated relay keys downloads automatically. The run then sends hop by hop, draining each intermediate to the next. The table shows From, To, Status, Signature, and any Error per hop, with Solscan links.
{% endstep %}
{% endstepper %}

[**Open Relay Transfer in the app →**](https://j.tools/en/tools/relay-transfer)

{% hint style="info" %}
In private-key mode the routing runs through the server-side keypair flow, so your wallet extension is not prompted for each hop. This is why the tool's Phantom risk is rated low: the extension is not in the loop for that mode.
{% endhint %}

## The options, explained

| Field              | What it does                                                                                                                                                                                                     |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Token type         | SOL or SPL. SOL drains each hop down to zero on the way forward. SPL seeds each relay wallet with SOL for fees, then forwards the token amount unchanged.                                                        |
| Token mint         | Required for SPL. The mint of the token to relay, chosen from your wallet's token list or pasted into the token picker. Ignored for SOL.                                                                         |
| Amount             | What passes through the path. For SOL it is the amount before fees; for SPL it is the per-hop token amount. MAX (adapter mode only) fills balance minus estimated per-hop overhead.                              |
| Destination wallet | The final wallet that receives the last hop. Validated as a Solana public key as you type.                                                                                                                       |
| Relay count        | How many intermediate wallets to route through. Presets up to 2500, slider up to 2500, custom entry up to 5000. Total hops = relay count + 1.                                                                    |
| Delay mode         | Fixed waits a set number of seconds between hops; random samples a wait between a minimum and maximum. Each value is capped at 0 to 120 seconds. No delay after the final hop.                                   |
| Priority fee       | A validator tip applied per transaction. Presets run from none up to express, with a custom option. Default is none.                                                                                             |
| Source mode        | Connected wallet signs the first hop through your wallet adapter, then signs later hops with the generated relay keys in the browser. Private key runs the server-style flow. Connected-wallet mode is SOL-only. |

## If something goes wrong

* **Not enough source SOL.** A SOL relay checks that the source covers the principal plus every hop's fees. Top up and retry. SPL relays need more, since each relay wallet is seeded for fees and account rent; an underfunded source throws an insufficient-balance error.
* **A hop failed mid-run.** The chain stops at the first failure. Remaining hops are marked failed, and the funds rest in the last successful intermediate wallet. Recover them using the downloaded `.xlsx`. The tool does not auto-retry or auto-recover.
* **Rent error on the next hop.** This happens when an intermediate is left below the rent-exempt minimum. The per-hop reserve is tuned to the network fee for this reason; do not try to inflate it.
* **SPL relay blocked in connected-wallet mode.** Adapter mode is SOL-only. Switch to private-key mode for SPL.

For the full list, see the [Error codes reference](/reference/error-codes.md).

## FAQ

<details>

<summary>What happens if a hop in the middle fails?</summary>

The run stops there. Every hop after it is marked failed, and the funds stay in the last wallet that received them successfully. That wallet's key is in the `.xlsx` you downloaded at the start, so you can import it and move the funds yourself. Keep that file safe.

</details>

<details>

<summary>Why does the SPL relay cost more SOL than a SOL relay?</summary>

Each relay wallet has to pay its own transaction fees and hold rent for the token account it creates. The tool pre-seeds every hop with the SOL it needs for that, so an SPL run requires more source SOL than moving plain SOL through the same number of hops.

</details>

<details>

<summary>How many hops can I use?</summary>

Up to 5000 relay wallets (5001 hops). Remember that every hop is a separate on-chain transaction with its own network and platform fee, plus any delay you set, so cost and total runtime grow with depth. The summary shows the full estimate before you run.

</details>

<details>

<summary>Is this a swap?</summary>

No. Relay Transfer only moves and routes funds. SOL hops use plain system transfers and SPL hops use token transfers. There is no DEX, no liquidity routing, and no token conversion involved. If you want to swap, use [Swap](/tools/trade/swap.md).

</details>

<details>

<summary>Does J Tools hold the relay wallets or their keys?</summary>

No. The relay wallets are generated in your session and their keys go straight into the recovery file you download. J Tools never stores them. If you lose that file, funds stranded in an intermediate wallet cannot be recovered.

</details>

## Related tools

{% content-ref url="/pages/uVoEslmUoeflpLu9kq7x" %}
[Multi to Multi Relay](/tools/wallets/multi-to-multi-relay.md)
{% endcontent-ref %}

{% content-ref url="/pages/ABVX2mBQDoCv7DEdVmKp" %}
[Multi Sender](/tools/wallets/multi-sender.md)
{% endcontent-ref %}

{% content-ref url="/pages/7CPBHR61Y6akMdkeSBGW" %}
[Batch Collector](/tools/wallets/batch-collector.md)
{% endcontent-ref %}

{% hint style="warning" %}
**About multi-wallet mode.** This mode works with private keys you import into the page. Only use wallets you can treat as disposable, and rotate them after you are done. For everything else, J Tools stays non-custodial: you sign in your own wallet, and we never ask for its key.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.j.tools/tools/wallets/relay-transfer.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
