Update: $BOUNTY crowdfund has been fully funded. Thank you to all contributors and supporters. We are currently coordinating a candidate search to hire the bounty developer and we are grateful to have the Mirror team assisting with technical evaluation of candidates and submissions.
If you think you are the right candidate please email us at firstname.lastname@example.org.
We're excited to announce a new experiment. We're using crypto to crowdfund a bounty to bring reserve auction functionality to MintFund.
Reserve auctions have seen significant traction as a mechanism for selling NFTs, but they have typically been limited to proprietary marketplaces. MintFund's mission is to expand opportunity for artists hoping to break out into the crypto art scene. Part of that mission is providing open access to best-in-class tools that artists need to thrive.
Today, we're launching a Mirror crowdfund contract to create a bounty for a talented Solidity developer to implement a robust and completely permissionless version of reserve auctions for NFTs. Unlike the previous $ESSAY and $VALUE campaigns, the output of this bounty will be written code instead of written text.
How it Works
- The bounty crowdfund has a hard-cap of 7 ETH
- Backers can send ETH to the crowdfund in exchange for $BOUNTY tokens
- If the funding target is hit, MintFund will hire a talented Solidity developer from the Ethereum community to implement the fully open-source smart contracts
- The codebase will be posted on Mirror as permanent, public data and mirrored on GitHub
- The codebase will be minted as an NFT on the Zora protocol, representing the first digitally unique and collectible codebase
- The final code will be deployed on mainnet and used to auction off this NFT
- If the NFT is sold, ETH will accrue to $BOUNTY tokens
- $BOUNTY tokens can be traded like any ERC-20 token, or redeemed for underlying ETH
- Participants in the crowdfund will be embedded in the code base forever as the supporters who made it possible
25% of $BOUNTY tokens will be retained by MintFund and 5% will go to the developer, the remaining 70% will be distributed to $BOUNTY backers.
The Power of Reserve Auctions
Since the advent of NFT transactions, reserve auctions have seen significant traction as a mechanism for selling NFTs. The hype, the intrigue, and the status involved in a singular moment in time where everyone's eyes are fixed upon a particular drop provides a narrative for all the artists who have sold work. Reserve auctions become a tool to connect both artist and collector, a story for communities to rally around—news to be told to the masses. They are a spotlight and turning point of an artist's career in the cryptosphere and we want to bring it to every artist. Reserve auctions started on SuperRare and have moved to other marketplaces such as Nifty Gateway. However, with a platform like Zora the permissionless nature of the zNFT smart contracts allows anyone to extend the bidding protocol, making it a great fit to add a reserve auction extension.
We believe that building the tools for creatives to push their best works unfettered by cost, access, and exposure yields the next generation of mind bending work and an ever growing community of shared talent, spirit, and wealth. MintFund is dedicated to giving all communities, with emphasis to BIPOC & LGBTQIA folks, the means to take cryptomedia / NFTs by storm and move culture along with them. We recognize that the key to achieving our goal of launching life-changing creative careers on the blockchain is threefold:
- Cover gas fees to enable access to the tools to participate in the NFT ecosystem
- Create tools for artists to increase their exposure and connect with collectors
- Build a success-based funding source to ensure MintFund can continue to sustain its work without relying on donations
About the Bounty / Scope of Work
- Any owner of a Zora NFT should be able to permissionlessly kick off an auction. Kicking off an auction should not require deploying a new contract.
- The auction should be configurable such that its constructor accepts (at minimum) two parameters
- Reserve Price (amount + currency address)
- Auction Duration (ex. 24 hours)
- The auction should be binding, such that at the end of the Auction the highest bid is automatically accepted and the NFT is transferred to the highest bid's recipient address.
- Bids on the auction are made in ETH and should be locked in escrow for the duration of the auction, but automatically returned if a higher bid is made.
- If the Auction has not received a bid higher than the reserve price, the original owner can withdraw the NFT. Once a bid has been placed, the NFT is locked until the auction is completed.
- Relevant events are emitted for each of the major function calls.
- Alice grants permission to transfer the NFT to the auction contract
createAuctionwith the tokenId, reservePrice, and creator address. This transfers the NFT to the contract.
- Craig submits a bid below the reserve price, but it reverts
- Bob calls
createBidwith a bid that is higher than the reserve price, which sets the currentBid to his address and amount.’ The contract receives Bob's ETH and holds it in escrow.
- Craig calls
endAuction, but it reverts because the current block time doesn't exceed the Auction's end-time
- Danny calls
createBid, which replaces Bob's bid as the current bid. Bob is refunded the ETH that he sent into the contract previously.
- No new bids come in, and the current block time exceeds the Auction's end-time
- Danny calls
endAuction, which transfers the NFT to her address. Runs a payout according to the Zora market's BidShare data to send funds to the creator.
High Level Implementation Ideas
Each Auction is described by the following data:
- tokenId: The Zora market token ID for the NFT
- duration: The number seconds that the auction runs for after the first bid, e.g. 24 hours, which is extended with each new bid
- firstBidTime: Unix timestamp of the first bid
- reservePrice: Allow the creator to set a reserve price, below which the auction will not settle and the NFT is returned
- creator: Keep track of the creator in case we need to return the NFT. A single auction contract keeps track of multiple auctions, via a simple mapping of tokenId to Auction. This contract also keeps track of the current Bids for each Auction. Bids are mapped from tokenId to bid. A bid is composed of:
- Amount The contract has the following functionality:
- createAuction(uint tokenId, uint reservePrice, address creator)
- Instantiates an Auction using the given parameters, and transfers the NFT to the contract itself, so that the contract controls the NFT
- createBid (uint amount, uint tokenId) external payable
- Checks that amount is greater than the current bid, and greater than the reserve price
- Check that the msg.value == amount
- "Start the clock" and increases the duration by
- Refund the previous bid
- endAuction(uint tokenId)
- Checks that the current time is greater than the end time
- Transfers the NFT to the highest bidder, if there is one and is greater-or-equal the reserve price, else transfers back to the creator
- cancelAuction(uint tokenId)
- Can only be called by the creator
- Checks if there are no bids
- Transfers the NFT back to the creator
This initiative, if executed successfully, will not only give new rise to creatives, but create a pipeline to mint their NFTs and expose them to the greater communities that have rallied around MintFund and our growing list of contributors and partners.
About Mint Fund.
MintFund is a community project created with the sole purpose to build a support network for artists interested in bringing their art into the world of NFTs/cryptomedia. MintFund provides artists with the funds to mint NFTs (known as gas costs), and offers guidance, mentorship and advice for the growing community of cryptomedia artists. MintFund is accessible to all artists and we prioritize BIPOC and LGTBQIA+ artists, especially outside of North America and the European Union.