tldr; Channels are just FIDs with USER_DATA_IS_CHANNEL=true
For this proposal, a channel is a currated set or chronologically ordered casts. A channel is identified by an FID,
let's call it channelfid
and the corresponding fname, @channelfname
.
When a user wants to post to a channel, they just mention @channelfname
.
In order for their cast to be "added" to the channel:
- It has to mention
@channelfname
(easy to check inCastAddBody.Mentions
) - It has to receive a like from
@channelfid
(easy to check usingGetReactionsByCast
)
Step #2, happens off-chain, usually by a bot managing the channel. The bot can have curration rules such as
- "only like if
@channelfname
follows@user
" - "only like if
@user
holds a specific NFT" - etc.
We had services in the past that implemented this types of logic (and even more complex).
A minimal change is required at the protocol level, to add one more USER_DATA_TYPE
. USER_DATA_TYP_IS_CHANNEL
will indicate to clients that this is a channel, and it should be rendered in a different way.
Clients will have to render channel homepages by showing the most recent, top-level,
casts @channelfname
liked. When using this view, clicking on a cast should go to a URL like
/channel/<channelfname>/<fid>/<casthash>
. This will allow the client to filter replies to casts and only show the
ones liked by channelfname
-i.e. everyone can post replies to a channel cast, but only the ones currated by @channelfname
will show up.
Joining a channel can be as simple as following it, or using a spacial miniapp that implements custom rules.
- Minimal protocol changes.
- Backwards compatible with any client: A client that is not aware of this change,
will just render casts and mentions, everything works, you just don't get the "channel experience" and
@channlefname
is just an other user for you that someone mentioned. - Flexibility: Channel membership can be based on any rule a bot can implement: Like, follow, NFT gating, ERC-20 balance, FID height, etc.
- Post to multiple channles! (mention up to five channels)
- Farcaster or Neynal, or anyone, could (if they wanted to) offer the minimal bot as a service from day 1: If the channel follows you, you are a member, click here to join.
- An external bot is required to maintain the channel (ie. it has to like the casts that will be added to the channel)
- Clients have to implement the logic for users to actually get the "channel experience".
- Replies to channel casts must also mention @channel. Clients can automate this by checking if the parent cast mentions channel FIDs.
- One of the five avalaible (by the protocol) mentions is used to post to a channel.
- There is no standard way for a third party to fetch all members of a channel. (Not sure if this is good or bad)