> 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/migrating-v2.1-positions.md).

# Migrating V2.1 Positions

This section outlines the process to migrate Bancor V2.1 positions to Bancor V3.

{% hint style="warning" %}
This process calculates all your available rewards and might be expensive
{% endhint %}

### 1. Identify your position(s)

This step explains how to identify your position IDs.&#x20;

* Visit the *`LiquidityProtectionStore`* contract [on etherscan](https://etherscan.io/address/0xf5fab5dbd2f3bf675de4cb76517d4767013cfb55#readContract)
* Execute the *`protectedLiquidityIds`* function (this is a Read function)

![](/files/qlCkWslzSCITpSoIszp7)

`Input variable`

| Name       | Type    | Description         |
| ---------- | ------- | ------------------- |
| \_provider | address | Your wallet address |

`Output response`

<table><thead><tr><th width="250.33333333333331">Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>id(s)</td><td>uint256</td><td>1 or more unique IDs that indicate the protected positions for the specified address</td></tr></tbody></table>

### 2. Identify position data

This section explains how to identify the relevant data based on the unique position ID.

* Visit the *`LiquidityProtectionStore`* contract [on etherscan](https://etherscan.io/address/0xf5fab5dbd2f3bf675de4cb76517d4767013cfb55#readContract)
* Execute the *`protectedLiquidity`* function (this is a Read function)

![](/files/HWJWy1Co34TC24upL5S4)

`Input variable`

| Name | Type    | Description          |
| ---- | ------- | -------------------- |
| \_id | uint256 | A unique position ID |

`Output response`

<table><thead><tr><th width="257.92824192721685">Name</th><th>Type</th><th>Description</th></tr></thead><tbody><tr><td>provider</td><td>address</td><td>The wallet address of the position owner</td></tr><tr><td>poolToken</td><td>token</td><td>The pool token address <mark style="color:red;">*</mark><br>(i.e. LINK/BNT pool token address)</td></tr><tr><td>reserveToken</td><td>token</td><td>The reserve token address <mark style="color:red;">*</mark><br>(i.e. LINK token address)</td></tr><tr><td>poolAmount</td><td>uint256</td><td>Pool token amount <mark style="color:red;">*</mark></td></tr><tr><td>reserveAmount</td><td>uint256</td><td>Reserve token amount</td></tr><tr><td>reserveRateN</td><td>uint256</td><td>Rate of 1 protected reserve token in units of the other reserve token (numerator)</td></tr><tr><td>reserveRateD</td><td>unit256</td><td>Rate of 1 protected reserve token in units of the other reserve token (denominator)</td></tr><tr><td>timestamp</td><td>unit256</td><td>Timestamp of the original deposit</td></tr></tbody></table>

&#x20;*<mark style="color:red;">\* These values are needed for the</mark> <mark style="color:red;"></mark><mark style="color:red;">`migratePositions`</mark> <mark style="color:red;"></mark><mark style="color:red;">function</mark>*

### 3. Migrate your protected positions

Now that you have your V2.1 protected position(s) data available, you can proceed in calling the migration function and move the funds to Bancor V3.

{% hint style="info" %}
This process will migrate the full position and update the protection to **100%** as a bonus
{% endhint %}

Visit the *`LiquidityProtection`* contract [on etherscan](https://etherscan.io/address/0x63308861249ad775a4B6cEb6544Ce30C952b311a#writeContract)

* Execute the *`migratePositions`* function (this is a Write function)

![](/files/RMIfzW6MPY6eGTwNiJ4F)

`Input variable`

| Name          | Type         | Description                                            |
| ------------- | ------------ | ------------------------------------------------------ |
| positionLists | PositionList | Array of data to define the pool, token and positions. |

```
Format example:
[["poolTokenAddress", "reserveTokenAddress", [ID1, ID2, ..]]]
[["0x5B38Da6a701c568545dCfcB03FcB875f56beddC4","0x5B38Da6a701c568545dCfcB03FcB875f56beddC4",[1,2,3]]]

```

{% hint style="info" %}
You can group multiple IDs with the same `poolToken` and `reserveToken` combination\
i.e. all IDs for LINK from the LINK/BNT pool
{% endhint %}

Once executed successfully, the following will happen:

1. The v2.1 protected position(s) will no longer exist
2. The value of the protected tokens will be staked into Bancor V3
3. You would receive bnTokens that represent your migration

{% hint style="info" %}
If you wish to participate in Standard Rewards, proceed to [Joining Standard Rewards](/guides/bancor-etherscan-guide/rewards-joining-standard-rewards.md) guide
{% endhint %}


---

# 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/migrating-v2.1-positions.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.
