Cover photo

Farcaster vs Lens Protocol

Decentralized social protocols face to face

I've been a user of both decentralized solutions for a few months now, and I wanted to compare them to understand how each solution has been built and what are the main differences and similarities between the two.

Right now, I use daily: Farcaster (Warpcast client), Lens Protocol (Orb client), and obviously the web2 Twitter solution. So far, I found the most insightful content in Farcaster, while Lens has a unique experience focused on creators. Finally, I have to keep an eye on my Twitter account as most of the projects keep their information there (basically because to join Lens or Farcaster, you need an invite).

Before jumping into the comparison, I wanted to create a "short" guide about each protocol. Then at the end, I will compare them and see if there's a winner, which I think is not because each of them has its cool features.

Let's start with Farcaster!

Farcaster

Farcaster is built on top of the L1 blockchain Ethereum. The L1 manages the user identities, while the protocol uses an L2 network to propagate updates between its users (Farcaster Hubs). The protocol then offers the following features:

1. Secure, memorable, and human-readable user identifiers like @alice

2. Real-time settlement and propagation of changes between users.

3. Decentralized access to all data on the network at reasonable costs.

UPDATE: as pointed out by some members of the CrisisDAO the delta-graph nodes are not an L2, as it does not use a blockchain to settle on its state. Thus, the protocol uses an off-chain peer-to-peer network to sync the data.

How does it work?

To join the Farcaster protocol, you must register a public-private key pair and an ID with an Ethereum contract. This public-private key-pair (a new Ethereum address) will be used for signing messages plus the ID (a canonical reference for a user on the Ethereum network), so they are made tamper-proof and self-authenticating. Moreover, recipients can check the key pair associated with the ID in the contract and verify the message's authenticity.

Signed messages are uploaded to the Farcaster Hub, which works like a blockchain network. The Hubs use a peer-to-peer protocol to share messages between them and store them, using delta graphs to reach a consensus about their state. The most interesting aspect of using delta graphs is that Hubs can reach a consensus without coordination.

With Hubs storing and managing the network status, the client apps will connect to them so companies and people can build different clients for the protocol, customizing the experience for their users. This is fantastic because each app could be completely different based on the protocol, allowing the creation of an ecosystem of apps within the Farcaster protocol.

Farcaster IDs and the Ethereum address (the public-private key pair) are managed within the Farcaster Ethereum contracts, so we can be sure that the ownership of the identities is decentralized and secure.

Farcaster IDs

From the official documentation of Farcaster:

"A Farcaster ID or fid is the canonical identifier for a user or organization. Fids are numerical values like !8098, distinguished from other numbers by prefixing them with an exclamation mark. Users register fids to an Ethereum address, also known as the custody address. Users can transfer fids to a new custody address, though each address can own exactly one fid at a time."

Thus, the fid is generated by interacting with the Farcaster ID Registry.  As this is a smart contract on Ethereum, anyone can read the contract to find out which Ethereum address owns a given fid.

At this point, we have all the necessary parts to send messages to the protocol:

  • The ECDSA key-pair from the custody address, and

  • The fid

With those two pieces, we can sign a message and send it to the hub, and the recipient can also verify everything. Moreover, the protocol does not allow anyone to reclaim or revoke a fid once an address claims it, we have "sufficient decentralization" by allowing tamper-proof communications over the Hubs.

Farcaster Names

While we have the required items to send messages, we need a human-readable way of referencing the fids. For this reason, Farcaster has an optional fname, i.e., @alice.

fnames are alpha-numeric strings like @john or @alice, distinguished from other text by prefixing it with an at-symbol (fids have an exclamation mark).

One interesting feature of fnames is that all of them must adhere to the following regular expression:  /^[a-z0-9][a-z0-9-]{0,15}$/. Why? Because it avoids homoglyph attacks.

fnames are recoverable as well, which is really nice.

fnames have to be renewed once a year, paying a fee to the Farcaster Name Registry, which issues each one as an NFT. fnames can be renewed 90 days before it expires. If it expires, fnames enter a dutch auction where the price is set to a yearly fee plus a premium, which decays until it reaches zero.

The protocol's core team sets the price for these NFTs. This fee controls who can join, getting bots out of the protocol while keeping a reasonable price to get the community valuable.

Account recovery

As we already know, we can forget the passphrase to our wallet, so having a nice way to recover your digital identity is critical for a protocol. For this reason, the Farcaster protocol allows users to set a recovery address to protect their fnames and fids. It is important to note that this recovery only works for loss of access, not address compromise.

The recovery address can request a transfer to a new custody address after a three-day escrow.

How is everything stored?

As mentioned before, the Hubs use delta graphs to save the messages and synchronize the social network state between the nodes.

In this graph, each vertex is an entity like a user or message, and an edge is a relationship between the entities. When @alice creates a message, and @bob likes it, the protocol will create a series of deltas that will be easy to synchronize between the nodes.

Farcaster distinguishes between six types of deltas:

1. casts, which are messages from a user

2. reactions, which are reactions to a user's messages from another user (e.g., a like)

3. amps, which are amplifications or endorsements of a user

4. verifications, which are proofs of ownership (e.g., an Ethereum address signature)

5. signers, which are key pairs authorized by a user to sign their deltas

6. user data, which are metadata about the user (e.g., their profile picture)

Lens Protocol

While Farcaster lives in Ethereum and has an off-chain solution (Farcaster Hubs) for storing the information, Lens uses the L2 Polygon blockchain.

Profiles

Like Farcaster, you will need a "Profile" to participate in the protocol. A Profile is a sequential ID that an NFT will represent. The NFT will belong to a wallet address, and the owner is the person who will control the profile. Profile owners can:

  • Publish to the profile.

  • Set the profile's "follow module": the logic allowing others to follow this profile.

  • Set the profile's avatar (image URI).

  • Set the profile's "dispatcher".

You can mint your profile in LensHub.sol upgradable contract if your wallet address is included in the list (as with Farcaster, right now, you can only join by invitation or by buying a profile on a marketplace like OpenSea).

Once you have a Lens Profile NFT, you can post publications to it. Moreover, the NFT will have the history of all the publications, comments, etc., that the owner generates.

One interesting feature of LEns is that Profiles, and almost every protocol item, can have different modules that expand their functionality. For example, Profile NFTs contain a FollowModule. This module has rules allowing other Profiles to follow it back and save it on-chain.

Right now, as with Farcaster, Profiles can only be minted by addresses that its government has approved. As before, this is done to avoid bots and fake accounts.

Publication

Once you have a Profile NFT, you can start posting Publications. A Publication can be a message, a comment, etc.

Lens has 3 types of Publications: posts, comments, and mirrors.

Publications are posted directly to a user's Profile. This means that all the created content by the user will remain in the person's wallet. It is important to note that Publications are NOT NFTs.

Each Publication has a ContentURI that has a link to the content that the publication contains. This link could point to a text, an image, a video... stored on a decentralized solution like Arweave or IPFS, or a web2 storage facility like AWS S3.

When you post a Publication, two modules are attached to them: the Collect Module and the Reference Module.

The Collect Module has all the logic that allows other users to mint the publication as an NFT. The minted NFT will reference the original Publication's URI.

The Reference Module has all the logic related to comments on the publication's Publication and the mirrors (retweets).

Comment

Comments give users the power to add feedback. Under the hood, they are like Publications with some extra checks and features.

As Comments are like Publications, comments are stored as well in the user's Profile.

One interesting feature of comments is that they must follow the rules of the original publication Reference module conditions. If, for example, there is a rule that sets that only followers of the Profile NFT can comment, then if a Profile NFT tries to comment on the publication and it is not following the original poster, the transaction will fail, and the comment will not be published.

Comments can also be collected, as they are based on Publications. Thus, people can mint an NFT from a good comment they like.

Mirror

Mirrors are the way we retweet Tweets on Twitter. From the Protocol point of view, they work the same as Publications with some special treats.

As with comments, mirrors must adhere to the reference module's original poster conditions. If a publication limit mirrors only accounts that follow the original poster, then anyone not meeting the rule cannot mirror the post.

Unlike Publications and Comments, mirrors cannot be collected.

Collect

Collect is a native feature of Lens that allows creators to monetize their content. As creators can publish almost anything: images, videos, podcasts, art, etc., this module was created to set a price and allow other profiles to collect (mint) them.

The process is simple: when you create a Publication, you can enable the Collect Module. This module opens the minting functionality for that Publication based on the ContentURI. The module can have any arbitrary logic to set the rules the creator wants to create, for example: free for a given amount of time or a given amount of collects.

Follow

Finally, following other users in the Lens Protocol differs slightly from Farcaster and other web2 social networks. As we've seen, everything becomes an NFT or is saved within the Profile NFT. Thus, users who follow a profile on the Lens Protocol receive a Follow NFT.

As with all the previous items, Profile NFTs can have their own Follow Module, setting their own rules. This means you could enforce that to follow you back you have to pay 5 MATIC. Ultimately, you are "minting" the token showing that you are following that profile, and the profile owner can set the rules.

One really cool feature of the Follow NFTs is that this module has built-in governance capabilities like vote delegation. This feature can enable the creation of Social DAOs within the Lens Protocol.

It could be possible to create rules that allow giving followers more voting power if they were followers since the beginning or similar things.

Farcaster vs. Lens Protocol

If you have read until here, you should now have more or less a clear idea of the design principles of these two social decentralized networks. Each of them has its advantages and problems.

Let's get into the pros and cons.

IDs or Profiles

On Farcaster, you will have to renew your handle once a year. On Lens, you only will do this once. Which one is better? Well, it depends.

Farcaster has always wanted to have high-quality conversations, and one of the reasons for asking people to pay for their profiles is to support the Hubs and ensure that you will put some skin in the game. While I can see the benefits, in my head, I hesitate if this will ensure that Farcaster will be massively adopted. But do they want to be massively adopted? More users will mean more noise, and I think they are trying to reduce that ratio by providing high-quality profiles in their network. So far, I can assure you that the conversations on Farcaster are amazing and deep.

On the other hand, we have Lens. Anyone can mint their handle and will not have to renew it. While this is neat, it allows people to create profiles for big brands (like it is happening already with ENS or domains) and charge people to control that social media profile. Is this good? Speculation will be a big problem, as the profiles do not expire (like in Farcaster do), so only time will tell.

Social graph

One of Lens's most interesting features is that everything is saved on-chain in your profile. The protocol creates contracts for your publications, so any client that uses the protocol will show you exactly the same content. Your followers and content go with you.

On the other hand, Farcaster allows you to have more flexibility. While Lens seems nice, I've been playing with "Instagram clones" that show only the Publications that are images. This sounds cool, but I cannot separate my content, while on Farcaster, I could. Each app could rely on the delta graph and build its list of followers. The only problem with this is that you will have to "export somehow" your followers if you want to change your clients. Is it good? Bad? Time will tell.

Everything on-chain vs. Something on-chain

Lens uses Polygon for all the transactions. Everything is saved in Polygon, while Farcaster uses its off-chain solution.

The approach from Lens is that everything will be saved in your wallet as an NFT with different contracts created for you (the modules). This is smart because your social graph and posts could grow in number forever. However, Hubs on Farcaster have a limitation on the size of the delta graph (64TB). This graph size has been limited to removing old posts and making things interesting, to say the least. I like this approach because the graph forgets, aligning with GDPR principles about the right to be forgotten. The lens approach is "simple"; as you own everything, you should be able to destroy/burn everything. But as you know, the blockchain will have the history, so everyone can point out what you said/did at a given time. It could be interesting to see where the GDPR stands here.

Extending the protocol

On Lens, you can extend the modules, so the options are endless. On Farcaster, you will have to propose changes to the protocol, and all the hubs should be upgraded to support those changes. Which one is better? I like a lot the Lens approach, as everything is a contract that can be deployed with its own rules. However, the Farcaster approach seems more like any other open-source project, which is nice and well done. As with other solutions, time will tell.

My own experience

Well, this is completely subjective because I use both, and I like both. However, I can see big differences so far.

Farcaster, for me, is the place to find deep and interesting conversations. The engagement with the community is amazing, and I'm always learning from someone. It is huge compared to Twitter, where all I see in general is promotion and discussions with tons of hate involved. Here the discussions are civilized, people behave, and even when disagreeing, you feel at home learning from everyone.

On the other hand, Lens is the place for artists and creators. I've many more followers on Lens than Farcaster but less engagement. While my publications get several likes and mirrors, I indeed get almost zero interaction from comments on my posts. It looks like all the likes and followers are fake, as I don't have interaction via comments with other people. It is a weird feeling even though the technology is amazing. I love collecting; I love how you can set up rules for following you, collecting your posts, etc. One cool feature from Lens is Wav3s which allows you to create paid conditions for people who mirror your posts. Instead of paying the platform, you pay your followers and Lens users for helping you bring your content to others. This is neat, but it opens the door to discussing if people with less money will always have difficulty growing a community around. Obviously, the answer to this question is: if you have good content, people will come, but that's not always the case.

Both protocols now have several client apps. Each one has its own pros/cons, but it is becoming fun to test them all and see the experience. Buttrfly, Orb, and Phaver are the 3 mobile apps that you can use on Lens, while Jam and Warpcast are the ones on Farcaster.

Warpcast is, for now, the only full-featured client on Farcaster, but Jam will join soon enough (looking forward to testing it). As explained before, what will be interesting to test here is that my social graph on Warpcast will not exist on Jam, so I will have to create a new one from scratch.

With Lens, I've tried Phaver and Orb. Phaver is weird; I don't get it. The UX is strange because they have its social network, and you can switch between theirs and Lens. This also forces you to change some settings to use it, making it a bit awkward. Orb, on the other hand, is a full-featured solution. Minor details are missing, like setting the collect options from the client, but this will be solved in the coming releases for sure.

In summary: if you can try both. I think they are going to have their communities, and it will be fun to be on both at the same time. As everything is decentralized, several apps will make it possible to have only one app that allows you to have everything in one place, like Yup (looking to test it as well). The truth is that social networks were not been this exciting in years.

Loading...
highlight
Collect this post to permanently own it.
teleyinex.eth logo
Subscribe to teleyinex.eth and never miss a post.
#web3#social#protocol
  • Loading comments...