# 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 %}
