Inspiration

When I learned about NFTs, I quickly realized they have immense potential. Using them as proof of ownership over digital art has already made them popular, but NFTs can do so much more. The problem with buying art that is already publicly available is that the buyer only gains proof that he owns something, but can't use that proof for anything other than reselling it.

I came across this tweet by Shaan Puri, where he sold an NFT that gave the buyer rights to 5 minutes of airtime on his podcast. I did some research and found a similar case, where @BoredElonMusk sold an NFT that gave the rights to write his next tweet.

These were ingenious, practical uses for NFT. My goal with this project was to generalize this idea so that anyone could mint their own NFTs tied to any kind of value like gaining access to private content, using the token to get a service from the creator or becoming part of an exclusive community.

What it does

ManyClubs is a platform where creators can mint NFTs that grant private access to clubs, and optionally tie that access to a subscription. Creators can post any type of content (text, video or other media) to those clubs and specify one of three possible access levels:

  • Public: Everyone can see the post and its contents.
  • Community: Only users who own a key to that club can see the post.
  • Subscriber-only: Only users who own both a key and a paid subscription to that club can see the post.

ManyClubs is an extension of Metaplex, which is both a protocol to mint and auction NFTs and a web2 storefront for them. Therefore, it uses Metaplex's marketplace, where users can buy and sell club keys. The key differences with Metaplex are:

  1. Token metadata can have a subscription associated.
  2. The focus is on creator content, not so much on the NFTs behind it.
  3. The content is hosted on a server that authenticates users through their wallets.

Users do not need to create an account to get started on ManyClubs, they only need a Phantom wallet. When they connect their wallet, ManyClubs will ask them to sign a message with their wallet to verify their identity. After that, and until they log out, ManyClubs will keep their session fresh and use their wallet credentials to access content without a password.

The reason to have private servers is controlling access to content that creators want to keep private, which is a valuable service. However, having subscriptions, limited edition tokens and a marketplace opens up a world of possibilities for both creators and fans:

  • Scarcity: Creators can specify a limited number of seats for their club. Fans who buy into that club are both gaining immediate access to content and making an investment on a scarce asset.
  • Investing on a service: A creator can sell a limited-edition NFT that gives the buyer the right to a physical signed copy of a book, to airtime on a podcast, to a custom picture or video, and anything else a creator is willing to sell. The sky is the limit.
  • Subscriptions have granular time periods: They can be used to access content for a few minutes or hours, say an online stream, as well as for months or years.
  • Users can prove their support using their subscription: A subscription can be renewed any number of times before it ends, extending its remaining time. This feature, loosely inspired by the proof-of-stake algorithm, lets users prove their commitment to a club by buying multiple consecutive subscription periods. Clubs can then choose to reward users based on their investment.
  • Other applications can use the club keys to provide services: For example, a Discord bot could grant users specific roles on a server if they prove they own a certain token, similarly to what the Grapes Network already does with other tokens.

Architecture

There are three main software components in ManyClubs:

  • The Solana programs: This includes the Metaplex programs, which are available at their github repository and the Subscription program I developed for this hackathon.
  • The Store: As an extension of the Metaplex Store frontend, users can create clubs and posts, see other users's clubs and posts, and trade keys on the marketplace.
  • The Content servers: These servers provide the infrastructure necessary to both host user content and control access to it requiring the user to authenticate with a wallet that holds the keys necessary to access a community.

Advantages compared to web2 alternatives

There are already other well-established subscription-based creator platforms, so a natural question would be: is this really a viable alternative? I have several reasons to believe ManyClubs can become a serious competitor to traditional creator platforms:

Fees are tiny thanks to Solana

A web2 creator platform has at least these fees:

  • Platform fee.
  • Payment processing fees + the taxes on these payments.
  • Payout fees (moving the payments to the creator's bank account).
  • Currency conversion fees.

These fees add up to 10%, 15% or more of what the creator earns. In ManyClubs, there will still a platform fee (ideally 2.5%, the same as opensea.io) to pay for the service provided to users and a currency conversion fees for users who don't already own Solana.

Where creators really save money is in payment processing and payout fees, since Solana's costs are flat instead of a percentage of the creator's income.

Fans have investments, not expenses

Buyers are incentivized to buy access to clubs not just because they want to see the creator's content, but also because they are making an investment that might pay off if the creator grows in popularity. At the same time, creators keep a percentage of each resale through ManyClubs, so they are incentivized to keep making good content that attracts sales.

The potential problem for a creator would be creating a club where the access keys are highly valued but everyone is holding them. Subscriptions solve this problem by making fans pay to access content, giving the creator a steady source of income. At the same time, subscriptions allow creators to model most if not all payments models they can find in a web2 alternative.

Resilience against hostile agents

ManyClubs servers store creator content because their purpose is to control user access. The problem is that it makes them a centralized point of failure vulnerable to external attacks or regulation. But, even if the servers where the content is hosted are shut down, users retain proof of their access to a club. They can use that token in any other application that recognizes these tokens.

Because all payments are made using a blockchain, there are no payment processor who can dictate what kind of content or creator is allowed on the platform. This is a major problem for web2 platforms that host user content and rely on payment processors.

Challenges we ran into

Time was the main issue. I have managed to implement the core features needed for the project to work, but there is still a lot of work to do.

The UX is currently far from ideal: a creator who wants to sell subscription-based access to a club needs to mint each individual NFT and then put it up for sale. In the future, fans buying a subscription with unlimited seats will automatically pay for the minting of that subscription, without requiring the creator's intervention.

Metaplex's load times were extremely long because it loads every single auction and token vault on the network and then filters which are actually related to the store. In the future I plan to have a cache server with only the relevant vaults and auctions and possibly a Solana validator node to poll for this information. For this hackathon though, I used a simpler solution: I redeployed all the Metaplex smart contracts so the amount of items to load would be much smaller. However, I consider this a hack and only appropriate for the purpose of this hackathon.

I also encountered issues while developing in Rust and specially deploying the Solana program that I had a hard time debugging. Thankfully, the Solana discord server was very helpful when solving these issues as other developers had already experienced most of them.

Accomplishments that we're proud of

I managed to accomplish two key things:

  • Develop a general protocol to authenticate a crypto wallet and grant access to content based on the tokens it holds.
  • Write the first (at least that I was able to find) subscription program for Solana. I plan on refining it, and hopefully other developers can also put it to use. It is currently available as a standalone open source repository on https://github.com/fpluis/solana-subscription.

What we learned

Having no previous experience developing on-chain applications, I had to learn from scratch about the Solana environment and Rust, which was challenging.

Share this project:

Updates