> 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/php/guides/ton.md).

# TON: Jetton, NFT & comments

Transfer TON Jettons, NFTs, and text comments in PHP 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 (built on `olifanton/interop`). You never touch a cell or a BoC.

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

```php
use CryptoChief\Processing\Amount;
use CryptoChief\Processing\Chain;
use CryptoChief\Processing\Dto\JettonTransferRequest;

$amount = Amount::humanToBase('0.5', 6);  // USDT Jetton has 6 decimals

$signed = $client->transactions()->jettonTransfer(new JettonTransferRequest(
    network:      Chain::TonMainnet->value,
    fromAddress:  'EQYourWallet...',
    recipient:    'EQRecipient...',
    amount:       $amount,
    jettonMaster: 'EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs',  // USDT
    memo:         'Order #4242',  // optional — shown to the receiver as a comment
));
```

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

## NFT transfer

```php
use CryptoChief\Processing\Amount;
use CryptoChief\Processing\Dto\NftTransferRequest;

$client->transactions()->nftTransfer(new NftTransferRequest(
    network:     Chain::TonMainnet->value,
    fromAddress: 'EQYourWallet...',
    nftItem:     'EQItemAddr...',
    newOwner:    'EQRecipient...',
    attachedTon: Amount::nanoTon('0.05'),
));
```

## Text comment

```php
use CryptoChief\Processing\Amount;
use CryptoChief\Processing\Dto\TonCommentRequest;

$client->transactions()->sendTonComment(new TonCommentRequest(
    network:     Chain::TonMainnet->value,
    fromAddress: 'EQYourWallet...',
    recipient:   'EQRecipient...',
    text:        'Thanks for the coffee!',
    amountTon:   Amount::nanoTon('1'),
));
```

## Arbitrary TON contracts

For program-specific contracts, build the BoC body cell yourself with `olifanton/interop` (or any TON library) and pass the bytes to `signTonCall`:

```php
use CryptoChief\Processing\Amount;
use CryptoChief\Processing\Dto\TonCallRequest;

$client->transactions()->signTonCall(new TonCallRequest(
    network:     Chain::TonMainnet->value,
    fromAddress: 'EQ...',
    contract:    'EQ...',
    value:       Amount::nanoTon('0.05'),  // attached TON
    bodyCell:    $bocBytes,                // raw bytes
));
```

{% hint style="info" %}
For TON amounts, `Amount::nanoTon('0.05')` returns the base-unit nanoTON decimal string the `attachedTon` / `amountTon` / `value` fields expect. `CryptoChief\Processing\Ton\Address::parse()` is exported for offline `EQ`/`UQ`/`workchain:hex` validation.
{% endhint %}
