A protocol for group coordination. Party Protocol provides on-chain functionality for group formation, coordination, and distribution. Currently focused on making NFTs multiplayer.
For more information on Party Protocol, see the documentation here.
This is an open protocol, so if you are interested in contributioning see here for more details about how you could get involved.
docs/ # Start here
├── overview.md
├── crowdfund.md
└── governance.md
contracts/
│ # Used during the crowdfund phase
├── crowdfund/
│ ├── AuctionCrowdfund.sol
│ ├── BuyCrowdfund.sol
│ ├── CollectionBuyCrowdfund.sol
│ ├── CrowdfundFactory.sol
│ ├── Crowdfund.sol
│ └── CrowdfundNFT.sol
├── gatekeepers/
│ ├── AllowListGateKeeper.sol
│ └── TokenGateKeeper.sol
├── globals/
│ └── Globals.sol
│ # Used during the governance phase
├── party/
│ ├── Party.sol
│ ├── PartyFactory.sol
│ ├── PartyGovernance.sol
│ └── PartyGovernanceNFT.sol
├── proposals/
│ ├── ProposalExecutionEngine.sol
│ ├── ArbitraryCallsProposal.sol
│ ├── FractionalizeProposal.sol
│ ├── ListOnOpenseaProposal.sol
│ └── ListOnZoraProposal.sol
├── distribution/
│ └── TokenDistributor.sol
| # Used to render crowdfund and governance NFTs
└── renderers/
├── CrowdfundNFTRenderer.sol
└── PartyNFTRenderer.sol
sol-tests/ # Foundry tests
tests/ # TS tests
First install Foundry.
forge install
yarn -D
yarn build
yarn test
yarn test:ts
yarn test:sol
# If you want gas reports:
yarn test:sol --gas-report
forge test -m testFork --fork-url $YOUR_RPC_URL
The following auditors were engaged to review the protocol before launch:
All contracts except tests, interfaces, dependencies, and those in renderers/
are in scope and eligible for the Party Protocol Bug Bounty program.
The following are known and are not eligible for a bug bounty:
- Crowdfund host uses their crowdfund's balance to buy their own NFT
- Forcing a
BuyCrowdfund
orCollectionBuyCrowdfund
to use its entire balance to acquire an NFT above its listed price - Free or gifted NFTs being locked in a crowdfund after the crowdfund lost
The rubric we use to determine bug bounties is as follows:
Level | Example | Maximum Bug Bounty |
---|---|---|
6. Severe | - Draining or freezing of holdings protocol-wide (e.g. draining token distributor, economic attacks, reentrancy, MEV, logic errors) | Let's talk |
5. Critical | - Contracts with balances can be exploited to steal holdings under specific conditions (e.g. bypass guardrails to transfer precious NFT from parties, user can steal their party's distribution) | Up to 25 ETH |
4. High | - Contracts temporarily unable to transfer holdings - Users spoof each other |
Up to 10 ETH |
3. Medium | - Contract consumes unbounded gas - Griefing, denial of service (i.e. attacker spends as much in gas as damage to the contract) |
Up to 5 ETH |
2. Low | - Contract fails to behave as expected, but doesn't lose value | Up to 1 ETH |
1. None | - Best practices |
Any vulnerability or bug discovered must be reported only to the following email: [email protected].
The primary license for the Party Protocol is the GNU General Public License 3.0 (GPL-3.0
), see LICENSE.
- Several interface/dependencies files from other sources maintain their original license (as indicated in their SPDX header).
- All files in
sol-tests/
andtests/
remain unlicensed (as indicated in their SPDX header).