> For the complete documentation index, see [llms.txt](https://ston-fi.gitbook.io/docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://ston-fi.gitbook.io/docs/developer-section/dex/sdk/legacy/v0.5/swap.md).

# Swap (v0.5)

In this section, to illustrate all three possible types of a swap, we will do following exchange chain

1. swap 1 TON to STON (ton to jetton swap)
2. swap STON to GEMSTON (jetton to jetton swap)
3. swap GEMSTON back to TON (jetton to ton swap)

## Swap TON to jetton

```typescript
import TonWeb from "tonweb";
import { DEX, pTON } from "@ston-fi/sdk";

const router = new DEX.v1.Router({
  tonApiClient: new TonWeb.HttpProvider(),
});

// swap 1 TON to STON but not less than 1 nano STON
const txParams = await router.buildSwapTonToJettonTxParams({
  userWalletAddress: "", // ! replace with your address
  proxyTonAddress: pTON.v1.address,
  offerAmount: new TonWeb.utils.BN("1000000000"),
  askJettonAddress: "EQA2kCVNwVsil2EM2mB0SkXytxCqQjS4mttjDpnXmwG9T6bO", // STON
  minAskAmount: new TonWeb.utils.BN("1"),
  queryId: 12345,
});

// To execute the transaction, you need to send a transaction to the blockchain.
// This code will be different based on the wallet you are using to send the tx from
// logging is used for demonstration purposes
console.log({
  to: txParams.to,
  amount: txParams.gasAmount,
  payload: txParams.payload,
});
```

## Swap jetton to jetton

```typescript
import TonWeb from "tonweb";
import { DEX, pTON } from "@ston-fi/sdk";

const router = new DEX.v1.Router({
  tonApiClient: new TonWeb.HttpProvider(),
});

// swap 1 STON to GEMSTON but not less than 1 nano GEMSTON
const txParams = await router.buildSwapJettonToJettonTxParams({
  userWalletAddress: "", // ! replace with your address
  offerJettonAddress: "EQA2kCVNwVsil2EM2mB0SkXytxCqQjS4mttjDpnXmwG9T6bO", // STON
  offerAmount: new TonWeb.utils.BN("1000000000"),
  askJettonAddress: "EQBX6K9aXVl3nXINCyPPL86C4ONVmQ8vK360u6dykFKXpHCa", // GEMSTON
  minAskAmount: new TonWeb.utils.BN("1"),
  queryId: 12345,
});

// To execute the transaction, you need to send a transaction to the blockchain.
// This code will be different based on the wallet you are using to send the tx from
// logging is used for demonstration purposes
console.log({
  to: txParams.to,
  amount: txParams.gasAmount,
  payload: txParams.payload,
});
```

## Swap jetton to TON

```typescript
import TonWeb from "tonweb";
import { DEX, pTON } from "@ston-fi/sdk";

const router = new DEX.v1.Router({
  tonApiClient: new TonWeb.HttpProvider(),
});

// swap 1 GEMSTON to TON but not less than 1 nano TON
const txParams = await router.buildSwapJettonToTonTxParams({
  userWalletAddress: "", // ! replace with your address
  offerJettonAddress: "EQBX6K9aXVl3nXINCyPPL86C4ONVmQ8vK360u6dykFKXpHCa", // GEMSTON
  offerAmount: new TonWeb.utils.BN("1000000000"),
  proxyTonAddress: pTON.v1.address,
  minAskAmount: new TonWeb.utils.BN("1"),
  queryId: 12345,
});

// To execute the transaction, you need to send a transaction to the blockchain.
// This code will be different based on the wallet you are using to send the tx from
// logging is used for demonstration purposes
console.log({
  to: txParams.to,
  amount: txParams.gasAmount,
  payload: txParams.payload,
});
```

## Recommended gas values

Below are recommended values for TON sent and forward gas for each type of the swap:

| Type                 | Tx TON                | Forward TON |
| -------------------- | --------------------- | ----------- |
| `pTON` -> `Jetton`   | `swap_amount + 0.215` | `0.215`     |
| `Jetton` -> `Jetton` | `0.265`               | `0.205`     |
| `Jetton` -> `pTON`   | `0.185`               | `0.125`     |

#### Formulas:

**`pTON` -> `Jetton`**

```typescript
// pton_transfer + (pay_to + jetton_transfer) * 2 + (jetton_notification + swap)
fwd_amount = 0.01 + (0.02 + 0.06) * 2 + 0.045; // = 0.215
// jetton_transfer + fwd_amount
tx_amount = swap_amount + fwd_amount; // = swap_amount + 0.215
```

**`Jetton` -> `Jetton`**

```typescript
// (jetton_notification + swap) + (pay_to + jetton_transfer) * 2
fwd_amount = 0.045 + (0.02 + 0.06) * 2; // = 0.205
// jetton_transfer + fwd_amount
tx_amount = 0.06 + fwd_amount; // = 0.265
```

**`Jetton` -> `pTON`**

```typescript
// (jetton_notification + swap) + (pay_to + pton_transfer) * 2
fwd_amount = 0.045 + (0.02 + 0.02) * 2; // = 0.125
// jetton_transfer + fwd_amount
tx_amount = 0.06 + fwd_amount; // = 0.185
```
