# 8. Asset Deposits

* Users are able to deposit assets from L1 to L2 in Zecrey.

### Initialize SDK

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

### Deposit NFT to L2

* Parameters needed:

  | Parameter    | <p>Parameter usage and meaning<br></p>                                                                     | 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 | ✅           |
  | nftL1Address | The corresponding L1 address of the NFT                                                                    | ✅           |
  | nftIndex     | The unique ID of NFT in L1                                                                                 | ✅           |

{% hint style="success" %}

#### 📚SDK REFERENCE

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

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

* Deposit the NFT with `nftIndex` = 511
  * Initialize client
  * Deposit the NFT with `nftIndex` = 511

{% code overflow="wrap" %}

```go
package main

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


func main() {
    var nftIndex int64 = 511
    accountName := "Bob"
    seed := "17673b9a9fdec6dc90c7cc1eb1c939134dfb659d2f08edbe071e5c45f343d008"
    privateKey := "0xe94a8b4ddd33b2865asadfasda0c3e3276007ece8f114a47a4e9581ec3567"
    nftL1Address := common.HexToAddress("0x805e286D05388911s41a0E3c7b9713415607c72")
    c, err := NewClient(accountName, seed)
    if err != nil {
       t.Fatal(err)
    }
    depositNftTransaction, err := c.DepositNft(accountName, privateKey, nftL1Address, nftIndex)
    if err != nil {
       t.Fatal(err)
    }
    fmt.Println("tx hash: ",depositNftTransaction.Hash())
}
```

{% endcode %}

&#x20; **Example Result**

{% code overflow="wrap" %}

```json
tx hash: 0x832b75753c073b29a11431386f2faa744ced1c95603e8ea30e4aa5fd7ca3d14dgolang
```

{% endcode %}
{% endtab %}

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

Advance approval for NFT is require

{% code overflow="wrap" %}

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

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

const privateKey = "1bcb0ae8c17945acfaf9ea546c0b754a599fddf27425bac7e532590324137a7d"; // the private key of the L1 which is sending the transaction
const account = "Bob"; // the receiving L2 account in NFT deposit
const asset_contract = "0xD0b6eee86DFAE935E837EcC187A63D3882eDA022"; // the l1 contract address of NFT
const token_id = 4; // the ID of NFT in L1 contract

const res = await sdk.depositNft(privateKey, account, asset_contract, token_id);

console.log("tx hash: ", res);
```

{% endcode %}

&#x20; **Example Result**

{% code overflow="wrap" %}

```json
tx hash: 0x832b75753c073b29a11431386f2faa744ced1c95603e8ea30e4aa5fd7ca3d14d
```

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

### Deposit FT to L2

* 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 | ✅           |
  | AssetId     | Token ID                                                                                                   | ✅           |
* Token information

  | Token | Token ID | Parameter        |
  | ----- | -------- | ---------------- |
  | BNB   | 0        | sdk.BNBAssetId   |
  | *LEG* | 1        | sdk.*LEG*AssetId |
  | *REY* | 2        | sdk.*REY*AssetId |

{% hint style="success" %}

#### 📚SDK REFERENCE

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

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

* Deposit 10000 BNB to L2
  * Initialize client
  * Deposit
    1. For BEP20 token, you need to import the token address

{% code overflow="wrap" %}

```go
package main

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


func main() {
    var nftId int64 = 6
    accountName := "Bob"
    seed := "17673b9a9fdec6dc90c7cc1eb1c939134dfb659d2f08edbe071e5c45f343d008"
    privateKey := "0xe94a8b4ddd33b2865asadfasda0c3e3276007ece8f114a47a4e9581ec3567"
    var assetAmount int64 = 10000
    var tokenAddress  = common.HexToAddress("")
    c, err := NewClient(accountName, seed)
    if err != nil { panic(err) }
    
    depositBnbTransaction, err := c.Deposit(accountName, privateKey, sdk.BNBAssetId, assetAmount, tokenAddress)
    if err != nil { panic(err) }
    
    fmt.Println("tx hash:",depositBnbTransaction.Hash())
}
```

{% endcode %}

**Example result**

{% code overflow="wrap" %}

```json
tx hash: 0x0f20b7cf4f6526b7d67efba10c9e14b0c093eb9c50c7ebd8190413bc0b4c6dd6
```

{% endcode %}
{% endtab %}

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

1. Deposit BEP20 assets like REY and LEG (advance approval required for assets)

{% code overflow="wrap" %}

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

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

const privateKey = "1bcb0ae8c17945acfaf9ea546c0b754a599fddf27425bac7e532590324137a7d"; // the private key of the L1 which is sending the transaction
const account = "Bob"; // the L2 account that LEG is deposited to
const amount = "100000000000000"; // 0.0001 LEG
const asset_contract = "0x364Ed72f329f1BD56AE84b941D1c6E4E260cE152"; // the contract address of LEG

const res = await sdk.deposit(privateKey, account, amount, asset_contract);

console.log("tx hash: ", res);
```

{% endcode %}

2. Deposit BNB

{% code overflow="wrap" %}

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

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

const privateKey = "1bcb0ae8c17945acfaf9ea546c0b754a599fddf27425bac7e532590324137a7d"; // the private key of the L1 which is sending the transaction
const account = "Bob"; // the L2 account that LEG is deposited to
const amount = "100000000000000"; // 0.0001 BNB 

const res = await sdk.deposit(privateKey, account, amount);

console.log("tx hash: ", res);
```

{% endcode %}

**Example Result**

{% code overflow="wrap" %}

```json
tx hash: 0xca0f43ae1e7d3ff868170fee2d0a1254772294aca43f2cf221aa602bd3cd5db3
```

{% endcode %}

<br>
{% endtab %}
{% endtabs %}


---

# Agent Instructions: 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:

```
GET https://docs.zecrey.com/go-and-js-sdk-basic-guides/8.-asset-deposits.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
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.
