<?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>Linea </title>
        <link>https://paragraph.com/@linea-7</link>
        <description>A developer-ready zk-rollup for scaling Ethereum dapps, powered by ConsenSys.</description>
        <lastBuildDate>Mon, 03 Aug 2026 00:09:49 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <image>
            <title>Linea </title>
            <url>https://storage.googleapis.com/papyrus_images/1dd55299cdd1940927a68965aad74471e2569fe4479f82a597c136bb3ad93fed.png</url>
            <link>https://paragraph.com/@linea-7</link>
        </image>
        <copyright>All rights reserved</copyright>
        <item>
            <title><![CDATA[Testnet Voyage LXP Drop Is Here]]></title>
            <link>https://paragraph.com/@linea-7/testnet-voyage-lxp-drop-is-here</link>
            <guid>xhMy6tD3dpx2TEXhWiJg</guid>
            <pubDate>Sun, 10 Nov 2024 18:59:52 GMT</pubDate>
            <description><![CDATA[This week our team is excited to make the largest and most anticipated LXP drop in Linea’s history for some of the biggest OGs. The Testnet Voyage Campaign dates back to May 2023 when our network was just getting started and Linea Goerli struggled mightily to keep up with the enthusiasm and persistence of community members who joined Linea&apos;s inaugural campaign. In recognition of these efforts, community members received Voyage NFTs distributed in five categories—Alpha, Beta, Gamma, Delta...]]></description>
            <content:encoded><![CDATA[<p>This week our team is excited to make the largest and most anticipated LXP drop in Linea’s history for some of the biggest OGs. The Testnet Voyage Campaign dates back to May 2023 when our network was just getting started and Linea Goerli struggled mightily to keep up with the enthusiasm and persistence of community members who joined Linea&apos;s inaugural campaign.</p><p>In recognition of these efforts, community members received Voyage NFTs distributed in five categories—Alpha, Beta, Gamma, Delta, and Omega —each <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.mirror.xyz/035Bre3MXYfXIHSoBhYy5Usb3737DfovRwq95DhYrKc">reflecting different levels of engagement and contribution</a> within the community.</p><p>Now the time has come to drop LXP to those Voyage NFT holders.</p><p>We have been listening to community suggestions regarding LXP on social media. Many of our longest-term and daily community members – the hardcore Linea maxis who have participated in LXP campaigns since Testnet Voyage and even more importantly have become vital community members active outside of the Voyage campaigns – have frequently shared valuable insights on how to manage our point system. We’ve taken that feedback into consideration in this case and are happy to announce we’re incorporating much of what we heard from you into our planned drop.</p><h3 id="h-tldr" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>TL;DR</strong> -</h3><p>After reviewing the holders of Testnet Voyage NFTs, it became clear that if we stacked the drop linearly and equally, the majority of Testnet Voyage holders would collect a small amount of LXP, while a tiny minority (less than 1% of holding addresses) would collect a large amount.</p><p>To prioritize the majority of our community members, we have conducted a stacked logarithmic distribution for the LXP to Voyage NFTs.</p><h3 id="h-ndwr-need-details-wanna-read" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>ND;WR (Need Details; Wanna Read) -</strong></h3><p><strong>Analysis of Voyage NFT distribution reveals that while 99% of users hold between one and two NFTs per category, the top 1% own significantly more</strong>. This makes a linear scale approach unsuitable as it would disproportionately tilt to these few users.</p><p>However, a logarithmic scale approach ensures a balanced distribution, where amounts increase at a diminishing rate with more NFTs held.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/8a99e8b61b8a450db3629280c743d9ab06c9b68b283526dc6a05e42c2db5fc89.png" alt="Example distribution if we used a linear approach, using older data. We can see the majority of users would receive minimal LXP, which would be concentrated into the hands of large holders." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Example distribution if we used a linear approach, using older data. We can see the majority of users would receive minimal LXP, which would be concentrated into the hands of large holders.</figcaption></figure><p>Example distribution if we used a linear approach, using older data. We can see the majority of users would receive minimal LXP, which would be concentrated into the hands of large holders.</p><p>We feel therefore that the logarithmic approach is the optimal solution for distributing LXP due to its balanced structure. By incorporating a curve factor along with stacking, this approach is specifically designed to have a tipping point at the 99th percentile of NFT holders.</p><p>This ensures the vast majority of the community collects the lion’s share of LXP in this drop. Simultaneously, it maintains the promise of stackability for users with multiple NFTs.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/073b9ca054a1da1ca14f496a1c030c021a63bdc625b79c3101a318af91ffa76b.png" alt="Example distribution using the Logarithmic approach, using older data,  which showcases that the majority of the community receives most of the LXP distributed, while maintaining stackability for bigger holders." blurdataurl="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs=" nextheight="600" nextwidth="800" class="image-node embed"><figcaption HTMLAttributes="[object Object]" class="">Example distribution using the Logarithmic approach, using older data,  which showcases that the majority of the community receives most of the LXP distributed, while maintaining stackability for bigger holders.</figcaption></figure><p>Example distribution using the Logarithmic approach, using older data,  which showcases that the majority of the community receives most of the LXP distributed, while maintaining stackability for bigger holders.</p><h3 id="h-lxp-collection-breakdown" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>LXP Collection Breakdown:</strong></h3><p>We plan to drop LXP to holders of the various Voyage NFTs using the following principles:</p><ul><li><p>Snapshot Date and Time: Collection based on the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/LineaBuild/status/1849121817434218606">snapshot for the Testnet Voyage NFT</a> taken October 23, 2024 at 12:40 UTC (block height: 11113454).</p></li><li><p>Global Maximum: The maximum amount any NFT holder will receive is 7,317 LXP, which was the highest LXP amount held when crafting this allocation.</p></li><li><p>The breakdown for each category is as follows for the first NFT you hold:</p><ul><li><p>Alpha: 1715 LXP</p></li><li><p>Beta: 945 LXP</p></li><li><p>Gamma: 525 LXP</p></li><li><p>Delta: 245 LXP</p></li><li><p>Omega: 70 LXP</p></li></ul></li><li><p>Additional NFTs: If you hold more than one NFT in any category, the additional LXP you receive will not be the same as the first. Instead, the amount of LXP for additional NFTs will be calculated using a logarithmic formula, which means the LXP amount will stack but at a decreasing rate. This approach should ensure a fair LXP collection among all holders and is based around the following weights:</p><ul><li><p>Alpha NFT: 49%</p></li><li><p>Beta NFT: 27%</p></li><li><p>Gamma NFT: 15%</p></li><li><p>Delta NFT: 7%</p></li><li><p>Omega NFT: 2%</p></li></ul></li><li><p>The curve factor: A curve factor of 0.3 is applied to the logarithmic function, ensuring the drop falls to the majority of holders.</p></li></ul><p>For the math heads out there, the formula to determine the LXP of a user is the following:<em>min_points + (max_points - min_points) * log(nft_balance) / log(max_nft_count) ** curve_factor</em></p><p><em>Where:</em></p><ul><li><p><em>min_points and max_points are the minimum for holding 1 of each NFT tier, meaning 5 NFTs total, (3,500) and maximum amount any NFT holder can receive (7,317) * weight.</em></p></li><li><p><em>Nft_balance is the user balance of this NFT.</em></p></li><li><p><em>Max_nft_count is the balance of the top holder of this NFT.</em></p></li></ul><p><em>Examples:</em></p><p><em>A user holds 2 Alpha NFTs.They will get 1715 (first alpha NFT) + 1012 (second NFT) for a total of 2727 LXP.</em></p><p><em>Another user holds 1 Alpha NFT, 1 Beta NFT and 3 Gamma NFTs.</em></p><p><em>They will get 1715 (first alpha NFT) + 945 (first beta NFT) + 525 (first gamma NFT) + 342 (second and third gamma NFTs) for a total of 3527 LXP.</em></p><p>The drop of LXP for Testnet Voyage NFTs marks an important milestone in the Linea Voyage that started over a year ago. Thanks to the joint effort of users and developers, the Voyages have helped us build a robust ecosystem with innovative applications in DeFi, Gaming, and the creation of communities around meme projects within the Linea ecosystem.</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/8b62efd75ccbf8bf28b6aa269d40c808c6daf5f278aa212f8072fb90b77ecd52.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Linea at DevCon]]></title>
            <link>https://paragraph.com/@linea-7/linea-at-devcon</link>
            <guid>ITA7I8KWNgBmv6p2Np8c</guid>
            <pubDate>Fri, 01 Nov 2024 04:35:36 GMT</pubDate>
            <description><![CDATA[The Linea team and community will be simultaneously living life onchain and in Bangkok this month for Devcon 7 in Thailand, one of the longest-running events in the Ethereum ecosystem. Devcon gathers developers, researchers, creators, and innovators from around the globe. And we’re thrilled to be a part of this year’s edition, showcasing the latest and greatest from Ethereum’s global community. Here’s where to find us:November 11th: De.Fi WorldJoin us at De.Fi World 2024 in Bangkok, where exp...]]></description>
            <content:encoded><![CDATA[<p>The Linea team and community will be simultaneously living life onchain and in Bangkok this month for Devcon 7 in Thailand, one of the longest-running events in the Ethereum ecosystem. Devcon gathers developers, researchers, creators, and innovators from around the globe. And we’re thrilled to be a part of this year’s edition, showcasing the latest and greatest from Ethereum’s global community. Here’s where to find us:</p><h2 id="h-november-11th-defi-world" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">November 11th: De.Fi World</h2><p>Join us at De.Fi World 2024 in Bangkok, where experts, developers, and web3 community gather to explore the latest trends in decentralized finance. The event offers insightful keynotes, hands-on workshops, and valuable networking opportunities with leaders in the DeFi space. The Linea team will be on-site to connect with DeFi teams and enthusiasts, answer questions, and showcase how Linea is enabling innovation within the DeFi ecosystem.</p><p><strong>Location</strong>: The Athenee Hotel, Bangkok</p><p><strong>RSVP</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lu.ma/g6osektm">https://lu.ma/g6osektm </a></p><h2 id="h-november-12th-15th-devcon-7" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">November 12th - 15th: Devcon 7</h2><p>Devcon is the premier gathering of thousands of Ethereum developers and the wider web3 community. Linea will have a strong presence on the ground with Joseph Lubin, Consensys CEO, speaking on &quot;Decentralizing Consensys to Catalyze a Network State in the Emerging Decentralized Web3 + AI Global Economy.&quot; You’ll also hear from other Linea team members, including Alexandre Belling, Youssef El Housni and others.</p><p>Don’t forget to also stop by the Linea booth to learn more about what we’ve built and where we’re going next.</p><p><strong>Location</strong>: Queen Sirikit National Convention Center (QSNCC), Bangkok</p><p><strong>RSVP</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://devcon.org/en/tickets">https://devcon.org/en/tickets</a></p><h2 id="h-november-13th-l2con" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">November 13th: L2Con</h2><p>Look for a big announcement from Linea at L2Con, the largest event dedicated to Ethereum scaling, modularity, and infrastructure. With over 800 registered attendees, including developers, technical founders, researchers, and web3 business specialists, L2Con offers an unmatched opportunity to connect with leading minds in the space.</p><p>Expect multiple keynotes and news from Linea, including major updates and strategic partnerships that will further shape the Ethereum ecosystem.</p><p><strong>Location</strong>: Waldorf Astoria, Bangkok</p><p><strong>RSVP</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lu.ma/l2conbangkok">https://lu.ma/l2conbangkok</a></p><h2 id="h-november-13th-builder-nights" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">November 13th: Builder Nights</h2><p>Linea will co-host another installment of Builder Nights, a popular, builder-focused event bringing together web3 builders and leaders to foster innovation and co-creation in a non-commercial, inclusive environment. Attendees can engage in interactive activities like the Builder Rap Battle and Builder Chess while deepening their knowledge of decentralized technology.</p><p><strong>Location</strong>: EmWonder @ Level 5 EmSphere</p><p><strong>RSVP</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lu.ma/80mtze59">https://lu.ma/80mtze59 </a></p><h2 id="h-november-13th-altlayer-rollup-day" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">November 13th: AltLayer Rollup Day</h2><p>Get ready for Rollup Day by AltLayer. This highly anticipated event will bring together Linea leaders with leading minds like Vitalik Buterin from the rollup, staking, and restaking spaces for engaging discussions, showcases, and insights. Attendees can expect exciting announcements from top innovators in the space.</p><p><strong>Location</strong>: Carlton Hotel Bangkok Sukhumvit</p><p><strong>RSVP</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lu.ma/d5720aov">https://lu.ma/d5720aov</a></p><h2 id="h-november-13th-14th-thailand-web3-conference-thw3" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">November 13th -14th: Thailand Web3 Conference (THW3)</h2><p>THW3 is a founder-focused event, bringing together the global and SEA web3 communities. Supported by partners including Consensys, Maven11, and 1kx, the conference offers a platform for founders to network, share insights and explore trends across four key themes: abstraction, consumer apps, modularity and rollups. Linea thought leaders will be on hand and on stage.</p><p><strong>Location</strong>: Samyan Mirtown, Bangkok</p><p><strong>RSVP</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lu.ma/thw3">https://lu.ma/thw3</a></p><h2 id="h-november-15th-linea-x-bitkub-meetup" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">November 15th: Linea X BitKub Meetup</h2><p>Join the Linea team for a meetup with BitKub, Thailand’s largest CEX, to connect with the Thai web3 community, and explore opportunities in the SEA region. Attendees will hear from expert speakers on local market trends while networking with developers, key opinion leaders, and industry leaders.</p><p>This event offers valuable insights into building on Linea and provides opportunities to explore its ecosystem, including reward programs, campaigns, and trending dapps.</p><p><strong>Location</strong>: 2525 FYI Center Building 2, 11th Floor, Rama IV Road, Khlong Toei Subdistrict, Khlong Toei District, Bangkok 10110</p><p><strong>RSVP</strong>: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://lu.ma/7zgt2on0">https://lu.ma/7zgt2on0</a></p><h2 id="h-november-15th-17th-ethglobal-bangkok" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">November 15th - 17th: ETHGlobal Bangkok</h2><p>ETHGlobal is back and Linea is bringing the heat with bounties for hackathon participants! With top DevRels on-site to mentor, support, and judge, you&apos;ll have everything you need to turn your wildest dapp ideas into reality on Linea’s zkEVM. Unleash your creativity, build big, and push the limits!</p><p><strong>Location</strong>: Queen Sirikit National Convention Center (QSNCC), Bangkok</p><p><strong>RSVP:</strong> <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://ethglobal.com/events/bangkok/apply">https://ethglobal.com/events/bangkok/apply</a></p><h2 id="h-see-you-at-devcon-7-in-bangkok-builders" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">See You at Devcon 7 in Bangkok, Builders</h2><p>We look forward to connecting with you at Devcon 7 and engaging in conversations that will shape the future of Linea, Ethereum and blockchain technology.</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/ba67ac82fb90ee748a49e63cd6930f5afe82207a3ed7d3386469db0766d90ea6.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Your Identity on Linea]]></title>
            <link>https://paragraph.com/@linea-7/your-identity-on-linea</link>
            <guid>8auTSjA9QFjK9oYSiO3N</guid>
            <pubDate>Wed, 30 Oct 2024 18:53:05 GMT</pubDate>
            <description><![CDATA[The Linea Identity Stack streamlines the management of your digital identity – the reputation and credentials you use to connect and transact onchain.Digital identity is crucial to how we live our onchain lives. At baseline, taking control of one’s digital identity means you have the authority, autonomy, and tools to manage your personal information, decide who can access it, and control how it is used across digital platforms. It enables you to protect your privacy, verify your identity, and...]]></description>
            <content:encoded><![CDATA[<h3 id="h-the-linea-identity-stack-streamlines-the-management-of-your-digital-identity-the-reputation-and-credentials-you-use-to-connect-and-transact-onchain" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The Linea Identity Stack streamlines the management of your digital identity – the reputation and credentials you use to connect and transact onchain.</h3><p>Digital identity is crucial to how we live our onchain lives. At <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/WebOfTrustInfo/self-sovereign-identity/blob/master/self-sovereign-identity-principles.md">baseline</a>, taking control of one’s digital identity means you have the authority, autonomy, and tools to manage your personal information, decide who can access it, and control how it is used across digital platforms. It enables you to protect your privacy, verify your identity, and manage how you interact in the digital world without relying on third-party control or centralized entities.</p><p>Taking things farther, in web3 you can prove your humanity and leverage your digital reputation for seamless onchain transactions and diverse interactions with dapps; and you can also foster personal connections by expressing your affiliation with onchain communities.</p><p>On Linea, we are building a human-centric identity system – composed of Verax, Proof of Humanity (PoH), and Linea Names – empowering you to take full control and optimize the management of your onchain identity in order to set the terms for your digital and financial life.</p><p>Read on to learn how.</p><h3 id="h-verax-your-onchain-attestation-registry" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Verax: Your Onchain Attestation Registry</strong></h3><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://ver.ax/">Verax</a> is an onchain attestation registry, which is a consolidated location onchain for storing pieces of data called attestations. The community-maintained initiative was originally built by teams including Consensys, Clique, Aspecta, Hapi, and Karma3 Labs. Currently, Verax is one of the largest attestation registries in web3 and a major provider of PoH attestations, with nearly 6 million attestations and over 1.5 million unique users.</p><p>Attestations are claims or verifiable credentials issued by one entity about another. A government could, for example, attest to a person’s citizenship or age, allowing them to access specific services that require proof of age or residency without revealing sensitive personal data. Employers and educational institutions could issue credentials such as degrees, certificates, and employment history to streamline job application or background check processes.</p><p>Within a web3 context specifically, attestations can enable a decentralized reputation system. For users, attestations accumulated over time from different sources can vouch for their behavior, trustworthiness, or skill levels. Dapps or P2P DeFi users could then rely on onchain reputation scores based on attestations to make lending, borrowing, or trading decisions—establishing trust without centralized intermediaries.</p><p>While this sort of data is traditionally minted onchain as soulbound tokens (SBTs) / non-transferable NFTs, attestations offer several advantages: they are easily discoverable, structured for easy consumption, and can expire, be revoked, replaced, or linked together.</p><p>For builders on Linea, Verax allows them to make one single integration, and subsequently consume and compose attestations from multiple sources.  Human verification attestations in particular are extremely valuable because they enable Linea dapps to confirm they are interacting with real-world humans—something much more interesting than interacting with pseudonymous wallet addresses.</p><p>Behavioral attestations could then be used by dapps to create and offer tailored experiences for certain users, including assigning unique rewards and discounts. For example a KYC’d user with a good lending reputation could access undercollaterialized lending offers from DeFi dapps on Linea.</p><p>Verax’s unique module architecture means it can be used for virtually any use case, so these examples are really just the beginning.</p><p>The first Verax use case to gain traction on Linea is Proof-of-Humanity.</p><h3 id="h-proof-of-humanity-an-inclusive-approach-to-verifying-digital-identity" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Proof of Humanity: An Inclusive Approach to Verifying Digital Identity</strong></h3><p>We built <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://poh.linea.build/">Proof of Humanity</a> to help protect communities against sybils and bots. Our PoH system allows users to prove they are human by selecting the verification approach that best suits their individual journeys in web3.</p><p>For users, attaining PoH verification provides a credential that can be used across the ecosystem, granting access to increasing benefits. For builders, Linea’s PoH system offers a free-to-use database of real users in the ecosystem, helping protect dapps against bots and sybils.</p><p>To obtain PoH, users navigate to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://poh.linea.build/">Proof of Humanity portal</a> and select three PoH providers for attestations, choosing at least one from Group A and two from Group B. This flexible approach recognizes that not all methods suit everyone; some may avoid sharing sensitive biometrics, while others may reuse KYC from a CEX or rely on onchain analytics. By offering multiple options, Linea accommodates different preferences and journeys. Whether you are an OG or new to web3, we provide this choice because we recognize everyone’s experience is unique.</p><h3 id="h-linea-names-human-readable-wallet-addresses" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Linea Names: Human-Readable Wallet Addresses</strong></h3><p>Earlier this year, ENS domains launched on Linea, allowing users to begin switching their 42-character Ethereum wallet addresses to a human-readable domain. Now, everyone can obtain an ENS under the Linea ENS subdomain, such as username.linea.eth, by <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://names.linea.build/">visiting the Linea ENS portal to register their username</a>. The portal requires users to prove their humanity to prevent bot squatting and limits usernames to one per account. Additionally, Linea names are resolvable on L1 via an offchain resolver.</p><p>Linea Names represents a significant advancement in enabling users to claim their onchain identity, simplifying the process of registering ENS names and building user profiles. By providing a single canonical identifier for real users across the ecosystem, developers can create consistent and coherent user experiences, making navigating Linea feel natural and intuitive.</p><p>For users, registering a *.linea.eth name provides a human-readable identifier that is natively integrated on Linea. This identifier can be associated with your address to receive funds. Moreover, your Linea ENS name allows you to build a profile that can be used by dapps when you log in using your wallet. Once you have your *.linea.eth name, you can click on “Edit profile” and “Add more to profile” to include additional fields.</p><p>Expanded use cases of Linea Names have already begun to spring up, serving as identifiers for some of Linea’s strongest communities. Efrogs, an OG PFP collection on Linea, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.mirror.xyz/mVK4sN1EsB1FUYg94wwzPv-8t-Fj3Z5MZoUYr49crQ4">integrated with CCIP Read</a> to automatically provide NFT holders with personalized ENS subdomains like 1.efrogs.eth. Project-specific subnames like this allow users to tie their membership to their web3 identity, serving as a status symbol and enhancing their sense of belonging within the community.</p><h2 id="h-looking-ahead" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Looking Ahead</h2><p>We stand at the frontier of this space, innovating to deliver more exceptional experiences and increased value to both Linea users and dapps.</p><p>On top of the foundation of the tools outlined above, we are working to expand utility so that each individual can do more with their digital identity. We aim to create even richer experiences for each person interacting onchain with verified humanity and credentials.</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/fe98dbede7b5b49c80279afa06bde62681960b8beee6ae1deae2ebba227d689d.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Boost Your ‘Life on Linea’ Contest Votes and Get Instant Rewards With Phosphor]]></title>
            <link>https://paragraph.com/@linea-7/boost-your-life-on-linea-contest-votes-and-get-instant-rewards-with-phosphor</link>
            <guid>tofWdUP5oPXYNqwkEAeA</guid>
            <pubDate>Thu, 24 Oct 2024 19:13:28 GMT</pubDate>
            <description><![CDATA[The Life on Linea contest invites both users and builders to share their best content across social media, showcasing your favorite parts of onchain life on Linea. At the end of each week, participants can win a share of the weekly 2.5 ETH prize pool, awarded based on the number of votes they receive from curators. In this blog, we’ll share how you can increase your chances of winning a share of the weekly prize pool by 20%. You can also get instant rewards by sharing your content as an NFT a...]]></description>
            <content:encoded><![CDATA[<p>The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.mirror.xyz/S1kX0o2i3J-fX0pEsu5S2gD4Hkwj3Be5JwjXvExaydo">Life on Linea contest</a> invites both users and builders to share their best content across social media, showcasing your favorite parts of onchain life on Linea. At the end of each week, participants can win a share of the <strong>weekly</strong> <strong>2.5 ETH prize pool</strong>, awarded based on the number of votes they receive from curators. In this blog, we’ll share how you can increase your chances of winning a share of the weekly prize pool by 20%. You can also get instant rewards by sharing your content as an NFT and collecting Life on Linea NFTs on Phosphor.xyz</p><p>For a look at the full contest instructions, read this <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.mirror.xyz/S1kX0o2i3J-fX0pEsu5S2gD4Hkwj3Be5JwjXvExaydo">blog</a>.</p><h2 id="h-get-instant-rewards-by-sharing-your-content-as-an-nft" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Get instant rewards by sharing your content as an NFT</strong></h2><p><strong>Boost your Life on Linea contest votes</strong></p><p>To receive a 20% bonus on the total number of votes your post will get from curators, you must mint your submission as an NFT drop on Linea on Phosphor.xyz and include the Phosphor link in your post’s caption on socials.</p><p><strong>Receive a share of the mint fees</strong></p><p>Additionally, for every one of your NFTs that are minted, you will automatically <strong>receive</strong> <strong>45% of the mint fees</strong> paid by collectors (0.000111 ETH on Linea, around $0.30). So share the claim link widely to your network!</p><p><strong>Compete in collecting the most NFTs to win Phosphor’s “Collector Prize Pool”</strong></p><p>Your NFT and all the others created as part of the contest will appear on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://phosphor.xyz/?utm_source=phosphor-blog&amp;utm_medium=content&amp;utm_campaign=cmp-69622640-afbf08">Phosphor Feed</a> where collectors can discover and mint them. For each mint, we are setting aside the remaining 55% of the mint fee and we are going to redistribute this pool of funds to the most active collectors. If you want a chance to win a share of the reward pool, while also supporting your fellow Life on Linea contestants, mint as many drops as you can!</p><p><strong>Step 1: Create content</strong></p><p>Create content (<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.mirror.xyz/S1kX0o2i3J-fX0pEsu5S2gD4Hkwj3Be5JwjXvExaydo">see guidelines</a>) representing your submission for either &quot;Life on Linea&quot; or &quot;Build on Linea&quot;. If you intend on submitting it as an NFT on Phosphor, make sure the file size is less than 50MB.</p><p><strong>Step 2: Sign up on Studio.Phosphor.xyz (desktop only)</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/acff04a8af1762e10d6a893b8c114e9fe91909de58c8c8052b302f5b1a8d9f8b.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>Step 3: Select the “Your Life on Linea” Recipe</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/d23d10e52ccea23dbb66ded55f6ad714f3c5eca9758e60e11064209ed3cca977.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>Step 4: Upload your content and details</strong></p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/685f6402aa76efa8ffcceaaa3454ee156d4b114de6aba99fe3e30e96d1be3bbf.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><ol><li><p>Select your content, either “Life on Linea” or “Build on Linea”. Not sure? <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.mirror.xyz/S1kX0o2i3J-fX0pEsu5S2gD4Hkwj3Be5JwjXvExaydo">Read this</a></p></li><li><p>Give a title to your NFT or leave the default option</p></li><li><p>Upload your media file (JPG, PNG, GIF, MP4 formats are recommended). The file should be less than 50MB. If you upload a video, you will be asked to also upload a thumbnail image.</p></li><li><p><strong>Important:</strong> add the wallet address where you would like to receive your creator payout, i.e. 45% of the mint fees paid by collectors of your NFT.</p></li></ol><p><strong>Step 5: Share your original content on social media, including Phosphor claim link</strong>\ Share as as post on X, Youtube, Instagram, Warpcast, TikTok or LinkedIn and include the Phosphor claim link in your social post’s caption</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/b8d94a6e661d50736c8478af390b32e27c1245e329af1f52a5ca64fed049486e.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>Step 6: Share on Discord</strong>\ Share the link to your post on the above social platform in the appropriate Discord channel:</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/linea">Life on Linea Channel</a> for user-focused content and submission in the Life on Linea contest.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/linea">Build on Linea Channel</a> for developer-focused content and submission in the Build on Linea contest.</p></li></ul><p><em>Note: To access the above Discord channels, you must first verify on </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://guild.xyz/linea"><em>guild.xyz/linea</em></a><em> to be assigned the Life on Linea Ambassador and/or Build on Linea Ambassador Discord roles.</em></p><p>-</p><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/phosphorxyz">Follow Phosphor on X</a> to stay updated on the leaderboard of collectors.</p><p><strong>We can’t wait to see what you create!</strong></p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/2c928f074e05a9d6e4b671624c3c03b8790aa24d3bb8146f2c7cf130f5e71b34.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Introducing the Life on Linea Contests: Win Up To 2.5ETH Weekly]]></title>
            <link>https://paragraph.com/@linea-7/introducing-the-life-on-linea-contests-win-up-to-2-5eth-weekly</link>
            <guid>2oEUTL82ImUfcxbPxoKd</guid>
            <pubDate>Mon, 21 Oct 2024 21:29:16 GMT</pubDate>
            <description><![CDATA[The Life on Linea contests invite both users and builders to go wild creating their best content on X, Youtube, Instagram, Warpcast, TikTok or LinkedIn, showcasing your favorite parts of onchain life on Linea. We are running two contests: one for users (Life on Linea) and one for builders (Build on Linea). The contests last a total of 5 weeks starting on October 21st. Each round runs weekly from Monday to the following Monday, starting at 9:00 EST. At the end of each week, participants in eac...]]></description>
            <content:encoded><![CDATA[<p>The Life on Linea contests invite both users and builders to go wild creating their best content on <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://linea.mirror.xyz/">X</a>, Youtube, Instagram, Warpcast, TikTok or LinkedIn, showcasing your favorite parts of onchain life on Linea. We are running two contests: one for users (Life on Linea) and one for builders (Build on Linea).</p><p>The contests last a total of <strong>5 weeks</strong> starting on <strong>October 21st.</strong> Each round runs weekly from Monday to the following Monday, starting at <strong>9:00 EST.</strong> At the end of each week, participants in each contest can win a share of a <strong>2.5 ETH prize pool</strong>, awarded based on the number of votes they receive from curators.</p><p>Remember to support your fellow Lineans by reacting and commenting on each other&apos;s posts on socials! Increased engagement will enhance your posts visibility and will be taken into account by curators when they select the winning submissions.</p><h2 id="h-what-to-create" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>What To Create</strong></h2><p>This contest is about each of you and the ways you spend your days on Linea: whether investing in DeFi, making payments IRL with the MetaMask Card, using your Linea Name and building your onchain profile, or leaning on our developer resources to bring your projects to life.  You know Linea best, and we want to see what your life on Linea looks like.</p><h3 id="h-life-on-linea" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Life on Linea</strong></h3><p><em>How do you spend your time on Linea?  Answer this question however you see fit. We’re sure you have better ideas than we do but here are some suggestions:</em></p><ul><li><p><strong>Personal stories</strong> about your favorite things to do on Linea.</p></li><li><p><strong>Tutorials and tips</strong> for newcomers, shedding light on why you choose Linea and how it’s different from web2 and other L2s.</p></li><li><p><strong>Use of MetaMask Card</strong> and the last unique or meaningful thing you bought. (Add a link to the corresponding onchain transaction to your post).</p></li><li><p><strong>Wildest projects and art</strong> including use cases, artistic creations, video, gaming sessions, or innovative creative projects built on or mentioning Linea. For example, you can play with the Linea logo, animate it, etc. or showcase your new artistic creation on Phosphor.</p></li><li><p><strong>Fun and engaging content</strong> like memes or entertaining content related to Linea and its ecosystem.</p></li></ul><h3 id="h-build-on-linea" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Build on Linea</strong></h3><p><em>What are you building on Linea?</em> This is your chance to share all the innovative worlds you’re creating, including:</p><ul><li><p><strong>Showcases of</strong> dapps, tools, or projects developed on Linea.</p></li><li><p><strong>Technical walkthroughs</strong> including Insights, video tutorials, or detailed article of the building process on Linea. E.g How to build a Linea Dapp faster using AI</p></li><li><p><strong>Development updates</strong> featuring milestones reached by your dapp (daily active users, TVL …).</p></li><li><p><strong>Open-source contributions</strong> to Linea’s or Verax open-source repositories.</p></li></ul><h2 id="h-how-to-compete" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>How to Compete</strong></h2><ul><li><p><strong>Create content:</strong> Create content (see above) representing your submission for either &quot;Life on Linea&quot; or &quot;Build on Linea&quot;.</p></li><li><p><strong>Share on X</strong>, Youtube, Instagram, Warpcast, TikTok or LinkedIn.</p><ul><li><p><strong>Share on Discord:</strong> Share the link to your post on the above social platform in the appropriate Discord channel</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/linea"><strong>Life on Linea Channel</strong></a> for user-focused content and submission in the Life on Linea contest.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.gg/linea"><strong>Build on Linea Channel</strong></a> for developer-focused content and submission in the Build on Linea contest.</p></li></ul></li><li><p><strong><em>Note:</em></strong> <em>To access the above Discord channels, you must first verify on </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://guild.xyz/linea"><em>guild.xyz/linea</em></a><em> to be assigned the </em><strong><em>Life on Linea Ambassador</em></strong><em> and/or </em><strong><em>Build on Linea Ambassador</em></strong><em>  Discord roles.</em></p></li><li><p><strong><em>(Optional) Mint your submission as an NFT</em></strong> <em>on Phosphor.xyz and share the link in your social post’s captions for bonus points.</em></p></li></ul></li></ul><h2 id="h-contest-guidelines" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Contest Guidelines</strong></h2><p><strong>Remember these important guidelines:</strong></p><p><strong>✅ Include Linea!</strong> We’re here to learn about your life on Linea! Give your best Linea mention or shout-out to be considered.</p><p><strong>✅ Accepted mediums:</strong> videos, animations, any type of art, text posts, threads, images, and basically anything engaging you can share on your chosen social platform.</p><p><strong>✅ One submission per contest:</strong> Only one submission on Discord per participant per week for each contest. (That means you can have a total of two submissions if you participate in both contests). Focus on quality over quantity.</p><p>✅ <strong>Submission format:</strong> Your submission should include a caption or short text along with a link to your social media post. Example: <em>Just uploaded a video on TikTok showing how I used the MetaMask Card to pay for my coffee ☕️. Watch it here: [Link to your TikTok video]</em></p><p>✅ <strong>Submit only once:</strong> Once your submission is shared on Discord, it will count as final and cannot be edited. Be sure to review your entry before submitting!</p><p><strong>❌We don’t want to see:</strong> Violence and threats, hate speech, harassment and abuse, sensitive media, misinformation, or spam. This will disqualify you and prohibit you from participating in future rounds and other contests.</p><h3 id="h-how-winners-are-determined" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>How Winners are Determined</strong></h3><p>Curators will analyze all submissions shared in the Discord channel and select the winning submissions at the end of each week.</p><p>Evaluations will be based on:</p><ul><li><p><strong>Quality and creativity:</strong> Originality and appeal of your submission.</p></li><li><p><strong>Use case presentation:</strong> How well you showcase the possibilities of Linea.</p></li><li><p><strong>Community engagement:</strong> Engagement your post receives on socials.</p></li><li><p><strong>Phosphor Bonus:</strong> Mint your submission as an NFT drop on Linea on Phosphor.xyz and include the Phosphor link in your post’s caption on socials to receive a +20% bonus on the total number of votes your post will get from curators.</p></li><li><p><strong>Adherence to the contest guidelines.</strong></p></li></ul><p>Submissions with the most curator votes will share the <strong>2.5 ETH</strong> prize pool each week, distributed proportionally based on votes received from curators.</p><p>Head over to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://guild.xyz/linea">guild.xyz/linea</a> to access your Discord roles and submit your submission on Linea Discord. To join Linea Discord, visit <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.build/">https://linea.build/</a> and find the Discord icon.</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/455bb88867389fbe1bddd5b63b130b3afa2eefac2a7cca85b832c65ace497220.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Your Life on Linea]]></title>
            <link>https://paragraph.com/@linea-7/your-life-on-linea</link>
            <guid>ShW3x5OHCSm1KYXuPa4M</guid>
            <pubDate>Thu, 17 Oct 2024 14:44:12 GMT</pubDate>
            <description><![CDATA[The Home Network for the WorldThe vision for Linea began seven years ago with deep research into zero-knowledge technology. Five years later, that research came to life with the launch of Linea’s testnet, followed by Linea’s Alpha mainnet, and the explosive growth of gaming, DeFi and NFT sectors. In the 15 months since our mainnet launch, many of you have taken to dapps on Linea to buy, sell, swap, and stake; thousands have built non-stop to fulfill visions of new permissionless systems; othe...]]></description>
            <content:encoded><![CDATA[<h3 id="h-the-home-network-for-the-world" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>The Home Network for the World</strong></h3><p>The vision for Linea began seven years ago with deep research into zero-knowledge technology. Five years later, that research came to life with the launch of Linea’s testnet, followed by Linea’s Alpha mainnet, and the explosive growth of gaming, DeFi and NFT sectors.</p><p>In the 15 months since our mainnet launch, many of you have taken to dapps on Linea to buy, sell, swap, and stake; thousands have built non-stop to fulfill visions of new permissionless systems; others have found communities and grown their digital identity with memes and gaming; and as of recently, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.build/guildgames">even killed zombies.</a></p><p>Over this time we’ve been listening and learning from your continuous feedback across our social and support channels; from the wide variety of requests and collaboration with partners and builders; from the explosive growth you spurred during the Voyage quests—in an effort to realize Linea’s mission: to empower the world to live onchain.</p><p>To live onchain, web3 natives and explorers alike need a home. This is what we are striving to build and offer the world: a home network.</p><h3 id="h-building-and-growing-the-home-network" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Building and Growing the Home Network</strong></h3><p>Spearheaded by Ethereum ecosystem leaders and core developers, Linea’s leading ZK technology makes life on Ethereum effortless, starting with high-performance speed, cost, and scale. Beyond these L2 essentials, we&apos;ve been laser-focused on delivering exceptional user experiences for all kinds of web3 interactions. We’ve put our best minds to work and leveraged our close connection to MetaMask and Consensys to develop game-changing innovations in web3 security, digital identity, payments, and community, making Linea feel like home.</p><p>For Builders: We’ve invested heavily in a rich set of tools, resources, and support, including key MetaMask Developer integrations, to help builders create, deploy, and grow more powerful, stickier dapps.</p><p>At the center of all this is you—the main driver that will direct the future of our ecosystem, the home network for the world. As Linea progresses toward decentralization, your experience and your voice will determine our path forward.</p><p>Over the next few weeks, you will discover what the starting point looks like. We will walk through how we’ve approached solutions to web3’s most pressing technical, cultural, and coordination challenges. We will outline where we are today and what’s coming in the near future. Beyond that, you’ll help decide how your home network evolves.</p><p>Welcome to your life on Linea!</p><blockquote><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.build/apps">Explore the ecosystem</a>.</p></blockquote><h3 id="h-your-security-on-linea" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Your Security on Linea</strong></h3><p>There is no life onchain without security. Since day one, Linea has prioritized building the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.build/security">safest place from which to interact with web3</a>, working with over 20 security partners on threat prevention, real-time monitoring, post-incident tracing, user protection, and trust and reputation systems.</p><p>Linea’s zkEVM is the most secure L2 solution, inheriting the security of Ethereum validators and outperforming Optimistic rollups by using mathematical validity proofs to constantly verify L2 activity on the mainnet. At the dapp, community, and protocol level, we’re building the most robust security system in web3, enabling you to transact safely onchain.</p><h3 id="h-your-identity-on-linea" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Your Identity on Linea</strong></h3><p>Linea is dedicated to building a human-centric network. The Linea Identity Stack—composed of Verax, Proof of Humanity, and Linea Names—empowers you to take full control and begin to unlock the value of your digital identity. Whether you’re collecting a new NFT to tie your identity to a project or leveraging on-chain attestations to interact seamlessly with dapps, Linea’s tools are in place to help you harness the value of your reputation.</p><p>Verax, an open-source, public registry for storing on-chain attestations is designed for enhanced discoverability and composability. Proof of Humanity, meanwhile, allows for the verification of unique human identities, preventing sybil attacks and ensuring that each identity is tied to a real person.</p><p>And as <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/VitalikButerin/status/1826500707005890796">vocalized by Vitalik Buterin</a>, standardization across chain-specific addresses is a next frontier for the ecosystem. The launch of <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://names.linea.build/">Linea Names</a> answers this call, translating blockchain addresses to human-readable labels, and establishing a new outlet for decentralized digital identities.</p><h3 id="h-your-money-on-linea" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Your Money on Linea</strong></h3><p>Linea is home to a robust network of DeFi dapps, enabling you to buy, sell, swap, trade and stake tokens. But your money on Linea doesn’t stop there. With the recently introduced <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://support.metamask.io/metamask-portfolio/card/getting-started?_gl=1*1xyihf*_gcl_au*OTEwOTk3NDU4LjE3MjQwOTQ1NTA.">MetaMask Debit card</a>, you can make everyday purchases with your crypto anywhere Visa and Mastercard are accepted, creating a seamless payment solution to off-ramp tokens and use them IRL.</p><p>This is a game changer, giving you more control over your funds while benefiting from Linea’s lower gas fees and fast transaction speeds, making it the ideal network for instant payments. It’s new life, both on and off chain, for your activity with DEXs like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.lynex.fi/">Lynex</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://support.metamask.io/metamask-portfolio/card/getting-started?_gl=1*1xyihf*_gcl_au*OTEwOTk3NDU4LjE3MjQwOTQ1NTA.">Nile</a>, lending protocols like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mendi.finance/">Mendi</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zerolend.xyz/">ZeroLend</a>, optimization protocols like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.clip.finance/">Clip Finance</a>, and LRTs like <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.renzoprotocol.com/">Renzo</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.renzoprotocol.com/">KelpDAO</a>.</p><h3 id="h-your-projects-on-linea" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Your Projects on Linea</strong></h3><p>Builders are the pillars of Linea and we’re dedicated to empowering you to create more powerful, stickier dapps with the tools, resources, and support of the Linea Builder Stack. With 100% EVM bytecode compatibility, developing on Linea is identical to developing on Ethereum, allowing you to use current infrastructure, tooling, IDEs, and wallets to deploy bytecode, smart contracts, and apps as they are.</p><p>Our developer resources include hackathon bounties, our monthly developer cook-off, capital funding through the Linea Ecosystem Investment Alliance (LEIA), vibrant community forums, comprehensive documentation, 24/7 support in multiple languages, and white-glove technical enablement teams—Everything you need to build, deploy, and grow your dapp on Linea.</p><p>As the home network for the world, Linea is where web3 culture and community thrive. The collective input and creativity of the community are integral to Linea and web3 at large—we are all building, collaborating, and refining as we go.</p><p>Communities around memecoins and NFT projects are particularly active on Linea. This is why we put focus on empowering creator communities. Just last month, the first ever Linea Guild Games saw gaming platform Hyperplay host a zombie killing marathon on The Unfettered for the first four Linea Guilds. These Guilds were originally meme projects on Linea that were elevated to Guild status thanks to votes from the community. Guilds Efrogs, Linus ,FrogwithCat, and Foxy are pushing the culture forward and championing Linea by rallying like-minded believers in their mission.</p><p>Outside of Linea-hosted activities, community on Linea is always bubbling. Our network wouldn’t be the same without actors like The Linea Champions, a volunteer group who dedicate their onchain lives to helping other users. Whether it&apos;s user-to-user interaction, the growth of meme culture, or ideas that snowball into projects, community keeps Linea going.</p><h3 id="h-looking-ahead" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Looking Ahead</strong></h3><p>In moving toward our mission to empower everyone to live onchain, Linea’s approach has been to take web3 user, builder, and community experience to higher levels. With innovations in security, digital identity, payments, and DeFi, as well as community nurturing and organization, we’ve aimed to lower barriers to entry, create the most secure environment, streamline everyday processes, and elevate the whole web3 experience.</p><p>And again, this is only the starting point. Watch this space over the following weeks as we dive into each of the innovation areas we are driving forward, and showcase some of the coolest elements of your home network.</p><p>In the meantime, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://bridge.linea.build/?__cf_chl_tk=kefQZeWC_sZhswy_67_N.m3VS0BEXL3KpjSgC.Hmj8E-1729018735-1.0.1.1-NOhQXF2Uq0ZZBBGPLRlVeB9aC7pI2AlI11zVAYmUe6A">bridge to Linea, your home network.</a></p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/597e8771f2a56747a2669aecd0c34df6dcdafa4ecd80b594747e75bdc42b7b0e.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[How to Build a Decentralized Voting Dapp on Linea]]></title>
            <link>https://paragraph.com/@linea-7/how-to-build-a-decentralized-voting-dapp-on-linea</link>
            <guid>YzPNOLUSU87YAigMKB0R</guid>
            <pubDate>Wed, 16 Oct 2024 03:26:43 GMT</pubDate>
            <description><![CDATA[Blockchain and web3 have changed our understanding of transparency, trust and decentralization. One of the most incredible use-case for this technology is the development of web3 dapps (decentralized applications) that offers solutions that are secure, verifiable and tamper-proof solutions to our everyday challenges. Among all the use-cases, decentralized voting stands out. Decentralized technologies remove middlemen and ensure transparent vote counts, this voting dapp has the potential to ch...]]></description>
            <content:encoded><![CDATA[<p>Blockchain and web3 have changed our understanding of transparency, trust and decentralization. One of the most incredible use-case for this technology is the development of web3 dapps (decentralized applications) that offers solutions that are secure, verifiable and tamper-proof solutions to our everyday challenges. Among all the use-cases, decentralized voting stands out. Decentralized technologies remove middlemen and ensure transparent vote counts, this voting dapp has the potential to change governance system while enhancing the democratic process.</p><p>In this tutorial, we will build a simple voting dapp on linea, a zkEVM layer 2 blockchain solution. You will learn how to write, deploy and interact with a smart contract which is designed for decentralized voting process. By the end of this tutorial, you’ll have a solid understanding of the tools and features provided by linea for decentralized applications.</p><h3 id="h-understanding-the-voting-dapp-architecture" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Understanding the Voting Dapp Architecture</strong></h3><p>The voting dapp has three main components: smart contracts, smart contracts integration and the frontend interface.</p><p>The smart contract is one of the main components of the application. This can handle critical functionalities such as registering candidates, allowing users to give their votes based on candidates index numbers, enforcing a one vote per wallet address policy and managing voting period by automatically closing the voting period after a specified duration. The smart contract makes sure that the voting process is secure, transparent and tamper-proof by recording all votes on the blockchain.</p><p>The frontend interface is the user-facing part of the application where users will be able to interact and cast their votes by inputting the candidate index number. It also can show the information about remaining time period. By offering a clear and responsive design, it encourages user participation and trust in the voting process.</p><p>To ensure smooth interaction with the Linea blockchain, we&apos;ll utilize the MetaMask SDK along with libraries like Wagmi and connect through Infura RPC providers. These tools allow the frontend to communicate with the blockchain, enabling users to sign transactions and interact with the smart contracts directly from their web browsers. This integration is crucial for maintaining the decentralized nature of the application while providing a user-friendly experience.</p><h3 id="h-setting-up-the-environment" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Setting Up the Environment</strong></h3><p>Before we start building our decentralized voting dapp, we&apos;ll set up the development environment using Consensys&apos;s Create Web3 Template CLI. This tool streamlines the process by generating a monorepo structure that includes both the frontend and backend components needed for our application.</p><h3 id="h-prerequisites" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Prerequisites</strong></h3><ul><li><p>Node.js and pnpm/any other package manager installed on your system.</p></li><li><p>Basic familiarity with the command line.</p></li></ul><h3 id="h-initializing-the-project" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Initializing the Project</strong></h3><p>Let&apos;s create a new project using the Create Web3 Template CLI by Consensys.</p><p>This command-line tool simplifies the setup process by providing all the necessary tools and integrations out of the box, including MetaMask SDK, Linea support, Infura integration, and a selection of templates to choose from.</p><p>1. Open your terminal and run the following command:</p><pre data-type="codeBlock" text="pnpm create @consensys/create-web3-template
"><code>pnpm <span class="hljs-keyword">create</span> <span class="hljs-variable">@consensys</span><span class="hljs-operator">/</span><span class="hljs-keyword">create</span><span class="hljs-operator">-</span>web3<span class="hljs-operator">-</span>template
</code></pre><p>2. You&apos;ll be prompted to specify a name for your project. We&apos;ll name it <code>simple-voting-dapp:</code></p><pre data-type="codeBlock" text="? Please specify a name for your project: simple-voting-dapp
"><code>? Please specify a name <span class="hljs-keyword">for</span> your project: simple<span class="hljs-operator">-</span>voting<span class="hljs-operator">-</span>dapp
</code></pre><p>3. Next, select the framework for your frontend. We&apos;ll choose <strong>Next.js:</strong></p><pre data-type="codeBlock" text="? Please select the framework you want to use:
  HardHat Vanilla
  React
❯ Next.js
"><code>? Please <span class="hljs-keyword">select</span> the framework you want <span class="hljs-keyword">to</span> use:
  HardHat Vanilla
  React
❯ <span class="hljs-keyword">Next</span>.js
</code></pre><p><em>Selected framework: Next.js</em></p><p>4. Choose the smart contract development environment. We&apos;ll go with <strong>HardHat</strong>:</p><pre data-type="codeBlock" text="? Would you like to use HardHat or Foundry?
❯ HardHat
  Foundry
"><code>? Would you <span class="hljs-built_in">like</span> <span class="hljs-keyword">to</span> use HardHat <span class="hljs-built_in">or</span> Foundry?
❯ HardHat
  Foundry
</code></pre><p><em>Selected tooling: HardHat</em></p><p>5. Select your preferred package manager. We&apos;ll use pnpm:</p><pre data-type="codeBlock" text="? Please select the package manager you want to use:
  Yarn
  NPM
❯ pnpm
"><code>? Please <span class="hljs-keyword">select</span> the <span class="hljs-keyword">package</span> manager you want to <span class="hljs-keyword">use</span>:
  Yarn
  NPM
❯ pnpm
</code></pre><p>6. The CLI will generate the project based on your selections.</p><h3 id="h-project-structure" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Project Structure</strong></h3><p>After the setup is complete, your project directory simple-voting-dapp will have the following structure:</p><pre data-type="codeBlock" text="simple-voting-dapp
├── packages
│   ├── site          # Frontend built with Next.js
│   └── blockchain    # Smart contracts using HardHat
├── pnpm-workspace.yaml
├── package.json
"><code>simple<span class="hljs-operator">-</span>voting<span class="hljs-operator">-</span>dapp
├── packages
│   ├── site          # Frontend built with Next.js
│   └── blockchain    # Smart contracts <span class="hljs-keyword">using</span> <span class="hljs-title">HardHat</span>
├── <span class="hljs-title">pnpm</span><span class="hljs-operator">-</span><span class="hljs-title">workspace</span>.<span class="hljs-title">yaml</span>
├── <span class="hljs-title">package</span>.<span class="hljs-title">json</span>
</code></pre><ul><li><p><code>packages/site</code><strong>:</strong> Contains the frontend code of the dApp, built with Next.js.</p></li><li><p><code>packages/blockchain:</code> Contains the smart contracts and related scripts using HardHat.</p></li><li><p><code>pnpm-workspace.yaml:</code> Defines the workspace configuration for the monorepo.</p></li></ul><h3 id="h-installing-dependencies" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Installing Dependencies</strong></h3><p>Navigate into your project directory:</p><pre data-type="codeBlock" text="cd simple-voting-dapp
"><code>cd simple<span class="hljs-operator">-</span>voting<span class="hljs-operator">-</span>dapp
</code></pre><p>Install all the necessary dependencies:</p><pre data-type="codeBlock" text="pnpm install
"><code></code></pre><p>This command will install all packages for both the frontend and backend components.</p><h3 id="h-understanding-the-monorepo" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Understanding the Monorepo</strong></h3><p>A <strong>monorepo</strong> (monolithic repository) is a single repository that stores code for multiple projects or packages. In our case, it allows us to manage both the frontend and backend in a unified codebase, making development and maintenance more efficient.</p><h3 id="h-verifying-the-setup" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Verifying the Setup</strong></h3><p>To ensure everything is set up correctly, let&apos;s run the development servers.</p><p><strong>For the Frontend:</strong></p><p>1. Navigate to the <code>site</code> directory:</p><pre data-type="codeBlock" text="cd packages/site
"><code><span class="hljs-built_in">cd</span> packages/site
</code></pre><p>2. Start the Next.js development server:</p><pre data-type="codeBlock" text="Start the Next.js development server:
"><code>Start the Next.js development server:
</code></pre><p>3. Open your browser and go to <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://localhost:3000">http://localhost:3000</a> to see the frontend running.</p><p>For the Backend:</p><ol><li><p>Open a new terminal window.</p></li><li><p>Navigate to the blockchain directory:</p><pre data-type="codeBlock" text="cd packages/blockchain
"><code><span class="hljs-built_in">cd</span> packages/blockchain
</code></pre></li></ol><p>3.Compile the default smart contracts:</p><pre data-type="codeBlock" text="pnpm hardhat compile
"><code>pnpm hardhat <span class="hljs-built_in">compile</span>
</code></pre><p>This will compile the sample contracts included in the HardHat setup.</p><h2 id="h-write-the-smart-contract" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Write the Smart Contract</strong></h2><p>Let’s create a <code>Voting.sol</code> file and add the following code:</p><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title A contract for a voting system
/// @author [Your Name]
/// @notice This contract allows for the creation and management of a voting system
contract Voting {
    /// @dev Struct to represent a candidate
    struct Candidate {
        string name;
        uint256 voteCount;
    }

    /// @notice Array to store all candidates
    Candidate[] public candidates;
    
    /// @notice Address of the contract owner
    address owner;
    
    /// @notice Mapping to track if an address has voted
    mapping(address =&gt; bool) public voters;

    /// @notice Timestamp when voting starts
    uint256 public votingStart;
    
    /// @notice Timestamp when voting ends
    uint256 public votingEnd;

    /// @notice Constructor to initialize the voting contract
    /// @param _candidateNames Array of candidate names
    /// @param _durationInMinutes Duration of the voting period in minutes
    constructor(string[] memory _candidateNames, uint256 _durationInMinutes) {
        for (uint256 i = 0; i &lt; _candidateNames.length; i++) {
            candidates.push(Candidate({
                name: _candidateNames[i],
                voteCount: 0
            }));
        }
        owner = msg.sender;
        votingStart = block.timestamp;
        votingEnd = block.timestamp + (_durationInMinutes * 1 minutes);
    }

    /// @notice Modifier to restrict function access to the contract owner
    modifier onlyOwner {
        require(msg.sender == owner);
        _;
    }

    /// @notice Adds a new candidate to the election
    /// @param _name Name of the new candidate
    function addCandidate(string memory _name) public onlyOwner {
        candidates.push(Candidate({
                name: _name,
                voteCount: 0
        }));
    }

    /// @notice Allows a voter to cast their vote
    /// @param _candidateIndex Index of the candidate in the candidates array
    function vote(uint256 _candidateIndex) public {
        require(!voters[msg.sender], &quot;You have already voted.&quot;);
        require(_candidateIndex &lt; candidates.length, &quot;Invalid candidate index.&quot;);

        candidates[_candidateIndex].voteCount++;
        voters[msg.sender] = true;
    }

    /// @notice Retrieves all candidates and their vote counts
    /// @return An array of Candidate structs
    function getAllVotesOfCandiates() public view returns (Candidate[] memory){
        return candidates;
    }

    /// @notice Checks if voting is currently active
    /// @return Boolean indicating if voting is active
    function getVotingStatus() public view returns (bool) {
        return (block.timestamp &gt;= votingStart &amp;&amp; block.timestamp &lt; votingEnd);
    }

    /// @notice Calculates the remaining time in the voting period
    /// @return The remaining time in seconds
    function getRemainingTime() public view returns (uint256) {
        require(block.timestamp &gt;= votingStart, &quot;Voting has not started yet.&quot;);
        if (block.timestamp &gt;= votingEnd) {
            return 0;
        }
        return votingEnd - block.timestamp;
    }
}
"><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-comment">/// @title A contract for a voting system</span>
<span class="hljs-comment">/// @author [Your Name]</span>
<span class="hljs-comment">/// @notice This contract allows for the creation and management of a voting system</span>
<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Voting</span> </span>{
    <span class="hljs-comment">/// @dev Struct to represent a candidate</span>
    <span class="hljs-keyword">struct</span> <span class="hljs-title">Candidate</span> {
        <span class="hljs-keyword">string</span> name;
        <span class="hljs-keyword">uint256</span> voteCount;
    }

    <span class="hljs-comment">/// @notice Array to store all candidates</span>
    Candidate[] <span class="hljs-keyword">public</span> candidates;
    
    <span class="hljs-comment">/// @notice Address of the contract owner</span>
    <span class="hljs-keyword">address</span> owner;
    
    <span class="hljs-comment">/// @notice Mapping to track if an address has voted</span>
    <span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">address</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> <span class="hljs-keyword">bool</span>) <span class="hljs-keyword">public</span> voters;

    <span class="hljs-comment">/// @notice Timestamp when voting starts</span>
    <span class="hljs-keyword">uint256</span> <span class="hljs-keyword">public</span> votingStart;
    
    <span class="hljs-comment">/// @notice Timestamp when voting ends</span>
    <span class="hljs-keyword">uint256</span> <span class="hljs-keyword">public</span> votingEnd;

    <span class="hljs-comment">/// @notice Constructor to initialize the voting contract</span>
    <span class="hljs-comment">/// @param _candidateNames Array of candidate names</span>
    <span class="hljs-comment">/// @param _durationInMinutes Duration of the voting period in minutes</span>
    <span class="hljs-function"><span class="hljs-keyword">constructor</span>(<span class="hljs-params"><span class="hljs-keyword">string</span>[] <span class="hljs-keyword">memory</span> _candidateNames, <span class="hljs-keyword">uint256</span> _durationInMinutes</span>) </span>{
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">uint256</span> i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> _candidateNames.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            candidates.<span class="hljs-built_in">push</span>(Candidate({
                name: _candidateNames[i],
                voteCount: <span class="hljs-number">0</span>
            }));
        }
        owner <span class="hljs-operator">=</span> <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>;
        votingStart <span class="hljs-operator">=</span> <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>;
        votingEnd <span class="hljs-operator">=</span> <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span> <span class="hljs-operator">+</span> (_durationInMinutes <span class="hljs-operator">*</span> <span class="hljs-number">1</span> <span class="hljs-literal">minutes</span>);
    }

    <span class="hljs-comment">/// @notice Modifier to restrict function access to the contract owner</span>
    <span class="hljs-function"><span class="hljs-keyword">modifier</span> <span class="hljs-title">onlyOwner</span> </span>{
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> owner);
        <span class="hljs-keyword">_</span>;
    }

    <span class="hljs-comment">/// @notice Adds a new candidate to the election</span>
    <span class="hljs-comment">/// @param _name Name of the new candidate</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">addCandidate</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span> _name</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title">onlyOwner</span> </span>{
        candidates.<span class="hljs-built_in">push</span>(Candidate({
                name: _name,
                voteCount: <span class="hljs-number">0</span>
        }));
    }

    <span class="hljs-comment">/// @notice Allows a voter to cast their vote</span>
    <span class="hljs-comment">/// @param _candidateIndex Index of the candidate in the candidates array</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">vote</span>(<span class="hljs-params"><span class="hljs-keyword">uint256</span> _candidateIndex</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        <span class="hljs-built_in">require</span>(<span class="hljs-operator">!</span>voters[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>], <span class="hljs-string">"You have already voted."</span>);
        <span class="hljs-built_in">require</span>(_candidateIndex <span class="hljs-operator">&#x3C;</span> candidates.<span class="hljs-built_in">length</span>, <span class="hljs-string">"Invalid candidate index."</span>);

        candidates[_candidateIndex].voteCount+<span class="hljs-operator">+</span>;
        voters[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>] <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
    }

    <span class="hljs-comment">/// @notice Retrieves all candidates and their vote counts</span>
    <span class="hljs-comment">/// @return An array of Candidate structs</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAllVotesOfCandiates</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">Candidate[] <span class="hljs-keyword">memory</span></span>)</span>{
        <span class="hljs-keyword">return</span> candidates;
    }

    <span class="hljs-comment">/// @notice Checks if voting is currently active</span>
    <span class="hljs-comment">/// @return Boolean indicating if voting is active</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getVotingStatus</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">bool</span></span>) </span>{
        <span class="hljs-keyword">return</span> (<span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span> <span class="hljs-operator">></span><span class="hljs-operator">=</span> votingStart <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span> <span class="hljs-operator">&#x3C;</span> votingEnd);
    }

    <span class="hljs-comment">/// @notice Calculates the remaining time in the voting period</span>
    <span class="hljs-comment">/// @return The remaining time in seconds</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getRemainingTime</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-built_in">require</span>(<span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span> <span class="hljs-operator">></span><span class="hljs-operator">=</span> votingStart, <span class="hljs-string">"Voting has not started yet."</span>);
        <span class="hljs-keyword">if</span> (<span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span> <span class="hljs-operator">></span><span class="hljs-operator">=</span> votingEnd) {
            <span class="hljs-keyword">return</span> <span class="hljs-number">0</span>;
        }
        <span class="hljs-keyword">return</span> votingEnd <span class="hljs-operator">-</span> <span class="hljs-built_in">block</span>.<span class="hljs-built_in">timestamp</span>;
    }
}
</code></pre><p>This contract provides a basic framework for a decentralized voting system where users can cast votes for candidates securely and transparently. It ensures that each user can vote only once by tracking voter addresses, and it maintains a record of all votes on the blockchain. The contract manages the voting period by specifying start and end times, enforces voting rules, and provides functions to retrieve voting results and status. Let’s explore the concept of the smart contract a bit more:</p><ol><li><p>Contract Initialization and Candidate Setup</p></li></ol><p>The Voting contract initializes with an array of candidate names provided during deployment.</p><p>Each candidate is represented by a Candidate struct containing a name and a voteCount.</p><p>The constructor sets the votingStart time to the current block timestamp.</p><p>It calculates the votingEnd time by adding the specified duration in minutes to the start time.</p><ol><li><p>Access Control and Owner Functions</p></li></ol><p>The contract stores the deployer&apos;s address as owner.</p><p>An onlyOwner modifier restricts certain functions to the contract owner.</p><p>The addCandidate function allows the owner to add new candidates after hardhat deployment.This ensures only authorized users can modify the list of candidates.</p><ol><li><p>Voting Mechanism</p></li></ol><p>The vote function lets users cast a vote by specifying a candidate&apos;s index.</p><p>A voters mapping tracks whether an address has already voted.</p><p>The function checks if the voter hasn&apos;t voted before and if the candidate index is valid.</p><p>Upon a valid vote, it increments the candidate&apos;s voteCount and marks the voter as having voted.</p><ol><li><p>Utility Functions and Voting Status</p></li></ol><p>getAllVotesOfCandidates returns all candidates and their current vote counts.</p><p>getVotingStatus returns true if voting is active based on the current time.</p><p>getRemainingTime calculates and returns how much time is left in the voting period.</p><p>These functions provide users with real-time information about the election.</p><p>This smart contract facilitates a decentralized voting system where users can vote for candidates securely, with all votes and results recorded on the blockchain.</p><p>Deploying the Smart Contract with Hardhat Ignition In the ignition folder, let&apos;s create a file named Voting.ts to deploy our contract. Add the following code:</p><pre data-type="codeBlock" text="import { buildModule } from &quot;@nomicfoundation/hardhat-ignition/modules&quot;;

const VotingModule = buildModule(&quot;VotingModule&quot;, (m) =&gt; {
  // Default values
  const DEFAULT_CANDIDATES = [&quot;Candidate 1&quot;, &quot;Candidate 2&quot;, &quot;Candidate 3&quot;];
  const DEFAULT_DURATION_MINUTES = 60; // 1 hour

  // Get parameters with default values
  const candidateNames = m.getParameter(&quot;candidateNames&quot;, DEFAULT_CANDIDATES);
  const durationInMinutes = m.getParameter(
    &quot;durationInMinutes&quot;,
    DEFAULT_DURATION_MINUTES
  );

  // Deploy the Voting contract
  const voting = m.contract(&quot;Voting&quot;, [
    candidateNames,
    durationInMinutes,
  ]);

  return { voting };
});

export default VotingModule;
"><code><span class="hljs-keyword">import</span> { <span class="hljs-title">buildModule</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"@nomicfoundation/hardhat-ignition/modules"</span>;

const VotingModule <span class="hljs-operator">=</span> buildModule(<span class="hljs-string">"VotingModule"</span>, (m) <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  <span class="hljs-comment">// Default values</span>
  const DEFAULT_CANDIDATES <span class="hljs-operator">=</span> [<span class="hljs-string">"Candidate 1"</span>, <span class="hljs-string">"Candidate 2"</span>, <span class="hljs-string">"Candidate 3"</span>];
  const DEFAULT_DURATION_MINUTES <span class="hljs-operator">=</span> <span class="hljs-number">60</span>; <span class="hljs-comment">// 1 hour</span>

  <span class="hljs-comment">// Get parameters with default values</span>
  const candidateNames <span class="hljs-operator">=</span> m.getParameter(<span class="hljs-string">"candidateNames"</span>, DEFAULT_CANDIDATES);
  const durationInMinutes <span class="hljs-operator">=</span> m.getParameter(
    <span class="hljs-string">"durationInMinutes"</span>,
    DEFAULT_DURATION_MINUTES
  );

  <span class="hljs-comment">// Deploy the Voting contract</span>
  const voting <span class="hljs-operator">=</span> m.contract(<span class="hljs-string">"Voting"</span>, [
    candidateNames,
    durationInMinutes,
  ]);

  <span class="hljs-keyword">return</span> { voting };
});

export default VotingModule;
</code></pre><p>In this deployment script, we utilize Hardhat Ignition to manage the deployment of our <code>Voting</code> contract. We set default candidates and a default voting duration but also allow these values to be customized through parameters if needed.</p><h3 id="h-compiling-the-contract" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Compiling the Contract</strong></h3><p>Before deploying, compile the contract by running the following command in the <code>blockchain</code> directory:</p><pre data-type="codeBlock" text="npx hardhat compile
"><code>npx hardhat <span class="hljs-built_in">compile</span>
</code></pre><p>This will compile your Solidity code and prepare it for deployment.</p><h3 id="h-setting-up-environment-variables" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Setting Up Environment Variables</strong></h3><p>Before deploying the smart contract, ensure that your <code>.env</code> file in the <code>packages/blockchain</code> directory is updated with the necessary environment variables:</p><p>This will compile your Solidity code and prepare it for deployment.</p><p>Setting Up Environment Variables Before deploying the smart contract, ensure that your .env file in the packages/blockchain directory is updated with the necessary environment variables:</p><pre data-type="codeBlock" text="# Infura API key for connecting to Ethereum networks INFURA_API_KEY=your_infura_api_key_here
"><code><span class="hljs-comment"># Infura API key for connecting to Ethereum networks INFURA_API_KEY=your_infura_api_key_here</span>
</code></pre><pre data-type="codeBlock" text="# Private key of the account to be used for deployments and transactions
ACCOUNT_PRIVATE_KEY=your_account_private_key_here
"><code><span class="hljs-comment"># Private key of the account to be used for deployments and transactions</span>
<span class="hljs-attr">ACCOUNT_PRIVATE_KEY</span>=your_account_private_key_here
</code></pre><ul><li><p>Replace <code>your_infura_api_key_here</code> with your actual Infura API key.</p></li><li><p>Replace y<code>our_account_private_key_here</code> with the private key of the Ethereum account you will use for deploying the contract.</p></li></ul><h3 id="h-deploying-the-smart-contract" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Deploying the Smart Contract</strong></h3><p>To deploy the smart contract to the Linea testnet, run the following command from the <code>blockchain</code> directory:</p><pre data-type="codeBlock" text="npx hardhat ignition deploy ignition/modules/Voting.ts --network linea-testnet
"><code>npx hardhat ignition deploy ignition<span class="hljs-operator">/</span>modules<span class="hljs-operator">/</span>Voting.ts <span class="hljs-operator">-</span><span class="hljs-operator">-</span>network linea<span class="hljs-operator">-</span>testnet
</code></pre><p>This command tells Hardhat to use Ignition to deploy the <code>Voting</code> module to the <code>linea-testnet</code> network.</p><p>Alternatively, you can add a deployment script to your package.json to simplify the process. Add the following line under the <code>&quot;scripts&quot;</code> section:</p><pre data-type="codeBlock" text="&quot;scripts&quot;: {
  &quot;deploy:testnet&quot;: &quot;npx hardhat ignition deploy ignition/modules/Voting.ts --network linea-testnet&quot;
}
"><code><span class="hljs-attr">"scripts"</span><span class="hljs-punctuation">:</span> <span class="hljs-punctuation">{</span>
  <span class="hljs-attr">"deploy:testnet"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"npx hardhat ignition deploy ignition/modules/Voting.ts --network linea-testnet"</span>
<span class="hljs-punctuation">}</span>
</code></pre><p>Now you can deploy the contract by simply running:</p><pre data-type="codeBlock" text="pnpm run deploy:testnet
"><code>pnpm run deploy:testnet
</code></pre><p>After deployment, you&apos;ll receive the contract address. Keep this address safe, as we&apos;ll need it when integrating with the frontend.</p><h3 id="h-frontend-integration-with-nextjs-and-shadcn-ui" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Frontend Integration with Next.js and Shadcn UI</strong></h3><h3 id="h-setting-up-the-frontend-project" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Setting Up the Frontend Project</strong></h3><p>Navigate to the site directory in your monorepo:</p><pre data-type="codeBlock" text="cd packages/site
"><code><span class="hljs-built_in">cd</span> packages/site
</code></pre><p>Since we&apos;ve already set up the frontend using the Create Web3 Template CLI, we can proceed to integrate our smart contract.</p><h3 id="h-configuring-wagmi-and-metamask-sdk" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Configuring Wagmi and MetaMask SDK</strong></h3><p>Create a <code>wagmi.config.ts</code> file in the <code>src</code> directory with the following content:</p><pre data-type="codeBlock" text="import { http, createConfig } from &quot;wagmi&quot;;
import { lineaSepolia } from &quot;wagmi/chains&quot;;
import { metaMask } from &quot;wagmi/connectors&quot;;

export const config = createConfig({
  chains: [lineaSepolia],
  connectors: [metaMask()],
  transports: {
    [lineaSepolia.id]: http(),
  },
});
"><code><span class="hljs-keyword">import</span> { <span class="hljs-title">http</span>, <span class="hljs-title">createConfig</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"wagmi"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">lineaSepolia</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"wagmi/chains"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">metaMask</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"wagmi/connectors"</span>;

export const config <span class="hljs-operator">=</span> createConfig({
  chains: [lineaSepolia],
  connectors: [metaMask()],
  transports: {
    [lineaSepolia.id]: http(),
  },
});
</code></pre><p>This configuration sets up the connection to the Linea testnet and enables wallet integration using MetaMask.</p><h3 id="h-adding-contract-constants" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Adding Contract Constants</strong></h3><p>In the <code>src</code> directory, create a file named <code>constants.ts</code> and add the following:</p><pre data-type="codeBlock" text="export const CONTRACT_ADDRESS = &apos;your_deployed_contract_address_here&apos;;

export const ABI = [
  // Paste the ABI of your Voting contract here
];
"><code><span class="hljs-keyword">export</span> <span class="hljs-type">const</span> CONTRACT_ADDRESS = <span class="hljs-string">'your_deployed_contract_address_here'</span>;

<span class="hljs-keyword">export</span> <span class="hljs-type">const</span> ABI = [
  <span class="hljs-comment">// Paste the ABI of your Voting contract here</span>
];
</code></pre><ul><li><p>Replace <code>&apos;your_deployed_contract_address_here&apos;</code> with the actual contract address you obtained after deployment.</p></li><li><p>For the ABI, you can find it in the <code>artifacts</code> folder generated by Hardhat after compilation.</p><h2 id="h-react-and-hooks-usage" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>React and Hooks Usage</strong></h2><pre data-type="codeBlock" text="&quot;use client&quot;;

import { useState } from &quot;react&quot;;
import { useAccount, useWalletClient } from &quot;wagmi&quot;;
import { ConnectButton } from &quot;@consensys/connect-button&quot;;
import { Button } from &quot;@/components/ui/button&quot;;
import { Input } from &quot;@/components/ui/input&quot;;
import { useReadContract, useWriteContract } from &quot;wagmi&quot;;
import { Card, CardContent } from &quot;@/components/ui/card&quot;;
import { contractAddress, contractAbi } from &quot;../../constants&quot;;
"><code><span class="hljs-string">"use client"</span>;

<span class="hljs-keyword">import</span> { useState } <span class="hljs-keyword">from</span> <span class="hljs-string">"react"</span>;
<span class="hljs-keyword">import</span> { useAccount, useWalletClient } <span class="hljs-keyword">from</span> <span class="hljs-string">"wagmi"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title class_">ConnectButton</span> } <span class="hljs-keyword">from</span> <span class="hljs-string">"@consensys/connect-button"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title class_">Button</span> } <span class="hljs-keyword">from</span> <span class="hljs-string">"@/components/ui/button"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title class_">Input</span> } <span class="hljs-keyword">from</span> <span class="hljs-string">"@/components/ui/input"</span>;
<span class="hljs-keyword">import</span> { useReadContract, useWriteContract } <span class="hljs-keyword">from</span> <span class="hljs-string">"wagmi"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title class_">Card</span>, <span class="hljs-title class_">CardContent</span> } <span class="hljs-keyword">from</span> <span class="hljs-string">"@/components/ui/card"</span>;
<span class="hljs-keyword">import</span> { contractAddress, contractAbi } <span class="hljs-keyword">from</span> <span class="hljs-string">"../../constants"</span>;
</code></pre><p><br>is Next.js client-side component uses React&apos;s useState for state management, Wagmi hooks (<code>useAccount</code>, <code>useWalletClient</code>, <code>useReadContract</code>, <code>useWriteContract</code>) for wallet and contract interactions, imports UI elements (<code>Button</code>, <code>Input</code>, <code>Card</code>, <code>CardContent</code>) from Shadcn UI, includes a <code>ConnectButton</code> for MetaMask connection, and brings in <code>contractAddress</code> and <code>contractAbi</code> from constants for contract use.</p><h2 id="h-interface-definition" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Interface Definition</strong></h2><pre data-type="codeBlock" text="is Next.js client-side component uses React&apos;s useState for state management, Wagmi hooks (useAccount, useWalletClient, useReadContract, useWriteContract) for wallet and contract interactions, imports UI elements (Button, Input, Card, CardContent) from Shadcn UI, includes a ConnectButton for MetaMask connection, and brings in contractAddress and contractAbi from constants for contract use.
"><code><span class="hljs-built_in">is</span> <span class="hljs-keyword">Next</span>.js client-side component uses React<span class="hljs-comment">'s useState for state management, Wagmi hooks (useAccount, useWalletClient, useReadContract, useWriteContract) for wallet and contract interactions, imports UI elements (Button, Input, Card, CardContent) from Shadcn UI, includes a ConnectButton for MetaMask connection, and brings in contractAddress and contractAbi from constants for contract use.</span>
</code></pre><ul><li><p>Defines a TypeScript <code>interface</code> named <code>Candidate</code>.</p></li><li><p>Specifies the structure for candidate objects:</p><ul><li><p><code>index</code>: The candidate&apos;s index number.</p></li><li><p><code>name</code>: The candidate&apos;s name.</p></li><li><p><code>voteCount</code>: The number of votes the candidate has received.</p><h2 id="h-component-initialization" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Component Initialization</strong></h2><pre data-type="codeBlock" text="export default function Home() {
  const { address } = useAccount();
  const { data: walletClient } = useWalletClient();
  const [number, setNumber] = useState(&quot;&quot;);
"><code>export default function <span class="hljs-built_in">Home</span>() {
  const { <span class="hljs-selector-tag">address</span> } = <span class="hljs-built_in">useAccount</span>();
  const { data: walletClient } = <span class="hljs-built_in">useWalletClient</span>();
  const <span class="hljs-selector-attr">[number, setNumber]</span> = <span class="hljs-built_in">useState</span>("");
</code></pre><ul><li><p><strong>Function Component:</strong> Defines the <code>Home</code> component as the default export.</p></li><li><p><strong>Wallet Information:</strong></p><ul><li><p><code>address</code>: The user&apos;s wallet address obtained from useAccount.</p></li><li><p><code>walletClient</code>: The wallet client used for signing transactions.</p></li></ul></li><li><p><strong>State Management:</strong></p><ul><li><p><code>number</code>: A state variable to store the candidate index input by the user for voting.</p></li><li><p><code>setNumber</code>: Function to update the number state.</p></li></ul></li></ul><h2 id="h-smart-contract-interaction-reading-data" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Smart Contract Interaction - Reading Data</strong></h2><pre data-type="codeBlock" text="const { writeContract } = useWriteContract();

const { data: votingStatus } = useReadContract({
  address: contractAddress,
  abi: contractAbi,
  functionName: &quot;getVotingStatus&quot;,
}) as { data: boolean };

const { data: canVote } = useReadContract({
  address: contractAddress,
  abi: contractAbi,
  functionName: &quot;voters&quot;,
  args: [address],
});

const { data: remainingTime } = useReadContract({
  address: contractAddress,
  abi: contractAbi,
  functionName: &quot;getRemainingTime&quot;,
}) as { data: bigint };

const { data: candidates } = useReadContract({
  address: contractAddress,
  abi: contractAbi,
  functionName: &quot;getAllVotesOfCandiates&quot;,
}) as { data: Candidate[] };
"><code><span class="hljs-keyword">const</span> { writeContract } = <span class="hljs-title function_ invoke__">useWriteContract</span>();

<span class="hljs-keyword">const</span> { data: votingStatus } = <span class="hljs-title function_ invoke__">useReadContract</span>({
  <span class="hljs-attr">address</span>: contractAddress,
  <span class="hljs-attr">abi</span>: contractAbi,
  <span class="hljs-attr">functionName</span>: <span class="hljs-string">"getVotingStatus"</span>,
}) <span class="hljs-keyword">as</span> { data: <span class="hljs-keyword">boolean</span> };

<span class="hljs-keyword">const</span> { data: canVote } = <span class="hljs-title function_ invoke__">useReadContract</span>({
  <span class="hljs-attr">address</span>: contractAddress,
  <span class="hljs-attr">abi</span>: contractAbi,
  <span class="hljs-attr">functionName</span>: <span class="hljs-string">"voters"</span>,
  <span class="hljs-attr">args</span>: [address],
});

<span class="hljs-keyword">const</span> { data: remainingTime } = <span class="hljs-title function_ invoke__">useReadContract</span>({
  <span class="hljs-attr">address</span>: contractAddress,
  <span class="hljs-attr">abi</span>: contractAbi,
  <span class="hljs-attr">functionName</span>: <span class="hljs-string">"getRemainingTime"</span>,
}) <span class="hljs-keyword">as</span> { data: bigint };

<span class="hljs-keyword">const</span> { data: candidates } = <span class="hljs-title function_ invoke__">useReadContract</span>({
  <span class="hljs-attr">address</span>: contractAddress,
  <span class="hljs-attr">abi</span>: contractAbi,
  <span class="hljs-attr">functionName</span>: <span class="hljs-string">"getAllVotesOfCandiates"</span>,
}) <span class="hljs-keyword">as</span> { data: Candidate[] };
</code></pre><ul><li><p>Writing to Contract:</p><ul><li><p><code>writeContract</code> is prepared for sending transactions to the smart contract.</p></li></ul></li><li><p>Reading Contract Data:</p><ul><li><p><code>votingStatus</code>: Retrieves whether the voting is currently active.</p></li><li><p><code>canVote</code>: Checks if the current user has already voted.</p></li><li><p><code>remainingTime</code>: Gets the time remaining before the voting period ends.</p></li><li><p><code>candidates</code>: Fetches the list of all candidates and their vote counts.</p></li></ul></li><li><p>Type Assertions:</p><ul><li><p>Uses TypeScript <code>as</code> syntax to specify the expected data type for better type safety.</p></li></ul></li></ul><h2 id="h-early-return-for-missing-data" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Early Return for Missing Data</strong></h2><pre data-type="codeBlock" text="if (!candidates) return;
"><code><span class="hljs-keyword">if</span> (!candidates) <span class="hljs-keyword">return</span>;
</code></pre><ul><li><p>Checks if the <code>candidates</code> data is available.</p></li><li><p>If <code>candidates</code> is <code>undefined</code> or <code>null</code>, the component returns early to prevent rendering errors.</p></li></ul><h2 id="h-voting-functionality" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Voting Functionality</strong></h2><pre data-type="codeBlock" text="async function vote() {
  if (!walletClient || !address || number === &quot;&quot;) {
    console.error(&quot;Missing required data for voting&quot;);
    return;
  }
  if (
    isNaN(Number(number)) ||
    Number(number) &lt; 0 ||
    Number(number) &gt;= candidates.length
  ) {
    console.error(&quot;Invalid candidate index&quot;);
    return;
  }
  if (!votingStatus) {
    console.error(&quot;Voting is not currently active&quot;);
    return;
  }
  try {
    console.log(&quot;Attempting to vote for candidate index:&quot;, number);
    writeContract({
      address: contractAddress,
      abi: contractAbi,
      functionName: &quot;vote&quot;,
      args: [BigInt(number)],
      account: address,
    });
  } catch (error) {
    console.error(&quot;Detailed error in vote function:&quot;, error);
  }
}
"><code>async <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">vote</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>walletClient <span class="hljs-operator">|</span><span class="hljs-operator">|</span> <span class="hljs-operator">!</span><span class="hljs-keyword">address</span> <span class="hljs-operator">|</span><span class="hljs-operator">|</span> number <span class="hljs-operator">=</span><span class="hljs-operator">=</span><span class="hljs-operator">=</span> <span class="hljs-string">""</span>) {
    console.error(<span class="hljs-string">"Missing required data for voting"</span>);
    <span class="hljs-keyword">return</span>;
  }
  <span class="hljs-keyword">if</span> (
    isNaN(Number(number)) <span class="hljs-operator">|</span><span class="hljs-operator">|</span>
    Number(number) <span class="hljs-operator">&#x3C;</span> <span class="hljs-number">0</span> <span class="hljs-operator">|</span><span class="hljs-operator">|</span>
    Number(number) <span class="hljs-operator">></span><span class="hljs-operator">=</span> candidates.<span class="hljs-built_in">length</span>
  ) {
    console.error(<span class="hljs-string">"Invalid candidate index"</span>);
    <span class="hljs-keyword">return</span>;
  }
  <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>votingStatus) {
    console.error(<span class="hljs-string">"Voting is not currently active"</span>);
    <span class="hljs-keyword">return</span>;
  }
  <span class="hljs-keyword">try</span> {
    console.log(<span class="hljs-string">"Attempting to vote for candidate index:"</span>, number);
    writeContract({
      <span class="hljs-keyword">address</span>: contractAddress,
      <span class="hljs-built_in">abi</span>: contractAbi,
      functionName: <span class="hljs-string">"vote"</span>,
      args: [BigInt(number)],
      account: <span class="hljs-keyword">address</span>,
    });
  } <span class="hljs-keyword">catch</span> (<span class="hljs-function"><span class="hljs-keyword">error</span>) </span>{
    console.error(<span class="hljs-string">"Detailed error in vote function:"</span>, <span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
  }
}
</code></pre><ul><li><p><strong>Input Validation:</strong></p><ul><li><p>Checks if the wallet client, user address, and candidate number are available.</p></li><li><p>Validates that the candidate index is a valid number within the range of available candidates.</p></li><li><p>Ensures that voting is currently active.</p></li></ul></li><li><p><strong>Voting Process:</strong></p><ul><li><p>Uses <code>writeContract</code> to call the vote function on the smart contract.</p></li><li><p>Passes the candidate index as a <code>BigInt</code>.</p></li><li><p>Uses the user&apos;s wallet address as the account.</p></li></ul></li><li><p><strong>Error Handling:</strong></p><ul><li><p>Wraps the contract interaction in a <code>try-catch</code> block to handle any errors that occur during the voting process.</p></li><li><p><code>Logs</code> detailed error information to the console.</p><h2 id="h-ui-rendering" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>UI Rendering</strong></h2><pre data-type="codeBlock" text="return (
  &lt;main className=&quot;container mx-auto p-4&quot;&gt;
    &lt;h1 className=&quot;text-2xl font-bold mb-4&quot;&gt;
      Decentralized Voting Application
    &lt;/h1&gt;
    &lt;ConnectButton /&gt;

    {votingStatus ? (
      address ? (
        &lt;Card className=&quot;mt-4&quot;&gt;
          &lt;CardContent&gt;
            &lt;p&gt;Connected Account: {address}&lt;/p&gt;
            &lt;p&gt;Remaining Time: {Number(remainingTime)} seconds&lt;/p&gt;
            {!canVote ? (
              &lt;div className=&quot;mt-4&quot;&gt;
                &lt;Input
                  type=&quot;number&quot;
                  placeholder=&quot;Enter Candidate Index&quot;
                  value={number}
                  onChange={(e) =&gt; setNumber(e.target.value)}
                  className=&quot;mb-2&quot;
                /&gt;
                &lt;Button onClick={vote}&gt;Vote&lt;/Button&gt;
              &lt;/div&gt;
            ) : (
              &lt;p&gt;You have already voted&lt;/p&gt;
            )}
            &lt;div className=&quot;mt-4&quot;&gt;
              &lt;h2 className=&quot;text-xl font-semibold mb-2&quot;&gt;Candidates&lt;/h2&gt;
              &lt;ul&gt;
                {candidates.map((candidate) =&gt; (
                  &lt;li key={candidate.index}&gt;
                    {candidates.indexOf(candidate)}: {candidate.name} -{&quot; &quot;}
                    {Number(candidate.voteCount)} votes
                  &lt;/li&gt;
                ))}
              &lt;/ul&gt;
            &lt;/div&gt;
          &lt;/CardContent&gt;
        &lt;/Card&gt;
      ) : (
        &lt;p&gt;Please connect your wallet to vote&lt;/p&gt;
      )
    ) : (
      &lt;p&gt;Voting has finished&lt;/p&gt;
    )}
  &lt;/main&gt;
);
"><code><span class="hljs-keyword">return</span> (
  <span class="hljs-operator">&#x3C;</span>main className<span class="hljs-operator">=</span><span class="hljs-string">"container mx-auto p-4"</span><span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>h1 className<span class="hljs-operator">=</span><span class="hljs-string">"text-2xl font-bold mb-4"</span><span class="hljs-operator">></span>
      Decentralized Voting Application
    <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h1<span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>ConnectButton <span class="hljs-operator">/</span><span class="hljs-operator">></span>

    {votingStatus ? (
      <span class="hljs-keyword">address</span> ? (
        <span class="hljs-operator">&#x3C;</span>Card className<span class="hljs-operator">=</span><span class="hljs-string">"mt-4"</span><span class="hljs-operator">></span>
          <span class="hljs-operator">&#x3C;</span>CardContent<span class="hljs-operator">></span>
            <span class="hljs-operator">&#x3C;</span>p<span class="hljs-operator">></span>Connected Account: {<span class="hljs-keyword">address</span>}<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>p<span class="hljs-operator">></span>
            <span class="hljs-operator">&#x3C;</span>p<span class="hljs-operator">></span>Remaining Time: {Number(remainingTime)} <span class="hljs-literal">seconds</span><span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>p<span class="hljs-operator">></span>
            {<span class="hljs-operator">!</span>canVote ? (
              <span class="hljs-operator">&#x3C;</span>div className<span class="hljs-operator">=</span><span class="hljs-string">"mt-4"</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>
                  placeholder<span class="hljs-operator">=</span><span class="hljs-string">"Enter Candidate Index"</span>
                  value<span class="hljs-operator">=</span>{number}
                  onChange<span class="hljs-operator">=</span>{(e) <span class="hljs-operator">=</span><span class="hljs-operator">></span> setNumber(e.target.<span class="hljs-built_in">value</span>)}
                  className<span class="hljs-operator">=</span><span class="hljs-string">"mb-2"</span>
                <span class="hljs-operator">/</span><span class="hljs-operator">></span>
                <span class="hljs-operator">&#x3C;</span>Button onClick<span class="hljs-operator">=</span>{vote}<span class="hljs-operator">></span>Vote<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>p<span class="hljs-operator">></span>You have already voted<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>p<span class="hljs-operator">></span>
            )}
            <span class="hljs-operator">&#x3C;</span>div className<span class="hljs-operator">=</span><span class="hljs-string">"mt-4"</span><span class="hljs-operator">></span>
              <span class="hljs-operator">&#x3C;</span>h2 className<span class="hljs-operator">=</span><span class="hljs-string">"text-xl font-semibold mb-2"</span><span class="hljs-operator">></span>Candidates<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>h2<span class="hljs-operator">></span>
              <span class="hljs-operator">&#x3C;</span>ul<span class="hljs-operator">></span>
                {candidates.map((candidate) <span class="hljs-operator">=</span><span class="hljs-operator">></span> (
                  <span class="hljs-operator">&#x3C;</span>li key<span class="hljs-operator">=</span>{candidate.index}<span class="hljs-operator">></span>
                    {candidates.indexOf(candidate)}: {candidate.<span class="hljs-built_in">name</span>} <span class="hljs-operator">-</span>{<span class="hljs-string">" "</span>}
                    {Number(candidate.voteCount)} votes
                  <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>li<span class="hljs-operator">></span>
                ))}
              <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>ul<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>CardContent<span class="hljs-operator">></span>
        <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>Card<span class="hljs-operator">></span>
      ) : (
        <span class="hljs-operator">&#x3C;</span>p<span class="hljs-operator">></span>Please connect your wallet to vote<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>p<span class="hljs-operator">></span>
      )
    ) : (
      <span class="hljs-operator">&#x3C;</span>p<span class="hljs-operator">></span>Voting has finished<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>main<span class="hljs-operator">></span>
);
</code></pre><p><br>The component features a styled main container with a header and a <code>ConnectButton</code> for MetaMask integration. It conditionally renders content based on <code>votingStatus</code> and user connection: if voting is active and the user is connected, it displays their address, remaining time, and voting options; if they&apos;ve already voted, it notifies them and lists all candidates. If the user isn&apos;t connected, it prompts them to connect their wallet. When voting has ended, it shows &quot;Voting has finished&quot;.</p><h2 id="h-error-handling-and-validation" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Error Handling and Validation</strong></h2><ul><li><p><strong>Input Validation:</strong></p><ul><li><p>Ensures the candidate index entered is a valid number within the acceptable range.</p></li></ul></li><li><p><strong>Error Messages:</strong></p><ul><li><p>Uses <code>console.error</code> to log meaningful error messages for debugging purposes.</p></li></ul></li><li><p><strong>User Feedback:</strong></p><ul><li><p>Provides real-time feedback to the user based on their actions and the application&apos;s state.</p></li></ul></li></ul><p>View full code here: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/meowyx/simple-voting-dapp">https://github.com/meowyx/simple-voting-dapp</a></p><h2 id="h-run-the-development-server" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Run the Development Server</strong></h2><pre data-type="codeBlock" text="npm run dev
"><code>npm run dev
</code></pre><p>Your Next.js application with Shadcn UI should now be running at <code>http://localhost:3000.</code></p><p>Now, you have a decentralized voting DAPP where users can vote for the candidates by using their index number. These votes are secure, transparent and recorded on Linea blockchain.</p><p>In this tutorial, we built a simple decentralized voting application on Linea, while leveraging zkEVM technology for scalability, security, and cost efficiency. We covered everything from setting up the environment by using the CLI to writing and deploying smart contracts, and integrating the frontend with Next.js and Shadcn UI.</p><p>As you continue to explore and expand upon this foundational knowledge, consider potential enhancements such as adding voter registration, implementing vote delegation, enhancing security measures, or improving the user interface for better accessibility. The possibilities for decentralized applications (dApps) are endless, and voting systems are just one of the many impactful use cases.</p><p>Happy coding!</p></li></ul></li></ul></li></ul></li></ul></li></ul>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/5a8740d079f7c82b7d9207831bdc4150648e97220e544b6d1f4338d4f8aaaef7.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Subdomains on Efrogs Open the Floodgates for Amplified User Identity]]></title>
            <link>https://paragraph.com/@linea-7/subdomains-on-efrogs-open-the-floodgates-for-amplified-user-identity</link>
            <guid>pRKyLInjPowarH6pmeAF</guid>
            <pubDate>Thu, 10 Oct 2024 22:58:16 GMT</pubDate>
            <description><![CDATA[With the launch of ENS on Linea last month, new frontiers are opening up for the ecosystem. Linea Name Service, a fork of Ethereum Name Service (ENS), allows users to register and manage subdomains for a fraction of the L1 gas price, working towards our goal of a user-friendly Ethereum. These subnames are fully compatible with ENS and can be used on any dapp or chain that supports ENS, with 350K registrations to date. However, the applications don&apos;t stop there. The Linea ENS repository t...]]></description>
            <content:encoded><![CDATA[<p>With the launch of ENS on Linea last month, new frontiers are opening up for the ecosystem. Linea Name Service, a fork of Ethereum Name Service (ENS), allows users to register and manage subdomains for a fraction of the L1 gas price, working towards our goal of a user-friendly Ethereum. These subnames are fully compatible with ENS and can be used on any dapp or chain that supports ENS, with 350K registrations to date.</p><p>However, the applications don&apos;t stop there. The Linea ENS repository that was created to bring ENS to Linea has component libraries that can be applied in other contexts. The functionality of these associated components enables any L1 application to query L2 data using CCIP Read (ERC-3668), equipping developers for cross-chain retrieval and opening up up a range of use cases which we explored <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.mirror.xyz/TZEGOvzd9wxMqLsn49q5iZp5ld6VskvWtn633M0zUIo">here</a>.</p><p>As of today, Efrogs, an OG PFP collection and community on Linea, is putting this potential into action. Marking the first time a builder on Linea integrates with CCIP Read, the new feature for Efrogs automatically provides Efrogs NFT holders with personalized ENS subdomains, such as 1.efrogs.eth. This feature is achieved by deploying a custom resolver, which directly verifies NFT ownership on the Linea blockchain, in a seamless experience that is automated for Efrogs NFT holders.</p><p>“At Efrogs we always look forward to experimenting with innovative things ahead of everyone else, that&apos;s how we are able to provide value and incentives to our community members. We really think ENS is a great technology as it provides a variety of functionalities which web2 lacks,” says Shama, Founder and Chief Frog Officer at Efrogs.</p><p>The rollout includes two novel mechanisms: an ENS attached to its respective NFT, and the attachment of an NFT so that a holder’s PFP is also associated with their onchain subname. This means if a holder sells their NFT, the associated ENS subname is also transferred.</p><p>Subdomains will be issued to Efrogs holders for free. “By assigning subdomains to Efrogs holders we are basically naming their wallets, which is human-readable instead of the long hex address, so they can easily use their subdomain to send and receive payments and transfer NFTs,” explains Pran, Community Manager at Efrogs. Community members can begin to display their subdomain as their profile name on social platforms to show and have a sense of belonging to the culture.</p><p>These developments are part of a <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/VitalikButerin/status/1826500707005890796">wider ecosystem push</a> that aims to improve cross-chain transaction and standardization, with CCIP Read (ERC-3668) and ERC-7683 as the bedrock. “At Linea, we continue to explore and deliver innovative solutions that move the entire crypto industry forward. This feature provides builders another tool in the toolbox to deliver more meaningful user experiences to their communities, and I believe we&apos;re only scratching the surface on what these primitives will unlock for cross-chain interoperability,” says Declan Fox, product lead at Linea.</p><h2 id="h-impact-on-the-ecosystem" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Impact on the Ecosystem</strong></h2><p>NFT projects are constantly looking for new innovation to create a stronger experience for their collectors and community. In delivering functionality for partner subnames, Linea is creating new primitive ways for these projects to provide better user experiences for their communities, with benefits for projects and users alike.</p><p><strong>User benefits:</strong></p><ul><li><p><strong>Automated Subdomain Assignment:</strong> The solution is highly user-friendly as it automates subdomain assignment based on NFT ownership. e.g., if a user owns eFrog #1064, they automatically own 1064.efrogs.eth. NFT owners don&apos;t need to take any additional steps to acquire or manage their subdomains.</p></li><li><p><strong>Human-Readable Addresses:</strong> A more human-readable address allows for faster payments.</p></li><li><p><strong>Community and Identity Integration:</strong> Individuals often collect NFTs because they align with a project&apos;s values or want to join its unique community. With a project-specific subname, users can tie their membership to their web3 identity serving as a status symbol and enhancing a sense of belonging.</p></li></ul><p><strong>NFT project benefits:</strong></p><ul><li><p><strong>User Retention:</strong> Enhanced user experience incentivizes user retention.</p></li><li><p><strong>Simpler Distribution of Benefits:</strong> The new feature enables a more streamlined process to distribute benefits and perks to collection holders.</p></li><li><p><strong>Automated Subname Distribution</strong>: Users have no additional action points to claim their subname. Simple ownership of an Efrogs NFT grants them ownership of their NFT&apos;s token ID allocated domain.</p></li></ul><p><strong>Technical advantages:</strong></p><ul><li><p><strong>Simplified Architecture</strong>: By utilizing a custom L1 resolver, the solution avoids the complexity of multi-step resolution and provides a streamlined process for subdomain management.</p></li><li><p><strong>Direct Ownership Validation</strong>: The resolver directly queries the smart contract on Linea, ensuring that the subdomain always reflects the accurate and up-to-date ownership of eFrogs NFTs.</p></li><li><p><strong>Efficiency and Scalability</strong>: This approach reduces potential bottlenecks and ensures that the system can scale effectively as the number of queries or NFTs increases.</p></li></ul><h2 id="h-how-the-custom-l1-resolver-for-efrogseth-works" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>How the Custom L1 Resolver for Efrogs.eth Works</strong></h2><p>To make this new feature possible, Linea is setting up a custom ENS resolver on Layer 1 for the Efrogs.eth domain. This resolver is configured to directly query the ownership of Efrogs NFTs on the Linea blockchain. By doing so, we eliminate the need for a complex multi-step resolution process and ensure efficient, accurate subdomain management. This approach leverages the robustness of Ethereum mainnet (L1) while maintaining the integrity of ownership data hosted on the Linea L2 blockchain.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/0386988c7e7169b137bbdab71fb65ef7e8ab0ce7bc62550b42f180bb38796c7b.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>The process works as follows. When a user queries an ENS subdomain, such as 1.efrogs.eth, the process begins with the user sending a query to the ENS resolver on L1. The ENS resolver then interacts with the Linea blockchain to verify the ownership of the corresponding eFrog NFT. Linea fetches the current ownership data by interacting with the Efrogs NFT contract. This ownership data, which includes the wallet address of the current NFT owner, is returned from the Efrogs NFT contract to Linea, and subsequently from Linea to the ENS resolver on L1. Finally, the ENS resolver on L1 returns the wallet address of the NFT owner to the user, completing the query.</p><p><em>Builders can now create their own subnames on Linea using our CCIP Read integration – learn more </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.linea.build/developers/guides/deploy-subdomain"><em>here.</em> </a></p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
        </item>
        <item>
            <title><![CDATA[Chainlink CCIP Launches on Linea To Unlock A Secure Cross-Chain Ecosystem]]></title>
            <link>https://paragraph.com/@linea-7/chainlink-ccip-launches-on-linea-to-unlock-a-secure-cross-chain-ecosystem</link>
            <guid>VayZNsQaMEs9Y7vSTKsO</guid>
            <pubDate>Tue, 08 Oct 2024 16:19:02 GMT</pubDate>
            <description><![CDATA[We’re committed to providing web3 developers with top-tier infrastructure for creating novel decentralized applications. To further reinforce this commitment, Linea has integrated the industry-standard Chainlink Cross-Chain Interoperability Protocol (CCIP). We’re leveraging CCIP to enable developers to build secure and feature-rich cross-chain applications and expand the multi-chain ecosystem. “We’re thrilled that Linea has integrated Chainlink CCIP and are excited to see how they will levera...]]></description>
            <content:encoded><![CDATA[<p>We’re committed to providing web3 developers with top-tier infrastructure for creating novel decentralized applications. To further reinforce this commitment, Linea has integrated the industry-standard Chainlink <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chain.link/cross-chain">Cross-Chain Interoperability Protocol (CCIP)</a>. We’re leveraging CCIP to enable developers to build secure and feature-rich cross-chain applications and expand the multi-chain ecosystem.</p><p>“We’re thrilled that Linea has integrated Chainlink CCIP and are excited to see how they will leverage it to drive innovation and expand the multi-chain ecosystem. This integration represents a significant advancement for Linea, enabling developers to create novel cross-chain applications and push the blockchain industry forward.”—Thodoris Karakostas, Head of Blockchain Partnerships at Chainlink Labs</p><p>We selected CCIP as our interoperability solution due to Chainlink’s exceptional track record in security and reliability. CCIP is uniquely distinguished as the only interoperability solution with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.chain.link/five-levels-cross-chain-security/">level-5 cross-chain security</a>. Additionally, it is supported by the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://blog.chain.link/ccip-mainnet-early-access/#risk-management-network">Risk Management Network</a>, an independent network that rigorously monitors and verifies cross-chain activities for suspicious behavior. This added layer of security is crucial, given the history of substantial losses in user funds caused by unreliable cross-chain infrastructure.</p><p>Chainlink has built one of the largest ecosystems in the blockchain industry and is being established as the industry-standard blockchain connectivity standard within capital markets. Connecting Linea to the Chainlink community and ecosystem offers a multitude of growth opportunities that help Linea get closer to its goals and increase ecosystem adoption.</p><p>Linea is the Ethereum L2 empowering the world to live onchain. As an EVM-compatible platform, Linea enables users to deploy and develop applications at a fraction of the cost and with greater speed. The protocol is built around three core components: the Sequencer, Prover, and Bridge Relayer, which together optimize execution while maintaining Ethereum’s security through zk-rollups. By rolling up its transactions and providing zk-proofs to Ethereum, Linea enhances scalability without compromising on security.</p><p>In order to help enable cross-chain interoperability for our ecosystem, we needed access to a highly secure and reliable interoperability solution. After reviewing various solutions, we integrated Chainlink CCIP because it provides a multitude of important benefits and features, such as:</p><ul><li><p><strong>Defense-in-depth security</strong>—CCIP’s consensus and interoperability layer is powered by Chainlink decentralized oracle networks, which have already secured tens of billions of dollars for smart contracts and enabled over $12 trillion in onchain transaction value. CCIP also features additional layers of protection and reliability via the Risk Management Network.</p></li><li><p><strong>Programmable Token Transfers</strong>—CCIP messages are programmable, meaning token transfers and arbitrary data transfers can be one atomic transaction. This enables instructions to be passed in the data payload regarding what to do with the tokens once they arrive at the destination chain.</p></li><li><p><strong>Secure Token Transfers</strong>—CCIP features a plug-and-play solution consisting of audited token pool contracts that handle the complexity of burning and minting or locking and unlocking tokens across chains. CCIP token transfers also have additional security features like rate limits, and enable ecosystem partners to easily build new capabilities around a supported token via a single CCIP interface.</p></li><li><p><strong>Arbitrary Messaging</strong>—CCIP enables the ability to send arbitrary data (encoded as bytes) to a receiving smart contract on a different blockchain. The developer is free to encode any data they wish to send. Typically, developers use arbitrary messaging to trigger an informed action on the receiving smart contract, such as rebalancing an index, minting a specific NFT, or calling an arbitrary function with the sent data as custom parameters. Developers can encode multiple instructions in a single message, enabling them to orchestrate complex, multi-step, multi-chain tasks.</p></li><li><p><strong>Extendable and future-proof</strong>—CCIP is built to support continuous updates, such as the integration of new blockchains, the introduction of advanced functionalities, and the addition of other defense-in-depth approaches to security. Thus,  integrating CCIP eliminates future switching costs should new cross-chain functionalities be required.</p></li></ul><p>&quot;We are excited to integrate industry-standard Chainlink CCIP, reinforcing our commitment to providing top-tier infrastructure for our ecosystem developers. This integration not only expands Linea’s cross-chain accessibility but also aligns us with Chainlink’s extensive ecosystem, accelerating our journey toward greater adoption and innovation in the blockchain industry.&quot;—Declan Fox, Head of Product, Linea</p><p><strong>About Chainlink</strong></p><p>Chainlink is the universal platform for pioneering the future of global markets onchain. Chainlink has enabled over $15 trillion in transaction value by providing financial institutions, startups, and developers worldwide with access to real-world data, offchain computation, and secure cross-chain interoperability across any blockchain. Chainlink powers verifiable applications and high-integrity markets for banking, DeFi, global trade, gaming, and other major sectors.</p><p>Learn more about Chainlink by visiting <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://chain.link/">chain.link</a> or reading the developer documentation at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.chain.link/">docs.chain.link</a>.</p><p><strong>About Linea</strong></p><p>Linea is the home network for the world. One where users are in control, empowered to set the terms for their digital and financial lives. Our leading ZK technology makes Ethereum effortless, unlocking web2-like speed, cost, and scale. We offer rich builder support, including Metamask Developer integrations, to help builders create more powerful, stickier dapps. Spearheaded by Ethereum ecosystem leaders, and together with the Linea community—we drive significant advancements across onchain experience for everyone.</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/3364741ed73b35b7a793d0c778d4935cfc80fd70abfa96cf6e24b5f16fc2d24c.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Linea and Aryze Partner to Transform Digital Finance]]></title>
            <link>https://paragraph.com/@linea-7/linea-and-aryze-partner-to-transform-digital-finance</link>
            <guid>F0nCtSu4DFnAsQgG2MPx</guid>
            <pubDate>Wed, 02 Oct 2024 22:04:35 GMT</pubDate>
            <description><![CDATA[In the rapidly evolving world of digital finance, Linea is excited to announce a strategic partnership with Aryze, a global fintech innovator based in Denmark. This collaboration brings Aryze&apos;s suite of tokenized Real-World Assets (RWAs) and their unique Stablecoin-as-a-Service offerings to the Linea blockchain. By integrating Aryze&apos;s E-Assets into the Linea ecosystem, we&apos;re bridging the gap between traditional finance and the digital economy, providing unprecedented access to ...]]></description>
            <content:encoded><![CDATA[<p>In the rapidly evolving world of digital finance, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.build/">Linea</a> is excited to announce a strategic partnership with <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.aryze.io/">Aryze</a>, a global fintech innovator based in Denmark. This collaboration brings Aryze&apos;s suite of tokenized Real-World Assets (RWAs) and their unique <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.aryze.io/en-us/services/stablecoin-as-a-service-saas">Stablecoin-as-a-Service</a> offerings to the Linea blockchain. By integrating Aryze&apos;s<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.aryze.io/en-us/products/e-assets"> E-Assets</a> into the Linea ecosystem, we&apos;re bridging the gap between traditional finance and the digital economy, providing unprecedented access to digital assets.</p><h3 id="h-aryzes-e-assets-the-foundation-for-innovation" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Aryze&apos;s E-Assets: The Foundation for Innovation</strong></h3><p>At the core of this partnership are <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.aryze.io/en-us/products/e-assets">Aryze E-Assets</a>: eUSD, eEUR, eGBP, and recently added eGOLD. Fully backed by their real-world counterparts, these digital assets offer stability and trust for users and businesses. By tokenizing currencies and commodities, Aryze makes global assets accessible and usable within the digital economy. The $RYZE token, a native token to Aryze, helps unite liquidity across E-Assets, with a built-in revenue-sharing mechanism and an automated way to collect rewards and provide incentives to E-Asset users.</p><p>These E-Assets enable Aryze to rapidly create custom <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.aryze.io/en-us/services/stablecoin-as-a-service-saas">Stablecoin-as-a-Service</a> solutions. Businesses can leverage this infrastructure to develop their own branded stablecoins, tailored to their specific needs and seamlessly integrated into their operations.</p><p>&quot;Our live E-Assets are the building blocks that allow us to offer customized financial solutions quickly and effectively,&quot; explains Jodi Husain, CTO of Aryze.</p><h3 id="h-introducing-reforge-accelerating-asset-integration" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Introducing reForge: Accelerating Asset Integration</strong></h3><p>Aryze&apos;s<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.aryze.io/en-us/products/reforge"> reForge</a> is an innovative function embedded in their E-Assets, designed to offer convertibility and cross-chain support. reForge simplifies the launch of new tokens like eGOLD and enables seamless onchain conversions between all E-Assets.</p><p>Users can choose from a wide range of <strong>stablecoins</strong> and tokenized assets on any supported blockchain, enhancing flexibility and adaptability in today&apos;s dynamic financial landscape.<strong>&quot;reForge is the engine driving our innovation, allowing us to integrate new real-world assets swiftly and provide clients with the financial tools they need,&quot; shares</strong> Jack Nikogosian, CEO of Aryze.</p><h3 id="h-enhancing-the-linea-ecosystem" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Enhancing the Linea Ecosystem</strong></h3><p>Our partnership aims to make <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.aryze.io/en-us/products/e-assets">Aryze E-Assets</a> operational within the Linea ecosystem, significantly increasing the utility and accessibility of digital assets for users. Integration with platforms like MetaMask and the MetaMask Debit Card will eventually enable users to manage and spend their Aryze E-Assets with ease.</p><p>&quot;I like to think we&apos;re entering an exciting era where we&apos;re not just talking about web3 anymore — we&apos;re talking about web0, aka &apos;Real Life.&apos; I&apos;ve seen a lot of innovation in this space, but what we&apos;re seeing now across stables, L2 throughput, and easier wallet experiences means real transformation,” says Daniel Lynch, MetaMask.</p><p>By leveraging Aryze&apos;s solutions, businesses and individuals in the <strong>Linea</strong> network gain immediate access to stable, reliable <strong>digital currencies</strong> and assets. This integration supports a wide range of financial activities, from everyday transactions to complex corporate operations.</p><h3 id="h-empowering-businesses-with-custom-financial-solutions" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Empowering Businesses with Custom Financial Solutions</strong></h3><p>Empowering businesses with custom financial solutions, Aryze offers innovative Stablecoin-as-a-Service solutions that enable companies to create their own branded E-Assets for use in closed ecosystems, internal transactions, loyalty programs, and more. At the heart of this infrastructure is reForge, which plays a crucial role in unifying liquidity across E-Asset pairs, and the $RYZE token, which serves as a liquidity unifier, and incentive mechanism, and includes a built-in buyback and burn component.</p><p>By leveraging Aryze’s capabilities alongside Linea’s scalable blockchain infrastructure, businesses can easily deploy stablecoins and utilize $RYZE to access deep liquidity for their solutions. This partnership fosters innovation and competitive differentiation, advancing the adoption of stablecoins and tokenized real-world assets (RWAs) to build a more inclusive and dynamic financial ecosystem.</p><h3 id="h-commitment-to-compliance-and-security" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Commitment to Compliance and Security</strong></h3><p>Building trust is paramount. Aryze operates under strict <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.aryze.io/en-us/protocol/legal-framework">Know Your Customer (KYC)</a> and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.aryze.io/en-us/protocol/legal-framework">Anti-Money Laundering (AML)</a> regulations, ensuring full compliance with international standards. Regular audits by firms like Grant Thornton affirm their commitment to transparency, while a robust legal framework safeguards transaction integrity. &quot;Upholding the highest standards of compliance and security is vital to our mission of transforming the financial landscape,&quot; shares Morten Nielsen, CFO of Aryze.</p><h3 id="h-join-our-live-ama-session" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Join Our Live AMA Session</strong></h3><p>Interested in how Aryze E-Assets and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.aryze.io/en-us/services/stablecoin-as-a-service-saas">Stablecoin-as-a-Service</a> can benefit you or your business? Join us on October 9th from 15:00 to 16:00 CEST on X Spaces for a live AMA session with Linea and Aryze. Engage directly with our teams and have your questions answered.</p><h3 id="h-fast-track-stablecoin-offer-for-linea-dapps" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Fast-Track Stablecoin Offer for Linea dApps</strong></h3><p>To celebrate our integration with Linea, Aryze is offering two dApps within the Linea ecosystem a unique opportunity to fast-track the creation of their own stablecoin. This initiative is designed to empower innovative projects by leveraging Aryze&apos;s Stablecoin-as-a-Service (SaaS) solutions. Selected projects will receive dedicated support to build and launch their custom stablecoin, driving forward the future of digital finance.</p><p>Interested dApps can apply by visiting this **<a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://form.typeform.com/to/WeUHnW18">submission form</a> **and sharing details about their initiative.</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/0fb64bfad71da80a3dc89b53777c8d4121cb4de0faf945d3321619363673bfd0.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[How To Make the Most of Your LGG Winnings]]></title>
            <link>https://paragraph.com/@linea-7/how-to-make-the-most-of-your-lgg-winnings</link>
            <guid>Zh3qWm06QN3TB1CsAa2K</guid>
            <pubDate>Wed, 02 Oct 2024 18:24:09 GMT</pubDate>
            <description><![CDATA[For 11 days, Lineans competed in the Linea Guild Games, entering the world of Unfettered Awakening, killing zombies, and doing their best to stay alive. On this journey, Lineans weren’t alone, accompanied by avatar companions representing the first four guilds: Efrogs, Foxy, FrogwifCat, and Linus. You may have even caught a live stream of our Linea team member and resident LGG legend, Christopher, taking on the Chapter IX Finale. The whole experience was made possible by Linea, Unfettered Eco...]]></description>
            <content:encoded><![CDATA[<p>For 11 days, Lineans competed in the Linea Guild Games, entering the world of Unfettered Awakening, killing zombies, and doing their best to stay alive. On this journey, Lineans weren’t alone, accompanied by avatar companions representing the first four guilds: Efrogs, Foxy, FrogwifCat, and Linus. You may have even caught a live stream of our Linea team member and resident LGG legend, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/lineabuild/status/1839652291487674537?s=46&amp;t=sLhD45Qjun6f93jZ4oPOyg">Christopher, taking on the Chapter IX Finale.</a></p><p>The whole experience was made possible by Linea, Unfettered Ecosystem, Hyperplay, and Game7. Guilds and individuals competed for a total of $100,000 in ETH (to be distributed later this week) from Linea, $SOULS tokens from Unfettered Ecosystem, and various meme tokens supplied by each of the four guilds.</p><p>By now, you’ve got a bag full of $FOXY, $CROAK, $LINUS, $WEF and $SOULS and if you&apos;re a degen you&apos;re likely figuring out how to get the best yield. We&apos;ve got you covered! Here&apos;s some of Linea’s top defi dapps where you can exercise those tokens.</p><h2 id="h-lynex-powered-by-clip-finance" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Lynex, Powered by Clip Finance</h2><p>Users can earn attractive yields on $SOULS by providing liquidity through the SOULS/WETH gauge on Lynex. This gauge is expertly managed by Clip Finance, which simplifies the complexities of concentrated liquidity, allowing LPs to stake and earn passively with ease.</p><p>Additionally, Lynex supports $LINUS, $FOXY, and $CROAK. Each token has its own dedicated gauge, allowing users to provide liquidity and earn Lynex rewards while benefiting from veLYNX voter engagement. This creates a sustainable and dynamic flywheel between users, protocols, and liquidity providers, fostering long-term growth and collaboration.</p><div data-type="embedly" src="https://www.lynex.fi/" data="{&quot;provider_url&quot;:&quot;https://www.lynex.fi&quot;,&quot;description&quot;:&quot;Lynex is the DeFi native Liquidity layer on Linea Blockchain. An advanced automated market maker (AMM) that seamlessly integrates the finest elements derived from Curve, Convex, and Velodrome&quot;,&quot;title&quot;:&quot;Lynex - The native liquidity market on Linea&quot;,&quot;mean_alpha&quot;:123.091851852,&quot;thumbnail_width&quot;:1200,&quot;url&quot;:&quot;https://www.lynex.fi/&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/d40f1c5c13baeca65d2860fb98791b326fff979a97172db68d7843ea2ee07659.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Lynex&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:675,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1200,&quot;height&quot;:675,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/d40f1c5c13baeca65d2860fb98791b326fff979a97172db68d7843ea2ee07659.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/d40f1c5c13baeca65d2860fb98791b326fff979a97172db68d7843ea2ee07659.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://www.lynex.fi/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Lynex - The native liquidity market on Linea</h2><p>Lynex is the DeFi native Liquidity layer on Linea Blockchain. An advanced automated market maker (AMM) that seamlessly integrates the finest elements derived from Curve, Convex, and Velodrome</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.lynex.fi</span></div><img src="https://storage.googleapis.com/papyrus_images/d40f1c5c13baeca65d2860fb98791b326fff979a97172db68d7843ea2ee07659.png"/></div></a></div></div><h2 id="h-maestro" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Maestro</h2><p>The original TG trading bot allows users to swap memes without leaving the comfort of Telegram. Its automatic buy and sell options make trading easier by letting your strategy do the work for you, maximizing your returns while effectively managing risks and unexpected costs. For future meme investments, be sure to take advantage of its snipe capability, which gives degens the ability to buy memes faster than on other markets.</p><div data-type="embedly" src="https://www.maestrobots.com/" data="{&quot;provider_url&quot;:&quot;https://www.maestrobots.com&quot;,&quot;description&quot;:&quot;The leading Telegram sniping and trading Bot for DeFi&quot;,&quot;title&quot;:&quot;Maestro&quot;,&quot;thumbnail_width&quot;:1000,&quot;url&quot;:&quot;https://www.maestrobots.com/&quot;,&quot;thumbnail_url&quot;:&quot;https://storage.googleapis.com/papyrus_images/3c2d378eafa6ebe629c6aeb86ac6a74813081262f960af3e766c6526f1ab8cb4.png&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;Maestrobots&quot;,&quot;type&quot;:&quot;link&quot;,&quot;thumbnail_height&quot;:485,&quot;image&quot;:{&quot;img&quot;:{&quot;width&quot;:1000,&quot;height&quot;:485,&quot;src&quot;:&quot;https://storage.googleapis.com/papyrus_images/3c2d378eafa6ebe629c6aeb86ac6a74813081262f960af3e766c6526f1ab8cb4.png&quot;}}}" format="small"><link rel="preload" as="image" href="https://storage.googleapis.com/papyrus_images/3c2d378eafa6ebe629c6aeb86ac6a74813081262f960af3e766c6526f1ab8cb4.png"/><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://www.maestrobots.com/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>Maestro</h2><p>The leading Telegram sniping and trading Bot for DeFi</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://www.maestrobots.com</span></div><img src="https://storage.googleapis.com/papyrus_images/3c2d378eafa6ebe629c6aeb86ac6a74813081262f960af3e766c6526f1ab8cb4.png"/></div></a></div></div><h2 id="h-zerolend" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Zerolend</h2><p>This lending and borrowing protocol has created unique meme markets exclusively on Linea, allowing users to deposit or borrow against their memes. They currently support <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.zerolend.xyz/?marketName=proto_linea_foxy_v3">$FOXY</a> &amp; <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.zerolend.xyz/?marketName=proto_linea_croak_v3">$CROAK</a>.</p><div data-type="embedly" src="https://zerolend.xyz/" data="{&quot;provider_url&quot;:&quot;https://zerolend.xyz&quot;,&quot;description&quot;:&quot;ZeroLend is a user-friendly and frictionless lending experience to onboard the masses to Defi. Built on L2s&quot;,&quot;title&quot;:&quot;ZeroLend&quot;,&quot;url&quot;:&quot;https://zerolend.xyz/&quot;,&quot;version&quot;:&quot;1.0&quot;,&quot;provider_name&quot;:&quot;ZeroLend&quot;,&quot;type&quot;:&quot;link&quot;}" format="small"><div class="react-component embed my-5" data-drag-handle="true" data-node-view-wrapper="" style="white-space:normal"><a class="link-embed-link" href="https://zerolend.xyz/" target="_blank" rel="noreferrer"><div class="link-embed"><div class="flex-1"><div><h2>ZeroLend</h2><p>ZeroLend is a user-friendly and frictionless lending experience to onboard the masses to Defi. Built on L2s</p></div><span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-link h-3 w-3 my-auto inline mr-1"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg>https://zerolend.xyz</span></div></div></a></div></div><p>-</p><p><em>Stay tuned as Linea’s entertainment multiverse continues to grow and connect with your fellow guild members on </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/LineaBuild?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor"><em>X</em></a><em> and </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/linea"><em>Discord</em></a><em>.</em></p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/a78cb322414c6d7a1dd05a1684581921cc0cede815601211836943d0879a7ba3.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Protecting Builders Everywhere: Web3 For All]]></title>
            <link>https://paragraph.com/@linea-7/protecting-builders-everywhere-web3-for-all</link>
            <guid>NdeFco53o4Bmgrme4fiS</guid>
            <pubDate>Fri, 27 Sep 2024 23:55:21 GMT</pubDate>
            <description><![CDATA[Web3 is transforming the internet by empowering people with new kinds of personal, economic, and political agency. From decentralized finance, digital art, to self-sovereign identity and new forms of governance, every project, every innovation, is born from a belief in a better future. Yet, despite the inclusive vision and technological innovation, web3 is currently under attack in the US. Reckless regulation for crypto is currently threatening to unplug US builders from web3. Now is the time...]]></description>
            <content:encoded><![CDATA[<p>Web3 is transforming the internet by empowering people with new kinds of personal, economic, and political agency. From decentralized finance, digital art, to self-sovereign identity and new forms of governance, every project, every innovation, is born from a belief in a better future.</p><p>Yet, despite the inclusive vision and technological innovation, web3 is currently under attack in the US. Reckless regulation for crypto is currently threatening to unplug US builders from web3.</p><p>Now is the time to protect our industry and all the people and innovation behind it. Join us as we celebrate the people and the projects that make this technology worth fighting for. Today, we’re asking you to be part of the movement: <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://consensys.io/web3forall"><em>Web3 for All</em></a><em>.</em></p><h3 id="h-why-protecting-web3-matters" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Why protecting web3 matters</strong></h3><p>In April 2024, Consensys (Linea’s founding member) <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://consensys.io/crypto-regulations/defend-ethereum">announced a lawsuit against the SEC</a> seeking to end an inappropriate investigation into the Ethereum ecosystem and to get clarity that blockchain software developers like Consensys were not brokers under the U.S. securities laws.</p><p>The SEC elected to end its investigation into Ethereum, which was a huge win for the entire blockchain space, but proceeded with bringing an enforcement action in which it asserted that MetaMask was an unlicensed broker of unregistered securities.</p><p>This not only demonstrates a lack of understanding by the SEC about what a crypto wallet is and does, but also reveals a serious and systemic threat to blockchain software development in the U.S.  This action is an example of a policy choice to go after the technological innovation of web3 builders. And it is the web3 builders that are here for the technology, using the technology, that are most at risk from this misguided use of enforcement powers.</p><p>Since the onset of this litigation, the entire Consensys team has been fighting for our right to innovate, and not just for our company, but for the entire crypto community around the world.</p><h3 id="h-join-us-as-as-we-stand-up-for-web3-builders-in-the-us-and-the-world" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Join us as as we stand up for web3 builders in the US and the world</strong></h3><p>Over the next several weeks we will be using Consensys and Linea channels to share stories of the builders behind web3 in the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://consensys.io/blog/builder-stories-back-represent-web3-innovation-matters-most">Builder Stories</a> series. If you caught <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/playlist?list=PLcLEZJlCz-cojF5HicKsk6j_nAXVB_sj1">the first series</a>, you already know they provide an indepth look at the people and innovative projects at the heart of web3.</p><p>This new season features a diverse set of builders – some veterans and some emerging – in an effort to show policymakers the people, talent, and technological innovation at stake if the SEC’s overreach evolves into regulation. Check out SheFi Founder,  Maggie Love’s story <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.youtube.com/watch?v=egdFqZkqh24&amp;embeds_referring_euri=https%3A%2F%2Fconsensys.io%2F&amp;source_ve_path=MjM4NTE">here</a>.</p><p>Ready to join the conversation?</p><p>Be sure to use the hashtag #Web3forAll when sharing on social media. Learn more about Consensys’ lawsuit against the SEC <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://consensys.io/crypto-regulations/defend-ethereum">here</a> and check out <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://consensys.io/web3forall">Web3ForAll</a> to learn how you can get involved today.</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/f20fa17ae669f9f37cb56a78039bb5a27707eaa647af8e201253fff1b69ed792.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Meet Linea’s Community Champions: The Volunteers Fostering Web3 Support]]></title>
            <link>https://paragraph.com/@linea-7/meet-linea-s-community-champions-the-volunteers-fostering-web3-support</link>
            <guid>x3Ypx3oWX0lBZAcR3LNv</guid>
            <pubDate>Thu, 26 Sep 2024 14:35:30 GMT</pubDate>
            <description><![CDATA[With almost 400,000 members, the Linea Discord is a center point of our web3 community. It’s the spot where fun, connection, feedback, questions, the good and the imperfect come together in a crazy melting pot. Linea’s Discord moderators work their magic engaging and answering all the questions, queries, and quandaries users may have. But they’re not the only ones that keep the Linea Discord running. Once we cut through all the requisite friendly (and sometimes not-so-friendly) banter on Line...]]></description>
            <content:encoded><![CDATA[<p>With almost 400,000 members, the Linea Discord is a center point of our web3 community. It’s the spot where fun, connection, feedback, questions, the good and the imperfect come together in a crazy melting pot.</p><p>Linea’s Discord moderators work their magic engaging and answering all the questions, queries, and quandaries users may have. But they’re not the only ones that keep the Linea Discord running. Once we cut through all the requisite friendly (and sometimes not-so-friendly) banter on Linea, we get to one of the other factors that establish Linea as a community: users helping users. Over the years, an especially generous group of volunteers have emerged: The Linea Champions.</p><p>This group is made up of Lineans who have dedicated their online lives to helping other users, and offering support and guidance from how to navigate their favorite dapps to onchain events they are participating in.</p><p>“The Champions are a dedicated and awesome group of volunteers. Their support and engagement bring an incredible liveliness to our Discord, and many of them offer great ideas and recommendations on how they&apos;d like to see the community improve,” says Kbee, part of Linea’s community support team.</p><p>Exactly what it takes to become a Champion is complex, but the common denominator is that these users are dedicated to maintaining a secure and supportive community. They operate with compassion and inclusivity, embracing challenging inquiries and genuinely enjoy helping others and solving problems.</p><p>Here, we give a rare behind the scenes spotlight interview with nine Champions.</p><h3 id="h-linea-tell-us-something-about-yourself-so-we-can-anonymously-know-who-you-are" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Linea: Tell us something about yourself so we can (anonymously) know who you are!</strong></h3><p><strong>Sugo:</strong> An interesting fact about me is I can’t stand drinking coffee, but I absolutely love the smell of it. It’s a strange contradiction I can’t explain, but it&apos;s true! :D</p><p><strong>Oxsoltani:</strong> Well, I have many interesting facts in my life: I love the earth, the place that is the home of all of us and the earth that breathes and gives breath to us humans. Sometimes I get so lost in the beauty of the earth and I talk to myself, I think I&apos;m crazy.</p><p><strong>cb03c66:</strong> Through my onchain experience, I&apos;ve learned a great deal! When I was younger, I launched my first project on the Fantom Blockchain (now sonic), which turned out to be a great success as I remember it generated a TVL of around $8m at its peak and this all started as a idea which I thought users were going to be interested in. Now, I&apos;ve chosen to apply the knowledge and experience I&apos;ve gained over the years to support projects I believe in and that I see as the future of crypto.</p><p><strong>Rocket:</strong> Onchain, I have a genuine passion for the Web3 space and I am eager to contribute by educating others and helping secure it from bad actors in any way I can while learning alongside, with a deep passion in community management.</p><p><strong>Dave:</strong> I&apos;m just a guy with interest in tech, especially in the blockchain technology</p><p><strong>Mirmalnir:</strong> I love helping people, it&apos;s like the purpose of my life.</p><p><strong>Kacperrr0:</strong> I’m from a Polish village, and I’m a bit weird, but people can’t tell.</p><h3 id="h-linea-what-first-attracted-you-to-life-onchain" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Linea: What first attracted you to life onchain?</strong></h3><p><strong>Mirmalnir:</strong> To be honest, it was money.</p><p><strong>Rocket:</strong> Anonymity, decentralization, security, transparency, and the amazing people ofc!</p><p><strong>Kacperrr0:</strong> Freedom. I hate being restricted, I cannot be confined. Onchain, I can do whatever I want, whenever I want. I enjoy working for dozens of hours a day on things that drive me, but on other days, I find something else interesting, and my focus involuntarily shifts completely elsewhere.</p><h3 id="h-linea-how-did-you-first-come-across-linea-recall-the-moment-the-best-you-can" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Linea: How did you first come across Linea? Recall the moment the best you can!</strong></h3><p><strong>Rocket:</strong> I came across Linea on X, during the private testnet registration, I was super excited to participate in the private testnet. It was zkEvm back then :)</p><p><strong>Mr itachi:</strong> I first learned about linea on X when I read that there was a special campaign for testent phase on Galxe consisting of nine weeks. Then my passion took off. I love participating in new challenges. They were wonderful and unforgettable days. I learned a lot in the field of web3 thanks to Linea.</p><p><strong>Cb03c66:</strong> As a volunteer, I love contributing my time to the community because I believe in decentralization and the power of a system where users support one another, creating an environment for learning and growth. I truly enjoy sharing my experience and knowledge with others, while also helping to troubleshoot any issues.</p><p><strong>Anon I:</strong> Helping each other make[s] me happy.</p><p><strong>Rocket:</strong> My passion for the community is driven by the power of shared growth and collaboration. I’m inspired by the potential of people coming together to solve problems, exchange ideas, and create meaningful impact.</p><p><strong>Cb03c66:</strong> Honestly, what drives me the most is the satisfaction of helping users and seeing their issues resolved. I believe the key to onboarding users from web2 to web3 is creating a system that simplifies the learning process and makes getting assistance more accessible. Supporting users and solving problems keeps me motivated, knowing that we&apos;re making their experience smoother and more user-friendly.</p><h3 id="h-linea-what-has-been-your-favorite-discord-moment" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Linea: What has been your favorite Discord moment?</strong></h3><p><strong>oxsoltani:</strong> In my opinion, the best moment was when I got to know Linea, because before that I had been to the Discord accounts of many projects and I saw that the admins did not respond to the users or they responded very late, some of them were even frauds. They did not pay attention and ignored the users, even some admins behaved as if they were space shuttle engineers, but Linea has never done this.</p><p><strong>Kacperrr0:</strong> This may sound weird, but I enjoy working in a buzzing, wild chat rather than in a slow and regular environment. I would say my favorite time was during DeFi Voyage, where a lot of users participated and encountered all kinds of issues. In such an environment, I can really turn it up to the max.</p><p><strong>Cb03c66:</strong> I think my favorite was when I first became a champion and was recognized for my efforts. I remember right after I was selected, the server was really active, and a lot was happening. I jumped in to help, and it was just me and a few admins going all out in the chat. It felt like a race to see who could answer users the fastest, and also being free from the 10 minute slow mode meant I could assist a lot more haha! It was such an awesome feeling to be part of that and provide support—it was a blast!</p><h3 id="h-linea-as-a-champion-what-do-you-wish-people-would-stop-doing" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Linea: As a Champion, what do you wish people would stop doing?</strong></h3><p><strong>Dave:</strong> Spamming and engagement in scams or any related actions in the server.</p><p><strong>Sugo:</strong> I really wish people would cut out the scam attempts and stop spreading misinformation. Scams not only put users at risk but also shake the trust within our community, while misinformation can stir up confusion and unnecessary chaos. It’s all about keeping our space safe and informed, so we can all stay engaged and have each other’s backs ♡</p><h3 id="h-linea-what-have-been-some-of-your-favorite-projects-on-linea-or-campaigns-you-really-like" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Linea: What have been some of your favorite projects on Linea or campaigns you really like?</strong></h3><p><strong>Rocket:</strong> All the projects on Linea are amazing! Here are my top picks; Efrogs 🐸, Element market, Ether.fi, Mendi Finance, and Pheasant Network.</p><p><strong>​​Mirmalnir:</strong> Linea Park was my favorite! It was where my Linea journey began.</p><h3 id="h-linea-what-are-you-looking-forward-to-for-the-future-of-linea" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Linea: What are you looking forward to for the future of Linea?</strong></h3><p><strong>Anon I:</strong> Mass adoption using Linea.</p><p><strong>Mr itachi:</strong> As I said I believe in decentralization and that is something that attracted me to Linea I am really looking forward to achieving full decentralization on Linea.</p><p>-</p><p>If you’re not part of the fam already, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://discord.com/invite/linea">join Linea on Discord here</a>!</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/5e4c4fc0def5f63165dab1ccaf0ce0ead1609701bb98e5997bea70cf94bf4901.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Meet Splice Finance: Linea’s Native Yield Trading Hub]]></title>
            <link>https://paragraph.com/@linea-7/meet-splice-finance-linea-s-native-yield-trading-hub</link>
            <guid>6hirBqeape0dhsHwIHxT</guid>
            <pubDate>Tue, 24 Sep 2024 04:18:43 GMT</pubDate>
            <description><![CDATA[The first yield trading application on Linea is here! Splice Finance allows users to lock in and earn fixed yields or maximize points and variable yield from interest-bearing assets. Native yield trading allows users to split their yield-bearing tokens into two distinct components: Principal Tokens (PTs) and Yield Tokens (YTs). This approach provides flexibility and maximizes earning potential by enabling users to choose between fixed and variable yields. Here’s how it works and what you need...]]></description>
            <content:encoded><![CDATA[<p>The first yield trading application on Linea is here! Splice Finance allows users to lock in and earn fixed yields or maximize points and variable yield from interest-bearing assets.</p><p>Native yield trading allows users to split their yield-bearing tokens into two distinct components: Principal Tokens (PTs) and Yield Tokens (YTs). This approach provides flexibility and maximizes earning potential by enabling users to choose between fixed and variable yields.</p><p>Here’s how it works and what you need to know about Splice.</p><h2 id="h-splitting-interest-bearing-tokens" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Splitting Interest-Bearing Tokens</strong></h2><p>Splice allows users to earn fixed yields or variable yields by splitting yield-bearing tokens into two:</p><ul><li><p>A Principal Token (PT) which can be redeemed for 1 unit worth of the accounting token at maturity.</p><ul><li><p>i.e. 1 PT weETH can be redeemed for 1 ETH worth of weETH at maturity.</p></li><li><p>PTs can be bought at a discount to lock in fixed yields i.e. you pay 10 ETH for 12 PTs which matures in 1 year, earning you 2 ETH or 20% APY.</p></li></ul></li><li><p>A Yield Token (YT) which accumulates all the yield and points of the yield-bearing token.</p><ul><li><p>i.e. 1 YT weETH accumulates the ETH staking yield and LRT points of 1 weETH until maturity.</p></li><li><p>YTs on Linea also receive LXP-L on top of the base yields.</p></li><li><p>YTs expire worthless at maturity as all yields and points have been distributed.</p></li></ul></li></ul><h2 id="h-splice-liquidity-providers" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Splice Liquidity Providers</strong></h2><p>Liquidity providers on Splice earn extra trading fees on their tokens, earning high yield points without giving up point exposure. Liquidity providers hold a mix of PTs and YTs in a liquidity pool, continuing to earn the underlying yield while earning trading fees from those who buy or sell PTs and YTs. By using Splice, liquidity providers also earn extra LXP-L and LRT points due to partner boosts, as compared to just holding the asset.</p><p>By launching a yield trading hub on Linea, Splice enables Linea users to access a new asset class and primitive on the chain. Not only does Splice introduce more ways to earn yield, it opens up more potential integrations in yield derivatives vertical on Linea.</p><p><em>Visit</em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://app.splice.fi/"><em> app.splice.fi</em></a><em> for more information.</em></p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/9366bd1389ab3da26a70c9f1ee74bcfa835859335f60c97b10330e0b28698e98.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Meet Rio: A Specialized Fuzzer for Linea’s Zero-Knowledge Infrastructure]]></title>
            <link>https://paragraph.com/@linea-7/meet-rio-a-specialized-fuzzer-for-linea-s-zero-knowledge-infrastructure</link>
            <guid>qEypPhaz7fG99ZIoODOC</guid>
            <pubDate>Fri, 20 Sep 2024 04:01:52 GMT</pubDate>
            <description><![CDATA[Author: Valentin Wustholz Many Layer 2 (L2) blockchains, including Linea, rely on zero-knowledge (ZK) infrastructure. This infrastructure is highly complex ("moon math") and critical for the correct operation of these chains. In other words, even a single bug can result in catastrophic financial and reputational damage. Even though we have not seen a catastrophic incident in ZK-based L2s comparable to TheDAO hack in 2016, it requires great engineering discipline and rigorous testing to bullet...]]></description>
            <content:encoded><![CDATA[<p>Author: Valentin Wustholz</p><p>Many Layer 2 (L2) blockchains, including Linea, rely on zero-knowledge (ZK) infrastructure. This infrastructure is highly complex (&quot;moon math&quot;) and critical for the correct operation of these chains. In other words, even a single bug can result in catastrophic financial and reputational damage. Even though we have not seen a catastrophic incident in ZK-based L2s comparable to TheDAO hack in 2016, it requires great engineering discipline and rigorous testing to bulletproof such software components, given their inherent complexity.</p><p>Linea is well aware of this responsibility and highly prioritizes security. Currently, Linea works with over 20 security partners on threat prevention, real-time monitoring, post-incident tracing, user protection, and trust and reputation systems.</p><p>The Rio fuzzer is the latest result of an ongoing collaboration between <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://consensys.io/diligence">Diligence</a>, <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.build/">Linea</a>, and <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mariachris.github.io/">TU Vienna</a> with the goal of strengthening the security of the Linea ecosystem. Diligence is a collective of like-minded white hats, security researchers and engineers dedicated to safeguarding the Ethereum ecosystem. This team has already been instrumental in reviewing critical <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://consensys.io/diligence/blog/2024/05/how-consensys-diligence-secures-metamask-snaps-and-linea">Linea components</a>, with fuzzing acting as a second safety net beyond manual security reviews and audits.</p><p>Fuzzing, as an automated testing technique, is already widely used in the web2 industry (for instance, through large-scale continuous fuzzing efforts at Microsoft, Google, and Meta) to catch bugs before hackers can exploit them.</p><p>Over the last few years, Diligence has developed the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mariachris.github.io/Pubs/FSE-2020-Harvey.pd">Harvey fuzzer</a> to catch bugs in smart contracts for any EVM-based chain. Harvey powers the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://consensys.io/diligence/fuzzing">Diligence Fuzzing</a> service and is one of the most effective <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://consensys.io/diligence/blog/2023/04/benchmarking-smart-contract-fuzzers)">fuzzers on the market. </a></p><p>Today, we&apos;re happy to provide a sneak peek at Rio, a new fuzzer the Dilligience team has been working on. Rio is designed to identify potential million-dollar bugs in Linea&apos;s ZK infrastructure. More specifically, it targets the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Consensys/gnark)">gnark</a> infrastructure, a library used by Linea as well as many other projects for designing, executing, proving, and verifying circuits.</p><p>Rio has been continuously fuzzing gnark’s codebase over the past year; it has already <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Consensys/gnark/labels/fuzzing">identified 10 issues</a> that helped the Linea development team to improve gnark. For instance, Rio identified crashes and a specific circuit operation for which <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Consensys/gnark/pull/1089">gnark tracked unnecessary constraints</a>.</p><p>What about potential million-dollar bugs? Rio has already found several critical issues; for instance, in gnark’s <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Consensys/gnark/issues/1227">AssertIsLessOrEqual primitive</a>. More specifically, it found cases where gnark behaved differently for two logically equivalent but syntactically different circuits; it verified one of them for a given input but not the other one. In other words, gnark&apos;s constraint tracking was over- or under-constrained for one of the two circuits. Both types of issues are critical because they may affect the liveness/completeness (over-constrained) or safety/soundness (under-constrained) of the system.</p><p>“The issues that the Rio fuzzer is designed to catch are critical and can lead to catastrophic consequences. Linea currently uses additional safeguards to limit the impact of such issues; for instance, manual protocol upgrades in case of liveness issues and a centralized prover in case of safety issues. However, avoiding them in the first place is a top priority for Linea, and fuzzing is one of our security measures for catching them,” shares Gautam Botrel, gnark team lead.</p><p>Diligence continuously fuzzes gnark to catch such issues in every new commit and are creating new fuzzers for other ZK infrastructure in Linea.</p><p><em>Stay tuned for more technical details about Rio!</em></p><p>-</p><p><strong>Acknowledgments:</strong> Diligence team (Pedro Santos, Tobias Vogel, and Valentin Wüstholz), gnark team (especially, Gautam Botrel and Ivo Kubjas), TU Vienna team (Maria Christakis, Christoph Hochrainer, and Anastasia Isychev).</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/62ab15fd5254088e9c14cfb514f5f64fb38e911a3fdbf876e018cb1dbf44d9e1.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[How To Build a Simple Web3 Marketplace Dapp on Linea]]></title>
            <link>https://paragraph.com/@linea-7/how-to-build-a-simple-web3-marketplace-dapp-on-linea</link>
            <guid>I3sneavasvxMLn6rqP2g</guid>
            <pubDate>Tue, 17 Sep 2024 22:29:12 GMT</pubDate>
            <description><![CDATA[In web3, decentralized applications (dapps) have gained popularity due to their ability to provide secure, transparent, and trustless services. Some of the most popular types of dapps are decentralized marketplaces, which allow users to buy and sell items directly on the blockchain, eliminating the need for intermediaries. In this tutorial, we will build a simple marketplace dapp on Linea, a Layer 2 zkEVM technology that offers a scalable and cost-efficient environment while maintaining the s...]]></description>
            <content:encoded><![CDATA[<p>In web3, decentralized applications (dapps) have gained popularity due to their ability to provide secure, transparent, and trustless services. Some of the most popular types of dapps are decentralized marketplaces, which allow users to buy and sell items directly on the blockchain, eliminating the need for intermediaries.</p><p>In this tutorial, we will build a simple marketplace dapp on Linea, a Layer 2 zkEVM technology that offers a scalable and cost-efficient environment while maintaining the security of Ethereum.</p><p>This guide covers both front-end and smart contract development.</p><h2 id="h-understanding-the-marketplace-dapp-architecture" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Understanding the Marketplace Dapp Architecture</strong></h2><p>We will be diving into the architecture of the marketplace dapp and its components.</p><p>The marketplace will incorporate smart contracts, frontend, and blockchain integration. The smart contract will include features such as listing items, buying items, and transferring ownership of an item.</p><p>The frontend serves as the user interface where buyers and sellers can interact with each other using the smart contract. While having a frontend and backend is important, the way the dapp interacts with the Linea blockchain is also crucial. We will be using the Metamask SDK along with Wagmi and Infura RPC providers.</p><h3 id="h-setting-up-the-environment" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Setting Up the Environment</strong></h3><p>We will start by initializing a monorepo. A monorepo (short for monolithic repository) is a software development strategy where code for multiple projects is stored in a single version control repository.</p><p>Let’s create a monorepo with pnpm:</p><p>Create a new directory for your monorepo and initialize it:</p><pre data-type="codeBlock" text="mkdir web3-marketplace-linea
cd web3-marketplace-linea
pnpm init
"><code>mkdir web3<span class="hljs-operator">-</span>marketplace<span class="hljs-operator">-</span>linea
cd web3<span class="hljs-operator">-</span>marketplace<span class="hljs-operator">-</span>linea
pnpm init
</code></pre><p>Create a pnpm-workspace.yaml file in the root to define your workspace structure:</p><pre data-type="codeBlock" text="packages:
  - &apos;packages/*&apos;
"><code><span class="hljs-symbol">packages:</span>
  - <span class="hljs-comment">'packages/*'</span>
</code></pre><p>Here’s what our workspace file structure will be like:</p><pre data-type="codeBlock" text="packages
├── site         # Frontend built with Next.js, Tailwind CSS, and Shadcn UI
└── blockchain   # Smart contracts using Hardhat
"><code>packages
├── site         <span class="hljs-comment"># Frontend built with Next.js, Tailwind CSS, and Shadcn UI</span>
└── blockchain   <span class="hljs-comment"># Smart contracts using Hardhat</span>
</code></pre><p>Let’s head over to the blockchain directory and initialize a hardhat project.</p><pre data-type="codeBlock" text="cd blockchain
npx hardhat init
"><code><span class="hljs-built_in">cd</span> blockchain
npx hardhat init
</code></pre><p>You&apos;ll be presented with several options:</p><pre data-type="codeBlock" text="? What do you want to do? …
❯ Create a JavaScript project
  Create a TypeScript project
  Create a TypeScript project (with Viem)
  Create an empty hardhat.config.js
  Quit
"><code>? What do you want <span class="hljs-keyword">to</span> do? …
❯ <span class="hljs-keyword">Create</span> a JavaScript project
  <span class="hljs-keyword">Create</span> a TypeScript project
  <span class="hljs-keyword">Create</span> a TypeScript project (<span class="hljs-keyword">with</span> Viem)
  <span class="hljs-keyword">Create</span> an <span class="hljs-keyword">empty</span> hardhat.config.js
  Quit
</code></pre><p>For this tutorial we’ll be using TypeScript project. Hardhat will automatically install the necessary dependencies for you.</p><h3 id="h-project-structure" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Project Structure</strong></h3><p>After initialization, you&apos;ll have a project structure that includes:</p><ul><li><p><strong>contracts/:</strong> Solidity contracts</p></li><li><p><strong>ignition/:</strong> Ignition deployment modules</p></li><li><p><strong>test/:</strong> Test files</p></li><li><p><strong>hardhat.config.js:</strong> Hardhat configuration</p></li></ul><h3 id="h-write-the-smart-contract" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Write the Smart Contract</strong></h3><p>Let’s start writing the smart contract:</p><pre data-type="codeBlock" text="// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

/// @title Marketplace
/// @notice A simple marketplace contract for listing, purchasing, and transferring items
/// @dev This contract manages items, their ownership, and transactions
contract Marketplace {
    /// @notice Structure to represent an item in the marketplace
    /// @dev Each item has a unique ID, name, price, seller, owner, and sale status
    struct Item {
        uint id;
        string name;
        uint price;
        address payable seller;
        address owner;
        bool isSold;
    }

    /// @notice Total number of items listed in the marketplace
    uint public itemCount = 0;

    /// @notice Mapping of item IDs to Item structs
    mapping(uint =&gt; Item) public items;

    /// @notice Mapping of owner addresses to arrays of owned item IDs
    mapping(address =&gt; uint[]) public ownedItems;

    /// @notice Lists a new item in the marketplace
    /// @param _name The name of the item
    /// @param _price The price of the item in wei
    /// @dev Increments itemCount and adds the new item to the items mapping
    function listItem(string memory _name, uint _price) public {
        require(_price &gt; 0, &quot;Price must be greater than zero&quot;);

        itemCount++;
        items[itemCount] = Item(itemCount, _name, _price, payable(msg.sender), msg.sender, false);
        ownedItems[msg.sender].push(itemCount);
    }

    /// @notice Allows a user to purchase an item
    /// @param _id The ID of the item to purchase
    /// @dev Transfers the item&apos;s price to the seller and updates ownership
    function purchaseItem(uint _id) public payable {
        Item storage item = items[_id];
        require(_id &gt; 0 &amp;&amp; _id &lt;= itemCount, &quot;Item does not exist&quot;);
        require(msg.value == item.price, &quot;Incorrect price&quot;);
        require(!item.isSold, &quot;Item already sold&quot;);
        require(msg.sender != item.seller, &quot;Seller cannot buy their own item&quot;);

        item.isSold = true;
        item.seller.transfer(msg.value);

        // Transfer ownership
        _transferOwnership(_id, item.seller, msg.sender);
    }

    /// @notice Internal function to transfer ownership of an item
    /// @param _id The ID of the item
    /// @param _from The current owner&apos;s address
    /// @param _to The new owner&apos;s address
    /// @dev Updates the item&apos;s owner and adjusts the ownedItems mappings
    function _transferOwnership(uint _id, address _from, address _to) internal {
        Item storage item = items[_id];
        item.owner = _to;

        // Remove item from the previous owner&apos;s list
        uint[] storage fromItems = ownedItems[_from];
        for (uint i = 0; i &lt; fromItems.length; i++) {
            if (fromItems[i] == _id) {
                fromItems[i] = fromItems[fromItems.length - 1];
                fromItems.pop();
                break;
            }
        }

        // Add item to the new owner&apos;s list
        ownedItems[_to].push(_id);
    }

    /// @notice Allows the owner to transfer an item to another address
    /// @param _id The ID of the item to transfer
    /// @param _to The address of the recipient
    /// @dev Calls the internal _transferOwnership function
    function transferItem(uint _id, address _to) public {
        Item storage item = items[_id];
        require(_id &gt; 0 &amp;&amp; _id &lt;= itemCount, &quot;Item does not exist&quot;);
        require(msg.sender == item.owner, &quot;You do not own this item&quot;);

        _transferOwnership(_id, msg.sender, _to);
    }

    /// @notice Retrieves all item IDs owned by a specific address
    /// @param _owner The address of the owner
    /// @return An array of item IDs owned by the specified address
    function getItemsByOwner(address _owner) public view returns (uint[] memory) {
        return ownedItems[_owner];
    }
}
"><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-comment">/// @title Marketplace</span>
<span class="hljs-comment">/// @notice A simple marketplace contract for listing, purchasing, and transferring items</span>
<span class="hljs-comment">/// @dev This contract manages items, their ownership, and transactions</span>
<span class="hljs-class"><span class="hljs-keyword">contract</span> <span class="hljs-title">Marketplace</span> </span>{
    <span class="hljs-comment">/// @notice Structure to represent an item in the marketplace</span>
    <span class="hljs-comment">/// @dev Each item has a unique ID, name, price, seller, owner, and sale status</span>
    <span class="hljs-keyword">struct</span> <span class="hljs-title">Item</span> {
        <span class="hljs-keyword">uint</span> id;
        <span class="hljs-keyword">string</span> name;
        <span class="hljs-keyword">uint</span> price;
        <span class="hljs-keyword">address</span> <span class="hljs-keyword">payable</span> seller;
        <span class="hljs-keyword">address</span> owner;
        <span class="hljs-keyword">bool</span> isSold;
    }

    <span class="hljs-comment">/// @notice Total number of items listed in the marketplace</span>
    <span class="hljs-keyword">uint</span> <span class="hljs-keyword">public</span> itemCount <span class="hljs-operator">=</span> <span class="hljs-number">0</span>;

    <span class="hljs-comment">/// @notice Mapping of item IDs to Item structs</span>
    <span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">uint</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> Item) <span class="hljs-keyword">public</span> items;

    <span class="hljs-comment">/// @notice Mapping of owner addresses to arrays of owned item IDs</span>
    <span class="hljs-keyword">mapping</span>(<span class="hljs-keyword">address</span> <span class="hljs-operator">=</span><span class="hljs-operator">></span> <span class="hljs-keyword">uint</span>[]) <span class="hljs-keyword">public</span> ownedItems;

    <span class="hljs-comment">/// @notice Lists a new item in the marketplace</span>
    <span class="hljs-comment">/// @param _name The name of the item</span>
    <span class="hljs-comment">/// @param _price The price of the item in wei</span>
    <span class="hljs-comment">/// @dev Increments itemCount and adds the new item to the items mapping</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">listItem</span>(<span class="hljs-params"><span class="hljs-keyword">string</span> <span class="hljs-keyword">memory</span> _name, <span class="hljs-keyword">uint</span> _price</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        <span class="hljs-built_in">require</span>(_price <span class="hljs-operator">></span> <span class="hljs-number">0</span>, <span class="hljs-string">"Price must be greater than zero"</span>);

        itemCount<span class="hljs-operator">+</span><span class="hljs-operator">+</span>;
        items[itemCount] <span class="hljs-operator">=</span> Item(itemCount, _name, _price, <span class="hljs-keyword">payable</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>), <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, <span class="hljs-literal">false</span>);
        ownedItems[<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>].<span class="hljs-built_in">push</span>(itemCount);
    }

    <span class="hljs-comment">/// @notice Allows a user to purchase an item</span>
    <span class="hljs-comment">/// @param _id The ID of the item to purchase</span>
    <span class="hljs-comment">/// @dev Transfers the item's price to the seller and updates ownership</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">purchaseItem</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _id</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> <span class="hljs-title"><span class="hljs-keyword">payable</span></span> </span>{
        Item <span class="hljs-keyword">storage</span> item <span class="hljs-operator">=</span> items[_id];
        <span class="hljs-built_in">require</span>(_id <span class="hljs-operator">></span> <span class="hljs-number">0</span> <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> _id <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> itemCount, <span class="hljs-string">"Item does not exist"</span>);
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> item.price, <span class="hljs-string">"Incorrect price"</span>);
        <span class="hljs-built_in">require</span>(<span class="hljs-operator">!</span>item.isSold, <span class="hljs-string">"Item already sold"</span>);
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span> <span class="hljs-operator">!</span><span class="hljs-operator">=</span> item.seller, <span class="hljs-string">"Seller cannot buy their own item"</span>);

        item.isSold <span class="hljs-operator">=</span> <span class="hljs-literal">true</span>;
        item.seller.<span class="hljs-built_in">transfer</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">value</span>);

        <span class="hljs-comment">// Transfer ownership</span>
        _transferOwnership(_id, item.seller, <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>);
    }

    <span class="hljs-comment">/// @notice Internal function to transfer ownership of an item</span>
    <span class="hljs-comment">/// @param _id The ID of the item</span>
    <span class="hljs-comment">/// @param _from The current owner's address</span>
    <span class="hljs-comment">/// @param _to The new owner's address</span>
    <span class="hljs-comment">/// @dev Updates the item's owner and adjusts the ownedItems mappings</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">_transferOwnership</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _id, <span class="hljs-keyword">address</span> _from, <span class="hljs-keyword">address</span> _to</span>) <span class="hljs-title"><span class="hljs-keyword">internal</span></span> </span>{
        Item <span class="hljs-keyword">storage</span> item <span class="hljs-operator">=</span> items[_id];
        item.owner <span class="hljs-operator">=</span> _to;

        <span class="hljs-comment">// Remove item from the previous owner's list</span>
        <span class="hljs-keyword">uint</span>[] <span class="hljs-keyword">storage</span> fromItems <span class="hljs-operator">=</span> ownedItems[_from];
        <span class="hljs-keyword">for</span> (<span class="hljs-keyword">uint</span> i <span class="hljs-operator">=</span> <span class="hljs-number">0</span>; i <span class="hljs-operator">&#x3C;</span> fromItems.<span class="hljs-built_in">length</span>; i<span class="hljs-operator">+</span><span class="hljs-operator">+</span>) {
            <span class="hljs-keyword">if</span> (fromItems[i] <span class="hljs-operator">=</span><span class="hljs-operator">=</span> _id) {
                fromItems[i] <span class="hljs-operator">=</span> fromItems[fromItems.<span class="hljs-built_in">length</span> <span class="hljs-operator">-</span> <span class="hljs-number">1</span>];
                fromItems.<span class="hljs-built_in">pop</span>();
                <span class="hljs-keyword">break</span>;
            }
        }

        <span class="hljs-comment">// Add item to the new owner's list</span>
        ownedItems[_to].<span class="hljs-built_in">push</span>(_id);
    }

    <span class="hljs-comment">/// @notice Allows the owner to transfer an item to another address</span>
    <span class="hljs-comment">/// @param _id The ID of the item to transfer</span>
    <span class="hljs-comment">/// @param _to The address of the recipient</span>
    <span class="hljs-comment">/// @dev Calls the internal _transferOwnership function</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">transferItem</span>(<span class="hljs-params"><span class="hljs-keyword">uint</span> _id, <span class="hljs-keyword">address</span> _to</span>) <span class="hljs-title"><span class="hljs-keyword">public</span></span> </span>{
        Item <span class="hljs-keyword">storage</span> item <span class="hljs-operator">=</span> items[_id];
        <span class="hljs-built_in">require</span>(_id <span class="hljs-operator">></span> <span class="hljs-number">0</span> <span class="hljs-operator">&#x26;</span><span class="hljs-operator">&#x26;</span> _id <span class="hljs-operator">&#x3C;</span><span class="hljs-operator">=</span> itemCount, <span class="hljs-string">"Item does not exist"</span>);
        <span class="hljs-built_in">require</span>(<span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span> <span class="hljs-operator">=</span><span class="hljs-operator">=</span> item.owner, <span class="hljs-string">"You do not own this item"</span>);

        _transferOwnership(_id, <span class="hljs-built_in">msg</span>.<span class="hljs-built_in">sender</span>, _to);
    }

    <span class="hljs-comment">/// @notice Retrieves all item IDs owned by a specific address</span>
    <span class="hljs-comment">/// @param _owner The address of the owner</span>
    <span class="hljs-comment">/// @return An array of item IDs owned by the specified address</span>
    <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getItemsByOwner</span>(<span class="hljs-params"><span class="hljs-keyword">address</span> _owner</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">uint</span>[] <span class="hljs-keyword">memory</span></span>) </span>{
        <span class="hljs-keyword">return</span> ownedItems[_owner];
    }
}
</code></pre><p>This contract provides a basic framework for a decentralized marketplace where users can list items for sale, purchase items, and transfer ownership of items. It maintains a record of item ownership and ensures that only valid transactions can occur. Let’s explore the concept of the smart contract a bit more:</p><ul><li><p><strong>Seller:</strong></p><ul><li><p><strong>Listing an Item:</strong></p><ul><li><p>Sellers can list items for sale by calling the listItem function.</p></li><li><p>This function requires a name and price for the item.</p></li><li><p>The item is added to the marketplace with a unique ID, and the seller is recorded as the owner.</p></li></ul></li></ul></li><li><p><strong>Buyer:</strong></p><ul><li><p><strong>Purchasing an Item:</strong></p></li><li><p>Buyers can purchase items using the purchaseItem function.</p></li><li><p>The function checks that the item exists, the price is correct, and that the item is not already sold.</p></li><li><p>The payment is transferred to the seller, and ownership of the item is updated.</p></li></ul></li><li><p><strong>Transferring Ownership:</strong></p><ul><li><p><strong>Ownership Transfer:</strong></p><ul><li><p>The _transferOwnership function handles the internal logic for transferring item ownership.</p></li><li><p>It updates the owner in the items mapping and adjusts the ownedItems lists for both the previous and new owners.</p></li></ul></li><li><p><strong>Manual Transfer:</strong></p><ul><li><p>The transferItem function allows current owners to transfer their items to another address.</p></li><li><p>It ensures the sender is the current owner before calling the _transferOwnership function.</p></li></ul></li></ul></li><li><p><strong>Retrieving Owned Items:</strong></p><ul><li><p><strong>Ownership Transfer:</strong></p><ul><li><p>The getItemsByOwner function returns a list of item IDs owned by a specific address.</p></li></ul></li></ul></li></ul><p>This smart contract facilitates a decentralized marketplace where items can be listed, purchased, and transferred securely, with all transactions and ownership changes recorded on the blockchain.</p><p>On the ignition folder let’s create Marketplace.ts to deploy our contract and add the following code:</p><pre data-type="codeBlock" text="import { buildModule } from &quot;@nomicfoundation/hardhat-ignition/modules&quot;;

const MarketplaceModule = buildModule(&quot;MarketplaceModule&quot;, (m) =&gt; {
  // Deploy the Marketplace contract
  const marketplace = m.contract(&quot;Marketplace&quot;);

  // Return the deployed contract instance
  return { marketplace };
});

export default MarketplaceModule;
"><code><span class="hljs-keyword">import</span> { buildModule } <span class="hljs-keyword">from</span> <span class="hljs-string">"@nomicfoundation/hardhat-ignition/modules"</span>;

<span class="hljs-keyword">const</span> <span class="hljs-title class_">MarketplaceModule</span> = <span class="hljs-title function_">buildModule</span>(<span class="hljs-string">"MarketplaceModule"</span>, <span class="hljs-function">(<span class="hljs-params">m</span>) =></span> {
  <span class="hljs-comment">// Deploy the Marketplace contract</span>
  <span class="hljs-keyword">const</span> marketplace = m.<span class="hljs-title function_">contract</span>(<span class="hljs-string">"Marketplace"</span>);

  <span class="hljs-comment">// Return the deployed contract instance</span>
  <span class="hljs-keyword">return</span> { marketplace };
});

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> <span class="hljs-title class_">MarketplaceModule</span>;
</code></pre><p><br>To compile the contract run the following command:</p><pre data-type="codeBlock" text="npx hardhat compiled
"><code></code></pre><h3 id="h-env-variables" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>.env Variables</strong></h3><p>Before deploying the smart contract, make sure to update the .env file in the packages/blockchain directory with the following values:</p><pre data-type="codeBlock" text="# Infura API key for connecting to Ethereum networks
INFURA_API_KEY=your_infura_api_key_here

# Private key of the account to be used for deployments and transactions
ACCOUNT_PRIVATE_KEY=your_account_private_key_here
"><code><span class="hljs-comment"># Infura API key for connecting to Ethereum networks</span>
<span class="hljs-attr">INFURA_API_KEY</span>=your_infura_api_key_here

<span class="hljs-comment"># Private key of the account to be used for deployments and transactions</span>
<span class="hljs-attr">ACCOUNT_PRIVATE_KEY</span>=your_account_private_key_here
</code></pre><h3 id="h-deploy-the-smart-contract" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Deploy the Smart Contract</strong></h3><p>To deploy the smart contract to the Linea testnet, run the following command:</p><pre data-type="codeBlock" text="npx hardhat ignition deploy ignition/modules/Marketplace.ts --network linea-testnet
"><code>npx hardhat ignition deploy ignition<span class="hljs-operator">/</span>modules<span class="hljs-operator">/</span>Marketplace.ts <span class="hljs-operator">-</span><span class="hljs-operator">-</span>network linea<span class="hljs-operator">-</span>testnet
</code></pre><p><br>This will deploy the marketplace smart contract on Linea Sepolia. You can always write a script to deploy quicker by writing small commands like this on package.json file:</p><pre data-type="codeBlock" text="&quot;deploy:testnet&quot;: &quot;npx hardhat ignition deploy ignition/modules/Marketplace.ts --network linea-testnet&quot;
"><code><span class="hljs-attr">"deploy:testnet"</span><span class="hljs-punctuation">:</span> <span class="hljs-string">"npx hardhat ignition deploy ignition/modules/Marketplace.ts --network linea-testnet"</span>
</code></pre><p><br>After the deployment we’ll get the contract address. Let’s keep that. We will need it soon while integrating with the frontend.</p><h2 id="h-frontend-nextjs-with-shadcn-ui" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Frontend: Next.js with Shadcn UI</strong></h2><h3 id="h-create-and-navigate-to-the-project-directory" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Create and Navigate to the Project Directory</strong></h3><pre data-type="codeBlock" text="mkdir site
cd site
"><code><span class="hljs-built_in">mkdir</span> site
<span class="hljs-built_in">cd</span> site
</code></pre><p><br>When prompted, choose the following options:</p><ul><li><p>TypeScript: Yes</p></li><li><p>ESLint: Yes</p></li><li><p>Tailwind CSS: Yes</p></li><li><p>src/ directory: No (or Yes, if you prefer)</p></li><li><p>App Router: Yes</p></li><li><p>Import alias: Yes (default @/*)</p></li></ul><h3 id="h-install-shadcn-ui-cli" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Install Shadcn UI CLI</strong></h3><pre data-type="codeBlock" text="npx shadcn-ui@latest init
"><code>npx shadcn-<span class="hljs-symbol">ui@</span>latest <span class="hljs-keyword">init</span>
</code></pre><p><br>Install the necessary UI components like button, card and input as needed.</p><p>We will create a wagmi.config.ts and add the following code:</p><pre data-type="codeBlock" text="import { http, createConfig } from &quot;wagmi&quot;;
import { lineaSepolia } from &quot;wagmi/chains&quot;;
import { metaMask } from &quot;wagmi/connectors&quot;;

export const config = createConfig({
  chains: [lineaSepolia],
  connectors: [metaMask()],
  transports: {
    [lineaSepolia.id]: http(),
  },
});
"><code><span class="hljs-keyword">import</span> { <span class="hljs-title">http</span>, <span class="hljs-title">createConfig</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"wagmi"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">lineaSepolia</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"wagmi/chains"</span>;
<span class="hljs-keyword">import</span> { <span class="hljs-title">metaMask</span> } <span class="hljs-title"><span class="hljs-keyword">from</span></span> <span class="hljs-string">"wagmi/connectors"</span>;

export const config <span class="hljs-operator">=</span> createConfig({
  chains: [lineaSepolia],
  connectors: [metaMask()],
  transports: {
    [lineaSepolia.id]: http(),
  },
});
</code></pre><p><br>We will be using wagmi and metamask sdk to connect our wallet and make transactions. Now all that is left is to create a ConnectWallet.tsx UI component.</p><p>In the site/src directory let’s create a file called constants.ts and add the following:</p><pre data-type="codeBlock" text="export const CONTRACT_ADDRESS = //paste deployed contract here
export const ABI = 
  // Paste the ABI here
"><code><span class="hljs-keyword">export</span> <span class="hljs-type">const</span> CONTRACT_ADDRESS = <span class="hljs-comment">//paste deployed contract here</span>
<span class="hljs-keyword">export</span> <span class="hljs-type">const</span> ABI = 
  <span class="hljs-comment">// Paste the ABI here</span>
</code></pre><p><br>Remember the deployed contract that we’ve saved earlier, we’ll add it here. Head over to blockchain/ignition module and find the artifacts folder to find the ABI.</p><p>Let’s break down the code app.tsx and explain its key aspects in more detail:</p><h2 id="h-react-and-hooks-usage" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>React and Hooks Usage</strong></h2><pre data-type="codeBlock" text="import { useState, useEffect } from &quot;react&quot;;
import { useAccount, useWalletClient } from &quot;wagmi&quot;;
"><code><span class="hljs-keyword">import</span> { useState, useEffect } <span class="hljs-keyword">from</span> <span class="hljs-string">"react"</span>;
<span class="hljs-keyword">import</span> { useAccount, useWalletClient } <span class="hljs-keyword">from</span> <span class="hljs-string">"wagmi"</span>;
</code></pre><ul><li><p>The component uses React&apos;s useState for local state management and useEffect for side effects.</p></li><li><p>It also uses custom hooks from wagmi (useAccount and useWalletClient) for blockchain wallet integration.</p></li></ul><h2 id="h-state-management" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>State Management</strong></h2><pre data-type="codeBlock" text="const [items, setItems] = useState&lt;any[]&gt;([]);
const [ownedItems, setOwnedItems] = useState&lt;any[]&gt;([]);
const [newItemName, setNewItemName] = useState(&quot;&quot;);
const [newItemPrice, setNewItemPrice] = useState(&quot;&quot;);
"><code>const <span class="hljs-section">[items, setItems]</span> = useState&#x3C;any<span class="hljs-section">[]</span>>(<span class="hljs-section">[]</span>)<span class="hljs-comment">;</span>
const <span class="hljs-section">[ownedItems, setOwnedItems]</span> = useState&#x3C;any<span class="hljs-section">[]</span>>(<span class="hljs-section">[]</span>)<span class="hljs-comment">;</span>
const <span class="hljs-section">[newItemName, setNewItemName]</span> = useState("")<span class="hljs-comment">;</span>
const <span class="hljs-section">[newItemPrice, setNewItemPrice]</span> = useState("")<span class="hljs-comment">;</span>
</code></pre><ul><li><p>Multiple state variables are defined to manage the component&apos;s data.</p></li><li><p>items and ownedItems are arrays to store marketplace items.</p></li><li><p>newItemName and newItemPrice are for form inputs when listing a new item.</p></li></ul><h2 id="h-useeffect-for-data-loading" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>useEffect for Data Loading</strong></h2><pre data-type="codeBlock" text="useEffect(() =&gt; {
  loadItems();
  loadOwnedItems();
}, []);
"><code><span class="hljs-built_in">useEffect</span>(() => {
  <span class="hljs-built_in">loadItems</span>();
  <span class="hljs-built_in">loadOwnedItems</span>();
}, <span class="hljs-selector-attr">[]</span>);
</code></pre><ul><li><p>This effect runs once when the component mounts.</p></li><li><p>It calls loadItems() and loadOwnedItems() to populate the state with data from the blockchain.</p></li></ul><h2 id="h-smart-contract-interaction" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Smart Contract Interaction</strong></h2><pre data-type="codeBlock" text="const loadItems = async () =&gt; {
  try {
    const itemCount = await client.readContract({
      address: CONTRACT_ADDRESS,
      abi: ABI_STRING_ARRAY,
      functionName: &quot;itemCount&quot;,
    });
    // ... (fetching individual items)
  } catch (error) {
    console.error(&quot;Error loading items:&quot;, error);
  }
};
"><code>const loadItems <span class="hljs-operator">=</span> async () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  <span class="hljs-keyword">try</span> {
    const itemCount <span class="hljs-operator">=</span> await client.readContract({
      <span class="hljs-keyword">address</span>: CONTRACT_ADDRESS,
      <span class="hljs-built_in">abi</span>: ABI_STRING_ARRAY,
      functionName: <span class="hljs-string">"itemCount"</span>,
    });
    <span class="hljs-comment">// ... (fetching individual items)</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 loading items:"</span>, <span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
  }
};
</code></pre><ul><li><p>This function reads data from the smart contract using client.readContract.</p></li><li><p>It first gets the total item count, then fetches details for each item.</p></li></ul><h2 id="h-writing-to-the-blockchain" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Writing to the Blockchain</strong></h2><pre data-type="codeBlock" text="const listItem = async () =&gt; {
  try {
    if (!walletClient) return;
    const { request } = await client.simulateContract({
      // ... contract call details
    });
    await walletClient.writeContract(request);
    loadItems();
  } catch (error) {
    console.error(&quot;Error listing item:&quot;, error);
  }
};
"><code>const listItem <span class="hljs-operator">=</span> async () <span class="hljs-operator">=</span><span class="hljs-operator">></span> {
  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">if</span> (<span class="hljs-operator">!</span>walletClient) <span class="hljs-keyword">return</span>;
    const { request } <span class="hljs-operator">=</span> await client.simulateContract({
      <span class="hljs-comment">// ... contract call details</span>
    });
    await walletClient.writeContract(request);
    loadItems();
  } <span class="hljs-keyword">catch</span> (<span class="hljs-function"><span class="hljs-keyword">error</span>) </span>{
    console.error(<span class="hljs-string">"Error listing item:"</span>, <span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
  }
};
</code></pre><ul><li><p>This function writes data to the blockchain (listing a new item).</p></li><li><p>It first simulates the contract call, then uses walletClient.writeContract to execute the transaction.</p></li></ul><h2 id="h-ui-components-and-styling" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>UI Components and Styling</strong></h2><pre data-type="codeBlock" text="&lt;Card className=&quot;p-4 sm:p-6&quot; key={index}&gt;
  &lt;li key={item.id} className=&quot; p-4&quot;&gt;
    &lt;p&gt;&lt;strong&gt;Name:&lt;/strong&gt; {item.name}&lt;/p&gt;
    {/* ... other item details */}
    &lt;Button
      variant=&quot;outline&quot;
      onClick={() =&gt; purchaseItem(item.id, item.price)}
      className=&quot;border-2 border-green-500 text-green-500 hover:bg-green-500 hover:text-white py-2 px-4 rounded  duration-200 hover:shadow-xl&quot;
    &gt;
      Purchase
    &lt;/Button&gt;
  &lt;/li&gt;
&lt;/Card&gt;
"><code><span class="hljs-operator">&#x3C;</span>Card className<span class="hljs-operator">=</span><span class="hljs-string">"p-4 sm:p-6"</span> key<span class="hljs-operator">=</span>{index}<span class="hljs-operator">></span>
  <span class="hljs-operator">&#x3C;</span>li key<span class="hljs-operator">=</span>{item.id} className<span class="hljs-operator">=</span><span class="hljs-string">" p-4"</span><span class="hljs-operator">></span>
    <span class="hljs-operator">&#x3C;</span>p<span class="hljs-operator">></span><span class="hljs-operator">&#x3C;</span>strong<span class="hljs-operator">></span>Name:<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>strong<span class="hljs-operator">></span> {item.<span class="hljs-built_in">name</span>}<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>p<span class="hljs-operator">></span>
    {<span class="hljs-comment">/* ... other item details */</span>}
    <span class="hljs-operator">&#x3C;</span>Button
      variant<span class="hljs-operator">=</span><span class="hljs-string">"outline"</span>
      onClick<span class="hljs-operator">=</span>{() <span class="hljs-operator">=</span><span class="hljs-operator">></span> purchaseItem(item.id, item.price)}
      className<span class="hljs-operator">=</span><span class="hljs-string">"border-2 border-green-500 text-green-500 hover:bg-green-500 hover:text-white py-2 px-4 rounded  duration-200 hover:shadow-xl"</span>
    <span class="hljs-operator">></span>
      Purchase
    <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>li<span class="hljs-operator">></span>
<span class="hljs-operator">&#x3C;</span><span class="hljs-operator">/</span>Card<span class="hljs-operator">></span>
</code></pre><ul><li><p>The component uses custom UI components like Card and Button.</p></li><li><p>Tailwind CSS classes are used for styling (className props).</p></li><li><p>Conditional rendering is used to show/hide the purchase button based on item status and ownership.</p></li></ul><h2 id="h-form-handling" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Form Handling</strong></h2><pre data-type="codeBlock" text="&lt;Input
  type=&quot;text&quot;
  placeholder=&quot;Item Name&quot;
  value={newItemName}
  onChange={(e) =&gt; setNewItemName(e.target.value)}
  className=&quot;border p-2 flex-1&quot;
/&gt;
"><code><span class="hljs-operator">&#x3C;</span>Input
  <span class="hljs-keyword">type</span><span class="hljs-operator">=</span><span class="hljs-string">"text"</span>
  placeholder<span class="hljs-operator">=</span><span class="hljs-string">"Item Name"</span>
  value<span class="hljs-operator">=</span>{newItemName}
  onChange<span class="hljs-operator">=</span>{(e) <span class="hljs-operator">=</span><span class="hljs-operator">></span> setNewItemName(e.target.<span class="hljs-built_in">value</span>)}
  className<span class="hljs-operator">=</span><span class="hljs-string">"border p-2 flex-1"</span>
<span class="hljs-operator">/</span><span class="hljs-operator">></span>
</code></pre><ul><li><p>Controlled inputs are used for the form fields.</p></li><li><p>The value and onChange props connect the input to the component&apos;s state.</p></li></ul><h2 id="h-error-handling" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Error Handling</strong></h2><pre data-type="codeBlock" text="try {
  // ... contract interaction
} catch (error) {
  console.error(&quot;Error loading items:&quot;, error);
}
"><code><span class="hljs-keyword">try</span> {
  <span class="hljs-comment">// ... contract interaction</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 loading items:"</span>, <span class="hljs-function"><span class="hljs-keyword">error</span>)</span>;
}
</code></pre><ul><li><p>Try-catch blocks are used throughout the code to handle potential errors in asynchronous operations, especially during blockchain interactions.</p></li></ul><p>The app.tsx can become quite large so we can also refactor the code insite/src/app/components/ directory.</p><pre data-type="codeBlock" text="/components
  - ListItem.tsx
  - AvailableItems.tsx
  - OwnedItems.tsx
/hooks
  - useItems.ts
"><code><span class="hljs-operator">/</span>components
  <span class="hljs-operator">-</span> ListItem.tsx
  <span class="hljs-operator">-</span> AvailableItems.tsx
  <span class="hljs-operator">-</span> OwnedItems.tsx
<span class="hljs-operator">/</span>hooks
  <span class="hljs-operator">-</span> useItems.ts
</code></pre><p>View the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/meowyx/web3-marketplace-linea/blob/code-refactor/packages/site/src/app/page.tsx">full code</a> here.</p><p>Also view the refactored code <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/meowyx/web3-marketplace-linea/tree/code-refactor/packages/site/src/app">here</a>.</p><p>This component demonstrates advanced React patterns, integration with blockchain technology, and modern UI practices. It showcases how to build a decentralized application frontend that interacts with a smart contract while providing a user-friendly interface.</p><h3 id="h-run-the-development-server" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0"><strong>Run the Development Server</strong></h3><pre data-type="codeBlock" text="npm run dev
"><code>npm run dev
</code></pre><p>Your Next.js application with Shadcn UI should now be running at <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://localhost:3000/">http://localhost:3000</a>.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/43a9dea9e45c4afb0a7bdaad3bed36c50cecc08f2f69436f092488cf101a8862.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>Now we should be able to list and item, buy, and transfer ownership. See the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://web3-marketplace-linea.vercel.app/">built live website here.</a></p><p>In this guide, we built a simple decentralized marketplace dapp on Linea, leveraging zkEVM technology for scalability and cost efficiency. We covered everything from setting up the environment to writing and deploying smart contracts, and integrating the frontend with Next.js and ShadcnUI.</p><p>As we continue to explore and expand on this foundational knowledge, consider the potential for further enhancements, such as integrating additional features or optimizing the user experience, bidding on items, and auctions.</p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/82a0c92eb253a0f18a158a4a4553ead0c591f17d041ade649509beca06f132cb.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Linea Prover: A Deep Dive]]></title>
            <link>https://paragraph.com/@linea-7/linea-prover-a-deep-dive</link>
            <guid>yuycbE28SCSlQLPZZvBJ</guid>
            <pubDate>Wed, 11 Sep 2024 19:29:28 GMT</pubDate>
            <description><![CDATA[Welcome to the incredible world of Linea Prover, a solution in blockchain technology that ensures data integrity and privacy through zero-knowledge proofs (ZKPs). The prover is the backbone of Linea, a Type 2 zkEVM that aims to maintain near-complete compatibility with existing Ethereum infrastructure while significantly improving transaction speed and reducing costs In this post, we will explore the complex components that make up Linea Prover, including arithmetization, Arcane, polynomial-I...]]></description>
            <content:encoded><![CDATA[<p>Welcome to the incredible world of Linea Prover, a solution in blockchain technology that ensures data integrity and privacy through zero-knowledge proofs (ZKPs). The prover is the backbone of Linea, a Type 2 zkEVM that aims to maintain near-complete compatibility with existing Ethereum infrastructure while significantly improving transaction speed and reducing costs</p><p>In this post, we will explore the complex components that make up Linea Prover, including arithmetization, Arcane, polynomial-IOPs, lattices, hash functions, error-correcting codes, and Vortex. Together, these elements create a secure, scalable, and efficient system that is revolutionizing the blockchain landscape.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/c70582c5196be49287a356103ae8138d9f23768c9bc05fc1e8fb1666ba95a6c0.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-the-journey-begins-arithmetization" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Journey Begins: Arithmetization</strong></h2><p>Our journey begins with arithmetization, a method that transforms complex computer programs into simple mathematical equations. Think of a virtual machine running a program and leaving a sequence of operations like footprints on a path. Arithmetization captures these sequences and converts them into mathematical problems, allowing the creation of proofs that can be confirmed without analyzing the entire computation.</p><p>Consider a virtual machine tasked with computing x 2^256. This seemingly daunting task is broken down into manageable steps: starting with x, squaring it to get x2, then x4, and so on, until reaching x 2^256. Each step is represented by an equation, ensuring the computation is executed correctly. This process is akin to following each step in a recipe precisely to achieve the desired outcome.</p><h2 id="h-arcane-and-polynomial-iops-simplifying-the-complex" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Arcane and Polynomial-IOPs: Simplifying the Complex</strong></h2><p>The process of arithmetization creates a statement with several equations and a potential solution, known as a trace. A trace is considered valid if it satisfies all the equations. Put simply, a valid trace shows that the EVM (Ethereum Virtual Machine) executed correctly.</p><p>Proving the execution of the EVM is the same as proving that &quot;the prover knows a valid trace&quot; for a specific block and state transition.</p><p>The proof system is built in several stages.</p><p>The first stage, called Arcane, creates a proof system that is only secure in an ideal, unrealistic setting where both the prover and the verifier communicate through a trusted third party known as the polynomial oracle.</p><p>You can think of the polynomial oracle as a trusted friend of both the prover and verifier. However, the oracle can only answer specific types of questions. The prover sends a polynomial to the oracle, who confirms to the verifier that they received it and provides the verifier with evaluations of the polynomial at chosen points. But the oracle doesn’t directly verify the arithmetization equations.</p><p>Arcane explains how to use the oracle’s limited power to convince the verifier that the equations hold true. It uses clever mathematical techniques involving polynomials to do this.</p><p>In the following stages, the oracle will be replaced with cryptographic protocols, such as polynomial commitments, to make the proof.</p><h2 id="h-lattices-and-hash-functions-the-guardians-of-security" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Lattices and Hash Functions: The Guardians of Security</strong></h2><p>Lattice cryptography is a foundational area of post-quantum cryptography, with roots dating back to the 1990s and continued advancements, including recent standardizations in the NIST PQC competition. In Linea, lattices play a crucial role through a hash function built on the Short Integer Solution (SIS) problem. This SIS-based hash function is a core component of the polynomial commitment scheme, Vortex, which powers Linea&apos;s prover.</p><p>This approach has several key advantages:</p><ol><li><p>It is highly optimized for recursion, making it an efficient choice in proof systems.</p></li><li><p>It is extremely fast, achieving speeds up to 2.7GB/sec.</p></li><li><p>It leverages decades of research into the security of SIS, ensuring strong cryptographic guarantees.</p></li><li><p>It is post-quantum secure, making it future-proof against quantum attacks.</p></li></ol><p>Lattice-based cryptography, therefore, is not only a strong solution for Linea&apos;s cryptographic needs but also a key element in ensuring the security and efficiency of the Vortex polynomial commitment. As the dimensions of a lattice increase, finding the shortest vector becomes exponentially harder, making lattice-based cryptography critical against attacks.</p><p>Lattice-based hashing is significant due to its speed compared to traditional elliptic curve cryptography, as well as its optimization for recursion. Additionally, it has the potential to resist quantum computing attacks, making it a future-proof option. Hash functions enhance security by transforming data into a consistent and irreversible form. When paired with lattices, they establish a solid cryptographic foundation that is both fast to compute and resistant to threats.</p><h2 id="h-error-correcting-codes-keeping-data-intact" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Error-Correcting Codes: Keeping Data Intact</strong></h2><p>Error-correcting codes are crucial for ensuring data accuracy, particularly during transmission. Reed-Solomon codes, a robust error-correction technique, encode data as a polynomial and utilize specific points on this polynomial to encode the message. Even if some points are corrupted, the original message can be reconstructed by recovering the polynomial, similar to piecing together a puzzle with some missing pieces.</p><h2 id="h-vortex-finalizing-the-proof" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>Vortex: Finalizing the Proof</strong></h2><p>Vortex is Linea’s in-house polynomial commitment scheme and forms the final part of the proof system. The purpose of a polynomial commitment scheme is to replace the polynomial oracle used earlier in the proof system. Essentially, it allows a prover to commit to a polynomial (like a secure hash) in such a way that the prover cannot alter it afterward. The verifier can then request evaluations of this committed polynomial at specific points to ensure the integrity of the proof.</p><p>In Linea, Vortex is built on error-correcting codes and lattice-based hash functions. While Vortex greatly speeds up the verification process compared to traditional methods, it doesn’t yet achieve fully succinct verifier time. Verifying Vortex proofs on-chain, especially on blockchains like Ethereum, remains resource-intensive.</p><p>To overcome this challenge, Linea employs a technique called &quot;self-recursion.&quot; In this method, the prover generates a new proof that the verifier has successfully verified a previous Vortex proof. Each recursive proof is smaller and faster to verify than the original, and the process is repeated until further compression is no longer possible.</p><p>Finally, the prover wraps the compressed Vortex proof in a Plonk proof for an additional layer of optimization. This final compression step is key to ensuring that the proof is both small and quick to verify, making it highly efficient for use on-chain, particularly on Ethereum’s main network.</p><h2 id="h-the-future-of-secure-transactions" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>The Future of Secure Transactions</strong></h2><p>The Linea Prover demonstrates the power of cryptography in ensuring secure, efficient, and private blockchain transactions. It achieves this by converting computational operations into mathematical equations, simplifying them with Arcane, verifying them with Polynomial-IOPs, securing them with lattices and hash functions, protecting them with error-correcting codes, and optimizing them with Vortex. The Linea Prover provides a strong solution for privacy-preserving verification on blockchain platforms. As blockchain technology progresses, innovations like the Linea Prover pave the way for more secure and private decentralized systems. This ensures that the concept of zero-knowledge proofs continues to revolutionize the digital landscape.</p><p><em>Stay tuned and subscribe to </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://mirror.xyz/0x85dFd08B58F97Dfed4c17ce36a1c9c531682502e/subscribe"><em>Linea on Mirror</em></a><em> for more in-depth coverage.</em></p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/8719b716751486cbb1e44ce42b8081f536f75bfeffe5f48834a5397440003fe3.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[The Linea Guild Games Are Coming! Compete for Over $250,000 in Prizes]]></title>
            <link>https://paragraph.com/@linea-7/the-linea-guild-games-are-coming-compete-for-over-250-000-in-prizes</link>
            <guid>NtMRSyfWoIOiDNCLu8Fv</guid>
            <pubDate>Tue, 10 Sep 2024 18:24:20 GMT</pubDate>
            <description><![CDATA[Welcome to the Linea Guild Games (LGG)! Throughout Culture SZN in July, Lineans voted for their favorite web3 communities on Linea. In the end, five winners emerged, crowned as the first ever Linea Guilds. Now, four of these projects are going head-to-head as guilds in a gaming and community-first experience. The nine-day challenge kicks off on September 18. Players will choose to join one of the four guilds and mint a companion to your Game7 avatar. This fox, penguin, or frog will serve as a...]]></description>
            <content:encoded><![CDATA[<p>Welcome to the <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://">Linea Guild Games</a> (LGG)! Throughout <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://linea.mirror.xyz/JkntqjY2bHkbD8HkpWDSFNTsyWcBFqmDbrTjrd-2mhQ%5C">Culture SZN in July</a>, Lineans voted for their favorite web3 communities on Linea. In the end, five winners emerged, crowned as the first ever Linea Guilds. Now, four of these projects  are going head-to-head as guilds in a gaming and community-first experience.</p><p>The nine-day challenge kicks off on September 18. Players will choose to join one of the four guilds and mint a companion to your Game7 avatar. This fox, penguin, or frog will serve as an entry ticket to the game. Players and their guild play the Unfettered Awakening, competing for a prize pool of $100,000 in ETH from Linea, plus $150k in additional prizes provided by LGG’s gaming and meme partners. Individuals will receive daily rewards from this prize pool and the winning guild will receive a pot of $ETH to be spent and shared as a community.</p><p>LGG is not an LXP event. Yes, you read that right. We heard you and listened. It&apos;s just gaming for fun, you know, like the old days. Meet new friends, play online, and win together!</p><p>Here’s everything you need to know about the Linea Guild Games.</p><h2 id="h-meet-our-partners" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Meet Our Partners</h2><p>The Linea Guild games are made possible through collaboration from top gaming builders on Linea.</p><h3 id="h-the-unfettered" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">The Unfettered</h3><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.theunfettered.io/">The Unfettered</a> Awakening is a zombie killing game live on HyperPlay and deployed exclusively on Linea. The Unfettered was chosen as the first LGG partner because of its Linea-only gamefi ecosystem and the positive feedback we received from the Linea community around their gameplay. The Unfettered has an exciting roadmap of upcoming games exclusively on Linea, and LGG is just an introduction.</p><h3 id="h-hyperplay" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Hyperplay</h3><p>The web3 native game launcher and marketplace will create our gaming repository for the Linea Guild Games and launch infrastructure. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://www.hyperplay.xyz/">HyperPlay</a> already features over 90 web3 games and features current MetaMask standards. HypePlay’s proven infrastructure and standards, strong user base and trusted name make them an ideal partner of the Games. Hyperplay will be launching its in-browser capabilities, giving gamers the best experience during LGG!</p><h3 id="h-game7-summon-platform" class="text-2xl font-header !mt-6 !mb-4 first:!mt-0 first:!mb-0">Game7 Summon Platform</h3><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://app.game7.io/">Game7</a> operates a gaming-native, questing platform, and LGG will be featured on its new Lootdrop system. Users will mint an avatar, then mint a companion based on their guild selection. These furry friends will remain with you beyond Linea Guild Games so you can continue to enjoy them after the tournament!</p><h2 id="h-choose-your-fighter" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Choose Your Fighter</h2><p>For the Linea Guild Games, you can choose to join one of four NFT/meme communities on Linea. Choose your Guild wisely! You will be playing alongside each other to win the grand prize together.</p><ul><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/efrogs_on_linea"><strong>Efrogs:</strong></a> The cute, sunshine-on-my shoulder guild! Croak believes in living life on his own cute terms, unbound by conventions. He always wears a smile and spreads good vibes wherever he goes. Croak embraces the present moment, appreciating the simple pleasures in life, like a perfect wave or a sunset. If you are up for a good time, some surfing before sunrise, and embracing the cute energies of life—Croak is your guild.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/FoxyLinea">Foxy:</a> The bold, risk taking adventurous guild. Foxy is a rule breaker, innovator and adventurous maverick. He sees the potential in everything and everyone and is always willing to help, in style. Just like Crypto did for the world, Foxy is here to blaze a new path forward for memes. Beat the odds and look good while doing it. Win as a community, a fox is only as strong as its den. If you’re a trailblazer, this guild is for you.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/frogwifcat">FrogwifCat</a>: The weird, slightly crazy, counterculture guild. $WEF is meme culture all the way. Your parents won’t understand this and probably shake their heads. This is about wack, out-there fun, weird humor. From spongebob, over Lord of the Rings to the Ninja Turtles, no cliche is too big for this guild. If you love new age meme stuff, have a wack sense of humor and enjoy colorful deranged culture, this guild is for you.</p></li><li><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="http://">Linus Guild:</a> The cynical, sharp-witted, tech savvy guild. Linus is a laid-back, slightly cynical, yet sharp-witted penguin. He’s a tech-savvy blockchain, crypto, and gaming enthusiast. He enjoys downtime, possibly indulging in a smoke, and takes life at his own pace. He dislikes the establishment and all conventions. Join the Linus Guild to take things easy and do things your way. Things will fall in place.</p></li></ul><h2 id="h-assets-and-prizes" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Assets and Prizes</h2><p>Here’s an overview of all the assets and prizes being deployed during the Linea Guild Games:</p><ul><li><p>$100,000 in ETH from Linea.</p></li><li><p>$200,000 $SOULS  tokens throughout the game.</p></li><li><p>Up to $50,000 in $FOXY.</p></li><li><p>$5,000 in $CROAK</p></li><li><p>Up to $1,000 in WEF</p></li><li><p>Two in-game utility NFTs; avatar and companion.</p></li><li><p>“Awakening” in-game rewards.</p></li><li><p>In-game items including treasure chests, buffs, boosts, SVPs, and tickets.</p></li><li><p>Game7 credits, earned for completing daily quests and play streaks.</p></li></ul><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/LineaBuild?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor"><em>Follow Linea on X</em></a><em> for updates and get ready to kill some zombies!</em></p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/c0a71b36bce00d436d77a499d2c21e81bb6f062796b2d49b002a9241f0fab3b5.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[CCIP Read On Linea: Use Cases For Web3 Cross-Chain Communication]]></title>
            <link>https://paragraph.com/@linea-7/ccip-read-on-linea-use-cases-for-web3-cross-chain-communication</link>
            <guid>A3chuw5jYTWWILAwOoQx</guid>
            <pubDate>Thu, 29 Aug 2024 19:15:39 GMT</pubDate>
            <description><![CDATA[On July 30th, ENS domains launched on Linea, allowing users to begin switching their 42 character Ethereum wallet addresses to a human-readable domain. In this web3 industry-first, Linea became the first zkEVM Layer 2 to adopt the EIP-3668 standard in production. So far, 350K Lineans have registered and adopted ENS domains, with the majority of users coming from Linea’s PoH audience.Ethereum Name Services (ENS) is a decentralized protocol, governed by ENS DAO and relying on immutable and tran...]]></description>
            <content:encoded><![CDATA[<p>On July 30th, ENS domains <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://names.linea.build/">launched on Linea</a>, allowing users to begin switching their 42 character Ethereum wallet addresses to a human-readable domain. In this web3 industry-first, Linea became the first zkEVM Layer 2 to adopt the EIP-3668 standard in production. So far, <strong>350K</strong> Lineans have registered and adopted ENS domains, with the majority of users coming from Linea’s PoH audience.</p><figure float="none" data-type="figure" class="img-center" style="max-width: null;"><img src="https://storage.googleapis.com/papyrus_images/81528ef1f74cc0046c2b26421425b3908720d86d944c79f39b9aac258e63d4a8.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>Ethereum Name Services (ENS) is a decentralized protocol, governed by ENS DAO and relying on immutable and transparent smart contracts to translate names to addresses. ENS improves user experience, reduces the likelihood of transaction errors, increases accessibility, and establishes a new forum for decentralized digital identities.</p><p>While the Linea ENS repository was created to bring ENS to Linea, its component libraries can be applied in other contexts. The functionality of these associated components enables any L1 application to query L2 data using CCIP Read (ERC-3668), equipping developers for cross-chain retrieval.</p><p>As <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/VitalikButerin/status/1826500707005890796">vocalized by Vitalik Buterin</a>, standardization across chain-specific addresses, chain-specific ENS, and CCIP Read light clients is a next frontier for the ecosystem. Combined, these solutions can address difficulties that arrise when moving funds between chains, whether due to inconsistent address formats, limited interoperability, or manual processes.</p><p>As one of the drivers of this new paradigm, we take a look at ERC-3668 and potential use cases for dapps and developers on Linea.</p><p>CCIP Read (Cross-chain Interoperability Protocol) is a protocol that allows applications to access cross-chain or offchain data via a gateway server.</p><p>ENS uses CCIP Read to resolve domains on Ethereum, even if the relevant data and records are stored on an L2 chain, through an off-chain resolver framework. This process is trust-minimal, as the gateway provides a storage proof that can be verified on L1, ensuring protection against intervention or tampering.</p><p>Linea adapted the functionality of the relevant ENS contract so that it would function correctly with Linea. The <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://github.com/Consensys/linea-ens">Linea ENS repository</a>, therefore, adds support for CCIP Read to Linea. The repository contains a frontend and associated contracts for ENS to work on Linea, including functionality that enables any L1 application to query L2 data using CCIP Read.</p><p>The two main components are the Linea CCIP Gateway, which implements the gateway required for L1 protocols to query data on Linea, and the Linea State Verifier, which verifies the state proofs generated by the gateway. <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.linea.build/developers/tooling/cross-chain/ccip-read-gateway#linea-ens">Learn more</a> about how CCIP Read works on Linea Docs.</p><h2 id="h-ccip-read-use-cases" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0"><strong>CCIP Read Use Cases</strong></h2><p>Linea ENS domains are just one use case stemming from the Linea ENS repository. CCIP Read is beneficial in any scenario where it&apos;s advantageous to store data on L2. This opens up applications and use cases aligned with parallel innovations across the Ethereum ecosystem.</p><p>These proposals across Ethereum are gearing the ecosystem up for new standards for data retrieval. ERC-7683, proposed by Uniswap Labs and Across Protocol, aims to create a unified framework for cross-chain intents, improving interoperability between networks. ERC-3770, meanwhile, introduces a standardized address format with a chain identifier, clarifying the specific blockchain network an address belongs to and minimizing the risk of sending funds to the incorrect chain.</p><p>Combined with CCIP Read (ERC-3668), these protocols would effectively automatically support light clients for compliant L2 blockchains, without wallets having to make any additional configurations.</p><p>As one (important) step toward this convergence of protocols, CCIP Read already brings a range of potential use cases and integrations for dapps on Linea. Users on L1 can read data from Linea and &quot;outsource&quot; costly operations to Linea, retrieving only the results, with Linea functioning effectively like a coprocessor, but fully onchain:</p><ul><li><p><strong>Determine eligibility for NFT mints or governance voting:</strong> The library enables L1 applications to create allowlists using cross-chain Verax attestations to determine eligibility for NFT mints, governance voting, or other permissioned actions like accessing a regulated DEX pool based on Proof of KYC or receiving special offers for specific user groups.</p></li><li><p><strong>Execute L1 transactions based on DAO votes stored on Linea:</strong> This mechanism allows L1 transactions to be executed depending on the outcomes of DAO votes stored on Linea.</p></li><li><p><strong>Enable ENS subname transfers with NFT sales:</strong> This would allow for the attachment of an ENS identifier to an NFT and the association of an onchain subname with your PFP. When the NFT is sold, the associated ENS subname would also be transferred.</p></li><li><p><strong>Enable self-service subname creation on Linea:</strong> This would allow anyone to launch their own subnames on Linea, with forthcoming documentation to standardize the process, eliminating the need for bespoke handling.</p></li></ul><p><em>Head to </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://docs.linea.build/developers/tooling/cross-chain/ccip-read-gateway"><em>Linea Docs</em></a><em> to learn more about CCIP Read and the Linea ENS repository.</em></p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/d4cc802d1766a77153edec2bd37d95e34175e9dd1607a9f50d94444e00ab75cc.png" length="0" type="image/png"/>
        </item>
        <item>
            <title><![CDATA[Reimagining Liquid Restaking With Zypher and Affine]]></title>
            <link>https://paragraph.com/@linea-7/reimagining-liquid-restaking-with-zypher-and-affine</link>
            <guid>5VDYlxvb6Wqqsg6L6fm8</guid>
            <pubDate>Wed, 28 Aug 2024 23:47:44 GMT</pubDate>
            <description><![CDATA[As Ethereum continues to grow, staking is crucial to enhancing blockchain scalability, fortifying DeFi through liquidity, and fostering cross-chain innovation in web3. Traditionally, staking on Ethereum means your ETH is locked up. While it’s playing an important role enhancing scalability and security, you can’t do much else with it. But like web3 at large, this model has evolved. EigenLayer, introduced on Ethereum in June 2023, has addressed some of these limitations by introducing restakin...]]></description>
            <content:encoded><![CDATA[<p>As Ethereum continues to grow, staking is crucial to enhancing blockchain scalability, fortifying DeFi through liquidity, and fostering cross-chain innovation in web3. Traditionally, staking on Ethereum means your ETH is locked up. While it’s playing an important role enhancing scalability and security, you can’t do much else with it.</p><p>But like web3 at large, this model has evolved. EigenLayer, introduced on Ethereum in June 2023, has addressed some of these limitations by introducing restaking across different networks and protocols. Liquid Restaking Tokens (LRTs) are integral to this staking ecosystem, setting themselves apart from Liquid Staking Tokens (LSTs) by introducing the selection of Active Validator Sets (AVSs).</p><p>“LRTs connect AVSs, operators, and restakers. They play a critical role not only in risk management but also in ensuring that AVSs are successful, which is crucial for a thriving restaking environment,” explains Fahim Aziz, Co-Founder at Affine, a liquid restaking dapp.</p><p>This liquid restaking means that staked assets gain increased flexibility within the DeFi ecosystem and can be used across different dapps. They can serve as collateral for lending, enhance security in different layer 2 (L2) setups, or engage in various consensus mechanisms.</p><p>“LRTs are crucial because they offer a unique blend of flexibility and efficiency within. By enabling staked assets to remain liquid, LRTs allow users to leverage these assets across various dapps without having to unstake them,” says Maggie Wang, COO of Zypher Network, an assets protocol for ZK verifiable games, incorporating LRTs into its ecosystem. “In any financial system, liquidity is king.”</p><p>Decentralized applications are continuing to adopt and innovate when it comes to liquid restaking tokens (LRTs). Here, Linea spoke to two dapps, Affine and Zypher, who are reimagining liquid restaking.</p><h2 id="h-zypher-incorporating-lrts-in-web3-gaming" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Zypher: Incorporating LRTs in Web3 Gaming</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zypher.game/">Zypher Network</a> is an assets protocol for ZK verifiable games, secured by a decentralized proof-mining network that creates a new paradigm of trustless games for both developers and gamers. They’re the team behind popular onchain games like Crypto Rumble.</p><p>“It all started with a fully onchain poker game,” shares <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/0x_maggie?lang=en">Maggie Wang</a>, Zypher Network’s COO, on Zypher’s inceptions. “The trend towards ZK becoming more prevalent was clear—with better cost efficiency, democratized accessibility, and improved usability. Neo Sun (now Zypher CEO) and I naturally thought of experimenting with a few games.”</p><p>While Zypher’s initial Hold’em game was a success as a demo, the game was impractical for production due to high gas costs and the EVM&apos;s limitations for complex verification operations. In response, the team focused on infrastructure improvements, and later deployed a fully onchain Bingo game when Linea launched its Mainnet. Now, a year later, Zypher is introducing a Layer 3 on Linea, called <a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://zytron.zypher.network/">Zytron</a>, providing a gasless environment optimized for running zk-based game SDKs.</p><p>Serving 3 billion players around the world, Zypher envisions itself to be the infrastructure for truly decentralized games, where assets are fully composable &amp; interoperable, enabling permissionless modding and open economy.</p><p>As Wang explains, this vision means Zypher’s core principles and infrastructure rely on verifiable and transparent asset policies, making it akin to DeFi. “In order to build a scalable and interoperable gaming ecosystem, LRTs play a key role in boot strapping this ecosystem,” says Wang.</p><p>The Zypher proof mining network utilizes a mix of Proof of Stake and Proof of Work mechanisms with LRT as a staking token, enhancing the reliability and security of the network. Additionally, the Zytron Layer 3 Network is moving towards decentralizing its sequencers, which will accept LRT tokens as staking collateral. Lastly, Zytron will accept LRT tokens in exchange for gaming tokens, functioning similarly to a decentralized gaming guild that operates automatically, injecting liquidity and value into the gaming economy.</p><p>“By incorporating liquid restaking, we enable users to maximize their asset usage across different parts of the ecosystem while maintaining the integrity and transparency that are critical in web3 gaming,” explains Wang.</p><p>Zypher is beginning to roll out Zytron, a highly customizable L3 rollup stack, and is in the integration process with 20 games and 10 dapps live at launch. “Zytron provides smart-contract-level optimizations like zero gas, wallet abstraction, and chain abstraction,” adds Wang. To participate, gamers can stake LRT tokens in exchange for a gasless SBT for gas redemption eligibility.</p><h2 id="h-affine-prioritizing-risk-assessment-for-defi" class="text-3xl font-header !mt-8 !mb-4 first:!mt-0 first:!mb-0">Affine: Prioritizing Risk Assessment for DeFi</h2><p><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://restaking.affinedefi.com/">Affine</a> has set out to build a robust DeFi future, introducing the Affine Risk Engine and two LRTs–one on EigenLayer and one symbiotic–built on top of it.</p><p>“My co-founder, Tarik and I were excited about the potential of restaking but also saw the inherent risks in using the same capital to secure networks with varying levels of risk. A cascading slashing event could be catastrophic for the entire industry, much like the 2008 housing crash,” recalls Fahim Aziz, Affine’s co-founder, on the initial building stages.</p><p>This market awareness led Affine to develop a risk engine first, built on a Bayesian model that receives inputs from various operators and AVS factors to generate a credit score and a slashing risk audit report.</p><p>The risk engine sits at the core of Affine’s restaking. “We believe it’s crucial to manage the risk of rehypothecation so that the industry can grow and progress in a risk-adjusted manner,” says Aziz. Affine also prioritizes smart contract and dapp security through a range of measures, including audits and innovative AVS solutions like Drosera, which involves setting traps to enhance security.</p><p>Affine’s LRT, ultraETH, was launched in July 2024 and has recently landed on Linea. UltraETH offers transparent risk management that reduces the chance of cascading slashing as AVSs go live.  It also provides clear rewards through ultraETH, Symbiotic/Eigenlayer points, undiluted AVS points, and various incentives from chains and protocols.</p><p>“Restaking has incredible potential, and we need to work hard to make it robust. We are collaborating with top operators, AVSs, and chains, and many exciting partnerships will be announced soon,” adds Aziz.</p><p>-</p><p><em>Follow </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/Zypher_Network"><em>Zypher</em></a><em> and </em><a target="_blank" rel="noopener noreferrer nofollow ugc" class="dont-break-out" href="https://x.com/AffineDeFi"><em>Affine</em></a><em> to keep up to date on new launches.</em></p>]]></content:encoded>
            <author>linea-7@newsletter.paragraph.com (Linea )</author>
            <enclosure url="https://storage.googleapis.com/papyrus_images/7a2080faa96163f50b5b196ebf03d368f6740cdba2766570c9b2ffff681f5615.png" length="0" type="image/png"/>
        </item>
    </channel>
</rss>