# BUK Royalty

## BukRoyalties Contract

The `BukRoyalties` contract is a Solidity smart contract designed to manage the royalty system for the Buk Protocol. It provides functionalities to set and retrieve royalty information for various entities involved in the protocol.

### Overview

The contract is designed with the following key components:

* **Roles**: Uses the AccessControl library from OpenZeppelin to manage roles.
* **Royalty Struct**: A struct to capture the details of each royalty.
* **Royalty Arrays**: Arrays to store different types of royalties.

### Features

* **Role-based Access**: Different functionalities accessible by users with the `ADMIN_ROLE`.
* **Royalty Management**: Functions to set and retrieve royalty information for Buk, Asset Owners (game developers, event organizers, hotels, airlines etc.), First Owners (first user to mint Asset on-chain), and other entities.

### Functions

#### Public and External Functions:

* **setBukProtocolContract**: Sets the Buk Protocol address.
* **setBukRoyaltyInfo**: Defines the royalty fraction for Buk.
* **setAssetOwnerRoyaltyInfo**: Defines the royalty fraction for the Asset Owner (game developers, event organizers, hotels, airlines etc.).
* **setFirstOwnerRoyaltyInfo**: Defines the royalty fraction for the First Owners (creator / first user to mint dAsset).
* **setOtherRoyaltyInfo**: Defines the royalties for other entities.
* **getRoyaltyInfo**: Retrieves royalty information for a given token ID.

### Events

* **SetBukProtocol**: Emitted when the Buk Protocol address is updated.
* **SetBukRoyalty**: Emitted when the Buk royalty is updated.
* **SetAssetOwnerRoyalty**: Emitted when the Asset Owner royalty is updated.
* **SetFirstOwnerRoyalty**: Emitted when the First Owner royalty is updated.
* **SetOtherRoyalties**: Emitted when other royalties are updated.

### Interface: IBukRoyalties

The contract also defines an interface `IBukRoyalties` which outlines the expected structure and functions for the BukRoyalties contract. The interface includes:

* **Royalty Struct**: A struct to capture the details of each royalty.
* **Events**: Events related to updating the Buk Protocol address and setting royalties.
* **Functions**: Functions to set the Buk Protocol address, define royalty fractions, and retrieve royalty information.

### 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-royalty.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.
