# 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;


---

# 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/9.-asset-transfers.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.
