<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Purple Submarine</title>
        <link>https://paragraph.com/@purplesubmarine</link>
        <description>Deep dives into the purple app by @vrypan.eth</description>
        <lastBuildDate>Mon, 05 Oct 2026 00:53:34 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Purple Submarine</title>
            <url>https://storage.googleapis.com/papyrus_images/863fc04e08103e2363ed1cca32046426</url>
            <link>https://paragraph.com/@purplesubmarine</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[A growth strategy for Farcaster]]></title>
            <link>https://paragraph.com/@purplesubmarine/farcaster-as-a-better-place-for-conversations</link>
            <guid>bzOHqBe4kTgqZmcWCkwm</guid>
            <pubDate>Sat, 07 Sep 2024 23:15:02 GMT</pubDate>
            <description><![CDATA[How do we grow Farcaster? The current consensus is by creating more and better content. In this article, I would like to offer an alternative.]]></description>
            <content:encoded><![CDATA[<p>How do we grow Farcaster? The current consensus is by creating more and better content. In this article, I would like to offer an alternative strategy: <strong>Make Farcaster the best place to hold conversations.</strong></p><div class="relative header-and-anchor"><h2 id="h-why">Why</h2></div><p>We already agree that Farcaster is not be the best place to find the latest news (it's getting better, but we are in no way Twitter), but it's a great place to hold conversations. </p><p>Is it the culture? The friction imposed by the signup cost? The way clients work? The size of the network? I'm not sure, but it's a fact.</p><p>In any case, why not make it, Farcaster's unique selling point?</p><p><strong>First of all, high quality conversations don't require a large network.</strong></p><p>If you are interested in distrubution, you want to find the largest venue, ideally packed with people —when it comes to distribution and reach, size matters. </p><p>But if you want to have a good conversation, you pick a few, often a handful, of people —when it comes to engagement, quality matters more than size.</p><p><strong>Second, the cost of using Farcaster</strong> (storage unit and signers costs) is better aligned with quality, than size —it's ok to add friction if you are more interested in audience quality than audience size.</p><p><strong>Third, engagement and conversation drive daily, reoccurring usage</strong>. Every reply is a new invitation to respond or react, and the more time users spend on Farcaster, the higher the probability of sharing high-quality, original content.</p><div class="relative header-and-anchor"><h2 id="h-how">How</h2></div><p>If this is a strategy worth pursuing, we should review all features and touch points: Do they promote or facilitate conversations? Is there something we could add or change?</p><p>For example, can we improve how threads are presented in clients? Or maybe, is there an opportunity for a client that gives a better overview of long, nested threads and better tools to manage them?</p><p>How can we add more context to discussion threads? Would it add value if it was easy to see if the person who replied in a discussion about sports is a fan of team A or team B? Or in a political discussion if they are on the left or the right? Or in a crypto discussion if they are a BTC maxi, and ETH maxi, or chain agnostic? If yes, maybe we should introduce badges? Maybe badges that are channel-specific?</p><p>Or maybe we want better moderation tools per discussion. Would it make it a better place to hold discussions if I could moderate or token-gate or add some other type of control on who can respond? When they can respond, or how many times they can respond? Something else? </p><p>Should we look at FIP-2 again, through a different lens?</p><p>I'm sure that if we make conversation quality a top priority (even higher than better content), there will be many, and most probably, better ideas.</p><div class="relative header-and-anchor"><h2 id="h-final-thoughts">Final thoughts</h2></div><p>Is focusing on engagement a better strategy than focusing on growth? I can't be sure, but it looks appealing to me.</p><p>While there may be a tension between network size and engagement quality, there is no tension between content quality and conversation quality. They are probably complementary.</p><p>Could it be a viable, long-term strategy? Again, I'm not sure. It definitely has its advantages at the stage we are right now, but maybe it will be less effective if the size of Farcaster grows 10x.</p><p>In any case, I think it's worth exploring the idea, even if it's only as a thought experiment.</p><p></p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/62a5e32025072554947c9f7d4f833b1d.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Farcaster Rollups]]></title>
            <link>https://paragraph.com/@purplesubmarine/farcaster-rollups</link>
            <guid>k89strfkXB1DiULzImpd</guid>
            <pubDate>Mon, 24 Jun 2024 13:01:59 GMT</pubDate>
            <description><![CDATA[You can think of a Farcaster rollup as a discussion that happened someplace other than hubs.]]></description>
            <content:encoded><![CDATA[<p>Assume you want to use Farcaster to let your users comment on a basketball game, or play a game of chess, or discuss an event as it happens. </p><p>These use cases, may have special requirements such as very fast, real-time interactions and app-specific context (for example, the minute of the game), things that Farcaster is not very good at. And on the other hand, things that Farcaster is good at, such as censorship resistance, may not be very important.</p><p>In these cases, you could build what could be called a "Farcaster rollup". </p><p>You can think of a Farcaster rollup as a discussion that happened someplace other than hubs. It takes advantage of the Farcaster identity system (so, your users have to use their FID), and could use a signed proof of some kind (from an app-specific signer, to a message signed by an other signer such as Warpcast, similar to how frame payloads are signed) to prove that the user is participating in the rollup. It has a start and an end in time, and once it's completed, the app posts a "proof" it happened as a cast.</p><hr><p>Depending on the application requirements there are various levers one can adjust, but let's take a simple (and probably popular) example, an app that lets casters comment in real time during a basketball game.</p><p>Your app would announce the game using a cast, and a frame that lets users sign-in. Your app stores the signed payload sent by the frame as a way to prove that a user actually joined the chat. Then it redirects you to a centralized chat server where you sign-in with Farcaster and you can comment in real time. At the end of the game, your app saves the whole discussion as a json on IPFS, alongside the proofs for each participant. Then it posts the whole discussion as "extrenal data" (the FIP is draft, but will probaby be finalized soon). It may also mention users that participated, in replies to this cast.</p><p>So, you leveraged FIDs, no need for signups, avatars, etc. You also have a proof that users actually joined the chat. Your users did not consume any Farcaster storage space, experienced a real-time chat that is hard to impossible to implement in a decentralized way. In the final transcript, each comment is tagged with the minute:second of the game. It can also show additional context, like the team each user supported, or score changes. And when the game was over, everything was rolled up, and posted to Farcaster.</p><p>Your app could also post intermediate "checkpoints" to Farcaster, something like "@A, @B, @C and 20 other users are currently commenting on the game", every 10 minutes, to drive participation.</p><hr><p>If this was about a more sensitive topic, let's say, a political debate, the app could work like a traditional Farcaster client (request the user to approve a new signer, and sign each message), or even implement a stronger model, using client-side signatures.</p><hr><p>When we discuss how Farcaster can scale to millions, it is often assumed that sharding may be unavoidable. But maybe something that resembles rollups may be a better solution that will preserve the global state model without unreasonable hardware requirements.</p><p></p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/6ceb5bc3442bff13ae531dae912c657a.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[2026: Farcaster at the epicenter of political turmoil]]></title>
            <link>https://paragraph.com/@purplesubmarine/2026-political-turmoil-around-farcaster</link>
            <guid>h8Iq3CgfCjfI7se4DZNr</guid>
            <pubDate>Sun, 23 Jun 2024 20:34:02 GMT</pubDate>
            <description><![CDATA[Washington, D.C. — June 23, 2026In a dramatic turn of events, the White House is facing a wave of political turmoil following the resurfacing of cont...]]></description>
            <content:encoded><![CDATA[<p style="text-align: start"><strong>Washington, D.C. — June 23, 2026</strong></p><p style="text-align: start">In a dramatic turn of events, the White House is facing a wave of political turmoil following the resurfacing of controversial casts from one of President Taylor's closest advisors, David Sullivan. The casts, dating back to 2024, were not previously accessible but have recently been brought back to light by an anonymous online user. The content of one specific cast has sparked outrage across the political spectrum, putting the administration on the defensive.</p><p style="text-align: start">David Sullivan, a seasoned political strategist and long-time confidant of President Taylor, has played a crucial role in shaping the administration's policies and public messaging. His influence extends deep within the corridors of power, making the revelations even more shocking to both the public and political insiders.</p><p style="text-align: start">The cast in question, dating back to September 2024, indicates that Sullivan had talks with Russian officials during President Taylor’s campaign.</p><blockquote><p>spoke with Russian officials, especially during the campaign. Don’t be stupid. #diplomacy</p></blockquote><p style="text-align: start">This revelation is particularly jarring given President Taylor's publicly strong stance against Russia. Throughout his administration, Taylor has consistently condemned Russian interference in global affairs and has imposed several rounds of sanctions on the Russian government.</p><p style="text-align: start">Farcaster will purge old casts after a year if the user does not pay for storage, and all Sullivan’s casts were purged in November 2024. However, last week an anonymous user paid for Sullivan’s Farcaster account, and immediately after it, Sullivan’s old casts appeared again.</p><p style="text-align: start">Dan Romero, co-founder of Farcaster, explained that “<em>each cast is a signed message sent to the protocol. Hubs may prune these messages for various reasons, but if you have a copy of the original message, you can re-post it.</em>”</p><p style="text-align: start">The White House has been slow to respond. In a statement released yesterday, Press Secretary Lisa Graham addressed the controversy, stating that <em>"Sullivan's casts were doctored and do not represent reality.”</em> She added that Sullivan has the full support of the President and that the FBI is conducting a thorough investigation of the situation.</p><p style="text-align: start">Sullivan himself took the battle back to social media. <em>“I could never have written something like this, because it is not the truth. This is an attack on the President, not me.“</em> he casted. <em>“I will not delete the cast in question until the FBI has concluded the investigation.”</em></p><p style="text-align: start">The resurfaced cast has sparked fierce criticism from across the political spectrum. Senator Maria Gonzalez (D-CA) accused the President of hypocrisy, stating, <em>"President Taylor's strong public stance against Russia is completely undermined by these revelations. This casts serious doubt on his integrity and the credibility of his administration."</em></p><p style="text-align: start">Representative John Mitchell (R-TX) went even further, suggesting treasonous behavior. <em>"If these allegations are true, it means the President and his closest advisors have been deceiving the American public while engaging in back-channel talks with a hostile nation. This is not just hypocrisy; it's a betrayal of our country."</em></p><p style="text-align: start">Political analysts are closely monitoring how President Taylor manages the situation. The controversy arises at a crucial moment, with negotiations with China at their peak. Some insiders also believe that Taylor's handling of this scandal could significantly affect his political capital and the public's trust in his leadership.</p><p style="text-align: start"><em>"The President is in a precarious position,"</em> said Dr. Elaine Matthews, a political science professor at Georgetown University. <em>"On one hand, he needs to maintain the support of his key advisors. On the other, he must address the valid concerns of the public and his political base. How he navigates this will be telling of his administration's values and resilience."</em></p><p style="text-align: start">As the story continues to unfold, it is clear that the resurfaced casts have struck a nerve in the nation's capital. The coming days will likely see further developments as the White House grapples with the fallout and the public awaits President Taylor's next move.</p><p style="text-align: start">By: Jonathan Harper, Washington Post</p><hr><p style="text-align: start"><strong>Washington, D.C. — June 24, 2026</strong></p><p style="text-align: start">In a stunning development, new evidence has emerged that could significantly alter the narrative surrounding the controversial cast from David Sullivan, a close advisor to President Taylor. Independent researchers have retrieved additional casts indicating that the original message, which suggested talks with Russian officials during President Taylor's campaign, was quickly deleted and replaced with a contradictory statement.</p><p style="text-align: start">The new casts, uncovered by digital forensics experts from the non-profit organization Digital Integrity Watch, show that Sullivan initially posted:</p><blockquote><p>"spoke with Russian officials, especially during the campaign. Don’t be stupid. #diplomacy"</p></blockquote><p style="text-align: start">However, within seconds, Sullivan deleted this cast and replaced it with:</p><blockquote><p>"Never spoke with Russian officials, especially during the campaign. Don’t be stupid. #diplomacy"</p></blockquote><p style="text-align: start">Dr. Molina Green, a lead researcher at Digital Integrity Watch, explained the significance of the findings. <em>"Our analysis shows that the initial cast was deleted almost immediately, indicating an attempt to correct a genuine mistake—a common occurrence among Farcaster users. The troubling aspect is that the person who reactivated Sullivan's account selectively restored messages, seemingly to misrepresent what Sullivan actually posted."</em></p><p style="text-align: start">The White House has yet to respond to this latest development. However, Press Secretary Lisa Graham reiterated in a brief statement that "the administration stands by its previous assertion that the initial cast was doctored and does not reflect reality." She also noted that the FBI's investigation into the matter is nearing completion.</p><p style="text-align: start">The new evidence has sparked renewed debate among political figures and analysts. <em>"This entire incident reeks of a coordinated effort by our adversaries to undermine the President at a critical juncture in our negotiations with China,"</em> said Senator Thomas Blake (D-CA). <em>"We must remain vigilant against attempts to weaken our leadership and national unity."</em></p><p style="text-align: start">Representative John Mitchell (R-TX) echoed these sentiments, calling for immediate congressional hearings. <em>"This latest twist in the story only underscores the need for a thorough and public investigation. The stakes are too high to ignore."</em></p><p style="text-align: start">Political analysts are closely monitoring the situation, noting that the administration's handling of the scandal could have far-reaching implications. <em>"The President needs to address these new developments head-on,"</em> said Dr. Elaine Matthews, a political science professor at Georgetown University. <em>"How he navigates this will be critical in maintaining the public's trust and his political standing."</em></p><p style="text-align: start">As the FBI continues its investigation and the White House prepares for potential congressional scrutiny, the nation watches with bated breath. The coming days are expected to bring further revelations as the full story behind the controversial casts continues to unfold.</p><p style="text-align: start"><em>By: Jonathan Harper, Washington Post</em></p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/51cf89a0deac095eee9bf0c22e5e2fab.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Get ready for the new Channels]]></title>
            <link>https://paragraph.com/@purplesubmarine/the-new-farcaster-channels</link>
            <guid>9vfwSOZuyazrhmyXv8Dv</guid>
            <pubDate>Fri, 10 May 2024 16:41:38 GMT</pubDate>
            <description><![CDATA[During the latest Farcaster Devs call, Dan presented a first draft of how they think channels will be decentralized. https://warpcast.notion.site/Pub...]]></description>
            <content:encoded><![CDATA[<p>During the latest Farcaster Devs call, Dan presented a first draft of how they think channels will be decentralized. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.notion.site/Public-draft-Decentralized-Channels-d40d98468b7b4b3ba330b35ca2e341b6">https://warpcast.notion.site/Public-draft-Decentralized-Channels-d40d98468b7b4b3ba330b35ca2e341b6</a></p><div data-type="callout" type="info"><div class="callout-base callout-info" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/information-icon.png" class="callout-button"><div class="callout-content"><div><p><strong>Update, 2024-05-14: </strong>There is a new version of the proposal <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.com/dwr.eth/0x6557744a">https://warpcast.com/dwr.eth/0x6557744a</a></p></div></div></div></div><p>I will try to present here the high level concepts of this new proposal. I will not get into the technical details because they are still vague.</p><div class="relative header-and-anchor"><h2 id="h-a-new-mental-model-for-channels">A new mental model for Channels</h2></div><p>If you are a developer, or if you have been engaged in Farcaster protocol discussions in the past, you probably have to switch your mental model when it comes to Channels for the proposal to make sense.</p><p>So, let's take a step back.</p><p>Imagine you are a newspaper editor. You handle the editor@newspaper.something email. Anyone can send an email to this address: Writers send their articles, prominent figures may send letters to the editor, regular users may send their thoughts and complaints, scammers and spammers will definitely send their stuff.</p><p>So, everyone can post to editor@newspaper.something, but it's actually up to you, the editor, to decide what shows up in the paper and what not.</p><p>This is how you should think of the "new" Channels: Everyone can post, but the Channel editor (or host, curator, owner, whatever we end up calling them) decides what <strong>shows up</strong> in their channel. Technically, every cast posted to a channel is there, but the editor decides what you see when you visit the channel.</p><p>The new Channels will be a standard that lets Farcaster clients (like Warpcast, Supercast, Nook, erc.) know <strong>what</strong> to show in a channel and <strong>not who</strong> is allowed to "post in a channel". Or, if you want to think about it in DRBMS terms, everyone can use INSERT, but we now have a well defined SELECT that clients should use, and the Channel editor defines the WHERE clauses.</p><p>Now, I keep saying this is a new mental model, but it's not. This is what Warpcast has been doing all this time. Channel passes and cast moderation (hiding casts, etc.) are rules enforced by Warpcast at the client level. Even if your Channel Pass has been revoked a) you can use an other client to post to a Channel and b) even if you do so, Warpcast will not show your cast. What's new, is that we get a standard way of implementing this at the protocol level.</p><div class="relative header-and-anchor"><h2 id="h-a-new-curation-mechanism">A new curation mechanism</h2></div><p>The other important component of this proposal is a programatic way of describing a wide range of curation models: </p><ul><li><p>I want an NFT gated channel,  </p></li><li><p>I want only FIDs that I follow, </p></li><li><p>I want FIDs with more then $1,000,000 worth of assets in their connected wallet, </p></li><li><p>I want FIDs that have used a specific DeFi protocol more than X times in the last Y days,</p></li><li><p>I want FIDs who have set their location to Athens, Greece for more than two months, </p></li><li><p>I want FIDs who have paid their monthly subscription...</p></li></ul><p>How do you describe all these, and probably many more, complex rules? </p><p>The proposal describes a simple but powerful curation mechanism: The channel curator will have to "approve" each cast, one by one. Which may seem counterproductive, but it allows for maximum flexibility. You can have a Channel that's a personally curated list of hand-picked casts. Or you can use a service like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://automod.sh">https://automod.sh</a> that lets you create complex rules and have it automatically enforce them (curate each cast according to the rules you set).</p><p>By defining different rules, Channels become a primitive that can express very different use cases. From the "NFT community" channel, to "Reviews from users who bought this product" channel, to the "five experts in agriculture discuss and share insights" channel, to "my important stuff" channel.</p><div class="relative header-and-anchor"><h2 id="h-final-thoughts">Final thoughts</h2></div><p>I love this model for a couple more reasons:</p><p>First, it's compatible with the global state model, that allows me to run my own Farcaster hub at home and build apps that interact with Farcaster and are hosted locally. In this case, it is easy to run your own channel curation/moderation bot on your own infrastructure. It can't get more decentralized than this.</p><p>Second, it could create a new marketplace for channel-related services. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://automod.sh">Automod</a> is a great example, but I hope we will see other services, competing in features, pricing or even business models. And there's also room for custom solutions that integrate exotic data sources and rules.</p><p>The proposal also includes the option of "open" channels where curation is turned off. I did not mention open channels so far, because there are very much like we have today: anyone can post anything they like and it's up to the clients to apply filters that hide spam or low-quality casts, if they want to.</p><p>We still have to see the technical details of the proposal. But I like the proposed solution. It's simple but very extensible and unlocks new use cases. And it definitely makes channels permissionles and decentralized.</p><p>Well done, Dan and team!</p><hr><div data-type="callout" type="info"><div class="callout-base callout-info" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/information-icon.png" class="callout-button"><div class="callout-content"><div><p> Updates and content posted after this article</p></div></div></div></div><div data-type="embedly" src="https://warpcast.com/deodad/0x452a3aa5" data="{&quot;large&quot;:true,&quot;title&quot;:&quot;Tony D’Addeo  on Warpcast&quot;,&quot;description&quot;:&quot;the permissionless channel proposal unlocks channel owner's ability to monetize their channel with advertising via a moderation rule that allows advertisers to pay for inclusion\n\nad marketplaces that you can opt into just like that and monetize that sweet attention across every Farcaster client\n\nthis is crazy shift&quot;,&quot;url&quot;:&quot;https://warpcast.com/deodad/0x452a3aa5&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/e0d78c8adce7e2fb15fd18b4d2b5220d.png&quot;,&quot;provider_url&quot;:&quot;Farcaster&quot;}" format="small"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="twitter-card-link" href="https://warpcast.com/deodad/0x452a3aa5" target="_blank" rel="noreferrer"><div class="twitter-summary"><img src="https://storage.googleapis.com/papyrus_images/e0d78c8adce7e2fb15fd18b4d2b5220d.png" class="false"><div class="twitter-summary-card-text"><span>Farcaster</span><h2>Tony D’Addeo  on Warpcast</h2><p>the permissionless channel proposal unlocks channel owner's ability to monetize their channel with advertising via a moderation rule that allows advertisers to pay for inclusion

ad marketplaces that you can opt into just like that and monetize that sweet attention across every Farcaster client

this is crazy shift</p></div></div></a></div></div><p></p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/1965a921f345d9ed3c191d331541f8ac.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Farcaster is a better match for SpaceX than X.]]></title>
            <link>https://paragraph.com/@purplesubmarine/farcaster-is-a-better-match-for-spacex-than-x</link>
            <guid>yLXGKFlbOykzjcEC0cmA</guid>
            <pubDate>Sun, 10 Dec 2023 20:31:45 GMT</pubDate>
            <description><![CDATA[Let's talk about hubs and how they sync, and why Farcaster is the best social network for a colony on Mars.]]></description>
            <content:encoded><![CDATA[<p>Let's talk about hubs and how they sync.</p><p>The Farcaster network is a network of hubs that exchange messages between them. Each hub holds the entire "global state": every cast, reaction, follow, every user's profile data, everything. </p><p>The farcaster app you are using, only has to connect to one of the hubs to read and post messages. Then this hub syncs with the rest of the network and every other hub receives your activity.</p><p>Hubs exchange messages between them in two ways:</p><ol><li><p>The first one, is practically real-time: The hub that receives a message uses a protocol called gossipsub and sends the message to the hubs it's connected to, then they do the same and in just a few seconds all hubs have received the message.</p></li><li><p>The second is an out-of-band sync. This one is slower and only happens every few minutes (or whenever it's feasible, more on this later). During the out-of-band sync, two hubs practically compare their databases, and exchange deltas in order to get to the same status (exchange deltas to reach the same state).</p></li></ol><p>If you are interested, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://www.youtube.com/watch?v=Uqga87HWs_g">there is a video describing the concept in more detail</a>.</p><h2>Advantages</h2><p>This model has a number of advantages: </p><ul><li><p>It's developer friendly, because a developer can have a full copy of the network, locally, to work with</p></li><li><p>It's decentralized and censorship resistant because there's no single point of entry to the network </p></li><li><p>It's very resilient because you can take away any number of hubs (a recent count of Farcaster hubs brings them to ~150) and if there is at least one left, spawn new ones and reconstruct the network as if nothing happened.</p></li></ul><p>These characteristics make Farcaster ideal for a number of environments where other social networks (centralized or federated) would fail.</p><h2>When the office ISP went down</h2><p>Imagine you are at work, using Farcaster by connecting to the office Farcaster hub that runs locally, and you are using a Farcaster client that connects directly to the hub [*]. At some point, your ISP goes down. </p><p>Here is what happens during the period you have lost connection to the rest of the Internet:</p><ol><li><p>You continue to have access to everything that was posted on Farcaster up to the moment the Internet connection went down.</p></li><li><p>You can also cast, like, recast, follow and unfollow as if nothing changed.</p></li><li><p>You can also see new casts and reactions from your colleagues that use the same hub, and you can reply and react to their casts.</p></li></ol><p>The most important thing that changes during the period the ISP is down, is that you don't see any activity that happens outside your office (your office farcaster hub). But as soon as the ISP is up again, your hub will connect to the other hubs, it will propagate any activity that happened (in the office) during downtime, and receive all activity that happened outside your hub!</p><p>There are a few things that wouldn't work while the ISP is down:</p><ol><li><p>Any Farcaster activity that requires an onchain transaction, such as creating new accounts, approving and removing signers, or purchasing storage units.</p></li><li><p>Of course, any content referenced or embedded in casts will not be available, such as images -but that's not Farcaster's problem and if someone really wanted to, they could fix it by using a caching proxy or something similar.</p></li></ol><h2>Social media on the Mars colony </h2><p>One of the challenges a crew of a future the Mars colony will have to overcome is staying connected with Earth. Radio signals take 4-22 minutes to get from Earth to Mars, and it will take as much for a response to come back. There's not much we can do about this, unless we find a way for the radio signals to travel faster than light. </p><p>One more problem is that the available bandwidth is nothing compared to what we are used on terrestrial communications. I expect that all available bandwidth, will be used to support the operations of the station, and to exchange asynchronous messages between the station crew and Earth command center and their families.</p><p>One thing is for sure: The Mars crew will not be able to use X/Twitter, because it's built on HTTP, a synchronous protocol. However, <strong>our astronauts could use Farcaster!</strong></p><p>An other cool thing is that Earth-March syncing could also be performed entirely off-line: Every mission to Mars could also carry a Earth-synced hub, that would sync with Mars when it gets there and every mission from Mars to Earth could carry the Mars state back to Earth.</p><p>Astronauts will have full access to everything discussed on Farcaster on Earth, interact between them, share their thoughts, and when their hub syncs with Earth, we will all be able to see their activity, react to it, etc., and vice versa.</p><p>We may have <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://github.com/farcasterxyz/protocol/discussions">to create an FIP</a> to introduce some small changes to support the Mars colony use case, but I'm optimistic that space settlers count as qDAUs and it will get the full support of the devs.</p><p>So, yes: <strong>Farcaster is a better match for SpaceX than X!</strong></p><hr><p>[*] A small note on Farcaster clients connecting directly to hubs. Today, most Farcaster clients depend on a backend hosted by the developer or a third party. These backends take a lot of the load that otherwise a client would have to do, like hosting a database that can be easily queried. These clients will not work without connection to this backend. However, it's 100% feasible to create a client that connects directly to a Farcaster hub, or even have a local installation of the backend required.</p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/16a6d63f49391a87d5eb253f77cc3ef5.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[All about Farcaster Signers]]></title>
            <link>https://paragraph.com/@purplesubmarine/all-about-signers</link>
            <guid>D5wnErDNcOJHupbZlQ7J</guid>
            <pubDate>Sat, 25 Nov 2023 21:04:59 GMT</pubDate>
            <description><![CDATA[Understand how signers work, why we need them and how to use them.]]></description>
            <content:encoded><![CDATA[<p>Most users know "Signers" as "this thing you have to pay for when you connect a new app". One of the first articles in Purple Sumbarine, was about<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://paragraph.xyz/@purplesubmarine/farcaster-signers"> Farcaster Signers</a>, but my understanding has evolved since then, and we also have new tools and advances since then.</p><p>In order to understand signers, you have to keep in mind that all interactions with hubs take place by sending hubs a "message" that has a specific structure. So, when you cast, like, or recast, the app you are using sends a message to a hub saying "@vrypan.eth casted Hello World", or "@vrypan.eth liked this cast".</p><p>Messages look something like this under the hood:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a55498d4d444769f02a0cf70f0c1071e.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAANCAIAAABHKvtLAAAACXBIWXMAABYlAAAWJQFJUiTwAAADqElEQVR4nGNQ0LEwsvHQsHByCIuV07Ng4JFkEJJBIB4Ql0NSiVNKlXjELa3GKaXKIa7EIa7EoG7iwCepqqpmnppR5u4ZrqvnYGnt6RcQZ2nt6eIeau/o7+kVbmLqJi6mJi2tRQySlNQUl1AXl1DnlVAGWaBqbCenaqIko88tqtQwYVpcVmn//OXtk2dGRCeFRibZugW6+kUqqJkyMAjzCikISajiR/ySKkqi2r5yLloSBqLiatzSalALZKS1ueXU+5avvPPr8/Qt29qmzdh1dO/uo/sy6xoTyiqy6pvqp06T17di4JfhllYjgESVBERVIP7glFJlMHH0UVAzFRdTk9OzKGjq6lqwqGXmnKTyGm0bN3l9Kx1LZ0N7DwiS1DCCBCt+xC2txi6twiesKCmpCbLAxitMUl5XTkZXSFFLTFHPLy7dwS8sNCXLKzqRU1yFgYEPjNhBJJs4A58Uk4AMMXYIiCijWyCgoKmgbcYnqRqaURCQnBuZV1w7caq6uaOle4BbaKyle4CDX5ipqy8opYFtgpJgxCIkDxGBMngk+fjloUEEt4BVQlHRwNozPMk+MMo7JsUxKDKzrrGybyIEZdY1JpfXROcXW3mHKupbKupbqprayelZqJraQRgQQTk9c2VDK2UTWzUdS0lJTVAk+0SlCcloqioZq+taa+rZ2LoFqmhbyKmaWDh4WTh4+YQmQBjGVm42bv4WDl4RSVn+USk+oQkJ2UUuvuHhSTn+USm2boE+oQn+0ak2bv4OfhHhmXmu3hHswgrcsqoMnqFJfJKq5kYuW9fuiw/Lrihs6m2eOmvSop7mKS3VvRBGXGiGgoi2OIOMNJ+KFIeSGJOcIIOkIIOkGKOsIIOkEIM0RESYQVqCQdqC20SXRVuPU9dUyFheQovBNShOUl5XWdlk6qZNS3fvXrJ7b1pl0/XP7w/eun7399dHf3/c/f21ffb8gqa2jMo6t9BYn5gk39jU0JSs0JSs+MKy8q5eCDuxqDw8My8kNiM7Kj8zrqC2oCnJP0NZQhdhweyd25YfOFA3deb6E0cbps9un7/w1s9Pe65f2XP9yu2fX86+fHLpw+v2+Qsz6xoz6xpNXX3VzR1VTe1MXX11bN1MXHx0bN1MXX3NPQNMvAP1XL1MvAO1nDxkJLUZzJ39tUwdtdQt3d1CfHyiNVQtYmIy/Xxj3N1CQkIS3d1CnBz8IVJ+vjF+vjEhIckhIclSEhpiQspYkQivAgSJCyiLi6kBAI3CLI8QkDdXAAAAAElFTkSuQmCC" nextheight="652" nextwidth="1636" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>As you can see such messages have two parts. </p><ul><li><p>The data part: this is more or less what we usually consider the content, like the text of the cast, the date it was casted, the user who casted.</p></li><li><p>The metadata part which has a hash of the data, a digital signature of the hash, and the key that produced the signature: <strong>the signer.</strong></p></li></ul><p>What you see in the <em>signer</em> filed is not the actual signer, but the public key of the signer.</p><h2>Why we need signers</h2><p>In a centralized network such as twitter or facebook, you usually have a username and a password. You use your credentials to connect to a server, and then the server knows that you are who your credentials say you are. There is no other way to post something to the service, and the centralized server is the absolute authority of what was posted by whom.</p><p>Farcaster is an open, p2p network. Anyone with some technical knowledge can create a program that sends messages to the Farcaster network. The only way to verify the authenticity of these messages, is by their digital signature.</p><p>Each Farcaster user has their own keypair, a private and a public key. If you signed up using Warpcast, your <em>recovery phrase</em> can be used to generate this pair. This keypair also corresponds to an ethereum address, what is often called in Farcaster the <em>custody wallet.</em></p><p>So, you could actually sign your messages using your private key. But users rarely create these messages on their computer using a program they wrote. They connect to a service or app, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://buidler.app/home">like buidler</a> and after authenticating with it, it posts on their behalf. The problem is you don't want to give them your private key. This would be the equivalent of giving a gmail integration your username and password (and to some extent, not even being able to change the password).</p><p>Here is where <em>Farcaster Signers</em> come to play: Instead of giving an app your private key, the app creates a new random key, and asks you to approve it. You approve it using your private key and you register your approval onchain (<strong>gas cost!</strong>). From this point on, any hub that receives a message signed by this Signer, can check the blockchain to verify that you have approved the signer and accept it as authentic.</p><h2>Warpcast and meta-transactions</h2><p>When you make a call to a smart contract, the caller has to pay the gas for its execution. This is why adding or revoking a signer (onchain transactions) have a cost. </p><p>Normally, your Farcaster custody wallet would need to have some OP ETH to perform these transactions.</p><p>But wait. There's a workaround: KeyGateway, the smart contract used to approve Signers, allows meta-transactions. You can think of meta-transactions like this:</p><ul><li><p>The user who wants to perform a transaction signs the transaction or an authorization to perform the transaction using his wallet. This is an offline action.</p></li><li><p>The signed transaction is not sent to the smart contract, but it is shared <strong>offchain</strong> with a third party, usually called the "relayer".</p></li><li><p>The relayer performs the transaction and pays the required gas.</p></li></ul><p>Warpcast takes advantage of this feature to hide the added complexity of using a blockchain: It will ask the user to pay them $1, and then they use a meta-transaction and they pay for the gas. </p><p>This is roughly the equivalent of them saying <em>"Just sign this paper, give me $1, and I'll take care of the rest." </em></p><p>The actual gas cost for adding and removing signers is usually well bellow $1. Warpcast now allows users to also pay using <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://warpcast.notion.site/Warps-ea98989b8a944a679c5b9e076e07efcd">Warps</a>, an in-app credit system: You can buy 500 Wraps for $5, and approving a signer will usually cost around 40-50 Warps (depending on gas cost at the time of the transaction).</p><p>(Warps are an interesting experiment that deserve a separate article.)</p><h2>Revoking a signer</h2><p>Obviously, a user must be able to revoke a signer, and they can do so using their private key and posting the revokation onchain to let everyone know that the signer is no longer authorized to act on their behalf. This was the whole point of not giving away our private key in the first place.</p><p>But, when a signer is revoked, hubs see messages that are no longer signed by a valid signer. Most people's first thought is OK, but these are old messages signed when the signer was valid. But you have to keep in mind that Farcaster is an open, p2p network. Hubs are added and removed all the time. You could spin up your hub right now (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://www.thehubble.xyz">it's actually quite easy</a>) and your hub would receive messages from other hubs it discovers in order to get its history (aka state) up to date. How can your newly created hub know when a message was signed? </p><p>This is why hubs have a simple way of "thinking": not a valid signer, not a valid message. And, as a result, <strong>when you revoke a Signer, all messages signed using it, are pruned by hubs!</strong></p><p>This looks bad. The truth is there is a simple solution that no app (to my knowledge) has implemented (yet). Remember the message example we used earlier? What if you signed the same message with a different signer?</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/2abdf3b1a14bdde2d7545d7224390d07.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAANCAIAAABHKvtLAAAACXBIWXMAABYlAAAWJQFJUiTwAAADa0lEQVR4nI3Rz2/bZBgHcKuoU9soa8jc+GecxK9/26/j/LAdO05SN3Wb323TuNIQbD2yAysc1hWpRYDgAohtsEmgwg1tCIQ2bRVimpgQVw6IAzfEGS78C0Gpq4EAjUofPXqfR6/01fu8CAZ0RirjYpEpuSgHZzB2hgB/wSZtjOJjtHB6cVqcVHICIfhCghKZTN6sLCuam2NLnGDCvMcJpqRWRNlWNQfwJoFLFCmfBkHKODExT/GTAJwv4BmYIbUEITirfeg2a/3NWqtvlB29VAWaLeRdIgvjyVwS51FSfLpnKQGktEbCllIQI6Q4LZ4EUKQSY0R3fbj50ovVcMtrd9fPD9fPb0I/UOp+fikwO12U0+dwLk6LT5cgBBQXo3fEaAFhFJPIQgKXUA4Wmh23v1bpDtTGMi6XUE6nxAKtlCJJVonW+j9ocSbNJ3GBII8DcrqDpRWaUucz4jlGFcw6a9hypcab1TgpTieZ6STzzHx6OsnMpnKzOBvHwWky0H8HnGVEDGgJShTcRb7iS55vtnq4WMhAC5TcDLRYw6Y1E+VglHRSj8VxPppEhxmMRTH+ZEVPAuYoLsXpfMnLFB3e9HLFCvSD8mo7Av1AazRlb5HJVxY4uMBBTMijxzU6REOU0zBOTwl5mtUJUp58slBuJGk5R0Ma5NPAAJpNsjrBQk6zOM2Syh7QrBO6DTQLOovQrqlmrVhvCgU3agXdlsoetGuTO0VH9XzFqCazSiwtIEKxnqBEkS2Hgxcs6C867fbycKU2WKp0GlY7qPaWnF5ZqGUSCjkFqDM8OQXIKYAhORzJPoEhLI5kU0iWQoCB6DKiSIisndFypIpwBQ9LK0xar4bh6vPP1Te2zF7v1g8fvP/onRuP3vv4x1uHv3z09ndvXb23e/Xe7s6dyzt3Lr/yxcv7D/feeLy//3DvH17/eu/G3YN3v3r1+oODK29eyqJ/C/C2wsYodEfDD3++/smvNw9/uvbgj8+OxrePxp9/Pz76Zvzlt+O7n/5+8/C3a689Prhyf7e1s1Ec+OVRYI1WyqOguNG0RkFpcxmGgRE2jbAJAo/GFSSj2pRQYBlDVSqq4gBgDC+NWmFnpdtaHXY624Pe9nr/4qB3Ya1/cdC90O9tr/mDNpvVF2ZBap7/D3Ncao5bmAX4WY4i5T8BqdHy7nvnvcsAAAAASUVORK5CYII=" nextheight="652" nextwidth="1636" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">A new signer will create a new signature</figcaption></figure><p>Signing the message with new signer will create a new signature, but the message data and the message hash will stay the same: Same user (fid), same content, same timestamp. </p><ul><li><p>To any client, this new, re-signed message is the same as the original one.</p></li><li><p>To any hub, this is a valid message, provided that the original (same hash) is not in the hub's database.</p></li></ul><p>So, an app could:</p><ol><li><p>Download all your messages (your Farcaster history) </p></li><li><p>When you remove a signer, and some messages are pruned, re-sign these messages (from your download) with a new signer.</p></li><li><p>Post the re-signed messages to a hub.</p></li></ol><div><div class="callout-base callout-info" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/information-icon.png" class="callout-button"><div class="callout-content"><div><p>You can perform the above steps using <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://github.com/vrypan/fario">https://github.com/vrypan/fario</a> if you are comfortable working in the command line. You will have to: </p><ul><li><p>Backup your data using <code>fario-out --all</code>.</p></li><li><p>Use <code>fario-grep</code> to select the records signed by the signer you want to remove.</p></li><li><p>Remove the signer using <code>fario-signers remove</code> and create a new signer using <code>fario-signers add</code></p></li><li><p>Re-sign the messages using <code>fario-signers sign</code></p></li><li><p>Upload the re-signed messages using <code>fario-in</code></p></li></ul></div></div></div></div><h2>Final thoughts</h2><p>Signers are an elegant approach to delegating permissions. It allows users to easily let an app act on their behalf, but at any point in time, they can revoke this permission.</p><p>The lack of a simple, user-friendly app that allows users to revoke a signer without deleting all activity performed using it, is definitely a pain-point looking for solutions: Right now, using a signer means that you are stuck with it, since revoking access will delete any casts, likes, recasts and follows you have performed using it. (Unless you are one of the few users who understand the technical details of Signers, and have the skills to use something like fario or put together a script by yourself.)</p><p>Looking forward to try the first apps that will give a user-friendly solution to this!</p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/b13a7e93305e2387e3f12ca9cd736c81.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[Farcaster apps and links #1]]></title>
            <link>https://paragraph.com/@purplesubmarine/farcaster-links-1</link>
            <guid>xbjJi7Nn5ACftvLo3STg</guid>
            <pubDate>Mon, 30 Oct 2023 07:09:22 GMT</pubDate>
            <description><![CDATA[Some of my favorite Farcaster-related links]]></description>
            <content:encoded><![CDATA[<p>Farcaster is a truly open platform. It's hard to understand how open, without going into a long technical (and in some ways philosophical) discussion. But a good way to get a feeling about this openness is taking a look at what's been built on it and how it's used.</p><p>So here are some of my favorite Farcaster-related links.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://casthose.xyz"><strong>casthose.xyz</strong></a>: a nice little tool that shows every new cast in real time.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://marble.im/tools/fresh-blood"><strong>Fresh blood</strong></a>: a sub-page of marble, showing new user signups. (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://marble.im">marble</a> allows users to do a "cast-storm")</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://vasco.wtf"><strong>vasco.wtf</strong></a>: Gives you an x-ray view of any cast (the "source" of the cast). Just replace the <code>warpcast.com</code> part of a cast on warpcast with <code>vasco.wtf</code>. (I also <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://warpcast.com/vrypan.eth/0x69ef30ac">created a bookmarklet</a> which does this automatically and I use quite often.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://fardrop.xyz"><strong>fardrop.xyz</strong></a>: Enter a farcaster username and get a list (of a merkle tree) of the addresses of its followers. Ideal if you want to airdrop or create an allow list using the Farcaster social graph.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://farcasteruserstats.com"><strong>farcasteruserstats.com</strong></a>: Stats for any user. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://www.farcasteruserstats.com/users/280">Here is my page</a>.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://later.wtf"><strong>later.wtf</strong></a>: Schedule a cast to be posted in the future.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://searchcaster.xyz"><strong>searchcaster.xyz</strong></a>: A search engine for Farcaster.</p><p>Farcaster dune dashboards <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://dune.com/pixelhack/farcaster">by @pixelhack</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://dune.com/embeds/3097502/5168104">@gabrielayuso.eth</a></p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://buidler.app"><strong>buidler.app</strong></a>: A web annotation tool that enables users to collaboratively annotate and discuss any webpage. One of the most exciting features of Farcaster.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://farcord.com"><strong>farcord.com</strong></a> A Discord-like interface for Farcaster.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://gift.fcstr.xyz"><strong>gift.fcstr.xyz</strong></a> lets you give the gift of Farcaster to a friend (you can pay for their signup).</p><p>If you are worried about your available Farcaster storage, cast <code>@fc1 storage</code> and a bot will respond with your storage usage and limits. Of visit <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://caststorage.com">caststorage.com</a> to check and buy additional storage if needed.</p><p>Also, make sure you subscribe to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://outcasters.xyz">outcasters.xyz</a>, a (beautiful!) weekly curation of what happens on Farcaster.</p><p>Of course you can always take a look at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://www.farcaster.xyz/apps">https://www.farcaster.xyz/apps</a> that lists a growing number of apps built on Farcaster.</p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0935e7eddd7dcc1cb0f394c68187d825.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Welcome to farcaster]]></title>
            <link>https://paragraph.com/@purplesubmarine/welcome-to-farcaster</link>
            <guid>YIvigU40AgUw9pu9Hik5</guid>
            <pubDate>Wed, 11 Oct 2023 16:40:43 GMT</pubDate>
            <description><![CDATA[On October 11, 2023, Farcaster opened its doors to everyone (a.k.a "went permissionless"). If you want to create an account, go here.Farcaster is a l...]]></description>
            <content:encoded><![CDATA[<div><div class="callout-base callout-info" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/information-icon.png" class="callout-button"><div class="callout-content"><div><p>On October 11, 2023, Farcaster opened its doors to everyone (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://danromero.org/farcaster-permissionless/">a.k.a "went permissionless"</a>). <br>If you want to create an account, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://warpcast.com/~/invite-page/280?id=8d725dae">go here</a>.</p></div></div></div></div><p>Farcaster is <strong>a lot like</strong> and <strong>a lot unlike</strong> other social networks. There's so much to learn and explore, but if you are new, this article will help you find your way around.</p><h2>Warpcast is to Farcaster, what Firefox is to Web</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://www.farcaster.xyz"><strong>Farcaster</strong></a><strong> is a protocol</strong>, and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://warpcast.com/~/invite-page/280?id=8d725dae"><strong>Warpcast</strong></a> is a Farcaster client, much like Firefox, Chrome, Safari and Edge are clients for the WWW. There are many other clients and applications. You can find an (incomplete!) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://www.farcaster.xyz/apps">list of applications that use Farcaster here</a>.</p><div><div class="callout-base callout-tip" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/tip-icon.png" class="callout-button"><div class="callout-content"><div><p>If you don't have a Farcaster account, the simplest way to create one is to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://warpcast.com/~/invite-page/280?id=8d725dae">install</a><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://warpcast.com"> Warpcast</a>.</p></div></div></div></div><h2>You own your Farcaster identity. </h2><p>Everything you do on Farcaster (casts, likes, recasts, follows, etc.) is tied to your Farcaster Identity (fid). No one can take away, suspend or cancel your Farcaster identity: it is controlled by an Ethereum address only you have the keys for. Don't worry, if you loose your keys, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://paragraph.xyz/@purplesubmarine/farcaster-account-recovery">there is a way to recover your identity</a>.</p><h2>Open, Decentralized</h2><p><strong>Farcaster is an open protocol</strong>. This means than anyone can build applications on top of it, without asking permission and without paying fees. Compare this to using Facebook, Twitter/X, or Reddit APIs: Each one of these companies has changed policies, requirements and pricing, often pulling the rug under developers' feet.</p><p><strong>Farcaster is decentralized.</strong> At the core of Farcaster are the Farcaster hubs. Every hub keeps a complete copy of everything there is on Farcaster. Hubs talk to each other and sync their status to reach consensus. Anyone can run a hub. If you like experimenting, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://www.thehubble.xyz/">you can run your own hub</a>, even from your home (hardware requirements are minimal, your previous PC or laptop is probably more than adequate).</p><h2>Why do I have to pay?</h2><p><strong>Because there is no Twitter or Facebook to pay the costs.</strong></p><p>In exchange, you <strong>own</strong> your Farcaster identity, data and network.</p><p>There are two costs to using Farcaster.</p><p><strong>Storage space on hubs</strong>. For most users, this will be a cost between $0.6/month and $1/month, depending on the payment method. The easiest way to pay is through Warpcast's in-app purchase ($12/year including AppStore fees and USD-to-ETH conversion). But you can also use a service like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://caststorage.com">caststorage.com</a>, pay in ETH and avoid the AppStore tax.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/1e09abe8893cb7ca0dabb9bc2da7f1f5.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAVCAIAAACor3u9AAAACXBIWXMAABYlAAAWJQFJUiTwAAAE9UlEQVR4nLWVb0wTZxzHr+JCMG6aLW4xBAyCNeLMpptzmekgEyFgEcli3DALBIzDF5txM2wvnEY3txd7MZc4XwwYbEau1D9sLVSLtiCUSRBB6vq/3JWWcnft9bjzjuv1ru0t1wPR+ifzxX753OW55/kl3+f7+93dA+xer9m9XlOplO7/B8CDUaVSo14gLalSubC6Tnp8POFZApVKzZ6NnZ9VGA7vutpQrN/7prZ6k/bhDPU68JNtV45UXTusNh7edfXTnfr971yuLtQ+h4OqDZ31Kt2BIl19kf7gBz01W7vK8sDyfAl1auM1Wy83FOsbivUHS/R1qq6G4r/2bblUltdRUQBWFGgqCsDytRfSyQfnBXatAz9++5JJ67l1dXpAD1/T2ntA62A3NGTw3zYHvj3Q9+5L7T83DU8Mhkd6sdvXsVGTxFhfaNSEDhmmhgxTw8bp8f7wA8b6QhOD+IDOX/teV0UBCFQUgLXbrzB0VBTFZDJJM7PEbIjnuURcFEWx5dSdjUCrrtXBxEI+v3cG9QUR3wwqEQhCE/dG/x6+abWNIVggEISnZ3wSQd8MCmMI0VjSXZbXAZTng3UqXXAaD0wHw2Gc54UYF4tGOYqkRTHRcmr0DaBNc3Z881uvA4/G8uUvZmdnZ2ZmrVr1atoSAAA/fPdTU/XAztzzQPnaC/VFOh+EOhxOh8MJwz4IgiEYhibhqDDbfPL2JsmB0wM5TaYBq9XhdsMuNyThmnS6Ju0Oj9M1OT8zPw+5PV4/HF50ULu9i2UFiiIRBGUYhmYYWrqkorVKJWrubnNFOQbyQCRBJpMizwuCkIwLibiQEIRkGjyfTCbF2Qh3sES/KBDjEizL4jjBsiwbjTLMHMfxKYGxVA+cSChw967N4fD4pvwoFkbQ0NMIBlEEw5DpyCM9YJhYPC5I0gsR4+KiKLScGk2VyMEn5gjiPk3T0WcGx3E8L8TjAhFmFh3UqXQUOUczDC8I8rskiiLLcjQb+fXkyCag9c9meyzORHCCYeZIkuR5ThD4x4nHBZq+D0EQis6kOeiiKZaRqsM+cBAXEqIo/nY6VaIWO0GhXu8kgiCRSER8UsjbwjDMbDbb7P94nf5DOw2LDjxuOIxjchKO4wRBDA24YnG27fRYYaoHNEvAkI+iKPGZQRCExWJxuZ0+b/BQ6YJAfZHeYfdMTfnkpHAYxyMRw5U7s9Rs2/fjkkCLHSdmYNhHkiSTCiFVzCf6sNvsVuuEJFDSs+gghIajHCMncVz0Pk1S5JxcosJUk6MxShLGcRRFMQyTlSiKokiSoihZlWGkMqdykBBCLvagXqVz2xHr3SmvHfM4EY8TvWWx3hq0+QPYuW+GtyjaNWfHt7+/DQCAzMwsGYViyYoVK3NycvPzC3JychWKJRkZSzMylioUS7IylwMAcObHc0flL7ksr6OxxFD74S/AC3XLVjauXv15/povlr18CMg6sGVj0/EG49bM9q5mm9U1YjQaTP29pj6jRH+v6eb1AYvZMtR/02KWHh/ihtngdELzTVYrwb2bLx6rvXH0o56mGsNXNYav9xubagxH9xmO1fU2lnaXZJ//co+x9YS15fi9NJqPW2XS5ltP2M4cGdm7WatWgtJ5oFaCO7IvlOaCC8yPd2RLv/WqDZ2lazpUr/yuWtX+3yl+7Q/54Js/Mqs2dD4NebW6UPu8yAfOv0HB6dDBvmavAAAAAElFTkSuQmCC" nextheight="1600" nextwidth="2453" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Both methods will have the same result. Warpcast purchases are converted to ETH and used to perform the onchain transaction.</figcaption></figure><p><strong>The cost of identity-related transactions</strong> (remember, your Farcaster identity "lives" onchain, and onchain transactions have a small cost), such as the initial signup or giving permissions to apps. This cost is small, and in some cases apps may pay it on your behalf to make your life easier, but occasionally you may be asked to pay something like $0.99 (the actual cost is much less, and there will be ways and tools to pay much less in the future).</p><h2>Where can I learn more?</h2><ol><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://farcaster.xyz">farcaster.xyz</a>, is the home of the Farcaster protocol.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://thehubble.xyz">thehubble.xyz</a> is Hubble's homepage. Hubble is the software run by Farcaster nodes.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://www.youtube.com/watch?v=vMWjol6xHJ0&amp;list=PL0eq1PLf6eUdm35v_840EGLXkVJDhxhcF">Farcaster Overview</a>: short videos explaining the core concepts of Farcaster. (Keep in mind that the videos were created some time ago, and some of the details may have changed through <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://docs.farcaster.xyz/protocol/fips.html">Farcaster Improvement Proposals</a>.)</p></li><li><p>Check out the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://paragraph.xyz/@purplesubmarine">articles on Purple Submarine</a>.</p></li></ol><p></p><h1 style="text-align: center">Welcome to farcaster!</h1><hr><p></p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/70e9c8d213781cd463af2e2e23fd3998.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Farcaster account recovery]]></title>
            <link>https://paragraph.com/@purplesubmarine/farcaster-account-recovery</link>
            <guid>uSAzRMHyThViDd4YCCtO</guid>
            <pubDate>Fri, 06 Oct 2023 23:55:59 GMT</pubDate>
            <description><![CDATA[TLDR; If you lost your secret Farcaster phrase, you are in luck! Farcaster (the protocol) has an account recovery feature built-in. This is how Warpc...]]></description>
            <content:encoded><![CDATA[<p><strong>TLDR;</strong> If you lost your secret Farcaster phrase, you are in luck! Farcaster (the protocol) has an account recovery feature built-in. This is how Warpcast (the most popular client) has implemented it. But there's a lot more to it. </p><div data-type="zora" embedid="zora:0xbb3df0a50fdbf2ca28948fa48618c5c424ad6dd3/1" referral="0xe7a2f02F97B4Ec9e2888f0B231b07de58bA91FD0">
    <div style="text-align:center;"><img src="https://zora.co/api/thumbnail/7777777/0xbb3df0a50fdbf2ca28948fa48618c5c424ad6dd3/1" class="zora-embed"></div>
    <div style="text-align: center; margin-top: 24px; margin-bottom: 24px;">
      <a style="
    display: inline-block;
    border-radius: 4px;
    background-color: rgb(59, 130, 246);
    padding: 16px 24px;
    font-weight: 600;
    line-height: 100%;
    color: rgb(255, 255, 255);
    text-decoration: none;
    " href="https://zora.co/collect/zora:0xbb3df0a50fdbf2ca28948fa48618c5c424ad6dd3/1?referrer=0xe7a2f02F97B4Ec9e2888f0B231b07de58bA91FD0">
    Collect NFT
        </a>
      </div></div><h2>How it works</h2><p>Varun has created video that explains everything in a very simple way:</p><ul><li><p>Every Farcaster account is owned by an Ethereum address (often called "wallet").</p></li><li><p>Every Farcaster account can also set a recovery address. The only thing the recovery address can do is to move your Farcaster account to a new address.</p></li></ul><div data-type="youtube" videoid="DnAG4mXlOFI">
      <div class="youtube-player" data-id="DnAG4mXlOFI" style="background-image: url('https://i.ytimg.com/vi/DnAG4mXlOFI/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=DnAG4mXlOFI">
          <img src="https://paragraph.xyz/editor/youtube/play.png" class="play">
        </a>
      </div></div><p>Now, moving your account to a new address is quite a power to give to someone. The owner of the recovery address can save you if you lost your "secret phrase" (think of it as your password), by moving your account to a new address you control. But if they go rogue, or get hacked, they can also steal your Farcaster account!</p><h2>Failsafe, no failsafe</h2><p>If you watched the above video, you may have noticed that there was a fail-safe: Between the initiation of the account transfer and the actual transfer there was a 5-day delay during which you could cancel it and even change/revoke the recovery address.</p><p>I'm writing in the past tense because this fail-safe was removed by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/farcasterxyz/protocol/discussions/100">FIP-5: Instant Recovery</a>: The recovery address can now instantly move your account to a new address and there's nothing you can do about.</p><p>While this may seem a bad thing, it's not that bad, and there's good reasoning behind it:</p><ol><li><p>99% of the users, especially new users that will join once signups are open for everyone, are used to Web2 platforms: I lost my password, I use my email to recover it.</p></li><li><p>When a new user signs up, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.com/">Warpcast</a> (that most of them will use to signup), sets the recovery address to one Warpcast controls. This way they can hide the complexity from users, and provide them with what most users expect: Being able to instantly help them recover their account.</p></li></ol><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0edfdb8719892398060843e0848443af.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAQCAIAAAD4YuoOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAFOklEQVR4nG1Ua2xTZRg+7RzbelnXnq7nnLanp+fec0532q6nPb2u7S5dd8OBGjRGoxgMUabxEkRA/ugP/SOIMDY2B4SAiQExBIaExN9efugfgxAEZOvWtXRbd2Ezc9SczhAjvnny5Pm+5Hvf7/me5AP27j7w6vYBFpdkb5K2i2YNCulxSI/D9cQGwxUo2kAaapDdb+977519kqelVeqLuTMs4WewZtouEohAWBXgME/Z3ASiCBtIA4lQOhnO8GTAw4R9XNRNBUQ6BBvIR63hR9DjFi0mEM1eV8gvRCUhprA7JnsT4eZUyJcM+ZKBprjsTQTFFmXHk3RCHOCEOBb1cE4/YxetRlJpbSDNGkej9r+AFUMYVI9hFldcTqcimVS0KxnubI12tUa7UpFMLNCeCKXbYt2JUKePi3KkRCACwDh8bkp2UwE3JeMQT8A8gQiMXSQRgVDMNlFWNwELOMRbdBhcj9lNtBPivK4IhYpOiKNRD2phHZCLtitLJ8ThMIdaWNLqxmEeg1xAMpzp7Xg62NQS9bdFpbaEnG4JKo8Wkzqi/tZUpCsupxNyOhnqpG0eSOeAG5xuQhodPjU6fPLIoaEjnw0PHh5RxKFjxwe/GDk2NnJ07Pjg2LEjo6dPfLn9+Z0AT0o8KaEgo1zEzDjMDAoyNpBWdiqw6LBGraNyfQIxEKAWC4otE/cmslPZ3MxMPp8vFArZqezExET5sTo1dgagbE08IXnokJcJe+iQhwl7mLBABkVKFumQSMkoyFiNFGwgIT2uDNCjkjt2584fM4XZyanp7HR+IpvLTucrOjc5NbOB7HSuXC4fHxwDOKffhXudMGs1EVaQQBqcGMwwaBNH+niymcU8HOHzsEHUTJk1NsRIglos0BS/devO3cncvcnc7buTCt+byk7nc/ni5FR+pjBbKM5NTCoDRoZOAhYdptfVB+VgJBKJx+PRSFQOylqtVgWoqqqq1JWqUlcBAFBbrbMaKVCP+oVooZAvl8vr5T8VKq+tKeJ/amToBNCwCSEJanl5WTmwvl4ul5eWljiOAx6r2mqt1Ug16tCgJ/7zT7evXfz92sWbVy/cvPL1jQ0eP//b5XPXL5+7fvXCjUtf/frLD7ODh0cBYw1C4tR8qbS8/GB2bm794cOFhUVRFGmaFkWR4zie570eLwRD1eo6q5Ey1dkTodTBD7/D6j7nLEfbfSe2JM5m5NO94dOd0qn++Nn++FkJG3ZoDvWFzx/8eAhoqFEczM0WH5RK88Xi2srKwvy8IAg6nc5isZhMJovFAppAk8morzUgBrJRh0X8yXNnvn93x/ienZfef/3KgTev7B8Y37trfP/A+AdvfLt/YHzPa+NvvfzN4Y9+/PSTo0BDjZVykvPT06uLi4vF4vrq6uL9+26WRR0OmqYdDgeO4wRBWK2IpqYeMZDGWhtkIFtj3a3xTCbV1xHvTid7utv704nujkTPBjqTPelkd1drn5cNKwNIJ7VUKKwtLT+Ym3tYGSC4XObGRhAEAQBQqVRqtXojA7AW3drz7LYtLwhksFn5uGQ7xNnMLGQgwTq7WeMwa1CzxgHW2cE61KxB4Xrin5DX1/96FP3qygpbCVmlUv075LpNOtMm+4vPvbLjpV3tsd7+zLae9q0d8b72WG8m+WQm1Z9u2ZxJ9fd2PNUR622Ldm/ufIYnA4BRcUDncjPz86Xi/dlSaSGbnWIYFgCAKnWVSqVWDKgUB5pqPWIgG56wQnqcI/ws1iyQAZ6Q3JQskAE3FXDhfoEMVr6GAIs1u6kAAfN/Axa9+09w15uaAAAAAElFTkSuQmCC" nextheight="1270" nextwidth="2468" class="image-node embed"><figcaption htmlattributes="[object Object]" class=""><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://warpcast.com/dwr.eth/0x7137eced">https://warpcast.com/dwr.eth/0x7137eced</a></figcaption></figure><h2>Where did decentralization go?</h2><p>If you are here because of the Web3 ethos, decentralization and sovereignty, you're probably disappointed. What I just described is a way for a centralized entity (Warpcast) to take away your decentralized Farcaster identity. If that's the case, what's the point of all the decentralization, web3 and the costs that come with them?</p><p>There are a couple of good answers.</p><p>First of all, you can set your own recovery address: You can use another address you control, a good friend's address you trust, or your lawyer's Ethereum address (yes, there are some that know what this is).</p><p>You could also set it to an M-of-N multisig wallet, controlled by N people you trust. </p><p>I can also imagine more exotic implementations of a recovery address.</p><p>For example, all Farcaster accounts a company uses can have a recovery address controlled by their IT, which has a dual purpose. 1) Being able to support users who lost their secret phrase and 2) being able to take away a corporate account.</p><p>Or a smart contract that implements the time-delay feature removed by FIP-5.</p><p>Or even create a valet service that users pay annually and in order to recover their account, users have to do a video call, prove their identity, and then the service helps them recover their account.</p><h2>Takeaways</h2><ol><li><p>If you sign up to Farcaster using Warpcast, <strong>Warpcast can recover your account</strong> if you loose your keys, <strong>but they can also take away your account</strong>, or compelled to do so. Keep this in mind if you think that someone may want to censor you in the future.</p></li><li><p>If you are an experienced Web3 user, you may want to consider some of the options mentioned above, like setting the recovery address to one controled by your hardware wallet, or a multisig.</p></li><li><p>There is a wide range of services to be built that help users recover their Farcaster accounts. You may want to build one of them.</p></li></ol><hr><p></p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d70b7a64352dc4668a6736aa6f05c1bd.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[You don't have to pay gas for onchain transactions on Farcaster.]]></title>
            <link>https://paragraph.com/@purplesubmarine/you-dont-have-to-pay-gas</link>
            <guid>B2p86a10CKIyqXZlt6it</guid>
            <pubDate>Fri, 29 Sep 2023 22:44:34 GMT</pubDate>
            <description><![CDATA[One of the great Farcaster misconceptions.]]></description>
            <content:encoded><![CDATA[<p>According to the Merkle Manufactory (the company behind Farcaster), permissionless signups should be expected by mid-October.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ef254894f84628dcf646ac4c987bc456.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAGCAIAAAAt7QuIAAAACXBIWXMAABYlAAAWJQFJUiTwAAABw0lEQVR4nJ3Q3U/aYBQG8DcmIKtGbQaUVxDISm2x0lqE0iItfbG0ltaCVKpS+RCJYhZvdrnLJdvFkmXxxsS/dcYt6kayZFdLfnlyTs5zdcBGlPry6dvXz9+ZbNFU3VbjqNXo6orjmj2WquAhGMcysf8TScciGXDRv3l8/PH08+nD+48G6lhN79D0Da1jN3sk3Hq7mPpT/S2KPZsP8/XZ302I52JYBpDr7P3dw/3dA5ksbEA2STAwSq2G1/FIegkk3gBidQGugMTKQmLpJZcB8U/zEwbir4mHk7FIGrxL5F3Tl4VGU3VqxYbIqRVONVRXV5wiU7X1LkdX65Ip86hW0mUB7ddauuJo8sELU1dsS++iPUvcrptaW1ec/Zpdl0xDdens7loIAirFXQ1vHeP4yDrrtQeBPx3408Cb+O3RwJ+Oz64PD/zx+eykPQq8yag/G55en3TGgTcZ+NNRf+bZgaG6573LwL+8Gt7WJZOlxDxZkniUIWg8nAQQz0k8KtASS1UKtIj2LFlAebK0meZFThPyVYlHO4xcZhWRU8vbSplVWKrC0VWR0yQe0dndXKrAZIsip8oCIuEWBuJrIbgMiNcX/QIU4m45d6CJyAAAAABJRU5ErkJggg==" nextheight="244" nextwidth="1232" class="image-node embed"><figcaption htmlattributes="[object Object]" class=""><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://warpcast.com/dwr.eth/0xb6baf3a4">https://warpcast.com/dwr.eth/0xb6baf3a4</a></figcaption></figure><p>One of the great misconceptions that goes hand-in-hand with this milestone is that users will have to pay to perform the onchain actions, such as signing up, transferring their Farcaster Id (FID) to a new address, registering/revoking a Signer (see my post about <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://paragraph.xyz/@purplesubmarine/farcaster-signers">Farcaster Signers</a>) and getting storage units.</p><p>This is only <strong>partly</strong> correct.</p><p>First of all, let's agree that we do want the onchain elements of Farcaster. These elements are what make our Farcaster identity permissionless and censor-resistant: No one can suspend/delete your account, because it's registered onchain. </p><p>Second, onchain transactions have a cost, "gas". While transactions on Optimism (L2) are much cheaper than transactions on Ethereum (L1), they still cost something.</p><p>But here is the misconception:</p><div><div class="callout-base callout-tip" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/tip-icon.png" class="callout-button"><div class="callout-content"><div><p>Each one of these interaction happens onchain, and, yes, there is gas to be paid, but <strong>the user does not have to be the one that pays.</strong></p></div></div></div></div><p>Let me explain. Farcaster smart contracts allow each one of these transactions to be executed as follows:</p><ul><li><p>The user signs the request <strong>offchain</strong> using their private key.</p></li><li><p>A third party ("sponsor") performs the <strong>onchain</strong> transaction on behalf of the user (using the signed request) and pays for the gas.</p></li></ul><p>For example, an app that allows users to interact with Farcaster, can pay for the signer registration, if they want to make it easier for new users to use the app.</p><p>Or an app that wants to aggressively register new accounts and get a significant market share from Warpcast, can pay for the registration of the new FIDs.</p><p>It seems that Warpcast will offer a "bundle" that includes signup and one storage unit at $10 as in-app purchases. This price includes an up to 30% cut for the app store. Opportunity! Create your own Web version, use Stripe, charge $7 and probably make a good profit of &gt;$1 per registration.</p><p>Side note: We should applaud Warpcast's decision to offer the service at a price that leaves space for easy competition. They have a defacto dominant position in the Farcaster ecosystem and making their price aggressive would leave zero space for competition at this stage. On the contrary, if they actually go with the above pricing, they create a motive for competition.</p><p>I can even think of flows that are... a bit shadier: Offer free signup and storage and approve a signer, and then use the signer to follow (on behalf of the user) some specific Farcaster accounts -a.k.a "how to get 20,000 new followers in a few days".</p><p>Here is an other one: A service that offers holders of a specific NFT free or discounted signups/storage. It can be used by NFT creators who want to offer some extra value to their collectors. Or maybe it's a POAP, and free registration to Farcaster or one storage unit is a small gift for anyone who attended an event.</p><hr><p>The more I look into it, the more I tend to think of Farcaster as an extremely well-thought implementation of an elegant protocol. I find it fascinating that its design, paired with web3 composability, can unlock so many possibilities we never had in web2.</p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/68553e5c8454305a12ca10bbe4add56f.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[The importance of farcaster://]]></title>
            <link>https://paragraph.com/@purplesubmarine/farcaster-uri-scheme</link>
            <guid>TatbtHhXPXALJcduihNC</guid>
            <pubDate>Wed, 27 Sep 2023 16:54:40 GMT</pubDate>
            <description><![CDATA[What are URIs and why we need a well-defined URI scheme for Farcaster.]]></description>
            <content:encoded><![CDATA[<p>Every protocol has it's own URI scheme. It's the map to navigate the protocol's resources.</p><p>For example you know that web URIs start with <code>http://</code> or <code>https://</code> And when you click a "link" (i.e. an HTTP URI) in an application (such as an email client or a PDF viewer), your operating system knows that there is a certaing application that can handle this URI: your browser.</p><p>On the other hand, if you click on an <code>ftp://</code> URI, an other application may open up -or maybe your browser again, depending on your configuration.</p><p>Well-defined protocols come with well defined URI "schemes", i.e. a very specific syntax that a URI must follow. For example, after <code>https://</code> comes the server name or its IP, and then a "path". So, when an application reads <code>https://test.com/demo/1.html</code> it knows that it should connect to the server test_dot_com and use the HTTP protocol to request the page <code>/demo/1.html</code>.</p><p>One of the nice things with protocol URIs is that they do not depend on the specific application you use. You can switch your default browser, or install a new ftp client and they will still work -they will just open in a different app.</p><p><strong>At the moment, we don't have a well-defined URI scheme for Farcaster.</strong></p><p>As a result, when a user wants to link to their Farcaster profile, they use the URI provided by a specific client, usually Warpcast -something like <code>https://warpcast.com/vrypan.eth</code>. When they want to share a link to a cast, they use again the URI provided by a client, like <code>https://warpcast.com/vrypan.eth/0x7fb548</code>. Similarly, if you click on the share button at the end of this post, you will open a link that looks like <code>https://warpcast.com/~/compose?embeds...</code></p><p>All of the above work. But they create an unhealthy ecosystem:</p><ul><li><p>First of all, the dominant client (Warpcast at the moment) is not only favoured, but also creates a moat around it. If every Farcaster-related interaction points to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="http://warpcast.com">warpcast.com</a>, most probably, this will be your client.</p></li><li><p>We also rely on an infrastructure we (as a community) don't control and we shouldn't have to, like DNS. If Warpcast (or any other client) lost their domain next year, all these links would break.</p></li><li><p>We introduce a centralisation vector: If everyone uses a specific web client to point to Farcaster resources (casts, profiles, etc.), if the client is forced to censor some of them, this will affect (in practice) the whole ecosystem.</p></li></ul><p>The solution is to define a <code>farcaster://</code> URI scheme that any farcaster client can implement. This would allow us to link to farcaster resources using URIs like</p><ul><li><p><code>farcaster://user/vrypan.eth</code> </p></li><li><p><code>farcaster://cast/vrypan.eth/0x7fb548</code></p></li></ul><p>and they would trigger your farcaster client to jump to the specified resource, just like clicking a <code>mailto:</code> URI opens your email client or an <code>http://</code> URI opens your browser at the specific address.</p><p>These URIs don't depend on, or favour any, specific client or site. They don't even need  DNS to work. They only require farcaster clients and farcaster hubs.</p><div><div class="callout-base callout-tip" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/tip-icon.png" class="callout-button"><div class="callout-content"><div><p>If you are a developer, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://github.com/farcasterxyz/protocol/discussions/123">please check out the corresponding FIP</a>. It will take some serious brain power and expertise to define something that is both useful and elegant and will be able to withstand the test of time. Your comments are needed.</p></div></div></div></div><div><div class="callout-base callout-info" data-node-view-wrapper="" style="white-space:normal"><img src="https://paragraph.xyz/editor/callout/information-icon.png" class="callout-button"><div class="callout-content"><div><p>If you are an end-user, you can advocate for the need of a <code>farcaster: </code> URI scheme. </p></div></div></div></div><hr><p>Note: There is a long, decades-old, discussion about URIs (Uniform Resource Identifiers) vs URLs (Uniform Resource Locators). I decided to use the term URI in this article. If you're into these things, feel free to mentally replace URI with URL wherever you think it's appropriate :-)</p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/bdcfa9ac037757a5e8b5bef0a392d923.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Farcaster Signers]]></title>
            <link>https://paragraph.com/@purplesubmarine/farcaster-signers</link>
            <guid>0bMujnbhGKinxuM5ACtT</guid>
            <pubDate>Sun, 24 Sep 2023 12:25:34 GMT</pubDate>
            <description><![CDATA[How Signers work and some thoughts on limitations, impact and opportunities.]]></description>
            <content:encoded><![CDATA[<h2>How Signers work</h2><p>If you're not familiar with Farcaster signers, the best place to start is Varun's 5 minute video.</p><div data-type="youtube" videoid="ZzySey1azWM">
      <div class="youtube-player" data-id="ZzySey1azWM" style="background-image: url('https://i.ytimg.com/vi/ZzySey1azWM/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=ZzySey1azWM">
          <img src="https://paragraph.xyz/editor/youtube/play.png" class="play">
        </a>
      </div></div><p>In short: To avoid exposing your private keypair that defines who you are on Farcaster, applications create their own keys, you sign them, and tell the network that this new keypair (the "Signer") is allowed to act on your behalf.</p><figure float="left" width="50%" data-type="figure" class="img-float-left" style="max-width: 50%;"><img src="https://storage.googleapis.com/papyrus_images/e44752c06f95eb81d6d8063bbb6097d1.jpg" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAZCAIAAADfbbvGAAAACXBIWXMAACE4AAAhOAFFljFgAAAFBElEQVR4nKVVW2zbVBg+RS1blGZeFufi3NpcnCZxXDcX14njpI7rOq5za5Im6y29UHWXbp1GN9hgECpUqoqxIdE+DBACCSGkSUgghCYh7W3wAG9IewDtYRKaxibBpD2wIR4KrrOuK9PWFenT0X+Oz/m////P5/8AuLk95OtBbWEE8li03s2wwX64ub0VmPcAayswq4G5FZhVwAwBGwSsu4BJBcxaYN9yagsAHy9e/ub7x3rXAvvM+Py5xffrLy0v11feeu295YXV5YXVxdfPnz62eH7xg6X6yoHa/H/PPkIQcNErb3/kRoJb9inhV3MvLC+svnH67FJ95eMLF189ubR67pNXTiwdnznz9cXLX3x26fjMmacQGNVuBPK0GQLyXOdrjA8Mg9qtBXalJhpg0TXZtcCma2pTFrXADje3K/utOq9V14hMNhQPWi+w6XxmyGNUu41qt0nlUowNIA+iM28yEMhjg/2Ixq1MGzs1jeMmlQvRoEa1u0GAaNwkztNhicT74pEMRQgMmYkGxWhQJHGeItIk3oe5EhQhkDhPeJN0uJ8OSx1t3Vmx1uVNhgIcHclEu9IkzitH4hEphHEUkW434gjkAYgGJXE+zVYT3blCdkoSxnimLAmjQrJSLR0q56fT3HAYS4nsCEsPUIRQzE5L3IjPQQ1VZnmmLCQH09xQLNSfogtZsZbmhtPcMB2WsuK4EyEUAnfQz+akyWQ0Hwv156XJgjgxVJkVkhWOLo5W5xgyWy0flrgRihCy4nhPrJCXJkV2f2+iEo9k4pFMZeBAQZyQXbNVSRgrZqcT3Vmj2vWwRBQhsPRAPJLxOWI8U44GRZHdj6MJwpvkmXL3+tdkNK9sI/E+ninHI3IZk1Suy8fKOQljFCEIyYqSZTQoPlSRSeVi6dLsoXptdH6qdjJFF0aqRydGXxytzpXzM3a937DbqW+RsaECfYtzsxyUryaVa+OSTapG+OsZQB7UFgn6WdzD+F0x1BbGXDTuYbyOqM8Rc5o6bbBfgUXnk8d1IT4VDwnssN8MefQtTkSDtsMBO+zfDOs+75aVbcJpwB0G2ZucgcOAEyhjg/3PAb0W2HYBUyswK6NtUyzbh3WfF4ZQGELlDFqB+Z03L6zdW7t7+687N+9d+vLK9V9uf/vVlR++u3rr17sfrn6+GyCN/3zb3g0Qmu9kiwRn3OsBcHP7YGby5OxCKT2xcOrsYGZy/nD9yNSp+cP1l4++KcRL+hbns+Zh3Ntxghs4zuYNECqXKIRxTHcu3TuUoAoppuSyhI17UDZeCmM8zwy2GQIbfWK7BHs8+U42g/XIGRjV7lhIrAwcLOeni9mprFijw/3JaL42fGyocqQoTe3sGgwQatwrhwUcBkzf4lQBRNdk1zXZYWCXJf+8EwayrQHmnQmpHQ449esqMqrdJNY7VjoYcMUjGNeN87FOIeRjI1iKxDgxWW0zBJ7c8Z/yoqmA+cK7n679vXb951t/3Lx3/+7atas3fr/5508/Xrvz2/1rV294bORG790JwXoGXCqax1Em1tmXonLF/vHeWCFF5eJdQgRL7ewOHiGgw1IxP13Ozwjr7dDTRjJkdrg6N1qdiwZFw+5nlukjBBaoA0cTqWiBpQdS0QJFCGGMj4VEihDikQyB9ligDus+344BlOgQjfzmIRq3LHmowwx55KdRg1qgju20ticAKN2x8dA/rl/+nwv4t0T/ANb7r6jeaUScAAAAAElFTkSuQmCC" nextheight="874" nextwidth="1125" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>If you open Warpcast mobile and go to <code>Profile &gt; Settings &gt; Advanced &gt; Manage connected apps</code> you will see something like this. In my case, I have approved two Signers, Warpcast and Herocast.</p><p>These two signers can do everything on my behalf, except take actions that relate to my identity: For example, they can not add/remove signers, or change my Farcaster name, but they can create new casts, delete old casts, like, recast, etc.</p><p>It is important to understand that every message (casts, likes, etc are messages sent from the app to the Farcaster network) a signer sends on my behalf, is signed by the Signer's key and not mine. Which is perfectly fine, since I have sent a message signed by my key letting the network know that this is OK. Plus, at any time, I can revoke a signer by sending a Farcaster message telling the network to remove the specific key from my approved signers.</p><figure float="left" width="50%" data-type="figure" class="img-float-left" style="max-width: 50%;"><img src="https://storage.googleapis.com/papyrus_images/32c3c4a85a6ef5680e1465026eaf534f.jpg" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAbCAIAAACSpRrNAAAACXBIWXMAACE4AAAhOAFFljFgAAAE00lEQVR4nN2T709TVxjHD1GBFSv9YW9vb9vb672X3lva2llKLQVaWmy5LT+qFqxRaYkgCgnEocKsiWtIDBOdQwcBxNkhbnHEzSxLtlcmvtlL92JbNrMXm8my+Wbbv/As5xaQSTVmc2+WfHLuc895zvk+53meg0glzxB2zrirEpm1W5htyESUs9s3sdoSC1HOajdZKpFZXUIzhNOstekVHFHOFma2b9lh1IikkicreHUJrS6hSSVvqLQ+A1Igw0Ru6o2B7MDRkYvjV98cGT+4/9jF8WvvvbMwnp08d/rClYnZsyPjF3JTb+eu3phZSsbT1y4vTE3OvTU2MTJ0frD31NTk3KUL06eHz3tsTUQ5S6mEvwkQ5WyjN14jBvqPnEzG091dJ/yuaGs4lYxnWkKdyfZMZ3s6FupqcEshf8eRZL+/JjrYOzp2MtfdNeBz7QnVd3RIhw8kegd7T/Em98ZLIEolqBGtV3BqRJcishQZKpF5KzIqkGErMlYgqmBoS3CuFPKq7EYqEaVGdGFSiahKZNaX7iiSIlLJW5las87BGd0eZ1hkfSLrszK1AuO1MrUrWDy8qUbk6vAorzqqGkTWZ+PqGNK1Uwi47SGB8bLGXUUE9ApO5OqqLJ6dYiDanPK6In5vazScCgeT4WByb6J3396+UGPydVuTf3er1xWJhFNS9FBrPB2Xun0eyeeJSdFDDf6OcFNnoD5h2JiiwofSCDThrOb9IusTGG+VxSMwPoveadE7LHonpRJkrLhtVIJZa6NUglEjFupJyuPabxEBSiWQFdzuGqkreby9LdMWS0ebD0ZCBxjSpVdwG/esp3C6QfVchxWBtbFoLxv+BVgAPxaZpxG9QgFSyXNGt0XvYClXIbkmrc2ktRk1Ik3I2deIJq2NJuxGjbjqgGfM2A3nvVAPk9ZWXIAoZb3uFpGr83tba10tkeZUe1smHExGm1OhYLLBn5Cih+NSt393W6A+sTfRGwmnfB4pHOxMtB2NS92xWPf+fX0dbZm4dGSHoUjNcIrWB2LRO2idHKzOYdbaWMpFE3azzmHCMYq0zk7r7JRGWHHQOWjCKbI+3lSDu0gjFq+Bcd3CWpFXSqLcUHNl1fqeIZW8XsG9oDWwgPk56XtJqBf2xcpD++9A/xcBSmU1qQWTWjCqXg2G9QKUykps4xWbWcVmVvUqUJey+NiCAKWyqis4UV99sjY47AnExLqYvVGqbvjHxKsbwlafTsFvf42jKq1IU8E30u7fB3pg7ASM9sPZQZi+BPlpuLnK+8+xX8jDM6etpJNQ8Ehdxt3vTEJ2AK6/CxPnYKgHcqdgcRbyM5jFebiTh6V5uDW3wuIMLF3H4NVVt43cW/ww01eGLIjRCD/3pWEoDR/fhAdfwPHDkB3GkeZnYeEq3LsDT36B3x7Dd1/DD9/Ao2/h15/g8Y/w1X14/Aj+eAKf38Vu+Vm4OfOUG9fg9vz32ay2jEPqMv5BVydkB2FmEnJnYLgHciOroU3jkO/k4e4tWP4AlhdhOQ+fLGHj9gJ8tgxffipfZbrYDZY+yhzDN9BU8EHG/eeJHhjrh9HjcHYI5q/IqZhdZd02bMvH4QimMYuy/Qz5mYdnRkWDC9dA7iJ+rYuaq7x7xPo9gv+lKOYZEfwBzkesdtFfMeZ0xSzMGAwAAAAASUVORK5CYII=" nextheight="942" nextwidth="1125" class="image-node embed"><figcaption htmlattributes="[object Object]" class="">Warpcast warning when removing an application's key.</figcaption></figure><p>However, this creates a problem: After I remove a signer, hubs will find messages that are (now) signed by a key that is not approved by me -and they will delete them.</p><p>This is why if you click on the trashcan icon next to a signer, you will see something like this.</p><p>In addition, you will also see a message that this transaction happens on-chain, and you will be asked to cover the cost of the transaction ($0.99). Which makes sense: Someone has to pay for it, and we don't want to rely on a centralised entity or company to cover these costs. </p><p>In this case, the amount is collected by Warpcast to pay for the gas fees, but there's nothing stoping a knowledgeable user from taking the required steps to do it themselves and pay the gas fees in $ETH. </p><hr><h2>Implication: cost</h2><p>The concepts and the flows described above are optimised for decentralisation and openness. But when it comes to user experience, especially for users used to centralised social apps that covered all operating costs in exchange for monetising their control over the network, they will probably create a number of issues.</p><p>First of all, adding or removing an app (i.e. a Signer), has a monetary cost attached to it. Many users will be reluctant to do so, which means that:</p><ol><li><p>The app that onboarded most users to Farcaster (100% Warpcast for now) has a significant advantage compared to other apps.</p></li><li><p>Users will be more reluctant to even try a new app.</p></li></ol><p>Is this bad? Not necessarily. <br><br>This cost may also be an opportunity for a Farcaster project/app that has an alternative revenue stream, or enough funds: They can cover the costs and offer these services for free, and in doing so they can grow their user base much faster, and even become the most popular Farcaster client.</p><p>I find it very interesting that even if an app pays for these costs, by doing so, they help the network grow. And given the (sufficiently 😀) decentralised nature of Farcaster, if users are happy with Farcaster but dissatisfied with the specific app, the cost of moving to an other app is low enough (&lt;$1) for most to do so. So, in a healthy and large enough Farcaster ecosystem an app cannot rely on their large user share to keep their users. (At least from this point of view.)</p><hr><h2>Implication: the risk of losing content</h2><p>The second implication is that removing a Signer will result in loosing all content and activity the user created through it: casts, likes, recasts, follows. How many users will be willing to remove a signer if all the content they created will be lost?</p><p>However, this is a limitation of the current implementation in Warpcast and <strong>not a technical limitation of the protocol</strong>.</p><p>As <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://warpcast.com/v/0x7f5fde">Varun explained in this cast</a>, there is a solution: An application could download all your messages signed by one Signer (and maybe delete them from the network if needed), re-sign them using a new Signer and re-submit them to the network.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/20987962e5b108732fb48329e9eb59b0.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAKCAIAAABaL8vzAAAACXBIWXMAABYlAAAWJQFJUiTwAAACrElEQVR4nJVSbW+aUBRmqXYl6mRqVJBWeVWo2BZqRYR5kXGBiyLU97Ufmmy/eWmW/pO1y+LL/LBPW3Jy8+Q55+Y55zwHy76r3qNNgtbFU1oRe+LF1SXXVcSezGsyr12LOklwJfy8nKn/Y5Tw8339HmCuNX57/fnr7TVBmxDOIZhGwQq5s8COx3A+Rat6pVXE6f8S2L+VHFPO1DFVMp+/P7/8eNFVu1ZpVQiOLImn2EccK73Hiu+xUu6kmj8hC2e1Dykqf0ISaYpIU/kUmU+RROqAj0zhrHbsvUpw5WwDK+I00L2+avO1dpvvyrx20+q3hW5H6KmSIXGaIm6BQCsdoaeIfflPzbWoy9xtk1HbQldkVEXst/kuS0rHcQ8rEmhlNEBNRu2rNjACVTL0azC4dcw7FxjBnWKZd84Yzm+aWz6w417nk6GNDG3kgcgxwzbf9UE8uHVA33etcVvoEmmqhJ8fZbBytvGXP0WcPoLyjtwOnm0UzmpEiiri9D4OZmYbhxPINog0VckxJMFRBb5KsHseY0k5cJLAjh0TJWgN+p4LoilaTb3lrkcUBatF9Pi4+IpGCXJnVg+G7szS4eb+aQIXyJ3tf83HD4Y2StAagikaJUPdy6fIrQBHK3A4GeqeY4az8MsELgI7ca2xYyLbRH3VDpzEt+MILmwTweEEGIEPpj6II2/h2zEYBEPdA4bvmKEHIjicWD03hDNVMvLpreGYxGmRt/TBFAwCNErgcLK5f4LDSWDHrhU6ZvjZCuNg5YIogovZ5MG1Qh9MtxccLOEOhO4sgos4XD8uvwkXN+VMnSrwlRxzMLmaZzlK5ukOS0osKTOVlkArF+UmX2uzpFSvtFhS4umOQCtNRhUvrjjqcpeS+ZrCVLcplpQEWhEZtcVqVP6w+r0r5UzjN4Qtq02j+CvsAAAAAElFTkSuQmCC" nextheight="400" nextwidth="1230" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>I consider this is an opportunity for developers who want to join the Farcaster community: An application to manage Signers.</p><p>My ideal Signers Management Tool?</p><ol><li><p>It allows me to List/Add/Remove Signers</p></li><li><p>It shows me which messages will be affected if I removed a Signer.</p></li><li><p>It offers me the option to re-sign messages (in bulk) using a new signer. (Even create a new Signer on the fly, to be used just for this operation.)</p></li><li><p>It allows me to pay for gas for these transactions using my own ETH wallet.</p></li></ol><p>As things are today, I'm very reluctant to experiment with Farcaster apps because I know that if I don't like them and I want to remove them, the content I created will be lost. Having such a tool, or integrating this functionality in an other app would eliminate this risk, and I would be more open to trying new apps.</p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d4e4730944c0aaaf642502d6b9f7b2ea.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Some thoughts on farcaster channels]]></title>
            <link>https://paragraph.com/@purplesubmarine/farcaster-channel</link>
            <guid>5x5fN5GOpGtBEf3OxsvM</guid>
            <pubDate>Sat, 23 Sep 2023 10:08:44 GMT</pubDate>
            <description><![CDATA[Channels are a very interesting thing. Feature? Primitive? It's up to the community and the devs to decide.]]></description>
            <content:encoded><![CDATA[<p>Channels take advantage of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://github.com/farcasterxyz/protocol/discussions/71">FIP-2: Flexible targets for messages</a> which introduced the idea that a cast can reply not only to other casts, but to any URL -a genius idea.</p><p>So, if you look "inside" this cast, </p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/30f6a7df2f2045d5f1e056175cf1f58c.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAICAIAAAAX52r4AAAACXBIWXMAABYlAAAWJQFJUiTwAAACoUlEQVR4nI1RW1MSARiFIZmRXF1Y191lWSB2EcLE3LizIMhlEFYUgyiLsJwSaVRqNLQUSSRURKUwEq28TdM445sPPfS7eq0hnF56aebMN+e7nHMePg4GXgsEvQ6bjVZZHo8+C/tjId+9iXjqzmBcpdD1dJpvUEYNZSQJLa2xwYAUEkgatQERHxfxcRiQtjcTDSLi42CTGAVJAlZhQopTeJOYyMV//vr+obT17ehiv3L88f1RuVh7my1PJ15PJebvR57EookIG4+GxnvVVpvBZ+pxsu6IzeCzm/z9DOtigjoNYzP4+q2sTsO4mGDYH8OEFNJGYpCS8yDMjmXXTy4+JWIT+7tf56aWpp++XE4XtgvVg8pxPlNKzyxvF6qnB+eZufzx/tnWenUmkV5dKm0XqpXN/XKxtlc+3Fh5l8+U9sqHm7nKZq5ycf7j7tCYmfYggIwD8MQdLXIeB3JYAiefz/KZUiq5kE5ld3e+rGV3UsmFxdnccrowk5hfy5bLxVo2XVhZ2CgXa5OPnm+tV18kFxdn8weV01ezq3aTn3VHjd19o6HxsD9mpj0wIOWgIImCJAwQdn0gOTYfcIYH+kZYd8RlDXqY4QHnCOuOepjhm52WoDdq7HE6TH6vbSgy+PCW2joaGndZgxbaFXCG1XK6lYeCV8SQQNLCRVq5qIiPoyBZD0DaSGEzYu+OTYYrjNnvtt92MENS5HoLFwGbxHVZU112ldPR+Gpj2N5MCLiXK4CHwYAUE1KYkEJB8i+pByCADAFkkECi09jNtJcktASswiFlr5rpUuhhQIoKSRiQahR6fbcTh5QIIGsokTZ5g1y2f3z+BQeHlDikREFKSxm1lEHeoULBerhGoe9S6DGQlLQrMSGlltNaykjAKrGofv//+A391b2u+elNGgAAAABJRU5ErkJggg==" nextheight="310" nextwidth="1222" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>you will see something like this:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e047be503cdd63ede7c95aecb07dbf23.png" blurdataurl="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAFCAIAAACreXkmAAAACXBIWXMAABYlAAAWJQFJUiTwAAAA00lEQVR4nK3NMYqFUAyFYREZRERRvHhvCOGSECQIIljYuigbG1fnNlyI3YCvne7NV57i/EmSJABAROM4hhDatnXOee8BoCiK5F8w87Zt67oS0TzPIvLzyvO8LMs0Tb8NhBBijFVVqeqyLMysqswcY1TVLMu+DZjZfd/P81zX5ZxDxLqu8dX3PQD4FxGpKhENw6AvZkZEMxvH8bMAwB+BqqrO8zyOY9935xwzE5GZiQgAmFmMkYhE5HNnZuu6qioiymuaJhFRVRFpmqbrOkT03ndd9wuqkykRkReOJQAAAABJRU5ErkJggg==" nextheight="252" nextwidth="1530" class="image-node embed"><figcaption htmlattributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>What makes the above cast part of the <em>Warpcast </em>channel is the specific <code>parent_url</code>, which this case points to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out dont-break-out" href="https://opensea.io/collection/warpcast">this NFT collection</a>. Any cast with <code>parent_url=chain://eip155:7777777/erc721:0x10a77f29a6bbeae936f3f27cd60546072dae4e41</code> will appear in the <em>Warpcast </em>channel.</p><hr><p>So, can anyone create a channel just by setting parent_url to some value? </p><p>Yes and no. </p><p><strong>Yes</strong>, you could do it (the Warpcast client does not allow you to do this at the moment, but other Farcaster clients, like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out dont-break-out" href="https://github.com/stephancill/opencast">opencast</a>, do.)</p><p><strong>No</strong>, Warpcast, will not treat any <code>parent_url</code>as a Channel. Setting for example <code>parent_url=https://paragraph.xyz/@purplesubmarine/</code> will not be treated as the <em>Purple Submarine </em>channel<em>:</em> Warpcast channels are a curated list of URLs managed by the Warpcast team.</p><hr><p>Is it bad, that Channels are controlled by a small team?</p><p>I think that there is a lot of value in having a curated list of channels. I consider channels to be a client-controlled feature, not a farcaster protocol-level primitive (the primitive is FIP-2, mentioned above).</p><p>Eventually, I would like to see a way for users to "subscribe" to various channel directories.</p><p>For example, there could be the Warpcast channel directory, curated by the Warpcast team. And maybe some algorithmically generated directory by a service that keeps track of <code>parent_urls</code> used in casts, and adds them to its directory after they reach a certain size (number of casts, or number of users, or number of reactions). And also some DAO-controlled directory that curates a highly curated kids-friendly channels directory.</p><p>One of my favourite ideas is a directory based on a ERC721 contract. The contract allows one NFT to be minted per day, using a nouns-like auction. Each NFT minted becomes a new channel. The owner can set the artwork and description on-chain, which will create in a nice, "curated" (limited supply of 1/day, cost) but permissionless directory of channels available on-chain.</p><p>It would also be nice if farcaster clients allowed users to manually add a URL and set it as a channel: If channels are something like RSS feeds, we can have directories (like podcast directories maintained by Apple and others) but also allow users to manually enter a URL to subscribe to.</p><hr><p>Most of the above can be implemented by what we already have in place. One limitation of the existing model is hierarchically organised channels that allow users to subscribe to a channel that includes sub-channels (for example, subscribe to <em>Sports </em>and see everything under <em>Sports/Football</em>, <em>Sports/Basketball</em>, etc.) Of course a client could implement something like this, but it will require significantly more resources to do it, because, at the protocol level, farcaster hubs do not provide a way to easily fetch this information.</p><p>Also, something that is not being addressed yet (Warpcast is doing some experiments) is if channels will have some kind of moderator/curator/owner and, if they do, if this will be somehow translated to a protocol-level feature, or remain a client-specific one.</p><hr><p>Channels are a very interesting thing. Feature? Primitive? It's up to the community and the devs to decide. Are they a Warpcast feature or a Farcaster primitive?</p><p>There's a great discussion between @billzh.eth and @dwr.eth where Dan shares a lot of his thoughts on channels. Check it out:</p><div data-type="youtube" videoid="uTKv8FnTYvI">
      <div class="youtube-player" data-id="uTKv8FnTYvI" style="background-image: url('https://i.ytimg.com/vi/uTKv8FnTYvI/hqdefault.jpg'); background-size: cover; background-position: center">
        <a href="https://www.youtube.com/watch?v=uTKv8FnTYvI">
          <img src="https://paragraph.xyz/editor/youtube/play.png" class="play">
        </a>
      </div></div><p></p>]]></content:encoded>
            <author>purplesubmarine@newsletter.paragraph.com (vrypan.eth)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0f085417535eb46c708b12c27deb7244.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>