# Advance Usage

### Payment Use Case

Assuming you want the buyer to pay with any tokens on BSC, ex. BNB, CAKE. Then your system will swap any token to be the stablecoin (ex. BUSD) for your merchants.

You can request user to swap their token on Warden Best Rate Swap and then send the stablecoin to the merchant, or yourself as a payment gateway by utilizing the last parameter of the `swap` method. No need for new solidity contract deployment.

```jsx
const swap = await wardenClient.swap(
      srcAddr,
      destAddr,
      amountIn,
      minAmountOut,
      quote,   
      undefined,
      undefined,
      merchantAccount) // 👈 specify receiver account to receive token after swapped

```

### Understanding Different Swap Type

Warden Best Rate API have 2 types of response for trading depending on the many factors including gas price. `getQuote` will determine which type is better by including gas fee factor into the calculation.&#x20;

#### **1. Strategies Type**.&#x20;

Basic type. It selects the best path for the best price.

<details>

<summary>Sample Response</summary>

```json
{
  "type": "strategies",
  "path": {
    "routes": [
      {
        "address": "0x0dEa19CAb88f45301a83C6b5eAa18E8387546afE",
        "id": "0",
        "name": "WARDEN"
      }
    ],
    "tokens": []
  },
  "amountOut": "565042446063757949355",
  "gasFees": {
    "dest": "1913868530378129232",
    "unit": "166401",
    "usd": "0.338591545617514122"
  },
  "blockNumber": 16875978,
  "routerAddress": "0x451ef8d6b645a60115eb8b8bea76b39c0c761004",
  "swapAddress": "0x9cbd1322c3d029d32357808665dcae5c286c7081",
  "depositAddress": "0xc95B1750043FCE5dfCc8539835Ea3830Ec002A89"
}
```

</details>

#### **2. Split Type**.&#x20;

The split type not only selects the best path for the trade, but it also determines other paths that are most appropriate for your overall trading volume. Example for split trades available: 40:60 and 20:80. It generally gives the better rate, but will use more gas. So it is not suitable for a small swap.

<details>

<summary>Sample response</summary>

```json
{
  "type": "split",
  "paths": [
    {
      "routes": [
        {
          "address": "0x5aD333EAf52E48AB19095805F552A0734Bb57252",
          "id": "25",
          "name": "SMOOTHY"
        },
        {
          "address": "0x0e7DBD5E56fFdb53cd098732598c4082eB8fE872",
          "id": "19",
          "name": "DOP:UST"
        },
        {
          "address": "0x0dEa19CAb88f45301a83C6b5eAa18E8387546afE",
          "id": "0",
          "name": "WARDEN"
        }
      ],
      "tokens": [
        "0x23396cF899Ca06c4472205fC903bDB4de249D6fC",
        "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"
      ]
    },
    {
      "routes": [
        {
          "address": "0x0cD12512ac262fFF5441D34B72F4E9e921a39D92",
          "id": "13",
          "name": "ACRYPTOS:ACS4"
        },
        {
          "address": "0x1A48f4827D96bFd03e1d5a4B3c34f6D2313CBA08",
          "id": "23",
          "name": "BISWAP"
        },
        {
          "address": "0x0dEa19CAb88f45301a83C6b5eAa18E8387546afE",
          "id": "0",
          "name": "WARDEN"
        }
      ],
      "tokens": [
        "0x55d398326f99059fF775485246999027B3197955",
        "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"
      ]
    }
  ],
  "volumns": [
    59,
    41
  ],
  "amountOut": "11203636215691549028954",
  "gasFees": {
    "dest": "9984416517876489624",
    "unit": "870792",
    "usd": "1.775312577024362376"
  },
  "blockNumber": 16877199,
  "routerAddress": "0x451ef8d6b645a60115eb8b8bea76b39c0c761004",
  "swapAddress": "0x9cbd1322c3d029d32357808665dcae5c286c7081",
  "depositAddresses": [
    "0x5aD333EAf52E48AB19095805F552A0734Bb57252",
    "0x0cD12512ac262fFF5441D34B72F4E9e921a39D92"
  ]
}
```

</details>

Note that, even it is not recommended, you can disable the split type by setting `enableSplit` to `false` in the options. It could speed up the rate calculation but giving worse rate overall.

```javascript
const quote = await wardenClient.getQuote(
    srcAddr, 
    destAddr, 
    amountIn, 
    gasPrice,
    { enableSplit: false }
)
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.wardenswap.finance/warden/wardenswap-sdk/advance-usage.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
