# Removing Liquidity

In this guide, we will use an example of DotSwap process to show how to remove liquidity from a pool, which includes:

* Removing
  * Pre-remove Request
  * Get Unsigned Remove PSBT
  * Send Signed Remove PSBT
* Get Estimated Remove Amount

> The removing interface for Runes/BRC20/ARC20 is the same, differentiated by `coin_type_*`.

{% openapi src="<https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media>" path="/brc20swap/v2/pre\_remove\_liquid" method="post" %}
[remove.json](https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media)
{% endopenapi %}

### Example

{% tabs %}
{% tab title="Parameters" %}

```typescript
{
    "tick1": "BTC",
    "tick2": "RUNEONERUNEONE",
    "coin_type_1": "btc",
    "coin_type_2": "runes",
    "payer_ord_addr": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "payer_btc_addr": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "percent": "15",
    "slipper": "12",
    "fee_rate": "57",
    "payer_pub_key": "02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81"
}
```

{% endtab %}

{% tab title="cURL Example (Runes)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/pre_remove_liquid' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"tick1":"BTC","tick2":"RUNEONERUNEONE","coin_type_1":"btc","coin_type_2":"runes","payer_ord_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_btc_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","percent":"15","slipper":"12","fee_rate":"57","payer_pub_key":"02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81"}'
```

{% endtab %}

{% tab title="cURL Example (BRC20)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/pre_remove_liquid' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://192.168.10.66:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://192.168.10.66:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"percent":"10","tick1":"BTC","tick2":"bqbq","coin_type_1":"btc","coin_type_2":"brc20","payer_ord_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_btc_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_pub_key":"02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81","slipper":"12","fee_rate":"11"}' \
  --compressed
```

{% endtab %}

{% tab title="cURL Example (ARC20)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/pre_remove_liquid' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"tick1":"BTC","tick2":"3dbb","coin_type_1":"btc","coin_type_2":"arc20","payer_ord_addr":"tb1qlphav0389832xt8deme0hx2unvw3cjt7fsfuyx","payer_btc_addr":"tb1qlphav0389832xt8deme0hx2unvw3cjt7fsfuyx","percent":"30","slipper":"12","fee_rate":"3","payer_pub_key":"036d9bb5a5cbf1cfb46c6ec79832a53b4f8717751485abb141ba6d595393200ace:036d9bb5a5cbf1cfb46c6ec79832a53b4f8717751485abb141ba6d595393200ace"}'
```

{% endtab %}
{% endtabs %}

{% hint style="info" %}
The returned result should be passed as is to the `create_remove_liquid_psbt` (the following interface).
{% endhint %}

{% openapi src="<https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media>" path="/brc20swap/v2/create\_remove\_liquid\_psbt" method="post" %}
[remove.json](https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media)
{% endopenapi %}

### Example

{% tabs %}
{% tab title="Parameters" %}

```typescript
{
    "expect_amount1": "1500",
    "expect_amount2": "75",
    "expect_transfer_fee": 20121,
    "check_sum": "D6CCF094281BC79DD4AF6E7A7FBF1CDA",
    "tx_size": 353,
    "usr_cnt": 1,
    "vins": [
        "6cf1c2614a4eaaadf68769909b04687a2ddc4d6082fe4a78654dfad08a9a9323:6"
    ],
    "tick1": "BTC",
    "tick2": "RUNEONERUNEONE",
    "coin_type_1": "btc",
    "coin_type_2": "runes",
    "payer_ord_addr": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "payer_btc_addr": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "percent": "15",
    "slipper": "12",
    "fee_rate": "57",
    "payer_pub_key": "02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81"
}
```

{% endtab %}

{% tab title="cURL Example (Runes)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/create_remove_liquid_psbt' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"expect_amount1":"1500","expect_amount2":"75","expect_transfer_fee":20121,"check_sum":"D6CCF094281BC79DD4AF6E7A7FBF1CDA","tx_size":353,"usr_cnt":1,"vins":["6cf1c2614a4eaaadf68769909b04687a2ddc4d6082fe4a78654dfad08a9a9323:6"],"tick1":"BTC","tick2":"RUNEONERUNEONE","coin_type_1":"btc","coin_type_2":"runes","payer_ord_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_btc_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","percent":"15","slipper":"12","fee_rate":"57","payer_pub_key":"02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81"}' Ex
```

{% endtab %}

{% tab title="cURL Example (BRC20)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/create_remove_liquid_psbt' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://192.168.10.66:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://192.168.10.66:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/121.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Not A(Brand";v="99", "Google Chrome";v="121", "Chromium";v="121"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"expect_amount1":"5075.803216837728754467","expect_amount2":"282.002432596010007297781694096138448","expect_transfer_fee":15798,"check_sum":"8DEFAA3590E994E291F02030EE7BBBE1","usr_cnt":1,"vins":["5fbfbe6ed863c228b8dc77ed2ec55a8b09fcbb8a2767874c12f61c9ce1dbc263:2"],"tx_size":642,"percent":"10","slipper":"12","tick1":"BTC","tick2":"bqbq","coin_type_1":"btc","coin_type_2":"brc20","payer_ord_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_btc_addr":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","payer_pub_key":"02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81:02d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81","fee_rate":"11"}' \
  --compressed
```

{% endtab %}

{% tab title="cURL Example (ARC20)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/create_remove_liquid_psbt' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/122.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="122", "Not(A:Brand";v="24", "Google Chrome";v="122"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"expect_amount1":"120383.33777471435486031353079418688523444","expect_amount2":"637.35028437485150273725464254913146868","expect_transfer_fee":1911,"check_sum":"35B665B6AA891953152CC576C5FE125F","tx_size":637,"usr_cnt":1,"vins":["9ad1f5f681637d6d11443b941cfa2f5e0ba4dad2405b88ee8254a34f763969e7:1"],"tick1":"BTC","tick2":"3dbb","coin_type_1":"btc","coin_type_2":"arc20","payer_ord_addr":"tb1qlphav0389832xt8deme0hx2unvw3cjt7fsfuyx","payer_btc_addr":"tb1qlphav0389832xt8deme0hx2unvw3cjt7fsfuyx","percent":"30","slipper":"12","fee_rate":"3","payer_pub_key":"036d9bb5a5cbf1cfb46c6ec79832a53b4f8717751485abb141ba6d595393200ace:036d9bb5a5cbf1cfb46c6ec79832a53b4f8717751485abb141ba6d595393200ace"}'
```

{% endtab %}
{% endtabs %}

{% openapi src="<https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media>" path="/brc20swap/v2/remove\_liquid\_by\_psbt" method="post" %}
[remove.json](https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media)
{% endopenapi %}

### Example

{% tabs %}
{% tab title="Parameters" %}

```
{
    "psbt": "70736274ff01007d020000000123939a8ad0fa4d65784afe82604ddc2d7a68049b906987f6adaa4e4a61c2f16c0600000000ffffffff02994e00000000000022512054f638dfba2ea8d607a59ec681a1ec479f741b0f505a116fe20172fde877eede52ca040000000000160014464ef3759fcfb1eb3d76f3319ef58ec20301c658000000000001011ffc3a050000000000160014464ef3759fcfb1eb3d76f3319ef58ec20301c65801086b0247304402200b398be45be70f30793de6e31aa9a9007a954f391f82e12b7a72c663af5d94570220230c28c921ca20e94669fab5abb7baf9cc908d121d2a5ffb96643e02c2d529bd012102d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81000000",
    "order_id": "liquid_972788279311073280",
    "checksum": "CAA324EB56C64FA1A6646C9AED0E2BAF",
    "to_sign_inputs": null
}
```

{% endtab %}

{% tab title="cURL Example (Runes)" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/v2/remove_liquid_by_psbt' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"psbt":"70736274ff01007d020000000123939a8ad0fa4d65784afe82604ddc2d7a68049b906987f6adaa4e4a61c2f16c0600000000ffffffff02994e00000000000022512054f638dfba2ea8d607a59ec681a1ec479f741b0f505a116fe20172fde877eede52ca040000000000160014464ef3759fcfb1eb3d76f3319ef58ec20301c658000000000001011ffc3a050000000000160014464ef3759fcfb1eb3d76f3319ef58ec20301c65801086b0247304402200b398be45be70f30793de6e31aa9a9007a954f391f82e12b7a72c663af5d94570220230c28c921ca20e94669fab5abb7baf9cc908d121d2a5ffb96643e02c2d529bd012102d3ac7452920b1cc4653516dd4f4381a2df0a8c0aac6e3446e633a73ea63eee81000000","order_id":"liquid_972788279311073280","checksum":"CAA324EB56C64FA1A6646C9AED0E2BAF","to_sign_inputs":null}'
```

{% endtab %}
{% endtabs %}

{% openapi src="<https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media>" path="/brc20swap/get\_liquid\_info" method="post" %}
[remove.json](https://2330303583-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FXEWf0ylbbPQ6t8CoOLdL%2Fuploads%2Fgit-blob-3ac9cec1f64fa55c9e361b89c0bb4a1934a0c36c%2Fremove.json?alt=media)
{% endopenapi %}

### Example

{% tabs %}
{% tab title="Parameters" %}

```typescript
{
    "address": "tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e",
    "lp_precent": 35,
    "from_tick": "BTC",
    "to_tick": "RUNEONERUNEONE",
    "from_coin_type": "btc",
    "to_coin_type": "runes"
}
```

{% endtab %}

{% tab title="cURL Example" %}

```sh
curl 'https://test-api-proxy.ddpurse.com/brc20swap/get_liquid_info' \
  -H 'Accept: application/json, text/plain, */*' \
  -H 'Accept-Language: en' \
  -H 'Cache-Control: no-cache' \
  -H 'Connection: keep-alive' \
  -H 'Content-Type: application/json' \
  -H 'Origin: http://localhost:56651' \
  -H 'Pragma: no-cache' \
  -H 'Referer: http://localhost:56651/' \
  -H 'Sec-Fetch-Dest: empty' \
  -H 'Sec-Fetch-Mode: cors' \
  -H 'Sec-Fetch-Site: cross-site' \
  -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36' \
  -H 'sec-ch-ua: "Chromium";v="124", "Google Chrome";v="124", "Not-A.Brand";v="99"' \
  -H 'sec-ch-ua-mobile: ?0' \
  -H 'sec-ch-ua-platform: "macOS"' \
  --data-raw '{"address":"tb1qge80xavle7c7k0tk7vceaavwcgpsr3jchl0w3e","lp_precent":35,"from_tick":"BTC","to_tick":"RUNEONERUNEONE","from_coin_type":"btc","to_coin_type":"runes"}'
```

{% endtab %}
{% endtabs %}

### Explanation on Fees

The actual amount received by the user will have the key custodial service's fee deducted, which is calculated using the `mutisign_fee_proportion` field returned by the backend (initially 0.3%, and may adjust in the future if the key custodial service changes).

### Fee Calculation

* Removing BTC-BRC20: Fee = BTC satoshi amount \* 0.3%
* Removing BTC-ARC20: Fee = BTC satoshi amount \* 0.3% + ARC20 satoshi amount \* 0.3%
* Removing BRC20-BRC20: Free

Calculation of the Actual Amount Received by the User:

```typescript

if (from_coin_type === "btc") {
  finally_from_amount = from_amount * (1 - mutisign_fee_proportion); 
  if (to_coin_type === "arc20") {
    finally_from_amount =
      finally_from_amount - to_amount * mutisign_fee_proportion;
  }
  finally_to_amount = to_amount;
}
if (to_coin_type === "btc") {
  finally_from_amount = from_amount;
  finally_to_amount = to_amount * (1 - mutisign_fee_proportion);
  if (to_coin_type === "arc20") {
    finally_to_amount =
      finally_to_amount - from_amount * mutisign_fee_proportion;
  }
}

```

{% hint style="info" %}
The estimated amount will change in real-time based on the total token amount in the liquidity pool. Your frontend can perform polling requests to obtain the latest estimate.
{% endhint %}
