> 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/secure/make-immutable.md).

# Make a Solana Token Immutable in One Flow

[Make Immutable](https://j.tools/en/tools/make-immutable) shuts down all three control roles on your token in a single transaction: mint, freeze, and the Metaplex metadata update authority. Once it lands, nobody can print more supply, freeze a holder's balance, or rewrite the name, symbol, and image, including you. That permanence is the whole point, because a token with its authorities revoked is the clearest signal a buyer can read before they touch your chart.

## What it is

Make Immutable is a one-click revoke tool. A token mint on Solana carries up to three privileged roles: a mint authority that can create new supply, a freeze authority that can freeze any holder's token account, and a metadata update authority (held under the Metaplex Token Metadata program) that can change the on-chain name, symbol, and image. This tool clears the mint and freeze authorities and locks the metadata in the same transaction. Mint and freeze are set to none outright; the metadata is locked by flipping its `isMutable` flag to false, which the Metaplex program treats as permanent. Trading is unaffected: transfers, pools, and swaps keep working exactly as before, because the lock removes admin powers and nothing else.

It works on classic SPL mints. [Token-2022](/concepts/spl-vs-token2022.md) mints are not supported yet (the transaction fails at simulation); for those, revoke the roles one at a time with [Revoke Mint](/tools/secure/revoke-mint.md) and [Revoke Freeze](/tools/secure/revoke-freeze.md), which detect the correct token program. On a classic mint, the tool reads whichever authorities it actually carries and revokes the ones you still hold. For the full background on what each role controls, the [authorities](/concepts/authorities.md) concept page is the place to start.

## Why use this tool

Holders and snipers check authorities before they buy. The [rug-proof guide](/guides/rug-proof-token.md) breaks down the risk behind each open role. Any one of them left live is a reason for a careful buyer to walk away.

You could revoke each authority separately with [Revoke Mint](/tools/secure/revoke-mint.md), [Revoke Freeze](/tools/secure/revoke-freeze.md), and [Revoke Update Authority](/tools/secure/revoke-update-authority.md), and that means three transactions, three fees, and three chances to forget one. Make Immutable does the whole lockdown in one signature. It is built for a deployer who has finished configuring a token and wants to present a clean, fully locked mint before adding liquidity or sharing the contract address.

## How it works (under the hood)

When you confirm, the app builds one transaction that bundles up to four instructions:

* A `SetAuthority` instruction to the SPL Token program, setting the **mint authority** to none. The program checks that your connected wallet is the current mint authority and then clears the field permanently.
* A second `SetAuthority` instruction setting the **freeze authority** to none, with the same current-authority check.
* A metadata update instruction to the Metaplex Token Metadata program that flips the metadata account's `isMutable` flag to false, locking the name, symbol, and image. The update authority address itself is left untouched on the account; once `isMutable` is false it can no longer change anything.
* A SOL transfer instruction that pays the platform fee to the J Tools fee wallet, in the same transaction as the revocations.

Each `SetAuthority` call only succeeds if your wallet is the present holder of that role. For the mint and freeze authorities the tool checks this up front and skips any role you no longer hold. The metadata leg is gated the same way: it is included only when the metadata account is still mutable **and** your connected wallet is its update authority. If the update authority sits with another wallet, or the metadata is already immutable, that leg is skipped and the rest of the run still goes through. When none of the three legs apply, the tool stops before your wallet opens with an already-revoked error, so nothing is sent and nothing is charged. Because everything that does apply rides in one transaction, it is atomic: either every included revoke lands and the fee is paid together, or nothing changes.

## When to use it

Use it when:

* You have finished setting the metadata and supply and you are ready to make the token permanent.
* You are about to add liquidity and want a locked mint first, so the pool launches against a token that cannot be changed.
* You want one action and one fee instead of three separate revocations.

Hold off when:

* You still need to edit the name, symbol, or image. Lock metadata last, because update authority is gone for good after this.
* You might still mint more supply for a treasury, vesting, or later distribution. Revoking mint fixes total supply permanently.
* You only need to remove one role. In that case use the single-purpose tool ([Revoke Mint](/tools/secure/revoke-mint.md), [Revoke Freeze](/tools/secure/revoke-freeze.md), or [Revoke Update Authority](/tools/secure/revoke-update-authority.md)) so you keep the others.

Following a launch checklist? The [rug-proof token guide](/guides/rug-proof-token.md) walks through every step around locking.

## Before you start

* A connected wallet that currently holds the token's authorities. You can only revoke a role you presently control.
* The token's mint address, picked with the built-in token selector so the app reads the correct mint.
* Enough SOL to cover the network fee plus the flat platform fee, which the app shows before you sign.
* A final check that the metadata and supply are exactly how you want them, since this action cannot be reversed.

## Step by step

{% stepper %}
{% step %}

### Select your token

Connect your wallet and choose the token from the selector. J Tools reads its current authorities so you can see exactly what will change.
{% endstep %}

{% step %}

### Review what gets locked

Check the three status badges (Mint, Freeze, Metadata) and the live platform fee shown next to the action.
{% endstep %}

{% step %}

### Sign once

Approve the single transaction in your wallet. Your key stays in your wallet; the app broadcasts the signed transaction. When it confirms, the token is immutable, and the result lists exactly which authorities were revoked.
{% endstep %}
{% endstepper %}

[**Open Make Immutable in the app →**](https://j.tools/en/tools/make-immutable)

## The options, explained

* **Token selector:** picks the mint you want to lock. The app reads its current mint, freeze, and update authorities so the preview reflects the real on-chain state.
* **Mint authority (revoke):** when included, sets the mint authority to none. After this, total supply is fixed and no new tokens can ever be created.
* **Freeze authority (revoke):** when included, sets the freeze authority to none. After this, no holder account can be frozen, so balances stay free to move.
* **Metadata lock:** included only when the metadata account is still mutable and your wallet is its update authority. It sets `isMutable` to false, so the name, symbol, and image can never be edited again. The update authority address stays visible on the account; after the lock it can no longer change anything.
* **Authority status row:** three badges (Mint, Freeze, Metadata) filled in from an on-chain read when you enter the mint. Mint and Freeze read **Will Revoke** when your wallet still holds them and **No Access / Already Revoked** otherwise. Metadata reads **Will Set Immutable + Revoke Update** when a metadata account exists and **Metadata Missing** when it does not. That badge only checks that metadata exists, so the leg is still skipped at build time if the metadata is already immutable or its update authority is a different wallet.
* **Live fee display:** shows the current platform fee for this action, read at the moment you load the tool, so you approve the real amount.

## Fees and costs

{% 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 %}

**Current platform fee: 0.2 SOL.** The same number appears next to the action before you sign.

| Cost                 | Amount                            |
| -------------------- | --------------------------------- |
| J Tools platform fee | 0.2 SOL                           |
| Solana network fee   | a small amount paid to validators |

On top of the platform fee, you pay the standard Solana network fee for the transaction. The app estimates it at 0.00001 SOL, a few thousand lamports. There is no rent to deposit here, because the tool clears existing authority fields rather than opening new accounts, and no metadata account is created.

The 0.2 SOL is flat. It is the same whether the run revokes all three authorities or only one, so if you hold just a single role, the dedicated tool ([Revoke Mint](/tools/secure/revoke-mint.md), [Revoke Freeze](/tools/secure/revoke-freeze.md) or [Revoke Update Authority](/tools/secure/revoke-update-authority.md)) is 0.1 SOL and cheaper. The one case where you pay nothing is when none of the three can be revoked: the run is blocked before your wallet opens.

## Common mistakes and troubleshooting

* **You are not the authority.** The connected wallet does not control one of the roles. Connect the wallet that currently holds the authorities and try again.
* **Already revoked.** If an authority was removed earlier, there is nothing left to change for it; the tool skips what is already null.
* **Authority handed to another wallet.** If you transferred a role to a different wallet, this tool cannot revoke it from your side. The current holder has to do it.
* **Wrong token selected.** Double-check the mint address in the selector before signing, since the lock is permanent.

See the [Error codes reference](/reference/error-codes.md) for more.

## Related tools

{% content-ref url="/pages/dDKMIJDsaV6TyBZPgRLH" %}
[Revoke Mint Authority](/tools/secure/revoke-mint.md)
{% endcontent-ref %}

{% content-ref url="/pages/3mfyP8upN3tiDTB59aRi" %}
[Revoke Freeze Authority](/tools/secure/revoke-freeze.md)
{% endcontent-ref %}

{% content-ref url="/pages/z1CV4bXSoyMhrzsOjmUy" %}
[Revoke Update Authority](/tools/secure/revoke-update-authority.md)
{% endcontent-ref %}

{% content-ref url="/pages/gclVFAjMJFchUipqQNOZ" %}
[Update Token Metadata](/tools/token/update-metadata.md)
{% endcontent-ref %}

{% hint style="success" %}
**J Tools is non-custodial.** We never store or transmit your private keys and never ask for your seed phrase. Every transaction is signed in your own browser, and nothing about a key ever reaches our servers. A few multi-wallet tools do let you paste private keys for throwaway hot wallets, which stay in your browser tab and are used only to sign locally. Never paste a key tied to long-term holdings, and if a page ever asks for your seed phrase, stop and close it.
{% 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/secure/make-immutable.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.
