# 7. Match Orders

Matching orders is to fill the offers or listings with traders' corresponding actions to buy or sell the NFTs for the transactions to be completed.

### Initialize SDK

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

### Match Orders

* To select the correct order, please refer to [Offers](https://docs.zecrey.com/go-and-js-sdk-basic-guides/2.-get-data#offers).
* Parameters needed:<br>

  | <p>Parameter<br></p> | Parameter usage and meaning                                             | Required or not |
  | -------------------- | ----------------------------------------------------------------------- | --------------- |
  | accountName          | The account name used to initialize the client                          | ✅               |
  | assetType            | Specify the asset type used to purchase or sell the NFT                 | ✅               |
  | AssetAmount          | The asset amount to purchase or sell the NFT                            | ✅               |
  | offerId              | Select an NFT order that is listed for sale or made an offer by someone | ✅               |
  | isSell               | To buy (false) or sell (true) the target NFT                            | ✅               |

{% hint style="success" %}
**📚SDK REFERENCE**

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

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

* Purchase the NFT with `offerId` = 31
  1. Initialize the client
  2. Purchase NFT

{% code overflow="wrap" %}

```go
package main

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


func main() {
    accountName := "Alice"//Zecrey NFT Marketplace SDK will automatically add the suffix ".zec" to the name
    seed := "0x6a1a320d14790f2d9aa9a37769f4833d583a3f7f974fd452a3990aeb0e7a6052" //l2 seed
    var offerId int64 = 31 //select a listed NFT
    AssetAmount = big.NewInt(1000000000000000000) //the amount used to purchase
    isSell := false
    c, err := sdk.NewClient(accountName, seed) 	 
    if err != nil { panic(err) }
    
    result, err := c.AcceptOffer(offerId, isSell, AssetAmount)//false represents "buy" while true represents "sell"
    if err != nil { panic(err) }
    
    data, _ := json.Marshal(result)
    fmt.Println(string(data))
}
```

{% endcode %}

**Example result**

* Information about the status change of the target order will be returned. Please refer to [Offers](https://docs.zecrey.com/go-and-js-sdk-basic-guides/2.-get-data#offers) for the status information.
* The information returned is all about the target order except for "account\_name".

{% code overflow="wrap" %}

```json

{
    "offer":{
        "id":31,
        "account_name":"Alice",//User's account name
        "direction":"1",
        "asset_id":241,
        "payment_asset_id":0,
        "payment_asset_amount":"1.000000000000000000",//This corresponds to the relative value of 10^18 of the AssetAmount(1000000)
        "status":"2", //Status changed to 2
        "signature":"{\"Type\":1,\"OfferId\":1,\"AccountIndex\":3,\"NftIndex\":247,\"AssetId\":0,\"AssetAmount\":1000000000000000000,\"ListedAt\":1667875678292,\"ExpiredAt\":1668350875000,\"TreasuryRate\":30,\"Sig\":\"kpaBoImpjmeI+PlOzkcCr7Tquf16qtriprOUUy3E1JUDjwcttXut8GEu6UV/H4dtJvnqKyD6FwK08hqv0vO67A==\"}",
        "expired_at":1668350875000,
        "created_at":1667875678
    }
}
```

{% endcode %}

{% endtab %}

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

* Purchase the NFT with `offerId` = 31
  1. Initialize the client
  2. Purchase NFT

With the private key:

<pre class="language-javascript" data-overflow="wrap"><code class="lang-javascript">import { Client } from "@zecrey/zecrey-legend-js-sdk";

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

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

const offer_id = 31;
const res = await client.acceptOffer(offer_id);

<strong>console.log("offer id: ", res);
</strong></code></pre>

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 offer_id = 31;
const res = await sdk.acceptOffer(account_name, account_index, offer_id);

console.log("offer id: ", res);
```

{% endcode %}

**Example result**

{% code overflow="wrap" %}

```json
offer id: 3
```

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

&#x20;&#x20;

&#x20;<br>
