Moving Beyond Stripe: Our Journey to a Subscription-Based Web3 Service

Timothy Carambat
Mintplex
Published in
3 min readDec 16, 2022

First, it’s best to lay some groundwork on why this is even worth speaking on.

  1. In web3, there is no genuinely easy-to-use drop-in replacement for Stripe + credit card payments.
  2. Systems and tools like Unlock Protocol are fantastic to use and achieve the subscription model, but we had some additional requirements.
  3. The token must be an NFT that can be tradeable on marketplaces like OpenSea.
  4. The subscription NFT should have a fixed supply (currently all other providers have an unlimited supply).
  5. This is more for experimenting with what we think the future of NFT royalty models should be, where you buy a project for its utility and re-sub each year.

You don’t want unlimited supply?

Yeah, I understand that as a business you would ideally like to be prepared to have an unlimited and infinite number of ongoing subscriptions. The way that we work around this is we have our subscription contract at a 10,000 supply.

Basically, as people’s subscriptions begin to churn over time those churned tokens become automatically “re-mintable”.

Since ownership is expirable we would need to have 10K users all paying for a subscription each month. If this were to be the case we would be making 99ETH per month (>$100K per month) and we could very easily add another contract that becomes mintable and works in our system.

Basically, when it becomes a problem it’s a very good problem to have and it’s an easy fix.

Again, this is more about proving the concept of our “Recyclable NFTs”.

How does a token become “re-mintable”?

We extended the ERC-721A standard to keep a log of a new property on each token called “expiry” which is a timestamp in seconds where it expires.

When the timestamp is determined as “old” the ownerOf functions return the Null Address. This way websites like OpenSea can easily hide tokens that technically have been minted, but have expired.

When someone goes to mint a token, we first check if all tokens have ever been minted. If they have, we then fall back to a reclaimMint function, where we find an unowned token and re-mint the token to the new owner since the previous owner let it expire.

On the app side, we simply check this function and since all tokens are tied to some entity we know of (like a project) we can show/hide features based on that value.

Like you would do with Stripe subscriptions!

In fact, it looks very similar code-wise — just instead of the Stripe API, we are talking to Alchemy.

So how’s that going for you?

Great! actually we just got our first sale while I was typing this document up!

Check it out on Etherscan — that’s 3 months of MRR!

Now Mintplex can be happy to report MRR to investors instead of simply one-time non-repeatable value or being beholden to a 5% mint fee on projects that we don’t control and just have to pray project creators are doing their best.

Additionally, we now have to concern ourselves with churn, which considering the massive amount of value we bring to creators — should be a fun value prop to manage.

We would rather be managing our repeatable value with tools and levers we control so we are best aligned with our creators to keep building a kickass launchpad.

Check us out at mintplex.xyz

Cheers,
Tim

--

--