There SHOULD be a main contract for auctions or listings whose name should be Auctioneer
The Auctioneer contract MUST support several auctions or listings happening simultaneously
The Auctioneer contract MUST support auctions or listings of one ERC-721 NFT at a time
Interactions with our Auctioneer contract MUST be exempted from paying the “private sale fee” coded into our Gold Gerege NFT contract
The Auctioneer contract MUST support time-based auctions in which the seller MUST transfer the NFT into the contract which will remain locked for the duration of the auction.
The Auctioneer contract MUST support auctions which are irreversible i.e. the seller MUST NOT be able to cancel the auction and retrieve the NFT though he can participate in the auction himself as a bidder.
auctions supported by the Auctioneer contract SHOULD default to the “English auction” modality i.e. auction takes on bids and the highest bidder wins
when running an English auction, bids SHOULD be in $ETH and not $WETH
if bids are in an ERC–20 token, then HODL tokens SHOULD be whitelisted, that is the seller can choose if bids are in bHODL or uHODL
whichever tokens the bids are in, the biding action MUST require the physical transfer of the “bid token” to the auction contract
whenever a bid is an “outbid” i.e. the outbidder MUST pay for the gas to transfer the bid that’s being replaced back to that bidder e.g. Alice bids 0.75 $bHODL which outbids Bob, who had just been the winning bid with 0.5 $bHODL, so in Alice’s bid transaction she will transfer 0.75 $bHODL to the contract which will store her bid as the winning bid while simultaneously transferring Bob’s address his 0.5 $bHODL with all the network transaction fees being paid by Alice.
the contract MUST support an option for the seller to set a “reserve price” when setting the NFT for auction, denominated in the bid token.
any bid that does not beat the reserve price, if any, or any bid that does not outbid the previous bid, MUST revert when bidding; however, the auction will continue
at the end of the auction, the bidder stored in the contract i.e. the bidder with the highest bid MUST be declared the winner.
the winner MUST claim his NFT after the auction is done to receive it; conversely, the seller MUST claim his winnings or the amount of money he’s entitled to (highest bid minus fees and royalties) from the contract.
all auctions conducted by the Auctioneer contract MUST look into the EIP2981 royaltyInfo method and enforce the specified royalty out of the sale price, and send this money to the specified address when the seller claims his winnings from the auction.
all auctions conducted by the Auctioneer contract MUST take in a “platform fee” which is to be initialised at 1% of any winning bid or sale price, this SHOULD be sent to the treasury address when winners collect their winnings e.g. Alice is a seller and the winner of her NFT auction is Bob who bid 0.75 $bHODL, since Gerege NFTs have a royalty of 5% then when Alice comes claims her winnings 6% is discounted from Bob’s bid (5% royalty + 1% platform fee) and Alice gets 0.705 $bHODL transferred to her wallet while DeOrderBook treasury gets two transfers (one 5% “royalty” and another 1% "platform fee)
the Auctioneer contract MAY support “Dutch auction” as an option to the “English auction” default.
when performing a Dutch auction, the seller MUST set an “initial price” besides a "reserve price"and an “end time” for the auction, the auction will decrease the “initial price” linearly until the “end time”
when a buyer is able to meet the Dutch auction’s price, the transaction is successful, the buyer receives the NFT and the seller receives his winnings (aka price minus royalties minus platform fee)
when the buyer is unable to meet the Dutch auction’s price, his bid reverts but the auction continues.
all listings by the Auctioneer contract MUST be set in increments of days, with the maximum allowable being 30 days.
besides auctions, the Auctioneer contract MAY support fixed-price listings
fixed-price listings MUST have an “ask price” and they remain at that price until a buyer pays for it, in which case the buyer gets the NFT while the winnings (sale price minus royalty minus platform fee) are sent to the seller.
fixed-price listings MUST be cancellable by the seller, in which case he will receive his NFT back
all listings on the Auctioneer contract MUST pay a deposit in ETH
the deposit amount MUST be set by the owner and at the initial stage it shall be 0.05 ether
the deposit MUST be charged on initialising any listing whether English Auction, Dutch Auction, or Fixed-Price
the deposit MUST be returned to the user whenever an item in the platform is successfully sold in a fixed-price listing, or whenever an auction ends with a winner and the seller claims his earnings
the deposit MUST be forfeited to the treasury if the seller does not claim back his NFT in case of an unsuccessful listing or his winnings in case of a successful listing
the keeper addresses MUST be able to “tickle” the contract so that the end-state of any listing can be cleared, returning any NFT in the contract and any winnings, royalties, and fees to the right external party; when a keeper “tickles” the contract in this manner, the deposit is forfeit.
after the end of any listing, there MUST be a gracePeriod set by owner, to be initialised to 2 days.
the keeper MUST only be able to “tickle” the contract in the manner described earlier after “end of listing + grace period” time has passed
the following MUST be permissioned addresses known to the Auctioneer contract
an owner address which MUST be initialised, which MUST only be changed by the owner itself
a treasury address which MUST be settable and changeable by the owner
a keeper array of addresses which MUST be settable and changeable by the owner