Why Did My TON Transfer Fail With "Exit Code 35" and How Do I Fix It?
The "Exit Code 35" error on TON means your wallet tried to execute a transaction that its smart contract logic rejected - typically because you attempted to send a token or interact with a contract in a way the wallet version does not support, or because the transaction tried to spend more value than the contract allows in a single operation. The fix usually involves switching to a compatible wallet version, splitting the transaction into smaller steps, or using a different interface like a Telegram bot or Tonkeeper that handles the logic correctly.
What "Exit Code 35" Actually Means
TON smart contracts run on the TON Virtual Machine (TVM). When a transaction fails, the TVM returns an exit code. Exit code 35 is a generic "contract logic error." It does not mean your funds were lost - the transaction simply did not execute, and your TON remains in your wallet. The error is a signal that the contract refused the operation based on its internal rules.
Common triggers for exit code 35 include:
- Wrong wallet version: TON wallets come in different smart contract versions (v4, v5, and older). Some dApps or interfaces expect a specific version. If you try to send a Jetton from a v4 wallet using a v5-only interface, or vice versa, the contract may reject the transfer.
- Jetton transfer to a non-wallet address: Jettons (TON's token standard) can only be sent to addresses that have a compatible wallet contract. Sending to a raw address that belongs to a different contract type (like a validator or a DEX pool) often triggers exit code 35.
- Insufficient TON for gas plus value: The wallet contract checks that the total outgoing value (gas + transfer amount) does not exceed its balance. If the balance is too low after reserving gas, the contract can return exit code 35.
- Multi-signature or custom contract restrictions: If your wallet is a multi-signature or custom smart contract (like those used by Telegram Wallet Bot), it may have spending limits or require specific data formats that the transaction did not match.
Step-by-Step Fixes
1. check your wallet version
Open your wallet (Tonkeeper, Wallet Bot, or another interface) and look for the wallet version. In Tonkeeper, go to Settings > Wallet and you will see "v4" or "v5" next to your address. In Wallet Bot on Telegram, the bot usually uses a v5 contract by default. If you are unsure, export your public key and check it on a TON explorer like tonscan.org or dton.io - the wallet contract type is displayed.
If you are using a dApp that expects v5, and your wallet is v4, the transaction may fail with exit code 35. The fix: use a wallet that matches. For example, if you are trying to swap tokens on Ston.fi via Tonkeeper, and Tonkeeper is set to v4, switch to a v5 wallet or use the Ston.fi web interface with a v4-compatible connection.
2. Verify the Recipient Address for Jetton Transfers
When sending Jettons, confirm the recipient address is a wallet contract (starts with "UQ..." or "EQ..." for mainnet). Do not send Jettons to a raw address like "0:..." unless you know it belongs to a wallet. If you accidentally sent to a non-wallet address, the transaction will fail with exit code 35. To fix: obtain the correct wallet address from the recipient, then retry.
3. Increase Your TON Balance for Gas
Gas fees on TON are paid in TON. If your wallet has exactly the amount you want to send plus the gas fee, but the gas fee calculation is off by a fraction, exit code 35 can occur. Add at least 0.1 TON of buffer to your wallet balance before retrying. The exact gas fee varies by transaction type (see "What Are Gas Fees on TON and How to Calculate Them Before Sending" on this site). A simple transfer costs about 0.005 TON; a Jetton transfer or contract interaction may cost 0.01 - 0.05 TON.
4. Retry Using a Different Interface
Sometimes the interface you are using (a Mini App, a web dApp, or a bot) sends malformed data to the wallet contract. Switch to a different method: - If you are using a Telegram Mini App, open the same dApp in a browser with Tonkeeper or a web wallet. - If you are using Tonkeeper, try Wallet Bot on Telegram (or vice versa). - For Jetton swaps, use the DEX's own swap interface instead of a third-party aggregator.
5. Reset the Wallet Session
If you are using a dApp via TON Connect, the session may have expired or become out of sync. Disconnect the dApp from your wallet, then reconnect and try again. In Tonkeeper, go to Settings > Connected Sites and remove the dApp. In Wallet Bot, use the "Disconnect" command.
When to seek help
If you have tried all the steps above and the error persists, check the transaction on a TON explorer. Look up your wallet address and find the failed transaction. The explorer will show the exact exit code and often a "comment" field with additional details. Paste the error into a search engine or ask in the TON community forums (like the official TON Telegram group). Be cautious about sharing your address or seed phrase - no legitimate support will ask for those.
The Short Version
Exit code 35 is a contract logic error, not a loss of funds. Fix it by matching your wallet version to the dApp, ensuring the recipient address is a wallet, adding a small TON buffer for gas, or switching to a different interface. If all else fails, look up the transaction on an explorer for more clues.
Not financial advice. dupetheduck.com publishes market data and general information about digital assets. Crypto assets are volatile and you can lose everything you put in. Nothing here is a recommendation to buy, sell or hold, and we make no price predictions.
Prices are sourced from third parties and may be delayed or wrong. Verify anything you intend to act on against a primary source.