> For the complete documentation index, see [llms.txt](https://docs.bancor.network/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.bancor.network/guides/bancor-etherscan-guide/withdrawing-tokens/completing-the-withdrawal.md).

# 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="/pages/iStK5vfPhzSkgGPem4ru#the-following-network-contracts-are-required">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="/pages/ptmiyfiWw9tCRpQ3xIH6">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;

![](/files/Y2aFooNXPlndHhs118Q6)

`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;

![](/files/5PeZbAlzun9piVxIzujY)

`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;

![](/files/VDwc78PYozvOfrjKHYr8)

`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.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## 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, and the optional `goal` query parameter:

```
GET https://docs.bancor.network/guides/bancor-etherscan-guide/withdrawing-tokens/completing-the-withdrawal.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

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.
