Skip to main content

4) Sharing revenue and royalties with your team and community

Every NFT project has several stakeholders including founders, developers, artists and community members; so it is vital to have transparent tools and processes in place to distribute value among them. Let's explore few scenarios for this:

  • Distributing revenue from NFT primary sales to team members and community vault

  • Sharing royalties from secondary sales between founders, core team members and community

  • Giving out a percentage of project's token equally to all the community members based on the number of NFTs they hold

As you can see from the scenarios above, distributing tokens (in terms of primary sales, royalties, project tokens, etc.) among different stakeholders is essential for any project; and more importantly this distributions should happen on-chain and in a verifiable and transparent way.

In this tutorial, we are going to learn how to achieve this goal using Flair.

What to expect after this tutorial?​​

  • To create a Stakeholder Registry where you can add different stakeholders of your project (i.e. founders, artist, community)

  • To create a Primary Stream where you set shares for above defined stakeholders and configure primary sales/royalties of your NFT project to go to this stream for further distribution among stakeholders

  • To create a Community Stream where you can equally distribute any share of funds (revenue, royalties) to community members equally based on number of NFTs they hold

  • To claim from stream as different stakeholders

Requirements​​

tl;dr​

tldr

Step 1. Create community stream​

Before anything, make sure you have already created your NFT collection and have the contract address for it at hand.

The first step for us is to create a Community Stream; This stream allows us to instantly distribute any token (native or ERC20) to all the NFTs so their owners can claim them.

To create a Community Stream, head over to Stream section in Flair dashboard and click on "Distribute tokens to NFT holders"

community-stream-dashboard

Now it is time to fill the form for Community Stream:

  • Set the "Title" and "Private Name" to a descriptive one that you can easily recognize later. e.x you can use "Community Stream" here.

  • Input the contract address of your NFT Collection. If you have deployed your collection via Flair, you can find the contract address under "Deploy section"

  • No need to manually input the "Total NFTs" as the field will automatically gets filled based on the contract address you used.

community-stream-form

Now, by deploying this, we have created a stream that allows the holders of our NFT to equally claim tokens that gets emitted to it. This will become very handy later when we want to distribute a certain percentage of our NFT Collection's primary sales and royalties to this stream.

Step 2. Create stakeholder registry​

Now it is time to create a Stakeholder Registry. This is a special NFT Collection and an intuitive way to define the stakeholders of your project (e.x founders, artist, community) and issue NFTs for them that can be used for giving a share in (profit or income) of a stream.

First, head over to Collections section in Flair dashboard and click on "Stakeholder Registry".

stakeholder-registry-dashboard

  • Choose a descriptive Name for your collection, as this will appear in dashboard as well as public explorers and scanners.

  • In "Stakeholders" section, you can define different addresses for stakeholders in your project. E.x you can input:

    • A multi-sig wallet address that belongs to founders

    • A wallet address that belongs to the artist of your project

    • The contract address of the "Community Stream" that we created in Step 1 (you can find the contract address under "Deploy" section of stream)

  • Don't worry about setting the shares for each of stakeholders as we will define that in the next step of our Tutorial.

  • You as the deployer of this Stakeholder Registry have the option to change and remove stakeholders. Also, you have the option to give up this power in future for better transparency with your community.

stakeholder-registry-form

Step 3. Create primary stream​

In this step, we want to create a Primary Stream based on the Stakeholder Registry we created in Step 2 and define the shares for each of the stakeholders accordingly.

For that, navigate to Streams section again in Flair dashboard and select "Revenue and income split via NFTs".

primary-stream-dashboard

  • Choose a title and private name for your stream. E.x Primary Stream

  • Input the Stakeholder Registry contract address you created in Step 2

  • Now it is time to define different shares for our pre-defined stakeholders. To keep things simple, we are going to create 100 total shares which will be distributed among Founder (30), Artist (20) and Community (50)

primary-stream-form

Step 4. Configure primary sales recipient to be primary stream​

All right, so far we have created all the contracts needed for distributing tokens (profit, revenue, primary sales, royalties, etc.) to different stakeholders (our team, artist, community members, etc.). Let's quickly recap what contracts we have created:

  • A "Community Stream" based on the original NFT Collection to distribute any tokens that comes to it equally to all the NFT holders

  • A "Stakeholder Registry NFT Collection" to define different stakeholders to share any tokens (income or profit) among them. These stakeholders can be a single wallet address (e.x artist), multi-sig wallet (e.x founders) or contract address (e.x community stream)

  • A "Primary Stream" based on the "Stakeholder Registry" to define shares for each of the stakeholders

So we have the streams now, but how about the funds or tokens that should go into the stream to be distributed? One example of such funds can be primary sales of an NFT collection.

Imagining you have launched your NFT Collection, you might want to distributed the generated income from this collection to your founders, artist and community. For that head over to your collection in Flair dashboard and from the side menu select "Proceeds"

  • Under "Withdraw" section, confirm the address under "Recipient" and click on "Change recipient"

  • In the opening modal, input the contract address from Primary Stream you created in Step 3.

  • Now with this, all the primary sales revenues will directly go to the stream and gets distributed among stakeholders (30% for founder, 20% for artist and 50% equally distributed among NFT holders). Isn't that amazing?

primary-sales-recipient

Step 5. Configure royalties recipient to be primary stream​

We also want the royalties from secondary sales to go to the same stream and gets distributed among our stakeholders.

To achieve that, let's click on "Royalty" section in NFT Collection's admin sidebar.

  • You can see the "Receiver Address" of secondary sales in "On-chain royalty" section. We need to change this to be the Primary Stream contract address.

  • Clicking on "Change royalty" button allows you to set the address of our Primary Stream as the recipient.

  • From now, all the secondary sales will directly goes into this stream and gets distributed among all the stakeholders (30% for founder, 20% for artist and 50% equally distributed among NFT holders)

royalties-recipient

Congratulations! So far you have successfully created streams, connected them to the primary and secondary sales of your NFT Collection. Now every time you withdraw the primary sales or you receive royalties from different marketplaces; your stakeholders will receive their share.

Withdrawing and Claiming​

This operation must be done daily or weekly based on what you desire.

info

The process of withdrawing funds will be automated in later versions of Flair dashboard; so as the admin you have less things to worry about.

Claiming Primary Sales​

Head over to the NFT Collection in Flair dashboard and choose "Proceeds"; Then click on "Withdraw all" button.

  • As you can see, there is 1 ETH available to withdraw, as the revenue generated by our NFT Collection sales.

  • Click on "Withdraw all" to withdraw these funds which will be sent to the Primary Stream.

claiming-primary-sales

Claim as founder or artist​

After the withdraw of primary sale funds, all the stakeholders can claim their share of funds. E.x when the founder (which we allocated 30 shares) go to the claiming page, this is what they see.

  • The founder had 30 shares out of 100 shares and this translates to 0.3 ETH

  • You can also see the total supply of tokens available for withdraw

claiming-founder

Claim toward community stream​

If you want to claim for the Community Stream, you need a way to distribute all the shares of community as an admin.

For that, choose "Claiming" section on Primary Stream sidebar, input the Community Stream contract address under "Receiver address" in "Claim on behalf of" section. After that, you can see the available amount to withdraw is 0.5 ETH that matches the amount of shares we assigned to community.

claiming-community

Claim as community member​

Now let's check how community members can claim their share of funds. The claiming page/iframe is available under Community Stream/Claiming/Pre-built Pages

community-member-claim-admin

As you remember, 50% of primary sales (1 ETH) were distributed among NFT holders which would be 0.5 ETH.

  • Since our NFT Collection had 10000 NFTs, it means every NFT is entitled to 1/100000 of funds
  • The user in below screenshot has minted two NFTs, so is entitled to (2/10000) * 0.5 = 0.0001 ETH

community-member-claim

Claiming Royalties​

Claiming royalties from secondary sales will differ for every marketplace. E.x in OpenSea, you can navigate to your collection page and then click the three-dot menu on the top right, and select Creator earning. This will show you all the royalties you are receiving which should be available in your OpenSea account and available to withdraw.

opensea-royalty

What you want to achieve is similar to primary sales, you want to withdraw it to Primary Stream contract address which handles distributing it among stakeholders.