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.


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 controls for contract


  • 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


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.


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


This project is licensed under the MIT License.

Last updated