<?xml version="1.0" encoding="UTF-8"?>
<rss 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/" version="2.0">
    <channel>
        
        <title>
            <![CDATA[ dapps - freeCodeCamp.org ]]>
        </title>
        <description>
            <![CDATA[ Browse thousands of programming tutorials written by experts. Learn Web Development, Data Science, DevOps, Security, and get developer career advice. ]]>
        </description>
        <link>https://www.freecodecamp.org/news/</link>
        <image>
            <url>https://cdn.freecodecamp.org/universal/favicons/favicon.png</url>
            <title>
                <![CDATA[ dapps - freeCodeCamp.org ]]>
            </title>
            <link>https://www.freecodecamp.org/news/</link>
        </image>
        <generator>Eleventy</generator>
        <lastBuildDate>Sun, 24 May 2026 22:25:12 +0000</lastBuildDate>
        <atom:link href="https://www.freecodecamp.org/news/tag/dapps/rss.xml" rel="self" type="application/rss+xml" />
        <ttl>60</ttl>
        
            <item>
                <title>
                    <![CDATA[ How to Add a Custom Network to Metamask with JavaScript ]]>
                </title>
                <description>
                    <![CDATA[ As a developer, you can enhance the user experience of your decentralized applications (DApps) by allowing users to easily add your network to their Metamask wallet with just one click. This simplifies the process of onboarding users to your applicat... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/how-to-add-custom-network-to-metamask/</link>
                <guid isPermaLink="false">66d45f63868774922c884fe8</guid>
                
                    <category>
                        <![CDATA[ dapps ]]>
                    </category>
                
                    <category>
                        <![CDATA[ JavaScript ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Joshua Omobola ]]>
                </dc:creator>
                <pubDate>Mon, 02 Jan 2023 22:17:22 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2022/12/Frame-1--3--1.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>As a developer, you can enhance the user experience of your decentralized applications (DApps) by allowing users to easily add your network to their Metamask wallet with just one click.</p>
<p>This simplifies the process of onboarding users to your application, since they don't have to manually add the network themselves.</p>
<p>In this article, I'll show you how to use JavaScript to programmatically add custom networks to Metamask. Let's begin!</p>
<h2 id="heading-step-1-check-if-metamask-is-installed">Step 1: Check if Metamask is Installed</h2>
<p>The first thing you need to do is check if the Metamask plugin is installed in the user's browser. Fortunately, Metamask makes this easy by injecting an <code>ethereum</code> object into websites that have it installed.</p>
<p>To check for the presence of Metamask, you can simply try to access the <code>ethereum</code> object. You can do this using the following code:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">if</span> (<span class="hljs-keyword">typeof</span> <span class="hljs-built_in">window</span>.ethereum !== <span class="hljs-string">'undefined'</span>) {  
 <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Metamask is installed"</span>)
} <span class="hljs-keyword">else</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">"Metamask is not installed"</span>)
}
</code></pre>
<h2 id="heading-step-2-add-a-custom-network-to-metamask">Step 2: Add a Custom Network to Metamask</h2>
<p>To programmatically add a custom network to Metamask, you can use the <code>request</code> method of the <code>ethereum</code> object, passing it the <code>wallet_addEthereumChain</code> property.</p>
<p>For example, the following code demonstrates how to add the Matic Network (Polygon) to Metamask:</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">window</span>.ethereum.request({
  <span class="hljs-attr">method</span>: <span class="hljs-string">"wallet_addEthereumChain"</span>,
  <span class="hljs-attr">params</span>: [{
    <span class="hljs-attr">chainId</span>: <span class="hljs-string">"0x89"</span>,
    <span class="hljs-attr">rpcUrls</span>: [<span class="hljs-string">"https://polygon-rpc.com/"</span>],
    <span class="hljs-attr">chainName</span>: <span class="hljs-string">"Matic Mainnet"</span>,
    <span class="hljs-attr">nativeCurrency</span>: {
      <span class="hljs-attr">name</span>: <span class="hljs-string">"MATIC"</span>,
      <span class="hljs-attr">symbol</span>: <span class="hljs-string">"MATIC"</span>,
      <span class="hljs-attr">decimals</span>: <span class="hljs-number">18</span>
    },
    <span class="hljs-attr">blockExplorerUrls</span>: [<span class="hljs-string">"https://polygonscan.com/"</span>]
  }]
});
</code></pre>
<p>The <code>window.ethereum.request()</code> method takes an object as an argument with the method and params properties. The method property should be set to <code>wallet_addEthereumChain</code>, and the params property should be an array containing an object with the following properties:</p>
<ul>
<li><p><code>chainId</code>: The chain ID of the custom network which is a 0x-prefixed hexadecimal string.</p>
</li>
<li><p><code>rpcUrls</code>: An array of RPC URLs for the custom network.</p>
</li>
<li><p><code>chainName</code>: The name of the custom network.</p>
</li>
<li><p><code>nativeCurrency</code>: An object with the properties name, symbol, and decimals, representing the name, symbol, and number of decimals of the native currency of the custom network.</p>
</li>
<li><p><code>blockExplorerUrls</code>: An array of block explorer URLs for the custom network.</p>
</li>
</ul>
<p>This code will send a request to Metamask to add the Polygon (Matic) Network to the user's wallet. If the request to add the network is successful, <code>window.ethereum.request()</code> will return <code>null</code>. If not successful, it will return an error.</p>
<h3 id="heading-demo">Demo</h3>
<p>To demonstrate how you can use this code, let's write a simple function that adds the Matic network when called.</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">async</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addMaticNetwork</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> result = <span class="hljs-keyword">await</span> <span class="hljs-built_in">window</span>.ethereum.request({
      <span class="hljs-attr">method</span>: <span class="hljs-string">"wallet_addEthereumChain"</span>,
      <span class="hljs-attr">params</span>: [{
        <span class="hljs-attr">chainId</span>: <span class="hljs-string">"0x89"</span>,
        <span class="hljs-attr">rpcUrls</span>: [<span class="hljs-string">"https://polygon-rpc.com/"</span>],
        <span class="hljs-attr">chainName</span>: <span class="hljs-string">"Matic Mainnet"</span>,
        <span class="hljs-attr">nativeCurrency</span>: {
          <span class="hljs-attr">name</span>: <span class="hljs-string">"MATIC"</span>,
          <span class="hljs-attr">symbol</span>: <span class="hljs-string">"MATIC"</span>,
          <span class="hljs-attr">decimals</span>: <span class="hljs-number">18</span>
        },
        <span class="hljs-attr">blockExplorerUrls</span>: [<span class="hljs-string">"https://polygonscan.com/"</span>]
      }]
    });
  } <span class="hljs-keyword">catch</span> (error){
    <span class="hljs-built_in">console</span>.log(error)
  }
</code></pre>
<p>The <code>addMaticNetwork</code> function, when called, will invoke the request to add the matic network. This function uses the async/await syntax to handle the request asynchronously, and includes a try/catch block to handle any errors that may occur.</p>
<p><strong>Note:</strong> It's important to note that you should never automatically prompt the user to add a network without their explicit consent. Instead, this request should only be made in response to a direct user action, such as clicking a button.</p>
<p>This ensures that the user is fully aware of the change being made to their wallet and can choose to proceed or cancel the operation as they see fit..</p>
<h2 id="heading-wrapping-up">Wrapping Up</h2>
<p>In this article, you have learned how to programmatically add custom networks to MetaMask using JavaScript.</p>
<p>By implementing these steps in your own DApp, you can provide a seamless onboarding experience for your users and improve their overall experience with your application.</p>
<p>I hope this article was helpful. Remember, the world is your code oyster.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ What is a Dapp? A Guide to Ethereum Dapps ]]>
                </title>
                <description>
                    <![CDATA[ By Grant Bartel In the cryptoverse, a lot of attention is laid on Bitcoin. But don't let that overshadow the growing interest in Ethereum, which is revolutionizing the way we think of applications. So, what is a Dapp? A Dapp, or decentralized applica... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/what-is-a-dapp-a-guide-to-ethereum-dapps/</link>
                <guid isPermaLink="false">66d45edfd1ffc3d3eb89dddb</guid>
                
                    <category>
                        <![CDATA[ dapps ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Ethereum ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Smart Contracts ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Wed, 13 May 2020 19:08:55 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2020/05/clifford-photography-hiFghSs4keM-unsplash.jpg" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Grant Bartel</p>
<p>In the cryptoverse, a lot of attention is laid on Bitcoin. But don't let that overshadow the growing interest in Ethereum, which is revolutionizing the way we think of applications.</p>
<p>So, what is a Dapp? <strong>A Dapp, or decentralized application, is a software application that runs on a distributed network. It's not hosted on a centralized server, but instead on a peer-to-peer decentralized network.</strong></p>
<p>Alright, that's the short version, but there's a lot more to unpack. Let's dive into the world of Dapps, more specifically those built on the Ethereum protocol.</p>
<h2 id="heading-what-is-ethereum">What is Ethereum?</h2>
<p>To understand what a Dapp is, you first need to understand what Ethereum is. Now, there are other protocols that are used to build Dapps, like EOS, NEO, Stellar, Tron, and Cardano, but the big dog is Ethereum.</p>
<p>Ethereum is a network protocol that allows users to create and run <strong>smart contracts</strong> over a decentralized network. A smart contract contains code that runs specific operations and interacts with other smart contracts, which has to be written by a developer. Unlike Bitcoin which stores a number, Ethereum stores executable code.</p>
<p>So, why should you care?</p>
<p>Because Ethereum removes the need for a third party to handle transactions between peers. Since the middle man is replaced by code, all kinds of costs are reduced, including time and money.</p>
<p><strong>Just like Bitcoin removes the need for someone to hold your money, Ethereum removes the need for someone to broker a deal.</strong></p>
<p>Now you might be wondering, where are all these smart contracts? Well, they're essentially hosted on multiple computer nodes all across the world. </p>
<p>These nodes contain all of the information of all the world's smart contracts, including code, transactions, etc. They're constantly working to keep this information up-to-date so they all have the exact same copy. This what makes smart contracts, and cryptocurrencies in general, decentralized.</p>
<p>And since all of the nodes have the same information and are spread across the world, the removal of a node won't interrupt the execution of any smart contract. Redundancy ensures uptime.</p>
<h2 id="heading-what-is-a-dapp">What is a Dapp?</h2>
<p>Now that we have a good idea of what Ethereum and smart contracts are, we can start diving into the details of what a Dapp is.</p>
<p>Just to be clear, a Dapp is just like any other software application you use. It could be a website or an app on your phone. What makes a Dapp different than a traditional app is that it's built on a decentralized network, like Ethereum.</p>
<p>When you're creating your own Ethereum smart contracts, you're actually writing a piece of the backend code for your Dapp. And while your Dapp will have a user interface like a traditional app, either all or part of the backend is built on top of Ethereum.</p>
<p><strong>Dapp = frontend + smart contract backend</strong></p>
<p>This backend code is written in an Ethereum-specific language, including Solidity (the most popular), Serpent, and Vyper. Below is an example of a simple "Hello World" contract written in Solidity.</p>
<pre><code>pragma solidity ^<span class="hljs-number">0.4</span><span class="hljs-number">.22</span>;

contract helloWorld {
 <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">printHelloWorld</span> (<span class="hljs-params"></span>) <span class="hljs-title">public</span> <span class="hljs-title">pure</span> <span class="hljs-title">returns</span> (<span class="hljs-params">string</span>) </span>{
   <span class="hljs-keyword">return</span> <span class="hljs-string">'Hello World!'</span>;
 }
}
</code></pre><p>If the smart contract is deployed onto Ethereum's mainnet (i.e., production) or even a local testnet, your Dapp can execute the code in the smart contract by calling the function <strong>printHelloWorld()</strong>.</p>
<p>But what about the frontend? Is there any specific language you need to use for your Dapp?</p>
<p>Nope! You can use whatever frontend language/framework you want. But it is possible to host your frontend code on decentralized storage nodes to make both your frontend and backend decentralized. </p>
<p>Take a look at technologies like <a target="_blank" href="https://ethereum.stackexchange.com/questions/375/what-is-swarm-and-what-is-it-used-for?noredirect=1&amp;lq=1">Swarm</a> and <a target="_blank" href="https://en.wikipedia.org/wiki/InterPlanetary_File_System">IPFS</a> to learn more about decentralized storage.</p>
<p>OK, so Dapps are just applications that have some or all of their backend decentralized and possibly even have a decentralized frontend. Why should you care?</p>
<p>The development of Dapps is another step toward a future of the Internet that's commonly referred to as Web 3.0.</p>
<h2 id="heading-ethereum-dapps-the-backbone-of-web-30">Ethereum Dapps: The Backbone of Web 3.0</h2>
<p>Since the creation of the Internet, the amount of information and human interaction has exploded. We're able to produce and consume information at near infinite levels.</p>
<p>Unfortunately, the ability to control this information has become heavily centralized over time. This includes information about your social life, health, finances, and much more. Those who control this information are the ultimate owners of it and can use it as they see fit.</p>
<p>These are essentially middle men that hold your information on their centralized servers so they can provide you with services, like holding your money, hosting you website, connecting with family and friends, etc. And at the push of a button, they can completely remove you from accessing this (your?) information and all related services.</p>
<p>This is a monopoly on the information you produce and consume as well as the services you use. Thankfully, Web 3.0 changes all of that and Ethereum Dapps are playing a central role.</p>
<p>Web 3.0 is a lot of things, but at its core is a technology based on decentralization. By decentralizing information and services, large corporations and governments won't be able to control users of the Internet through monopolistic, authoritarian tactics.</p>
<p>Ethereum Dapps, with their ability to decentralize information and services, gives Web 3.0 a platform to deliver a completely free (as in freedom) and accessible Internet for everyone. No longer will there be a central point of control because there won't be middle men to facilitate the flow of information and services.</p>
<p>Some of the most promising Ethereum tokens and Dapps are laying the foundation for the future of the Internet, including:</p>
<ul>
<li><a target="_blank" href="https://basicattentiontoken.org/">Basic Attention Token</a> (BAT): used to improve privacy and value transfer between users, publishers, and advertisers. Used in the <a target="_blank" href="https://brave.com/">Brave browser</a>.</li>
<li><a target="_blank" href="https://golem.network/">Golem</a> (GNT): used to run code on one or many distributed compute nodes.</li>
<li><a target="_blank" href="https://www.minds.com/">Minds</a>: a social media platform that improves value transfer between content creators and consumers.</li>
<li><a target="_blank" href="https://www.tokensets.com/">TokenSets</a>: used to manage cryptocurrency assets via tokenized automated asset management strategies.</li>
<li><a target="_blank" href="https://aave.com/">Aave</a>: used to earn interest on cryptocurrency deposits and borrow cryptocurrency assets.</li>
<li><a target="_blank" href="https://idex.market/">IDEX</a>: a decentralized cryptocurrency exchange.</li>
</ul>
<h2 id="heading-closing-thoughts">Closing Thoughts</h2>
<p>Since the creation of Bitcoin, the first cryptocurrency, there's been a massive growth in the cryptoverse. </p>
<p>Being able to store data in a decentralized way was a necessary stepping stone to the decentralization of code execution. With Ethereum, it's now possible to deploy smart contracts across the world to power the backend for existing and future Dapps. </p>
<p>And as more and more Dapps are launched, we'll get closer and closer to a more free, fair, and accessible Internet.</p>
<p><em>I’m Grant and I’m a freelance SEO and content professional. If you’re looking to grow your brand's organic search traffic, I can help with your <a target="_blank" href="https://www.writefintech.com/">fintech SEO</a>. Cheers!</em>  </p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Learn how to build Ethereum Dapp and develop for the blockchain ]]>
                </title>
                <description>
                    <![CDATA[ Learn Ethereum Dapp in this full video course for beginners from EatTheBlocks. This course teaches how to build decentralized applications on the Ethereum Blockchain.  You'll learn how to build 5 Ethereum Dapps. For each of them, this course demonstr... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/learn-how-to-build-ethereum-dapp-and-develop-for-the-blockchain/</link>
                <guid isPermaLink="false">66b2046d712508eb16067882</guid>
                
                    <category>
                        <![CDATA[ dapps ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Ethereum ]]>
                    </category>
                
                    <category>
                        <![CDATA[ youtube ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ Beau Carnes ]]>
                </dc:creator>
                <pubDate>Mon, 07 Oct 2019 16:04:32 +0000</pubDate>
                <media:content url="https://www.freecodecamp.org/news/content/images/2019/10/ethereumdapps.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>Learn Ethereum Dapp in this full video course for beginners from EatTheBlocks. This course teaches how to build decentralized applications on the Ethereum Blockchain. </p>
<p>You'll learn how to build 5 Ethereum Dapps. For each of them, this course demonstrates how to:</p>
<ul>
<li>develop smart contracts,</li>
<li>test smart contracts,</li>
<li>and build a web frontend to interact with the smart contract.</li>
</ul>
<p>The course covers:</p>
<ul>
<li>The architecture of Dapps</li>
<li>Solidity, the programming language for Ethereum smart contract</li>
<li>Remix, the online IDE for Solidity</li>
<li>Truffle, the framework for Solidity smart contracts</li>
<li>Ganache, the local development Blockchain</li>
<li>Web3, the JS library to integrate a Dapp frontend</li>
<li>Metamask, the Ethereum wallet used by most Dapps (browser extension)</li>
<li>Deployment to public testnet (Ropsten) and mainnet, using Infura API</li>
</ul>
<p>Watch the full course below or on the <a target="_blank" href="https://www.youtube.com/watch?v=8wMKq7HvbKw">freeCodeCamp YouTube channel</a> (5 hour watch).</p>
<div class="embed-wrapper">
        <iframe width="560" height="315" src="https://www.youtube.com/embed/8wMKq7HvbKw" style="aspect-ratio: 16 / 9; width: 100%; height: auto;" title="YouTube video player" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" loading="lazy"></iframe></div>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ Resources I Used to Teach Myself Blockchain Development ]]>
                </title>
                <description>
                    <![CDATA[ By Gwendolyn Faraday I started investing in cryptocurrencies last year, and just kept going down the blockchain rabbit hole from there. Where I live especially, much of the blockchain community is focused on things like trading and investing in crypt... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/the-resources-i-used-to-teach-myself-blockchain-development-1fccada9b92b/</link>
                <guid isPermaLink="false">66d45f0c3dce891ac3a967fa</guid>
                
                    <category>
                        <![CDATA[ Blockchain ]]>
                    </category>
                
                    <category>
                        <![CDATA[ dapps ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Ethereum ]]>
                    </category>
                
                    <category>
                        <![CDATA[ Solidity ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 09 Aug 2018 14:46:04 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*6bOXOdSXtre9t7aMgTr-4A.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Gwendolyn Faraday</p>
<p>I started investing in cryptocurrencies last year, and just kept going down the blockchain rabbit hole from there. Where I live especially, much of the blockchain community is focused on things like trading and investing in cryptocurrencies. Although it was fun to invest at first, I wasn’t so interested in that. So I started my own local meetup group to focus on blockchain development.</p>
<p>The meetup group allowed me to connect and learn alongside members of the community, and I’ve used that to compile a list of resources that I, and the other members, have found useful. These resources are arranged from the most basic blockchain explanations to the underlying systems as well as building applications on top of the blockchain.</p>
<p>There is a lot of noise out there. I hope this helps you make sense of it all if you are interested in becoming a blockchain professional.</p>
<h3 id="heading-table-of-contents"><strong>Table of Contents:</strong></h3>
<ol>
<li>Learn the basics</li>
<li>Dapp Development with Ethereum</li>
<li>Game Theory</li>
<li>Cryptography</li>
<li>Audio/Supplementary Materials</li>
<li>Other Types of Blockchain Development</li>
<li>Research</li>
</ol>
<h3 id="heading-the-basics-how-blockchain-technologies-work"><strong>The Basics — How Blockchain Technologies Work</strong></h3>
<p>It can take a minute to wrap your head around the complexities of blockchain technologies. This technology encompasses so many different fields: computer science, game theory, cryptography, and economics just to name a few. Thus it’s difficult to initially learn the ins and outs of how it all works.</p>
<p>Here are a few resources that I think give a good, clear overview of how blockchain really works.</p>
<ol>
<li><strong>Start with this video breaking down how it works:</strong></li>
</ol>
<p><strong>2. Watch both videos here (there is some overlap with the prior resource, but it will cement the concepts in your mind) and play around with the demo on the site:</strong></p>
<p><a target="_blank" href="https://anders.com/blockchain/"><strong>Blockchain Demo</strong></a><br><a target="_blank" href="https://anders.com/blockchain/">_A live blockchain demo in a browser._anders.com</a></p>
<ol start="3">
<li><strong>Read <a target="_blank" href="https://github.com/ethereumbook/ethereumbook/blob/develop/what-is.asciidoc">the Chapter “What is Ethereum</a>” from the GitHub book, “<a target="_blank" href="https://github.com/ethereumbook/ethereumbook">Mastering Ethereum</a>”</strong></li>
</ol>
<h3 id="heading-dapp-development-with-ethereum"><strong>Dapp Development with Ethereum</strong></h3>
<p>There are many different blockchains now that allow you to create applications and smart contracts. Ethereum is by far the most popular option, with Solidity being its dominant programming language. I suggest trying out building dapps with these technologies first.</p>
<p>By far <strong>the best way to learn to code with Solidity</strong> is <a target="_blank" href="http://cryptozombies.io/">Cryptozombies</a>. It’s an interactive coding environment that teaches you how to program Solidity step by step while building a zombie game! It’s kept up to date with new versions of Solidity too, which is hard to come by in the ever-changing blockchain space.</p>
<p><strong>If you want something in addition to Cryptozombies, here are two other recommendations I have for learning solidity:</strong></p>
<ol>
<li><a target="_blank" href="https://www.youtube.com/playlist?list=PL16WqdAj66SCOdL6XIFbke-XQg2GW_Avg">Youtube video series for dapp development</a> — This channel explains things very well, but the syntax isn’t totally up to date so you might have to google some things if you are getting errors. The Remix editor he uses will give you hints about what you need to change, so you should be fine.</li>
<li><a target="_blank" href="https://www.udemy.com/ethereum-and-solidity-the-complete-developers-guide">Stephen Grider on Udemy</a> — this is a paid course, but you can get a deal for ~$9.99 USD and it has good examples and content.</li>
</ol>
<p>After you finish Cryptozombies, it’s a good idea to learn how to use the <a target="_blank" href="http://remix.solidity.com">Remix IDE</a> for creating, debugging, and deploying contracts. The <a target="_blank" href="https://media.readthedocs.org/pdf/remix/latest/remix.pdf">docs have a quick start and lots of step-by-step instructions with screenshots</a> to get you going.</p>
<p>You should also learn about Ethereum <a target="_blank" href="https://github.com/ethereumbook/ethereumbook/blob/3812a5dfa5b851a1aaa52b14c5aea6c74629e5a0/clients.asciidoc">clients</a> and <a target="_blank" href="https://github.com/ethereumbook/ethereumbook/blob/3812a5dfa5b851a1aaa52b14c5aea6c74629e5a0/wallets.asciidoc">wallets</a>. Those links will explain everything you need to know. Metamask is a browser plugin and a great way to get started (it’s for Chrome or Firefox, but the Chrome one seems to work much better).</p>
<p>Next, learn more advanced smart contract development. Start by reading the <a target="_blank" href="https://solidity.readthedocs.io/en/v0.4.24/solidity-by-example.html">Solidity documentation</a>. It goes into more advanced concepts and has some good example dapps, too. Ethereum.org also had some good dapp examples to look through like <a target="_blank" href="https://www.ethereum.org/dao">this one</a>. You can copy the examples straight into the Remix IDE and test them out for yourself.</p>
<p>After you have a good grasp on Solidity and smart contracts, start looking through some open source examples. The default go-to seems to be <a target="_blank" href="https://etherscan.io/address/0x06012c8cf97bead5deae237070f9587f8e7a266d#code">Crypto Kitties</a> (you can see the contract code at any Ethereum address at <a target="_blank" href="https://etherscan.io">etherscan.io</a>), but there are many more that can be great learning tools. You can search GitHub and Etherscan to find more.</p>
<p>There is a lot of development going on in the Ethereum space around developer tools and security. Here are some awesome libraries and tools along those lines that you can check out:</p>
<ul>
<li><a target="_blank" href="https://github.com/OpenZeppelin/openzeppelin-solidity">Open Zeppelin</a></li>
<li><a target="_blank" href="https://www.truffleframework.com/">Truffle Development Framework</a></li>
<li><a target="_blank" href="https://github.com/ConsenSys/smart-contract-best-practices">ConsenSys — Smart Contract Best Practices</a></li>
</ul>
<h3 id="heading-game-theory">Game Theory</h3>
<p>Some of the problems that blockchain aims to solve are from game theory, most notably The Byzantine Generals Problem. This problem deals with consensus between many different parties without having to trust that any individual is not malicious.</p>
<p><a target="_blank" href="https://www.thegreatcoursesplus.com/game-theory-in-life-business-and-beyond">The Great Courses Plus offers an excellent lecture series on various topics in game theory</a>. They have a monthly subscription model with a two-week free trial. The 24 30-minute lectures cover a broad range of topics in game theory, and I think it’s great for an overall understanding of the subject.</p>
<h3 id="heading-cryptography">Cryptography</h3>
<p>I am definitely not an expert here, but I am continuously learning about how cryptography works and how it can be applied to blockchain. This area does get really deep into the math, as Ethereum and many other blockchains use Eliptical Curve Cryptography.</p>
<p>As a noob in this space, here are some resources I have found useful:</p>
<ul>
<li><a target="_blank" href="https://www.coursera.org/learn/crypto">Coursera Cryptography I</a> — Free to audit the course; paid if you want a certificate.</li>
<li><a target="_blank" href="https://github.com/ethereumbook/ethereumbook/blob/3812a5dfa5b851a1aaa52b14c5aea6c74629e5a0/keys-addresses.asciidoc">Chapter on Cryptography in the Ethereum Mastery book</a></li>
</ul>
<h3 id="heading-audio-supplementary-material">Audio Supplementary Material</h3>
<ul>
<li><a target="_blank" href="https://itunes.apple.com/us/podcast/blockchain-software-engineering-daily/id1230807219"><strong>Podcast:</strong> Software Engineering Daily, Blockchain</a> — This is my favorite blockchain podcast. They do a very good job at explaining complex topics and have a variety of industry leaders on the show.</li>
<li><a target="_blank" href="https://cryptodisrupted.com/"><strong>Podcast:</strong> CryptoDisrupted</a> — The host brings in a lot of guests from interesting projects in the blockchain space. I’ve enjoyed most of what I’ve listened to with this podcast.</li>
</ul>
<h3 id="heading-other-types-of-blockchain-development">Other Types of Blockchain Development</h3>
<p>The Ethereum community has, by far, the most developers and learning resources, so it’s a good place to get started with blockchain development. I think you would be remiss if you did not explore other innovation in the space, however. Below are some interesting projects.</p>
<p><a target="_blank" href="https://lisk.io/"><strong>Lisk</strong></a> — Makes blockchain development more accessible, as everything is built in JavaScript.</p>
<p><a target="_blank" href="https://www.eos.io/"><strong>EOS</strong></a> — The creator, Dan Larimer, had built several other successful blockchain solutions before starting this project. EOS is supposed to solve some of the problems with Ethereum, like scaling and security. It’s sometimes called, “The Ethereum Killer”.</p>
<p><strong>Interchain Protocols</strong> — These are some solutions that help facilitate transactions between different blockchains and also have interesting solutions to help blockchain scale:</p>
<ol>
<li><a target="_blank" href="https://cosmos.network/">Cosmos</a></li>
<li><a target="_blank" href="https://polkadot.network/">Polkadot</a></li>
<li><a target="_blank" href="https://interledger.org/">Interledger</a></li>
</ol>
<p><a target="_blank" href="https://www.hyperledger.org/"><strong>Hyperledger</strong></a> — An open source collaborative effort created to advance cross-industry blockchain technologies. It’s hosted by The Linux Foundation.</p>
<p><a target="_blank" href="https://holo.host/"><strong>Holo</strong></a> — A post-blockchain technology that attempts to solve the issues of scalability and centralization in today’s blockchain technologies.</p>
<h3 id="heading-research-amp-current-development">Research &amp; Current Development</h3>
<p>Once you learn the basics, it’s so important to read research papers to achieve mastery in the blockchain space. Here are some places where I have had success:</p>
<ul>
<li><a target="_blank" href="https://blog.acolyer.org/?s=blockchain">The Morning Paper — Blockchain Articles</a></li>
<li><a target="_blank" href="http://whitepaperdatabase.com/">Collection of whitepapers from ICOs</a></li>
<li><a target="_blank" href="http://blockchain.mit.edu/">http://blockchain.mit.edu/</a></li>
<li><a target="_blank" href="https://www.blockchainresearchinstitute.org/">https://www.blockchainresearchinstitute.org/</a></li>
</ul>
<h3 id="heading-conclusion">Conclusion</h3>
<p>I will be continuously studying blockchain development and trying to find new and interesting solutions. Please leave a comment or message me if I am missing anything here.</p>
<p>Right now, I am planning more articles about companies, projects, and people of interest in the blockchain space. Follow me if you are interested in any of these things.</p>
 ]]>
                </content:encoded>
            </item>
        
            <item>
                <title>
                    <![CDATA[ From Zero to Interplanetary Hero ]]>
                </title>
                <description>
                    <![CDATA[ By Carson Farmer A fun guide to getting started with browser-based ĐApps on IPFS _[â€œIf you can read this, congratulationsâ€”the archive youâ€™re using still knows about the mouseover textâ€!](https://xkcd.com/1683/" rel="noopener" target="blank" ... ]]>
                </description>
                <link>https://www.freecodecamp.org/news/from-zero-to-interplanetary-hero-7e62f7d4427/</link>
                <guid isPermaLink="false">66c34aef0fa3812cdd5ea9c1</guid>
                
                    <category>
                        <![CDATA[ Blockchain ]]>
                    </category>
                
                    <category>
                        <![CDATA[ dapps ]]>
                    </category>
                
                    <category>
                        <![CDATA[ ipfs ]]>
                    </category>
                
                    <category>
                        <![CDATA[ General Programming ]]>
                    </category>
                
                    <category>
                        <![CDATA[ technology ]]>
                    </category>
                
                <dc:creator>
                    <![CDATA[ freeCodeCamp ]]>
                </dc:creator>
                <pubDate>Thu, 21 Jun 2018 18:53:56 +0000</pubDate>
                <media:content url="https://cdn-media-1.freecodecamp.org/images/1*GGQAuJS_S0gonQc3goq0Vw.png" medium="image" />
                <content:encoded>
                    <![CDATA[ <p>By Carson Farmer</p>
<h4 id="heading-a-fun-guide-to-getting-started-with-browser-based-dapps-on-ipfs">A fun guide to getting started with browser-based ĐApps on IPFS</h4>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*GGQAuJS_S0gonQc3goq0Vw.png" alt="Image" width="800" height="304" loading="lazy">
_[â€œIf you can read this, congratulationsâ€”the archive youâ€™re using still knows about the mouseover textâ€!](https://xkcd.com/1683/" rel="noopener" target="<em>blank" title=")</em></p>
<p><a target="_blank" href="https://en.wikipedia.org/wiki/DAPP">ĐApps</a>, or decentralized apps, are all the rage right now, particularly over on the <a target="_blank" href="https://www.ethereum.org/">Etherium blockchain</a>. But did you know that ĐApps can also run on the <a target="_blank" href="https://ipfs.io/">Interplanatary File System (IPFS)</a>? You bet, and it’s a lot easier than you might think to get one up and going quickly.</p>
<p>In this post, we’re going to go through the steps required to get an IPFS-based ĐApp going quickly, and easily. We’re going to take advantage of some cool new <a target="_blank" href="https://blog.ipfs.io/35-ipfs-companion-2-2-0/#hn2">IPFS browser tools</a>, and my favorite online comic. In doing so, we’re going to help archive a precious resource (<a target="_blank" href="https://xkcd.com/">xkcd</a>!) for future visitors. So this post has it all: intrigue, excitement, and a commitment to the future of the web!</p>
<h3 id="heading-archiving-the-gems-of-the-web">Archiving the gems of the web</h3>
<p>The goal for this tutorial is to create a distributed web ‘clone’ of the <a target="_blank" href="https://xkcd.com/">xkcd website</a>. We’re going to use IPFS to fetch images from an archive of xkcd comics, and display them in a form familiar to fans of xkcd.</p>
<p>There are several reasons why we might want to do something like this. One, I like xkcd comics, and am always looking for an excuse to play around with them. Two, xkcd, along with several other archived resources, are available via <a target="_blank" href="https://archives.ipfs.io/">the IPFS archives</a>, which make them a handy example. Three, and this one is important, building content-based ĐApp on top of IPFS can help to archive the web!</p>
<p>What do I mean by that? Well, trends change, interests wain, and the Internet is a fickle place. Couple this with the increasing costs of maintaining servers, updating infrastructure, and keeping up with the latest trends, and you’ve got a recipe for dead links. IPFS and the distributed web is a great way to help combat <a target="_blank" href="https://en.wikipedia.org/wiki/Link_rot">link rot</a>.</p>
<p>Take our xkcd ĐApp for example. In a moment, we’re going to write some very simple JavaScript that will load a random xkcd comic each time our ĐApp is accessed. And so every time someone visits the ĐApp, the peer running in their browser fetches that comic, and temporarily caches that item, making it possible for others to retrieve it as well. In fact, the more we use the ĐApp, the better it is able to distribute and archive xkcd.</p>
<blockquote>
<p>The more we access and use things on the distributed web via IPFS, the more likely they are to stick around long-term — <a target="_blank" href="https://twitter.com/home?status=The%20more%20we%20access%20and%20use%20things%20on%20the%20distributed%20web%20via%20IPFS,%20the%20more%20likely%20they%20are%20to%20stick%20around%20long-term%20-%20%40carsonfarmer%20https%3A//medium.com/%40carsonfarmer/from-zero-to-interplanetary-hero-7e62f7d4427">tweet it</a></p>
</blockquote>
<p>This is a really powerful idea: the more we access and use things on the distributed web via IPFS, the more likely they are to stick around long-term. And what about things that are important but less <em>popular</em> (like historical documents)? This is where things like <a target="_blank" href="https://filecoin.io/">Filecoin</a> will help to pick up the slack. In the <a target="_blank" href="https://coincentral.com/filecoin-beginners-guide-largest-ever-ico/">filecoin world</a>, rather than relying on popularity to preserve documents and files, you can pay the network to store these things for you. It’s a very cool idea.</p>
<h3 id="heading-getting-started">Getting started</h3>
<p>For those of you who can’t wait, the full ĐApp is available from the <a target="_blank" href="https://github.com/textileio/xkcd-dapp-demo">Textile GitHub repo</a>. Feel free to clone that, and follow along with the code to make getting started easier. And since you’ve just saved yourself some time, why not <a target="_blank" href="https://www.youtube.com/watch?v=HUVmypx9HGI">watch this great video</a> on the IPFS vision by Juan Benet before moving on. You can also check out a <a target="_blank" href="https://ipfs.carsonfarmer.com/ipfs/QmYDEzjNKm6ZMCmQVVRAJqPnGL2H7c4EK81LBTK3GC4kCh/">‘live’ version here</a>.</p>
<p>For those of you who want a step-by-step approach, here are a few setup steps to get you started.</p>
<p>First, clone our vanilla IPFS <a target="_blank" href="https://github.com/textileio/dapp-template">Dapp Template</a>, and change into the new directory:</p>
<pre><code>git clone https:<span class="hljs-comment">//github.com/textileio/dapp-template.git xkcd-dappcd xkcd-dapp</span>
</code></pre><p>This template is pretty simple, and has fairly minimal <a target="_blank" href="https://github.com/textileio/dapp-template/blob/carson/xkcd-demo/package.json">dependencies</a>. Most of the dev dependencies are just for transpiling JavaScript so that we can run our ĐApp in the browser. For details on all those packages, refer to their respective GitHub repos, or <a target="_blank" href="https://www.textile.io/">get in touch</a> to ask a question or two.</p>
<p>So first things first, check out the <code>README.md</code> file from the repo. You’ll notice it says this app works best with <code>window.ipfs</code>, and that you can install the <a target="_blank" href="https://github.com/ipfs-shipyard/ipfs-companion">IPFS Companion</a> web extension by clicking on one of the links.</p>
<p>The IPFS Companion is a browser extension that simplifies access to IPFS resources by running a <a target="_blank" href="https://github.com/ipfs/js-ipfs">JavaScript IPFS peer</a> in your browser. Even better than this, it can expose an embedded IPFS node as <code>window.ipfs</code> on every webpage! This makes it possible for our ĐApp to detect if <code>window.ipfs</code> exists and opt-in to use it instead of creating our own one-off <code>js-ipfs</code> node. It is not <em>required</em> for running ĐApps, but it does make them run better (faster), and I highly recommend installing it.</p>
<p>But, we can’t expect the users of our ĐApp to install a browser extension before being able to use our ĐApp. So there is a nice JavaScript module called <code>[window.ipfs-fallback](https://github.com/tableflip/window.ipfs-fallback)</code>, which will detect the presence of <code>window.ipfs</code> and automatically fall back to downloading the <a target="_blank" href="https://unpkg.com/ipfs/dist/index.min.js">latest version of IPFS</a> from the CDN if it’s unavailable. So when building a ĐApp, it’s always a good idea to include this — and you get <code>window.ipfs</code> for free if available. Nice!</p>
<p>Ok, so just to make sure things are working nicely, let’s go ahead and install our required dependencies, and build and run our ĐApp locally. Enter the following into your terminal:</p>
<pre><code>yarn installyarn buildyarn start
</code></pre><p>You should see a pretty minimal (blank page) ĐApp with a footer and not much else. Now go ahead and open your Javascript developer console (Chrome:Ctl+Shift+J(Command+Option+Jon Mac), Firefox: Ctrl+Shift+K(Command+Option+Kon Mac), Safari: Command+Option+I). You should see something like <code>running js-ipfs/0.29.2 with ID Qm{hash}</code> where <code>Qm{hash}</code> is a long alphanumeric hash that represents your peer id.</p>
<p>Congrats, you are successfully running a ĐApp on the decentralized web! Now let’s make it do something interesting…</p>
<h3 id="heading-fetching-data-on-the-distributed-web">Fetching data on the distributed web</h3>
<p>Ok, let’s add some functionality to our ĐApp. We’ll start by simply fetching a random xkcd comic and displaying it on a blank page. Simple enough right? First, rather than <code>yarn start</code>ing our app, let’s <code>yarn watch</code> it so that any changes we make to the JavaScript will automatically be reflected when we refresh our browser window.</p>
<p>Now, you can go ahead and modify the <code>setup</code> function in <code>src/main.js</code> with the following code:</p>
<p>There’s a lot to parse there, but basically what is happening is:</p>
<ul>
<li>Lines 3 &amp; 5 are defining <em>which</em> random comic to fetch (<a target="_blank" href="https://ipfs.io/ipfs/QmWEAXcqwq5zY2u8Z1mii5m3MXricctd7efFep7sSEWZQz">from our archive</a>)</li>
<li>Lines 8 &amp; 10 are initializing an IPFS peer node, and connecting to a peer known to be pinning the xkcd archive (this second step isn’t always required, but I added it here to help bootstrap the ĐApp)</li>
<li>Line 14 is really the IPFS ‘magic’…it is fetching the files at the given CID and returning a promise, which we await and then do some work with in lines 15 to 27…</li>
<li>Lines 15 &amp; 16 simply loop through the binary objects returned from the previous step, and look for the actual png image</li>
<li>Lines 18 &amp; 20 convert the binary image data to a base64 encode string</li>
<li>And finally, lines 22 through 27 create an image element and add it to the ‘main’ div for display.</li>
</ul>
<p>Done!</p>
<h3 id="heading-cleaning-things-up">Cleaning things up</h3>
<p>From here, any additional changes are simply to make the ĐApp look and feel more like the original xkcd comic webpage.</p>
<p>I won’t go into the details in this post, but you can take a look in the <a target="_blank" href="https://github.com/textileio/xkcd-dapp-demo">xkcd-dapp-demo</a> repo for the full code example. There, I’ve added the nav buttons and styling from the xkcd website, along with some links to <a target="_blank" href="https://ipfs.io/ipfs/QmWEAXcqwq5zY2u8Z1mii5m3MXricctd7efFep7sSEWZQz/about.html">proper attribution</a>, <a target="_blank" href="https://ipfs.io/ipfs/QmWEAXcqwq5zY2u8Z1mii5m3MXricctd7efFep7sSEWZQz/license.html">license information</a>, and other goodies. We even have the fun hover comments! It’s almost all vanilla ES6 JavaScript, and I take good advantage of <a target="_blank" href="https://davidwalsh.name/async-await">async/await patterns</a> to make the code nice and readable.</p>
<p><img src="https://cdn-media-1.freecodecamp.org/images/1*2DSOGJ4sBp5Njb7hN3RF_Q.png" alt="Image" width="800" height="645" loading="lazy"></p>
<p>So as you can see, it is relatively easy to get started making ĐApps on IPFS. Our xkcd ĐApp works best when run a) locally (via <code>yarn start</code> for example), and b) with the IPFS Companion browser extension enabled. If you want, you can actually fire up a local IPFS daemon, and run <code>ipfs add -r dist/</code>, to add the whole ĐApp to IPFS. Now, you can test it through your local IPFS gateway: <code>http://localhost:5001/ipfs/Qm{hash}/</code>(if your code isn’t identical to mine, your CID hash might differ, use the one output from the above <code>ipfs add</code> command).</p>
<h3 id="heading-wrapping-up">Wrapping up</h3>
<p>We hope that <a target="_blank" href="https://github.com/textileio/dapp-template">our template</a> will provide a quick and easy means to bootstrap additional ĐApps, and that the community of IPFS-based ĐApps will continue to grow. At <a target="_blank" href="https://www.textile.io/">Textile</a>, we’d really like to support a community of ĐApps around IPFS, so if you decide to use our template, let us know, and we’d be happy to add a link to <a target="_blank" href="https://github.com/textileio/dapp-template/blob/master/README.md">our template repo</a>. We’ll also keep an eye out for forks and try to promote them as best we can.</p>
<p>We hope you enjoyed our quick introduction to ĐApps on IPFS. If you enjoyed this, come <a target="_blank" href="https://www.textile.photos/">check us out</a> and learn more about what we’re up to. While you’re at it, jump on the <a target="_blank" href="https://www.producthunt.com/upcoming/textile-photos">Textile Photos waitlist</a> to request early access to a whole new way to control your photos, that also runs on IPFS and the permanent web.</p>
 ]]>
                </content:encoded>
            </item>
        
    </channel>
</rss>
