# BUK Marketplace

## BUK Marketplace Contract

The `Marketplace` contract is a Solidity smart contract designed for managing the listing, delisting, buying, and other marketplace functionalities for BUK Protocol NFTs.

### Overview

The contract is designed with the following key components:

* **BUK Protocol**: Address of the BUK Protocol contract.
* **BUK NFTs Contract**: Address of the BUK NFTs contract.
* **Stable Token**: ERC20 token used for transactions in the marketplace.
* **Listed NFTs**: Mapping of listed bookings for sale.
* **Roles**: Constants for roles like ADMIN and BUK\_PROTOCOL.
* **Pausable:** Pausable **c**ontrols for contract

### Features

* **NFT Listing**: Allows users to list their NFTs for sale.
* **NFT Delisting**: Allows users to delist their NFTs.
* **NFT Buying**: Enables users to buy listed NFTs.
* **Role-based Access**: Different functionalities accessible by admin, BUK Protocol, and NFT owners.
* **Stable Token Transactions**: Uses a stable token for transactions in the marketplace.
* **Pausable :** Controls contract pause and unpause functions

### Functions

#### Public and External Functions:

* **pause**: To pause contract, only admin.
* **unpause**: To pause contract, only admin.
* **createListing**: List a booking/room NFT for sale.
* **deleteListing**: Delete a listing of a booking/room NFT.
* **relist**: Update the price and status for a listed NFT.
* **buyAsset:** Buy a listed room/booking NFT.
* **buyAssetBatch**: Buy a listed room/booking NFT in batch.
* **setBukProtocol**: Set a new BUK Protocol address.
* **setBukNFT**: Set a new BUK NFT address.
* **setStableToken**: Set a new stable token address.
* **getStableToken**: Get the address of the stable token.
* **getBukProtocol**: Get the current BUK Protocol address.
* **getBukNFT**: Get the current BUK NFT address.
* **getListingDetails**: Provide listing details of a booking.
* **isAssetListed**: Check if a booking/NFT is listed.

#### Private Functions:

* **\\\_setBukNFT**: Set a new BUK NFT address.
* **\\\_setBukProtocol**: Set a new BUK Protocol address.
* **\\\_setStableToken**: Set a new stable token address.
* **\\\_buy**: Safe transfer NFT to buyer and transfer the price to the owner.

### Events

* **AssetBought**: Emitted when a room/booking NFT is bought.
* **ListingCreated**: Emitted when a room/booking NFT is listed for sale.
* **Relisted**: Emitted when a booking/room NFT is relisted with a new price.
* **DeletedListing**: Emitted when a booking/room listing is deleted.
* **BukProtocolSet**: Emitted when a new BUK Protocol address is set.
* **BukNFTSet**: Emitted when a new BUK NFT address is set.
* **StableTokenSet**: Emitted when a new stable token address is set.

### Interface: IMarketplace

The `IMarketplace` interface provides a blueprint for the main `Marketplace` contract. It defines the essential functions, events, and data structures that the main contract should implement.

#### Key Components:

* **ListingDetails**: Struct to define the booking/room listing details.
* **ListingStatus**: Enum for listing statuses.
* **Events**: Various events like `dAssetBought`, `ListingCreated`, `Relisted`, etc.
* **Functions**: Functions like `createListing`, `delist`, `deleteListing`, `relist`, etc.

### License

This project is licensed under the MIT License.


---

# 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.bukprotocol.io/buk-protocol-v2/buk-protocol-smart-contracts/buk-marketplace.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.
