Decentralized Medium+Twitter powered by web3, smart contracts, and IPFS.
The easiest way to think of Sprout is a decentralized combination of Twitter and Medium. Users own and control their own Sprouts in their own Garden. A Garden is analogous to a blog, publication, or Twitter account. But each Garden has its own smart contract. Plants are content elements, like Tweets or Blog posts. Each Plant is an ERC721 NFT that is minted from the Garden smart contract. The NFT metadata is where the content is stored is JSON format, adhering to the ERC721 Metadata JSON Schema, with additional elements added. Plant content JSON is stored on Filecoin/IPFS (using nft.storage). Plants include both short and long (optional) elements -- the short element is called a Sprout (like a Tweet). An optional feature of each Garden are "Follow" and "Like" features. Unlike web2 systems, using these features literally water and feed the Garden by sending a small micropayment tip to the Garden owner -- performing each on a Garden or Sprout triggers a web3 transaction, sending a small amount of MATIC (or in future perhaps a token?). It is likely that Likes and Follows will be less frequent than their "free" counterparts on Medium and Twitter, but they will be more meaningful. While Gardens can exists and grow by themselves, they can also be joined together via Garden Aggreg-culture. Since all Plants are stored as JSON on IPFS/Filecoin, it is possible to aggregate these sprouts to create API endpoints that represent lists of Plants from Gardens that you follow, Plants from a single garden, or based on other criteria. Leveraging such API endpoints, many frontends can present Sprouts in various ways -- examples include a Twitter-like frontend and a Medium-like frontend -- both examples are included in the demo. The aggregation for the demo is centralized using a Firestore (Firebase) database and API -- BUT in futiure it could involve a decentralized network of aggregators that pull together Plants and publish the results to Filecoin. Such aggregators would need to be incentivized, of course, so perhaps a portion of all likes/follows revenue goes to these aggregators. There are many open questions like this, but I think this proof-of-concept prototype demonstrate the possibilities of infinite Gardens.
How it's made
Each Garden is a smart contract on the Polygon network. The contracts are ERC721-compliant and based on OpenZeppelin contracts with very few customizations. The garden contract are deployed by a Factory contract as clones (using OpenZeppelin's Clones.sol), The result is a ERC721 NFT contract deployed for less than one cent is gas fees. It costs 0.1 MATIC (plus negligible gas) to deploy a contract, which goes to the Sprout treasury. Each post -- or Plant -- is saved in JSON format to IPFS via the nft.storage service. Images are also stored via nft.storage as well. Once the JSON metadata is saved, a minting transaction is initiated to mint the Plant on the smart contract, which costs less than a penny in gas. IN the admin UI for Sprout, past Plants are displayed after fetching the data from the Covalent REST API, which indexes both the on-chain data and IPFS metadata for each token of the contract. Creators can optionally hit a [Sell] button which take them to the token on OpenSea, where they can list it for sale. Creators may choose to sell per-post sponsorships in this manner (while retaining the IP to their content). While the vision for Sprout includes decentralized aggregation of Plants from infinite gardens, that was beyond the scope for the hackathon. For the demo, I created an API using Firebase functions and stored the Plant index data in a Firestore database. This is used as the basis for the example Sproutium and Sproutter frontends, which look like Medium and Twitter respectively. Plants on Sprout include fields for short content (ie. Tweets) and long-form content, such that the data can be rendered in multiple formats. In this way Sprout acts like a headless-CMS: many different frontends can be built ... by anyone. In addition to social content platforms like Twitter and Medium, niche sites on specific topics are feasible (ie. CryptoSprout!). Another unique aspect of Sprout is that it incorporate DeFi as well with *Yield Gardening*. Powered by Sprout's Factory smart contract, Follows and Likes require web3 transactions including micropayments. 90% of the micropayments go the Gardener and 10% goes to the Sprout treasury. For the demo, processionals are fixed at 0.1 MATIC for Follow and 0.01 MATIC for Likes. In future, perhaps a Sprout DAO would govern both the prices and the treasury -- and perhaps an ERC20 token might be used instead of MATIC? Play-to-earn has been getting a lot of attention lately -- I think there is potential for create-to-earn as well. Yield gardening and sell NFTs of posts are two ways this could be done. Creators can view their balance in the App and claim at any time. I think this combination of social content, web3, smart contracts, NFTs, and DeFi represents only one vision of how these can be combined to create an infinite garden of experiences in the near future.Technologies used