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

# TON: Jetton, NFT & comments

Transfer TON Jettons, NFTs, and text comments in .NET / C# 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)

```csharp
using CryptoChief.Processing.Amounts;
using CryptoChief.Processing.Chains;
using CryptoChief.Processing.Services;

var amount = Amount.HumanToBase("0.5", 6); // USDT Jetton has 6 decimals

var signed = await client.Transactions.JettonTransferAsync(new JettonTransferRequest
{
    Network      = Chain.TonMainnet,
    FromAddress  = "EQYourWallet...",
    JettonMaster = "EQCxE6mUtQJKFnGfaROTKOt1lZbDiiX1kCixRv7Nw2Id_sDs", // USDT
    Recipient    = "EQRecipient...",
    Amount       = amount,
    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

```csharp
await client.Transactions.NftTransferAsync(new NftTransferRequest
{
    Network     = Chain.TonMainnet,
    FromAddress = "EQYourWallet...",
    NftItem     = "EQItemAddr...",
    NewOwner    = "EQRecipient...",
    AttachedTon = Amount.NanoTon("0.05"),
});
```

## Text comment

```csharp
await client.Transactions.SendTonCommentAsync(new TonCommentRequest
{
    Network     = Chain.TonMainnet,
    FromAddress = "EQYourWallet...",
    Recipient   = "EQRecipient...",
    Text        = "Thanks for the coffee!",
    AmountTon   = Amount.NanoTon("1"),
});
```

## Arbitrary TON contracts

Build the body cell yourself with the SDK's `TonCell` builder (or any TON library) and pass the bytes to the lower-level `SignTonCallAsync`:

```csharp
await client.Transactions.SignTonCallAsync(new TonCallRequest
{
    Network     = Chain.TonMainnet,
    FromAddress = "EQ...",
    Contract    = "EQ...",
    Value       = "50000000",   // nanoTON attached
    BodyCell    = bocBytes,
});
```

{% hint style="info" %}
For TON amounts, `Amount.NanoTon("0.05")` returns the nanoTON decimal string the `AttachedTon` / `AmountTon` fields expect. To validate or round-trip an address offline, use `TonAddress.Parse(...)` from `CryptoChief.Processing.Encoders.Ton`.
{% endhint %}
