A protocol for group coordination. Party Protocol provides on-chain functionality for group formation, coordination, and distribution. Party Protocol allows people to pool funds together to acquire NFTs, then coordinate together to use or sell those NFTs as a group.
There are several code patterns that are used heavily throughout this codebase. Being familiar with them before diving into the contract will greatly help in understanding the motivation behind why certain things are done:
- The off-chain storage pattern is used across almost all contracts.
- The explicit storage buckets pattern is used in both the
PartyGovernance
andProposalExecutionEngine
implementation. - Packing storage pattern is used across almost all contracts to ensure not only that storage slots are packed wherever possible but also that items that are commonly accessed together (eg.
feeRecipient
andfeeBps
inPartyGovernance
) are packed in the same slot to be retrieved in a single call. - Merkle proofs are used to implement the
AllowListGateKeeper
.
The protocol has two distinct phases that occur in this order:
- Crowdfund
- Where contributors pool together ETH to acquire an NFT.
- Governance
- Where contributors govern an NFT (typically acquired by a crowdfund).