# 11. Full Exit

* In order to ensure the security of users' assets, users are given the right to take out their assets at any time. They can return the assets to their accounts by sending a transaction to L1.<br>

### Initialize SDK

* You need to initialize the SDK in order to use it.

### NFT Full Exit

* Parameters needed:

  | Parameter   | Parameter usage and meaning                                                                                | Requirement |
  | ----------- | ---------------------------------------------------------------------------------------------------------- | ----------- |
  | accountName | The account name used to initialize the client                                                             | ✅           |
  | seed        | The user's L2 seed used to initialize the client                                                           | ✅           |
  | privateKey  | Since this transaction involves L1, the private key of user's L1 account is needed to sign the transaction | ✅           |
  | nftIndex    | The unique ID of NFT in L1                                                                                 | ✅           |

{% hint style="success" %}

#### 📚SDK REFERENCE

* [FullExitNft](https://pkg.go.dev/github.com/Zecrey-Labs/zecrey-marketplace-go-sdk@v1.0.6/sdk#Client.FullExitNft)
  {% endhint %}

{% tabs %}
{% tab title="Golang" %}
&#x20;**Example**

* FullExit the NFT with `nftIndex` = 130
  * Initialize client
  * FullExit the NFT with `nftIndex` = 130

{% code overflow="wrap" %}

```go
package main

import (
   "fmt"
   "github.com/Zecrey-Labs/zecrey-marketplace-go-sdk/sdk"
)


func main() {
    accountName := "alice"
    privateKey := "0xe94a8b4ddd33b2865a89bb764d70a0c3e3276007ece8f114a47a4e9581ec3567"
    nftIndex := uint32(130)
    seed := "13243b9a9fdec6dc90c7cc1eb1c939134dfb659d2f0asdfas5413213213213213"
    c, err := NewClient(accountName, seed)
    fullExitNftTransaction, err := c.FullExitNft(accountName, privateKey, nftIndex)
    if err != nil {
       t.Fatal(err)
    }
    fmt.Println("tx hash:", fullExitNftTransaction.Hash())
}
```

{% endcode %}

&#x20; **Example Result**

{% code overflow="wrap" %}

```json
tx hash: 0x3e78bf427bbe8bc6be629b6bcd3a88cb65234b7da209134787a8f39c8ace1d4a
```

{% endcode %}
{% endtab %}

{% tab title="Javascript" %}
**Example**

* FullExit the NFT with `nftIndex` = 130

{% code overflow="wrap" %}

```javascript
import { SDK } from "@zecrey/zecrey-legend-js-sdk";

const sdk = new SDK();
await sdk.initial();

const privateKey = "1bcb0ae8c17945acfaf9ea546c0b754a599fddf27425bac7e532590324137a7d";
const account = "alice"; 
const nft_index = 130;

const res = await sdk.fullExitNft(privateKey, account, nft_index);
```

{% endcode %}
{% endtab %}
{% endtabs %}

### FT Full Exit

* Parameters needed

  * BNB、LEG、REY's token addresses are needed and the details can be obtained through GetAssetsList

  | Parameter   | Parameter usage and meaning                                                                                | Required or not |
  | ----------- | ---------------------------------------------------------------------------------------------------------- | --------------- |
  | accountName | The account name used to initialize the client                                                             | ✅               |
  | seed        | The user's L2 seed used to initialize the client                                                           | ✅               |
  | privateKey  | Since this transaction involves L1, the private key of user's L1 account is needed to sign the transaction | <p>✅<br></p>    |
  | asset       | asset Token address                                                                                        | ✅               |

{% hint style="success" %}

#### 📚SDK REFERENCE

* [FullExit](https://pkg.go.dev/github.com/Zecrey-Labs/zecrey-marketplace-go-sdk@v1.0.6/sdk#Client.FullExit)
  {% endhint %}

{% tabs %}
{% tab title="Golang" %}
**Example**

* Deposit 10000 BNB to L2
  * Initialize client
  * FullExit 100000 BNB

{% code overflow="wrap" %}

```go
package main

import (
   "fmt"
   "github.com/Zecrey-Labs/zecrey-marketplace-go-sdk/sdk"
)


func main() {
    accountName := "alice"
    privateKey := "0xe94a8b4ddd33b2865a89bb764d70a0c3e3276007ece8f114a47a4e9581ec3567"
    assetAddress := common.HexToAddress("")//_asset Token address, 0 address for BNB
    seed := "13243b9a9fdec6dc90c7cc1eb1c939134dfb659d2f0asdfas5413213213213213"
    c, err := NewClient(accountName, seed)
    var amount int64 = 100000
    if err != nil {
       t.Fatal(err)
    }
    fullExitTransaction, err := c.FullExit(accountName, privateKey, assetAddress)
    if err != nil {
       t.Fatal(err)
    }
    fmt.Println("tx hash:",fullExitTransaction)
}
```

{% endcode %}

**Example Result**

{% code overflow="wrap" %}

```json
tx hash: 0x72aac80edfcb5c2f5c34e4b7acccc4831ef8ad61b1ef0396407b9fb31ed151fd
```

{% endcode %}

{% endtab %}

{% tab title="Javascript" %}
**Example**

1. BNB

{% code overflow="wrap" %}

```javascript
import { SDK } from "@zecrey/zecrey-legend-js-sdk";

const sdk = new SDK();
await sdk.initial();

const privateKey = "1bcb0ae8c17945acfaf9ea546c0b754a599fddf27425bac7e532590324137a7d";
const account = "alice"; 
const asset_contract = "0x00"; // this address represents BNB

const res = await sdk.fullExit(privateKey, account, asset_contract );
```

{% endcode %}

2. LEG and REY and other BEP20 assets

{% code overflow="wrap" %}

```json
import { SDK } from "@zecrey/zecrey-legend-js-sdk";

const sdk = new SDK();
await sdk.initial();

const privateKey = "1bcb0ae8c17945acfaf9ea546c0b754a599fddf27425bac7e532590324137a7d";
const account = "alice"; 
const asset_contract = "0x364Ed72f329f1BD56AE84b941D1c6E4E260cE152"; // contract address of LEG

const res = await sdk.fullExit(privateKey, account, asset_contract);
```

{% endcode %}
{% endtab %}
{% endtabs %}
