<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Subroto Kumar</title>
    <description>The latest articles on Forem by Subroto Kumar (@subrotokumar).</description>
    <link>https://forem.com/subrotokumar</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F829928%2Fb6a2e7f5-c303-4d1c-a020-6dc30320e13b.jpg</url>
      <title>Forem: Subroto Kumar</title>
      <link>https://forem.com/subrotokumar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/subrotokumar"/>
    <language>en</language>
    <item>
      <title>How To Deploy A Smart Contract On Blockchain Using Python</title>
      <dc:creator>Subroto Kumar</dc:creator>
      <pubDate>Mon, 23 May 2022 16:41:09 +0000</pubDate>
      <link>https://forem.com/subrotokumar/how-to-deploy-a-smart-contract-on-blockchain-using-python-3ki4</link>
      <guid>https://forem.com/subrotokumar/how-to-deploy-a-smart-contract-on-blockchain-using-python-3ki4</guid>
      <description>&lt;h2&gt;
  
  
  Dependencies
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Python&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;web3.py :&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Web3.py is a Python library for interacting with Ethereum.  &lt;/p&gt;

&lt;p&gt;It’s commonly found in decentralized apps (dapp) to help with sending transactions, interacting with smart contracts, reading block data, and a variety of other use cases.  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Installation:  &lt;/p&gt;


&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;pip install web3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Py-solc-x | Py-solc :&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Py-solc is a Python wrapper and version management tool for the solc Solidity compiler&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Installation:&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;py-solc-x
&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;



&lt;p&gt;&lt;strong&gt;Ganache UI | Cli&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Installation:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ganache Desktop&lt;/strong&gt;
&lt;a href="https://trufflesuite.com/ganache/" rel="noopener noreferrer"&gt;Download Link&lt;/a&gt;
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw0ajsb3yb2nm8zi0y4bz.png" alt="Ganache UI download website"&gt;

&lt;center&gt; &lt;strong&gt;OR&lt;/strong&gt; &lt;/center&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ganache-cli&lt;/strong&gt; : &lt;code&gt;pip install ganache-cli&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;h2&gt;
  
  
  Lets Get Started
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; Open the directory where you have put your smart contract in the code editor like VSCode.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Create solidity file &lt;code&gt;SmartContractDemo.sol&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// SPDX-License-Identifier: MIT

pragma solidity ^0.6.0;

contract SmartContractDemo {
    struct Person {
        string name;
        string dateOfBirth;
    }

    Person[] public idCard;

    function numberOfEntries() public view returns (uint256) {
        return idCard.length;
    }

    function store(string memory _name, string memory _birthday) public {
        idCard.push(Person(_name, _birthday));
    }

    function changeData(
        uint256 index,
        string memory _name,
        string memory _birthday
    ) public {
        require(index &amp;lt;= numberOfEntries(), "Given index not present");
        idCard[index] = Person(_name, _birthday);
    }

    function retrieve(uint256 index)
        public
        view
        returns (string memory, string memory)
    {
        require(index &amp;lt;= numberOfEntries(), "Given index not present");
        return (idCard[index].name, idCard[index].dateOfBirth);
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Next create a python file &lt;code&gt;deploy.py&lt;/code&gt;. Here, we write the code required to push our contract to the blockchain.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; First add the below code to import the web3 and py-solc-x in python files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;web3&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Web3&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;solcx&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;compile_standard&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;install_solc&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5.&lt;/strong&gt; Read and store the content of SmartContractDemo.sol in a separate variable:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# extract the content of SmartContractDemo.sol
&lt;/span&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;./SmartContractDemo.sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;smart_contract_demo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;6.&lt;/strong&gt; Run the below code to install solc and compile the solidity code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;install_solc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.6.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Solidity source code
&lt;/span&gt;&lt;span class="n"&gt;compiled_sol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;compile_standard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;language&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Solidity&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sources&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SmartContractDemo.sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;smart_contract_demo_file&lt;/span&gt; &lt;span class="p"&gt;}},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;settings&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outputSelection&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;abi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;evm.bytecode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;evm.sourceMap&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;solc_version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.6.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;7.&lt;/strong&gt; The below code will put in the compiled_code as a new JSON file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;compiled_code.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;compiled_sol&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;8.&lt;/strong&gt; Now before we deploy this contract, we need &lt;strong&gt;abi&lt;/strong&gt; and &lt;strong&gt;bytecode&lt;/strong&gt; first which we can get from compiled_code. This can be achieved by using this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# get abi
&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;compiled_sol&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;contracts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SmartContractDemo.sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SmartContractDemo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;abi&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# bytecode
&lt;/span&gt;&lt;span class="n"&gt;bytecode&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;compiled_sol&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;contracts&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SmartContractDemo.sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SmartContractDemo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;evm&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bytecode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;object]
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;9.&lt;/strong&gt; Connecting to Ganache:&lt;br&gt;&lt;br&gt;
To connect with ganache, we need an HTTP Provider URL, chain-id, the public key &amp;amp; private key which will be going to be used for deploying our smart contract.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;How to  get HTTP provider, chain-id, the public and private key of Transaction account&lt;/em&gt;:&lt;br&gt;&lt;br&gt;
&lt;strong&gt;If you are using Ganache UI&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Step 1: Open Ganache App.&lt;br&gt;&lt;br&gt;
Step 2: Click on the Quickstart button.&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653219298305%2Fj5c2PnhlU.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653219298305%2Fj5c2PnhlU.png" alt="Ganche-ui starting page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653239135747%2FfW2UMcrUo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653239135747%2FfW2UMcrUo.jpg" alt="ganche-cli overview.jpg"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
This is what Ganache-UI looks like were  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;White&lt;/strong&gt;-outlined box give us the &lt;strong&gt;RPC server&lt;/strong&gt; i.e., &lt;code&gt;http://127.0.0.1:7545&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Yellow&lt;/strong&gt;-outlined box give us &lt;strong&gt;chain_id&lt;/strong&gt; i.e, &lt;code&gt;5777&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Red&lt;/strong&gt;-outlined box marks the public key of the account e.g., &lt;code&gt;0xE1584b4d8f1b0CeEF97190B296DaF446674A3d63&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Blue&lt;/strong&gt;-outlined box point to the button will show the private key associated with the given account
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;or&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you are using Ganache-CLI&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Step 1: Open a terminal and then run the given command: &lt;code&gt;ganache-cli&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
This will launch the ganache-cli terminal. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653242527813%2FJDwN-Y3mB.png%2520align%3D" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653242527813%2FJDwN-Y3mB.png%2520align%3D" alt="image.png"&gt;&lt;/a&gt;    &lt;/p&gt;

&lt;p&gt;Step 2: Copy and note the public key and private key associated with any account, clain-id, and RPC server url which is &lt;code&gt;http://127.0.0.1:8545&lt;/code&gt; in my case.   &lt;/p&gt;
&lt;h3&gt;
  
  
  Important Note:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Accounts provided in the Ganache are only meant for development and testing purposes. Please, don't try to do actual transactions.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private keys&lt;/strong&gt; are highly confidential. So, keep your private keys safe. It allows the user to access the wallet.
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;10.&lt;/strong&gt; Managing private key&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Adding private key:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Even if we are just using the private key associated with ganache, for best practice we should always avoid hard coding private key in our coding.&lt;br&gt;&lt;br&gt;
So, to store the private key, we will add it as an environment variable and extract it in our python program &lt;code&gt;deploy.py&lt;/code&gt; using &lt;strong&gt;OS module&lt;/strong&gt;.  &lt;/p&gt;

&lt;p&gt;To do so :  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inside same directory, add a file &lt;code&gt;.env&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Open &lt;code&gt;.env&lt;/code&gt; file and write: &lt;code&gt;export $PRIVATE_KEY=&amp;lt;put your private key here&amp;gt;&lt;/code&gt;
e.g.,
![[Pasted image 20220523145104.png]]&lt;/li&gt;
&lt;li&gt;Head back to &lt;code&gt;deploy.py&lt;/code&gt; and import these module at the top:
![[Pasted image 20220523145413.png]]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;11.&lt;/strong&gt;  Go back to our &lt;code&gt;deploy.py&lt;/code&gt; and connect it with ganache.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Connecting to ganache
&lt;/span&gt;&lt;span class="n"&gt;w3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Web3&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Web3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;HTTPProvider&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;http://127.0.0.1:8545&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;chain_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;5777&lt;/span&gt;
&lt;span class="n"&gt;my_address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0xE1584b4d8f1b0CeEF97190B296DaF446674A3d63&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;private_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;PRIVATE_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;12.&lt;/strong&gt; Now let's create the contract in python and get the latest transaction.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Creating contract in python
&lt;/span&gt;&lt;span class="n"&gt;SmartContractDemo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;bytecode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;bytecode&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Get the latest transaction
&lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SmartContractDemo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;constructor&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;buildTransaction&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chainId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;chain_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gasPrice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gas_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;my_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nonce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;13.&lt;/strong&gt; Finally, let's sign our transaction and deploy it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Sign the transaction
&lt;/span&gt;&lt;span class="n"&gt;signed_txn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;transaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;private_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;private_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Deploying Contract!&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# Sent it
&lt;/span&gt;&lt;span class="n"&gt;tx_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_raw_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signed_txn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rawTransaction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Wait for the transaction to be mined, and get the transaction receipt
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Waiting for Transaction to finish...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tx_receipt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait_for_transaction_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tx_hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Done! Contract Deployed to &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tx_receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;contractAddress&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Well done! We have successfully learned to deploy Smart Contract to the local blockchain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Interacting with our smart contract
&lt;/h2&gt;

&lt;p&gt;There are two types of Interaction one can make with a Smart Contract: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Call -&amp;gt; Simulate making the call and getting a return value&lt;/li&gt;
&lt;li&gt;Transact -&amp;gt; Actually make a state change &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let's perform both the interaction with our smart contract :&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.&lt;/strong&gt; To call a public function &lt;code&gt;numberOfEnteries()&lt;/code&gt;from SmartContractDemo, go back to &lt;code&gt;deploy.py&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Working with the contracts
&lt;/span&gt;&lt;span class="n"&gt;smart_contract_demo&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;contract&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;address&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;tx_receipt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;contractAddress&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;abi&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Number of Enteries in idCard array is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;smart_contract_demo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numberOfEnteries&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2.&lt;/strong&gt; Now a state change by adding a data to the &lt;code&gt;idCard&lt;/code&gt; array using the function &lt;code&gt;store()&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;store_transaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;smart_contract_demo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;store&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Naruto&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;10-10-1999&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;buildTransaction&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;chainId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;chain_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gasPrice&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;gas_price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;from&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;my_address&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;nonce&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;nonce&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="n"&gt;signed_store_txn&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;account&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sign_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;store_transaction&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;private_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;private_key&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;signed_store_hash&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send_raw_transaction&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signed_store_txn&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rawTransaction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;tx_receipt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;w3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eth&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait_for_transaction_receipt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;signed_store_hash&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Whenever we make a state change, the transaction has to be signed first with our private key.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt;&lt;br&gt;
Calling a view or pure public function doesn't cost anything.&lt;br&gt;
Whereas deploying a smart contract and making a function call that changes the state of the blockchain cost some amount of GAS Fees.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;3.&lt;/strong&gt; Finally, finish it by again calling &lt;code&gt;numberOfEnteries()&lt;/code&gt; function and retrieve() function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Number of Enteries in idCard array is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;smart_contract_demo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;numberOfEnteries&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Person at 0th index in idCard array is &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;smart_contract_demo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;functions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;idCard&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4.&lt;/strong&gt; Now run the &lt;code&gt;deploy.py&lt;/code&gt; file (run via terminal: &lt;code&gt;python ./deploy.py&lt;/code&gt;).  &lt;/p&gt;

&lt;h3&gt;
  
  
  OUTPUT:
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653304572841%2FXyQkjwczs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653304572841%2FXyQkjwczs.png" alt="image.png"&gt;&lt;/a&gt;&lt;br&gt;
Now, if we check the ganache-cli, we can find two transaction records there,&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The First transaction is about contract creation.
&lt;/li&gt;
&lt;li&gt;The Second transaction is made we call the store function to add Personal detail to idCard array.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653304828568%2Fepc5Rsj43n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.hashnode.com%2Fres%2Fhashnode%2Fimage%2Fupload%2Fv1653304828568%2Fepc5Rsj43n.png" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Resource Link
&lt;/h2&gt;

&lt;p&gt;Project Link:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href="https://github.com/subrotokumar/SmartContractDemo" rel="noopener noreferrer"&gt;https://github.com/subrotokumar/SmartContractDemo&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Documentation: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;web3.py : &lt;a href="https://web3py.readthedocs.io/en/stable/" rel="noopener noreferrer"&gt;https://web3py.readthedocs.io/en/stable/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;py-solc-x : &lt;a href="https://solcx.readthedocs.io/en/latest/" rel="noopener noreferrer"&gt;https://solcx.readthedocs.io/en/latest/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://subrotokumar.bio.link" rel="noopener noreferrer"&gt;CONNECT WITH ME&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;I hope you have found this article helpful. Thank you for reading!&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
      <category>solidity</category>
      <category>python</category>
    </item>
    <item>
      <title>How to setup WSL2 and run Linux GUI apps in Windows operating system</title>
      <dc:creator>Subroto Kumar</dc:creator>
      <pubDate>Fri, 01 Apr 2022 18:25:24 +0000</pubDate>
      <link>https://forem.com/subrotokumar/how-to-setup-wsl2-in-windows-operating-system-41n9</link>
      <guid>https://forem.com/subrotokumar/how-to-setup-wsl2-in-windows-operating-system-41n9</guid>
      <description>&lt;p&gt;Windows Subsystem for Linux (WSL) is a Windows tool that allows developers run a GNU/Linux environment, install packages from the Ubuntu and other Linux archive, and run Linux applications and workflows directly on Windows, unmodified, without the overhead of a traditional virtual machine or dual-boot setup.&lt;/p&gt;

&lt;h1&gt;
  
  
  Installing WSL2
&lt;/h1&gt;

&lt;p&gt;There are two ways by which we can install wsl2 in windows operating system and this depends on your windows version and build number.&lt;br&gt;
To check your windows version:&lt;/p&gt;

&lt;p&gt;Press WIN + R , type &lt;strong&gt;winver&lt;/strong&gt; and then press ENTER .&lt;/p&gt;
&lt;h2&gt;
  
  
  First Method (Easy Method)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt; : You must be running Windows 10 version 2004 and higher (Build 19041 and higher) or Windows 11.&lt;/p&gt;

&lt;p&gt;1. First we have to open a command prompt with administrator privileges.&lt;br&gt;&lt;br&gt;
Select Start, type &lt;strong&gt;PowerShell&lt;/strong&gt;, right-click &lt;strong&gt;Windows PowerShell&lt;/strong&gt;, and then select &lt;strong&gt;Run as administrator&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvb3k4x347cnfkn9ju3mn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvb3k4x347cnfkn9ju3mn.png" alt="step 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2. Run this command : &lt;code&gt;wsl --install&lt;/code&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7e3zhqzxc31oqzxnjk8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq7e3zhqzxc31oqzxnjk8.png" alt="Image description"&gt;&lt;/a&gt;&lt;br&gt;&lt;br&gt;
This command will enable the required components, download the latest Linux kernal, set WSL 2 as default and install a Ubuntu (by default) distribution.&lt;br&gt;
Only thing your have to do now is to set new Username and Password for your newly installed Ubuntu. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This above command will only works if you are installing WSL for first time and WSL is not installed at your PC at all. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If this method don't work for you then follow the next step.&lt;/p&gt;

&lt;p&gt;3. Check the list of available Linux distributins available to download from the online store. To do so, run this command :&lt;br&gt;
&lt;code&gt;wsl --list --online&lt;/code&gt; or &lt;code&gt;wsl -l -o&lt;/code&gt; .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Few6vwfr86r3ctzn7lkx8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Few6vwfr86r3ctzn7lkx8.png" alt="list of linux distro"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4. Run this command to install your desired Linux Distribution: &lt;code&gt;wsl --install -d &amp;lt;Distribution name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here : &lt;code&gt;&amp;lt;Distribution name&amp;gt;&lt;/code&gt; should be same as one that   one mention in &lt;strong&gt;NAME&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;For example, suppose I want to install Debian then i have to run this command : &lt;code&gt;wsl --install -d Debian&lt;/code&gt;&lt;br&gt;&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkoegyxe1aaemmz09v0si.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkoegyxe1aaemmz09v0si.png" alt="wsl --install -d Debian"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;5. Once the WSL install is completed your will need to set &lt;strong&gt;user account&lt;/strong&gt; and &lt;strong&gt;password&lt;/strong&gt; for your newly install Linux distribution.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bkd9lstgwcuwkg5ni4l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6bkd9lstgwcuwkg5ni4l.png" alt="setting user profile"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once everything is all done, close the terminal.&lt;br&gt;
To open the installed Linux Distribution: &lt;br&gt;
Select Start, type &lt;strong&gt;&lt;/strong&gt;, and then Select  and Run.&lt;/p&gt;


&lt;h2&gt;
  
  
  Second Method (Manual Method)
&lt;/h2&gt;

&lt;p&gt;This method is more those computer which are running an older build of windows.&lt;/p&gt;

&lt;p&gt;Step 1: Open PowerShell as Administrator (Start menu &amp;gt; PowerShell &amp;gt; right-click &amp;gt; Run as Administrator) and run this command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;dism.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/online&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/enable-feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/featurename:Microsoft-Windows-Subsystem-Linux&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/norestart&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will enable the Windows System for Linux feature.&lt;/p&gt;

&lt;p&gt;Step 2 : Enable Virtual Machine feature by running this command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;dism.exe&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/online&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/enable-feature&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/featurename:Microsoft-Windows-Subsystem-Linux&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/all&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;/norestart&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3 : Restart the system and then run this command in PowerShell as Administrator.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;wsl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--set-deafult-version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4 : &lt;strong&gt;Installing a Linux Distribution for your choice&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Open the Microsoft Store&lt;a href="https://aka.ms/wslstore" rel="noopener noreferrer"&gt;&lt;/a&gt; and select your favorite Linux Distribution. Here are following links for distribution available in Microsoft Store.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9N9TNGVNDL3Q" rel="noopener noreferrer"&gt;Ubuntu 18.04 LTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9n6svws3rx71" rel="noopener noreferrer"&gt;Ubuntu 20.04 LTS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9NJFZK00FGKV" rel="noopener noreferrer"&gt;openSUSE Leap 15.1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9MZ3D1TRP8T1" rel="noopener noreferrer"&gt;SUSE Linux Enterprise Server 12 SP5&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9PN498VPMF3Z" rel="noopener noreferrer"&gt;SUSE Linux Enterprise Server 12 SP1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9PKR34TNCV07" rel="noopener noreferrer"&gt;Kali Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9MSVKQC78PK6" rel="noopener noreferrer"&gt;Debian GNU/Linux&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9n6gdm4k2hnc" rel="noopener noreferrer"&gt;Fedora Remix for WSL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9NV1GV1PXZ6P" rel="noopener noreferrer"&gt;Pengwin&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9N8LP0X93VCP" rel="noopener noreferrer"&gt;Pengwin Enterprice&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9p804crf0395" rel="noopener noreferrer"&gt;Alpine WSL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.microsoft.com/store/apps/9msmjqd017x7" rel="noopener noreferrer"&gt;Raft&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxtll5yovowop73u9kmsg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxtll5yovowop73u9kmsg.png" alt="UBUNTU"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 5 : Once the Linux distribution of your choice is downloaded from Microsoft office. Open  a newly installed Linux distribution, this will take you to Terminal window where rest of the installation will finish. This process will take a few minutes.&lt;/p&gt;

&lt;p&gt;You will then need to create a user account and password for your new Linux distribution.&lt;/p&gt;

&lt;p&gt;With this, You have successfully set up WSL2 in your windows machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Extra
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;To check list of all Linux Distribution and check which version for WSL it is running.&lt;/strong&gt;&lt;br&gt;
Use this command in PowerShell : &lt;code&gt;wsl -l -v&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;To update from WSL 1 to WSL 2 on previously installed Linux distributions&lt;/strong&gt;&lt;br&gt;
Use this command : &lt;code&gt;wsl --set-version &amp;lt;distro name&amp;gt; 2&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;To set the default Linux Distribution&lt;/strong&gt;&lt;br&gt;
Use this command : &lt;code&gt;wsl -s &amp;lt;DistributionName&amp;gt;&lt;/code&gt; or &lt;code&gt;wsl --setdefault &amp;lt;DistributionName&amp;gt;&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Run Linux GUI Apps
&lt;/h2&gt;

&lt;p&gt;Prerequisites : &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows 11 Build 22000 or higher&lt;/li&gt;
&lt;li&gt;Installed driver for vGPU&lt;/li&gt;
&lt;li&gt;Linux GUI apps are only supported with WSL 2 &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you just set-up WSL by using above methods, you're already ready to begin using Linux GUI apps on WSL!&lt;/p&gt;

&lt;blockquote&gt;
&lt;h4&gt;
  
  
  For Existing WSL install
&lt;/h4&gt;

&lt;p&gt;1. Open a command prompt/PowerShell as administrator.&lt;br&gt;
2. Update the WSL&lt;/p&gt;


&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;wsl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--update&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;3. Shutdown the WSL by running this command&lt;/p&gt;


&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="n"&gt;wsl&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;--shutdown&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/blockquote&gt;




&lt;h4&gt;
  
  
  Update the packages in your distribution
&lt;/h4&gt;

&lt;p&gt;Run this command :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt update
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Installing and running GUI-Apps in your distribution
&lt;/h4&gt;

&lt;p&gt;Command for installing a package : &lt;code&gt;sudo apt install &amp;lt;package-name&amp;gt;&lt;/code&gt;&lt;br&gt;
Command to launch the package : &lt;code&gt;&amp;lt;package name&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Now, lets install and launch Firefox. To do so, use this command &lt;code&gt;sudo apt install firefox&lt;/code&gt;&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;apt &lt;span class="nb"&gt;install &lt;/span&gt;firefox
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;This may some time depending upon your Internet Speed.&lt;/p&gt;


&lt;pre class="highlight shell"&gt;&lt;code&gt;firefox
&lt;/code&gt;&lt;/pre&gt;


&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fph27rciwblv0ydwww611.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fph27rciwblv0ydwww611.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Thank you being with me and reading my article. If you like my post, follow me on Dev.to and do connect with me on &lt;a href="https://www.linkedin.com/in/kumarsubroto" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://www.github.com/subrotokumar" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is Markdown and how you can use it to write README.md file for your GitHub project?</title>
      <dc:creator>Subroto Kumar</dc:creator>
      <pubDate>Sun, 13 Mar 2022 18:04:18 +0000</pubDate>
      <link>https://forem.com/subrotokumar/what-is-markdown-and-how-you-can-use-it-to-write-readmemd-file-for-your-github-project-56d5</link>
      <guid>https://forem.com/subrotokumar/what-is-markdown-and-how-you-can-use-it-to-write-readmemd-file-for-your-github-project-56d5</guid>
      <description>&lt;p&gt;Markdown is a lightweight markup language that allows us to write in easy-to-read text format and convert it into XHTML (or HTML) to display in a browser or another writing program.&lt;/p&gt;




&lt;h2&gt;
  
  
  Paragraph
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit,
sed do eiusmod tempor incididunt ut
labore et dolore magna aliqua.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.&lt;/p&gt;




&lt;h2&gt;
  
  
  Line-Break
&lt;/h2&gt;

&lt;p&gt;To insert a line break into your Markdown file, finish your line with at least two spaces and press ENTER key. It will render a new line for your text.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hey there  
I'm a coder.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;Hey there&lt;br&gt;
I'm a coder.&lt;/p&gt;


&lt;h2&gt;
  
  
  Text Formatting
&lt;/h2&gt;
&lt;h4&gt;
  
  
  1. Using Italics in text
&lt;/h4&gt;

&lt;p&gt;To use Italics in text, surround the targeted part of text with single asterisks (*) or single underscores (_).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This is *Morax*.
I'm a _programmer_.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;This is &lt;em&gt;Morax&lt;/em&gt;.&lt;br&gt;
I'm a &lt;em&gt;programmer&lt;/em&gt;.&lt;/p&gt;


&lt;h4&gt;
  
  
  2. Using Bold in text
&lt;/h4&gt;

&lt;p&gt;Bold text is created by using two asterisks (**) or two underscores (__).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This is **Morax**.
I'm a __programmer__.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;This is &lt;strong&gt;Morax&lt;/strong&gt;.&lt;br&gt;
I'm a &lt;strong&gt;programmer&lt;/strong&gt;.&lt;/p&gt;


&lt;h4&gt;
  
  
  3. Using Asterisk or Underscore in a Text
&lt;/h4&gt;

&lt;p&gt;To use a literal asterisk or Underscore in a text, precede it with an escape character backslash ()&lt;br&gt;
e.g.,&lt;br&gt;
&lt;code&gt;\_This is all \*\*plain\*\* text\_.&lt;/code&gt;&lt;/p&gt;
&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;_This is all **plain** text_.&lt;/p&gt;


&lt;h4&gt;
  
  
  Horizontal Line
&lt;/h4&gt;

&lt;p&gt;To draw Horizontal rule, put three or more hyphens (-), asterisks (*), or underscores (_) in a new line.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;_ _ _
* * *
_ _ _
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P47b0MXx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/egzujvu88opuzzzvawj7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P47b0MXx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/egzujvu88opuzzzvawj7.jpeg" alt="Image description" width="724" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Heading
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# Heading 1
## Heading 2
### Heading 3
#### Heading 4
##### Heading 5
###### Heading 6
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;h1&gt;
  
  
  Heading 1
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Heading 2
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Heading 3
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Heading 4
&lt;/h4&gt;

&lt;h5&gt;
  
  
  Heading 5
&lt;/h5&gt;

&lt;h6&gt;
  
  
  Heading 6
&lt;/h6&gt;




&lt;h2&gt;
  
  
  Making List
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Ordered List
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1. Java
2. Python
3. Go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;ol&gt;
&lt;li&gt;Java&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;/ol&gt;

&lt;h4&gt;
  
  
  Unordered List
&lt;/h4&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Java
  - Core Java
  - Advance Java
- Python
- Go
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;ul&gt;
&lt;li&gt;Java

&lt;ul&gt;
&lt;li&gt;Core Java&lt;/li&gt;
&lt;li&gt;Advance Java&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Python&lt;/li&gt;
&lt;li&gt;Go&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tracking task lists
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- [x] Windows
- [x] Linux
- [ ] MacOS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GZ3xjd9P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x1ez64itgkstq7kzzkq9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GZ3xjd9P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x1ez64itgkstq7kzzkq9.jpeg" alt="Image description" width="739" height="121"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Building Table
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Language | Use 1 | Use 2
&lt;span class="p"&gt;-&lt;/span&gt; | - | -
Java | Mobile App Development | Cloud-based Application
Python | AL &amp;amp; ML | Data analytics
C# | Game Development | Mobile Apps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Language&lt;/th&gt;
&lt;th&gt;Use 1&lt;/th&gt;
&lt;th&gt;Use 2&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Java&lt;/td&gt;
&lt;td&gt;Mobile App Development&lt;/td&gt;
&lt;td&gt;Cloud-based Application&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;AL &amp;amp; ML&lt;/td&gt;
&lt;td&gt;Data analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;C#&lt;/td&gt;
&lt;td&gt;Game Development&lt;/td&gt;
&lt;td&gt;Mobile Apps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Quoting Text
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; "If you don't take risks, you can't create a future!" - Monkey D. Luffy`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;blockquote&gt;
&lt;p&gt;"If you don't take risks, you can't create a future!" - Monkey D. Luffy&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gt"&gt;&amp;gt; I’ll leave tomorrow’s problems to tomorrow’s me.” – Saitama&lt;/span&gt;
&lt;span class="gt"&gt;&amp;gt; “Being weak is nothing to be ashamed of… Staying weak is !!“ – Fuegoleon Vermillion&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;blockquote&gt;
&lt;p&gt;I’ll leave tomorrow’s problems to tomorrow’s me.” – Saitama&lt;br&gt;
“Being weak is nothing to be ashamed of… Staying weak is !!“ – Fuegoleon Vermillion&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Link and Image
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Using Image
&lt;/h4&gt;

&lt;h6&gt;
  
  
  Syntax:
&lt;/h6&gt;

&lt;p&gt;&lt;code&gt;![Image_discription](image-url)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;![Picture](https://images.unsplash.com/photo-1496065187959-7f07b8353c55?ixlib=rb-1.2.1&amp;amp;ixid=MnwxMjA3fDB8MHxzZWFyY2h8MTJ8fHRlY2hub2xvZ3l8ZW58MHx8MHx8&amp;amp;auto=format&amp;amp;fit=crop&amp;amp;w=500&amp;amp;q=60)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--00Og_dtX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1496065187959-7f07b8353c55%3Fixlib%3Drb-1.2.1%26ixid%3DMnwxMjA3fDB8MHxzZWFyY2h8MTJ8fHRlY2hub2xvZ3l8ZW58MHx8MHx8%26auto%3Dformat%26fit%3Dcrop%26w%3D500%26q%3D60" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--00Og_dtX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://images.unsplash.com/photo-1496065187959-7f07b8353c55%3Fixlib%3Drb-1.2.1%26ixid%3DMnwxMjA3fDB8MHxzZWFyY2h8MTJ8fHRlY2hub2xvZ3l8ZW58MHx8MHx8%26auto%3Dformat%26fit%3Dcrop%26w%3D500%26q%3D60" alt="Picture" width="500" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Using Link
&lt;/h4&gt;

&lt;h6&gt;
  
  
  Syntax:
&lt;/h6&gt;

&lt;p&gt;&lt;code&gt;[Link-text](url)&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[My Linkedin](https://www.linkedin.com/in/kumarsubroto)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/kumarsubroto"&gt;My Linkedin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Code snippets
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;This is `code`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Output:
&lt;/h4&gt;

&lt;p&gt;This is &lt;code&gt;code&lt;/code&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Code Blocks
&lt;/h2&gt;

&lt;h6&gt;
  
  
  Syntax:
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8vSqtRVM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31428wtgxb7xhs3uwtdc.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8vSqtRVM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/31428wtgxb7xhs3uwtdc.jpeg" alt="Image description" width="626" height="195"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XMMVzRIi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6j3w5mx1r7c87oqcbm6.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XMMVzRIi--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k6j3w5mx1r7c87oqcbm6.jpeg" alt="Image description" width="746" height="210"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h6&gt;
  
  
  Syntax:
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vnL6pKOS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0orgbexls0win6ac59bo.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vnL6pKOS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0orgbexls0win6ac59bo.jpeg" alt="Image description" width="603" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  Output:
&lt;/h6&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Z72YWux0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bij1a77oj30b00rooegb.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Z72YWux0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bij1a77oj30b00rooegb.jpeg" alt="Image description" width="703" height="165"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Extra-Resources
&lt;/h2&gt;

&lt;h4&gt;
  
  
  &lt;a href="https://gist.github.com/rxaviers/7360908"&gt;Github Markdown Emoji&lt;/a&gt;
&lt;/h4&gt;

&lt;p&gt;Thank you being with me and reading my article. If you like my post, follow me on Dev.to and do connect with me on &lt;a href="https://www.linkedin.com/in/kumarsubroto"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://www.github.com/subrotokumar"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>github</category>
      <category>markdown</category>
      <category>readme</category>
    </item>
  </channel>
</rss>
