The Register Every strike, burn, and pool — ranked on-chain. Reputation you can check, not claim. See the ledger →
Solana
SolForger

Token creation

How to Create a Solana Tax Token (Token-2022 Transfer Fees), No Code

A Solana tax token uses the Token-2022 transfer-fee extension to withhold a percentage on every transfer — no contract code. Here is how to set the fee, cap, and treasury.


A “tax token” charges a fee on every transfer and routes it to you — the mechanic behind reflection tokens, treasury-funding tokens, and a lot of meme-coin tokenomics. On Ethereum that meant writing and auditing a custom contract. On Solana it doesn’t: the Token-2022 program has a transfer-fee extension built in, so the tax is enforced by the token itself, with no contract code at all.

This guide covers what the extension does, exactly what to set — the rate, the cap, and the authorities — the compatibility trade-off nobody mentions up front, and how to collect what you’ve accrued.

SPL vs Token-2022: why a tax token is different

A normal token uses the original SPL Token program, which has no concept of a transfer fee. A tax token uses Token-2022 (also called Token Extensions), a separate, newer program that keeps everything SPL does and adds optional features — confidential transfers, interest, and the one we care about here, transfer fees. If you want a plain token, use SPL; the difference is laid out in SPL vs Token-2022. You reach for Token-2022 specifically when you need an extension like a built-in tax.

The tax isn’t a contract bolted onto the token — it’s a property of the token itself, enforced by the program on every transfer. Nothing to deploy, nothing to audit.

How the transfer-fee extension works

Three numbers define a tax token, and it’s worth understanding each before you set them.

The fee rate, in basis points. Fees are set in basis points where 100 basis points = 1%. A 2% tax is 200, a 5% tax is 500. On each transfer, that percentage is withheld from the amount moved — send 1,000 tokens at 2% and the recipient gets 980, with 20 withheld.

The maximum fee cap. This is an absolute ceiling on any single transfer’s fee, expressed in tokens. It protects large transfers from a runaway cut — without a cap, a 2% fee on a ten-million-token transfer is 200,000 tokens, which may be more than you intend. Set the cap to the most you’d ever want a single transfer to pay.

The authorities. Two matter for a tax token: the transfer-fee-config authority (who can change the fee rate later) and the withdraw-withheld authority (who can collect the accrued fees). You can keep these, or revoke the config authority to prove the rate can never change — a trust signal, since buyers dislike a tax that can be raised on them after they buy.

Where the collected tax actually sits

This surprises people, so it’s worth being precise. Fees are not deposited into your treasury on each transfer. They’re withheld inside the recipients’ token accounts as transfers happen, accumulating there. To collect, the withdraw-withheld authority sweeps those withheld amounts into your treasury wallet in a separate on-chain action, whenever you decide to. So “collecting the tax” is a step you take, not something that happens automatically — budget for doing it periodically.

The compatibility trade-off — read this first

Here’s the honest caveat most tax-token guides skip. Because Token-2022 is a newer, separate program, support isn’t universal. Major wallets and the leading DEX aggregators handle transfer-fee tokens, and coverage keeps improving, but some venues, integrations, and tools still don’t fully support them, and a few surface warnings on them. A transfer fee also interacts with automated market makers in ways a plain token doesn’t — the pool has to account for the withheld amount.

The practical rule: decide you need the on-chain tax badly enough to accept narrower compatibility. If you just want a normal tradable token, an SPL token trades everywhere with no caveats. If the tax is core to your design, use Token-2022 — and test that the token trades where your holders will actually trade before you build around it.

How to create a tax token, step by step

  1. Connect your wallet and open the tax token creator. It’s non-custodial — your keys never leave your wallet.
  2. Set the basics — name, symbol, decimals, supply, logo — exactly as you would for a standard token.
  3. Set the transfer fee in basis points. Pick a rate you can defend to buyers; most tokens sit at 1–5%.
  4. Set the maximum fee cap — the ceiling on any single transfer’s tax.
  5. Choose the treasury wallet that will collect withdrawn fees, and decide whether to keep or revoke the fee-config authority.
  6. Review the assay line and sign. The mint, extension, metadata, and supply settle in one atomic transaction, with every cost itemized first.

Setting a fee that doesn’t scare buyers

A tax rate is a tokenomics decision with a hard ceiling: set it too high and you’ve built a soft honeypot. Buyers can technically sell a token with a punishing transfer fee, but they lose most of the proceeds to the tax, so they treat it exactly like a token they can’t sell — and avoid it. A modest, stable, capped fee reads as legitimate tokenomics; an extreme one reads as a trap. If you also revoke the fee-config authority so the rate can’t be raised later, buyers can verify the tax will stay what it is — which is worth more than a couple of extra percent.

After launch

Publish a token certificate so buyers can see the fee rate, the cap, and whether the config authority is revoked, read live from the chain. Then collect your accrued fees to the treasury on whatever schedule makes sense. The tax token creator sets all of this up in one signed transaction, with the fee, cap, and treasury spelled out before you approve.

Frequently asked questions

What is a tax token on Solana?

A tax token is a Token-2022 token with the transfer-fee extension enabled, so a percentage you set is withheld on-chain every time the token is transferred. The fee is enforced by the token program itself — there is no smart contract to write or audit. You collect the accumulated fees to a treasury wallet whenever you choose.

How are transfer fees set on a Token-2022 token?

In basis points, where 100 basis points equals 1%. So a 2% tax is 200 basis points. You also set a maximum fee cap — an absolute ceiling on how much any single transfer can be charged, which protects large transfers from an unreasonable cut. Both are stored on the mint and enforced automatically.

Where do the collected taxes go?

Fees are withheld in the recipients' token accounts as transfers happen, then swept to your treasury by the withdraw-withheld authority. Nothing lands in the treasury automatically on each transfer — you (or the authority you designate) withdraw the accumulated fees on-chain when you want to collect.

Do all wallets and exchanges support Token-2022 tax tokens?

Support has grown but is not universal. Major wallets and the leading Solana DEX aggregators handle Token-2022 transfer-fee tokens, but some venues and older integrations do not, and a few list them with warnings. Test that your token trades where you need it to before you build a community around it.

What is a reasonable transfer fee percentage?

Most tax tokens use a modest rate, commonly 1–5%. A very high transfer fee eats most of a sale and behaves like a soft honeypot — buyers can technically sell but lose most of the proceeds to the tax, so they treat it as a trap. Keep the rate low enough that the token stays worth trading.

Written by

Marcus Feld

Solana engineer, SolForger

Marcus builds the transaction-signing tooling behind SolForger's benches, from the SPL create flow to the Token-2022 tax extension. He has been writing Solana programs and web3 clients since the 2021 token boom, and spends most of his time in the weeds of the Token program, Metaplex metadata, and the quirks of getting a versioned transaction through a wallet on mobile. He writes the step-by-step guides so the people who use the tools understand exactly what they are signing.

  • SPL Token program
  • Token-2022 extensions
  • Metaplex metadata
  • Transaction lifecycle
  • TypeScript & Rust