# BUK NFT

## BUK Protocol NFT Contract

The `BukNFTs` contract is a Solidity smart contract designed for managing dynamic asset inventory and ERC1155 token management for corresponding NFTs.

### Overview

The contract is designed with the following key components:

* **Buk Treasury**: Address of the Buk treasury contract.
* **Buk POS NFT Collection**: Name and address of the Buk POS NFT collection contract.
* **Buk Protocol**: Address of the Buk Protocol contract.
* **Token URI Mapping**: Mapping for token URI's for booked tickets.
* **Roles**: Constants for roles like Buk Protocol contract, marketplace contract, and admin.
* **Pausable:** Pausable **c**ontrols for contract

### Features

* **Role-based Access**: Different functionalities accessible by admin, marketplace, and Buk Protocol contract.
* **Token URI Management**: Functions to set and retrieve token URIs.
* **NFT Minting and Burning**: Functions to mint and burn NFTs.
* **Royalty Information**: Function to retrieve royalty information for a specific token.
* **Safe Transfers**: Functions to safely transfer NFTs.
* **Pausable :** Controls contract pause and unpause functions

### Functions

#### Public and External Functions:

* **pause**: To pause contract, only admin.
* **unpause**: To pause contract, only admin.
* **setBukProtocol**: Set the Buk Protocol Contract address.
* **setBukTreasury**: Set the treasury address.
* **setMarketplaceRole**: Set the marketplace address.
* **setBukPOSNFTRole**: Set the BukPOSNFT to the contract.
* **setURI**: Sets the URI for a specific token ID.
* **mint**: Mint a new NFT with a specific token ID, account, amount, and data.
* **burn**: Burn a specific NFT.
* **royaltyInfo**: To retrieve information about the royalties associated with a specific token.
* **safeTransferFrom**: Transfers ownership of an NFT token from one address to another.
* **safeBatchTransferFrom**: Transfers ownership of multiple NFT tokens from one address to another.
* **uri**: Returns the URI associated with the token ID.

#### Private Functions:

* **\_setBukProtocol**: Set the Buk Protocol Contract address.
* **\_setBukTreasury**: Set the BukTreasury contract address.
* **\_setBukPOSNFTRole**: Set the role to a BukPOSNFT contract.
* **\_setURI**: Returns the URI associated with the token ID.

### Events

* **SetBukProtocol**: Emitted when Buk Protocol Address is updated.
* **SetBukTreasury**: Emitted when treasury is updated.
  * **SetMarketplace**: Emitted when marketplace role is granted.
* **SeNFTPOSContractRole**: Event to set NFT contract role.
* **SetURI**: Event to set token URI.

### Interface: IBukNFTs

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

#### Key Components:

* **Events**: Various events like `SetBukProtocol`, `SetBukTreasury`, `SetMarketplace`, etc.
* **Functions**: Functions like `setBukProtocol`, `setBukTreasury`, `setMarketplaceRole`, 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-nft.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.
