# Completing the Withdrawal

This is the last step of the withdrawal process, after which, your funds will be returned to your wallet.&#x20;

{% hint style="warning" %}
This can only be done once the cooldown time is completed
{% endhint %}

### 1. (BNT withdrawals only) Approve vBNT

{% hint style="info" %}
Withdrawing BNT requires an equal number of vBNT to the bnBNT you are withdrawing. For example, withdrawing 10 bnBNT requires 10 vBNT.&#x20;

For any other token, skip to [step 2](#2.-cooldown-id)
{% endhint %}

The BancorNetwork contract requires approval to perform the transaction with your vBNT tokens.

* Visit the `vBNT` contract [on etherscan](https://etherscan.io/token/0x48Fb253446873234F2fEBbF9BdeAA72d9d387f94#writeContract)
* Execute the `Approve` function (this is a Write function)&#x20;

<table data-header-hidden><thead><tr><th width="220"></th><th></th></tr></thead><tbody><tr><td>_spender</td><td>The address of the <code>BancorNetwork</code> <a href="broken-reference">found here</a></td></tr><tr><td>_value</td><td>The amount you would like to approve (it can be identical or more than the amount of bnBNT you wish to withdraw, BUT NOT LESS) in <code>WEI</code> format as <a href="broken-reference">explained here</a></td></tr></tbody></table>

### 2. Cooldown ID

This step will explain how to identify the cooldown ID needed to complete the withdrawal.

* Visit the *`PendingWithdrawals`* contract [on etherscan](https://etherscan.io/address/0x857Eb0Eb2572F7092C417CD386BA82e45EbA9B8a#readProxyContract)
* Execute the *`withdrawalRequestIds`* function (this is a Read function)&#x20;

![](https://273705617-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC9gDtGR2KNhur3c7qIJR%2Fuploads%2FiZ96EhjruLytw4FjhI70%2Fimage.png?alt=media\&token=b246f3d8-a8db-4bfa-84fc-75ee78b99559)

`Input variable`

| Name     | Type    | Description         |
| -------- | ------- | ------------------- |
| provider | address | Your wallet address |

`Output response`

| Name       | Type    | Description                                                            |
| ---------- | ------- | ---------------------------------------------------------------------- |
| cooldownId | uint256 | The ID of the existing cooldown requests you have (can be more than 1) |

**Save the cooldownIds** as these represent the inputs needed for the next steps.

### 3. Identify which cooldown ID to use

This step will explain how to identify which cooldown ID to use.&#x20;

{% hint style="info" %}
If you only have a single ID, skip to the [next step](#3.-identify-if-cooldown-is-over).
{% endhint %}

* Visit the *`PendingWithdrawals`* contract [on etherscan](https://etherscan.io/address/0x857Eb0Eb2572F7092C417CD386BA82e45EbA9B8a#readProxyContract)
* Execute the *`withdrawalRequest`* function (this is a Read function)&#x20;

![](https://273705617-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC9gDtGR2KNhur3c7qIJR%2Fuploads%2FT3NQCS457iHSuth3isin%2Fimage.png?alt=media\&token=77bf2212-5b58-4255-82d4-1ea10ad6c1a9)

`Input variable`

| Name | Type    | Description                                     |
| ---- | ------- | ----------------------------------------------- |
| id   | uint256 | One of the IDs generated from the previous step |

`Output response`

| Name               | Type       | Description                                              |
| ------------------ | ---------- | -------------------------------------------------------- |
| provider           | address    | The address that can interact with this cooldown request |
| poolToken          | IPoolToken | The locked bnToken                                       |
| reserveToken       | Token      | The underlying token                                     |
| createdAt          | uint32     | The time when the request was created                    |
| poolTokenAmount    | uint256    | The locked bnToken amount                                |
| reserveTokenAmount | uint256    | The expected amount of underlying asset to receive       |

Using the returned values,&#x20;

1. Identify the *`reserveToken`* you would like to withdraw
2. Save the *`id`* for the next step

### 4. Identify if the cooldown period is over

This step will explain how to check if your cooldown is over and you can safely withdraw your tokens.

* Visit the *`BancorNetworkInfo`* contract [on etherscan](https://etherscan.io/address/0x8E303D296851B320e6a697bAcB979d13c9D6E760#readProxyContract)
* Execute the *`isReadyForWithdrawal`* function (this is a Read function)&#x20;

![](https://273705617-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FC9gDtGR2KNhur3c7qIJR%2Fuploads%2FFkrU8ayCc1nHmfLAxDLn%2Fimage.png?alt=media\&token=79341ff7-8082-4b4d-810a-56a2692bd165)

`Input variable`

| Name | Type    | Description                          |
| ---- | ------- | ------------------------------------ |
| id   | uint256 | The cooldown ID you wish to finalize |

`Output response`

| Name    | Type | Description                                                                                                         |
| ------- | ---- | ------------------------------------------------------------------------------------------------------------------- |
| isReady | bool | True/False indication on the status of the cooldown. (when True, [proceed to next step](#5.-complete-the-withdraw)) |

### 5. Complete the withdraw

This step will explain how to complete the withdrawal process and call the *`withdraw`* function.

* Visit the *`BancorNetwork`* contract [on etherscan](https://etherscan.io/address/0xeEF417e1D5CC832e619ae18D2F140De2999dD4fB#writeProxyContract)
* Execute the *`withdraw`* function (this is a Write function)&#x20;

`Input variable`

| Name | Type    | Description                          |
| ---- | ------- | ------------------------------------ |
| id   | uint256 | The cooldown ID you wish to withdraw |

`Output`&#x20;

This will complete the withdrawal process and return the underlying tokens to your wallet.
