<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Harini Priya K</title>
        <link>https://paragraph.com/@harini-priya-k</link>
        <description>Full Stack Developer</description>
        <lastBuildDate>Sat, 01 Aug 2026 11:57:16 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Harini Priya K</title>
            <url>https://storage.googleapis.com/papyrus_images/70f1b838519a1ba7f0b37edce008f69a4c4bd4d66f5271db549217955cdccd69.jpg</url>
            <link>https://paragraph.com/@harini-priya-k</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[From Zero to Web3: Harini’s Ethereum Series - Part 9]]></title>
            <link>https://paragraph.com/@harini-priya-k/from-zero-to-web3-harinis-ethereum-series-part-9</link>
            <guid>sAknRbWfjkJMzKwZDdq7</guid>
            <pubDate>Thu, 08 Jan 2026 12:14:55 GMT</pubDate>
            <description><![CDATA[Ethereum is secure and decentralized — but why does it still feel slow and expensive?

In Part 9 of Harini’s Ethereum Series, we dive into Layer 2 scaling and uncover how rollups help Ethereum process transactions faster and cheaper without sacrificing security. Learn why Layer 2 exists, how Optimistic and ZK Rollups work, and how Ethereum’s rollup-centric future is shaping Web3 at scale.
Ethereum isn’t slow — it’s scaling smart.]]></description>
            <content:encoded><![CDATA[<p>Welcome back to <strong>Web3 Developer Docs!</strong></p><p>In <strong>Part</strong> 8, you <strong>explored</strong> how Ethereum reaches <strong>consensus</strong> using<strong> a</strong> Proof of Stake<strong> model, and how the interaction of Validators</strong>, slots, epochs and finality secure the<strong> Ethereum</strong> network.<strong> </strong><br></p><p>But here’s the big question:</p><blockquote><p>If Ethereum is secure and <strong>decentralised,</strong> why <strong>are</strong> <strong>there</strong> <strong>times</strong> <strong>when the network feels</strong> slow and expensive?<strong> </strong></p></blockquote><p>The answer to this question can be found in <strong>the</strong> <strong>concept</strong> <strong>of</strong> <strong>scalability</strong> <strong>and</strong> that’s where <strong>Layer 2 </strong>solutions come in.<br></p><p>By the end of this guide, you’ll understand:</p><ul><li><p>Why Ethereum <strong>Needs</strong> Layer 2 <strong>Scaling?</strong></p></li><li><p><strong> </strong>What <strong>L2</strong> <strong>Actually</strong> <strong>Means ?</strong></p></li><li><p>How <strong>Rollups</strong> <strong>Work </strong>the <strong>Differences</strong> <strong>Between</strong> Optimistic and ZK Rollups?<strong> </strong></p></li><li><p>How Ethereum <strong>and</strong> <strong>Layer</strong> <strong>2s</strong> <strong>Work</strong> <strong>Together</strong> <strong>As</strong> <strong>One System ?</strong></p></li><li><p>Why Ethereum Needs Scaling<strong>?</strong><br></p></li></ul><hr><h2 id="h-why-ethereum-needs-scaling" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Why Ethereum Needs Scaling</strong></h2><p>The Ethereum Network has a focus on the following: </p><ul><li><p><strong>Security</strong></p></li><li><p><strong>Decentralization</strong></p></li></ul><p>However, this focus on security and decentralisation means that: </p><ul><li><p><strong>The number of</strong> transactions <strong>processed on the Ethereum network each</strong> second<strong> is limited. </strong><br></p></li><li><p><strong>As traffic increases, the amount of</strong> gas <strong>paid</strong> <strong>per</strong> <strong>transaction will also increase. </strong><br></p></li></ul><blockquote><p>This is <strong>referred to</strong> as the Blockchain Trilemma<strong>,</strong> <strong>which</strong> <strong>means</strong> <strong>that a network on a single layer cannot be at its most secure</strong>, <strong>decentralised</strong>, and <strong>scalable</strong> all at <strong>the</strong> <strong>same</strong> <strong>time</strong>.</p><p><strong>Due</strong> <strong>to</strong> <strong>this</strong> <strong>issue</strong>, the <strong>Ethereum</strong> <strong>Ecosystem worked to create</strong> a <strong>better</strong> <strong>solution to scaling</strong> Ethereum without <strong>destroying</strong> <strong>the foundation of Ethereum</strong>.</p></blockquote><hr><h2 id="h-what-is-layer-2" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>What Is Layer 2?</strong></h2><p>Layer 2 (L2) is a <strong>separate</strong> <strong>system</strong> on top of<strong> the</strong> Ethereum <strong>Network which</strong>:<strong> </strong><br></p><ul><li><p>Executes transactions <strong>off-chain</strong></p></li><li><p>Uses Ethereum Layer 1<strong> as the source of truth</strong> for<strong> the commitment to</strong> security and <strong>the</strong> settlement<strong> of final balances</strong></p></li></ul><br>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0757303b4f66c50cbae17ab9ee50e4c7e27cc247489df9b68aec47c18f76df3b.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From Zero to Web3: Harini’s Ethereum Series - Part 8]]></title>
            <link>https://paragraph.com/@harini-priya-k/from-zero-to-web3-harini-s-ethereum-series-part-8</link>
            <guid>015JJxZKNYu3ykHcNwZ4</guid>
            <pubDate>Tue, 28 Oct 2025 16:56:43 GMT</pubDate>
            <description><![CDATA[Welcome back to Web3 Developer Docs! In Part 7, you explored how Ethereum keeps and modifies data through accounts, transactions, and state.Now, let’s uncover how the entire network agrees on those updates — without a central authority. By the end of this guide, you’ll know:What the Consensus Layer is and how it differs from the Execution LayerHow Proof of Stake replaced Proof of WorkThe roles of validators, slots, and epochsWhat happens during block proposals, attestations, and finalizationH...]]></description>
            <content:encoded><![CDATA[<p><strong>Welcome back to Web3 Developer Docs!</strong></p><p>In Part 7, you explored how Ethereum keeps and modifies data through accounts, transactions, and state.Now, let’s uncover <em>how the entire network agrees</em> on those updates — without a central authority.</p><p>By the end of this guide, you’ll know:</p><ul><li><p>What the Consensus Layer is and how it differs from the Execution Layer</p></li><li><p>How Proof of Stake replaced Proof of Work</p></li><li><p>The roles of validators, slots, and epochs</p></li><li><p>What happens during block proposals, attestations, and finalization</p></li><li><p>How fork choice and finality keep Ethereum secure</p></li></ul><hr><h2 id="h-ethereums-two-layers" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Ethereum’s Two Layers</strong></h2><p>Ethereum operates through two tightly linked layers:</p><ul><li><p><strong>Execution Layer (EL):</strong> The EVM, transactions, and state changes</p></li><li><p><strong>Consensus Layer (CL):</strong> Coordination and agreement on which state is valid</p></li></ul><p>Together, these form the post-Merge architecture of modern Ethereum (2022).</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/5117e49a4884d439e6bcf460a4127f70bdd74632882f5e23127edb1804ac6989.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h2 id="h-proof-of-stake-the-heart-of-modern-ethereum" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Proof of Stake — The Heart of Modern Ethereum</strong></h2><ul><li><p><strong>Before 2022</strong>, Ethereum used <strong>Proof of Work (PoW)</strong>.</p></li><li><p>In PoW, <strong>miners</strong> solved complex puzzles using powerful computers.</p></li><li><p>The first miner to solve the puzzle added a new block and earned rewards.</p></li><li><p>This method consumed a <strong>lot of electricity and energy</strong>.</p></li><li><p>After the Merge, Ethereum switched to <strong>Proof of Stake (PoS)</strong>.</p></li><li><p>In PoS, there are no miners — only <strong>validators</strong>.</p></li><li><p>Validators must <strong>stake 32 ETH</strong> to take part in securing the network.</p></li><li><p>They are <strong>chosen randomly</strong> to create and confirm blocks.</p></li><li><p>If they act dishonestly, they can <strong>lose part or all of their staked ETH</strong>.</p></li><li><p>In short:</p><ul><li><p>PoW = <strong>Energy + Machines</strong></p></li><li><p>PoS = <strong>Money + Honesty</strong></p></li></ul></li><li><p>PoS makes Ethereum <strong>faster, cheaper, and more energy-efficient</strong>.</p></li></ul><hr><h2 id="h-validators-slots-and-epochs" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Validators, Slots &amp; Epochs</strong></h2><p>Ethereum divides time into fixed intervals:</p><ul><li><p><strong>Slot = 12 seconds</strong></p></li><li><p><strong>Epoch = 32 slots ≈ 6.4 minutes</strong></p></li></ul><p>Each slot designates <strong>one validator</strong> to propose a block.The remaining validators <strong>attest</strong> (vote) on the block’s validity.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/ae3f8c4a755ad8211c8365f434b05937d9d26582adbfeade188c3a38a57a6fea.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h2 id="h-the-life-cycle-of-a-block" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Life Cycle of a Block</strong></h2><ol><li><p><strong>Propose —</strong> A validator creates a new block.</p></li><li><p><strong>Broadcast —</strong> The block spreads across the network.</p></li><li><p><strong>Attest —</strong> Validators vote on its validity.</p></li><li><p><strong>Include —</strong> Attestations appear in subsequent blocks.</p></li><li><p><strong>Finalize —</strong> After two epochs, the block becomes immutable.</p></li></ol><blockquote><p>“Once finalized, a block is set in stone — rewriting it would require rewriting history.”</p></blockquote><hr><h2 id="h-fork-choice-rule" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Fork Choice Rule</strong></h2><p>Ethereum’s fork-choice algorithm is called <strong>LMD GHOST</strong><em>(Latest Message Driven Greediest Heaviest Observed SubTree).</em></p><blockquote><p>“If two versions of the chain exist, validators stick with the one containing the most attestations — the heaviest chain.”</p></blockquote><hr><h2 id="h-finality-and-checkpoints" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Finality and Checkpoints</strong></h2><p>Each <strong>epoch</strong> has a <strong>checkpoint block</strong>.When two consecutive checkpoints are justified and finalized, <strong>finality</strong> is achieved.</p><p>✅ Once finalized, a block cannot be reverted unless one-third of all validators are slashed — an extremely costly event.</p><hr><h2 id="h-rewards-penalties-and-slashing" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Rewards, Penalties &amp; Slashing</strong></h2><p>The system maintains honesty through incentives:</p><ul><li><p><strong>Rewards:</strong> For proposing and attesting correctly</p></li><li><p><strong>Penalties:</strong> For downtime or missed attestations</p></li><li><p><strong>Slashing:</strong> For double-signing or contradicting votes</p></li></ul><blockquote><p>“Imagine staking like being a referee — you win if you play square, but forfeit your deposit if you cheat.”</p></blockquote><hr><h2 id="h-putting-it-all-together" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Putting It All Together</strong></h2><p><strong>Execution Layer (EVM)</strong> ↔ <strong>Consensus Layer (Validators)</strong> → <strong>Finalized State</strong><em>.</em></p><hr><h2 id="h-summary" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Summary</strong></h2><p>You now know:</p><ul><li><p>How Proof of Stake drives Ethereum’s consensus</p></li><li><p>What validators, slots, and epochs do</p></li><li><p>How attestations and finality keep the chain secure</p></li><li><p>Why PoS is energy-efficient and economically sound</p></li></ul><p>In the next part (Part 9), we’ll explore <strong>Layer 2 scaling</strong> — how rollups and sidechains boost Ethereum’s speed without sacrificing security. ⚡</p>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/91111476675f2af7a1bc520b5187f57400ef98d6c50e0e468746a74bd328d8b8.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From Zero to Web3: Harini’s Ethereum Series - Part 7]]></title>
            <link>https://paragraph.com/@harini-priya-k/from-zero-to-web3-harini-s-ethereum-series-part-7</link>
            <guid>bv54aDEryEihLGb4evSx</guid>
            <pubDate>Thu, 23 Oct 2025 15:07:53 GMT</pubDate>
            <description><![CDATA[IntroductionWelcome back to Web3 Developer Docs! In Part 6, you learned about the Ethereum Virtual Machine (EVM) — the "world computer" that runs each smart contract deterministically. Now, we&apos;ll go one step further and observe what the EVM actually runs on: accounts, transactions, and state. By the end of this guide, you&apos;ll know:How Ethereum stores and keeps track of dataThe two kinds of accounts: user and contractHow transactions cause state changesHow the EVM keeps it all in sync...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Introduction</strong></h2><p>Welcome back to Web3 Developer Docs!</p><p>In Part 6, you learned about the <strong>Ethereum Virtual Machine (EVM)</strong> — the &quot;world computer&quot; that runs each smart contract deterministically.</p><p>Now, we&apos;ll go one step further and observe what the EVM actually runs on: <strong>accounts, transactions, and state.</strong></p><p>By the end of this guide, you&apos;ll know:</p><ul><li><p>How Ethereum stores and keeps track of data</p></li><li><p>The two kinds of accounts: user and contract</p></li><li><p>How transactions cause state changes</p></li><li><p>How the EVM keeps it all in sync across the network</p></li></ul><p>Let&apos;s peel back the data model that makes Ethereum tick. ⚙️</p><hr><h2 id="h-ethereum-as-a-state-machine" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Ethereum as a State Machine</strong></h2><p>Ethereum isn&apos;t merely a transaction ledger — it&apos;s a <strong>state machine.</strong></p><p>A block is a global state of the Ethereum universe, and a new transaction converts that state into a new state.</p><p><strong>Mathematically:</strong></p><pre data-type="codeBlock" text="State(n+1) = StateTransition(State(n), Transaction)
"><code><span class="hljs-built_in">State</span>(n+<span class="hljs-number">1</span>) = <span class="hljs-built_in">StateTransition</span>(State(n), Transaction)
</code></pre><p>That is:</p><ul><li><p>The blockchain&apos;s &quot;memory&quot; advances step by step.</p></li><li><p>Each node in the network executes the same transactions → arrives at the same state.</p></li></ul><hr><h2 id="h-" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"></h2><h3 id="h-account-types" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Account Types</h3><p>There are two types of accounts on Ethereum:</p><p>Type Description Controlled By:</p><ul><li><p><strong>Externally Owned Account (EOA)</strong></p></li><li><p><strong>Regular user accountPrivate key</strong></p><p>The two account types have the same internal structure.</p></li></ul><hr><h2 id="h-account-structure" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Account Structure</strong></h2><p>Every Ethereum account holds:</p><ul><li><p><strong>nonce:</strong> Number of transactions sent (EOA) or contracts deployed (Contract)</p></li><li><p><strong>balance:</strong> Balance of ETH (in wei)</p></li><li><p><strong>storageRoot:</strong> Hash of the contract&apos;s storage data</p></li><li><p><strong>codeHash:</strong> Hash of the contract’s bytecode (empty for EOAs)</p></li></ul><p>This data forms part of the <strong>global state trie</strong> (a cryptographic tree we’ll discuss later).</p><hr><h2 id="h-what-is-a-transaction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>What is a Transaction?</strong></h2><p>A <strong>transaction</strong> is a signed message from an EOA that tells the EVM to do something:</p><ul><li><p>Transfer ETH</p></li><li><p>Deploy a contract</p></li><li><p>Execute a smart contract function</p></li></ul><p>Each transaction changes Ethereum’s state.</p><hr><h2 id="h-transaction-fields" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Transaction Fields</strong></h2><p>A standard Ethereum transaction includes:</p><p>Field Description</p><ul><li><p><strong>nonce -</strong> Sequential number to prevent replay</p></li><li><p><strong>gasPrice -</strong> ETH paid per unit of gas</p></li><li><p><strong>gasLimit -</strong> Maximum gas the sender will pay to spend</p></li><li><p><strong>to -</strong> Recipient address (or empty for contract creation)</p></li><li><p><strong>value -</strong> Value of ETH sent (in wei)</p></li><li><p><strong>data -</strong> Encoded function call or bytecode</p></li><li><p><strong>v, r, s -</strong> Digital signature pieces</p></li></ul><h3 id="h-example-simplified" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Example (Simplified)</strong></h3><pre data-type="codeBlock" text="{
  &quot;nonce&quot;: 1,
  &quot;gasPrice&quot;: &quot;20000000000&quot;,
  &quot;gasLimit&quot;: &quot;21000&quot;,
  &quot;to&quot;: &quot;0x742d35Cc6634C0532925a3b844Bc454e4438f44e&quot;,
  &quot;value&quot;: &quot;1000000000000000000&quot;,
  &quot;data&quot;: &quot;0x&quot;,
  &quot;v&quot;: &quot;0x25&quot;,
  &quot;r&quot;: &quot;0x1c5.&quot;,
  &quot;s&quot;: &quot;0x4a7.&quot;
}
"><code><span class="hljs-punctuation">{</span>
  <span class="hljs-attr">"nonce"</span><span class="hljs-punctuation">:</span> <span class="hljs-number">1</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"gasPrice"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"20000000000"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"gasLimit"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"21000"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"to"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x742d35Cc6634C0532925a3b844Bc454e4438f44e"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"value"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"1000000000000000000"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"data"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"v"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x25"</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"r"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x1c5."</span><span class="hljs-punctuation">,</span>
  <span class="hljs-attr">"s"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"0x4a7."</span>
<span class="hljs-punctuation">}</span>
</code></pre><p>On broadcasting, validators run this transaction through the EVM and store the resultant new state.</p><hr><h2 id="h-lifecycle-of-a-transaction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Lifecycle of a Transaction</strong></h2><ol><li><p><strong>Creation:</strong> The user signs a transaction locally with their private key.</p></li><li><p><strong>Broadcast:</strong> The transaction is broadcasted to the mempool of the network.</p></li><li><p><strong>Validation:</strong> Validators verify signature, nonce, and gas.</p></li><li><p><strong>Execution:</strong> The EVM executes the transaction — updating balances, storage, or deploying contracts.</p></li><li><p><strong>Inclusion:</strong> The transaction is included in a block and becomes part of Ethereum&apos;s permanent state.</p></li></ol><hr><h2 id="h-gas-and-costs-of-execution" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Gas and Costs of Execution</strong></h2><p>Each EVM operation (opcode) burns <strong>gas.</strong></p><ul><li><p><strong>Gas Limit</strong> prevents infinite loops or spam.</p></li><li><p><strong>Gas Price</strong> encourages validators to include your transaction.</p></li></ul><p>When execution drains its gas, the EVM <strong>reverts the state</strong> — but spent gas is still incurred.</p><p>💡 <strong>Tip:</strong> You can calculate gas usage with libraries like <strong>Ethers.js:</strong></p><pre data-type="codeBlock" text="const gasEstimate = await contract.estimateGas.transfer(recipient, amount);
"><code>const gasEstimate <span class="hljs-operator">=</span> await <span class="hljs-keyword">contract</span>.estimateGas.<span class="hljs-built_in">transfer</span>(recipient, amount);
</code></pre><hr><h2 id="h-the-global-state-trie" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Global State Trie</strong></h2><p>Ethereum stores its global state in a <strong>Merkle Patricia Trie (MPT)</strong> — a cryptographic data structure that allows the blockchain to be verifiable.</p><ul><li><p>Every node within the trie corresponds to an account.</p></li><li><p>The root hash of this trie is contained in every block header (<code>stateRoot</code>).</p></li><li><p>Any minor alteration in an account updates the root, assuring integrity.</p></li></ul><p>This implies any Ethereum node has the ability to check the state of the entire blockchain based solely on the root hash.</p><hr><h2 id="h-example-transaction-modifying-state" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Example: Transaction Modifying State</strong></h2><p>Consider an example where a contract modifies its internal variable.</p><h3 id="h-solidity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Solidity</strong></h3><pre data-type="codeBlock" text="// Counter.sol
pragma solidity ^0.8.0;

contract Counter {
    uint256 public count;

    function increment() public {
        count = count + 1;
    }
}
"><code><span class="hljs-comment">// Counter.sol</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.0;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Counter</span> </span>{
    <span class="hljs-keyword">uint256</span> <span class="hljs-keyword">public</span> count;

    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">increment</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        count <span class="hljs-operator">=</span> count <span class="hljs-operator">+</span> <span class="hljs-number">1</span>;
    }
}
</code></pre><h3 id="h-ethersjs-interaction" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Ethers.js Interaction</strong></h3><pre data-type="codeBlock" text="const contract = new ethers.Contract(address, abi, signer);
const tx = await contract.increment();
await tx.wait();
"><code>const <span class="hljs-class"><span class="hljs-keyword">contract</span> = <span class="hljs-title"><span class="hljs-keyword">new</span></span> <span class="hljs-title">ethers</span>.<span class="hljs-title">Contract</span>(<span class="hljs-params"><span class="hljs-keyword">address</span>, <span class="hljs-built_in">abi</span>, signer</span>);
<span class="hljs-title">const</span> <span class="hljs-title"><span class="hljs-built_in">tx</span></span> = <span class="hljs-title">await</span> <span class="hljs-title"><span class="hljs-keyword">contract</span></span>.<span class="hljs-title">increment</span>(<span class="hljs-params"></span>);
<span class="hljs-title">await</span> <span class="hljs-title"><span class="hljs-built_in">tx</span></span>.<span class="hljs-title">wait</span>(<span class="hljs-params"></span>);
</span></code></pre><p><strong>Result:</strong></p><ul><li><p>EVM calls <code>increment()</code></p></li><li><p>Updates <code>count</code> in contract storage</p></li><li><p>Creates a new global state root</p></li></ul><hr><h2 id="h-determinism-and-consensus" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Determinism and Consensus</strong></h2><p>Ethereum&apos;s architecture provides <strong>deterministic execution</strong> — with the same state and transactions, all nodes calculate the same output.</p><p>This achieves:</p><ul><li><p>Global consensus</p></li><li><p>Trustless verification</p></li><li><p>Immutable state transitions</p></li></ul><p>No central authority determines the &quot;truth&quot; — the network as a whole agrees on it.</p><hr><h2 id="h-summary" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Summary</strong></h2><p>You now know:</p><ul><li><p>How Ethereum encodes data in terms of accounts and state</p></li><li><p>How transactions are instructions to change that state</p></li><li><p>How gas provides fairness and security</p></li><li><p>How the Merkle Trie makes global consensus verifiable</p></li></ul><p>In the next part, we’ll dive into <strong>Ethereum’s Consensus Layer</strong> — where validators, staking, and blocks come together to maintain this trustless global state. ⚙️</p>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/e2a9ca3a892f8afaec7a91e8a5effb2b5a496400a4dd01d46c7147eccba87baa.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[My First Experience on Monad: Exploring the Future of Fast Blockchain Transactions]]></title>
            <link>https://paragraph.com/@harini-priya-k/my-first-experience-on-monad-exploring-the-future-of-fast-blockchain-transactions</link>
            <guid>8I2PvEKN21f8UNsNCd85</guid>
            <pubDate>Fri, 17 Oct 2025 15:55:45 GMT</pubDate>
            <description><![CDATA[introductionAs someone already familiar with Web3, I’ve interacted with several blockchains before Ethereum .But this week’s challenge was something new: exploring Monad, a next-generation Layer-1 chain built for speed and scalability. Here’s how I got my hands dirty testing it out on the Monad TestnetStep 1: Setting Up My WalletI already use MetaMask as my primary wallet, so setup was easy.All I had to do was switch my existing wallet to the Monad Testnet using the provided configuration. It...]]></description>
            <content:encoded><![CDATA[<h1 id="h-introduction" class="text-4xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">introduction</h1><p>As someone already familiar with Web3, I’ve interacted with several blockchains before Ethereum .But this week’s challenge was something new: <strong>exploring Monad</strong>, a next-generation Layer-1 chain built for <em>speed and scalability</em>.</p><p>Here’s how I got my hands dirty testing it out on the <strong>Monad Testnet</strong></p><hr><h3 id="h-step-1-setting-up-my-wallet" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step 1: Setting Up My Wallet</h3><p>I already use <strong>MetaMask</strong> as my primary wallet, so setup was easy.All I had to do was switch my existing wallet to the <strong>Monad Testnet</strong> using the provided configuration.</p><p>It was quick, simple, and smooth — exactly what you’d expect from a high-performance blockchain. No complicated steps, no lag — just a seamless transition into a new ecosystem.</p><hr><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"></h3><h3 id="h-step-2-collecting-faucet-tokens-and-making-my-first-monad-transaction" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step 2: Collecting Faucet Tokens &amp; Making My First Monad Transaction</h3><p>After switching to the <strong>Monad Testnet</strong>, the next step was to get some <strong>test tokens</strong> to start experimenting.</p><p>Instead of using the usual faucet, I followed the <strong>Monad101 faucet process</strong>.I opened the faucet link, entered my <strong>email ID</strong>, and received a <strong>one-time password (OTP)</strong> for verification.Once I verified my email, I entered my <strong>MetaMask wallet address</strong>, clicked <strong>Claim</strong>, and successfully received <strong>10 MON tokens</strong> in my wallet.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/76bfc1c42930e5df08372e8cb7d9d8510600e461bc0a0091846cffdf867d775d.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>Once the tokens arrived, I decided to try a transaction.I entered a receiver wallet address, set the amount, and clicked **“Confirm.”**The transaction was processed instantly — and when I checked it on the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.monadexplorer.com/"><strong>Monad Explorer</strong></a>, all the details were there: the sender, receiver, transaction hash, gas fee, and confirmation count.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c5813bb34eb602c4af68d8f5b6003486dc58e658a36ed4aee9f747bcc25e2794.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h3 id="h-" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"></h3><h3 id="h-step-3-exploring-my-transaction-on-monad-explorer" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step 3: Exploring My Transaction on Monad Explorer</h3><p>After clicking <strong>“Confirm”</strong> in MetaMask, my transaction was instantly processed and verified on the <strong>Monad network</strong>.</p><p>I opened the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://testnet.monadexplorer.com/"><strong>Monad Explorer</strong></a> to view the complete transaction details — it clearly displayed everything I needed to understand what happened on-chain:</p><ul><li><p>Transaction Hash</p></li><li><p>Block</p></li><li><p>Confirmations</p></li><li><p>Status</p></li><li><p>Timestamp</p></li><li><p>From</p></li><li><p>To</p></li><li><p>Value</p></li><li><p>Transaction Fee</p></li><li><p>Gas Limit</p></li><li><p>Gas Used</p></li></ul><p>The explorer interface made it super easy to analyze the transaction flow.It showed how my 5 MON were transferred, confirmed within seconds, and recorded permanently on-chain.</p><p>I also checked my <strong>account view</strong> on Monad Explorer — where my remaining balance (4.99789 MON) was displayed along with the current token value.</p><p>Seeing the transaction details live on the blockchain felt like watching transparency in action — everything was traceable, verifiable, and fast ⚡</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/4f20cfd93591338a652b56c7200a7f03722d0060930afbb0d231d870fe164a25.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d28a0447be85467b656766f92846a42989ab3b9203aa9d5d6159a47ddfba5e20.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><hr><h3 id="h-what-i-learned-about-monad" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">What I Learned About Monad</h3><ul><li><p>Monad focuses on <strong>parallel execution</strong>, allowing multiple transactions to run at once.</p></li><li><p>Its testnet already feels <strong>lightning fast and highly efficient</strong>.</p></li><li><p>The <strong>developer tools</strong> (Monorail + Explorer) make experimentation smooth.</p></li><li><p>Transparency remains a core principle — anyone can verify any transaction instantly.</p></li><li><p>It’s clear Monad is building toward scalability <em>without</em> sacrificing decentralization.</p></li></ul><hr><h3 id="h-final-thoughts" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Final Thoughts</h3><p>Exploring Monad reminded me how quickly the Web3 ecosystem evolves.Each new blockchain brings its own flavor of innovation — and Monad’s emphasis on <strong>speed, scalability, and dev-friendliness</strong> definitely makes it one to watch.</p><p>This first interaction on the testnet gave me a hands-on sense of how efficient next-gen Layer-1s can really be.Excited to see how Monad shapes the future of blockchain performance!</p>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/01e917feae028aa7a8e7c76607154b44e31785840a9dda31b04eab2d340ef6ba.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From Zero to Web3: Harini’s Ethereum Series - Part 6]]></title>
            <link>https://paragraph.com/@harini-priya-k/from-zero-to-web3-harini-s-ethereum-series-part-6</link>
            <guid>sCeAm1hwAkJct4HQMOT6</guid>
            <pubDate>Wed, 15 Oct 2025 05:05:18 GMT</pubDate>
            <description><![CDATA[IntroductionEach Web3 developer comes to this realization eventually — that all the activity going on on Ethereum, from token sends to NFT mints, is driven by a single invisible engine: the Ethereum Virtual Machine (EVM). If the Ethereum blockchain is the body, the EVM is the brain — running every smart contract, enforcing every rule, and keeping global consensus. By the end of this section, you&apos;ll know:What the EVM is and why it&apos;s the "world computer"How it runs smart contracts saf...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Introduction</strong></h2><p>Each Web3 developer comes to this realization eventually — that all the activity going on on Ethereum, from token sends to NFT mints, is driven by a single invisible engine: the <strong>Ethereum Virtual Machine (EVM).</strong></p><p>If the Ethereum blockchain is the body, the EVM is the brain — running every smart contract, enforcing every rule, and keeping global consensus.</p><p><strong>By the end of this section, you&apos;ll know:</strong></p><ul><li><p>What the EVM is and why it&apos;s the &quot;world computer&quot;</p></li><li><p>How it runs smart contracts safely</p></li><li><p>Why EVM compatibility drives the whole multichain universe</p></li></ul><p>Let’s uncover the magic of Ethereum&apos;s core ⚙️</p><hr><h2 id="h-what-is-the-ethereum-virtual-machine-evm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>What Is the Ethereum Virtual Machine (EVM)?</strong></h2><p>The <strong>EVM (Ethereum Virtual Machine)</strong> is the runtime environment upon which all Ethereum smart contracts reside and run.</p><p>Conceptualize it as a <strong>shared computer</strong> that is present in hundreds of thousands of Ethereum nodes — each transaction, each function call, and each dApp activity runs within the EVM.</p><p>Each node hosts a replica of the EVM, so regardless of where or whom it is run by, the outcome is the same and can be verified throughout the network.</p><p><strong>In a nutshell:</strong></p><blockquote><p>The EVM guarantees trustless execution — code executes precisely as it was written, without being tampered with or controlled centrally.</p></blockquote><hr><h2 id="h-how-the-evm-runs-smart-contracts" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>How the EVM Runs Smart Contracts</strong></h2><p>When you deploy a smart contract on the Ethereum network, what you&apos;re really uploading is <strong>compiled bytecode</strong> — a low-level representation of your Solidity code that the EVM speaks.</p><p><strong>Here&apos;s the process step by step:</strong></p><ol><li><p><strong>Write the code</strong> → In Solidity or Vyper</p></li><li><p><strong>Compile it</strong> → Translates into EVM bytecode</p></li><li><p><strong>Deploy</strong> → The bytecode is stored on the blockchain</p></li><li><p><strong>Execute</strong> → Each call to a function initiates EVM execution</p></li></ol><p>The EVM employs an <strong>internal stack-based structure</strong> — akin to a small computer that executes instructions referred to as <strong>opcodes</strong> (such as <code>ADD</code>, <code>MUL</code>, <code>CALL</code>).</p><p>Each operation incurs <strong>gas</strong>, so no one can clog the network with infinite loops or intensive maths.</p><hr><h2 id="h-gas-the-fuel-of-the-evm" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Gas: The Fuel of the EVM</strong></h2><p>Each instruction within the EVM incurs <strong>gas</strong> — a modest payment in ETH.</p><p><strong>Gas does two things:</strong></p><ul><li><p><strong>Security:</strong> Stops infinite loops or spamming attacks</p></li><li><p><strong>Efficiency:</strong> Penalizes bloated code and impartial network usage</p></li></ul><p><strong>When you&apos;re submitting a transaction, you set:</strong></p><ul><li><p><strong>Gas Limit</strong> → Maximum units of gas you&apos;re willing to expend</p></li><li><p><strong>Gas Price</strong> → Amount of ETH you pay per unit of gas</p></li></ul><p>If your transaction depletes all its gas, it gets rejected — but you still get charged for the computation consumed so far.</p><p>So, gas isn&apos;t merely a charge — it&apos;s the <strong>EVM&apos;s rhythm.</strong></p><hr><h2 id="h-why-evm-compatibility-is-important" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Why EVM Compatibility Is Important</strong></h2><p>The EVM eventually became the <strong>gold standard</strong> for executing smart contracts.That&apos;s why new blockchains such as <strong>Polygon, Avalanche, BNB Chain, and Base</strong> all established EVM-compatible platforms.</p><p><strong>What that means:</strong></p><ul><li><p>You can deploy the same Solidity code on several chains</p></li><li><p>Wallets such as MetaMask work perfectly everywhere</p></li><li><p>Developers reuse tools such as Hardhat, Remix, and Truffle</p></li></ul><p>That is, <strong>EVM compatibility = immediate ecosystem adoption.</strong></p><hr><h2 id="h-evm-opcodes-and-determinism" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>EVM Opcodes and Determinism</strong></h2><p>Fundamentally, the EVM operates using <strong>opcodes</strong> — plain instructions that perform actions such as adding numbers, storing values, or transferring ETH.</p><p>Due to the <strong>determinism</strong> of the EVM, the same input always gives the same output regardless of where it&apos;s run.</p><p>That&apos;s how Ethereum can be <strong>trustless</strong> — no single authority is determining what happens.</p><blockquote><p>Code is law.</p></blockquote><hr><h2 id="h-why-the-evm-is-the-world-computer" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Why the EVM Is the &quot;World Computer&quot;</strong></h2><p>As opposed to a single device, the EVM exists concurrently at **thousands of nodes.**Every node authenticates and runs the same code, keeping the blockchain in perfect harmony.</p><p>It&apos;s akin to having a <strong>worldwide computer</strong> running the same application — securely, openly, and without interruption.</p><p>This distributed model of computation is the reason <strong>Ethereum is so revolutionary.</strong></p><hr><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Conclusion</strong></h2><p>Every Web3 developer wants to understand what truly powers Ethereum’s smart contract magic — and it all starts here, inside the <strong>EVM.</strong></p><p><strong>In this part, you’ve learned:</strong></p><ul><li><p>What the EVM is and why it’s the “world computer”</p></li><li><p>How it executes smart contracts deterministically</p></li><li><p>Why gas fuels and secures the entire process</p></li><li><p>How EVM compatibility unites the multichain ecosystem</p></li></ul><p>You now understand the <strong>beating heart of Ethereum</strong> — the machine that turns code into trustless action.</p><p>Welcome to the <strong>next step of your Ethereum experience</strong> — from understanding how it works to making it work for you. ⚙️🚀</p>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/b1db72aca5b84c49650b7ff0c938e247954f7f6df0bf78ba03731f747cf643ee.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From Zero to Web3: Harini’s Ethereum Series - Part 5]]></title>
            <link>https://paragraph.com/@harini-priya-k/from-zero-to-web3-harini-s-ethereum-series-part-5</link>
            <guid>NV2RuXcWRydWguaXGWOZ</guid>
            <pubDate>Thu, 09 Oct 2025 05:02:21 GMT</pubDate>
            <description><![CDATA[IntroductionEvery Web3 developer eventually reaches this point - where you realize everything on Ethereum runs on tokens. From stablecoins to NFTs, governance tokens to game assets - they all follow a shared set of rules called ERC standards. Now, we’re ready to go deeper into the foundation of Ethereum’s token ecosystem - ERC tokens. By the end of this part, you’ll know:What ERC means and why it existsThe difference between ERC-20, ERC-721, and ERC-1155How these standards power almost every ...]]></description>
            <content:encoded><![CDATA[<h3 id="h-introduction" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Introduction</strong></h3><p>Every Web3 developer eventually reaches this point - where you realize <strong>everything on Ethereum runs on tokens.</strong></p><p>From stablecoins to NFTs, governance tokens to game assets - they all follow a shared set of rules called <strong>ERC standards</strong>.</p><p>Now, we’re ready to go deeper into the foundation of Ethereum’s token ecosystem - <strong>ERC tokens</strong>.</p><p>By the end of this part, you’ll know:</p><ul><li><p>What ERC means and why it exists</p></li><li><p>The difference between ERC-20, ERC-721, and ERC-1155</p></li><li><p>How these standards power almost every token in Web3</p></li></ul><p>Let’s dive in 👇</p><hr><h3 id="h-what-does-erc-mean" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>What Does “ERC” Mean?</strong></h3><p><strong>ERC</strong> stands for <em>Ethereum Request for Comment</em>.</p><p>It’s like a proposal or blueprint that defines <em>how a specific kind of smart contract should behave</em>. Think of it as a rulebook that ensures every wallet, exchange, and dApp can understand and interact with tokens the same way.</p><p>When developers agree on an ERC standard - such as <strong>ERC-20</strong> or <strong>ERC-721</strong> - it becomes part of Ethereum’s shared language for digital assets.</p><p>Without these standards, every token would behave differently - breaking interoperability across wallets and dApps.</p><hr><h3 id="h-erc-20-the-foundation-of-fungible-tokens" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>ERC-20 -The Foundation of Fungible Tokens</strong></h3><p>The <strong>ERC-20</strong> standard defines <em>fungible tokens</em> — meaning each token is exactly the same as another.</p><p>Just like every rupee or ETH coin is identical in value, ERC-20 tokens are <em>interchangeable</em>.</p><p>They are used for:</p><ul><li><p>Cryptocurrencies (DAI, USDT, UNI, etc.)</p></li><li><p>DeFi tokens (governance, staking rewards)</p></li><li><p>Utility tokens (access, payments, or rewards)</p></li></ul><p><strong>Core Functions:</strong></p><ul><li><p><code>balanceOf(address)</code> → Get a wallet’s balance</p></li><li><p><code>transfer(address, amount)</code> → Send tokens to another wallet</p></li><li><p><code>approve()</code> + <code>transferFrom()</code> → Allow another address (like a contract) to spend tokens</p></li></ul><p>These functions make ERC-20 tokens the <em>building blocks</em> of DeFi and Web3 applications.</p><hr><h3 id="h-erc-721-the-birth-of-nfts" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>ERC-721 - The Birth of NFTs</strong></h3><p>The <strong>ERC-721</strong> standard introduced <em>non-fungible tokens</em> - assets that are <strong>unique</strong>.Each ERC-721 token has a one-of-a-kind <code>tokenId</code> and metadata, often linked to art, collectibles, or identity.</p><p>Used for:</p><ul><li><p>Digital art and collectibles</p></li><li><p>Game items and skins</p></li><li><p>Proof of ownership and authenticity</p></li></ul><p>Unlike ERC-20 tokens, no two ERC-721 tokens are alike. Owning one represents something truly <em>yours</em> on the blockchain.</p><hr><h3 id="h-erc-1155-the-hybrid-standard" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>ERC-1155 — The Hybrid Standard</strong></h3><p>The <strong>ERC-1155</strong> standard is like the <em>Swiss Army knife</em> of tokens - it allows <strong>multiple types of assets (both fungible and non-fungible)</strong> to exist in a single contract.</p><p>Used for:</p><ul><li><p>Gaming ecosystems</p></li><li><p>Multi-asset collections</p></li><li><p>Batch transfers and efficient storage</p></li></ul><p>With ERC-1155, a single smart contract can manage game coins, items, and collectibles - all together.</p><hr><h3 id="h-why-erc-standards-matter" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Why ERC Standards Matter</strong></h3><p>ERC standards are the reason Ethereum works as a unified ecosystem.</p><ul><li><p><strong>Interoperability:</strong> Every wallet and dApp knows how to read and interact with tokens.</p></li><li><p><strong>Security:</strong> Developers reuse tested standards instead of writing risky custom logic.</p></li><li><p><strong>Composability:</strong> Tokens can easily plug into DeFi, games, or marketplaces.</p></li></ul><p>In short - ERCs are the <em>common language</em> that keeps Web3 connected and functional.</p><hr><h3 id="h-conclusion" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Conclusion</strong></h3><p>Every Web3 developer wants to understand what truly powers the Ethereum ecosystem — and it all starts here, with ERC tokens.</p><p>In this part, you’ve learned:</p><ul><li><p>What ERC means and why Ethereum uses standards</p></li><li><p>The key differences between ERC-20, ERC-721, and ERC-1155</p></li><li><p>How tokens follow shared rules that make wallets and dApps interoperable</p></li><li><p>Why ERCs are the backbone of digital assets and interoperability in Web3</p></li></ul><p>You now understand <em>the universal language of Ethereum</em> - the foundation behind every coin, NFT, and tokenized asset.</p><p>👉In the next part, we’ll take this knowledge into action - <strong>you’ll write and deploy your own ERC-20 token</strong> on the Ethereum testnet, view it inside MetaMask, and experience your first real token deployment.</p><p>Welcome to the next level of your Web3 journey - where you go from <em>understanding</em> tokens to <em>creating your own.🚀</em></p>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0642cc473b6d5c22f5481979b05d5ca71db813ca68de14d08f2ef27047f0e161.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From Zero to Web3: Harini’s Ethereum Series - Part 4]]></title>
            <link>https://paragraph.com/@harini-priya-k/from-zero-to-web3-harini-s-ethereum-series-part-4</link>
            <guid>i2IBy5nmC45ezL4TZu8A</guid>
            <pubDate>Sat, 04 Oct 2025 17:10:43 GMT</pubDate>
            <description><![CDATA[IntroductionWelcome back to the Web3 Developer Docs! ✨ In Part 3, you built your first frontend dApp using HTML, TailwindCSS, and Ethers.js to connect MetaMask and interact with a deployed smart contract. 🚀 In this part, we’ll take a closer look under the hood. You’ll understand every single line of code we wrote: 🔎 What the HTML structure does 🔎 How Ethers.js works in the background 🔎 How wallet connection, transaction sending, and contract calls are actually happening By the end of this...]]></description>
            <content:encoded><![CDATA[<h3 id="h-introduction" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Introduction</h3><p>Welcome back to the Web3 Developer Docs! ✨</p><p>In <strong>Part 3</strong>, you built your <strong>first frontend dApp</strong> using HTML, TailwindCSS, and Ethers.js to connect MetaMask and interact with a deployed smart contract. 🚀</p><p>In this part, we’ll take a closer look under the hood. You’ll <strong>understand every single line of code</strong> we wrote:</p><p>🔎 What the HTML structure does</p><p>🔎 How Ethers.js works in the background</p><p>🔎 How wallet connection, transaction sending, and contract calls are actually happening</p><p>By the end of this guide, you’ll not only know <strong>how to build</strong>, but also <strong>why each part works</strong>.</p><hr><h2 id="h-breaking-down-indexhtml" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Breaking Down index.html</h2><p>Our <strong>HTML file</strong> is the structure of the dApp. Let’s review the key parts:</p><h3 id="h-1-page-layout-with-tailwindcss" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1️⃣ Page Layout with TailwindCSS</h3><pre data-type="codeBlock" text="&lt;body class=&quot;bg-gray-100 flex items-center justify-center min-h-screen&quot;&gt;
  &lt;div class=&quot;bg-white shadow-lg rounded-2xl p-8 w-full max-w-md text-center&quot;&gt;
    &lt;h1 class=&quot;text-2xl font-bold mb-6&quot;&gt;🔒 Simple Storage&lt;/h1&gt;
"><code><span class="hljs-operator">&#x3C;</span>body class<span class="hljs-operator">=</span><span class="hljs-string">"bg-gray-100 flex items-center justify-center min-h-screen"</span><span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"bg-white shadow-lg rounded-2xl p-8 w-full max-w-md text-center"</span><span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>h1 class<span class="hljs-operator">=</span><span class="hljs-string">"text-2xl font-bold mb-6"</span><span class="hljs-operator">></span>🔒 Simple Storage<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h1<span class="hljs-operator">></span>
</code></pre><ul><li><p><code>bg-gray-100 flex items-center justify-center min-h-screen</code>: centers the app on screen.</p></li><li><p><code>shadow-lg rounded-2xl p-8</code>: creates a <strong>card-like UI</strong> for the dApp.</p></li><li><p>This layout is where all UI elements (buttons, input, stored number) live.</p></li></ul><hr><h3 id="h-2-stored-number-display" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2️⃣ Stored Number Display</h3><pre data-type="codeBlock" text="&lt;div class=&quot;text-5xl font-mono text-gray-900 mb-2&quot; id=&quot;storedNumber&quot;&gt;--&lt;/div&gt;
&lt;p class=&quot;text-gray-500 text-sm mb-6&quot;&gt;Stored Number&lt;/p&gt;
"><code><span class="hljs-operator">&#x3C;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"text-5xl font-mono text-gray-900 mb-2"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"storedNumber"</span><span class="hljs-operator">></span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span>p class<span class="hljs-operator">=</span><span class="hljs-string">"text-gray-500 text-sm mb-6"</span><span class="hljs-operator">></span>Stored Number<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>p<span class="hljs-operator">></span>
</code></pre><ul><li><p><code>id=&quot;storedNumber&quot;</code> → we’ll later use <strong>JavaScript</strong> to update this dynamically with the blockchain value.</p></li><li><p>Initially shows <code>--</code> until a value is fetched.</p></li></ul><hr><h3 id="h-3-input-buttons" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3️⃣ Input + Buttons</h3><pre data-type="codeBlock" text="&lt;input type=&quot;number&quot; id=&quot;inputNumber&quot; placeholder=&quot;Enter a number&quot; ... /&gt;
&lt;button onclick=&quot;setNumber()&quot;&gt;Store Number&lt;/button&gt;
&lt;button onclick=&quot;getNumber()&quot;&gt;Get Stored Number&lt;/button&gt;
&lt;button id=&quot;walletButton&quot; onclick=&quot;toggleWallet()&quot;&gt;Connect Wallet&lt;/button&gt;
"><code><span class="hljs-operator">&#x3C;</span>input <span class="hljs-keyword">type</span><span class="hljs-operator">=</span><span class="hljs-string">"number"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"inputNumber"</span> placeholder<span class="hljs-operator">=</span><span class="hljs-string">"Enter a number"</span> ... <span class="hljs-operator">/</span><span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span>button onclick<span class="hljs-operator">=</span><span class="hljs-string">"setNumber()"</span><span class="hljs-operator">></span>Store Number<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>button<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span>button onclick<span class="hljs-operator">=</span><span class="hljs-string">"getNumber()"</span><span class="hljs-operator">></span>Get Stored Number<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>button<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span>button id<span class="hljs-operator">=</span><span class="hljs-string">"walletButton"</span> onclick<span class="hljs-operator">=</span><span class="hljs-string">"toggleWallet()"</span><span class="hljs-operator">></span>Connect Wallet<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>button<span class="hljs-operator">></span>
</code></pre><ul><li><p><code>inputNumber</code> → user types a number.</p></li><li><p><code>Store Number</code> → calls <strong>contract.setNumber()</strong>.</p></li><li><p><code>Get Stored Number</code> → calls <strong>contract.getNumber()</strong>.</p></li><li><p><code>Connect Wallet</code> → links MetaMask to our dApp.</p></li></ul><hr><h3 id="h-4-loading-ethersjs" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4️⃣ Loading Ethers.js</h3><pre data-type="codeBlock" text="&lt;script src=&quot;https://cdn.ethers.io/lib/ethers-5.7.2.umd.min.js&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;script.js?v=2&quot;&gt;&lt;/script&gt;
"><code><span class="hljs-operator">&#x3C;</span>script src<span class="hljs-operator">=</span><span class="hljs-string">"https://cdn.ethers.io/lib/ethers-5.7.2.umd.min.js"</span><span class="hljs-operator">></span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span>script src<span class="hljs-operator">=</span><span class="hljs-string">"script.js?v=2"</span><span class="hljs-operator">></span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span>
</code></pre><ul><li><p>Loads <strong>Ethers.js</strong> library from a CDN.</p></li><li><p>Loads our <strong>custom script.js</strong> (all blockchain logic).</p></li><li><p>Without this, the buttons wouldn’t talk to Ethereum.</p></li></ul><hr><h2 id="h-breaking-down-scriptjs" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Breaking Down script.js</h2><p>Now let’s understand the <strong>JavaScript logic</strong>:</p><h3 id="h-1-contract-details" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">1️⃣ Contract Details</h3><pre data-type="codeBlock" text="const contractAddress = &quot;YOUR_CONTRACT_ADDRESS&quot;; 
const contractABI = [ ... ];
"><code>const <span class="hljs-attr">contractAddress</span> = <span class="hljs-string">"YOUR_CONTRACT_ADDRESS"</span><span class="hljs-comment">; </span>
const <span class="hljs-attr">contractABI</span> = [ ... ]<span class="hljs-comment">;</span>
</code></pre><ul><li><p><code>contractAddress</code>: the unique deployed smart contract address from Remix.</p></li><li><p><code>contractABI</code>: describes what functions exist (<code>setNumber</code>, <code>getNumber</code>) and how to call them.</p></li></ul><p>🔑 Without ABI + Address, the dApp wouldn’t know how to talk to the blockchain.</p><hr><h3 id="h-2-wallet-connection" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">2️⃣ Wallet Connection</h3><pre data-type="codeBlock" text="async function connectWallet() {
  if (window.ethereum) {
    provider = new ethers.providers.Web3Provider(window.ethereum);
    await provider.send(&quot;eth_requestAccounts&quot;, []);
    signer = provider.getSigner();
    contract = new ethers.Contract(contractAddress, contractABI, signer);
    alert(&quot;Wallet connected ✅&quot;);
  } else {
    alert(&quot;Please install MetaMask!&quot;);
  }
}
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">connectWallet</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">if</span> (window.ethereum) {
    provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> ethers.providers.Web3Provider(window.ethereum);
    await provider.<span class="hljs-built_in">send</span>(<span class="hljs-string">"eth_requestAccounts"</span>, []);
    signer <span class="hljs-operator">=</span> provider.getSigner();
    <span class="hljs-class"><span class="hljs-keyword">contract</span> = <span class="hljs-title"><span class="hljs-keyword">new</span></span> <span class="hljs-title">ethers</span>.<span class="hljs-title">Contract</span>(<span class="hljs-params">contractAddress, contractABI, signer</span>);
    <span class="hljs-title">alert</span>(<span class="hljs-params"><span class="hljs-string">"Wallet connected ✅"</span></span>);
  } <span class="hljs-title"><span class="hljs-keyword">else</span></span> </span>{
    alert(<span class="hljs-string">"Please install MetaMask!"</span>);
  }
}
</code></pre><ul><li><p><code>window.ethereum</code>: injected by MetaMask into your browser.</p></li><li><p><code>provider</code>: allows reading blockchain data.</p></li><li><p><code>signer</code>: allows sending <strong>transactions</strong> (needs your wallet’s signature).</p></li><li><p><code>contract</code>: connects ABI + address → gives us access to functions.</p></li></ul><hr><h3 id="h-3-writing-to-blockchain-setnumber" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">3️⃣ Writing to Blockchain (setNumber)</h3><pre data-type="codeBlock" text="async function setNumber() {
  const num = document.getElementById(&apos;inputNumber&apos;).value;
  const tx = await contract.setNumber(num);
  await tx.wait(); 
  getNumber();
}
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setNumber</span>(<span class="hljs-params"></span>) </span>{
  const num <span class="hljs-operator">=</span> document.getElementById(<span class="hljs-string">'inputNumber'</span>).<span class="hljs-built_in">value</span>;
  const <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await <span class="hljs-keyword">contract</span>.setNumber(num);
  await <span class="hljs-built_in">tx</span>.wait(); 
  getNumber();
}
</code></pre><ul><li><p>Takes user input (<code>num</code>).</p></li><li><p>Sends a <strong>transaction</strong> to <code>setNumber(num)</code>.</p></li><li><p><code>await tx.wait()</code>: waits until transaction is <strong>confirmed on-chain</strong>.</p></li><li><p>Calls <code>getNumber()</code> again → refreshes UI.</p><p>This costs <strong>gas fees</strong> because it <strong>changes blockchain state</strong>.</p></li></ul><hr><h3 id="h-4-reading-from-blockchain-getnumber" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">4️⃣ Reading from Blockchain (getNumber)</h3><pre data-type="codeBlock" text="async function getNumber() {
  const value = await contract.getNumber();
  document.getElementById(&apos;storedNumber&apos;).textContent = value.toString();
}
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getNumber</span>(<span class="hljs-params"></span>) </span>{
  const value <span class="hljs-operator">=</span> await <span class="hljs-keyword">contract</span>.getNumber();
  document.getElementById(<span class="hljs-string">'storedNumber'</span>).textContent <span class="hljs-operator">=</span> value.toString();
}
</code></pre><ul><li><p>Calls <code>getNumber()</code> from the contract.</p></li><li><p>Updates UI with the retrieved value.</p><p>Reading is <strong>free</strong> (no gas), because it doesn’t change the blockchain.</p></li></ul><hr><h3 id="h-5-error-handling" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">5️⃣ Error Handling</h3><p>Every function uses <code>try...catch</code>:</p><pre data-type="codeBlock" text="try {
  // blockchain action
} catch (error) {
  console.error(error);
  alert(&quot;Error: &quot; + error.message);
}
"><code><span class="hljs-keyword">try</span> {
  <span class="hljs-comment">// blockchain action</span>
} <span class="hljs-keyword">catch</span> (<span class="hljs-function"><span class="hljs-keyword">error</span>) </span>{
  console.error(<span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
  alert(<span class="hljs-string">"Error: "</span> <span class="hljs-operator">+</span> <span class="hljs-keyword">error</span>.message);
}
</code></pre><ul><li><p>Prevents app from crashing if MetaMask is not installed, user rejects transaction, or network issues occur.</p></li></ul><hr><h2 id="h-conclusion" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Conclusion</h2><p>In this part, you’ve learned:</p><p>✅How <code>index.html</code> builds the UI for your dApp</p><p>✅How <code>script.js</code> uses Ethers.js to connect wallet, read, and write data</p><p>✅Difference between <strong>read (free)</strong> and <strong>write (paid)</strong> calls</p><p>✅Why ABI, provider, and signer are crucial for blockchain interaction</p><p>You now fully understand <strong>how your dApp works under the hood</strong> ,not just running the code, but knowing exactly what’s happening at each step. This knowledge forms the backbone of becoming a confident Web3 developer. 🚀</p><p>Welcome to the world of Ethereum Web3,your journey as a blockchain developer has just begun! 🚀</p>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/fc0401ad8224b3854e8410a9899622c18ebdb355170b6b2d8089d6f49af72244.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From Zero to Web3: Harini’s Ethereum Series - Part 3]]></title>
            <link>https://paragraph.com/@harini-priya-k/from-zero-to-web3-harini-s-ethereum-series-part-3</link>
            <guid>FEKaOtwu7co7t1rFcRge</guid>
            <pubDate>Fri, 26 Sep 2025 10:42:17 GMT</pubDate>
            <description><![CDATA[IntroductionWelcome back to the Web3 Developer Docs! In the previous guide, you wrote and deployed your first Ethereum smart contract on a testnet using Remix and MetaMask. 🚀 Now, we’ll take the next step: interacting with your contract using JavaScript libraries (Web3.js / Ethers.js), handling events, and moving closer to building real-world dApps. By the end of this guide, you’ll be able to:Connect your wallet to a dApp using Ethers.jsRead from and write data to your smart contractBuild a ...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Introduction</h2><p>Welcome back to the Web3 Developer Docs!</p><p>In the previous guide, you wrote and deployed your first Ethereum smart contract on a testnet using Remix and MetaMask. 🚀</p><p>Now, we’ll take the next step: <strong>interacting with your contract using JavaScript libraries (Web3.js / Ethers.js), handling events, and moving closer to building real-world dApps.</strong></p><p><strong>By the end of this guide, you’ll be able to:</strong></p><ul><li><p>Connect your wallet to a dApp using <strong>Ethers.js</strong></p></li><li><p>Read from and write data to your smart contract</p></li><li><p>Build a simple frontend that interacts with Ethereum</p></li><li><p>Take your first step toward real-world dApp development</p></li></ul><h2 id="h-setting-up-ethersjs" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Setting Up Ethers.js</h2><p>1️⃣ <strong>Open VS Code</strong> → Create a new project folder (example: <code>ethers-demo</code>).</p><p>2️⃣ <strong>Initialize npm</strong></p><pre data-type="codeBlock" text="npm init -y  //package.json file will appear after you run this command.
"><code>npm <span class="hljs-keyword">init</span> -y  <span class="hljs-comment">//package.json file will appear after you run this command.</span>
</code></pre><p>3️⃣ <strong>Install Ethers.js</strong></p><pre data-type="codeBlock" text="npm install ethers //node_modulus and package-lock.json file will appear after you run this command.
"><code>npm install ethers <span class="hljs-comment">//node_modulus and package-lock.json file will appear after you run this command.</span>
</code></pre><p>4️⃣ <strong>Create an</strong> <code>index.html</code> file in your project folder. Add basic buttons:</p><pre data-type="codeBlock" text="&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
  &lt;meta charset=&quot;UTF-8&quot;&gt;
  &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
  &lt;title&gt;Simple Storage dApp&lt;/title&gt;
  &lt;script src=&quot;https://cdn.tailwindcss.com&quot;&gt;&lt;/script&gt;
&lt;/head&gt;
&lt;body class=&quot;bg-gray-100 flex items-center justify-center min-h-screen&quot;&gt;

  &lt;div class=&quot;bg-white shadow-lg rounded-2xl p-8 w-full max-w-md text-center&quot;&gt;
    &lt;h1 class=&quot;text-2xl font-bold mb-6&quot;&gt;🔒 Simple Storage&lt;/h1&gt;

    &lt;!-- Display Stored Number --&gt;
    &lt;div class=&quot;text-5xl font-mono text-gray-900 mb-2&quot; id=&quot;storedNumber&quot;&gt;--&lt;/div&gt;
    &lt;p class=&quot;text-gray-500 text-sm mb-6&quot;&gt;Stored Number&lt;/p&gt;

    &lt;!-- Input + Set --&gt;
    &lt;input 
      type=&quot;number&quot; 
      id=&quot;inputNumber&quot; 
      placeholder=&quot;Enter a number&quot; 
      class=&quot;border rounded-lg px-4 py-2 mb-4 w-full focus:ring-2 focus:ring-blue-500 outline-none&quot;
    /&gt;
    &lt;button 
      onclick=&quot;setNumber()&quot; 
      class=&quot;bg-blue-600 text-white px-4 py-2 rounded-lg w-full hover:bg-blue-700 transition&quot;&gt;
      Store Number
    &lt;/button&gt;

    &lt;!-- Get Number --&gt;
    &lt;button 
      onclick=&quot;getNumber()&quot; 
      class=&quot;mt-4 bg-green-600 text-white px-4 py-2 rounded-lg w-full hover:bg-green-700 transition&quot;&gt;
      Get Stored Number
    &lt;/button&gt;

    &lt;!-- Connect/Disconnect Wallet --&gt;
    &lt;button 
      id=&quot;walletButton&quot;
      onclick=&quot;toggleWallet()&quot; 
      class=&quot;mt-6 bg-gray-800 text-white px-4 py-2 rounded-lg w-full hover:bg-gray-900 transition&quot;&gt;
      Connect Wallet
    &lt;/button&gt;
  &lt;/div&gt;

  &lt;!-- Load ethers.js before our script --&gt;
  &lt;script src=&quot;https://cdn.ethers.io/lib/ethers-5.7.2.umd.min.js&quot;&gt;&lt;/script&gt;
  &lt;script&gt;
    // Debug: Check if ethers is loaded
    console.log(&quot;Ethers loaded:&quot;, typeof ethers !== &apos;undefined&apos;);
    if (typeof ethers === &apos;undefined&apos;) {
      console.error(&quot;Ethers.js failed to load from first CDN, trying alternative...&quot;);
      // Try alternative CDN
      const script = document.createElement(&apos;script&apos;);
      script.src = &apos;https://unpkg.com/ethers@5.7.2/dist/ethers.umd.min.js&apos;;
      script.onload = function() {
        console.log(&quot;Ethers loaded from alternative CDN:&quot;, typeof ethers !== &apos;undefined&apos;);
      };
      script.onerror = function() {
        console.error(&quot;Both CDNs failed to load ethers.js&quot;);
        alert(&quot;Error: Unable to load Ethers.js library. Please check your internet connection.&quot;);
      };
      document.head.appendChild(script);
    } else {
      console.log(&quot;Ethers.js loaded successfully!&quot;);
    }
  &lt;/script&gt;
  &lt;script src=&quot;script.js?v=2&quot;&gt;&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;
"><code><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">!</span>DOCTYPE html<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span>html lang<span class="hljs-operator">=</span><span class="hljs-string">"en"</span><span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span>head<span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span>meta charset<span class="hljs-operator">=</span><span class="hljs-string">"UTF-8"</span><span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span>meta name<span class="hljs-operator">=</span><span class="hljs-string">"viewport"</span> content<span class="hljs-operator">=</span><span class="hljs-string">"width=device-width, initial-scale=1.0"</span><span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span>title<span class="hljs-operator">></span>Simple Storage dApp<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>title<span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span>script src<span class="hljs-operator">=</span><span class="hljs-string">"https://cdn.tailwindcss.com"</span><span class="hljs-operator">></span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>head<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span>body class<span class="hljs-operator">=</span><span class="hljs-string">"bg-gray-100 flex items-center justify-center min-h-screen"</span><span class="hljs-operator">></span>

  <span class="hljs-operator">&#x3C;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"bg-white shadow-lg rounded-2xl p-8 w-full max-w-md text-center"</span><span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>h1 class<span class="hljs-operator">=</span><span class="hljs-string">"text-2xl font-bold mb-6"</span><span class="hljs-operator">></span>🔒 Simple Storage<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h1<span class="hljs-operator">></span>

    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">!</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span> Display Stored Number <span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>div class<span class="hljs-operator">=</span><span class="hljs-string">"text-5xl font-mono text-gray-900 mb-2"</span> id<span class="hljs-operator">=</span><span class="hljs-string">"storedNumber"</span><span class="hljs-operator">></span><span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>p class<span class="hljs-operator">=</span><span class="hljs-string">"text-gray-500 text-sm mb-6"</span><span class="hljs-operator">></span>Stored Number<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>p<span class="hljs-operator">></span>

    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">!</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span> Input <span class="hljs-operator">+</span> Set <span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>input 
      <span class="hljs-keyword">type</span><span class="hljs-operator">=</span><span class="hljs-string">"number"</span> 
      id<span class="hljs-operator">=</span><span class="hljs-string">"inputNumber"</span> 
      placeholder<span class="hljs-operator">=</span><span class="hljs-string">"Enter a number"</span> 
      class<span class="hljs-operator">=</span><span class="hljs-string">"border rounded-lg px-4 py-2 mb-4 w-full focus:ring-2 focus:ring-blue-500 outline-none"</span>
    <span class="hljs-operator">/</span><span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>button 
      onclick<span class="hljs-operator">=</span><span class="hljs-string">"setNumber()"</span> 
      class<span class="hljs-operator">=</span><span class="hljs-string">"bg-blue-600 text-white px-4 py-2 rounded-lg w-full hover:bg-blue-700 transition"</span><span class="hljs-operator">></span>
      Store Number
    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>button<span class="hljs-operator">></span>

    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">!</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span> Get Number <span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>button 
      onclick<span class="hljs-operator">=</span><span class="hljs-string">"getNumber()"</span> 
      class<span class="hljs-operator">=</span><span class="hljs-string">"mt-4 bg-green-600 text-white px-4 py-2 rounded-lg w-full hover:bg-green-700 transition"</span><span class="hljs-operator">></span>
      Get Stored Number
    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>button<span class="hljs-operator">></span>

    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">!</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span> Connect<span class="hljs-operator">/</span>Disconnect Wallet <span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>button 
      id<span class="hljs-operator">=</span><span class="hljs-string">"walletButton"</span>
      onclick<span class="hljs-operator">=</span><span class="hljs-string">"toggleWallet()"</span> 
      class<span class="hljs-operator">=</span><span class="hljs-string">"mt-6 bg-gray-800 text-white px-4 py-2 rounded-lg w-full hover:bg-gray-900 transition"</span><span class="hljs-operator">></span>
      Connect Wallet
    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>button<span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>div<span class="hljs-operator">></span>

  <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">!</span><span class="hljs-operator">-</span><span class="hljs-operator">-</span> Load ethers.js before our script <span class="hljs-operator">-</span><span class="hljs-operator">-</span><span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span>script src<span class="hljs-operator">=</span><span class="hljs-string">"https://cdn.ethers.io/lib/ethers-5.7.2.umd.min.js"</span><span class="hljs-operator">></span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span>script<span class="hljs-operator">></span>
    <span class="hljs-comment">// Debug: Check if ethers is loaded</span>
    console.log(<span class="hljs-string">"Ethers loaded:"</span>, typeof ethers <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'undefined'</span>);
    <span class="hljs-keyword">if</span> (typeof ethers <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'undefined'</span>) {
      console.error(<span class="hljs-string">"Ethers.js failed to load from first CDN, trying alternative..."</span>);
      <span class="hljs-comment">// Try alternative CDN</span>
      const script <span class="hljs-operator">=</span> document.createElement(<span class="hljs-string">'script'</span>);
      script.src <span class="hljs-operator">=</span> <span class="hljs-string">'https://unpkg.com/ethers@5.7.2/dist/ethers.umd.min.js'</span>;
      script.onload <span class="hljs-operator">=</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) </span>{
        console.log(<span class="hljs-string">"Ethers loaded from alternative CDN:"</span>, typeof ethers <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'undefined'</span>);
      };
      script.onerror <span class="hljs-operator">=</span> <span class="hljs-function"><span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) </span>{
        console.error(<span class="hljs-string">"Both CDNs failed to load ethers.js"</span>);
        alert(<span class="hljs-string">"Error: Unable to load Ethers.js library. Please check your internet connection."</span>);
      };
      document.head.appendChild(script);
    } <span class="hljs-keyword">else</span> {
      console.log(<span class="hljs-string">"Ethers.js loaded successfully!"</span>);
    }
  <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span>script src<span class="hljs-operator">=</span><span class="hljs-string">"script.js?v=2"</span><span class="hljs-operator">></span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>script<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>body<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>html<span class="hljs-operator">></span>
</code></pre><p>5️⃣ Create a script.js file → in the same folder, add your Ethers.js code (for connecting MetaMask, setting a number, and getting a number).</p><pre data-type="codeBlock" text="// script.js

// Debug: Check if ethers is available
console.log(&quot;Script.js loaded&quot;);
console.log(&quot;Ethers available:&quot;, typeof ethers !== &apos;undefined&apos;);

if (typeof ethers === &apos;undefined&apos;) {
  console.error(&quot;Ethers is not defined! Make sure ethers.js is loaded before this script.&quot;);
}
// Paste your contract details from Remix
const contractAddress = &quot;YOUR_CONTRACT_ADDRESS&quot;; // Replace with your deployed contract address
const contractABI = [
  {
    &quot;inputs&quot;: [{ &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;_num&quot;, &quot;type&quot;: &quot;uint256&quot; }],
    &quot;name&quot;: &quot;setNumber&quot;,
    &quot;outputs&quot;: [],
    &quot;stateMutability&quot;: &quot;nonpayable&quot;,
    &quot;type&quot;: &quot;function&quot;
  },
  {
    &quot;inputs&quot;: [],
    &quot;name&quot;: &quot;getNumber&quot;,
    &quot;outputs&quot;: [{ &quot;internalType&quot;: &quot;uint256&quot;, &quot;name&quot;: &quot;&quot;, &quot;type&quot;: &quot;uint256&quot; }],
    &quot;stateMutability&quot;: &quot;view&quot;,
    &quot;type&quot;: &quot;function&quot;
  }
];

let provider;
let signer;
let contract;

// 1️⃣ Connect MetaMask wallet
async function connectWallet() {
  try {
    if (window.ethereum) {
      // Use ethers v5 syntax
      provider = new ethers.providers.Web3Provider(window.ethereum);
      await provider.send(&quot;eth_requestAccounts&quot;, []); // request wallet connection
      signer = provider.getSigner();
      contract = new ethers.Contract(contractAddress, contractABI, signer);
      alert(&quot;Wallet connected ✅&quot;);
      console.log(&quot;Wallet connected successfully&quot;);
    } else {
      alert(&quot;Please install MetaMask!&quot;);
    }
  } catch (error) {
    console.error(&quot;Error connecting wallet:&quot;, error);
    alert(&quot;Error connecting wallet: &quot; + error.message);
  }
}

// 2️⃣ Call setNumber function
async function setNumber() {
  try {
    if (!contract) return alert(&quot;Connect your wallet first!&quot;);
    
    const inputElement = document.getElementById(&apos;inputNumber&apos;);
    const num = inputElement.value;
    
    if (!num) {
      alert(&quot;Please enter a number!&quot;);
      return;
    }
    
    console.log(&quot;Setting number:&quot;, num);
    const tx = await contract.setNumber(num);
    alert(&quot;Transaction sent! Waiting for confirmation...&quot;);
    await tx.wait(); // wait for confirmation
    alert(&quot;Transaction confirmed ✅ Number stored!&quot;);
    
    // Clear input and update display
    inputElement.value = &apos;&apos;;
    getNumber();
  } catch (error) {
    console.error(&quot;Error setting number:&quot;, error);
    alert(&quot;Error setting number: &quot; + error.message);
  }
}

// 3️⃣ Call getNumber function
async function getNumber() {
  try {
    if (!contract) return alert(&quot;Connect your wallet first!&quot;);
    
    console.log(&quot;Getting stored number...&quot;);
    const value = await contract.getNumber();
    const numberStr = value.toString();
    
    // Update the display
    const displayElement = document.getElementById(&apos;storedNumber&apos;);
    if (displayElement) {
      displayElement.textContent = numberStr;
    }
    
    alert(&quot;Stored number: &quot; + numberStr);
    console.log(&quot;Stored number:&quot;, numberStr);
  } catch (error) {
    console.error(&quot;Error getting number:&quot;, error);
    alert(&quot;Error getting number: &quot; + error.message);
  }
}
"><code><span class="hljs-comment">// script.js</span>

<span class="hljs-comment">// Debug: Check if ethers is available</span>
console.log(<span class="hljs-string">"Script.js loaded"</span>);
console.log(<span class="hljs-string">"Ethers available:"</span>, typeof ethers <span class="hljs-operator">!</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'undefined'</span>);

<span class="hljs-keyword">if</span> (typeof ethers <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">'undefined'</span>) {
  console.error(<span class="hljs-string">"Ethers is not defined! Make sure ethers.js is loaded before this script."</span>);
}
<span class="hljs-comment">// Paste your contract details from Remix</span>
const contractAddress <span class="hljs-operator">=</span> <span class="hljs-string">"YOUR_CONTRACT_ADDRESS"</span>; <span class="hljs-comment">// Replace with your deployed contract address</span>
const contractABI <span class="hljs-operator">=</span> [
  {
    <span class="hljs-string">"inputs"</span>: [{ <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">"_num"</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> }],
    <span class="hljs-string">"name"</span>: <span class="hljs-string">"setNumber"</span>,
    <span class="hljs-string">"outputs"</span>: [],
    <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"nonpayable"</span>,
    <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span>
  },
  {
    <span class="hljs-string">"inputs"</span>: [],
    <span class="hljs-string">"name"</span>: <span class="hljs-string">"getNumber"</span>,
    <span class="hljs-string">"outputs"</span>: [{ <span class="hljs-string">"internalType"</span>: <span class="hljs-string">"uint256"</span>, <span class="hljs-string">"name"</span>: <span class="hljs-string">""</span>, <span class="hljs-string">"type"</span>: <span class="hljs-string">"uint256"</span> }],
    <span class="hljs-string">"stateMutability"</span>: <span class="hljs-string">"view"</span>,
    <span class="hljs-string">"type"</span>: <span class="hljs-string">"function"</span>
  }
];

let provider;
let signer;
let <span class="hljs-class"><span class="hljs-keyword">contract</span>;

<span class="hljs-comment">// 1️⃣ Connect MetaMask wallet</span>
<span class="hljs-title">async</span> <span class="hljs-title"><span class="hljs-keyword">function</span></span> <span class="hljs-title">connectWallet</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">if</span> (window.ethereum) {
      <span class="hljs-comment">// Use ethers v5 syntax</span>
      provider <span class="hljs-operator">=</span> <span class="hljs-keyword">new</span> ethers.providers.Web3Provider(window.ethereum);
      await provider.<span class="hljs-built_in">send</span>(<span class="hljs-string">"eth_requestAccounts"</span>, []); <span class="hljs-comment">// request wallet connection</span>
      signer <span class="hljs-operator">=</span> provider.getSigner();
      <span class="hljs-class"><span class="hljs-keyword">contract</span> = <span class="hljs-title"><span class="hljs-keyword">new</span></span> <span class="hljs-title">ethers</span>.<span class="hljs-title">Contract</span>(<span class="hljs-params">contractAddress, contractABI, signer</span>);
      <span class="hljs-title">alert</span>(<span class="hljs-params"><span class="hljs-string">"Wallet connected ✅"</span></span>);
      <span class="hljs-title">console</span>.<span class="hljs-title">log</span>(<span class="hljs-params"><span class="hljs-string">"Wallet connected successfully"</span></span>);
    } <span class="hljs-title"><span class="hljs-keyword">else</span></span> </span>{
      alert(<span class="hljs-string">"Please install MetaMask!"</span>);
    }
  } <span class="hljs-keyword">catch</span> (<span class="hljs-function"><span class="hljs-keyword">error</span>) </span>{
    console.error(<span class="hljs-string">"Error connecting wallet:"</span>, <span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
    alert(<span class="hljs-string">"Error connecting wallet: "</span> <span class="hljs-operator">+</span> <span class="hljs-keyword">error</span>.message);
  }
}

<span class="hljs-comment">// 2️⃣ Call setNumber function</span>
async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setNumber</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span><span class="hljs-class"><span class="hljs-keyword">contract</span>) <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">alert</span>(<span class="hljs-params"><span class="hljs-string">"Connect your wallet first!"</span></span>);
    
    <span class="hljs-title">const</span> <span class="hljs-title">inputElement</span> = <span class="hljs-title">document</span>.<span class="hljs-title">getElementById</span>(<span class="hljs-params"><span class="hljs-string">'inputNumber'</span></span>);
    <span class="hljs-title">const</span> <span class="hljs-title">num</span> = <span class="hljs-title">inputElement</span>.<span class="hljs-title">value</span>;
    
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> (<span class="hljs-params">!num</span>) </span>{
      alert(<span class="hljs-string">"Please enter a number!"</span>);
      <span class="hljs-keyword">return</span>;
    }
    
    console.log(<span class="hljs-string">"Setting number:"</span>, num);
    const <span class="hljs-built_in">tx</span> <span class="hljs-operator">=</span> await <span class="hljs-keyword">contract</span>.setNumber(num);
    alert(<span class="hljs-string">"Transaction sent! Waiting for confirmation..."</span>);
    await <span class="hljs-built_in">tx</span>.wait(); <span class="hljs-comment">// wait for confirmation</span>
    alert(<span class="hljs-string">"Transaction confirmed ✅ Number stored!"</span>);
    
    <span class="hljs-comment">// Clear input and update display</span>
    inputElement.<span class="hljs-built_in">value</span> <span class="hljs-operator">=</span> <span class="hljs-string">''</span>;
    getNumber();
  } <span class="hljs-keyword">catch</span> (<span class="hljs-function"><span class="hljs-keyword">error</span>) </span>{
    console.error(<span class="hljs-string">"Error setting number:"</span>, <span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
    alert(<span class="hljs-string">"Error setting number: "</span> <span class="hljs-operator">+</span> <span class="hljs-keyword">error</span>.message);
  }
}

<span class="hljs-comment">// 3️⃣ Call getNumber function</span>
async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getNumber</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span><span class="hljs-class"><span class="hljs-keyword">contract</span>) <span class="hljs-title"><span class="hljs-keyword">return</span></span> <span class="hljs-title">alert</span>(<span class="hljs-params"><span class="hljs-string">"Connect your wallet first!"</span></span>);
    
    <span class="hljs-title">console</span>.<span class="hljs-title">log</span>(<span class="hljs-params"><span class="hljs-string">"Getting stored number..."</span></span>);
    <span class="hljs-title">const</span> <span class="hljs-title">value</span> = <span class="hljs-title">await</span> <span class="hljs-title"><span class="hljs-keyword">contract</span></span>.<span class="hljs-title">getNumber</span>(<span class="hljs-params"></span>);
    <span class="hljs-title">const</span> <span class="hljs-title">numberStr</span> = <span class="hljs-title">value</span>.<span class="hljs-title">toString</span>(<span class="hljs-params"></span>);
    
    <span class="hljs-comment">// Update the display</span>
    <span class="hljs-title">const</span> <span class="hljs-title">displayElement</span> = <span class="hljs-title">document</span>.<span class="hljs-title">getElementById</span>(<span class="hljs-params"><span class="hljs-string">'storedNumber'</span></span>);
    <span class="hljs-title"><span class="hljs-keyword">if</span></span> (<span class="hljs-params">displayElement</span>) </span>{
      displayElement.textContent <span class="hljs-operator">=</span> numberStr;
    }
    
    alert(<span class="hljs-string">"Stored number: "</span> <span class="hljs-operator">+</span> numberStr);
    console.log(<span class="hljs-string">"Stored number:"</span>, numberStr);
  } <span class="hljs-keyword">catch</span> (<span class="hljs-function"><span class="hljs-keyword">error</span>) </span>{
    console.error(<span class="hljs-string">"Error getting number:"</span>, <span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
    alert(<span class="hljs-string">"Error getting number: "</span> <span class="hljs-operator">+</span> <span class="hljs-keyword">error</span>.message);
  }
}
</code></pre><p>6️⃣ <strong>Get your Contract Address + ABI</strong> from Remix after deployment, and paste them in <code>script.js</code>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/006a0357515a80bfb6d5a39939858a885126b2fdacac1fdef0617eb02534fbfe.png" alt="On the Compile page, you’ll find the ABI at the bottom. In the previous part, we copied a contract address - paste that into the contract address field." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">On the Compile page, you’ll find the ABI at the bottom. In the previous part, we copied a contract address - paste that into the contract address field.</figcaption></figure><p>7️⃣ <strong>Open</strong> <code>index.html</code> in your browser (with MetaMask installed).</p><ul><li><p>By Clicking Go Live you can see your website.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3c9f7a3af9ab36347af9cb019fc32cf8e0ccf3f1f5b0ceed3496aa73ae3ee2c3.png" alt="this is how your website will looks like" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">this is how your website will looks like</figcaption></figure><p>8️⃣ <strong>Click “Connect Wallet”</strong> → approve connection in MetaMask.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/6c968a94bc611e8bf9a3356bb89f9ffc61c13c1975844d287812f281e2dae4fd.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>9️⃣ <strong>Try “Set Number”</strong> → approve transaction in MetaMask.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e6d40f4db58fd5d7e70f74052fbcf2de2ca595b0b3705b50304f1b73ea7f5a85.png" alt="Click confirm to store value." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Click confirm to store value.</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/f7ea78d0e3def61aaa3512679bb09a3a307945169138340fa308fcf7aa466107.png" alt="After successfull transaction you will get the popup and confirmed transaction popup from the metamask." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">After successfull transaction you will get the popup and confirmed transaction popup from the metamask.</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7c2308e477c96c310b2673f40a71afc947c27a24a64b76d3aabfdd6abf3aeb8c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><p>🔟 <strong>Click “Get Number”</strong> → it shows the number stored on-chain.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d793674bdfe388682e333923236d726d5689972880e4fed668a04a8f6005c486.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-wrapping-up" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Wrapping Up</h3><p>In this part of the Web3 Developer Docs, you’ve learned how to:</p><p>✅ Create a simple frontend with <strong>HTML + TailwindCSS</strong></p><p>✅ Use <strong>Ethers.js</strong> to connect your MetaMask wallet</p><p>✅ Interact with your smart contract by <strong>storing and retrieving values</strong></p><p>This was your first step in building a frontend that can <strong>talk to the Ethereum blockchain</strong>. You now have a working dApp where users can connect their wallet, write data, and read data directly from a deployed contract.</p><p>👉 In the next part, we’ll go one level deeper ,breaking down the code you just wrote and explaining what each piece does, so you fully understand how the dApp works behind the scenes.</p><p>Welcome to the world of Ethereum Web3,your journey as a blockchain developer has just begun! 🚀</p>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0cfc1a9b116f635d117afbfbc9b0036c9d89fefe2c3b690b0f2e745517a5ced9.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From Zero to Web3: Harini’s Ethereum Series - Part 2]]></title>
            <link>https://paragraph.com/@harini-priya-k/from-zero-to-web3-harini-s-ethereum-series-part-2-2</link>
            <guid>qHeRiaic6ZZY00gCzVto</guid>
            <pubDate>Wed, 24 Sep 2025 08:48:20 GMT</pubDate>
            <description><![CDATA[IntroductionWelcome back to the Web3 Developer Docs! In the previous guide, you set up the foundation learned the prerequisites, enabled a testnet, and created your first Ethereum wallet with MetaMask. 🚀 Now, we’ll take the next big step: actually understanding how Ethereum works under the hood and writing your very first smart contract. By the end of this guide, you’ll know how to:Understand Ethereum fundamentals: what the network is, how it works under the hood, and what it’s used for.Writ...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Introduction</h2><p>Welcome back to the <strong>Web3 Developer Docs!</strong></p><p>In the previous guide, you set up the foundation learned the prerequisites, enabled a testnet, and created your first Ethereum wallet with MetaMask. 🚀</p><p>Now, we’ll take the next big step: actually understanding how Ethereum works under the hood and writing your very first <strong>smart contract</strong>.</p><p>By the end of this guide, you’ll know how to:</p><ul><li><p>Understand <strong>Ethereum fundamentals</strong>: what the network is, how it works under the hood, and what it’s used for.</p></li><li><p>Write your first <strong>Solidity smart contract</strong>.</p></li><li><p>Deploy it safely on an <strong>Ethereum testnet</strong> using Remix and MetaMask.</p></li></ul><h2 id="h-ethereum-fundamentals" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Ethereum Fundamentals</h2><p>Before writing code, let’s cover some core Ethereum concepts:</p><ul><li><p><strong>What is the Ethereum network?</strong> → A decentralized blockchain for sending transactions, deploying smart contracts, and building DApps.</p></li><li><p><strong>How does Ethereum work?</strong> → Transactions and smart contracts are processed by nodes/validators, secured with cryptography, and powered by ETH gas fees.</p></li><li><p><strong>What is Ethereum used for?</strong> → Running DApps, DeFi, NFTs, DAOs, smart contracts, and peer-to-peer value transfer with ETH.</p></li><li><p><strong>How to start using Ethereum?</strong> → Create a wallet (e.g., MetaMask), connect to the mainnet/testnet, and get ETH for transactions.</p></li></ul><p>👉 Think of Ethereum as a global computer, and <strong>gas</strong> as the fuel that keeps it running.</p><h2 id="h-writing-your-first-smart-contract-solidity-101" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Writing Your First Smart Contract (Solidity 101)</h2><p>We’ll use Remix IDE (browser-based, no setup required) to write a <strong>Simple Storage</strong> contract.</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://remix.ethereum.org/#lang=en">https://remix.ethereum.org/#lang=en</a></p><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 public storedNumber;

    // Store a number
    function setNumber(uint256 _num) public {
        storedNumber = _num;
    }

    // Retrieve the stored number
    function getNumber() public view returns (uint256) {
        return storedNumber;
    }
}
"><code><span class="hljs-comment">// SPDX-License-Identifier: MIT</span>
<span class="hljs-meta"><span class="hljs-keyword">pragma</span> <span class="hljs-keyword">solidity</span> ^0.8.0;</span>

<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">SimpleStorage</span> </span>{
    <span class="hljs-keyword">uint256</span> <span class="hljs-keyword">public</span> storedNumber;

    <span class="hljs-comment">// Store a number</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setNumber</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> _num</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        storedNumber <span class="hljs-operator">=</span> _num;
    }

    <span class="hljs-comment">// Retrieve the stored number</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getNumber</span>(<span class="hljs-params"></span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">view</span></span> <span class="hljs-title"><span class="hljs-keyword">returns</span></span> (<span class="hljs-params"><span class="hljs-keyword">uint256</span></span>) </span>{
        <span class="hljs-keyword">return</span> storedNumber;
    }
}
</code></pre><h3 id="h-explanation" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Explanation</h3><ul><li><p><code>storedNumber</code> → A variable saved on-chain.</p></li><li><p><code>setNumber()</code> → Updates the variable.</p></li><li><p><code>getNumber()</code> → Reads the variable.</p></li></ul><h2 id="h-deploying-to-an-ethereum-testnet" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Deploying to an Ethereum Testnet</h2><p>Deploying smart contracts on <strong>mainnet</strong> costs real ETH, so developers use <strong>testnets</strong> <strong>Sepolia</strong> with free faucet ETH.</p><h3 id="h-steps-to-deploy" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">✅ Steps to Deploy:</h3><p>1️⃣Open <strong>Remix IDE</strong>.</p><p>2️⃣Paste your smart contract code.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/de7d3ad73f04040ab69c85af974a766a43e0d0f179c540354df71550043700ad.png" alt="create Storage.sol under the contracts folder, paste the Solidity code, and save" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">create Storage.sol under the contracts folder, paste the Solidity code, and save</figcaption></figure><p>3️⃣Compile the contract using the Solidity compiler.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0296fe4df8e8e321a46a4e980a2d28ed96e0dc9cac43abd4a296798e5c31d5bd.png" alt="After clicking Compile, if you see a ✅ green tick on the sidebar solidity compiler icon, it means the contract compiled successfully." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">After clicking Compile, if you see a ✅ green tick on the sidebar solidity compiler icon, it means the contract compiled successfully.</figcaption></figure><p>4️⃣Open <strong>Deploy &amp; Run Transactions</strong> → select <strong>Injected Provider (MetaMask)</strong>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3d343748933241ad95f19f25af81058a4d7d10a6ddebf1794181b27675163c71.png" alt="Check Whether your in the correct file." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Check Whether your in the correct file.</figcaption></figure><p>5️⃣Click <strong>Deploy</strong> and approve the transaction in MetaMask.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/fd7a717c6001a6767fb8f719c91a5217c61c5266759effa79d3ff1269104090e.png" alt="After successful deployment you will get the transcation details." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">After successful deployment you will get the transcation details.</figcaption></figure><p>🎉 Your contract is now live on the testnet! You can call:</p><ul><li><p><code>setNumber(42)</code> → Store a number.</p></li><li><p><code>getNumber()</code> → Retrieve it back.</p></li></ul><p>In the <strong>Deployed Contracts</strong> section of Remix, expand <strong>Storage</strong> to interact:</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a02906a97389bf4c9b9940dabdef9cbeacd1e4a8f32a0f0cfdbdd3ba48e3292e.png" alt="In the Deployed Contracts section, go to setNumber, enter a number, and click the button. MetaMask will pop up asking for permission,click Confirm. After the transaction is successful, you’ll see the transaction details in Remix terminal." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">In the Deployed Contracts section, go to setNumber, enter a number, and click the button. MetaMask will pop up asking for permission,click Confirm. After the transaction is successful, you’ll see the transaction details in Remix terminal.</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/bcb68da049fd623b67646413d7f58ef563bb91cec93f0be069c70af99d7e48bd.png" alt="When you call getNumber, the contract reads the storedNumber variable from the blockchain and displays it. This is the same value you entered earlier using setNumber, showing that your data is now permanently stored on Ethereum." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">When you call getNumber, the contract reads the storedNumber variable from the blockchain and displays it. This is the same value you entered earlier using setNumber, showing that your data is now permanently stored on Ethereum.</figcaption></figure><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/062912b86d5f52641b4a528dceed8d413c0ec26fb184a606b59a8e86a1275cc9.png" alt="Once you deploy your contract, you’ll receive a contract address in terminal that you can copy to build Dapp." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Once you deploy your contract, you’ll receive a contract address in terminal that you can copy to build Dapp.</figcaption></figure><h2 id="h-wrapping-up" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Wrapping Up</h2><p>You’ve now taken the next step in your Ethereum Web3 journey:</p><ul><li><p>Learned the fundamentals: the Ethereum network, how it works, what it’s used for, and how to start using it.</p></li><li><p>Written your first <strong>Solidity smart contract</strong>.</p></li><li><p>Deployed it successfully to an <strong>Ethereum testnet</strong>.</p></li></ul><p>👉 In the next docs, we’ll dive into:</p><ul><li><p>Interacting with your contract using <strong>Web3.js / Ethers.js</strong>.</p></li><li><p>Understanding <strong>events and logs</strong>.</p></li><li><p>Exploring <strong>real-world dApp building</strong>.</p></li></ul><p>Welcome to the world of Ethereum Web3,your journey as a blockchain developer has just begun! 🚀</p>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/138971de086452a78bc897db8b5ef4ef2692633a7ce01a77eed61bc9fbc7c194.jpg" length="0" type="image/jpg"/>
        </item>
        <item>
            <title><![CDATA[From Zero to Web3: Harini’s Ethereum Series - Part 1]]></title>
            <link>https://paragraph.com/@harini-priya-k/from-zero-to-web3-harini-s-ethereum-series-part-1-2</link>
            <guid>qShd8uOXduXJJKhpuAF2</guid>
            <pubDate>Wed, 24 Sep 2025 08:39:54 GMT</pubDate>
            <description><![CDATA[IntroductionWelcome to the Web3 Developer Docs! This guide will help you get started with Ethereum and Web3 development. By the end, you’ll know how to:Understand the basics of Web3 & EthereumSet up the necessary tools for developmentCreate and configure your first walletWeb3 is about decentralization instead of relying on centralized servers, we use blockchains (like Ethereum) where data and applications are owned and controlled by users.PrerequisitesBefore you dive in, make sure you’re fami...]]></description>
            <content:encoded><![CDATA[<h2 id="h-introduction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong><em>Introduction</em></strong></h2><p>Welcome to the <strong>Web3 Developer Docs</strong>!</p><p>This guide will help you get started with Ethereum and Web3 development.</p><p>By the end, you’ll know how to:</p><ul><li><p>Understand the basics of Web3 &amp; Ethereum</p></li><li><p>Set up the necessary tools for development</p></li><li><p>Create and configure your first wallet</p></li></ul><p>Web3 is about <strong>decentralization</strong> instead of relying on centralized servers, we use <strong>blockchains</strong> (like Ethereum) where data and applications are owned and controlled by users.</p><h2 id="h-prerequisites" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong><em>Prerequisites</em></strong></h2><p>Before you dive in, make sure you’re familiar with the following:</p><ul><li><p><strong>Basic Programming Knowledge</strong> → JavaScript is most common in Web3.</p></li><li><p><strong>Web Fundamentals</strong> → HTML, CSS, APIs.</p></li><li><p><strong>Node.js &amp; npm/yarn</strong> → required for running development tools.</p></li><li><p><strong>Git &amp; GitHub</strong> → version control for your projects.</p><p><strong>Blockchain Basics:</strong></p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/a4c7c454069244a95df32dea33f820fb8bdb1bc2dd398cf4ddcdf86277aec48e.jpg" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-tools-youll-need" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong><em>Tools You’ll Need:</em></strong></h3><ul><li><p>Google Chrome or Brave browser</p></li><li><p>Metamask Wallet (browser extension)</p></li><li><p>Remix IDE (for writing smart contracts)</p></li><li><p>A <strong>testnet faucet</strong> (to get free ETH for practice, e.g. Sepolia Faucet)</p></li></ul><p>Your <strong>Ethereum wallet</strong> is your entry point to Web3. We’ll use <strong>MetaMask</strong>.</p><h3 id="h-step-1-install-metamask" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step 1: Install MetaMask</h3><ul><li><p>Go to the <strong>Chrome Web Store.</strong></p></li><li><p>Search for <strong>MetaMask</strong> and install the official browser extension.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/7d9047014692f340bffe3823204528073d285f37a149ee6f3b4ffb8340c56ddc.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h3 id="h-step-2-create-a-new-wallet" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step 2: Create a New Wallet</h3><ol><li><p>Click <strong>Get Started</strong> → <strong>Create a Wallet</strong>.</p></li><li><p>Set a <strong>strong password</strong>.</p></li><li><p><strong>Backup your Secret Recovery Phrase</strong> (write it down, never share it).</p></li><li><p>Confirm your recovery phrase in the app.</p></li></ol><h3 id="h-step-3-open-metamask-settings" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step 3: Open MetaMask Settings</h3><ul><li><p>Click your account icon → Go to <strong>Settings</strong> → <strong>Advanced</strong>.</p></li></ul><h3 id="h-step-4-show-test-networks" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step 4: Show Test Networks</h3><ul><li><p>Toggle <strong>Show test networks</strong> → ON.</p></li></ul><h3 id="h-step-5-switch-to-test-network" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step 5: Switch to Test Network</h3><ul><li><p>Open MetaMask → Click <strong>Networks</strong> dropdown.</p></li><li><p>Enable Sepolio <strong>Test Network</strong>.</p></li><li><p>Copy your wallet address.</p></li></ul><h3 id="h-step-6-get-test-eth" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Step 6: Get Test ETH</h3><ul><li><p>Visit <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://cloud.google.com/application/web3/faucet/ethereum/sepolia">https://cloud.google.com/application/web3/faucet/ethereum/sepolia</a> to get faucet .</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/3cd267e88603d4694e49f5c31f0b770c5d86a704ce23cb5b02b2821d9dae27f7.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><ul><li><p>Paste your wallet address → Request test ETH.</p></li><li><p>Wait for confirmation → You’ll see 0.5ETH in MetaMask.</p></li></ul><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/e4ca84cdf01f817354766ad87e6ce5784773d8113d1fac0ec5fb969def08fd8c.png" alt="" blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="hide-figcaption"></figcaption></figure><h2 id="h-wrapping-up" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Wrapping Up</h2><p>You’ve now set up the basics needed to start your Ethereum Web3 journey:</p><ul><li><p>You learned the <strong>prerequisites</strong> (tools and knowledge needed).</p></li><li><p>You installed and created your first <strong>Ethereum wallet (MetaMask)</strong>.</p></li><li><p>You’re ready to explore <strong>test networks</strong> and practice with free ETH.</p></li></ul><p>👉 In the <strong>next docs</strong>, we’ll dive into:</p><ul><li><p>Understanding <strong>Ethereum fundamentals</strong> (the Ethereum network, how it works, what it’s used for, and how to start using it).</p></li><li><p>Writing your <strong>first smart contract</strong> in Solidity.</p></li><li><p>Deploying it to an <strong>Ethereum testnet</strong>.</p></li></ul><p>Welcome to the world of Ethereum Web3,your journey as a blockchain developer has just begun! 🚀</p>]]></content:encoded>
            <author>harini-priya-k@newsletter.paragraph.com (Harini Priya K)</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/a061c84ec8adc7e049822a930d45079712808e414a4ee52f5225cfbd79fa8d2e.jpg" length="0" type="image/jpg"/>
        </item>
    </channel>
</rss>