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