> For the complete documentation index, see [llms.txt](https://docs-sdk.crypto-chief.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs-sdk.crypto-chief.com/processing/java/guides/ton.md).

# TON: Jetton, NFT & comments

Transfer TON Jettons, NFTs, and text comments in Java with one call.

TON contract bodies are program-specific cells with no Solidity-style ABI, so the SDK encodes them for you behind high-level helpers.

## Jetton transfer (e.g. USDT on TON)

```java
import com.cryptochief.processing.Amount;
import com.cryptochief.processing.Chain;
import com.cryptochief.processing.services.TransactionsService.JettonTransferRequest;

var signed = client.transactions().jettonTransfer(new JettonTransferRequest(
    Chain.TON_MAINNET,
    "EQYourWallet...",
    "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs", // USDT
    "EQRecipient...",
    Amount.toBase("0.5", 6),  // USDT Jetton has 6 decimals
    null, null, null, null,   // jettonWalletAddress / responseDestination / attached / forward
    "Order #4242",            // optional — shown to the receiver as a comment
    0L,                       // queryId
    "https://your.app/webhooks/transaction"));
```

The sender's Jetton wallet address and the gas budget are resolved automatically. If you've already pre-resolved them, pass `jettonWalletAddress` and `attachedTonNanos` to skip the lookup.

## NFT transfer

```java
import com.cryptochief.processing.Amount;
import com.cryptochief.processing.services.TransactionsService.NftTransferRequest;
import java.math.BigInteger;

client.transactions().nftTransfer(new NftTransferRequest(
    Chain.TON_MAINNET,
    "EQYourWallet...",
    "EQItemAddr...",
    "EQRecipient...",
    null,
    new BigInteger(Amount.nanoTon("0.05")),
    null,
    0L,
    null));
```

## Text comment

```java
import java.math.BigInteger;

client.transactions().sendTonComment(
    Chain.TON_MAINNET,
    "EQYourWallet...",
    "EQRecipient...",
    "Thanks for the coffee!",
    new BigInteger(Amount.nanoTon("1")),
    null);
```

## Arbitrary TON contracts

Build the body cell yourself with `CellBuilder` (or any TON library) and pass the BoC bytes to the lower-level `signTonCall`:

```java
import com.cryptochief.processing.ton.CellBuilder;

byte[] body = new CellBuilder()
    .storeUInt(0x12345678L, 32)
    // ... your custom payload
    .endCell()
    .toBoc();

client.transactions().signTonCall(
    Chain.TON_MAINNET,
    "EQ...",
    "EQ...",
    body,
    "50000000",  // nanoTON attached
    true,        // bounce
    null);
```

{% hint style="info" %}
For TON amounts, `Amount.nanoTon("0.05")` returns the nanoTON decimal string the `attachedTonNanos` / `amountTonNanos` fields expect (wrap with `new BigInteger(...)` to pass it to the helpers).
{% endhint %}
