Skip to main content

Overview

Crowdfunds are a primary way for people to create and join Parties. These crowdfund smart contracts allow groups to pool together resources in different ways. When someone contributes to a crowdfund, they become a member of the Party with voting power proportional to their crowdfund contribution.

Multiple types of crowdfund contracts exist for specific behaviors (e.g. acquiring a single NFT, acquiring multiple NFTs, simply raising ETH to bootstrap a treasury, etc.).

Key Concepts

  • Crowdfunds: Contracts implementing various strategies that allow people to pool ETH together for a purpose, forming a Party upon success.
  • Contribution Card: A soulbound NFT (ERC721) representing a contribution made to a crowdfund. Each contributor gets one of these the first time they contribute. At the end of the crowdfund (successful or unsuccessful), it can be burned, either to redeem unused contributions or to claim a Party Card in the newly formed Party. Only relevant to NFT-specific crowdfunds, where the amount of ETH used is not known until a purchase is made.
  • Party: The core Party contract itself, which controls governance logic, custodies the Party's holdings, tracks voting power, manages the lifecycle of proposals, and is simultaneously the token contract for Party Cards.
  • Globals: A single contract that holds configuration values, referenced by several ecosystem contracts.
  • Proxies: All crowdfund instances are deployed as simple Proxy contracts that forward calls to a specific crowdfund implementation that inherits from Crowdfund.

Contracts

The main contracts involved in this phase are:

CrowdfundFactory

Factory contract that deploys a new proxified Crowdfund instance.

Crowdfund

Abstract base class for all crowdfund contracts. Implements most contribution accounting and end-of-life logic for crowdfunds.

BuyCrowdfund

A crowdfund that purchases a specific NFT (i.e., with a known token ID) below a maximum price.

CollectionBuyCrowdfund

A crowdfund that purchases any NFT from a collection (i.e., any token ID) from a collection below a maximum price. Like BuyCrowdfund but allows any token ID in a collection to be bought.

CollectionBatchBuyCrowdfund

A crowdfund that purchases multiple NFTs with any token ID from a collection below a maximum price. Like CollectionBuyCrowdfund, but allows the acquisition of several eligible NFTs in a single batch transaction.

AuctionCrowdfund

A crowdfund that can repeatedly bid in an auction for a specific NFT (i.e., with a known token ID) until the auction ends.

RollingAuctionCrowdfund

A crowdfund that can repeatedly bid on auctions for an NFT from a specific collection on a specific market (e.g. Nouns) and can continue bidding on new auctions until it wins.

InitialETHCrowdfund

A crowdfund that simply raises ETH to bootstrap a Party's treasury.

AllowListGateKeeper

Restricts participation in a crowdfund based on whether an address exists in an allowlist.

TokenGateKeeper

Restricts participation in a crowdfund based on whether an address has a minimum balance of a token (ERC20 or ERC721).

Globals

A contract that defines global configuration values referenced by other contracts across the entire protocol.