NFT Auction Smart Contract & Web App Development

Job ID: 38251050

Budget: $250 – $750 USD

1. A simple NFT contract and a web app to mint. The coding is not important, as long as it works. Let's call this collection NFT #auctioneer. This can be done very simply based on https://www.youtube.com/channel/UC1LV4_VQGBJHTJjEWUmy8nA

2. A smart contract written in Solidity to auction any EIP-721 NFT on the Ethereum (except NFT #auctioneer), with following requirements.
2.1. The auction can only be started by a the owner of NFT#auctioneer. The auction is associated with an instance of NFT#auctioneer (see 2.3 and 2.7)
2.2. Let's call the NFT for sale NFT#sale. When the auction has started, the NFT#sale is locked by the contract, so seller cannot transfer it.
2.3. Auction should have a minimum amount and minimum active period. If and only if there is no bid after the minimum active period, can current owner of NFT#auctioneer cancel the auction. The NFT#sale would be transfer to the owner of NFT#auctioneer. In most cases, that should be the original seller. However, if the seller transferred NFT#auctioneer to someone else, the NFT#sale would be transferred to that someone else.
2.4. When a bidder place a bid, if the bid amount is the highest, it is accepted. The bid amount is transferred to the contract.
2.5. When a bid is accepted, if there is a previous highest bid, that bid is transferred back to the previous highest bidder.
2.6 The auction should have a pending period. After the pending period after a highest bid is placed, no more bid will be accepted, and the highest bidding can settle the auction.
2.7. When the highest bid settles the auction, the NFT#sale is transferred to him, and the highest bid amount is transferred from the contract to the owner of NFT#auctioneer.

3. A Frontend web app
3.1. It should be written with Typescript and ReactJS
3.2. It should use wagmi library (https://wagmi.sh) to connect the user (both seller, and bidder)'s wallet
3.3. It has a page to mint NFT#auctioneer
3.4. It has a page to display all NFT's owned by the wallet.
3.5. When user clicks on an NFT listed in 3.4, it should go to a page showing the detailed information of that NFT, including the image, the collection name, and traits.
3.6. If the wallet is connected, and if it owns one or more NFT#auctioneer, and if the NFT displayed is not NFT#auctioneer, the page displayed by (3.5) should have a "Auction" panel, which allows the user to input a minimum bid amount, minimum active period, and a "Start auction" button, which calls smart contract specified by (2).
3.7. The web app has a page showing a list of all NFT under the NFT#auctioneer collection.
3.8. When user clicks on an NFT#auctioneer listed in 3.7, it should go to a page showing all NFT's auctioned by the owner of that particular NFT#auctioneer.
3.9 If a wallet is connected
3.9.1 If the auction is still on-going (meaning there is no bid but it is still within the minimum active period, or there has been bids, but the current time is within pending period of the when the highest bid was placed)
3.9.1.1 If this wallet did not place the highest bid on the NFT, there should be a panel to place bid. (2.4 to 2.5)
3.9.1.2 If this wallet is the highest bid, display the highest bid amount, and bid time, and "Pending" text.
3.9.2 If the auction has finished and the connected wallet is the highest bidder, display a panel with a "Collect NFT" button. When the button is clicked, perform 2.7

3.10. A special page which only admin (which particular wallet address) can access.
3.10.1 It should display a list of finished auctions for NFT#sale which has a highest bid, but have not settled yet.