We wanted to build a crowdfunding platform and protocol from the perspective of the fans. Traditional platforms like Kickstarter have the creators pitch an idea and fundraise, taking a transactional approach where the funders get rewarded with an early product or a discount. This doesn't work well in the case of big fanbases and lack of trust/delivery - see Star Citizen as an example.
Importantly, Bounty does 3 things:
Bounty protocol is a set of smart contracts and a dapp on top of them that allows anyone to pitch a creator (by @twitter handle) any idea - and anyone else can join in on the funding. Creators can choose to negotiate and set their own minimum price, but after that minimum is reached they're on the hook for delivering. Bounty allows on-chain voting and negotiation, where a configurable number of votes is required for the creator to receive "bonuses" from the pool of funds. Creators have to submit their intermediate work in order for the fans to see and vote on whether these funds should be returned to the crowd or not. Finally, Bounty triggers automatic minting of the final product - the token is sent to the funding contract itself and is owned by the treasury (the community). The dapp lists the final product on a marketplace, and the protocol manages distributions of any royalties that come in, giving everyone who funded the project some equity in the NFT.
There are 3 main smart contracts deployed on Polygon that make up the protocol:
The Bounty contract - each bounty on the platform maps to a deployment of a Bounty contract via a factory. This is responsible for holding all information about voting equity, pass/failed votes, and disbursement milestones. It's the contract that will also own the NFT produced as the outcome of the bounty.
The Treasury contract - this is the contract that keeps all of the money and mappings to all balances. All disbursement of funds goes through the treasury and the royalties that are earned by the sale of the final product also reside in the treasury's balance. The treasure knows which accounts have what % equity and how much is withdrawable. It automatically transfers tokens to the creator or the fans depending on vote status.
The Mint contract - the dapp calls this contract with an IPFS url to mint the final product, and this contract then sends the token directly to the individual Bounty contract.
The dapp is written in Typescript/Node/React/NextJS and serves mostly as a frontend to query the smart contract state. All negotiations are voting are done on-chain, and roughly half of the actions are taken by the server on behalf of user wallets. Using Polygon, we can make publishing, claiming, and negotiating bounties free for users and take on the gas cost ourselves.
Additionally, we used Pinata as the IPFS store for our metadata and Opensea to list the NFT.