Most of the apps we interact with in web2 are subscription based (Gartner thinks 80% of apps will be subscription services by 2020), but subscriptions still aren’t possible in web3. Broadly there are two limitations:
- Volatility: A user cannot agree to pay x tokens per month because the value of x tokens could vary wildly month to month.
- User action: With ERC-20, a user would have to actively sign transactions every month in order to be charged for the monthly subscription.
What this means is that a decentralized Dropbox today wouldn’t be able to bill its users on a monthly fee. There is a hacky way to do it: a decentralized Dropbox could ask the user to put up a year’s worth of tokens into escrow and each month take some of the tokens out from escrow, but that’s not a great user experience.
There are two projects working together towards a solution (ERC-948): Groundhog and 8x. Their solution (still in development) would theoretically create a new standard for smart contracts so that users could allow X tokens to be withdrawn from their wallet every Y time period by Z business and that would allow the user to cancel at any time. The goal is for this solution to be compatible with ETH and any ERC20 token. To solve for volatility, businesses could charge for their subscription using a stablecoin.
Once wallets and dapps have added support for one recurring payment standard, it will be extremely difficult to get them to add support for another one, so I consider this a Very Important Project in that it's important to get the standard right the first time.
To contribute, join the conversation here https://github.com/ethereum/EIPs/issues/948 or make a PR here https://github.com/8xprotocol/standard/blob/8x-suggestions/standards/8x.md.