PartyBid is a collector DAO that lets individuals pool capital, bid on Mirror's reserve auctions, and resell NFTs.
Direct link to PartyBid contract.
Inspired by Denis Nazarov's tweet about automatic DAO's to bid on NFTs.
PartyBid is a collector DAO that enables individuals to pool capital and bid on Mirror's reserve auctions (kudos to the work of Mirror, Mint Fund, Zora, and Billy Rennekamp).
PartyBid is a DAO that has few functions. Namely, the ability to pool capital, bid on reserve auctions, take custody of won NFTs, resell those NFTs via Zora and split profits, or if outbid, return capital to participants.
PartyBidRA.sol
, passing in the address to the ReserveAuctionV3
contract you are using, the auctionID
(aka tokenID) of the NFT you are bidding for, your bidAmount
(scaled to 1e18 for wETH), and the exitTimeout
(which is the unix timestamp value till when you want the DAO to hold funds and wait for new members).join()
to become members of the DAO, sending in their ETH for a spot.Now, there are three possibilities:
bidAmount
before exitTimeout
, DAO members can call exit()
and withdraw their funds. Note, if you have benevolent DAO members, you can still call placeBid()
after the exitTimeout
window is up.bidAmount
, you can call placeBid()
to place your DAO's bid. If the DAO is unsuccessful in winning the NFT (aka, you are outbid), DAO members can call exit()
to withdraw their funds.bidAmount
, you call placeBid()
, and you win the NFT, you can continue:Once the DAO has won the NFT from the reserve auction, DAO members have 4 callable functions to resell this NFT:
DAOProposeZoraBid()
to propose new Zora bids against the NFT that the DAO should consider accepting.DAOVoteForZoraBidProposal()
to vote for these aforementioned proposals that have been put up. A successful proposal needs >50% of the vote to be executed.DAOExecuteZoraBid()
to execute a proposal that: (1) has greater than 50% of the DAO's voting power, and (2) has not changed since the vote was initiated (to prevent bad actors from changing their bids during the voting process). This will transfer the Zora NFT to the bidder, and accept their funds to the contract.exit()
to reclaim their share of the bid amount.# Install dependencies
npm run install
# Compile contracts with hardhat
npx hardhat compile
Full-form tests coming as soon as I get a chance to sit down and write out all possible state transitions.
The code has been tested extensively against Rinkeby deployments, but I still urge caution when using with real capital since this code is both unaudited and written by a non-full-time Solidity enthusiast.
Due to the simplistic nature of this mvp, there are a few considerations made:
prevOwner
cutback (aka, if a resold NFT with such cutback is sold by the bidder, the funds accrued to the contract will not be removeable).