# 9. Asset Transfers

For various reasons, users may wish to transfer their assets from one wallet to another, for example, to send assets as gifts.

### Initialize SDK

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

### Create transfer

* All NFT transactions will be confirmed by Zecrey. Zecrey will ensure that it is submitted to L1 once the transaction is confirmed.
  * Parameters needed:

    | Parameter     | Parameter usage and meaning                      | Required vs Optional |
    | ------------- | ------------------------------------------------ | -------------------- |
    | accountName   | The account name used to initialize the client   | ✅                    |
    | seed          | The user's L2 seed used to initialize the client | ✅                    |
    | toAccountName | The receiver's account name                      | ✅                    |

{% hint style="success" %}
&#x20;📚**SDK REFERENCE**

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

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

* `TransferNft` allows users to change the owner of NFT. However, the creator of the NFT will never change. Each time an NFT is transferred, the creator will receive a royalty, which is calculated by the NFT's `TreasuryRate` set by its creator.
* Alice transfers to Bob the NFT with `NftId` = 6
  1. Initialize the client
  2. Transfer the NFT to Bob

{% code overflow="wrap" %}

```go
package main

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


func main() {
    var NftId int64 = 6
    accountName := "Alice"
    seed := "0x6a1a320d14790f2d9aa9a37769f4833d583a3f7f974fd452a3990aeb0e7a6052"
    toAccountName := "Bob"
    
    c, err := sdk.NewClient(accountName, seed) 	 
    if err != nil { panic(err) }
    
    result, err := c.TransferNft(NftId, toAccountName)
    if err != nil { panic(err) }
    
    data, _ := json.Marshal(result)
    fmt.Println("TransferNft:", string(data))
}
```

{% endcode %}

&#x20; **Example result**

{% code overflow="wrap" %}

```json
TransferNft: {"success":true}
```

{% endcode %}
{% endtab %}

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

* TransferNft allows users to change the owner of NFT. However, the creator of the NFT will never change. Each time an NFT is transferred, the creator will receive a royalty, which is calculated by the NFT's TreasuryRate set by its creator.
* Alice transfers to Bob the NFT with `NftId` = 6
  1. Initialize the client
  2. Transfer the NFT to Bob

With the private key:

{% code overflow="wrap" %}

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

const account_name = "Alice.zec";
const seed = "ee823a72698fd05c70fbdf36ba2ea467d33cf628c94ef030383efcb39581e43f";

const client = new Client(account_name, seed);
await client.initialize();

const nft_id = 6;
const to_account_name = "Bob.zec";
const res = await client.transferNft(nft_id, to_account_name);

console.log("success", res);
```

{% endcode %}

With the wallet:

{% code overflow="wrap" %}

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

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

const account_name = "Alice.zec"; // sender's account name
const account_index = 14; // sender's account index
const nft_id = 6;
const to_account_name = "Bob.zec";
const res = await sdk.transferNft(account_name, account_index, nft_id, to_account_name);

console.log("success", res);
```

{% endcode %}

**Example result**

{% code overflow="wrap" %}

```json
success: true
```

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

&#x20;&#x20;
