Decentralized Crowdfunding
NIP-3030
Decentralized Crowdfunding
draft optional
Implemented in Angor, Angor Hub and Angor Profile.
Terms
founder- creator of the crowdfunding campaigninvestor- investor of the crowdfunding campaignprojectIdentifier- the unique identifier of the project on the specific implementation of the protocol
Decentralized Crowdfunding Protocol
The protocol utilizes the Nostr network to create a decentralized crowdfunding platform. The protocol allows founders to create crowdfunding campaigns and investors to invest in them. The protocol is relying on standard Nostr events for the majority of metadata, except for the specific events defined in this NIP.
Campaign Setup
The founder creates a funding campaign by sending a 3030 event to the Nostr network. Then a Bitcoin transaction that includes the event identifier is sent to the blockchain with the identifier as OP_RETURN value.
Any software can implement the protocol, with different security models for wallets.
Campaign Browser
Campaign software should be entirely clientside, either as a stand-alone app, or as a purely frontend webpage.
It should find all the published kind: 3030 events, then use the nostrPubKey field in the content to query for profile [NIP-01](01.md) (kind: 0) and [NIP-78](78.md) data.
Tags (d) used by the protocol are:
- ['angor:members']
- ['angor:project']
- ['angor:faq']
- ['angor:media']
It should additionally query and indexer of the blockchain (e.g. Bitcoin) to find the transactions with the event identifier in the OP_RETURN field.
Event 3030: Create a funding campaign.
Event Content
{
"founderKey": <string, Bitcoin public key of the founder>,
"founderRecoveryKey": <string, Bitcoin public key of the founder recovery key>,
"projectIdentifier": <string, unique identifier of the project>,
"startDate": <int, UNIX timestamp of the start date of the campaign>,
"penaltyDays": <int, number of days after the end date of the campaign when the penalty is applied>,
"expiryDate": <int, UNIX timestamp of the end date of the campaign>,
"targetAmount": <int, target amount of the campaign in sats>,
"stages":
[{"amountToRelease":25,"releaseDate": <int, UNIX timestamp of the release date of the stage>},
{"amountToRelease":25,"releaseDate": <int, UNIX timestamp of the release date of the stage>},
{"amountToRelease":25,"releaseDate": <int, UNIX timestamp of the release date of the stage>},
{"amountToRelease":25,"releaseDate": <int, UNIX timestamp of the release date of the stage>}]]
}Event 3031: Campaign seeders.
Event Content
WORK-IN-PROGRESS: Multiple decisions needs to be made during final implementation.
Add "eventId" as a "d" tag.
{
"projectIdentifier": <string, unique identifier of the project>,
"projectSeeders":{"threshold":0,"secretHashes":[]}
}Additional
The full P2P Funding Protocol can be found BCIP-0005