---
# System prepended metadata

title: NFT Smart contracts docs(draft document)

---


NFT Smart contracts docs(draft document)
===

WoomExchange: an exchange NFT smart contracts that manage auctions and direct sell on chain.


# Workflow
![](https://i.imgur.com/Wf7TwZc.png)


---
there are two main flow in WoomEchange contracts:
  
> Direct sell
> Auctions

## **Direct sell**

In this flow users create an offer using addOffer function and specify an Ether price
Then users can bought direclty the NFT if all conditions are meet.
addOffer parameters

**AddOffer:** this function create an offer for direct sell or auctions, it has 9 main params described below:

| Param | type | description |
| -------- | -------- | -------- |
| seller     | address     | the NFT owner address     |
| collection     | address     | the ERC721 contrat address     |
| assetId     | uint256     | the NFT token id     |
| token     | address     | An ERC20 used for payment     |
| isEther     | bool     | true if payment would be in ether else false     |
| price     | uint256     | the NFT price      |
| isForSell     | bool     | true to activate direct sell     |
| isForAuction     | bool     | false to keep token in direct sell     |
| expiresAt     | uint256     | the offer expire date     |
 
 **BuyOffer:** this function enable to users to buy a NFT in sell once all conditions are meet, it has two main params:
| Param | type | description |
| -------- | -------- | -------- |
| collection     | address     | the ERC721 contrat address     |
| assetId     | address     | the NFT token id     |

And in the `msg.value` users must provide an amount in ether upper or equal to token price.

## **Auctions**
to start an auction for NFT token, user should create and offer like below:
### addOffer ###
| Param | type | description |
| -------- | -------- | -------- |
| seller     | address     | the NFT owner address     |
| collection     | address     | the ERC721 contrat address     |
| assetId     | uint256     | the NFT token id     |
| token     | address     | An ERC20 used for payment     |
| isEther     | bool     | false, payment would be processed with ERC20 for auctions     |
| price     | uint256     | the NFT price      |
| isForSell     | bool     | false to activate auctions     |
| isForAuction     | bool     | true to keep token in direct sell     |
| expiresAt     | uint256     | the offer expire date     |

### setOfferPrice ###
This function set an offer price.
It has 3 mains params

| Param | type | description |
| -------- | -------- | -------- |
| collection     | address     | the ERC721 contrat address     |
| assetId     | uint256     | the NFT token id     |
| price    | uint256     | the offred price    |
### setExpiresPrice ###
This function set an offer price.
It has 3 mains params

| Param | type | description |
| -------- | -------- | -------- |
| collection     | address     | the ERC721 contrat address     |
| assetId     | uint256     | the NFT token id     |
| expiresAt    | uint256     | the expire date in second    |

### setForAuction ###
This function set an offer price.
It has 3 mains params

| Param | type | description |
| -------- | -------- | -------- |
| collection     | address     | the ERC721 contrat address     |
| assetId     | uint256     | the NFT token id     |
| isForAuction    | bool     | enbale/disable for auction    |
### setForSell ###
This function set an offer price.
It has 3 mains params

| Param | type | description |
| -------- | -------- | -------- |
| collection     | address     | the ERC721 contrat address     |
| assetId     | uint256     | the NFT token id     |
| isForSell    | bool     | enbale/disable for sell    |
### placeSafeBid ###
This function create a bid on NFT token in auction whether all conditions have been met.
It has 5 mains params

| Param | type | description |
| -------- | -------- | -------- |
| collection     | address     | the ERC721 contrat address     |
| assetId     | uint256     | the NFT token id     |
| token     | address     | An ERC20 used for payment     |
| price    | uint256     | the offred price    |
| expiresAt     | uint256     | the bid expire date     |
   
 ### cancelBid ###   
 
 This function cancel a bid on NFT token in auction whether all conditions have been met.
It has 3 main params

| Param | type | description |
| -------- | -------- | -------- |
| bidder     | address     | address of the bidder     |
| collection     | address     | the ERC721 contrat address     |
| assetId     | uint256     | the NFT token id     |

### acceptBid ###   
 
 This function accept a bid on NFT token in auction whether all conditions have been met.
It has 3 main params

| Param | type | description |
| -------- | -------- | -------- |
| bidder     | address     | address of the bidder     |
| collection     | address     | the ERC721 contrat address     |
| assetId     | uint256     | the NFT token id     |
