
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/">
    <channel>
        <title><![CDATA[ The Cloudflare Blog ]]></title>
        <description><![CDATA[ Get the latest news on how products at Cloudflare are built, technologies used, and join the teams helping to build a better Internet. ]]></description>
        <link>https://blog.cloudflare.com</link>
        <atom:link href="https://blog.cloudflare.com/" rel="self" type="application/rss+xml"/>
        <language>en-us</language>
        <image>
            <url>https://blog.cloudflare.com/favicon.png</url>
            <title>The Cloudflare Blog</title>
            <link>https://blog.cloudflare.com</link>
        </image>
        <lastBuildDate>Thu, 09 Apr 2026 17:16:56 GMT</lastBuildDate>
        <item>
            <title><![CDATA[Cloudflare’s public IPFS gateways and supporting Interplanetary Shipyard]]></title>
            <link>https://blog.cloudflare.com/cloudflares-public-ipfs-gateways-and-supporting-interplanetary-shipyard/</link>
            <pubDate>Tue, 14 May 2024 13:00:36 GMT</pubDate>
            <description><![CDATA[ Cloudflare is transitioning traffic that comes to our public IPFS gateway to Interplanetary Shipyard’s IPFS gateway. The transition is expected to be complete by August 14th, 2024 ]]></description>
            <content:encoded><![CDATA[ <p></p><p><a href="https://ipfs.tech/">IPFS</a>, the distributed file system and content addressing protocol, has been around since 2015, and Cloudflare has been a user and operator since 2018, when we began <a href="/distributed-web-gateway">operating a public IPFS gateway</a>. Today, we are announcing our plan to transition this gateway traffic to the IPFS Foundation’s gateway, maintained by the <a href="https://ipshipyard.com/">Interplanetary Shipyard</a> (“Shipyard”) team, and discussing what it means for users and the future of IPFS gateways.</p><p><a href="https://blog.ipfs.tech/shipyard-hello-world/">As announced in April 2024</a>, many of the IPFS core developers and maintainers now work within a newly created, independent entity called Interplanetary Shipyard after transitioning from <a href="https://protocol.ai/">Protocol Labs</a>, where IPFS was invented and incubated. By operating as a collective, ongoing maintenance and support of important protocols like IPFS are now even more community-owned and managed. We fully support this “exit to community” and are excited to support Shipyard as they build more great infrastructure for the open web.</p><p>On May 14th, 2024, we will begin to transition traffic that comes to Cloudflare’s <a href="https://docs.ipfs.tech/concepts/public-utilities/#public-ipfs-utilities">public IPFS gateway</a> to the IPFS Foundation’s <a href="https://docs.ipfs.tech/concepts/public-utilities/#public-ipfs-gateways">gateway at ipfs.io or dweb.link</a>. Cloudflare’s public IPFS gateway is just one of many – part of a distributed ecosystem that also includes Pinata, eth.limo, and many more. Visit the <a href="https://ipfs.github.io/public-gateway-checker/">IPFS Public Gateway Checker</a> to see the other publicly available IPFS gateways.</p><p>Cloudflare believes in helping build a better Internet for all and an accessible and private Internet, principles that Protocol Labs, IPFS, and Shipyard all share. We believe the IPFS gateway transition will boost ecosystem collaboration, increase protocol resiliency, and ensure healthy stewardship and governance. Cloudflare is proud to be a partner of the IPFS Project and Shipyard in this transition and will continue to help sponsor their work as gateway stewards.</p>
    <div>
      <h3>What happens next</h3>
      <a href="#what-happens-next">
        
      </a>
    </div>
    <p>All traffic using the <b>cloudflare-ipfs.com</b> or <b>cf-ipfs.com</b> hostname(s) will continue to work without interruption and be redirected to ipfs.io or dweb.link until August 14th, 2024, at which time the Cloudflare hostnames will no longer connect to IPFS and all users must switch the hostname they use to <b>ipfs.io</b> or <b>dweb.link</b> to ensure no service interruption takes place. If you are using either of the Cloudflare hostnames, please be sure to switch to one of the new ones as soon as possible ahead of the transition date to avoid any service interruptions!</p><p>It is important to Cloudflare, IPFS, and Shipyard that this transition is completed seamlessly and with as little impact to users as possible. With that in mind, there is no change to the amount or type of end user information that is visible to either Cloudflare, the IPFS Foundation, or Shipyard before or after the completion of this transition.</p><p>We’re excited to see further development and projects from the IPFS community and play our part in helping those applications be secure, performant, and reliable!</p><hr />
    <div>
      <h3>About Shipyard</h3>
      <a href="#about-shipyard">
        
      </a>
    </div>
    <p><a href="https://ipshipyard.com/">Interplanetary Shipyard</a> is an engineering collective that delivers user agency through technical advancements in <a href="https://ipfs.tech/">IPFS</a> and <a href="https://libp2p.io">libp2p</a>. As the core maintainers of open source projects in the Interplanetary Stack (including IPFS and libp2p implementations such as <a href="https://github.com/ipfs/kubo">Kubo</a>, <a href="https://github.com/ipfs/rainbow/">Rainbow</a>, <a href="https://github.com/ipfs/boxo">Boxo</a>, <a href="https://github.com/ipfs/helia">Helia</a>, and <a href="https://github.com/libp2p/go-libp2p">go-libp2p</a>/<a href="https://github.com/libp2p/js-libp2p">js-libp2p</a>), and supporting performance measurement tooling (<a href="https://probelab.io/">Probelab</a>), they are committed to open source innovation and building bridges between traditional web frameworks and the decentralized ecosystem. To achieve this, their engineers work alongside technical teams in web2 and web3 to promote adoption and drive practical applications.</p> ]]></content:encoded>
            <category><![CDATA[Web3]]></category>
            <category><![CDATA[Distributed Web]]></category>
            <category><![CDATA[IPFS]]></category>
            <category><![CDATA[Cloudflare Gateway]]></category>
            <guid isPermaLink="false">2301leOruEAwLBe7M7S5hk</guid>
            <dc:creator>Brian Batraski</dc:creator>
            <dc:creator>Wesley Evans</dc:creator>
            <dc:creator>Cameron Wood (Guest Author)</dc:creator>
            <dc:creator>Bethany Crystal (Guest Author)</dc:creator>
        </item>
        <item>
            <title><![CDATA[Serving Cloudflare Pages sites to the IPFS network]]></title>
            <link>https://blog.cloudflare.com/cloudflare-pages-on-ipfs/</link>
            <pubDate>Mon, 16 May 2022 12:57:44 GMT</pubDate>
            <description><![CDATA[ Today, we're announcing we're bridging the two. We will make it possible for our customers to serve their sites on the IPFS network ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Four years ago, <a href="/distributed-web-gateway/">Cloudflare went Interplanetary</a> by offering a gateway to the IPFS network. This meant that if you hosted content on IPFS, we offered to make it available to every user of the Internet through HTTPS and with Cloudflare protection. IPFS allows you to choose a storage provider you are comfortable with, while providing a standard interface for Cloudflare to serve this data.</p><p>Since then, businesses have new tools to streamline web development. <a href="https://workers.dev">Cloudflare Workers</a>, <a href="https://pages.cloudflare.com">Pages</a>, and <a href="/introducing-r2-object-storage/">R2</a> are enabling developers to bring services online in a matter of minutes, with built-in scaling, security, and analytics.</p><p>Today, we're announcing we're bridging the two. We will make it possible for our customers to serve their sites on the IPFS network.</p><p>In this post, we'll learn how you will be able to build your website with Cloudflare Pages, and leverage the IPFS integration to make your content accessible and available across multiple providers.</p>
    <div>
      <h2>A primer on IPFS</h2>
      <a href="#a-primer-on-ipfs">
        
      </a>
    </div>
    <p>The InterPlanetary FileSystem (IPFS) is a peer-to-peer network for storing content on a distributed file system. It is composed of a set of computers called nodes that store and relay content using a common addressing system. In short, a set of participants agree to maintain a shared index of content the network can provide, and where to find it.</p><p>Let's take two random participants in the network: Alice, a cat person, and Bob, a dog person.</p><p>As a participant in the network, Alice keeps connections with a subset of participants, referred to as her peers. When Alice is making her content 🐱 available on IPFS, it means she announces to her peers she has content 🐱, and these peers stored in their routing table 🐱 is provided by Alice's node.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6BzC2QWnSrnF6lIqzMd0S8/df749e6c4e59acccb288c078235cab46/image7-8.png" />
            
            </figure><p>Each node has a routing table, and a datastore. The routing table retains a mapping of content to peers, and the datastore retains the content a given node stores. In the above case, only Alice has content, a 🐱.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1JKs4dKwaokLGutycmasSr/ee51d2f5c4b313c920f8f9ff22778b55/image1-41.png" />
            
            </figure><p>When Bob wants to retrieve 🐱, he tells his peers they want 🐱. These peers point him to Alice. Alice then provides 🐱 to Bob. Bob can verify 🐱 is the content they were looking for, because the content identifier he requested is derived from the 🐱 content itself, using a secure, cryptographic hash function.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6kYdWRivzzXiVbC9LsDWPf/9bdcb0ae5393a7c3551b7395ab5efd61/image3-28.png" />
            
            </figure><p>Even better, if Bob becomes a cat person, they can announce to their peers they are also providing a cat. Bob's love for cats could be genuine, or because they have interest in providing the content, such as a contract with Alice. IPFS provides a common ground to share content, without being opinionated on how this content has to be stored and its guarantees.</p>
    <div>
      <h2>How Pages websites are made available on IPFS</h2>
      <a href="#how-pages-websites-are-made-available-on-ipfs">
        
      </a>
    </div>
    <p>Content is made available as follows.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7y0PyVwr6OWWm4Ql8BDeZz/22401175f3cc9f85635a155ad1b4c78c/image2-37.png" />
            
            </figure><p>The components are:</p><ul><li><p>Pages storage: Storage solution for Cloudflare Pages.</p></li><li><p>IPFS Index Proxy: Service maintaining a map between IPFS CID and location of the data. This is operated on Cloudflare Workers and using Workers KV to store the mapping.</p></li><li><p>IPFS node: Cloudflare-hosted IPFS node serving Pages content. It has an in-house datastore module, able to communicate with the IPFS Index Proxy.</p></li><li><p>IPFS network: The rest of the IPFS network.</p></li></ul><p>When you opt in serving your Cloudflare Page on IPFS, a call is made to the IPFS index proxy. This call first fetches your Pages content, transforms it into a CID, then both populates IndexDB to associate the CID with the content and reaches out to Cloudflare IPFS node to tell them they are able to provide the CID.</p><p>For example, imagine your website structure is as follows:</p><ul><li><p>/</p><ul><li><p>index.html</p></li><li><p>static/</p><ul><li><p>cats.txt</p></li><li><p>beautiful_cats.txt</p></li></ul></li></ul></li></ul><p>To provide this website on IPFS, Cloudflare has to compute a CID for /. CIDs are built recursively. To compute the CID for a given folder /, one needs to have the CID of <code>index.html</code> and <code>static</code>/. <code>index.html</code> CID is derived from its binary representation, and static/ from cats.txt and beautiful_cats.txt.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7stjDpQPAhOugUqBcwRV8H/1bf1f181f61793fa0d6c1d1c2a860d77/image6-13.png" />
            
            </figure><p>This works similarly to a Merkle tree, except nodes can reference each other as long as they still form a Directed Acyclic Graph (DAG). This structure is therefore referred to as a <a href="https://docs.ipfs.io/concepts/merkle-dag/">MerkleDAG</a>.</p><p>In our example, it's not unlikely for <code>cats.txt</code> and <code>beautiful_cats.txt</code> to have data in common. In this case, Cloudflare can be smart in the way it builds the MerkleDAG.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6mqAMRlu7HoiESker0Tiur/49e0b2c53cdf847dc283391335408f15/image4-22.png" />
            
            </figure><p>This reduces the storage and bandwidth requirement when accessing the website on IPFS.</p><p><i>If you want to learn more about how you can model a file system on IPFS, you can check the</i> <a href="https://github.com/ipfs/specs/blob/master/UNIXFS.md"><i>UnixFS</i></a> <i>specification.</i></p><p>Cloudflare stores every CID and the content it references in IndexDB. This allows Cloudflare IPFS nodes to serve Cloudflare Pages assets when requested.</p>
    <div>
      <h2>Let's put this together</h2>
      <a href="#lets-put-this-together">
        
      </a>
    </div>
    <p>Let’s take an example: pages-on-ipfs.com is hosted on IPFS. It is built using Hugo, a static site generator, and Cloudflare Pages with the <a href="https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/">public documentation template</a>. Its source is available on <a href="https://github.com/thibmeu/pages-on-ipfs">GitHub</a>. If you have an IPFS compatible client, you can access it at ipns://pages-on-ipfs.com as well.</p><p>1. Read Cloudflare Pages deployment documentation</p><p>For the purpose of this blog, I want to create a simple Cloudflare page website. I have experience with Hugo, so I choose it as my framework for the project.</p><p>I type "<a href="https://lmddgtfy.net/?q=cloudflare%20pages">cloudflare pages</a>" in the search bar of my web browser, then head to the Read the docs &gt; Framework Guide &gt; <a href="https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/">Deploy a Hugo site</a>.</p><p>2. Create a site</p><p>This is where I use Hugo, and your configuration might differ. In short, I use hugo new site pages-on-ipfs, create an index and two static resources, et voilà. The result is available on the source <a href="https://github.com/thibmeu/pages-on-ipfs">GitHub</a> for this project.</p><p>3. Deploy using Cloudflare Pages</p><p>On the Cloudflare Dashboard, I go to Account Home &gt; Pages &gt; Create a project. I select the GitHub repository I created, and configure the build tool to build Hugo website. Basically, I follow what's written on <a href="https://developers.cloudflare.com/pages/framework-guides/deploy-a-hugo-site/#deploying-with-cloudflare-pages">Cloudflare Pages documentation</a>.</p><p>Upon clicking Save and Deploy, my website is deployed on pages-on-ipfs.pages.dev. I also configure it to be available at pages-on-ipfs.com</p><p>4. Serve my content on IPFS</p><p>First, I opt in my zone on Cloudflare Pages integration with IPFS. This feature is not available yet for everyone to try out.</p><p>This allows Cloudflare to index the content of my website. Once indexed, I get the CID for my deployment baf...1. I can check that my content is available at this hash on IPFS using an IPFS gateway <a href="https://bafybeig7hluox6xefqdgmwcntvsguxcziw2oeogg2fbvygex2aj6qcfo64.ipfs.cf-ipfs.com">https://baf...1.ipfs.cf-ipfs.com/</a>.</p><p>5. Make my IPFS website available at pages-on-ipfs.com</p><p>Having one domain name to access both Cloudflare Pages and IPFS version, depending on if the client supports IPFS or not is ideal. Fortunately, the IPFS ecosystem supports such a feature via DNSLink. DNSLink is a way to specify the IPFS content a domain is associated with.</p><p>For pages-on-ipfs.com, I create a TXT record on _dnslink.pages-on-ipfs.com with value dnslink=/ipfs/baf...1. Et voilà. I can now access ipns://pages-on-ipfs.com via an IPFS client.</p><p>6. (Optional) Replicate my website</p><p>The content of my website can now easily be replicated and <a href="https://docs.ipfs.io/how-to/pin-files/">pinned</a> by other IPFS nodes. This can either be done at home via an IPFS client or using a pinning service such as <a href="https://www.pinata.cloud/">Pinata</a>.</p>
    <div>
      <h2>What's next</h2>
      <a href="#whats-next">
        
      </a>
    </div>
    <p>We'll make this service available later this year as it is being refined. We are committed to make information move freely and help build a better Internet. Cloudflare Pages work of solving developer problems continues, as developers are now able to make their site accessible to more users.</p><p>Over the years, IPFS has been used by more and more people. While Cloudflare started by making IPFS content available to web users through an HTTP interface, we now think it's time to give back. Allowing Cloudflare assets to be served over a public distributed network extends developers and users capability on an open web.</p>
    <div>
      <h2>Common questions</h2>
      <a href="#common-questions">
        
      </a>
    </div>
    <ul><li><p>I am already hosting my website on IPFS. Can I pin it using Cloudflare?</p><ul><li><p>No. This project aims at serving <a href="https://www.cloudflare.com/developer-platform/solutions/hosting/">Cloudflare hosted content</a> via IPFS. We are still investigating how to best replicate and re-provide already-existing IPFS content via Cloudflare infrastructure.</p></li></ul></li><li><p>Does this make IPFS more centralized?</p><ul><li><p>No. Cloudflare does not have the authority to decide who can be a node operator nor what content they provide.</p></li></ul></li><li><p>Are there guarantees the content is going to be available?</p><ul><li><p>Yes. As long as you choose Cloudflare to host your website on IPFS, it will be available on IPFS. Should you move to another provider, it would be your responsibility to make sure the content remains available. IPFS allows for this transition to be smooth using a pinning service.</p></li></ul></li><li><p>Is IPFS private?</p><ul><li><p>It depends. Generally, no. IPFS is a p2p protocol. The nodes you peer with and request content from would know the content you are looking for. The privacy depends on the trust you have in your peers to not snoop on the data you request.</p></li></ul></li><li><p>Can users verify the integrity of my website?</p><ul><li><p>Yes. They need to access your website through an IPFS compatible client. Ideally, IPFS content integrity is turned into a web standard, similar to <a href="https://developer.mozilla.org/en-US/docs/Web/Security/Subresource_Integrity">subresource integrity</a>.</p></li></ul></li></ul><p></p> ]]></content:encoded>
            <category><![CDATA[Platform Week]]></category>
            <category><![CDATA[Cloudflare Pages]]></category>
            <category><![CDATA[Distributed Web]]></category>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[IPFS]]></category>
            <guid isPermaLink="false">yHRMEOkly3EmYimxcRF3u</guid>
            <dc:creator>Thibault Meunier</dc:creator>
        </item>
        <item>
            <title><![CDATA[Gaining visibility in IPFS systems]]></title>
            <link>https://blog.cloudflare.com/ipfs-measurements/</link>
            <pubDate>Mon, 16 May 2022 12:57:39 GMT</pubDate>
            <description><![CDATA[ We've developed the IPFS Gateway monitor, an observability tool that runs various IPFS scenarios on a given gateway endpoint.  ]]></description>
            <content:encoded><![CDATA[ <p></p><p>We have been operating an IPFS gateway for the last four years. It started as a <a href="/distributed-web-gateway/">research experiment in 2018</a>, providing <a href="/e2e-integrity/">end-to-end integrity with IPFS</a>. A year later, we made <a href="/continuing-to-improve-our-ipfs-gateway/">IPFS content faster to fetch</a>. Last year, we announced we were committed to <a href="/announcing-web3-gateways/">making IPFS gateway part of our product offering</a>. Through this process, we needed to inform our design decisions to know how our setup performed.</p><p>To this end, we've developed the IPFS Gateway monitor, an observability tool that runs various IPFS scenarios on a given gateway endpoint. In this post, you'll learn how we use this tool and go over discoveries we made along the way.</p>
    <div>
      <h2>Refresher on IPFS</h2>
      <a href="#refresher-on-ipfs">
        
      </a>
    </div>
    <p>IPFS is a distributed system for storing and accessing files, websites, applications, and data. It's different from a traditional centralized file system in that IPFS is completely distributed. Any participant can join and leave at any time without the loss of overall performance.</p><p>However, in order to access any file in IPFS, users cannot just use web browsers. They need to run an IPFS node to access the file from IPFS using its own protocol. IPFS Gateways play the role of enabling users to do this using only web browsers.</p><p>Cloudflare provides an IPFS gateway at <a href="https://cloudflare-ipfs.com">https://cloudflare-ipfs.com</a>, so anyone can just access IPFS files by using the gateway URL in their browsers.</p><p>As IPFS and the Cloudflare IPFS Gateway have become more and more popular, we need a way to know how performant it is: how much time it takes to retrieve IPFS-hosted content and how reliable it is. However, IPFS gateways are not like normal websites which only receive HTTP requests and return HTTP responses. The gateways need to run IPFS nodes internally and sometimes do content routing and peer routing to find the nodes which provide IPFS contents. They sometimes also need to resolve IPNS names to discover the contents. So, in order to measure the performance, we need to do measurements many times for many scenarios.</p>
    <div>
      <h2>Enter the IPFS Gateway monitor</h2>
      <a href="#enter-the-ipfs-gateway-monitor">
        
      </a>
    </div>
    <p><a href="https://github.com/cloudflare/ipfs-gateway-monitor">IPFS Gateway monitor</a> is this tool. It allows anyone to check the performance of their gateway and export it to the Prometheus monitoring system.</p><p>This monitor is composed of three independent binaries:</p><ol><li><p>ipfs-gw-measure is the tool that calls the gateway URL and does the measurement scenarios.</p></li><li><p>ipfs-gw-monitor is a way to call the measurement tool multiple times.</p></li><li><p>Prometheus Exporter exposes prometheus-readable metrics.</p></li></ol><p>To interact with the IPFS network, the codebase also provides a way to start an IPFS node.</p><p>A scenario is a set of instructions a user performs given the state of our IPFS system. For instance, we want to know how fast newly uploaded content can be found by the gateway, or if popular content has a low query time. We'll discuss more of this in the next section.</p><p>Putting this together, the system is the following.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7nUi5dEwj15NtiSduijehE/75a34120b8d85e155bd2c21c83c5e155/image4-20.png" />
            
            </figure><p>During this experience, we have operated both the IPFS Monitor, and a test IPFS node. The IPFS node allows the monitor to provide content to the IPFS network. This allows us to be sure that the content provided is fresh, and actually hosted. Peers have not been fixed, and leverage the IPFS default peer discovery mechanism.</p><p>Cloudflare IPFS Gateway is treated as an opaque system. The monitor performs end-to-end tests by contacting the gateway via its public API, either <a href="https://cloudflare-ipfs.com">https://cloudflare-ipfs.com</a> or via a custom domain registered with the gateway.</p><p>The following scenarios have been run on consumer hardware in March. They are not representative of all IPFS users. All values provided below have been sourced against Cloudflare’s IPFS gateway endpoint.</p>
    <div>
      <h3>First scenarios: Gateway to serve immutable IPFS contents</h3>
      <a href="#first-scenarios-gateway-to-serve-immutable-ipfs-contents">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/qrn6V5qZnqdJzL5V1qzFl/c9bf76a05f738831ba8737918b062e79/image3-26.png" />
            
            </figure><p>IPFS contents are the most primitive contents being served by the IPFS network and IPFS gateways. By their nature, they are immutable and addressable only by the hash of the content. Users can access the IPFS contents by putting the Content IDentifier (CID) in the URL path of the gateway. For example, <a href="https://cloudflare-ipfs.com/ipfs/bafybeig7hluox6xefqdgmwcntvsguxcziw2oeogg2fbvygex2aj6qcfo64">ipfs://bafybeig7hluox6xefqdgmwcntvsguxcziw2oeogg2fbvygex2aj6qcfo64</a>. We measure three common scenarios that users will often encounter.</p><p>The first one is when users fetch popular content which has a high probability of being found in our cache already. During our experiment, we measured a response time for such content is around 116ms.</p><p>The second one is the case where the users create and upload the content to the IPFS network, such as via the integration between <a href="/cloudflare-pages-on-ipfs/">Cloudflare Pages and IPFS</a>. This scenario is a lot slower than the first because the content is not in our cache yet, and it takes some time to discover the content. The content that we upload during this measurement is a random piece of 32-byte content.</p><p>The last measurement is when users try to download content that does not exist. This one is the slowest. Because of the nature of content routing of IPFS, there is no indication that tells us that content doesn't exist. So, setting the timeout is the only way to tell if the content exists or not. Currently, the Cloudflare IPFS gateway has a timeout of around five minutes.</p><table><tr><td><p><b></b></p></td><td><p><b>Scenario</b></p></td><td><p><b>Min (s)</b></p></td><td><p><b>Max (s)</b></p></td><td><p><b>Avg (s)</b></p></td></tr><tr><td><p>1</p></td><td><p>ipfs/newly-created-content</p></td><td><p>0.276</p></td><td><p>343</p></td><td><p>44.4</p></td></tr><tr><td><p>2</p></td><td><p>ipfs/in-cache-content</p></td><td><p>0.0825</p></td><td><p>0.539</p></td><td><p>0.116</p></td></tr><tr><td><p>3</p></td><td><p>ipfs/unavailable-cid</p></td><td><p>90</p></td><td><p>341</p></td><td><p>279</p></td></tr></table>
    <div>
      <h3>Second scenarios: Gateway to serve mutable IPNS named contents</h3>
      <a href="#second-scenarios-gateway-to-serve-mutable-ipns-named-contents">
        
      </a>
    </div>
    
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/8qZ6yQPbI8x5Y3iMrkKbh/9b74a004d5c414ecd0dfa09126179bc6/image1-40.png" />
            
            </figure><p>Since IPFS contents are immutable, when users want to change the content, the only way to do so is to create new content and distribute the new CID to other users. Sometimes distributing the new CID is hard, and is out of scope of IPFS. The InterPlanetary Naming System (IPNS) tries to solve this. IPNS is a naming system that — instead of locating the content using the CID — allows users to locate the content using the IPNS name instead. This name is a hash of a user's public key. Internally, IPNS maintains a section of the IPFS DHT which maps from a name to a CID. Therefore, when the users want to download the contents using names through the gateway, the gateway has to first resolve the name to get the CID, then use the CID to query the IPFS content as usual.</p><p>The example for fetching the IPNS named content is at ipns://k51qzi5uqu5diu2krtwp4jbt9u824cid3a4gbdybhgoekmcz4zhd5ivntan5ey</p><p>We measured many scenarios for IPNS as shown in the table below. Three scenarios are similar to the ones involving IPFS contents. There are two more scenarios added: the first one is measuring the response time when users query the gateway using an existing IPNS name, and the second one is measuring the response time when users query the gateway immediately after new content is published under the name.</p><table><tr><td><p></p></td><td><p><b>Scenarios</b></p></td><td><p><b>Min (s)</b></p></td><td><p><b>Max (s)</b></p></td><td><p><b>Avg (s)</b></p></td></tr><tr><td><p>1</p></td><td><p>ipns/newly-created-name</p></td><td><p>5.50</p></td><td><p>110</p></td><td><p>33.7</p></td></tr><tr><td><p>2</p></td><td><p>ipns/existing-name</p></td><td><p>7.19</p></td><td><p>113</p></td><td><p>28.0</p></td></tr><tr><td><p>3</p></td><td><p>ipns/republished-name</p></td><td><p>5.62</p></td><td><p>80.4</p></td><td><p>43.8</p></td></tr><tr><td><p>4</p></td><td><p>ipns/in-cache-content</p></td><td><p>0.0353</p></td><td><p>0.0886</p></td><td><p>0.0503</p></td></tr><tr><td><p>5</p></td><td><p>ipns/unavailable-name</p></td><td><p>60.0</p></td><td><p>146</p></td><td><p>81.0</p></td></tr></table>
    <div>
      <h3>Third scenarios: Gateway to serve DNSLink websites</h3>
      <a href="#third-scenarios-gateway-to-serve-dnslink-websites">
        
      </a>
    </div>
    <p>Even though users can use IPNS to provide others a stable address to fetch the content, the address can still be hard to remember. This is what DNSLink is for. Users can address their content using DNSLink, which is just a normal <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name/">domain name</a> in the Domain Name System (DNS). As a domain owner, you only have to create a TXT record with the value dnslink=/ipfs/baf…1, and your domain can be fetched from a gateway.</p><p>There are two ways to access the DNSLink websites using the gateway. The first way is to access the website using the domain name as a URL hostname, for example, <a href="https://ipfs.example.com">https://ipfs.example.com</a>. The second way is to put the domain name as a URL path, for example, <a href="https://cloudflare-ipfs.com/ipns/ipfs.example.com">https://cloudflare-ipfs.com/ipns/ipfs.example.com</a>.</p><table><tr><td><p></p></td><td><p><b>Scenarios</b></p></td><td><p><b>Min (s)</b></p></td><td><p><b>Max (s)</b></p></td><td><p><b>Avg (s)</b></p></td></tr><tr><td><p>1</p></td><td><p>dnslink/ipfs-domain-as-url-hostname</p></td><td><p>0.251</p></td><td><p>18.6</p></td><td><p>0.831</p></td></tr><tr><td><p>2</p></td><td><p>dnslink/ipfs-domain-as-url-path</p></td><td><p>0.148</p></td><td><p>1.70</p></td><td><p>0.346</p></td></tr><tr><td><p>3</p></td><td><p>dnslink/ipns-domain-as-url-hostname</p></td><td><p>7.87</p></td><td><p>44.2</p></td><td><p>21.0</p></td></tr><tr><td><p>4</p></td><td><p>dnslink/ipns-domain-as-url-path</p></td><td><p>6.87</p></td><td><p>72.6</p></td><td><p>19.0</p></td></tr></table>
    <div>
      <h2>What does this mean for regular IPFS users?</h2>
      <a href="#what-does-this-mean-for-regular-ipfs-users">
        
      </a>
    </div>
    <p>These measurements highlight that IPFS content is fetched best when cached. This is an order of magnitude faster than fetching new content. This result is expected as content publication on IPFS can take time for nodes to retrieve, as highlighted in <a href="https://youtu.be/yylsaXz00_g?t=823">previous studies</a>. Then, when it comes to naming IPFS resources, leveraging DNSLink appears to be the faster strategy. This is likely due to the poor connection of the IPFS node used in this setup, preventing IPNS name from propagating rapidly. Overall, IPNS names would benefit from using a resolver to speed up resolution without losing the trust they provide.</p><p>As we mentioned in September, IPFS use has seen important growth. So has our tooling. The IPFS Gateway monitor can be found on <a href="https://github.com/cloudflare/ipfs-gateway-monitor">GitHub</a>, and we will keep looking at improving this first set of metrics.</p><p>At the time of writing, using IPFS via a gateway seems to provide lower retrieval times, while allowing for finer grain control over security settings in the browser context. This configuration preserves the content validity properties offered by IPFS, but reduces the number of nodes a user is peering with to one: the gateway. Ideally, we would like users to peer with Cloudflare because we're offering the best service, while still having the possibility to retrieve content from external sources if they want to. We'll be conducting more measurements to better understand how to best leverage Cloudflare presence in 270 cities to better serve the IPFS network.</p> ]]></content:encoded>
            <category><![CDATA[Platform Week]]></category>
            <category><![CDATA[Distributed Web]]></category>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[IPFS]]></category>
            <guid isPermaLink="false">4jdX3TTEDdxnin4XGswBv1</guid>
            <dc:creator>Pop Chunhapanya</dc:creator>
            <dc:creator>Thibault Meunier</dc:creator>
        </item>
        <item>
            <title><![CDATA[Announcing The Cloudflare Distributed Web Gateways Private Beta: Unlocking the Web3 Metaverse and Decentralized Finance for Everyone]]></title>
            <link>https://blog.cloudflare.com/announcing-web3-gateways/</link>
            <pubDate>Fri, 01 Oct 2021 12:59:48 GMT</pubDate>
            <description><![CDATA[ Cloudflare announces the Private Beta of their Web3 gateways for Ethereum and IPFS. Unlocking the Metaverse, Web3, and Decentralized Finance for every developer. ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4fgIKsu1B2OUYfIvoufy4J/2c3e73dd9e7c7082aabaf224daf3c13a/image8-2.png" />
            
            </figure><p>It’s cliché to say that the Internet has undergone massive changes in the last five years. New technologies like distributed ledgers, NFTs, and cross-platform metaverses have become all the rage. Unless you happen to hang out with the Web3 community in Hong Kong, San Francisco, and London, these technologies have a high barrier to entry for the average developer. You have to understand how to run distributed nodes, set up esoteric developer environments, and keep up with the latest chains just to get your app to run. That stops today. Today you can <a href="https://docs.google.com/forms/d/11_oXpvGGVtP0DJenWBzLfxE4cyCjHHbqrbIibLAz2wQ/edit">sign up for the private beta</a> of our Web3 product suite starting with our Ethereum and IPFS gateway.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6CPHhwfETpZPYPZ7YMspBP/ccc8a837b76989d9cdf9c3b31fb1628c/image9.png" />
            
            </figure><p>Before we go any further, a brief introduction to blockchain (<a href="https://ethereum.org/en/what-is-ethereum/">Ethereum</a> in our example) and the <a href="https://ipfs.io/#how">InterPlanetary FileSystem</a> (IPFS). In a Web3 setting, you can think of Ethereum as the compute layer, and IPFS as the storage layer. By leveraging decentralised ledger technology, Ethereum provides verifiable decentralised computation. Publicly available binaries, called "smart contracts", can be instantiated by users to perform operations on an immutable set of records. This set of records is the state of the blockchain. It has to be maintained by every node on the network, so they can verify, and participate in the computation. Performing operations on a lot of data is therefore expensive. A common pattern is to use IPFS as an external storage solution. IPFS is a peer-to-peer network for storing content on a distributed file system. Content is identified by its hash, making it inexpensive to reference from a blockchain context.</p><p>If you want an even deeper understanding of how Web3 works check out our other blog posts on <a href="/what-is-web3/">what is Web3</a> and <a href="/get-started-web3/">creating Web3 Dapps with Cloudflare Workers</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2Or8TSruyUwyvrcwMsEoNp/bb4cde50e8ad68f9cb48f390a455d76c/image1-4.png" />
            
            </figure>
    <div>
      <h3>Web3 and the Metaverse</h3>
      <a href="#web3-and-the-metaverse">
        
      </a>
    </div>
    <p>Over the last four years, while we have been working to mature the technology required to provide access to Web3 services at a global scale, the idea of the Metaverse has come back into vogue. Popularized by novels like “Snowcrash,” and "Ready Player One," the idea is a simple one. Imagine an Internet where you can hop into an app and have access to all of your favorite digital goods available for you to use regardless of where you purchased them. You could sell your work on social media without granting them a worldwide license, and the buyer could use it on their online game. The Metaverse is a place where copyright and ownership can be managed through NFTs (<a href="/get-started-web3/">Non-Fungible Tokens</a>) stored on IPFS, and accessed trustlessly through Ethereum. It is a place where everyday creators can easily monetize their content, and have it be used by everyone, regardless of platform, since content is not being stored in walled gardens but decentralised ecosystems with open standards.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2ZeZo9C6EniEeJ89QF4DjE/e4b8513f15f77389c63e5f8f2937931f/image3.png" />
            
            </figure>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7iwQLeHJRogEM9WvWyu3An/8a40b9d4763bfd5c320fc7a748d7d540/image6.png" />
            
            </figure><p>This shifts the way users and content creators think about the Internet. Questions like: “Do you actually need a Model View Controller system with a server to build an application?” “What is the best way to provide consistent naming of web resources across platforms?” “Do we actually need to keep our data locked behind another company's systems or can the end-user own their data?”. This builds different trust assumptions. Instead of trusting a single company because they are the only one to have your users' data, trust is being built leveraging a source verifiable by all participants. This can be people you physically interact with for <a href="https://support.signal.org/hc/en-us/articles/360007060632-What-is-a-safety-number-and-why-do-I-see-that-it-changed-#safety_number_view">messaging applications</a>, X.509 certificates logged in a <a href="https://certificate.transparency.dev/">public Certificate Transparency</a> Log for websites, or public keys that interact with blockchains for distributed applications.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6r8YeF8xw3ABv5x3bFzlbE/9363c73ddd6882d1866a47d889023af8/image10-1.png" />
            
            </figure><p>It’s an exciting time. Unlike the emergence of the Internet however, there are large established companies that want to control the shape and direction of Web3 and this Metaverse. We believe in a future of a <a href="/what-is-web3/">decentralised and private web</a>. An open, standards-based web independent of any one company or centralizing force. We believe that we can be one of the many technical platforms that supports Web3 and the growing Metaverse ecosystem. It’s why we are so excited to be announcing the private beta of our Ethereum and IPFS gateways. Technologies that are at the forefront of Web3 and its emerging Metaverse.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7hWZ5XkA9Y9v3ZxT7YXbRw/8839a7c61076625531ef2c8c48bad198/image4-1.png" />
            
            </figure><p>Time and time again over the last year we have been asked by our customers to support their exploration of Web3, and oftentimes their core product offering. At Cloudflare, we are committed to helping build a better Internet for everyone, regardless of their preferred tech stack. We want to be the pickaxes and shovels for everyone. We believe that Web3 and the Metaverse is not just an experiment, but an entirely new networking paradigm where many of the next multi-billion dollar businesses are going to be built. We believe that the first complete metaverse could be built entirely on Cloudflare today using systems like Ethereum, IPFS, RTC, <a href="https://www.cloudflare.com/developer-platform/r2/">R2 storage</a>, and Workers. Maybe you will be the one to build it...</p><p>We are excited to be on this journey with our Web3 community members, and can’t wait to show you what else we have been working on.</p>
    <div>
      <h3>Introducing the Cloudflare Web3 Gateways!</h3>
      <a href="#introducing-the-cloudflare-web3-gateways">
        
      </a>
    </div>
    <p>A gateway is a computer that sits between clients (such as your browser or mobile device) and a number of other systems and helps translate traffic from one protocol to another, so the systems powering an application required to handle the request can do so properly. But there are different types of gateways that exist today.</p><p>You have probably heard mention of an <a href="https://www.cloudflare.com/learning/security/api/what-is-an-api-gateway/">API gateway</a>, which is responsible for accepting API calls inbound to an application and aggregating the appropriate services to fulfill those requests and return a proper response to the end user. You utilize gateways every time you watch Netflix! Their company leverages an API gateway to ensure the hundreds of different devices that access their streaming service can receive a successful and proper response, allowing end users to watch their shows. Gateways are a critical component of how Web3 is being enabled for every end user on the planet.</p><p>Remember that Web3 or the distributed web is a set of technologies that enables hosting of content and web applications in a serverless manner by leveraging purely distributed systems and consensus protocols. Gateways let you use these applications in your browser without having to install plugins or run separate pieces of software called nodes. The distributed web community runs into the same problem of needing a stable, reliable, and resilient method to translate HTTP requests into the correct Web3 functions or protocols.</p><p>Today, we are introducing the Cloudflare Ethereum and IPFS Gateways to help Web3 developers do what they do best, develop applications, without having to worry about also running the infrastructure required to support Ethereum (Eth) or IPFS nodes.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4jEKbTRVOn95CzcJoLEE5E/f8f4c167512b17069711ce74e0bedded/image5-1.png" />
            
            </figure>
    <div>
      <h3>What’s the problem with existing Eth or IPFS Web Gateways?</h3>
      <a href="#whats-the-problem-with-existing-eth-or-ipfs-web-gateways">
        
      </a>
    </div>
    <p>Traditional web technologies such as HTTP have had decades to develop standards and best practices that make sites fast, secure, and available. These haven’t been developed on the distributed web side of the Internet, which focuses more on redundancy. We identified an opportunity to bring the optimizations and infrastructure of the web to the distributed web by building a gateway — a service that translates HTTP API calls to IPFS or Ethereum functions, while adding Cloudflare added-value services on the HTTP side. The ability for a customer to operate their entire network control layer with a single pane of glass using Cloudflare is huge. You can manage the DNS, Firewall, Load Balancing, Rate Limiting, Tunnels, and more for your marketing site, your distributed application (Dapp), and corporate security, all from one location.</p><p>For many of our customers, the existing solutions for Web3 gateway do not have a large enough network to handle the growing amount of requests within the Ethereum and IPFS networks, but more importantly do not have the degree of resilience and redundancy that businesses expect and require operating at scale. The idea of the distributed web is to do just that… stay distributed, so no single actor can control the overall market. Speed, security, and reliability are at the heart of what we do. We are excited to be part of the growing Web3 infrastructure community so that we can help Dapp developers have more choice, scalability, and reliability from their infrastructure providers.</p><p>A clear example of this is when existing gateways have an outage. With too few gateways to handle the traffic, the result of this outage is pre-process transactions falling behind the blockchain they are accessing, thus leading to increased latency for the transaction, potentially leading to it failing. Worse, when decentralised application (Dapp) developers use IPFS to power their front end, it can lead to their entire application falling over. Overall, this leads to massive amounts of frustration from businesses and end users alike — not being able to collect revenue for products or services, thus putting a portion of the business at a halt and breaking trust with end users who depend on the reliability of these services to manage their Web3 assets.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1JgXilj9lnei2QHAcsRFtx/21d90693861fa2b02a7e1bad7e86e5db/image7.png" />
            
            </figure>
    <div>
      <h3>How is Cloudflare solving this problem?</h3>
      <a href="#how-is-cloudflare-solving-this-problem">
        
      </a>
    </div>
    <p>We found that there was a unique opportunity in a segment of the Web3 community that closely mirrored Cloudflare’s traditional customer base: the distributed web. This segment has some major usability issues that Cloudflare could help solve around reliability, performance, and caching. Cloudflare has an advantage that no other company in this space — and very few in the industry — have: a global network. For instance, content fetched through our <a href="https://cloudflare-ipfs.com/">IPFS Gateway</a> can be cached near users, allowing download latency in the milliseconds. Compare this with up to seconds per asset using native IPFS. This speed enables services based on IPFS to go hybrid. Content can be served over the source decentralised protocols while browsers and tools are maturing to access them, and served to regular web users through a gateway like Cloudflare. We do provide a convenient, fast and secure option to browse this distributed content.</p><p>On Ethereum, users can be categorised in two ways. Application developers that operate smart contracts, and users that want to interact with the said contracts. While smart contracts operate autonomously based on their code, users have to fetch data and send transactions. As part of the chain, smart contracts do not have to worry about the network or a user interface to be online. This is why decentralised exchanges have had the ability to operate continuously across multiple interfaces without disruptions. Users on the other hand do need to know the state of the chain, and be able to interact with it. Application developers therefore have to require the users to run an Ethereum node, or can point them to use remote nodes through a <a href="https://ethereum.org/en/developers/docs/apis/json-rpc/">standardised JSON RPC API</a>. This is where Cloudflare comes in. Cloudflare Ethereum gateway relies on Ethereum nodes and provides a secure and fast interface to the Ethereum network. It allows application developers to leverage Ethereum in front-facing applications. The gateway can interact with any content part of the Ethereum chain. This includes NFT contracts, DeFi exchanges, or name services like ENS.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/4VtJXJP7vwn9gAM0e25eod/ee26e0bc56ff0d7b98113557245ebf16/image2.png" />
            
            </figure>
    <div>
      <h3>How are the gateways doing so far?</h3>
      <a href="#how-are-the-gateways-doing-so-far">
        
      </a>
    </div>
    <p>Since our alpha release to very early customers as research experiments, we’ve seen a staggering number of customers wanting to leverage the new gateway technology and benefit from the availability, resiliency, and caching benefits of Cloudflare’s network.</p><p>Our current alpha includes companies that have raised billions of dollars in venture capital, companies that power the decentralised finance ecosystem on Ethereum, and emerging metaverses that make use of NFT technology.</p><p>In fact, we have over 2,000 customers leveraging our IPFS gateway lending to over 275TB of traffic per month. For Ethereum, we have over 200 customers transacting over 13TB, including 1.6 billion requests per month. We’ve seen extremely stable results from these customers and fully expect to see these metrics continue to ramp up as we add more customers to use this new product.</p><p>We are now very happy to announce the opening of our private beta for both the Ethereum and IPFS gateways. <a href="https://docs.google.com/forms/d/11_oXpvGGVtP0DJenWBzLfxE4cyCjHHbqrbIibLAz2wQ/edit">Sign up to participate in the private beta</a> and our team will reach out shortly to ensure you are set up!</p><p>P.S. We are hiring for Web3! If you want to come work on it with us, check out our <a href="https://boards.greenhouse.io/cloudflare/jobs/3352190?gh_jid=3352190">careers page</a>.</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Web3]]></category>
            <category><![CDATA[Distributed Web]]></category>
            <category><![CDATA[IPFS]]></category>
            <category><![CDATA[Ethereum]]></category>
            <category><![CDATA[Research]]></category>
            <guid isPermaLink="false">3JkUkPfA7HavDc4YUSBMaw</guid>
            <dc:creator>Wesley Evans</dc:creator>
            <dc:creator>Brian Batraski</dc:creator>
        </item>
        <item>
            <title><![CDATA[Web3 — A vision for a decentralized web]]></title>
            <link>https://blog.cloudflare.com/what-is-web3/</link>
            <pubDate>Fri, 01 Oct 2021 12:59:31 GMT</pubDate>
            <description><![CDATA[ In this blog we start to explain Web3 in the context of the web's evolution, and how Cloudflare might help to support it. ]]></description>
            <content:encoded><![CDATA[ 
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3k6VIEkUCQIjvEUmgilCba/039389ac2ae80961acc14f6b359533f9/image1-1.png" />
            
            </figure><p>By reading this, you are a participant of the web. It's amazing that we can write this blog and have it appear to you without operating a server or writing a line of code. In general, the web of today empowers us to participate more than we could at any point in the past.</p><p>Last year, <a href="/internet-privacy/">we mentioned</a> the next phase of the Internet would be always on, always secure, always private. Today, we dig into a similar trend for the web, referred to as Web3. In this blog we'll start to explain Web3 in the context of the web's evolution, and how Cloudflare might help to support it.</p>
    <div>
      <h3>Going from Web 1.0 to Web 2.0</h3>
      <a href="#going-from-web-1-0-to-web-2-0">
        
      </a>
    </div>
    <p>When <a href="https://webfoundation.org/about/vision/history-of-the-web/">Sir Tim Berners-Lee</a> wrote his seminal 1989 document “<a href="https://www.w3.org/History/1989/proposal.html">Information Management: A Proposal</a>”, he outlined a vision of the “web” as a network of information systems interconnected via hypertext links. It is often assimilated to the Internet, which is the computer network it operates on. Key practical requirements for this web included being able to access the network in a decentralized manner through remote machines and allowing systems to be linked together without requiring any central control or coordination.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1XimrXMTgt5iEuXbsJreOz/8d6427517dada20a3a3cd8d462acb9b9/image4-3.png" />
            
            </figure><p>The original proposal for what we know as the web, fitting in one diagram - Source: <a href="https://www.w3.org/History/1989/proposal.html">w3</a></p><p>This vision materialized into an initial version of the web that was composed of interconnected <b>static</b> resources delivered via a distributed network of servers and accessed primarily on a read-only basis from the client side — “Web 1.0”. Usage of the web soared with the number of websites growing well over 1,000% in the ~2 years following the introduction of the Mosaic graphical browser in 1993, based on data from the <a href="https://www.mit.edu/people/mkgray/growth/">World Wide Web Wanderer</a>.</p><p>The early 2000s marked an inflection point in the growth of the web and a key period of its development, as technology companies that survived the dot-com crash evolved to deliver value to customers in new ways amidst heightened skepticism around the web:</p><ul><li><p>Desktop browsers like Netscape became commoditized and paved the way for native web services for discovering content like search engines.</p></li><li><p>Network effects that were initially driven by hyperlinks in web directories like Yahoo! were hyperscaled by platforms that enabled user engagement and harnessed collective intelligence like review sites.</p></li><li><p>The massive volume of data generated by Internet activity and the growing realization of its competitive value forced companies to become experts at database management.</p></li></ul><p>O’Reilly Media coined the concept of <a href="https://www.oreilly.com/pub/a/web2/archive/what-is-web-20.html?page=1">Web 2.0</a> in an attempt to capture such shifts in design principles, which were transformative to the usability and <b>interactiveness</b> of the web and continue to be core building blocks for Internet companies nearly two decades later.</p><p>However, in the midst of the web 2.0 transformation, the web fell out of touch with one of its initial core tenets — decentralization.</p><blockquote><p><i>Decentralization: No permission is needed from a central authority to post anything on the web, there is no central controlling node, and so no single point of failure … and no “kill switch”!— History of the web by</i> <a href="https://webfoundation.org/about/vision/history-of-the-web/"><i>Web Foundation</i></a></p></blockquote>
    <div>
      <h3>A new paradigm for the Internet</h3>
      <a href="#a-new-paradigm-for-the-internet">
        
      </a>
    </div>
    <p>This is where Web3 comes in. The last two decades have proven that building a scalable system that decentralizes content is a challenge. While the technology to build such systems exists, no content platform achieves decentralization at scale.</p><p>There is one notable exception: Bitcoin. Bitcoin was conceptualized in a 2008 <a href="https://bitcoin.org/bitcoin.pdf">whitepaper</a> by <a href="https://en.wikipedia.org/wiki/Satoshi_Nakamoto">Satoshi Nakamoto</a> as a type of distributed ledger known as a blockchain designed so that a peer-to-peer (P2P) network could transact in a public, consistent, and tamper-proof manner.</p><p>That’s a lot said in one sentence. Let’s break it down by term:</p><ul><li><p>A peer-to-peer network is a network architecture. It consists of a set of computers, called nodes, that store and relay information. Each node is equally privileged, preventing one node from becoming a single point of failure. In the Bitcoin case, nodes can send, receive, and process Bitcoin transactions.</p></li><li><p>A ledger is a collection of accounts in which transactions are recorded. For Bitcoin, the ledger records Bitcoin transactions.</p></li><li><p>A distributed ledger is a ledger that is shared and synchronized among multiple computers. This happens through a consensus, so each computer holds a similar replica of the ledger. With Bitcoin, the consensus process is performed over a P2P network, the Bitcoin network.</p></li><li><p>A blockchain is a type of distributed ledger that stores data in “blocks” that are cryptographically linked together into an immutable chain that preserves their chronological order. Bitcoin leverages blockchain technology to establish a shared, single source of truth of transactions and the sequence in which they occurred, thereby mitigating the <a href="https://en.wikipedia.org/wiki/Double-spending">double-spending problem</a>.</p></li></ul><p>Bitcoin — which currently has <a href="https://luke.dashjr.org/programs/bitcoin/files/charts/software.html">over 40,000 nodes</a> in its network and processes <a href="https://coinmarketcap.com/currencies/bitcoin/">over $30B in transactions</a> each day — demonstrates that an application can be run in a distributed manner at scale, without compromising security. It inspired the development of other blockchain projects such as Ethereum which, in addition to transactions, allows participants to deploy code that can verifiably run on each of its nodes.</p><p>Today, these programmable blockchains are seen as <a href="https://www.coindesk.com/web3-transform-the-web">ideal open and trustless platforms</a> to serve as the infrastructure of a distributed Internet. They are home to a rich and growing ecosystem of <a href="https://dappradar.com/rankings">nearly 7,000 decentralized applications</a> (“Dapps”) that do not rely on any single entity to be available. This provides them with greater flexibility on how to best serve their users in all jurisdictions.</p>
    <div>
      <h3>The web is for the end user</h3>
      <a href="#the-web-is-for-the-end-user">
        
      </a>
    </div>
    <p>Distributed systems are inherently different from centralized systems. They should not be thought about in the same way. Distributed systems enable the data and its processing to not be held by a single party. This is useful for companies to provide resilience, but it’s also useful for P2P-based networks where data can stay in the hands of the participants.</p><p>For instance, if you were to host a blog the old-fashioned way, you would put up a server, expose it to the Internet (via <a href="/dyi-web-server-raspberry-pi-cloudflare/">Cloudflare :D</a>), <i>et voilà</i>. Nowadays, your blog would be hosted on a platform like WordPress, Ghost, Notion, or even Twitter. If these companies were to have an outage, this affects a lot more people. In a distributed fashion, via IPFS for instance, your blog content can be <a href="https://www.cloudflare.com/developer-platform/solutions/hosting/">hosted</a> and served from multiple locations operated by different entities.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3Eu8UmmUj6bkyAw4o4U8vM/bc7a2d1e14e089c96b8e2ba23d744fdd/image5-2.png" />
            
            </figure><p>Web 1.0</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2NW1nw9JDPAFBcqoJ6fQpy/b17c7a09c6c022492725a5ce4ad03725/image2-2.png" />
            
            </figure><p>Web 2.0</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1STcnM6O3g2IGbIoIxMMyC/5fa32e4b4a59d146edf9071a662aa512/image3-1.png" />
            
            </figure><p>Web3</p><p>Each participant in the network can choose what they host/provide and can be home to different content. Similar to your home network, you are in control of what you share, and you don’t share everything.</p><p>This is a core tenet of decentralized identity. The same cryptographic principles underpinning cryptocurrencies like Bitcoin and Ethereum are being leveraged by applications to provide secure, cross-platform identity services. This is fundamentally different from other authentication systems such as OAuth 2.0, where a trusted party has to be reached to assess one's identity. This materializes in the form of “Login with ” buttons. These cloud providers are the only ones with enough data, resources, and technical expertise.</p><p>In a decentralised web, each participant holds a secret key. They can then use it to identify each other. You can learn about this cryptographic system in a <a href="/introducing-cryptographic-attestation-of-personhood/#the-technical-explanation">previous blog</a>. In a Web3 setting where web participants own their data, they can selectively share these data with applications they interact with. Participants can also leverage this system to prove interactions they had with one another. For example, if a college issues you a <a href="https://www.w3.org/TR/did-core/">Decentralized Identifier</a> (DID), you can later prove you have been registered at this college without reaching out to the college again. Decentralized Identities can also serve as a placeholder for a public profile, where participants agree to use a blockchain as a source of trust. This is what projects such as ENS or Unlock aim to provide: a way to verify your identity online based on your control over a public key.</p><p>This trend of proving ownership via a shared source of trust is key to the NFT craze. We have <a href="/cloudflare-stream-now-supports-nfts/">discussed NFTs</a> before on this blog. Blockchain-based NFTs are a medium of conveying ownership. Blockchain enables this information to be publicly verified and updated. If the blockchain states a public key I control is the owner of an NFT, I can refer to it on other platforms to prove ownership of it. For instance, if my profile picture on social media is a cat, I can prove the said cat is associated with my public key. What this means depends on what I want to prove, especially with the proliferation of NFT contracts. If you want to understand how an NFT contract works, you can <a href="https://blog.mycrypto.com/so-you-wanna-build-your-own-pfp-nft-project/">build your own</a>.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/3xVWfY7VlFkOM2cuYhef8b/2c0467e47fb32ff4c582e44f1f681a41/image6-1.png" />
            
            </figure>
    <div>
      <h3>How does Cloudflare fit in Web3?</h3>
      <a href="#how-does-cloudflare-fit-in-web3">
        
      </a>
    </div>
    <p>Decentralization and privacy are challenges we are tackling at Cloudflare as part of our mission to help build a better Internet.</p><p>In a <a href="/next-generation-privacy-protocols/">previous post</a>, Nick Sullivan described Cloudflare’s contributions to enabling privacy on the web. We launched initiatives to fix information leaks in HTTPS through <a href="/encrypted-client-hello">Encrypted Client Hello (ECH)</a>, make DNS even more private by supporting <a href="/oblivious-dns">Oblivious DNS-over-HTTPS (ODoH)</a>, and develop <a href="/opaque-oblivious-passwords">OPAQUE</a> which makes password breaches less likely to occur. We have also released our <a href="/introducing-the-cloudflare-data-localization-suite/">data localization suite</a> to help businesses navigate the ever evolving <a href="/data-privacy-day-2021-looking-ahead-at-the-always-on-always-secure-always-private-internet/">regulatory landscape</a> by giving them control over where their data is stored without compromising performance and security. We’ve even built a <a href="/introducing-zero-knowledge-proofs-for-private-web-attestation-with-cross-multi-vendor-hardware/">privacy-preserving attestation</a> that is based on the same zero-knowledge proof techniques that are core to distributed systems such as <a href="https://electriccoin.co/blog/explaining-halo-2/">ZCash</a> and <a href="https://filecoin.io/blog/posts/filecoin-zk-snarks-zero-knowledge-but-a-lot-of-zero-knowledge/">Filecoin</a>.</p><p>It’s exciting to think that there are already ways we can change the web to improve the experience for its users. However, there are some limitations to build on top of the exciting infrastructure. This is why projects such as Ethereum and IPFS build on their own architecture. They are still relying on the Internet but do not operate with the web as we know it. To ease the transition, Cloudflare operates <a href="https://www.cloudflare.com/distributed-web-gateway/">distributed web gateways</a>. These gateways provide an HTTP interface to Web3 protocols: Ethereum and IPFS. Since HTTP is core to the web we know today, distributed content can be accessed securely and easily without requiring the user to operate experimental software.</p>
    <div>
      <h3>Where do we go next?</h3>
      <a href="#where-do-we-go-next">
        
      </a>
    </div>
    <p>The journey to a different web is long but exciting. The infrastructure built over the last two decades is truly stunning. The Internet and the web are now part of 4.6 billion people's lives. At the same time, the top 35 websites had <a href="https://www.ncta.com/whats-new/the-expanding-consolidation-of-the-consumer-internet-3">more visits</a> than all others (circa 2014). Users have less control over their data and are even more reliant on a few players.</p><p>The early Web was static. Then Web 2.0 came to provide interactiveness and service we use daily at the cost of centralisation. Web3 is a trend that tries to challenge this. With distributed networks built on open protocols, users of the web are empowered to participate.</p><p>At Cloudflare, we are embracing this distributed future. Applying the knowledge and experience we have gained from running one of the largest edge networks, we are making it easier for users and businesses to benefit from Web3. This includes operating a <a href="/announcing-web3-gateways">distributed web product suite</a>, contributing to <a href="/cloudflares-approach-to-research/">open standards</a>, and <a href="/internet-privacy/">moving privacy forward</a>.</p><p>If you would like to help build a better web with us, we are <a href="https://www.cloudflare.com/careers/jobs/">hiring</a>.</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[Distributed Web]]></category>
            <category><![CDATA[Privacy]]></category>
            <guid isPermaLink="false">5YXVZmOkyscnB5e0JOZAY5</guid>
            <dc:creator>Thibault Meunier</dc:creator>
            <dc:creator>In-Young Jo</dc:creator>
        </item>
        <item>
            <title><![CDATA[How Cloudflare provides tools to help keep IPFS users safe]]></title>
            <link>https://blog.cloudflare.com/cloudflare-ipfs-safe-mode/</link>
            <pubDate>Wed, 29 Sep 2021 23:02:00 GMT</pubDate>
            <description><![CDATA[ The Cloudflare IPFS module protects users from threats like phishing and ransomware. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>Cloudflare's journey with IPFS started in 2018 when we announced a <a href="/distributed-web-gateway/">public gateway for the distributed web</a>. Since then, the number of infrastructure providers for the InterPlanetary FileSystem (IPFS) has grown and matured substantially. This is a huge benefit for users and application developers as they have the ability to choose their infrastructure providers.</p><p>Today, we’re excited to announce new secure filtering capabilities in IPFS. The Cloudflare IPFS module is a tool to protect users from threats like phishing and ransomware. We believe that other participants in the network should have the same ability. We are releasing that software as open source, for the benefit of the entire community.</p><p>Its code is available on <a href="https://github.com/cloudflare/go-ipfs/tree/v0.9.1-safemode">github.com/cloudflare/go-ipfs</a>. To understand how we built it and how to use it, read on.</p>
    <div>
      <h3>A brief introduction on IPFS content retrieval</h3>
      <a href="#a-brief-introduction-on-ipfs-content-retrieval">
        
      </a>
    </div>
    <p>Before we get to understand how IPFS filtering works, we need to dive a little deeper into the operation of an IPFS node.</p><p>The InterPlanetary FileSystem (IPFS) is a peer-to-peer network for storing content on a distributed file system. It is composed of a set of computers called nodes that store and relay content using a common addressing system.</p><p>Nodes communicate with each other over the Internet using a Peer-to-Peer (P2P) architecture, preventing one node from becoming a single point of failure. This is even more true given that anyone can operate a node with limited resources. This can be light hardware such as a Raspberry Pi, a server at a cloud provider, or even your web browser.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7D6yuQR7r8BmcBPQS6YSjk/02c4a5bb7a86be4cebdc52bd54ae532f/image2-4.png" />
            
            </figure><p>This creates a challenge since not all nodes may support the same protocols, and networks may block some types of connections. For instance, your web browser does not expose a TCP API and your home router likely doesn’t allow inbound connections. This is where <a href="https://libp2p.io/">libp2p</a> comes to help.</p><p>libp2p is a modular system of <i>protocols</i>, <i>specifications</i>, and <i>libraries</i> that enable the development of peer-to-peer network applications - <a href="https://docs.libp2p.io/introduction/what-is-libp2p/">libp2p documentation</a></p><p>That’s exactly what four IPFS nodes need to connect to the IPFS network. From a node point of view, the architecture is the following:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2KWwoCkKQL46RFHelilMtE/a5718f571f330746fc421f49a20cc76f/image6-2.png" />
            
            </figure><p>Any node that we maintain a connection with is a peer. A peer that does not have ? content can ask their peers, including you, they WANT?. If you do have it, you will provide the ? to them. If you don’t have it, you can give them information about the network to help them find someone who might have it. As each node chooses the resources they store, it means some might be stored on a limited number of nodes.</p><p>For instance, everyone likes ?, so many nodes will dedicate resources to store it. However, ? is less popular. Therefore, only a few nodes will provide it.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6lZKi9WAAYORStwkYGTnD1/88b6e06f42bf6d5ac7585ddd3d337874/image3-3.png" />
            
            </figure><p>This assumption does not hold for public gateways like Cloudflare. A gateway is an HTTP interface to an IPFS node. On our gateway, we allow a user of the Internet to retrieve arbitrary content from IPFS. If a user asks for ?, we provide ?. If they ask for ?, we’ll find ? for them.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/7Aj6yGIAk8iAzBoMZAuayV/025e8fe16774f5fe81abffa46c519ed4/image1-6.png" />
            
            </figure><p>Cloudflare’s IPFS gateway is simply a cache in front of IPFS. Cloudflare does not have the ability to modify or remove content from the IPFS network. However, IPFS is a decentralized and open network, so there is the possibility of users sharing threats like phishing or malware. This is content we do not want to provide to the P2P network or to our HTTP users.</p><p>In the next section, we describe how an IPFS node can protect its users from such threats.</p><p><i>If you would like to learn more about the inner workings of libp2p, you can go to</i> <a href="https://proto.school/introduction-to-libp2p"><i>ProtoSchool</i></a> <i>which has a great tutorial about it.</i></p>
    <div>
      <h3>How IPFS filtering works</h3>
      <a href="#how-ipfs-filtering-works">
        
      </a>
    </div>
    <p>As we described earlier, an IPFS node provides content in two ways: to its peers through the IPFS P2P network and to its users via an HTTP gateway.</p><p>Filtering content of the HTTP interface is no different from the current protection Cloudflare already has in place. If ? is considered malicious and is available at cloudflare-ipfs.com/ipfs/?, we can filter these requests, so the end user is kept safe.</p><p>The P2P layer is different. We cannot filter URLs because that’s not how the content is requested. IPFS is content-addressed. This means that instead of asking for a specific location such as cloudflare-ipfs.com/ipfs/?, peers request the content directly using its Content IDentifiers (CID), ?.</p><p>More precisely, ? is an abstraction of the content address. A CID looks like QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy (QmXnnyufdzAWL5CqZ2RnSNgPbvCc1ALT73s6epPrRnZ1Xy happens to be the hash of a .txt file containing the string "I’m trying out IPFS''). CID is a convenient way to refer to content in a cryptographically verifiable manner.</p><p>This is great, because it means that when peers ask for malicious ? content, we can prevent our node from serving it. This includes both the P2P layer and the HTTP gateway.</p><p>In addition, the working of IPFS makes it, so content can easily be reused. On directories for instance, the address is a CID based on the CID of its files. This way, a file can be shared across multiple directories, and still be referred to by the same CID. It allows IPFS nodes to efficiently store content without duplicating it. This can be used to share <a href="https://blog.ipfs.io/2020-02-14-improved-bitswap-for-container-distribution/">docker container layers</a> for example.</p><p>In the filtering use case, it means that if ? content is included in other IPFS content, our node can also prevent content linking to malicious ? content from being served. This results in ?, a mix of valid and malicious content.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/CDrcC6XQcEbIs3DcdkA49/c12890df760859ad3f2ea2129bfc090a/image5-3.png" />
            
            </figure><p>This cryptographic method of linking content together is known as MerkleDAG. You can learn more about it on <a href="https://proto.school/merkle-dags">ProtoSchool</a>, and Consensys did an article explaining the <a href="https://media.consensys.net/ever-wonder-how-merkle-trees-work-c2f8b7100ed3">basic cryptographic construction with bananas</a> ?.</p>
    <div>
      <h3>How to use IPFS secure filtering</h3>
      <a href="#how-to-use-ipfs-secure-filtering">
        
      </a>
    </div>
    <p>By now, you should have an understanding of how an IPFS node retrieves and provides content, as well as how we can protect peers and users from shared nodes accessing threats. Using this knowledge, Cloudflare went on to implement IPFS Safemode, a node protection layer on top of <a href="https://github.com/ipfs/go-ipfs">go-ipfs</a>. It is up to every node operator to build their own list of threats to be blocked based on their policy.</p><p>To use it, we are going to follow the instructions available on <a href="https://github.com/cloudflare/go-ipfs/tree/v0.9.1-safemode#build-from-source">cloudflare/go-ipfs repository</a>.</p><p>First, you need to clone the git repository</p>
            <pre><code>git clone https://github.com/cloudflare/go-ipfs.git
cd go-ipfs/</code></pre>
            <p>Then, you have to check out the commit where IPFS safemode is implemented. This version is based on v0.9.1 of go-ipfs.</p>
            <pre><code>git checkout v0.9.1-safemode</code></pre>
            <p>Now that you have the source code on your machine, we need to <a href="https://github.com/cloudflare/go-ipfs/tree/v0.9.1-safemode#build-from-source">build the IPFS client from source</a>.</p>
            <pre><code>make build</code></pre>
            <p><i>Et voilà</i>. You are ready to use your IPFS node, with safemode capabilities.</p>
            <pre><code># alias ipfs command to make it easier to use
alias ipfs=’./cmd/ipfs/ipfs’
# run an ipfs daemon
ipfs daemon &amp;
# understand how to use IPFS safemode
ipfs safemode --help
USAGE
ipfs safemode - Interact with IPFS Safemode to prevent certain CIDs from being provided.
...</code></pre>
            
    <div>
      <h3>Going further</h3>
      <a href="#going-further">
        
      </a>
    </div>
    <p>IPFS nodes are running in a diverse set of environments and operated by parties at various scales. The same software has to accommodate configuration in which it is accessed by a single-user, and others where it is shared by thousands of participants.</p><p>At Cloudflare, we believe that decentralization is going to be the next major step for content networks, but there is still work to be done to get these technologies in the hands of everyone. Content filtering is part of this story. If the community aims at embedding a P2P node in every computer, there needs to be ways to prevent nodes from serving harmful content. Users need to be able to give consent on the content they are willing to serve, and the one they aren’t.</p><p>By providing an IPFS safemode tool, we hope to make this protection more widely available.</p> ]]></content:encoded>
            <category><![CDATA[Birthday Week]]></category>
            <category><![CDATA[IPFS]]></category>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[Distributed Web]]></category>
            <guid isPermaLink="false">2Rfcw9nEZ4DUBHIp1OOLXm</guid>
            <dc:creator>Thibault Meunier</dc:creator>
        </item>
        <item>
            <title><![CDATA[A Name Resolver for the Distributed Web]]></title>
            <link>https://blog.cloudflare.com/cloudflare-distributed-web-resolver/</link>
            <pubDate>Wed, 13 Jan 2021 12:00:00 GMT</pubDate>
            <description><![CDATA[ We are proud to announce a new resolver for the Distributed Web, where IPFS content indexed by the Ethereum Name Service (ENS) can be accessed. ]]></description>
            <content:encoded><![CDATA[ <p></p><p>The Domain Name System (DNS) matches names to resources. Instead of typing 104.18.26.46 to access the Cloudflare Blog, you type blog.cloudflare.com and, using DNS, the <a href="https://www.cloudflare.com/learning/dns/glossary/what-is-a-domain-name/">domain name</a> resolves to 104.18.26.46, the Cloudflare Blog IP address.</p><p>Similarly, distributed systems such as Ethereum and IPFS rely on a naming system to be usable. DNS could be used, but its resolvers’ attributes run contrary to properties valued in distributed Web (dWeb) systems. Namely, dWeb resolvers ideally provide (i) locally verifiable data, (ii) built-in history, and (iii) have no single trust anchor.</p><p>At Cloudflare Research, we have been exploring alternative ways to resolve queries to responses that align with these attributes. We are proud to announce a new resolver for the Distributed Web, where IPFS content indexed by the <a href="http://ens.domains/">Ethereum Name Service</a> (ENS) can be accessed.</p><p>To discover how it has been built, and how you can use it today, read on.</p>
    <div>
      <h2>Welcome to the Distributed Web</h2>
      <a href="#welcome-to-the-distributed-web">
        
      </a>
    </div>
    
    <div>
      <h3>IPFS and its addressing system</h3>
      <a href="#ipfs-and-its-addressing-system">
        
      </a>
    </div>
    <p>The InterPlanetary FileSystem (IPFS) is a peer-to-peer network for storing content on a distributed file system. It is composed of a set of computers called nodes that store and relay content using a common addressing system.</p><p>This addressing system relies on the use of <a href="https://github.com/multiformats/cid">Content IDentifiers</a> (CID). CIDs are self-describing identifiers, because the identifier is derived from the content itself. For example, QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco is the CID version 0 (CIDv0) of the <a href="https://en.wikipedia-on-ipfs.org">wikipedia-on ipfs homepage</a>.</p><p>To understand why a CID is defined as self-describing, we can look at its binary representation. For QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco, the CID looks like the following:</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/2A7q58l0WReM66ndaxQmms/fc93187cd6f358d2291944cd57cbc419/image2-1.png" />
            
            </figure><p>The first is the algorithm used to generate the CID (sha2-256 in this case); then comes the length of the encoded content (32 for a sha2-256 hash), and finally the content itself. When referring to the <a href="https://github.com/multiformats/multicodec/blob/master/table.csv">multicodec table</a>, it is possible to understand how the content is encoded.</p><table><tr><td><p><b>Name</b></p></td><td><p><b>Code (in hexadecimal)</b></p></td></tr><tr><td><p>identity</p></td><td><p>0x00</p></td></tr><tr><td><p>sha1</p></td><td><p>0x11</p></td></tr><tr><td><p>sha2-256</p></td><td><p>0x12 = 00010010</p></td></tr><tr><td><p>keccak-256</p></td><td><p>0x1b</p></td></tr></table><p>This encoding mechanism is useful, because it creates a unique and upgradable content-addressing system across multiple protocols.</p><p>If you want to learn more, have a look at <a href="https://proto.school/#/anatomy-of-a-cid">ProtoSchool’s tutorial</a>.</p>
    <div>
      <h3>Ethereum and decentralised applications</h3>
      <a href="#ethereum-and-decentralised-applications">
        
      </a>
    </div>
    <p>Ethereum is an account-based blockchain with smart contract capabilities. Being account-based, each account is associated with addresses and these can be modified by operations grouped in blocks and sealed by Ethereum’s consensus algorithm, Proof-of-Work.</p><p>There are two categories of accounts: user accounts and contract accounts. User accounts are controlled by a private key, which is used to sign transactions from the account. Contract accounts hold bytecode, which is executed by the network when a transaction is sent to their account. A transaction can include both funds and data, allowing for rich interaction between accounts.</p><p>When a transaction is created, it gets verified by each node on the network. For a transaction between two user accounts, the verification consists of checking the origin account signature. When the transaction is between a user and a smart contract, every node runs the smart contract bytecode on the Ethereum Virtual Machine (EVM). Therefore, all nodes perform the same suite of operations and end up in the same state. If one actor is malicious, nodes will not add its contribution. Since nodes have diverse ownership, they have an incentive to not cheat.</p>
    <div>
      <h2>How to access IPFS content</h2>
      <a href="#how-to-access-ipfs-content">
        
      </a>
    </div>
    <p>As you may have noticed, while a CID describes a piece of content, it doesn't describe where to find it. In fact, the CID describes the content, but not its location on the network. The location of the file would be retrieved by a query made to an IPFS node.</p><p>An IPFS URL (Unified Resource Locator) looks like this: <code>ipfs://QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco</code>. Accessing this URL means retrieving <code>QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco</code> using the IPFS protocol, denoted by ipfs://. However, typing such a URL is quite error-prone. Also, these URLs are not very human-friendly, because there is no good way to remember such long strings. To get around this issue, you can use DNSLink. DNSLink is a way of specifying IPFS CIDs within a DNS TXT record. For instance, <a href="http://wikipedia-on-ipfs.org">wikipedia on ipfs</a> has the following TXT record</p><p><code>$ dig +short TXT _dnslink.en.wikipedia-on-ipfs.org</code></p><p><code>_dnslink=/ipfs/QmXoypizjW3WknFiJnKLwHCnL72vedxjQkDDP1mXWo6uco</code></p><p>In addition, it's A record points to an IPFS gateway. This means that, when you access en.wikipedia-on-ipfs.org, your request is directed to an IPFS HTTP Gateway, which then looks out for the CID using your domain TXT record, and returns the content associated to this CID using the IPFS network.</p><p>This is trading ease-of-access against security. The web browser of the user doesn't verify the integrity of the content served. This could be because the browser does not implement IPFS or because it has no way of validating domain signature — <a href="https://www.cloudflare.com/dns/dnssec/how-dnssec-works/">DNSSEC</a>. We wrote about this issue in our previous blog post on <a href="/e2e-integrity/">End-to-End Integrity</a>.</p>
    <div>
      <h2>Human-readable identifiers</h2>
      <a href="#human-readable-identifiers">
        
      </a>
    </div>
    <p>DNS simplifies referring to IP addresses, in the same way that postal addresses are a way of referring to geolocation data, and contacts in your mobile phone abstract phone numbers. All these systems provide a human-readable format and reduce the error rate of an operation.</p><p>To verify these data, the trusted anchors, or “sources of truth”, are:</p><ul><li><p><a href="https://www.cloudflare.com/en-gb/dns/dnssec/root-signing-ceremony/">Root DNS Keys</a> for DNS.</p></li><li><p>The government registry for postal addresses. In the UK, addresses <a href="https://www.nidirect.gov.uk/articles/how-streets-are-named-and-numbered">are handled</a> by cities, boroughs and local councils.</p></li><li><p>When it comes to your contacts, you are the trust anchor.</p></li></ul>
    <div>
      <h2>Ethereum Name Service, an index for the Distributed Web</h2>
      <a href="#ethereum-name-service-an-index-for-the-distributed-web">
        
      </a>
    </div>
    <p>An account is identified by its address. An address starts with "0x" and is followed by 20 bytes (<a href="https://ethereum.github.io/yellowpaper/paper.pdf">ref 4.1 Ethereum yellow paper</a>), for example: 0xf10326c1c6884b094e03d616cc8c7b920e3f73e0. This is not very readable, and can be pretty scary when transactions are not reversible and one can easily mistype a single character.</p><p>A first mitigation strategy was to introduce a new notation to capitalise some letters based on the hash of the address 0xF10326C1c6884b094E03d616Cc8c7b920E3F73E0. This can help detect mistype, but it is still not readable. If I have to send a transaction to a friend, I have no way of confirming she hasn't mistyped the address.</p><p>The <a href="https://ens.domains/">Ethereum Name Service</a> (ENS) was created to tackle this issue. It is a system capable of turning human-readable names, referred to as domains, to blockchain addresses. For instance, the domain <a href="https://app.ens.domains/name/privacy-pass.eth">privacy-pass.eth</a> points to the Ethereum address 0xF10326C1c6884b094E03d616Cc8c7b920E3F73E0.</p><p>To achieve this, the system is organised in <a href="https://docs.ens.domains/">two components</a>, registries and resolvers.</p><p>A registry is a smart contract that maintains a list of domains and some information about each domain: the domain owner and the domain resolver. The owner is the account allowed to manage the domain. They can create subdomains and change ownership of their domain, as well as modify the resolver associated with their domain.</p><p>Resolvers are responsible for keeping records. For instance, Public Resolver is a smart contract capable of associating not only a name to blockchain addresses, but also a name to an IPFS content identifier. The resolver address is stored in a registry. Users then contact the registry to retrieve the resolver associated with the name.</p><p>Consider a user, Alice, who has direct access to the Ethereum state. The flow goes as follows: Alice would like to get Privacy Pass’s Ethereum address, for which the domain is privacy-pass.eth. She looks for privacy-pass.eth in the ENS Registry and figures out the resolver for privacy-pass.eth is at 0x1234... . She now looks for the address of privacy-pass.eth at the resolver address, which turns out to be 0xf10326c....</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/6yVOgswqi6HQ38qlhTaTdK/0956f47fa306bebb2233e9601d0b430c/image1-3.png" />
            
            </figure><p>Accessing the IPFS content identifier for privacy-pass.eth works similarly. The resolver is the same, only the accessed data is different — Alice calls a different method from the smart contract.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/1CjIbo1euB3DG5EZgnL3Bm/9b59d7bd3c7fa63870238274ef5a0200/image5.png" />
            
            </figure>
    <div>
      <h2>Cloudflare Distributed Web Resolver</h2>
      <a href="#cloudflare-distributed-web-resolver">
        
      </a>
    </div>
    <p>The goal was to be able to use this new way of indexing IPFS content directly from your web browser. However, accessing the ENS registry requires access to the Ethereum state. To get access to IPFS, you would also need to access the IPFS network.</p><p>To tackle this, we are going to use Cloudflare’s Distributed Web Gateway. Cloudflare operates both an Ethereum Gateway and an IPFS Gateway, respectively available at cloudflare-eth.com and cloudflare-ipfs.com.</p>
    <div>
      <h3>EthLink</h3>
      <a href="#ethlink">
        
      </a>
    </div>
    <p>The <a href="https://github.com/wealdtech/coredns-ens">first version</a> of EthLink was built by Jim McDonald and is operated by True Name LTD at eth.link. Starting from next week, eth.link will transition to use the Cloudflare Distributed Web Resolver. To that end, we have built EthLink on top of Cloudflare Workers. This is a proxy to IPFS. It proxies all ENS registered domains when .link is appended. For instance, privacy-pass.eth should render the Privacy Pass homepage. From your web browser, <a href="https://privacy-pass.eth.link">https://privacy-pass.eth.link</a> does it.</p><p>The resolution is done at the Cloudflare edge using a Cloudflare Worker. Cloudflare Workers allows JavaScript code to be run on Cloudflare infrastructure, eliminating the need to maintain a server and increasing the reliability of the service. In addition, it follows Service Workers API, so results returned from the resolver can be checked by end users if needed.</p><p>To do this, we set up a wildcard DNS record for *.eth.link to be proxied through Cloudflare and handled by a Cloudflare Worker.  When a user Alice accesses <a href="https://privacy-pass.eth.link">privacy-pass.eth.link</a>, the worker first gets the CID of the CID to be retrieved from Ethereum. Then, it requests the content matching this CID to IPFS, and returns it to Alice.</p>
            <figure>
            
            <img src="https://cf-assets.www.cloudflare.com/zkvhlag99gkb/WivGoQhRDcSaDh99sVdNI/0e9bca31a378146d49d92c3af71180e8/image3.png" />
            
            </figure><p>All parts can be run locally. The worker can be run in a service Worker, and the Ethereum Gateway can point to both a local Ethereum node and the IPFS gateway provided by IPFS Companion. It means that while Cloudflare provides resolution-as-a-service, none of the components has to be trusted.</p>
    <div>
      <h2>Final notes</h2>
      <a href="#final-notes">
        
      </a>
    </div>
    <p>So <a href="https://arewedistributedyet.com/">are we distributed yet</a>? No, but we are getting closer, building bridges between emerging technologies and current web infrastructure. By providing a gateway dedicated to the distributed web, we hope to make these services more accessible to everyone.</p><p>We thank the ENS team for their support of a new resolver on expanding the distributed web. The ENS team has been running a similar service at <a href="https://eth.link">https://eth.link</a>. On January 18th, they will switch <a href="https://eth.link">https://eth.link</a> to using our new service.</p><p>These services benefit from the added speed and security of the Cloudflare Worker platform, while paving the way to run distributed protocols in browsers.</p> ]]></content:encoded>
            <category><![CDATA[Research]]></category>
            <category><![CDATA[IPFS]]></category>
            <category><![CDATA[Ethereum]]></category>
            <category><![CDATA[Distributed Web]]></category>
            <guid isPermaLink="false">5GZYZoddJJgvOcmn2ALKWL</guid>
            <dc:creator>Thibault Meunier</dc:creator>
        </item>
    </channel>
</rss>