# BUK Treasury

## BUK Treasury Contract

The `Treasury` contract is a Solidity smart contract designed for managing the fund for Buk protocol and other marketplace contracts. This contract controls all kinds of money (cryptocurrency) transactions.

### Overview

The contract is designed with the following key components:

* **BUK Protocol**: Address of the BUK Protocol contract.
* **Roles**: Constants for roles like ADMIN and BUK\_PROTOCOL.
* **Stable**: Stable coin transactions

### Features

* **Withdraw stable**: Use to withdraw money to specified account
* **Refund stable and other** : Use to refund money related to bookings
* **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.

### Functions

#### Public and External Functions:

* **pause**: To pause contract, only admin.
* **unpause**: To pause contract, only admin.
* **setStableToken**: To set stable token.
* **setBukProtocol**: Set a new BUK Protocol address.
* **withdrawStableToken**: To withdraw stable tokens to specified account, Only admin.
* **withdrawOtherToken**: To withdraw other tokens to specified account, Only admin.
* **stableRefund**: To refund stable tokens to specified account, only Buk protocol can call this.
* **otherRefund**: To refund other tokens to specified account, only Buk protocol can call this.
* **getStableToken**: Get the address of the stable token.

#### Private Functions:

* **\\\_setStableToken**: Set a new stable token address.

### Events

* **SetStableToken**: Emitted when a new stable token address is set.
* **BukProtocolSet**: Emitted when a new BUK Protocol address is set.
* **WithdrawnToken**: Emitted when a withdrawn token.
* **Refund**: Emitted when a token refunded.

### Interface: ITreasury

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

#### Key Components:

* **Events**: Various events like `SetStableToken`, `BukProtocolSet`, `WithdrawnToken`, `Refund`etc.
* **Functions**: Functions like `stableRefund`, `otherRefund`, `getStableToken`, etc.

### License

This project is licensed under the MIT License.
