<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Adetayo Lasisi</title>
    <description>The latest articles on Forem by Adetayo Lasisi (@babalasisi).</description>
    <link>https://forem.com/babalasisi</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F263603%2F2002c08e-1d22-4c50-bf26-807dc4703f06.jpg</url>
      <title>Forem: Adetayo Lasisi</title>
      <link>https://forem.com/babalasisi</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/babalasisi"/>
    <language>en</language>
    <item>
      <title>createthings — A Creative System Built on Notion MCP</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Sun, 29 Mar 2026 15:38:42 +0000</pubDate>
      <link>https://forem.com/babalasisi/createthings-a-creative-system-built-on-notion-mcp-a0k</link>
      <guid>https://forem.com/babalasisi/createthings-a-creative-system-built-on-notion-mcp-a0k</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/notion-2026-03-04"&gt;Notion MCP Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;There is a folder on almost every creative's computer.&lt;/p&gt;

&lt;p&gt;Sometimes it is a bookmark list. Sometimes it is a Pinterest board, a Notion page, a camera roll full of screenshots, or a browser tab that has been open for six weeks. The contents are always the same: things they loved when they found them and have not touched since. Landing pages to be studied. Threads that made them stop scrolling. Interfaces they meant to reverse-engineer. Designs they were going to recreate on the weekend.&lt;/p&gt;

&lt;p&gt;The weekend never comes.&lt;/p&gt;

&lt;p&gt;I built createthings because I got tired of my own inspiration graveyards.&lt;/p&gt;

&lt;p&gt;Also, the more I talked to designers, developers, and content creators, who are my friends and colleagues, the more I realized the graveyard was not the core problem. The core problem was that saving something and acting on it had no connection. There was no bridge between the moment of being inspired and the moment of doing something about it. No thread between the thing that excited you and the work that came out of it. No record of the journey from one to the other.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;createthings is a creative system for designers, developers, and content creators. It lives across two surfaces: a browser extension that captures inspiration from anywhere on the web, and a web app where that inspiration gets analyzed, understood, acted on, and shared with the world.&lt;/p&gt;

&lt;p&gt;The core loop is straightforward to describe:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Capture&lt;/strong&gt; what excites you — a screenshot, a URL, an uploaded image, or even a typed note when the inspiration is more feeling than visual. &lt;strong&gt;Analyze&lt;/strong&gt; it with AI — not just what it looks like but what makes it work, what you can learn from it, what skills it requires. &lt;strong&gt;Think&lt;/strong&gt; through your process in a creative journal tied to every project. &lt;strong&gt;Create&lt;/strong&gt; your own version with an AI-generated brief as your starting point. &lt;strong&gt;Publish&lt;/strong&gt; it to your connected social platforms directly from the app with platform-specific captions and proper credit to the original creator. &lt;strong&gt;Share&lt;/strong&gt; your full creative journey via an auto-generated public portfolio page.&lt;/p&gt;

&lt;p&gt;Notion is the backbone of all of it.&lt;/p&gt;

&lt;p&gt;I made a deliberate decision early in the build. I did not want Notion to be a sync target or a convenient place to dump data. I wanted it to be the actual brain of the system, the place where everything lives, where the AI pipeline is triggered, where results are written, where the publish queue is managed, and where the portfolio reads from. Every piece of inspiration lives in Notion. &lt;/p&gt;

&lt;h2&gt;
  
  
  Video Demo
&lt;/h2&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/rvqgqjJnLOo"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

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

&lt;h2&gt;
  
  
  The code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adetyaz" rel="noopener noreferrer"&gt;
        adetyaz
      &lt;/a&gt; / &lt;a href="https://github.com/adetyaz/create-things" rel="noopener noreferrer"&gt;
        create-things
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;createthings — A Creative OS Built on Notion MCP&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/notion-2026-03-04" rel="nofollow"&gt;Notion MCP Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Developing&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm install
npm run dev&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Copy &lt;code&gt;.env.example&lt;/code&gt; to &lt;code&gt;.env&lt;/code&gt; and fill in:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;NOTION_CLIENT_ID&lt;/code&gt; + &lt;code&gt;NOTION_CLIENT_SECRET&lt;/code&gt; + &lt;code&gt;NOTION_REDIRECT_URI&lt;/code&gt; — Notion OAuth app&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GEMINI_API_KEY&lt;/code&gt; — Google AI Studio&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;GROQ_API_KEY&lt;/code&gt; — Groq console&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;OPENROUTER_API_KEY&lt;/code&gt; — OpenRouter (free-tier vision fallback)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;PUBLIC_UPLOADCARE_PUBLIC_KEY&lt;/code&gt; + &lt;code&gt;PUBLIC_UPLOADCARE_CDN_BASE&lt;/code&gt; — Uploadcare dashboard&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;WEBHOOK_SECRET&lt;/code&gt; — any random string, must match what you set in the Notion automation&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;FIGMA_ACCESS_TOKEN&lt;/code&gt; — Figma personal access token (optional)&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Building&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm run build
npm run preview&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;There is a folder on almost every creative's computer.&lt;/p&gt;
&lt;p&gt;Sometimes it is a bookmark list. Sometimes it is a Pinterest board, a Notion page, a camera roll full of screenshots, a browser tab that has been open for six weeks. The contents are always the same: things they loved when they found them and have not touched since. Landing pages they…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adetyaz/create-things" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;&lt;strong&gt;Disclaimer&lt;/strong&gt;&lt;br&gt;
The web extension hasn't been approved by the Chrome Web Store, but I have the build available for testing &lt;a href="https://drive.google.com/file/d/1TLO2sK8tvPM7EKlWBYX7w3wWMMBz95b_/view?usp=sharing" rel="noopener noreferrer"&gt;here&lt;/a&gt;👈🏿 &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installaion&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open the browser and go to &lt;code&gt;chrome://extensions&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Enable Developer mode (toggle in the top-right)&lt;/li&gt;
&lt;li&gt;Click Load unpacked&lt;/li&gt;
&lt;li&gt;Select your extension's folder &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who It Is For
&lt;/h2&gt;

&lt;p&gt;createthings is built for three types of creators, and the experience adapts to each:&lt;/p&gt;

&lt;p&gt;Designers can get a color palette extraction, typography identification, layout and composition breakdown, component analysis, and a Figma export that sends any captured screenshot directly to their Figma workspace as a named frame.&lt;/p&gt;

&lt;p&gt;Developers get UI architecture hints, pattern recognition, likely tech stack indicators, and component structure breakdown, the things you want to know when you see an interface you admire and want to understand how it was built.&lt;/p&gt;

&lt;p&gt;Content creators get hook analysis, tone breakdown, narrative structure identification, and an explanation of why a piece likely performed well — the things that turn a saved post into a teachable moment.&lt;/p&gt;

&lt;p&gt;These three types of creators serve as the starting point, as i still intend to expand to different types of creatives, allowing it to be useful to everyone and anyone&lt;/p&gt;

&lt;h3&gt;
  
  
  The Feature Set
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Browser extension&lt;/td&gt;
&lt;td&gt;Captures via URL, screenshot (full page or selected area), image upload, URL paste, or typed note&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AI analysis&lt;/td&gt;
&lt;td&gt;Visual and content breakdown — colors, typography, layout, mood, components, attribution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning roadmap&lt;/td&gt;
&lt;td&gt;AI-generated skill path from the analysis — what you need to learn to build something like this&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Creative journal&lt;/td&gt;
&lt;td&gt;Per-project thought space with AI reflection prompts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publish queue&lt;/td&gt;
&lt;td&gt;Platform-specific captions drafted by AI — direct share to Twitter/X, LinkedIn, Reddit; one-click copy for Instagram&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Remix tagging&lt;/td&gt;
&lt;td&gt;Inspired by / Remixed from / Recreated — ethical attribution built into every publish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Figma export&lt;/td&gt;
&lt;td&gt;Sends captured screenshots to Figma as named frames&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Portfolio page&lt;/td&gt;
&lt;td&gt;Auto-generated public page from Notion data, shareable via single link&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Stale reminders&lt;/td&gt;
&lt;td&gt;Smart nudges for inspiration that has been sitting untouched past a threshold&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Weekly digest&lt;/td&gt;
&lt;td&gt;Summary of what was saved, created, published, and learned&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  The Technical Architecture
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Stack&lt;/strong&gt;: SvelteKit + Svelte 5 (web app + API), Manifest V3 browser extension (Chrome/Firefox/Edge/Safari), Notion as the database layer (six linked databases), Uploadcare for image uploads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI&lt;/strong&gt;: Gemini 2.0 Flash for visual analysis with a fallback chain (→ gemini-2.0-flash-lite → gemini-1.5-flash-8b → OpenRouter free vision → Groq text-only). Groq (llama-3.3-70b-versatile) handles all text generation, roadmaps, captions, and note analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data flow:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Extension saves a new entry to Notion (status: Pending) — that's all it does.&lt;br&gt;
A Notion database automation fires a webhook to /api/webhook/notion.&lt;br&gt;
The server routes by capture type: images/URLs go to Gemini (with node-vibrant extracting colors first); notes go straight to Groq.&lt;br&gt;
Results are written back to Notion via the MCP adapter; status updates to Ready.&lt;/p&gt;

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

&lt;p&gt;For publishing: captions surface in the Publish Queue. Twitter/LinkedIn/Reddit open compose URLs pre-filled; Instagram copies to clipboard. Clicking Mark Published updates the Notion entry.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  The Six Databases
&lt;/h3&gt;

&lt;p&gt;On first connect, all 6 Notion databases are created in one pass to get their IDs, then a second pass links the relations between them — because you can't create a relation to a database that doesn't exist yet.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Database&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Inspiration Vault&lt;/td&gt;
&lt;td&gt;Every saved piece — the source of truth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Analysis Results&lt;/td&gt;
&lt;td&gt;AI breakdown linked to each inspiration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Roadmaps&lt;/td&gt;
&lt;td&gt;Learning paths generated from analyses&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Projects&lt;/td&gt;
&lt;td&gt;Work created — linked to inspirations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Publish Queue&lt;/td&gt;
&lt;td&gt;Drafted and approved social posts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;User Profile&lt;/td&gt;
&lt;td&gt;Preferences, platform connections, Creative DNA&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Technology Choices
&lt;/h3&gt;

&lt;p&gt;AI: Gemini 2.0 Flash for vision (generous free tier, reliable structured output) with a 4-model fallback chain so the pipeline survives rate limits. Groq for all text generation because speed matters llama-3.3-70b-versatile keeps roadmap generation under 15 seconds.&lt;/p&gt;

&lt;p&gt;Social publishing: Compose URLs instead of OAuth integrations — Twitter, LinkedIn, and Reddit accept pre-filled content as URL params, no API approval needed. Instagram has no compose URL so it falls back to clipboard copy. Ship with what works now, add direct API integrations when you have approvals.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Used Notion MCP
&lt;/h2&gt;

&lt;p&gt;I made a rule early in the build: Notion should be the brain of the system, not a sync target. Every intelligent write-back goes through an MCP adapter layer — a set of functions in &lt;code&gt;src/lib/server/notion/mcp.ts&lt;/code&gt; that wrap the Notion SDK calls for all agent actions.&lt;/p&gt;

&lt;p&gt;The distinction between the REST API layer and the MCP layer is intentional. The REST API handles database operations: creating structure, querying records, and managing schemas. The MCP layer handles agent actions: an AI system reading context from a workspace and writing back purposefully — the same pattern a person working inside Notion would follow.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Specific Operations
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;writeAnalysisResults&lt;/code&gt;&lt;/strong&gt; — called after every analysis completes. Creates a page in the Analysis Results database with the full breakdown — color palette, typography notes, layout analysis, mood tags, component identification, attribution — and links it back to the source inspiration entry.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;createRoadmap&lt;/code&gt;&lt;/strong&gt; — called when a user requests a roadmap. Creates a structured Notion page in the Roadmaps database — not just a database row, but a full page with sections, skill descriptions, milestone checkboxes, and resource links. The page is created with the correct parent relation to the source inspiration, so the connection is permanent and navigable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;writePublishDrafts&lt;/code&gt;&lt;/strong&gt; — called by the caption generation pipeline. Writes platform-specific captions to the Publish Queue entry — Twitter, LinkedIn, Instagram, Reddit — all with the credit line assembled from the stored attribution data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;updateInspirationStatus&lt;/code&gt;&lt;/strong&gt; — moves entries through their lifecycle: &lt;code&gt;Pending → Ready → Active → Stale → Archived&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why a Dedicated MCP Layer
&lt;/h3&gt;

&lt;p&gt;This is the question worth answering directly.&lt;/p&gt;

&lt;p&gt;When the AI system writes results back to Notion, it is not inserting records — it is making decisions: what to name the page, how to structure the sections, which properties to set, what relations to create, how to format the skill descriptions so they are useful when the user opens the page later. That is an agent action. The MCP layer is the right abstraction for it. The REST API would require pre-specifying every structural decision in code. The MCP layer lets those decisions happen in context.&lt;/p&gt;

&lt;p&gt;Having a clean adapter layer also makes the path to the hosted Notion MCP remote server straightforward. Every call goes through one place. The connection is established once per user session with their OAuth token and reused across all operations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Learned
&lt;/h2&gt;

&lt;p&gt;The hardest part was not the AI integration. It was the database setup order.&lt;/p&gt;

&lt;p&gt;Notion relations between databases require both databases to exist before you can create the relation. That sounds obvious until you are writing the setup script at 1am and realize you cannot add the relation from Inspiration Vault to Analysis Results until Analysis Results exists — but you also cannot add it to a database you have not created yet. The solution was simple once I saw it: create all six databases first, collect their IDs, then make a second pass to patch the relations in. Two API calls where I wanted one. Not elegant but reliable.&lt;/p&gt;

&lt;p&gt;The social API reality was the other hard lesson. I knew Instagram Graph API required Facebook app approval. I knew Twitter/X v2 could take time. What I underestimated was how much value there is in the compose URL approach first — &lt;code&gt;x.com/intent/post&lt;/code&gt;, &lt;code&gt;linkedin.com/shareArticle&lt;/code&gt;, &lt;code&gt;reddit.com/submit&lt;/code&gt;. The user sees exactly what they are about to post. There is no abstraction between the caption and the publish. Add the server-side API integrations when you have time and approvals; start with the compose URLs and let the user be in control.&lt;/p&gt;

&lt;p&gt;The thing that surprised me most was the note capture.&lt;/p&gt;

&lt;p&gt;I almost cut it three separate times. It felt like scope creep. A text input in a browser extension — what problem does that solve that a notes app does not? I kept it because the use case would not leave me alone: what do you do when the inspiration is not a URL or an image? What do you do when you are in a meeting and you think "I want to make something that feels like the opposite of corporate" and you want to capture that before the meeting ends and you forget?&lt;/p&gt;

&lt;p&gt;I also learned that the creative journal resonates more with experienced creators than with beginners. Beginners want to capture and analyze. Experienced creators want to document their process because they know the process is the portfolio, not just the output. That insight is shaping how I think about onboarding — meeting users where they are rather than assuming everyone is ready for the same features at the same time.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>notionchallenge</category>
      <category>mcp</category>
      <category>ai</category>
    </item>
    <item>
      <title>FitTogether: Building a Social Community for Local Fitness</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Mon, 02 Mar 2026 03:27:04 +0000</pubDate>
      <link>https://forem.com/babalasisi/fittogether-building-a-social-community-for-local-fitness-jom</link>
      <guid>https://forem.com/babalasisi/fittogether-building-a-social-community-for-local-fitness-jom</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/weekend-2026-02-28"&gt;DEV Weekend Challenge: Community&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Community
&lt;/h2&gt;

&lt;p&gt;In a fitness world that often feels overcrowded yet socially disconnected, the power of a functional community is easily overlooked. Building FitTogether wasn't just about physically crowding people into a gym; it was about fostering a shared intelligence that makes these spaces easier to navigate for everyone.&lt;/p&gt;

&lt;p&gt;From my personal experience, going swimming every weekend and regularly visiting the gym, I have noticed a noticeable difference in people's energy levels. This variation is especially apparent during times when the places are overcrowded compared to when there is more space available.&lt;/p&gt;

&lt;p&gt;When new members join the gym, they tend to struggle to navigate, especially during busy hours. It can be overwhelming. This highlights the importance of creating an inclusive community that welcomes people of different personality types.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built FitTogether, a full-stack SvelteKit application that acts as a real-time "busyness" tracker and buddy-finding network.&lt;/p&gt;

&lt;p&gt;The core pillars of the app include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Live Crowdsourcing: A "Waze for Gyms" where users report capacity levels (Low, Medium, or High) to help others decide when to head out.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Privacy-First Buddy Finder: A sophisticated matching system where contact info (WhatsApp) is only revealed if both users are connected and currently active at a venue.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gamified Challenges: A leaderboard system to keep users motivated, from swimming 5km a week to hitting "Weekend Warrior" streaks.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interactive Geo-Data: A custom map interface using OpenStreetMap to visualize local fitness hubs and their current "traffic" status.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://fittogether-five.vercel.app/" rel="noopener noreferrer"&gt;Project Link &lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.loom.com/share/6b4d1e1bd83b457b9bbb60c13cd91dcd" rel="noopener noreferrer"&gt;Overview Demo Video&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Github Repo and Walkthrough Demos
&lt;/h3&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/adetyaz" rel="noopener noreferrer"&gt;
        adetyaz
      &lt;/a&gt; / &lt;a href="https://github.com/adetyaz/fittogether" rel="noopener noreferrer"&gt;
        fittogether
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      https://fittogether-five.vercel.app/
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;FitTogether&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;A community web app for local swimmers and gym-goers — crowdsourced busyness reports, buddy matching, and fitness challenges, built with SvelteKit.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Walkthrough Videos&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Video&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.loom.com/share/6b4d1e1bd83b457b9bbb60c13cd91dcd" rel="nofollow noopener noreferrer"&gt;Overview&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Full app walkthrough&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.loom.com/share/d6e2b228be2647dfa2ed23cc5d00d8f6" rel="nofollow noopener noreferrer"&gt;Pool and Gym Discovery with busyness levels&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Crowdsourced busyness reporting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.loom.com/share/4af06324df7d4bebaf3c0f77c34ffa02" rel="nofollow noopener noreferrer"&gt;Buddies Connect&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Buddy matching and messaging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;a href="https://www.loom.com/share/637915c5934a441aa06e558b645390e5" rel="nofollow noopener noreferrer"&gt;Challenges and Logging Data&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Fitness challenges &amp;amp; workout logging&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What It Does&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Crowdsourced Busyness&lt;/strong&gt; — See how busy your local pool or gym is right now. Check in and report busyness levels (Low/Medium/High) with visual indicators, interactive Leaflet maps, and place search via Nominatim.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buddy Finder&lt;/strong&gt; — Find workout partners filtered by activity (swim/gym) and schedule (morning/evening/weekend). Send buddy requests, and contact accepted buddies via WhatsApp — but only when they've set themselves as active at a venue (anti-harassment by design).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fitness Challenges&lt;/strong&gt; — Join challenges like "Swim 5km in a Week", log workouts, track progress with visual bars, and compete on per-challenge leaderboards.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="markdown-heading"&gt;…&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/adetyaz/fittogether" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The build centered on creating a high-performance, type-safe pipeline from a serverless PostgreSQL database using Neon to a full-stack frontend built on SvelteKit and Svelte, and, lastly, TailwindCSS for styling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Architecture (Prisma &amp;amp; Neon)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I began by modelling the social and spatial relationships using Prisma. The schema handles four primary domains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Spatial Data: Locations mapped with latitude and longitude for Leaflet integration.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Social Graph: A self-referencing BuddyRequest model to manage pending, accepted, and rejected states between users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time Status: A CheckIn system linked to locations, calculating the freshness of busyness reports via timestamps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Gamification: ChallengeEntry and WorkoutLog tables to track incremental progress toward fitness goals.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Privacy-First Logic Flow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A core technical requirement was the "Anti-Harassment" contact system. I built a server-side check that ensures a user's WhatsApp number is never sent to the client unless two conditions are met:&lt;/p&gt;

&lt;p&gt;A BuddyRequest exists with a status of 'accepted'.&lt;/p&gt;

&lt;p&gt;The target user has their activeStatus set to at_gym or at_pool.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;// Logic gate for contact visibility&lt;br&gt;
const canContact = buddyStatus === 'accepted' &amp;amp;&amp;amp; targetUser.activeStatus !== null;&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Geocoding &amp;amp; Mapping&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of a paid API, I integrated Nominatim for place search. When a user searches for a gym, the app fetches coordinates, saves the new Location to the database via a SvelteKit &lt;code&gt;server.ts&lt;/code&gt; action, and immediately updates the global map state without a page reload.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Challenge &amp;amp; Progress Tracking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The tracking system uses a background calculation to compare WorkoutLog totals against the Challenge goal value. This progress is visualized, rendering progress bars that update in real-time as users log their sessions.&lt;/p&gt;

&lt;h2&gt;
  
  
  User Stories (Summary)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Busyness
&lt;/h3&gt;

&lt;p&gt;View locations with busyness levels, check in to report, see timestamps, browse an interactive map with color-coded markers, search &amp;amp; add places, see visual crowding indicators, and view location detail pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Buddy Finder
&lt;/h3&gt;

&lt;p&gt;Set profile preferences, browse &amp;amp; filter users, write a bio, send/accept/decline buddy requests, see connection status, contact accepted buddies via WhatsApp (only when active), toggle active status (At Gym / At Pool / Offline), and see green dot indicators for active users.&lt;/p&gt;

&lt;h3&gt;
  
  
  Challenges
&lt;/h3&gt;

&lt;p&gt;Browse challenges with participant counts, join challenges, log workouts, view leaderboards, and track progress with visual bars.&lt;/p&gt;

&lt;h3&gt;
  
  
  Profile &amp;amp; Auth
&lt;/h3&gt;

&lt;p&gt;Sign in with Google, view profile with history, edit preferences &amp;amp; WhatsApp number, and manage incoming buddy requests.&lt;/p&gt;

&lt;h3&gt;
  
  
  Safety
&lt;/h3&gt;

&lt;p&gt;WhatsApp is hidden until the buddy request is accepted AND the user is active, reject unwanted requests, and go offline anytime to stop contact.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Let's begin the year with a bang!!</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Sat, 31 Jan 2026 17:15:17 +0000</pubDate>
      <link>https://forem.com/babalasisi/lets-begin-the-year-with-a-bang-312d</link>
      <guid>https://forem.com/babalasisi/lets-begin-the-year-with-a-bang-312d</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/new-year-new-you-google-ai-2025-12-31"&gt;New Year, New You Portfolio Challenge Presented by Google AI&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Me
&lt;/h2&gt;

&lt;p&gt;I’m a frontend engineer who is slowly transitioning into a design engineer. I decided to use this medium to create an experience. For 2026, I wanted to build something that felt authentically "me". After scouring Dribbble and Behance for inspiration, I dove into Figma and started putting things together. I wanted this to be simple yet have playfulness in it&lt;/p&gt;

&lt;h2&gt;
  
  
  Portfolio
&lt;/h2&gt;

&lt;p&gt;

&lt;/p&gt;
&lt;div class="ltag__cloud-run"&gt;
  &lt;iframe height="600px" src="https://portfolio-adetayo-v1-461728123517.us-central1.run.app/"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;




&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Sveltekit and Svelte&lt;/li&gt;
&lt;li&gt;Gsap for animations&lt;/li&gt;
&lt;li&gt;HTML &amp;amp; Vanilla CSS for structure and styling&lt;/li&gt;
&lt;li&gt;Lenis for scroll smoothing&lt;/li&gt;
&lt;li&gt;Lottie animations&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://github.com/adetyaz/portfolio-v1.git" rel="noopener noreferrer"&gt;Repository&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;My development process was a collaboration between my creative vision and &lt;code&gt;Antigravity&lt;/code&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Visual Grounding: I started by designing a mental structure in Figma. Instead of manually coding every layout detail, I used my design images and prompted Gemini Pro. I asked, "Can you convert this visual style into a functional website structure?" By the way, I was just trying things out at this point, but I was surprised by the scaffolding that happened&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;code&gt;Antigravity&lt;/code&gt; Environment: To achieve the fluid motion I envisioned, I collaborated with Gemini on my use of GSAP and Lenis, focusing on creating a way for these tools to be used efficiently, ensuring they were integrated at the root level rather than being called multiple times. This deliberate structure kept the styling and animations lightweight.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Iterative Blueprinting: One of my favourite parts of using &lt;code&gt;Antigravity&lt;/code&gt; was the Implementation Plan. Gemini generated a .md file breaking down every step. This allowed me to interject, provide my own opinions, and tweak the logic before a single line of code was finalized.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Human Touch: While the use of AI provided a stellar starting point and handled the heavy lifting of the initial structure, I spent my time fine-tuning the code. It wasn't 1-to-1 perfection immediately, but having that solid foundation allowed me to focus on making necessary tweaks and adding a little bit of personality to my portfolio website&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I'm Most Proud Of
&lt;/h2&gt;

&lt;p&gt;I was able to get the build actually match the vision in my head. Throughout this process, I was so inspired by the progress that the ideas just kept flowing. While I pushed the boundaries of what I could do on the  UI, I refused to compromise on the fundamentals, ensuring the site is accessible to everyone and remains perfectly responsive across all devices.&lt;/p&gt;

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

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

&lt;p&gt;I didn’t want a bland, static site. I’ve hidden several interactive easter eggs throughout the portfolio to make the discovery process fun for visitors. It’s an invitation to explore.&lt;/p&gt;

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

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

&lt;p&gt;I successfully modularized my animation libraries (GSAP and Lenis). By centralizing their logic, I was able to achieve performance, leaving the site feeling weightless and fluid, just like the design intended&lt;/p&gt;

&lt;p&gt;Overall, seeing my personal vision transition from a mental structure in Figma to a live, functional site is a huge win for my 2026 goals.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>googleaichallenge</category>
      <category>portfolio</category>
      <category>gemini</category>
    </item>
    <item>
      <title>カイア アジアのオンチェーンの未来</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Wed, 19 Feb 2025 18:45:01 +0000</pubDate>
      <link>https://forem.com/babalasisi/kaia-azianoontiennowei-lai-4om1</link>
      <guid>https://forem.com/babalasisi/kaia-azianoontiennowei-lai-4om1</guid>
      <description>&lt;p&gt;この記事では、カイアの基礎技術、ユーザーフレンドリーなカイア・ポータル、カイア・チェーン内でのユーザー参加とエコシステムの成長を促すためのインセンティブなど、カイアの世界を掘り下げていく。&lt;/p&gt;

&lt;h2&gt;
  
  
  はじめに
&lt;/h2&gt;

&lt;p&gt;Kaiaは高度に最適化されたBFTベースのパブリック・ブロックチェーンで、エンタープライズ・グレードの信頼性と性能基準を満たしている。カカオとLINEがそれぞれ開発したKlaytnブロックチェーンとFinschiaブロックチェーンの統合により誕生した。カイアは、アジア全域の何億人もの指先にWeb3をもたらします。&lt;/p&gt;

&lt;h2&gt;
  
  
  BFTベースのパブリック・ブロックチェーンとは？
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44ai2bv0oyb0mfznvs4l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44ai2bv0oyb0mfznvs4l.gif" alt="what's that" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;これはビザンチン・フォールト・トレランス（BFT）を利用したブロックチェーンである。これにより、一部のノードが故障したり悪意のある行動をとったりしても、確実にコンセンサスに達することができる。このシステムは、ネットワークの完全性を損なうことなく、最大で!のノードが不正または不誠実な行動を取っても対処できるように設計されたアルゴリズムに依存している。パーミッションレス・ブロックチェーンよりも安全で、パフォーマンスも優れている。&lt;/p&gt;

&lt;p&gt;BFTは腐敗を防止し、ネットワークの安全性と信頼性を維持するのに役立つため、パブリック・ブロックチェーンにとって極めて重要である。BFTがなければ、ネットワーク参加者が偽の情報を持ち込む可能性がある。&lt;/p&gt;

&lt;h2&gt;
  
  
  カイアの特徴と狙い
&lt;/h2&gt;

&lt;p&gt;カイアはブロックチェーンを提供する：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1秒間のブロック生成と確認時間。&lt;/li&gt;
&lt;li&gt;毎秒4,000トランザクションの処理能力。&lt;/li&gt;
&lt;li&gt;イーサリアムの約1/10の低ガス価格。&lt;/li&gt;
&lt;li&gt;EVM（イーサリアム仮想マシン）の互換性、Solidityコントラクトのサポート。&lt;/li&gt;
&lt;li&gt;カイア・ガバナンス・カウンシルを設立する世界の評判の高い企業によるガバナンス&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;カイア・ブロックチェーンが目指すもの：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;取引の即時確定を実現する。&lt;/li&gt;
&lt;li&gt;実際のユースケースに対応した高速トランザクション処理を提供。&lt;/li&gt;
&lt;li&gt;ブロックチェーン・アプリケーションの実行コストを下げる。&lt;/li&gt;
&lt;li&gt;エンドユーザーの参入障壁を減らす。&lt;/li&gt;
&lt;li&gt;様々な産業への技術導入を容易にする。&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  カイアのエコシステム
&lt;/h2&gt;

&lt;p&gt;カイアのエコシステムは、分散型金融（DeFi）をシンプルでアクセスしやすく、規制を遵守した安全なものにするために構築されています。トークンのステーク、暗号の取引、異なるブロックチェーン間での資産の移動など、カイアはシームレスな体験を提供します。エコシステムの中核となるコンポーネントは以下の通りです：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;カイア・ポータル カイア・ポータルは、ステーク、スワップ、リワードの獲得が一度にできるメインハブです。直感的に操作できるように設計されているので、DeFiが初めての方でも、経験豊富なプロの方でも、簡単にナビゲートできます。金融ツールを使いやすく、誰もが利用しやすいものにすることが目標だ。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ステーキング KAIAトークンをステークすることは、単に報酬を得ることではなく、ネットワークを強化しながら稼ぐことができ、ブロックチェーンの安全性を保つことにも役立ちます。KAIAトークンをロックアップすることで、バリデーターをサポートし、ネットワークを保護し、ステーク額と期間に応じてステーク報酬を得ることができます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ブリッジング： カイアの際立った特徴のひとつは、異なるブロックチェーン間で資産を移転できるクロスチェーンブリッジだ。ブリッジングとは、暗号通貨やNFTのような資産やデータを異なるブロックチェーン・ネットワーク間で移転するプロセスを指す。例えば、ある国の銀行口座にお金があり、それを別の国で使いたいとします。ブリッジングは、国境を越えた安全かつ効率的な送金方法です。Kaiaの相互運用性は、ユーザーが1つのブロックチェーンだけに制限されることなく、DeFi空間全体の機会を利用できることを意味する。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;分散型取引所（DEX）： カイアはDragonSwapやKaiaswapのような分散型取引所を統合しており、銀行や第三者を介さずに、ウォレットから直接暗号通貨を取引することができます。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DragonSwap：流動性の高い高速DEX。&lt;/p&gt;

&lt;p&gt;カイアスワップ 効率性に最適化された低手数料の取引プラットフォーム。&lt;/p&gt;

&lt;p&gt;これらのプラットフォームは、ユーザーが資産を完全にコントロールできるようにする一方、取引を迅速かつ安全にし、手数料を引き下げる。&lt;/p&gt;

&lt;p&gt;これらのプラットフォームは、取引を迅速、安全、かつ費用対効果の高いものにすると同時に、ユーザーが資産を完全にコントロールできるようにする。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxak4gm3zas6rp9zb9ziv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxak4gm3zas6rp9zb9ziv.gif" alt="sounds interesting" width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;カイア・ポータルに飛び込んで、そのエキサイティングな機能を発見してみよう。&lt;/p&gt;

&lt;h2&gt;
  
  
  カイア・ポータル
&lt;/h2&gt;

&lt;p&gt;カイアでは、DeFiからオンチェーンゲームやNFTに至るまで、シームレスなWeb3ユーザー体験を提供することを最優先しています。ユーザーエクスペリエンスは、暗号に精通している人だけでなく、誰もがWeb3のメリットを享受できるようにするために不可欠であると強く信じています。高速でユーザビリティの高いレイヤー1ブロックチェーンの開発に加え、カイアは鍵管理の必要がないメッセンジャーウォレットを開発しました。&lt;/p&gt;

&lt;p&gt;カイア・ポータルのユーザーフレンドリーなインターフェースは、デスクトップ、モバイル、そして近々LINEメッセンジャーでも利用できるようになる。DeFiの一般的な機能に加え、ポイントベースの報酬システムが間もなく追加され、新旧ユーザーがカイアDeFiおよび広範なエコシステムのミッションに参加することで報酬を得ることができる。&lt;/p&gt;

&lt;p&gt;カイア・ポータルのミッションのエポック1では、カイアのDeFiパートナーを活用することで、魅力的なトークン報酬の機会が配布された。&lt;/p&gt;

&lt;p&gt;続くエポック2では、カイアウェーブ・プログラムに関わるミッションに参加したユーザーは、魅力的な報酬を受け取ることができる。&lt;/p&gt;

&lt;p&gt;カイアには、ビルダー、デベロッパー、パートナーなど、ユーザーにインセンティブを与える方法が他にもあり、エコシステムを構築している。&lt;/p&gt;

&lt;h4&gt;
  
  
  カイア・ポータル・ミッション エポック#1 インセンティブデザイン
&lt;/h4&gt;

&lt;p&gt;エポック#1のミッションは2024年12月25日午後3時(UTC+9)に終了しましたが、エポック#2で何が起こり、何を楽しみにしているのか、その概要をお伝えしたいと思います。これは、Kaiaエコシステム内の流動性とユーザーエンゲージメントを高めるために設計されました。参加プロジェクトとともに、最大5000万KAIAトークンが割り当てられました。ミッションを成功裏に完了すると、参加者はポイントを獲得し、エポック終了後に既得のKAIAトークンとプロジェクト・トークンに変換することができます。&lt;/p&gt;

&lt;p&gt;エポック1では、カイア・デフィのプロトコルに流動性を提供することがミッションの中心で、報酬は次のようなものだった：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;カイアポイント&lt;/li&gt;
&lt;li&gt;参加プロジェクトのポイント&lt;/li&gt;
&lt;li&gt;D2Iプログラムの報酬&lt;/li&gt;
&lt;li&gt;DeFiプロトコルによる収量&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;目標は、カイア上に新しいアプリケーションとDeFiユースケースを構築し、利用可能な資産の範囲を拡大し、取引量の増加をサポートすることであった。その結果、流動性プロバイダーの手数料が上昇し、エコシステムの取引活動が活発化し、取引活動と流動性の増加がエコシステム全体を強化するというフライホイール効果が生まれる。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;最大限の透明性&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;多くのポイントシステムは報酬計算について不透明かもしれませんが、カイア・ポータル・ミッションはキャンペーン期間からポイント計算式まで、最大限の透明性を保つように設計されています。カイアのユーザーにはそれ以上の価値はありません。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;キャンペーン期間&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;このミッションは9月26日に正式に開始され、その後3ヶ月間続いた。この間、各エポックごとに、追加の空輸機会、新たな参加プロジェクト、アセット・ブーストが導入された。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;アーリー・アダプター&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;8月29日から9月26日の間にミッションに参加した場合、ミッションタブに記載されているDeFiプロトコルに1ドル入金するだけでも、対応するウォレットはアーリーアダプターブーストの対象となり、それ以降に獲得したすべてのポイントに1.2倍のボーナス倍率が加算された。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;報酬&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  カイア・リワード
&lt;/h4&gt;

&lt;p&gt;マイルストーンに基づき、最大2,000万KAIAが一般参加者に授与されました。既存のFinschiaエコシステムでFGP-23投票に参加したウォレットは、最大3,000万KAIAを受け取りました。この報酬プールは一般参加者のプールとは別で、FGP-23で投票したウォレット専用です。Finschiaエコシステムで長期にわたってオンチェーンに貢献したユーザーは、Kaiaポータルミッションに参加することで、その貢献度に応じて1,000万KAIAの加重報酬を受け取ります。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;25M KAIA（一般参加者1,000万円／FGP-23参加者1,500万円）をポイント・エアドロップに充当。&lt;/li&gt;
&lt;li&gt;1,250 万 KAIA（一般参加者は 500 万 KAIA 追加／FGP-23 参加者は 750 万 KAIA） 1 億ドル TVL でロック解除&lt;/li&gt;
&lt;li&gt;12.5百万KAIA（一般参加者に5百万KAIA追加／FGP-23参加者に7.5百万KAIA） 150百万TVLでロック解除&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FGP-23の参加者プールは、一般の参加者プールと重複しない。&lt;/p&gt;

&lt;h4&gt;
  
  
  権利確定
&lt;/h4&gt;

&lt;p&gt;キャンペーン終了時に変換されたトークンは、6ヶ月にわたって配布された。キャンペーンが終了し、ユーザーがポイント交換を申請すると、カイア トークンは6ヶ月間の権利確定期間を持つ。&lt;/p&gt;

&lt;h4&gt;
  
  
  パートナー・プロジェクト報酬
&lt;/h4&gt;

&lt;p&gt;すべての参加者は、それぞれのポータル・ミッションにおいて、各パートナーからポイントを受け取りました。ポイント提供の基準はパートナーによって異なります。カイア・ポータル・ミッションに参加するプロジェクトは、安心して参加できることを保証するために、専門の監査人による監査と検証されたプロトコルを受けることが義務付けられています。&lt;/p&gt;

&lt;h4&gt;
  
  
  報酬分配
&lt;/h4&gt;

&lt;p&gt;エポック＃1の報酬は、1月7日から6月7日までの6回に分けて分配され、毎月7日に支払われる。分配の内訳は以下の通り：&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;分割払い1～4：各15&lt;/li&gt;
&lt;li&gt;分割払い5～6：各20&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;参加者はいつでも報酬を請求することができ、最終請求期間は2025年6月30日までとなる。毎月の請求に不便を感じる人は、第6回分割払いが配布された後、一度にすべての報酬を請求することができる。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzu27l3cidwtm0igv8li.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzu27l3cidwtm0igv8li.gif" alt="can't wait" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;既存のFNSA長期ステーカーについては、「KAIAオンチェーン・コントリビューター・リワード・ガイドライン」に基づき割り当てられた1,000万KAIAが、ポイント報酬と合算されて分配される。&lt;/p&gt;

&lt;p&gt;エポック2が近づくにつれ、カイアのエコシステムにおける新たな発展と強化への期待が高まっています。すでに強固な基盤が整っているため、この次のフェーズでは、機能の向上、機会の拡大、参加者への報酬の増加が期待され、DeFi空間におけるカイアの地位はさらに強固なものとなるでしょう。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxilsg0k522sin8z04eah.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxilsg0k522sin8z04eah.gif" alt="what to expect" width="540" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;KakaoPay、LINE、Telegramのミニアプリのようなプラットフォームとの接続は、DeFiを日常的なユーザーにとってより身近なものにすることで、大衆的な普及を促進するだろう。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;分散型取引所（DEX）との継続的な連携により、流動性と取引効率が向上し、スワップがより迅速かつシームレスになる。また、デリバティブや先進的な投資ツールの導入により、機関投資家が集まり、取引機会が拡大する。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  カイア・ポータルの探索
&lt;/h3&gt;

&lt;p&gt;カイア・ポータルの例を使ってその方法を見てみよう。👉🏿 &lt;a href="https://portal.kaia.io/" rel="noopener noreferrer"&gt;https://portal.kaia.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;例えば、Capybara DEXの&lt;code&gt;Stargate Pool&lt;/code&gt;に流動性を提供したい場合、Stargateブリッジに基づいて資産を持ち込む必要があります。&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;イーサリアムからUSDT（スターゲイト）アセットを導入する。&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;注意してください： 逆に、USDT（ETHからのポータル）のようなアセットをステーブルプールに持ち込む場合は、イーサリアムからUSDTを持ち込むためにワームホールブリッジを使用する必要があります。&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;ブリッジ」タブに行き、スターゲイト・ブリッジを選択する。&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;スターゲイトブリッジのウェブページでは、あなたの財布を接続し、それがイーサリアムであることを確認し、USDTを持参したいからチェーンを選択します。&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;受信チェーンとしてカイアを選択する。&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Transfer`をクリックし、ウォレットでトランザクションを承認してUSDTをStargateで使用できるようにします。その後、イーサリアムからカイアへの送金が行われます。&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;LayerZero Scan.👉🏿。&lt;a href="https://layerzeroscan.com/" rel="noopener noreferrer"&gt;https://layerzeroscan.com/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;あなたのウォレットにUSDT (Stargate)が表示されていない場合は、「Import Token」をクリックしてUSDT (Stargate)のトークンアドレスを登録してください。 &lt;a href="https://portal-docs.kaia.io/english/portal-mission-token-list" rel="noopener noreferrer"&gt;https://portal-docs.kaia.io/english/portal-mission-token-list&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;USDTがお客様のウォレットに正しく登録されていることをご確認ください。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ポータルブリッジは上記の手順と同様に機能し、このリンクから他のチェーンからカイアにトークンを送ることができる。👉🏿 &lt;a href="https://portalbridge.com" rel="noopener noreferrer"&gt;https://portalbridge.com&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;ブリッジング・プロセスが完了したので、次は他のポータル機能を探ってみよう。これには、アセットのスワップのデモンストレーションと、BinanceからあなたのウォレットにKAIAを送る方法が含まれます。&lt;/p&gt;

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

&lt;h3&gt;
  
  
  スワッピング
&lt;/h3&gt;

&lt;p&gt;スワッピングとは、ある暗号通貨を別の暗号通貨と交換するプロセスを指す。主に分散型取引所で行われる。これらのプラットフォームは仲介者を介さずに運営されており、ユーザー同士が暗号通貨を直接取引できる。&lt;/p&gt;

&lt;p&gt;FNSAからカイアへのスワップを見てみよう。&lt;/p&gt;

&lt;p&gt;ポータル内の「FNSA -&amp;gt; KAIA」タブは、FNSAトークンからKAIAトークンへのシームレスな変換を容易にします。History（履歴）」タブで変換状況をリアルタイムでモニターすることができます。&lt;/p&gt;

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

&lt;p&gt;9月12日、FGP-23の投票者に4,000万KAIAが配布された。注意点として、ポイントミッションで使用する予定のKAIAウォレットをリンクする必要があります。一度リンクすると元に戻すことはできませんので、今後使用する予定のKAIAウォレットをリンクすることを強くお勧めします。エポック2の仕組みを理解する必要があります。&lt;/p&gt;

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

&lt;p&gt;下の画像のような「請求」ページが表示され、事前にリンクしたKAIAウォレットで報酬を請求することができます。&lt;/p&gt;

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

&lt;h3&gt;
  
  
  BinanceからあなたのウォレットへKAIAを送金する
&lt;/h3&gt;

&lt;p&gt;Binanceはご存知の通りグローバルな取引所であり、一度Binanceのウォレットを持っていれば、KAIAを個人のウォレットに引き出すために新しいウォレットを登録する必要はありません。注意すべき点は、Kaia Wallet、Klip、さらにはMetamaskなどのウォレットに引き出すことができるということです。&lt;/p&gt;

&lt;p&gt;次のステップでは、引き出し方法について説明します。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;まずはBinanceアプリにアクセスし、下部にある「資産」タブを選択します。スポット」セクションで「Kaia」または「Search Kaia」を選択する。&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;出金」ボタンをクリックし、出金オプションとして「暗号ネットワーク経由で送信」を選択します。&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;アドレス欄に、個人用ウォレット（カイアウォレット、メタマスク等）のKAIAアドレスを貼り付けます。出金額を設定後、「出金」ボタンをクリックし、「確認」ボタンをクリックすると出金完了です。&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;取引所の審査プロセスによっては、出金に最大30分かかる場合があります。出金がスムーズに行われない場合は、取引所のカスタマーサポートまでお問い合わせください。&lt;/p&gt;

&lt;p&gt;Binanceから個人のウォレットにKAIAを送金する方法を見てきました。&lt;/p&gt;

&lt;h3&gt;
  
  
  高APRとインセンティブ戦略
&lt;/h3&gt;

&lt;p&gt;カイア・ポータルで収益を高め、最高の年率を得たいですか？トークンを最大限に活用するための主な戦略は以下の通りです。&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;すべての流動性プールが同じように作られているわけではなく、取引量と需要に基づいてより高い報酬を提供するものもあるため、高利回りのプールを選択する。リターン構造が変わる可能性があるため、リターンが最も良い場所をリサーチして賭け、APRレートや新機能に関する情報を常に入手する方が良いでしょう。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;カイアはボーナスイベントや特別プロモーションを頻繁に開催しており、特別報酬を提供しています。期間限定のステーキングブーストや流動性インセンティブにご注目ください。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;すべてのKAIAを一つのバスケットに入れないでください！複数のプールやバリデーターに分散投資することで、潜在的なリターンを最大化しつつ、リスクのバランスを取ることができます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ステークされたKAIAはあなたに議決権を与え、それを使ってエコシステムの形成に役立つガバナンスに参加し、より良い報酬と長期的な成長につなげることができます。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;また、助成金や報奨金を通じて、カイアのエコシステムの一部になるための興味深い方法を模索することもできます。&lt;/p&gt;

&lt;h3&gt;
  
  
  Grants and Bounties
&lt;/h3&gt;

&lt;p&gt;カイアの普及と発展を推進するプロジェクトを構築することができます。以下のガイドラインを使用して始めることができます。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;プロジェクトの可能性を見極める&lt;/li&gt;
&lt;li&gt;詳細な提案書の作成&lt;/li&gt;
&lt;li&gt;プロジェクトを提出する&lt;/li&gt;
&lt;li&gt;地域社会との関わり&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  助成金の種類
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://docs.kaia.io/learn/token-economy/#kaia-ecosystem-fund" rel="noopener noreferrer"&gt;カイア・エコシステム・ファンド（KEF）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;KEFはカイアのエコシステムサービスと開発者コミュニティの育成に専念しています。KEFから引き出すことを目的としたすべての提案は、最大限の透明性のためにオンチェーン投票によるカイアガバナンス評議会の承認を必要とします。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.kaia.io/learn/token-economy/#kaia-infrastructure-fund" rel="noopener noreferrer"&gt;カイア・インフラストラクチャー・ファンド（KIF）&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;KIFは、新しいGCの成長を支援し、主要なサービスを開発し、財団の運営を管理するために割り当てられる。基金は自律的かつ透明性をもって運営され、エコシステムの発展に向けた資源の効果的な投入を保証する。&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.kaia.io/iok" rel="noopener noreferrer"&gt;IOK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IOKプログラムは、dApp開発者に技術面、ビジネス面にわたる実用的な市場参入サポートを提供することで、シームレスなビルダーオンボーディングに貢献することを目的としています。世界トップクラスの10以上のカテゴリーに150以上のパートナーが参加しています。このプログラムには、開発者向けとパートナー向けの2つの特典があります。&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;開発者向け&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;時間とコストの節約： Kaiaを使用して作成されたDAppsは、プログラムを通じて信頼できるパートナーを見つけることで、時間とコストを節約することができます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;製品開発に集中： Kaiaを使用して作成されたDAppsは、プログラムを通じて信頼できるパートナーを見つけることで、時間とコストを節約することができます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ネットワーキングの機会： デベロッパーは、時間をかけて優れたリファレンスを蓄積し、業界での評判を高めることができます。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;高品質なサービス DAppsは業界をリードする高品質なサービスをリーズナブルな価格で受けることができます。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;パートナーの皆様へ&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;リファレンスの構築： パートナーは、時間をかけて優れたリファレンスを蓄積し、業界での評判を高めることができる。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;顧客の獲得と維持 パートナーは一貫して顧客を惹きつけ、維持することができる。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;ネットワーキングの機会 パートナーは、一流プレーヤーとのネットワーキングの機会も利用できる。&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;初期のコミュニケーション： パートナーは、カイアチェーンにオンボーディングしている多くのdAppsと最初のコミュニケーションの機会を持つ。&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://medium.com/klaytn/introducing-the-dragon-defi-initiative-2733b1d64896" rel="noopener noreferrer"&gt;D2l&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;D2I(Dragon DeFi Initiative)プログラムは、カイアの強力なDeFiエコシステムを育成するためのインセンティブプログラムです。現在のD2Iプログラムは、分散型取引所（DEX）やレンディングプロトコルなど、DeFiエコシステムの中核となる公共インフラの発見とサポートを優先しています。つまり、オンチェーンオーダーブックやハイブリッドDEXなど革新的な構造を採用するDAppsや、D2Iの要件を満たす既存のエコシステム参加者もプログラムの対象となる。&lt;/p&gt;

&lt;h3&gt;
  
  
  報奨金プログラム
&lt;/h3&gt;

&lt;p&gt;チームとカイアのエコシステムから広く認知され、バグの重大性と影響力に基づいて報酬を得ることができます。&lt;/p&gt;

&lt;h4&gt;
  
  
  報奨金の種類
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;バグ報奨金&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;開発者は、プロトコルのバグや脆弱性を見つけることで、最高2万ドルを得ることができる。👉🏿。&lt;a href="https://github.com/kaiachain/kaia-dapp-mono/tree/main/bug-bounty" rel="noopener noreferrer"&gt;https://github.com/kaiachain/kaia-dapp-mono/tree/main/bug-bounty&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;開発報奨金&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;開発者は、カイアのエコシステムを強化するツール、アプリケーション、リソースを作成することで、最高10万ドルを得ることができます。👉🏿。&lt;a href="https://dorahacks.io/org/kaiachain" rel="noopener noreferrer"&gt;https://dorahacks.io/org/kaiachain&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  結論
&lt;/h2&gt;

&lt;p&gt;結論として、カイアはアジアの新しいWeb3世界へのゲートウェイとして有望なビジョンを提示している。その革新的なテクノロジーを探求し、ユーザーフレンドリーなカイア・ポータルを利用し、インセンティブ付きのエコシステムに参加することで、ユーザーはこのエキサイティングなプロジェクトの成長に積極的に貢献することができる。&lt;/p&gt;

&lt;p&gt;最新のアップデートやコミュニティへの参加については、以下のリンクからカイアをフォローし、つながってください。&lt;/p&gt;

&lt;p&gt;X: 👉🏿 &lt;a href="https://x.com/kaiachain?lang=en" rel="noopener noreferrer"&gt;https://x.com/kaiachain?lang=en&lt;/a&gt;&lt;br&gt;
Telegram: 👉🏿 &lt;a href="https://t.me/KaiaChain_EN" rel="noopener noreferrer"&gt;https://t.me/KaiaChain_EN&lt;/a&gt;&lt;br&gt;
Discord: 👉🏿 &lt;a href="https://discord.com/invite/kaia" rel="noopener noreferrer"&gt;https://discord.com/invite/kaia&lt;/a&gt;&lt;br&gt;
カイアウェブサイト: &lt;a href="https://www.kaia.io/" rel="noopener noreferrer"&gt;https://www.kaia.io/&lt;/a&gt;&lt;br&gt;
カイア・ポータル: &lt;a href="https://portal.kaia.io/" rel="noopener noreferrer"&gt;https://portal.kaia.io/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>Mina Meme Series &amp; Telegram Stickers</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Sat, 15 Feb 2025 22:35:32 +0000</pubDate>
      <link>https://forem.com/babalasisi/mina-meme-series-telegram-stickers-1lhn</link>
      <guid>https://forem.com/babalasisi/mina-meme-series-telegram-stickers-1lhn</guid>
      <description>&lt;p&gt;Hey there! Sometimes, you just need to sit back and relax. Before diving into the next meme in the series, why not grab some Mina Telegram stickers and join the community fun? Download them &lt;a href="https://t.me/addstickers/minaprotocolstickers" rel="noopener noreferrer"&gt;here!&lt;br&gt;
&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Come to think about it what chains are lighter than Mina&lt;/p&gt;

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

&lt;p&gt;You know it just stays the same&lt;/p&gt;

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

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

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

&lt;p&gt;You already know Mina just gets better with its recursive zero-knowledge proofs &lt;/p&gt;

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

&lt;p&gt;Wondering what verifying on Mina looks like&lt;/p&gt;

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

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

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

&lt;p&gt;When put against other chains how does it fare&lt;/p&gt;

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

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

&lt;p&gt;Remember to pick up your copy of the Mina protocol stickers on telegram via this &lt;a href="https://t.me/addstickers/minaprotocolstickers" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can visit the Mina &lt;a href="https://minaprotocol.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt;&lt;br&gt;
Follow Mina on &lt;a href="https://x.com/MinaProtocol" rel="noopener noreferrer"&gt;X(Twitter)&lt;/a&gt;&lt;br&gt;
Join the Telegram 👉🏿&lt;a href="https://t.me/minaprotocol" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
Join the Discord Community 👉🏿&lt;a href="https://discord.com/invite/minaprotocol" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>funny</category>
      <category>minaprotocol</category>
      <category>blockchain</category>
    </item>
    <item>
      <title>Kaia: Powering Asia On-Chain Future</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Wed, 12 Feb 2025 21:14:29 +0000</pubDate>
      <link>https://forem.com/babalasisi/kaia-powering-asia-on-chain-future-1ffk</link>
      <guid>https://forem.com/babalasisi/kaia-powering-asia-on-chain-future-1ffk</guid>
      <description>&lt;p&gt;In this article we will delve into the world of Kaia: its underlying technology, the user-friendly Kaia Portal, and the incentives designed to encourage user participation and ecosystem growth within the Kaia chain.&lt;/p&gt;

&lt;p&gt;To read the &lt;strong&gt;Japanese version&lt;/strong&gt;, simply visit &lt;a href="https://dev.to/babalasisi/kaia-azianoontiennowei-lai-4om1"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Kaia is a highly optimized BFT-based public blockchain that meets enterprise-grade reliability and performance standards. It powers Asia's on-chain future and was formed through the merger of the Klaytn and Finschia blockchains, which were initially developed by Kakao and LINE, respectively. Kaia brings Web3 to the fingertips of hundreds of millions across Asia.&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a BFT-based public blockchain
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44ai2bv0oyb0mfznvs4l.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44ai2bv0oyb0mfznvs4l.gif" alt="what's that" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a blockchain that utilizes Byzantine Fault Tolerance (BFT). This ensures consensus can be reached even if some nodes fail or act maliciously. The system relies on algorithms designed to handle up to ⅓ of nodes behaving incorrectly or dishonestly, without compromising the integrity of the network. They are more secure and perform better than permissionless blockchains.&lt;/p&gt;

&lt;p&gt;BFT is critical for public blockchains because it helps prevent corruption and keeps networks safe and reliable. Without BFT, network participants could introduce false information. &lt;/p&gt;

&lt;h2&gt;
  
  
  Features and Aim of Kaia
&lt;/h2&gt;

&lt;p&gt;Kaia blockchain offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;1-second block generation and confirmation time.&lt;/li&gt;
&lt;li&gt;Processing capability of 4,000 transactions per second.&lt;/li&gt;
&lt;li&gt;Low gas price, approximately 1/10 of Ethereum.&lt;/li&gt;
&lt;li&gt;EVM (Ethereum Virtual Machine) compatibility, supporting Solidity contracts.&lt;/li&gt;
&lt;li&gt;Governance by reputable corporations worldwide forming &lt;a href="https://docs.kaia.io/misc/glossary/#kaia-governance-council-kgc" rel="noopener noreferrer"&gt;Kaia Governance Council&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kaia blockchain aims to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Achieve immediate finality for transactions.&lt;/li&gt;
&lt;li&gt;Provide high transaction processing speed for real-world use cases.&lt;/li&gt;
&lt;li&gt;Lower the cost of running blockchain applications.&lt;/li&gt;
&lt;li&gt;Reduce barriers to entry for end-users.&lt;/li&gt;
&lt;li&gt;Facilitate easy technology adoption for various industries.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Kaia Ecosystem
&lt;/h2&gt;

&lt;p&gt;The Kaia ecosystem is built to make decentralized finance (DeFi) simple, accessible, and secure maintaining compliance with regulations. Whether you're staking tokens, trading crypto, or moving assets across different blockchains, Kaia offers a seamless experience. The core components of the ecosystem are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Kaia Portal: The Kaia Portal is the main hub where users can stake, swap, and earn rewards all in one place. It’s designed to be intuitive, so whether you’re new to DeFi or a seasoned pro, you’ll find it easy to navigate. The goal is to make financial tools easy to use and accessible to everyone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Staking: Staking KAIA tokens isn’t just about earning rewards, it lets you earn while strengthening the network and also helps keep the blockchain secure. Locking up your KAIA tokens supports validators, secures the network, earns you staking rewards based on the amount and duration of your stake, and gives you a say in governance and a way of providing passive income.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Bridging: One of Kaia’s standout features is its cross-chain bridge, which lets users transfer assets between different blockchains. Bridging refers to the process of transferring assets like cryptocurrencies or NFTs and data between different blockchain networks. Think of it like this: imagine you have money in a bank account in one country and want to use it in another. Bridging is a secure and efficient way to transfer money across borders. Kaia interoperability means users aren’t limited to just one blockchain, they can tap into opportunities across the entire DeFi space.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decentralized Exchanges (DEXs): Kaia integrates decentralized exchanges like DragonSwap and Kaiaswap, where you can trade cryptocurrencies directly from your wallet—no need for banks or third parties trading without middlemen. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DragonSwap: This is a high-speed DEX with deep liquidity pools.&lt;/p&gt;

&lt;p&gt;Kaiaswap: This is a low-fee trading platform optimized for efficiency.&lt;/p&gt;

&lt;p&gt;These platforms give users full control of their assets while making trading fast and secure with reduced fees.&lt;/p&gt;

&lt;p&gt;These platforms give users full control of their assets while making trading fast, secure, and cost-effective.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxak4gm3zas6rp9zb9ziv.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxak4gm3zas6rp9zb9ziv.gif" alt="sounds interesting" width="500" height="281"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's dive into the Kaia Portal and discover its exciting features&lt;/p&gt;

&lt;h2&gt;
  
  
  Kaia Portal
&lt;/h2&gt;

&lt;p&gt;At Kaia, the top priority is delivering seamless Web3 user experiences, ranging from DeFi to on-chain gaming and NFTs. User experience is strongly believed to be essential for making the benefits of Web3 available to everyone, not just those well-versed in crypto. In addition to developing a fast and highly usable Layer 1 blockchain, Kaia has pioneered a messenger wallet that eliminates the need for key management.&lt;/p&gt;

&lt;p&gt;Kaia Portal's user-friendly interface on desktop, mobile, and, soon, within LINE Messenger allows you to swap, bridge, stake, and on-ramp easily. In addition to common DeFi functions, a points-based rewards system will soon be added, where old and new users will be rewarded for participating in Missions across the Kaia DeFi and broader ecosystem.&lt;/p&gt;

&lt;p&gt;In Epoch 1 of Kaia Portal’s Missions, attractive token reward opportunities were distributed by utilizing Kaia their DeFi partners.&lt;/p&gt;

&lt;p&gt;In the subsequent Epoch 2, users who participate in missions involving the Kaia Wave program will receive attractive rewards.&lt;/p&gt;

&lt;p&gt;We still have other ways Kaia incentivises their users, including builders, developers and partners, making the ecosystem the place to be.&lt;/p&gt;

&lt;h4&gt;
  
  
  Kaia Portal Mission Epoch #1 Incentive Design
&lt;/h4&gt;

&lt;p&gt;Although the Epoch #1 missions concluded on December 25, 2024, at 3:00 PM (UTC+9), we want to provide an overview of what occurred and what to look forward to in Epoch #2. It was designed to boost liquidity and user engagement within the Kaia ecosystem. Up to 50 million KAIA tokens were allocated, alongside participating projects. After successfully completing the missions, participants earned points that can be converted into vested KAIA tokens and project tokens once the Epoch ends.&lt;/p&gt;

&lt;p&gt;In Epoch 1, the missions revolved around providing liquidity to Kaia DeFi protocols, and the rewards were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kaia points&lt;/li&gt;
&lt;li&gt;Points from participating projects&lt;/li&gt;
&lt;li&gt;D2I program rewards&lt;/li&gt;
&lt;li&gt;Yield from DeFi protocols&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal was to build new applications and DeFi use cases on Kaia, expanding the range of available assets and supporting increased volume. This would result in higher fees for liquidity providers and boost ecosystem trading activity, creating a flywheel effect in which increased activity and liquidity enhance the overall ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maximum Transparency&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While many point systems may be opaque about their reward calculations, Kaia Portal Missions are designed to be maximally transparent, from campaign duration to point calculation formulas. Kaia users deserve nothing less.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Campaign Duration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The missions officially began on September 26th and went on for the following three months. During this period, additional airdrop opportunities, new participating projects, and asset boosts were introduced with each Epoch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Early Adopters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For participants in the missions between August 29th and September 26th, even with a deposit of just $1 into any DeFi protocol listed in the Mission tab, the corresponding wallet qualified for the Early Adopter boost which added a 1.2x bonus multiplier to all points earned thereafter.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rewards&lt;/strong&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Kaia Rewards
&lt;/h4&gt;

&lt;p&gt;Up to 20 million, KAIA was awarded to general participants based on milestones. Wallets that participated in the FGP-23 voting in the existing Finschia ecosystem received up to 30 million KAIA. This reward pool is separate from the general participants’ pool and is exclusively for wallets that voted in FGP-23. Users with long-term on-chain contributions in the Finschia ecosystem receive a weighted reward of 10 million KAIA by participating in the Kaia Portal Missions, based on their contributions.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;25M KAIA (10M for general participants / 15M for FGP-23 participants) allocated for the points airdrop&lt;/li&gt;
&lt;li&gt;12.5M KAIA (5M additional KAIA for general participants / 7.5M KAIA for FGP-23 participants) unlocked at $100M TVL&lt;/li&gt;
&lt;li&gt;12.5M KAIA (5M additional KAIA for general participants / 7.5M KAIA for FGP-23 participants) unlocked at $150M TVL&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The pool for FGP-23 participants does not overlap with the general participant pool.&lt;/p&gt;

&lt;h4&gt;
  
  
  Vesting
&lt;/h4&gt;

&lt;p&gt;Tokens converted at the end of the campaign were distributed over six months. When the campaign ends and a user claims point conversion the Kaia Tokens will have a 6-month vesting period.&lt;/p&gt;

&lt;h4&gt;
  
  
  Partner Project Rewards
&lt;/h4&gt;

&lt;p&gt;All participants received points from each partner in their respective Portal Mission, the criteria for points provision vary by partner. Participating projects in Kaia Portal Missions are required to have been audited by professional auditors and verified protocols, to guarantee safe participation with confidence.&lt;/p&gt;

&lt;h4&gt;
  
  
  Reward Distribution
&lt;/h4&gt;

&lt;p&gt;The rewards for Epoch #1 are distributed over six instalments from January 7 to June 7, with payments made on the 7th of each month. The distribution breakdown is as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Installments 1–4: 15% each&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Installments 5–6: 20% each&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Participants can claim their rewards anytime, with the final claim period ending on June 30, 2025. For those who find monthly claims inconvenient, they can claim all rewards in one go after the sixth instalments have been distributed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzu27l3cidwtm0igv8li.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyzu27l3cidwtm0igv8li.gif" alt="can't wait" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For existing FNSA long-term stakers, the 10 million KAIA allocated under the “KAIA On-chain Contributor Rewards Guidelines” will be combined with the point rewards for distribution.&lt;/p&gt;

&lt;p&gt;As Epoch 2 approaches, anticipation is building for new developments and enhancements within the Kaia ecosystem. With a strong foundation already in place, this next phase is expected to bring improved features, expanded opportunities, and greater rewards for participants, further solidifying Kaia’s position in the DeFi space.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxilsg0k522sin8z04eah.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxilsg0k522sin8z04eah.gif" alt="what to expect" width="540" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Connecting with platforms like KakaoPay, LINE, and Telegram mini-apps will drive mass adoption by making DeFi more accessible to everyday users.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ongoing collaborations with decentralized exchanges (DEXs) will improve liquidity and trading efficiency, making swaps faster and more seamless and  the introduction of derivatives and advanced investment tools will attract institutional investors and expand trading opportunities &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Exploring the Kaia Portal
&lt;/h3&gt;

&lt;p&gt;The Kaia portal also lets us do the following: sending KAIA from Binance to your wallet, bridging from another chain to Kaia, depositing into a DeFi Pool and earning points (Point Farming Tip: FNSA &amp;gt; KAIA Swap).&lt;/p&gt;

&lt;h3&gt;
  
  
  Bridging on the Kaia portal
&lt;/h3&gt;

&lt;p&gt;Let's see how it's done using a Kaia Portal example, go to this link to access the portal 👉🏿 &lt;a href="https://portal.kaia.io/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We start with checking which DEX Pool you want to provide liquidity for in Mission, For instance, if you want to provide liquidity to the &lt;code&gt;Stargate Pool&lt;/code&gt; on Capybara DEX, you need to bring in assets based on the Stargate bridge&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;We’ll bring in USDT (Stargate) assets from Ethereum.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that: Conversely, if you want to bring assets like USDT (portal from ETH) for the Stable Pool, you will need to use the Wormhole bridge to bring USDT from Ethereum.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Go to the “Bridge” tab and select the Stargate bridge.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;On the Stargate bridge webpage, connect your wallet and select the chain from which you want to bring USDT ensure it's Ethereum&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;You select Kaia as the receiving chain.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click &lt;code&gt;Transfer&lt;/code&gt;, then approve the transaction in your wallet to allow USDT to be used on Stargate. After that, the transfer from Ethereum to Kaia will proceed.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;You can always check the transfer status on LayerZero Scan.👉🏿 &lt;a href="https://layerzeroscan.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;If you don’t see the USDT (Stargate) listed in your wallet, click “Import Token” and register the USDT (Stargate) token address You can find the token addresses via the provided link 👉🏿 &lt;a href="https://portal-docs.kaia.io/english/portal-mission-token-list" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ensure that USDT is properly registered in your wallet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Portal bridge functions similarly to the above steps, and you can send tokens from other chains to Kaia through this link 👉🏿 &lt;a href="https://portalbridge.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt; &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;With the bridging process complete, let's now explore other portal features. This will include a demonstration of swapping assets and how to send KAIA from Binance to your wallet.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Swapping
&lt;/h3&gt;

&lt;p&gt;Swapping refers to the process of exchanging one cryptocurrency for another. It primarily occurs on decentralized exchanges. These platforms operate without intermediaries, allowing users to directly trade cryptocurrencies with each other.&lt;/p&gt;

&lt;p&gt;Let's see how we can swap from FNSA to Kaia&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;FNSA -&amp;gt; KAIA&lt;/code&gt; tab within the Portal facilitates the seamless conversion of FNSA tokens to KAIA tokens, with the conversion process typically taking over 30 minutes to ensure maximum security. You can conveniently monitor the conversion status in real-time through the 'History' tab.&lt;/p&gt;

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

&lt;p&gt;For those who claimed rewards, the 40 million KAIA reward for FGP-23 voters was distributed on September 12th. It is important to note that you must link the KAIA wallet that you intend to use for the points mission. Once linked, this process cannot be undone, so we highly recommend that you link the KAIA wallet you plan to use going forward. It is necessary to understand how this works for Epoch 2&lt;/p&gt;

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

&lt;p&gt;The &lt;code&gt;Claim&lt;/code&gt; page, as shown in the image below, will become available, allowing you to claim your rewards with your previously linked KAIA wallet.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Sending KAIA from Binance to your wallet
&lt;/h3&gt;

&lt;p&gt;Binance as we know it is a global exchange, once you have a Binance wallet there's no need to register a new wallet to withdraw KAIA to a personal wallet. Something to note is you can withdraw to wallets such as Kaia Wallet, Klip, and even Metamask.&lt;/p&gt;

&lt;p&gt;The next couple of steps will guide you on how to withdraw&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start by accessing the Binance app and selecting the &lt;code&gt;Assets&lt;/code&gt; tab at the bottom. In the &lt;code&gt;Spot&lt;/code&gt; section choose Kaia or Search Kaia&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Click the &lt;code&gt;Withdraw&lt;/code&gt; button then select the &lt;code&gt;Send via Crypto Network&lt;/code&gt; as the withdrawal option&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;In the &lt;code&gt;Address field&lt;/code&gt;, paste the KAIA address of your personal wallet (Kaia Wallet, Metamask, etc.). After setting the withdrawal amount, click the “Withdraw” button and then click “Confirm” to complete the withdrawal request.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Withdrawals may take up to 30 minutes depending on the exchange’s review process. If the withdrawal is not processed smoothly, please contact the exchange’s customer support for assistance.&lt;/p&gt;

&lt;p&gt;We have seen a way to send KAIA from Binance to your personal wallet, what If we want to bridge from one chain to Kaia&lt;/p&gt;

&lt;p&gt;You can also deposit into a DeFi Pool and earn points in the following ways&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deposit to Capybara 👉🏿 &lt;a href="https://portal-docs.kaia.io/english/deposit-into-a-defi-pool-and-earn-points/deposit-to-capybara-and-earn-points" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Deposit to Dragonswap 👉🏿 &lt;a href="https://portal-docs.kaia.io/english/deposit-into-a-defi-pool-and-earn-points/deposit-to-dragonswap-and-earn-points" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Deposit to Kaiaswap 👉🏿 &lt;a href="https://portal-docs.kaia.io/english/deposit-into-a-defi-pool-and-earn-points/deposit-to-kaiaswap-and-earn-points" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Strategies for High APR and Incentives
&lt;/h3&gt;

&lt;p&gt;Want to boost your earnings and get the best Annual Percentage Rates on the Kaia Portal? Here are some key strategies to help you make the most of your tokens&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Choosing high-yield pools because not all liquidity pools are created equal and some offer higher rewards based on trading volume and demand. It is better to research and stake where the returns are the best and stay informed on APR rates, and new features, as reward structures can change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Simply participating in promotions since Kaia often runs bonus events and special promotions that offer extra rewards. Stay on the lookout for limited-time staking boosts and liquidity incentives.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don’t put all your KAIA in one basket! Spreading your stake across multiple pools or validators helps balance risk while maximizing potential returns.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your staked KAIA gives you voting power, use it to participate in governance that helps shape the ecosystem, which can lead to better rewards and long-term growth&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We can also explore interesting ways to be part of the Kaia ecosystem through Grants and Bounties&lt;/p&gt;

&lt;h3&gt;
  
  
  Grants and Bounties
&lt;/h3&gt;

&lt;p&gt;You can build projects that drive the adoption and advancement of Kaia. You can begin using the Guidelines below&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify the potential of your projects&lt;/li&gt;
&lt;li&gt;Prepare a detailed proposal&lt;/li&gt;
&lt;li&gt;Submit your project&lt;/li&gt;
&lt;li&gt;Engage with the community&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Types of Grant
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://docs.kaia.io/learn/token-economy/#kaia-ecosystem-fund" rel="noopener noreferrer"&gt;Kaia Ecosystem Fund (KEF)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The KEF is dedicated to fostering Kaia ecosystem services and developer communities. All proposals aiming to draw from the KEF will require approval from the Kaia Governance Council via on-chain voting for maximum transparency.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.kaia.io/learn/token-economy/#kaia-infrastructure-fund" rel="noopener noreferrer"&gt;Kaia Infrastructure Fund (KIF)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The KIF is allocated to support the growth of new GCs, develop key services, and manage foundation operations. The fund operates autonomously and transparently, ensuring that resources are effectively directed towards the ecosystem’s development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.kaia.io/iok" rel="noopener noreferrer"&gt;IOK&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The IOK program is designed to contribute towards seamless builder onboarding by providing pragmatic, go-to-market support across the technical, and business aspects for dApp developers. With over 150+ partners across 10+ categories among global top-tier players. This program has two classifications to benefit from, one for developers and one for partners&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For Developers&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Time and Cost Savings: DApps created using Kaia can save time and costs by finding reliable partners through the program.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Focus on product development: DApps created using Kaia can save time and costs by finding reliable partners through the program.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Networking Opportunities: Developers can accumulate excellent references over time, enhancing their reputation in the industry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Quality services: DApps can receive industry-leading quality services at reasonable prices.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;For Partners&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Building references: Partners can accumulate excellent references over time, enhancing their reputation in the industry.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Attracting and retaining customers: Partners can consistently attract and retain customers.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Networking Opportunities: Partners can also take advantage of networking opportunities with top-tier players.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Early Communication: Partners have the first communication opportunity with a number of dApps that are onboarding to the Kaia Chain.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://medium.com/klaytn/introducing-the-dragon-defi-initiative-2733b1d64896" rel="noopener noreferrer"&gt;D2l(Dragon DeFi Initiative)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The D2I(Dragon DeFi Initiative) program is an incentive program to foster a strong DeFi ecosystem on Kaia. The current D2I program prioritizes the discovery and support of public infrastructure, such as decentralized exchanges (DEXs) and lending protocols, which are core to any DeFi ecosystem. This means DApps that adopt innovative structures, such as on-chain order books and hybrid DEXs, as well as existing ecosystem participants that meet the requirements of D2I are also eligible for the program.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bounty Program
&lt;/h3&gt;

&lt;p&gt;You can get widespread recognition from the team and Kaia ecosystem and earn rewards based on the severity and impact of the bugs and build a track record to explore more opportunities with Kaia projects&lt;/p&gt;

&lt;h4&gt;
  
  
  Type of Bounties
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;Bug Bounties&lt;/strong&gt;&lt;br&gt;
Developers can earn up to $20K by finding protocol bugs and vulnerabilities. To get started just simply visit 👉🏿&lt;a href="https://github.com/kaiachain/kaia-dapp-mono/tree/main/bug-bounty" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dev Bounties&lt;/strong&gt;&lt;br&gt;
Developers can earn up to $100K by creating tools, applications, and resources that enhance the Kaia ecosystem. To get started just simply visit 👉🏿&lt;a href="https://dorahacks.io/org/kaiachain" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In conclusion, Kaia presents a promising vision for a gateway to the brave new Web3 world in Asia. By exploring its innovative technology, utilizing the user-friendly Kaia Portal, and participating in the incentivized ecosystem, users can actively contribute to the growth of this exciting project.&lt;/p&gt;

&lt;p&gt;For the latest updates and community engagement, follow and connect with Kaia on the following links&lt;/p&gt;

&lt;p&gt;X: 👉🏿 &lt;a href="https://x.com/kaiachain?lang=en" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
Telegram: 👉🏿 &lt;a href="https://t.me/KaiaChain_EN" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
Discord: 👉🏿 &lt;a href="https://discord.com/invite/kaia" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
Visit the official Kaia &lt;a href="https://www.kaia.io/" rel="noopener noreferrer"&gt;website&lt;/a&gt; and &lt;a href="https://portal.kaia.io/" rel="noopener noreferrer"&gt;Portal&lt;/a&gt; to learn more and get involved.&lt;/p&gt;

</description>
      <category>blockchain</category>
      <category>web3</category>
    </item>
    <item>
      <title>Building On Mina: A guide to writing smart contract implementing Merkle Trees using 01js</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Sat, 01 Feb 2025 20:15:09 +0000</pubDate>
      <link>https://forem.com/babalasisi/building-on-mina-a-guide-to-writing-smart-contract-implementing-merkle-trees-using-01js-27fk</link>
      <guid>https://forem.com/babalasisi/building-on-mina-a-guide-to-writing-smart-contract-implementing-merkle-trees-using-01js-27fk</guid>
      <description>&lt;p&gt;This article will explore Merkle Trees within the Mina ecosystem, demonstrating their practical application with a step-by-step creation of a Voting Zk App.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;A blockchain consists of a chain of blocks, with each block containing one or more transactions. Each block is identified by a cryptographic hash representing its contents, including transactions and metadata.&lt;/p&gt;

&lt;p&gt;Within a block, transactions are structured using a Merkle tree, where each transaction is represented by a hash. These transaction hashes serve as the leaves of the tree. Each pair of transaction hashes is recursively hashed together until a single root hash, called the Merkle root, is obtained. This Merkle root, along with other block metadata, is then included in the block header, ensuring data integrity and efficient verification.&lt;/p&gt;

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

&lt;p&gt;In Mina, zkApp accounts can only store a limited amount of data to prevent bloating. Hence, need for a Merkle tree, which allows the referencing of off-chain data by storing only a single hash on-chain, thereby enabling Mina to maintain its succinctness.&lt;/p&gt;

&lt;p&gt;The Merkle tree root summarizes and verifies the integrity of a set of data and is used to prove that some data exists in the Merkle tree, the root is considered a compact representation of a large pool of data so this allows an efficient verification and confirmation of data integrity inside the blockchain system.&lt;/p&gt;

&lt;p&gt;Another benefit of Merkle trees is the witness, also known as a Merkle proof or Merkle path. The witness is the path from one specific leaf node to the very top of the tree which is the root. Merkle witnesses are proofs of inclusion that prove that one specific piece of data&lt;/p&gt;

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

&lt;p&gt;You can reference large amounts of off-chain data and prove the inclusion of very specific parts of that data with only a small hash - the root - and a witness.&lt;/p&gt;

&lt;p&gt;Let's start building. &lt;/p&gt;

&lt;p&gt;Imagine we have a zkApp where users can vote for their favourite NFTs. Each vote increases the NFT’s count, and once an NFT reaches a certain number of votes, it can claim a reward. But storing all this data on-chain isn’t practical with so many NFTs and voters—it would quickly run out of space.&lt;/p&gt;

&lt;p&gt;We make use Merkle trees to keep NFT vote data off-chain while still allowing the smart contract to verify and update votes securely.&lt;/p&gt;

&lt;p&gt;We'll take the first step by installing the &lt;code&gt;zkapp-cli&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g zkapp-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After we have that installed we'll enter this command to create a project&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zk project votingNft
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We'll have the choice to select one of the options in the image below, navigate the options and select &lt;code&gt;none&lt;/code&gt;&lt;/p&gt;

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

&lt;p&gt;After that has been selected, the project will be created, after it's done we will navigate to the folder from the terminal using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd votingNft
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to remove some files that have been generated along with the project because we won't be using them. With this command, we'll delete the files&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd src
rm Add.test.ts Add.ts interact.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then while still in the &lt;code&gt;src&lt;/code&gt; directory, we run this command to create the necessary files we exit the &lt;code&gt;src&lt;/code&gt; directory&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;touch Voting.ts Voting.test.ts

//exit the directory
cd ..
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Navigate to index.ts and replace the content with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Voting } from './Voting.js';

export { Voting };

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are ready to start building so let's open the &lt;code&gt;Voting.ts&lt;/code&gt; file, we import the necessary packages that we need to get this ball rolling&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Field, SmartContract, state, State, method, Struct, MerkleWitness, Poseidon, Provable } from "o1js";
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We need to define a tree height, The tree height decides how many layers of grouping are needed, affecting how quickly and easily data can be verified and we'll create a corresponding Merkel Witness class&lt;/p&gt;

&lt;p&gt;The height states how many leaves we can have when specifying the witness, we'll see this in action when taking a look at the data in the tree&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export const treeHeight = 4

export class MerkleWitness4 extends MerkleWitness(treeHeight){}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now let's create our main Voting smart contract and initialize it&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export class Voting extends SmartContract{
    // declare state variables
    @state(Field) voters = State&amp;lt;Field&amp;gt;()
    @state(Field) winningNft = State&amp;lt;Field&amp;gt;()
    @state(Field) winningVotes = State&amp;lt;Field&amp;gt;()

    // root of the merkle tree
    @state(Field) treeRoot = State&amp;lt;Field&amp;gt;()

    init(){
      super.init()
      this.voters.set(Field(1))
    }

   // initialize the state on the contract
       @method async initState(initialRoot: Field){
     this.treeRoot.set(initialRoot)
   }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We define the state variables to hold the &lt;code&gt;voters&lt;/code&gt;, &lt;code&gt;winningNft&lt;/code&gt;, &lt;code&gt;winningVotes&lt;/code&gt; and the &lt;code&gt;treeRoot&lt;/code&gt;, and then we initialize the state of the contract. We continue by creating a &lt;code&gt;Class&lt;/code&gt; for the NFT and create a method to vote.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export class NFT extends Struct({nftName: Field, nftCreator: Field, nftVotes: Field}){

//method for the vote
vote(){
  this.nftVotes = this.nftVotes.add(1)
 }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;First, we verify that the NFT is present in the Merkle tree. Once confirmed, the voting process takes place. After casting the vote, we check if the currently voted-on NFT has surpassed the current winner in votes. If it has, we update the winner. Otherwise, the existing winning NFT remains unchanged. Finally, the Merkle tree is updated to reflect any changes made to the NFT. we implement the method &lt;code&gt;voteForNft&lt;/code&gt; to handle this entire process.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export class Voting extends SmartContract{
  // declare state variables
  @state(Field) voters = State&amp;lt;Field&amp;gt;()
  @state(Field) winningNft = State&amp;lt;Field&amp;gt;()
  @state(Field) winningVotes = State&amp;lt;Field&amp;gt;()

  // root of the merkle tree
  @state(Field) treeRoot = State&amp;lt;Field&amp;gt;()
     init(){
       super.init()
       this.voters.set(Field(1))
     }

  // initialize the state of the contract
  @method async initState(initialRoot: Field){
    this.treeRoot.set(initialRoot)
   }

 //method to vote for the nft
 @method async voteForNft(nft: NFT, witness: MerkleWitness4){

  //Get the tree root and see if the nft is in it
  const treeRoot = this.treeRoot.getAndRequireEquals()

  // check to see whether the nft is in the merkle tree, the way we check to see if the nft is within the tree is by the witness        

  const nftRoot = witness.calculateRoot(Poseidon.hash(NFT.toFields(nft)))

  // check if the nft is in the tree, if it is not in the tree, the transaction will fail and the state will not be updated

   nftRoot.assertEquals(treeRoot)

  //if the nft is in the tree then the nft can be voted on
  nft.vote()

  //update the tree with the new nft hash
  const newNftRoot = witness.calculateRoot(Poseidon.hash(NFT.toFields(nft))
this.treeRoot.set(newNftRoot)

        this.voters.set(this.voters.getAndRequireEquals().add(1)) //we want to increment the number of voters after a vote has been cast

//we are going to check if the nft has more votes than the current winning nft then we will update the winning nft

  const winningNft = this.winningNft.getAndRequireEquals()
  const winningVotes = this.winningVotes.getAndRequireEquals()

  const newWinningNft = Provable.if(winningVotes.lessThan(nft.nftVotes), nft.nftName, winningNft)
  const newWinningVotes = Provable.if(winningVotes.lessThan(nft.nftVotes), nft.nftVotes, winningVotes)

this.winningNft.set(newWinningNft)
this.winningVotes.set(newWinningVotes)
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This method verifies, votes, and updates the winning NFT on the Merkle tree.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;First, we verify the nft in the tree by retrieving the Merkle root, hashing with Poseidon, and checking if it exists in the tree via a Merkle witness.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We cast the Vote &amp;amp; Update Tree, If it is valid, we call &lt;code&gt;nft.vote()&lt;/code&gt;, and update the Merkle root, setting a new root in this.treeRoot.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We increase the voter count by increasing &lt;code&gt;voters&lt;/code&gt; to track the number of participants.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally we update the winning NFT, using &lt;code&gt;Provable.if&lt;/code&gt; to compare votes, and update &lt;code&gt;winningNft&lt;/code&gt; and &lt;code&gt;winningVotes&lt;/code&gt;, if the new NFT has more votes.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Poseidon&lt;/strong&gt;: Poseidon is a hash function for zero knowledge-proof systems, we use it because it only stores field variables but since the nft is a &lt;code&gt;struct&lt;/code&gt; we have to pass it as fields&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this, we have our smart contract ready, and now we can test our smart contract.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fva8o8y5vp8ttn1rv4qyu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fva8o8y5vp8ttn1rv4qyu.gif" alt="let's go" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll navigate to our &lt;code&gt;Voting.test.ts&lt;/code&gt; file and start adding some code, the first thing we need to do is import the necessary packages and files&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { AccountUpdate, CircuitString, Field, MerkleTree, Mina, Poseidon, PrivateKey, PublicKey } from 'o1js';
import { treeHeight, NFT, MerkleWitness4, Voting } from './Voting';

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we set up the tests with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let proofsEnabled = false;

function createNFT(nftName: string, nftCreator: string) {
   const nft = new NFT({
        nftName: Poseidon.hash(CircuitString.fromString(nftName).values.map(char =&amp;gt; char.toField())),
        nftCreator: Poseidon.hash(CircuitString.fromString(nftCreator).values.map(char =&amp;gt; char.toField()),
        nftVotes: Field(0)
    });
    return nft;
}

function createTree(): MerkleTree {
    const tree = new MerkleTree(treeHeight);

    const nft0 = createNFT("nft0", "creator0");
    const nft1 = createNFT("nft1", "creator1");
    const nft2 = createNFT("nft2", "creator2");
    const nft3 = createNFT("nft3", "creator3");

    tree.setLeaf(0n, Poseidon.hash(NFT.toFields(nft0)));
    tree.setLeaf(1n, Poseidon.hash(NFT.toFields(nft1)));
    tree.setLeaf(2n, Poseidon.hash(NFT.toFields(nft2)));
    tree.setLeaf(3n, Poseidon.hash(NFT.toFields(nft3)));

    return tree;
}


describe('Voting', () =&amp;gt; {
    let deployerAccount: Mina.TestPublicKey,
    deployerKey: PrivateKey,
    senderAccount: Mina.TestPublicKey,
    senderKey: PrivateKey,
    zkAppAddress: PublicKey,
    zkAppPrivateKey: PrivateKey,
    zkApp: Voting,
    tree: MerkleTree;

    beforeAll(async () =&amp;gt; {
        if (proofsEnabled) await Voting.compile();
    });

    beforeEach(async () =&amp;gt; {
        const Local = await Mina.LocalBlockchain({ proofsEnabled });
        Mina.setActiveInstance(Local);
        [deployerAccount, senderAccount] = Local.testAccounts;
        deployerKey = deployerAccount.key;
        senderKey = senderAccount.key;

        zkAppPrivateKey = PrivateKey.random();
        zkAppAddress = zkAppPrivateKey.toPublicKey();
        zkApp = new Voting(zkAppAddress);
        tree = createTree();
    });

async function localDeploy() {
        const txn = await Mina.transaction(deployerAccount, async () =&amp;gt; {
            AccountUpdate.fundNewAccount(deployerAccount);
            await zkApp.deploy();
            await zkApp.initState(tree.getRoot());
        });
        await txn.prove();
        await txn.sign([deployerKey, zkAppPrivateKey]).send();
    }
})
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this test setup, we use the &lt;code&gt;createTree&lt;/code&gt; function to generate a Merkle tree with dummy data for the NFTs that we will vote on.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;proofsEnabled&lt;/code&gt; flag controls whether zero-knowledge proofs will be generated. We set it to false during the initial stages of development to speed up the process.&lt;/p&gt;

&lt;p&gt;We define the &lt;code&gt;localDeploy&lt;/code&gt; function, which is executed before each test suite to deploy the smart contract and initialize its state."&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;describe&lt;/code&gt; block in the test is used to group the related tests, providing a clear structure for our testing process.&lt;/p&gt;

&lt;p&gt;For our first test suite, we will generate and deploy the contract&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it('generates and deploys the contract', async () =&amp;gt; {
        await localDeploy();
        const treeRoot = zkApp.treeRoot.get();
        expect(treeRoot).toEqual(tree.getRoot());
    });

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our next step is to check if the votes are incremented correctly&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; it('votes on the Nft are incremented correctly', async () =&amp;gt; {
        await localDeploy();

        const nft1 = createNFT("nft1", "creator1");
        nft1.vote();
        expect(nft1.nftVotes).toEqual(Field(1));
    });

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, let's test whether the voting process for an NFT works correctly.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it('correctly votes for NFT', async () =&amp;gt; {
        await localDeploy();

        const nft1 = createNFT("nft1", "creator1");
        const witness = new MerkleWitness4(tree.getWitness(1n));

        const txn = await Mina.transaction(senderAccount, async () =&amp;gt; {
            zkApp.voteForNft(nft1, witness);
        });

        await txn.prove();
        await txn.sign([senderKey]).send();

        const voters = zkApp.voters.get();
        expect(voters).toEqual(Field(1));

        const winningNft = zkApp.winningNft.get();
        expect(winningNft).toEqual(nft1.nftName);

        const winningVotes = zkApp.winningVotes.get();
        expect(winningVotes).toEqual(Field(1));

        nft1.vote();
        tree.setLeaf(1n, Poseidon.hash(NFT.toFields(nft1)));
        const treeRoot = zkApp.treeRoot.get();
        expect(treeRoot).toEqual(tree.getRoot());
    });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We've just verified that the NFT data is present in the tree using the witness, allowing us to correctly cast a vote. Next, we'll test a scenario where we attempt to vote on an NFT not present in the tree, to observe the system's behavior when provided with incorrect data.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it('does not allow voting for song not in the tree', async () =&amp;gt; {
        await localDeploy();

        const nft12 = createNFT("nft12", "creator1");
        const witness = new MerkleWitness4(tree.getWitness(1n));

        await expect(async () =&amp;gt; {
            const txn = await Mina.transaction(senderAccount, async () =&amp;gt; {
                zkApp.voteForNft(nft12, witness);
            });

            await txn.prove();
            await txn.sign([senderKey]).send();
        }).rejects.toThrow();
    });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the final test suite, we'll cast votes for multiple NFTs, including voting for one twice, to determine the winner.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;it('correctly votes for two songs and chooses the right winner', async () =&amp;gt; {
        await localDeploy();
        const nft1 = createNFT("nft1", "creator1");
        const nft2 = createNFT("nft2", "creator2");

        let witness = new MerkleWitness4(tree.getWitness(0n));
        let txn = await Mina.transaction(senderAccount, async () =&amp;gt; {
            zkApp.voteForNft(nft1, witness);
        });
        await txn.prove();
        await txn.sign([senderKey]).send();
        nft1.vote();
        tree.setLeaf(0n, Poseidon.hash(NFT.toFields(nft1)));

        let witness2 = new MerkleWitness4(tree.getWitness(1n));
        txn = await Mina.transaction(senderAccount, async () =&amp;gt; {
            zkApp.voteForNft(nft2, witness2);
        });
        await txn.prove();
        await txn.sign([senderKey]).send();
        nft2.vote();
        tree.setLeaf(1n, Poseidon.hash(NFT.toFields(nft2)));

        witness = new MerkleWitness4(tree.getWitness(0n));
        txn = await Mina.transaction(senderAccount, async () =&amp;gt; {
            zkApp.voteForNft(nft1, witness);
        });
        await txn.prove();
        await txn.sign([senderKey]).send();
        nft1.vote();
        tree.setLeaf(0n, Poseidon.hash(NFT.toFields(nft1)));

        const voters = zkApp.voters.get();
        expect(voters).toEqual(Field(3));

        const winningSong = zkApp.winningNft.get();
        expect(winningSong).toEqual(nft1.nftName);

        const winningVotes = zkApp.winningVotes.get();
        expect(winningVotes).toEqual(Field(3));

        const treeRoot = zkApp.treeRoot.get();
        expect(treeRoot).toEqual(tree.getRoot());
    });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This finalizes our test, after this is done we run the tests using any of these commands&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;//run all tests

npm run test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;//run in watch mode&lt;/p&gt;

&lt;p&gt;npm run testw&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;After running our tests, we can deploy our smart contract.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmio10frha0pd2fgs43xr.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmio10frha0pd2fgs43xr.gif" alt="at last" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To deploy we first have to config the zkApp, we will go to our terminal and run this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zk config
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It asks the following questions to configure your zkApp &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a name: Enter any desired name for your application.&lt;/li&gt;
&lt;li&gt;Choose the target network: Select &lt;code&gt;testnet&lt;/code&gt; for testing purposes.&lt;/li&gt;
&lt;li&gt;Set the Mina GraphQL API URL to deploy to: Use &lt;a href="https://api.minascan.io/node/devnet/v1/graphql" rel="noopener noreferrer"&gt;https://api.minascan.io/node/devnet/v1/graphql&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;Set transaction fee to use when deploying: Set the fee to 1
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmqxjtc3imq64nyqzld6q.png" alt="Image description" width="800" height="329"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Choose an account to pay transaction fee: Choose &lt;code&gt;Create a new fee payer key pair&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create an alias for this account: Assign a name to the feepayer account (this can be anything). &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what we get after all the necessary fields are filled&lt;/p&gt;

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

&lt;p&gt;Ensure to fund your account with the provided faucet link, when you open the link you should have something like this. It is necessary to fund your account to ensure the deployment is successful&lt;/p&gt;

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

&lt;p&gt;After we have this completed, we run the command &lt;code&gt;zk deploy voting&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zk deploy voting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A single question will be asked to confirm the deployment transaction and we just have to enter &lt;code&gt;yes&lt;/code&gt;, and we will have feedback that looks like this which also holds the deployment link&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By leveraging Merkle trees, zkApps can handle large-scale data efficiently while keeping Mina’s blockchain lightweight and succinctness, keeping data off-chain while still allowing secure verification. &lt;/p&gt;

&lt;p&gt;Beyond NFT voting, they can be used for private identity verification, membership proofs, leaderboards, and decentralized reputation systems. &lt;br&gt;
With this knowledge, go forth and build amazing applications that are powered by the efficiency of Mina's succinct blockchain.&lt;/p&gt;

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

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>zkapps</category>
      <category>mina</category>
    </item>
    <item>
      <title>Mantle Network: The Modular Layer-2 Gem</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Sat, 25 Jan 2025 11:54:30 +0000</pubDate>
      <link>https://forem.com/babalasisi/mantle-network-the-modular-layer-2-gem-5147</link>
      <guid>https://forem.com/babalasisi/mantle-network-the-modular-layer-2-gem-5147</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Mantle Network is a high-performance Ethereum layer 2 network built with a modular design that ensures low fees and high security. Mantle Network is the first modular layer 2 solution built for hyper-scaled dapps. Execution, data availability and transaction finality are in separate layers which enables increased transaction throughput which reduces the fees and reinforces the security and decentralized nature of Ethereum.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Features of Mantle
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Built as a Rollup&lt;/strong&gt;: It leverages Ethereum validators to reduce gas fees, lower latency, and boost throughput, with customizable settings for near real-time transaction confirmations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modular Architecture&lt;/strong&gt;: It operates as a modular chain, separating execution, consensus, settlement, and storage into distinct layers. It features an EVM-compatible execution layer, Ethereum-based consensus and settlement layers, and an external data availability component Mantle DA, transitioning to EigenDA upon its mainnet launch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Secured by Ethereum&lt;/strong&gt;: With L2 state transitions verified by Ethereum validators, it undergoes the same consensus and settlement processes as L1 transactions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Modular Data Availability&lt;/strong&gt;: It uses independent data availability modules, like Mantle DA powered by EigenDA technology from EigenLayer, offering potential cost savings of over 90% compared to on-chain L1 solutions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before diving into the history of Mantle and how it came about, let's define some key concepts that will be discussed throughout this article. This will help those new to the web3 ecosystem better understand the information presented&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxevxjxtx48sdeegz0ar7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxevxjxtx48sdeegz0ar7.gif" alt="Let's have it" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;L1 (Layer 1)&lt;/strong&gt;: The base layer of a blockchain network (like Bitcoin or Ethereum), responsible for core functions like security and consensus.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;L2 (Layer 2)&lt;/strong&gt;: A secondary network built on top of an L1 blockchain, designed to improve scalability and reduce transaction costs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rollups&lt;/strong&gt;: An L2 solution that processes transactions off-chain and submits a summarized record back to the L1 for security.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;EigenLayer&lt;/strong&gt;: A protocol that allows Ethereum stakers to "restake" their ETH to secure other protocols and applications built on top of Ethereum&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;On-chain&lt;/strong&gt;: Activities or data that occur directly on the blockchain, ensuring transparency, security, and immutability.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Off-chain&lt;/strong&gt;: Activities or data that happen outside the blockchain, often for efficiency or cost reasons, with the results later reflected on-chain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;ZK proofs&lt;/strong&gt;: ZK proofs also known as Zero-knowledge are cryptographic methods that allow one party to prove the truth of a statement to another without revealing any additional information beyond the validity of the statement.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Overview and History of Mantle
&lt;/h2&gt;

&lt;p&gt;Mantle was created by BitDAO, a DAO launched by the centralized exchange Bybit to support and empower builders. In February 2023, the Mantle core team proposed a $200 million fund on BitDAO's governance forum to grow the Mantle ecosystem. Half of the funding ($100 million) would come from the BitDAO treasury, with the remaining $100 million from external investors such as Pantera Capital, Spartan, QCP Capital, and Dragonfly. The fund is set to drive ecosystem growth.&lt;/p&gt;

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

&lt;p&gt;In May 2023, a proposal to rebrand Mantle Network and BitDAO under the unified Mantle brand was approved, with 235 million $BIT(now $MNT) votes in favour and only 988 votes against. The goal was to adopt a "one brand, one token" approach, creating a unified ecosystem with a stronger product focus.&lt;/p&gt;

&lt;p&gt;As part of the rebrand, the initial rollup component was officially named the Mantle Network, while BitDAO was rebranded as Mantle Governance. Mantle has its native utility token, $MNT, which is used for governance, staking, and paying transaction fees on the network.&lt;/p&gt;

&lt;p&gt;The Mantle team includes key figures such as Ben Zhou, CEO and co-founder of Bybit, and Jordi Alexander, Chief Alchemist of Mantle.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Mantle Network?
&lt;/h2&gt;

&lt;p&gt;Like all other optimistic L2s, Mantle Network seamlessly integrates with the Ethereum virtual machine allowing transactions to be offloaded from the mainnet, Mantle's uniqueness stems from its modular architecture that combines optimistic rollups with an enhanced data availability solution through EigenLayer which allows it to execute multiple transactions at once, establish efficient communication with the main network, and ensure that the network is not overrun by malicious blocks respectively.&lt;/p&gt;

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

&lt;p&gt;Optimistic rollups group transactions into batches to be submitted to the Ethereum mainnet reducing load and gas fees. The data availability is made possible with EigenDA, the game-changing feature which is the first service built on EigenLayer. This allows Mantle to inherit Ethereum's security while significantly reducing gas fees, making transactions up to 70% cheaper.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40ca1esw4p2wg30dbocj.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F40ca1esw4p2wg30dbocj.gif" alt="nodding in agreement" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mantle Network's Architecture
&lt;/h2&gt;

&lt;p&gt;Mantle v2 Tectonic processes transactions through a sequence of modules that interact with the EigenDA-supported Mantle Data Availability (DA). Users send signed transactions, which are packed into blocks by the sequencer. The op-batcher encodes and compresses the data, then stores it in the DA module before submitting validity information to the Ethereum L1 contract. Similarly, op-proposers send state root data to the L1 contract. Rollup transaction data is stored on Mantle DA, where verifiers can check its validity.&lt;/p&gt;

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

&lt;p&gt;Mantle v2 Tectonic also introduces a transaction pool for temporary storage of transactions, improving transaction packing. The pool supports EIP-1559, letting users control transaction speed through priority fees. The pool is designed to be private, and transactions are processed based on their base and priority fees. In Mantle v2 Tectonic, $MNT serves as the native token for the system. This aims to provide users with a more flexible and efficient transaction experience, laying a solid foundation for the ecosystem's future development.&lt;/p&gt;

&lt;h3&gt;
  
  
  Transaction Lifecycle
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The Initiation Users and dApps interact with the Mantle Network by connecting to the sequencer node's RPC endpoint. Users typically connect their wallets, while dApps integrate the &lt;a href="https://sdk.mantle.xyz/index.html" rel="noopener noreferrer"&gt;Mantle SDK&lt;/a&gt;. They create requests with the recipient's address and transfer amount, ensuring they have enough balance to cover the required transaction fees. For wallets, calculating the required fee is straightforward, but dApps must perform more detailed fee calculations. After preparing the request, users or dApps sign it with their private keys and send it to Mantle, where the sequencer processes the transaction.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Handling Once the transaction is received, the Ethereum Virtual Machine (EVM) running on op-geth nodes verifies its validity, checks that fees are paid, and transitions the state accordingly. The op-proposer then submits the new Merkle root to the Ethereum L1 contract. State submission happens after a batch of transactions, rather than after each individual transaction. Pending blocks, containing updated states, wait for further processing. These blocks are combined into batches that are encoded, compressed, and sent to Ethereum for final settlement, reducing transaction costs by sharing fixed fees across multiple transactions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Storage Mantle Network uses its own Data Availability (DA) system, Mantle DA, for efficient and cost-effective storage of transaction data. op-batcher submits the encoded transaction data to Mantle DA to ensure the integrity of the network. DA nodes synchronize and make data accessible at all times, earning $MNT rewards for their services. State data is stored securely on Ethereum, where it undergoes validation through Ethereum's consensus mechanism. Once verified, the state root is recorded on Ethereum, and the transition is finalized after the challenge period (usually 7 days).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;h3&gt;
  
  
  Onchain System
&lt;/h3&gt;

&lt;p&gt;According to the docs Mantle Network's on-chain module contains a series of smart contracts that run on the blockchain to ensure decentralized and reliable execution. These contracts are responsible for handling the logic of various dApps interacting with the blockchain, as well as the interaction of the off-chain system with the on-chain system, including asset transfers, asset swaps, and so on.&lt;/p&gt;

&lt;h3&gt;
  
  
  Offchain System
&lt;/h3&gt;

&lt;p&gt;The off-chain System is another key module of the Mantle Network. It is responsible for executing specific tasks and logic in an environment outside of the blockchain, which is key to Layer 2's ability to scale L1 and provide more efficient and faster response and execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tokens in Mantle Network
&lt;/h2&gt;

&lt;p&gt;This introduces us to the world of Mantle's native token, $MNT (formerly known as $BIT), along with mUSD, Mantle's stablecoin, and mShard, a product of the partnership with Ethena.&lt;/p&gt;

&lt;h3&gt;
  
  
  MNT Token
&lt;/h3&gt;

&lt;p&gt;The MNT token is an ERC-20 token serving as both a governance and utility token within the Mantle ecosystem. It grants holders voting rights for DAO decisions and is also used to pay for gas fees. Additionally, MNT can act as a secondary collateral asset for Ethereum validators powering EigenDA, enhancing the network's security and stability. With a maximum supply of just over 6.2 billion tokens and over 3.3 billion tokens in circulation. In the Mantle v2, MNT has transitioned from an ERC-20-based design to one that uses ETH for gas fees, aligning more closely with Ethereum’s native architecture for seamless integration into its ecosystem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvepn4aff4u2qecxxnyqa.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvepn4aff4u2qecxxnyqa.gif" alt="vote matters" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mantle v2 is also introducing meta-transactions to facilitate the payment of transaction fees and provide a more flexible and smooth experience. This lets users interact without paying gas fees or waiting for transaction confirmations.&lt;/p&gt;

&lt;h3&gt;
  
  
  mUSD
&lt;/h3&gt;

&lt;p&gt;The mUSD is an exclusive rebasing-wrapped version of Ondo Finance’s yield-bearing stablecoin, USDy, designed to maintain a consistent $1 peg. Its introduction on the Mantle Network is a collaborative effort between Mantle and Ondo Finance, enabling users to directly access real-world U.S. Treasury yields. Interest is distributed to users via the rebasing mUSD token.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  mShard
&lt;/h3&gt;

&lt;p&gt;Mantle partnered with Ethena to introduce USDe, a delta-neutral synthetic dollar that doesn’t rely on traditional banking infrastructure and leverages liquidity from both centralized and decentralized exchanges. This marks Ethena’s first cross-chain deployment and is expected to see wide adoption across Mantle’s Layer 2 applications.&lt;/p&gt;

&lt;p&gt;Additionally, the Mantle Rewards Station launched with Ethena’s Shards, offers $MNT holders rewards and perks from popular Mantle ecosystem dApps. As part of the "Mantle Sharding with Ethena" event, mShard holders can redeem Ethena’s native token, $ENA, at a conversion rate of 582 mShards to 1 $ENA.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27ip6072xl16fjoeltkk.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F27ip6072xl16fjoeltkk.gif" alt="I'm interested" width="320" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To participate you can visit &lt;a href="https://rewards.mantle.xyz/mshards" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  mETH Protocol formerly Mantle LSP
&lt;/h2&gt;

&lt;p&gt;This is a permissionless, non-custodial ETH liquid staking protocol on Ethereum L1, allowing you to stake your ETH and earn competitive yields. it uses Mantle Staked Ether (mETH) as the value-accumulating receipt token. The goal of mETH is to become the most widely adopted and capital-efficient ETH staking token. To achieve this, it is integrated across multiple Mantle Layer 2 DeFi apps, core tech partners, and centralized exchanges.&lt;/p&gt;

&lt;p&gt;The concept for mETH, inspired by Lido's liquid ETH, was proposed by Jordi Alexander. He describes Mantle's liquid staking protocol as a "lighter, more modern version of Lido" and hopes it appeals to users concerned about Lido's centralization.&lt;/p&gt;

&lt;p&gt;When asked about the differences, Jordi said:&lt;/p&gt;

&lt;p&gt;"&lt;em&gt;The design is more simpler, more modern, we need to look at where Lido came from. They came from a pre-proof-of-stake world, a lot of designs for things like Rocket Pool and Lido, they had to take into consideration this previous world and merge into a complicated difficult design.&lt;/em&gt;"&lt;/p&gt;

&lt;h2&gt;
  
  
  Ecosystem
&lt;/h2&gt;

&lt;p&gt;In July 2023, the Mantle Network mainnet launched, providing developers and users access to a full ecosystem of tools and dApps, including the mainnet bridge, explorer, and safe multisig. Also, Mantle introduced its inaugural modular dynamic NFT collection in collaboration with visual artist Chen Man. Titled &lt;strong&gt;Citizens of Mantle&lt;/strong&gt;, the collection allowed around 38,000 users to acquire their own Mantle Companion NFT. To learn more you can visit &lt;a href="https://journey.mantle.xyz/en/nft" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;With a substantial treasury to incentivize builders and a transparent system that lets users track treasury activity, Mantle aims to foster innovation and growth within its ecosystem. You can also view the various dapps that have been built using Mantle &lt;a href="https://www.mantle.xyz/dapp" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Mantle Missions
&lt;/h3&gt;

&lt;p&gt;Mantle also allows users a earn various exclusive rewards by completing Mantle Ecosystem quests. To learn more you can visit &lt;a href="https://missions.mantle.xyz/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Grants
&lt;/h3&gt;

&lt;p&gt;With Mantle's aim is to foster a strong entrepreneur &amp;amp; developer community through its wide range of grant initiatives. Mantle is committed to supporting projects across all stages through Flagship Buildathon Programs &amp;amp; the Mantle Scouts Program. &lt;/p&gt;

&lt;p&gt;For teams at the pre-product stage looking for technical and go-to-market support, Mantle encourages them to join the Mantle ecosystem by applying to the  Flagship Buildathon Programs. These programs have various categories and geographic focus and happen on a rolling basis throughout the year. Top-performing teams may qualify for additional grants and ecosystem support. For individuals looking to explore this further, they can visit &lt;a href="https://www.mantle.xyz/grants" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7fl8azo6qrsg41hbyyv0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7fl8azo6qrsg41hbyyv0.gif" alt="let's go" width="480" height="272"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Bounties
&lt;/h3&gt;

&lt;p&gt;Mantle also has a bug bounty program that incentivizes security researchers to identify and report vulnerabilities in the LSP protocol. The program is open to all security researchers, regardless of experience or affiliation. Rewards are distributed according to the impact of the vulnerability based on the &lt;a href="https://immunefi.com/immunefi-vulnerability-severity-classification-system-v2-3/" rel="noopener noreferrer"&gt;Immunefi Vulnerability Severity Classification System V2.3.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx1l0ej5j3t38cwz5ssw9.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx1l0ej5j3t38cwz5ssw9.gif" alt="killing bugs" width="533" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are different categories with rewards to follow &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Critical: Max is $500,000 and the min: is $100,000.&lt;/li&gt;
&lt;li&gt;High: Max is $100,000 and the min: is $20,000.&lt;/li&gt;
&lt;li&gt;Medium: where the flat is $5,000.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To interested individuals in this field, you can visit &lt;a href="https://immunefi.com/bug-bounty/mantlelsp/information/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ZK Validity Rollup with Succinct’s SP1
&lt;/h2&gt;

&lt;p&gt;Mantle Network is revolutionizing decentralized finance by transitioning to zero-knowledge (ZK) validity rollups through Succinct’s SP1. This upgrade significantly enhances scalability, security, and efficiency, enabling one-hour transaction finality, lower costs, and seamless Ethereum compatibility.&lt;/p&gt;

&lt;p&gt;By integrating its modular architecture, EigenDA-powered data availability, and SP1’s ZK proofs, Mantle is building an institutional-grade liquidity chain for DeFi, gaming, and beyond. Developers can leverage advanced ZK technology while maintaining Ethereum’s interoperability and security standards.&lt;/p&gt;

&lt;p&gt;The testnet launches in Q1 2025, setting the stage for next-gen decentralized applications and Mantle’s role as a leader in blockchain scalability. Stay tuned for updates as Mantle drives the future of on-chain finance, to learn more and see a roadmap to follow to know what is going on you can visit &lt;a href="https://docs.mantle.xyz/network/system-information/roadmap" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Upcoming Events
&lt;/h2&gt;

&lt;p&gt;Mantle Network has various upcoming events in 2025 to allow individuals both new and existing to participate and learn more about what Mantle has to offer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Web3 Connect: An Institutional-Focused Forum, taking place in Hong Kong on February 17 by 8:00 am local time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sozu Haus Denver 2025, taking place in Denver on February 22 by 1:00 pm local time.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Digital Asset Summit 2025, taking place in New York on March 18 by 3:00 pm local time.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To register for any of these events you can visit &lt;a href="https://www.mantle.xyz/events" rel="noopener noreferrer"&gt;here&lt;/a&gt; &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In this article, we've explored the Mantle network and the rich features and incentives it offers. This is just the tip of the iceberg, as Mantle continues to evolve and incentivize builders. To learn more, visit their website &lt;a href="https://www.mantle.xyz/" rel="noopener noreferrer"&gt;here&lt;/a&gt;, follow them on X (Twitter) &lt;a href="https://x.com/0xMantle" rel="noopener noreferrer"&gt;here&lt;/a&gt;, join their Telegram &lt;a href="https://t.me/mantlenetwork" rel="noopener noreferrer"&gt;here&lt;/a&gt;, and connect on Discord &lt;a href="https://discord.com/invite/0xmantle" rel="noopener noreferrer"&gt;here&lt;/a&gt; to keep up to date and be part of the community.&lt;/p&gt;

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

</description>
      <category>web3</category>
      <category>blockchain</category>
      <category>ethereum</category>
      <category>mantle</category>
    </item>
    <item>
      <title>Mina Under the Hood: A Technical Introduction</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Sat, 18 Jan 2025 14:00:36 +0000</pubDate>
      <link>https://forem.com/babalasisi/mina-under-the-hood-a-technical-introduction-4j7i</link>
      <guid>https://forem.com/babalasisi/mina-under-the-hood-a-technical-introduction-4j7i</guid>
      <description>&lt;p&gt;In this article, we will explore Mina's tools and how they work together, allowing us to understand Mina and its underlying technology.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Mina's lightweight blockchain technology provides collaborative, reusable proof of everything, which enables an internet of true things where data is verifiable, accessible, and privacy-preserving, promoting a more open and trustworthy digital world.&lt;/p&gt;

&lt;p&gt;Mina empowers developers to build innovative digital products. Tools like 01labs and Protokit provide the necessary infrastructure, along with the zero-knowledge tech stack, which includes the Kimchi-Pickles proof system, Ouroboros Samasika POS Consensus, zkApps, Snarketplace Proof market and Snarkworkers facilitating the creation of the next generation of applications.&lt;/p&gt;

&lt;p&gt;We begin by taking a look at the zero-knowledge tech stack&lt;/p&gt;

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

&lt;h2&gt;
  
  
  &lt;strong&gt;Kimchi-Pickles proof system&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Proof systems are built specifically to prove statements, Mina's unique proof system is known for being highly efficient and composable, Pickles is Mina's proof system that creates recursive proofs which rely on a protocol called Kimchi to produce the proofs, this allows the Mina blockchain to remain of a fixed size of about 22kb. Mina Protocol is the only blockchain that offers infinite recursion.&lt;/p&gt;

&lt;p&gt;Kimchi is based on PLONK, a proof system released in &lt;a href="https://eprint.iacr.org/2019/953.pdf" rel="noopener noreferrer"&gt;2019&lt;/a&gt;, Since then, many improvements and extensions have been proposed. There’s been fflonk, turbo PLONK, ultra PLONK, plonkup, and recently plonky2. One common theme is all these protocols implement variants of PLONK.&lt;/p&gt;

&lt;p&gt;Imagine Alice wants to verify Bob solved a puzzle without revealing his solution. Traditional methods require Bob to share the solution, which isn't ideal. This is where protocols like PLONK shine&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx679zbu5yrsohptfpcp1.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx679zbu5yrsohptfpcp1.gif" alt="show me" width="550" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A program verifying the solution is transformed into two pieces: a prover and verifier "index", not actual keys.&lt;/li&gt;
&lt;li&gt;Bob uses the prover index, puzzle, and his solution to create a proof without revealing the solution.&lt;/li&gt;
&lt;li&gt;Alice verifies the proof using the verifier index. If successful, she knows Bob solved the puzzle without seeing his solution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This enables secure verification while keeping private information confidential.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Ouroboros Samasika POS Consensus&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Mina employs Ouroboros Samasika, a provably secure Proof-of-Stake (PoS) protocol. Built upon the Ouroboros family based on &lt;a href="https://cardano.org/ouroboros/" rel="noopener noreferrer"&gt;Cardano’s Ouroboros&lt;/a&gt;, Samasika enhances consensus by enabling efficient block production and eliminating the need for extensive historical checks. This ensures high security while mitigating centralization risks by resolving long-range forks without relying on trusted third parties or requiring the storage of extensive blockchain history.&lt;/p&gt;

&lt;p&gt;Like all proof of stake protocols, it requires less computing power than Bitcoin's proof of work. "Imagine Proof-of-Stake as a dart game. Your stake size determines your portion of the 'dartboard.' The larger your stake, the greater your chance of 'hitting the target' and being selected to produce the next block.&lt;/p&gt;

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

&lt;p&gt;Because people’s hold on stake changes frequently, the distribution of stake on the dartboard must change as well. &lt;/p&gt;

&lt;p&gt;In the dartboard example, the dartboard must be redrawn to recalculate the stake distribution for every epoch. Each epoch in Mina consists of 7,140 slots, and in each slot, a new dart is thrown (aka a new block is produced). As of the mainnet launch, each slot in Mina lasts 3 minutes, meaning each epoch is around 14 days. There is no minimum staking requirement with Mina. Anyone can stake their own MINA or delegate their stake to another person.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5aepa2buyof3xqr4klp.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo5aepa2buyof3xqr4klp.gif" alt="everyone ges one" width="480" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ouroboros uses Verifiable Random Functions (VRFs) to determine block producers in a secure and decentralized manner. VRFs allow block producers to secretly determine their turn to produce a block, preventing targeted attacks. &lt;/p&gt;

&lt;p&gt;Using random selection block production is probabilistic, based on the size of a stakeholder's stake. Multiple block producers can be chosen for a slot, enhancing security and minimizing the impact of potential attacks, In the case of multiple valid blocks for a slot, the longest chain is selected, ensuring consensus.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;zkApps&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;zkApps leverage zero-knowledge proofs (zk-SNARKs) for secure and private computations. Developers use the zkApp CLI and o1js to build these applications. The core element is the prover function, written in o1js, which executes the zkApp's logic. This function, running in the user's browser, generates a zero-knowledge proof demonstrating the correct execution of the logic without revealing sensitive data.&lt;/p&gt;

&lt;p&gt;For example, in a decentralized exchange, a user might use the zkApp to trade assets privately, with the proof verifying the trade's validity without disclosing trade details.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86nfj6glb8dlnnnx2s9m.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F86nfj6glb8dlnnnx2s9m.gif" alt="prove it" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Inputs: Prover functions require both private and public inputs. Private inputs remain confidential, while public inputs are shared for verification.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Verification: The verifier function, efficiently executed by the Mina network, validates the proof against the defined constraints.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;Efficiency: Regardless of prover function complexity, verification remains swift and efficient.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To use a zkApp, end users must Install a Wallet that supports interactions with zkApps.&lt;/p&gt;

&lt;p&gt;After a zkApp is deployed to a host, end users can interact with it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;The user visits funzkapp.com.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The user interacts with the zkApp and enters the required data. For example, if this were an automated market maker, the user might specify to buy x amount of ABC at y price.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The prover function in the zkApp generates a zero-knowledge proof locally using the data entered by the user. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This data can be either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Private, the data is never seen by the blockchain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Public, the data is stored on-chain or off-chain, depending on what the zkApp specified as required for a given use case.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A list of state updates called account updates, which will be created by the transaction is generated. The account updates are associated with this proof.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user selects Submit to chain in the zkApp UI.&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The user confirms the transaction on their wallet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The wallet signs the transaction containing the proof and the associated description of the state to update.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The wallet sends the transaction to the Mina network.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;The Mina network receives this transaction and verifies that the proof successfully passes the verifier method listed on the zkApp account. If the network accepts this transaction, this proof and the requested state changes are valid and are allowed to update the zkApp state. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The end user's privacy is maintained because their interaction occurs locally in a web browser using JavaScript on the client. The zkApp account gets updated on-chain. When the prover function runs in a web browser, the smart contract outputs proof and some associated data called "account updates" that are sent to a zkApp address as part of the transaction.&lt;/p&gt;

&lt;p&gt;The integrity of these account updates is ensured by passing a hash of the account updates as public input to the smart contract. The account updates must be present and unmodified for the verification function to pass successfully when it runs on Mina. This allows the Mina network to confirm the integrity of both the proof and the associated account updates&lt;/p&gt;

&lt;p&gt;There are two zkApp state&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;On-chain state describes the state that lives on the Mina blockchain. Each zkApp account provides 8 fields of 32 bytes each of arbitrary storage. You may store anything here as long as it fits in the size provided. If the state is to be larger, or if the state accumulates per user within your zkApp, then the best option is to use off-chain state&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Off-chain state describes the state stored anywhere else. For larger data, you might want to consider storing the root of a Merkle tree or a similar data structure within your zkApp's on-chain storage that references self-hosted off-chain state stored elsewhere. Mina doesn't offer an out-of-the-box solution for off-chain storage&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the zkApp runs in a user's web browser, it can insert state to an external storage, such as IPFS. When the transaction is sent to the Mina network, if it accepts this zkApp transaction then proof and state are known to be valid so the updates are allowed, then the zkApp transaction can update the root of the Merkle tree that is stored onchain.&lt;/p&gt;

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

&lt;p&gt;With this knowledge, we will explore zkApps further by building one after we get an introduction to o1js and its basic concepts.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;Snarketplace Proof market and Snark Workers&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Snarketplace is a service exchange where block producers add transactions for SNARK Workers to create ZKPs and process them. This marketplace model ensures the network’s compact size and efficient transaction processing by requiring completed SNARK work to be purchased before adding new block producer transactions.&lt;/p&gt;

&lt;p&gt;While most protocols have just one primary group of node operators (often called miners, validators, or block producers), Mina has a second group — the &lt;strong&gt;SNARK worker&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;SNARK workers are integral to Mina's operation. They produce the zero-knowledge proofs (SNARKs) that verify the validity of each block. These proofs are essential for maintaining Mina's succinctness, allowing nodes to discard historical data and retain only the latest SNARK, significantly reducing storage requirements.&lt;/p&gt;

&lt;p&gt;The reason for this is each block producer, when they propose a new block to the network, must also include a zk-SNARK along with that block. This allows nodes to discard all historical data that's been finalized, and retain just the SNARK.&lt;/p&gt;

&lt;p&gt;While block producers generate SNARK proofs for blocks, individual transactions within those blocks also require to be SNARKED. This is crucial because the blockchain-level SNARK only verifies the integrity of the block itself, not the validity of the transactions included within it.&lt;/p&gt;

&lt;p&gt;For example: Imagine the current blockchain state is represented by hash 'a6f8792226...'. A new block arrives with a state hash '0ffdcf284f...' and an accompanying SNARK. This SNARK proves that a block exists which extends the blockchain with the previous state hash 'a6f8792226...'. However, this SNARK doesn't guarantee the validity of the transactions within that new block. A malicious block producer could include invalid transactions without being detected by this blockchain-level SNARK.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz39m2a1lcgvf40mck2sa.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz39m2a1lcgvf40mck2sa.gif" alt="malicious hacker" width="480" height="268"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To address this, each transaction within a block also requires its own individual SNARK, ensuring the validity of all included transactions.&lt;/p&gt;

&lt;p&gt;To ensure that nodes can operate without trust on the Mina blockchain, it is important that each node can verify the state of the chain without needing to replay the transactions. For this to work, the blockchain SNARK is not enough. We need to know that the transactions are also valid. &lt;/p&gt;

&lt;p&gt;Individually generating SNARKs for each transaction is inefficient. This leads to slow block times due to the high computational cost and difficulties in handling asynchronous transaction arrivals. Lucky for us, we can leverage two properties about SNARKs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;proofs can be merged - two proofs can be combined to form a merge proof&lt;/li&gt;
&lt;li&gt;merges are associative - merge proofs are identical, regardless of the order merged&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What these two properties essentially allow us to do is take advantage of parallelism. If proofs can be merged, and it doesn't matter how they're combined, then SNARK proofs can be generated in parallel. Whichever proof is finished first can be combined later with the proofs in progress.&lt;/p&gt;

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

&lt;p&gt;This can be envisioned as a binary tree, where the bottom row (the leaves) consists of the individual transaction proofs, and each parent row is the set of respective merge proofs. We can combine these to the root, which represents a state update performed by applying all the transactions.&lt;/p&gt;

&lt;p&gt;Next, let's focus on the practical implementation. We'll discuss how to utilize 01js and Protokit to develop zkApps on the Mina platform.&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;o1js&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;o1js is a TypeScript library for writing general-purpose zero knowledge (zk) programs and writing zk smart contracts for Mina. As with any library for building projects, we need to have an understanding of the fundamental concepts, this helps us know the appropriate steps to take when we want to create our applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Basic concepts&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Field
Field elements are the basic unit of data in zero-knowledge-proof programming. Each field element can store a number up to almost 256 bits in size. You can think of a field element as a uint256 in Solidity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// For example, in typical programming, you might use:
const sum = 1 + 3.

// In o1js, you write this as:
const sum = new Field(1).add(new Field(3))
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Built-in data types&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some common data types found in 01js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;new Bool(x);   // accepts true or false
new Field(x);  // accepts an integer, or a numeric string if you want to represent a number greater than JavaScript can represent 
but within the max value that a field can store.
new UInt64(x); // accepts a Field - useful for constraining numbers to 64 bits
new UInt32(x); // accepts a Field - useful for constraining numbers to 32 bits

PrivateKey, PublicKey, Signature; // useful for accounts and signing
new Group(x, y); // a point on our elliptic curve, accepts two Fields/numbers/strings
Scalar; // the corresponding scalar field (different than Field)

CircuitString.from('some string'); // string of max length 128
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the case of Field and Bool, you can also call the constructor without new:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let x = Field(10);
let b = Bool(true);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Conditionals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Unlike conditional statements common in programming, traditional conditional statements are not supported by o1js&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// this will NOT work
if (foo) {
  x.assertEquals(y);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead, use the o1js built-in &lt;code&gt;Circuit.if()&lt;/code&gt; method, which is a ternary operator:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const x = Circuit.if(new Bool(foo), a, b); // behaves like `foo ? a : b`
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Functions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Functions work as you would expect in TypeScript.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;function addOneAndDouble(x: Field): Field {
  return x.add(1).mul(2);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Common methods&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Some frequently used common methods are&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;let x = new Field(4); // x = 4
x = x.add(3); // x = 7
x = x.sub(1); // x = 6
x = x.mul(3); // x = 18
x = x.div(2); // x = 9
x = x.square(); // x = 81
x = x.sqrt(); // x = -9

let b = x.equals(8); // b = Bool(false)
b = x.greaterThan(8); // b = Bool(true)
b = b.not().or(b).and(b); // b = Bool(true)
b.toBoolean(); // true

let hash = Poseidon.hash([x]); // takes array of Fields, returns Field

let privKey = PrivateKey.random(); // create a private key
let pubKey = PublicKey.fromPrivateKey(privKey); // derive public key
let msg = [hash];
let sig = Signature.create(privKey, msg); // sign a message
sig.verify(pubKey, msg); // Bool(true)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For a full list, see the o1js reference &lt;a href="https://docs.minaprotocol.com/zkapps/o1js-reference" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recursion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As mentioned above Kimchi, the custom proof system that backs o1js, supports arbitrary infinite recursive proof construction of circuits through integration with the Pickles recursive system. &lt;/p&gt;

&lt;p&gt;Recursion is an incredibly powerful primitive that has a wide array of uses. Generally, you can use recursion to verify any zero knowledge program as part of your zkApp. Some examples are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Mina uses linear recursive proofs to compress the blockchain, an infinitely growing structure, down to a constant size.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Mina also uses "rollup-like" tree-based recursive proofs to, parallel, compress transactions within blocks down to a constant size.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;An app-specific rollup like a Mastermind game that uses linear recursive proofs to progress the state machine of the application without needing to sync back to the game.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;App-specific rollups can use recursion to communicate with each other, like app chains using Inter-Blockchain Communication protocol or parachains using Cross-Chain Virtual Machines to send messages.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In o1js, you can use ZkProgram() to define the steps of a recursive program. Like SmartContract() methods, ZkProgram() methods execute off-chain.&lt;/p&gt;

&lt;p&gt;After performing the desired recursive steps, you can settle the interaction on Mina's blockchain by embedding ZkProgram within a SmartContract method that verifies the underlying proof of execution and extracts the output that can be used elsewhere in the method like storing the output in app-state.&lt;/p&gt;

&lt;p&gt;This simple example has only one method that proves the public input it received is zero:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Field, ZkProgram } from 'o1js';

const SimpleProgram = ZkProgram({
  name: 'simple-program-example',
  publicInput: Field,

  methods: {
    run: {
      privateInputs: [],

      async method(publicInput: Field) {
        publicInput.assertEquals(Field(0));
      },
    },
  },
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To compile this program&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { verificationKey } = await SimpleProgram.compile();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, you can use it to create a proof&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const { proof } = await SimpleProgram.run(Field(0));
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To verify this proof from within any method of your SmartContract class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@method async foo(proof: SimpleProgram.Proof) {
  proof.verify().assertTrue();
  const output: Field = proof.value;
  // ...the rest of our method.
  // For example, storing the output of the execution of the program we've
  // proven as on-chain state, if desired.
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, foo is taking the SimpleProgram proof as a private argument to the method, verifying that the execution was valid, and then using the output.&lt;/p&gt;

&lt;p&gt;You can find more examples and use cases &lt;a href="https://docs.minaprotocol.com/zkapps/o1js/recursion" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is time for us to see o1js in action&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcu2a070brudnafwxdoq.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcu2a070brudnafwxdoq.gif" alt="getting hands dirty" width="480" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We are going to start with some prerequisites, it is mandatory to have zkApp CLI installed and this can be done with this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm install -g zkapp-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In our terminal, we'll create a new project with this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zk project 01-hello-world
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The zk project command has the ability to scaffold the UI for your project. For this tutorial, select none:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; Create an accompanying UI project too? …
  next
  svelte
  nuxt
  empty
&amp;gt; none
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our expected output is going to be:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;✔ Create an accompanying UI project too? · none
✔ UI: Set up project
✔ Initialize Git repo
✔ Set up project
✔ NPM install
✔ NPM build contract
✔ Set project name
✔ Git init commit

Success!

Next steps:
  cd 01-hello-world
  git remote add origin &amp;lt;your-repo-url&amp;gt;
  git push -u origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The zk project command creates a 01-hello-world directory that contains the scaffolding for your project, including tools such as the Prettier code formatting tool, the ESLint static code analysis tool, and the Jest JavaScript testing framework.&lt;/p&gt;

&lt;p&gt;We can move into the &lt;code&gt;01-hello-world&lt;/code&gt; with its command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd 01-hello-world

// we can list the items in the directory with
ls
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before we begin, we need to do a clean-up by deleting some old files with these commands&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rm src/Add.ts
rm src/Add.test.ts
rm src/interact.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we can create new files with these commands&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;zk file src/Square
touch src/main.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;zk file&lt;/code&gt; command creates the src/Square.ts and src/Square.test.ts test files. Now we open &lt;code&gt;src/index.ts&lt;/code&gt; in a text editor and change it to look like&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Square } from './Square.js';

export { Square };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The src/index.ts file contains all of the exports we want to make available for consumption from outside our smart contract project, such as from a user interface.&lt;/p&gt;

&lt;p&gt;Now we have this set up let's write the smart contract, in the &lt;code&gt;src/Square.ts&lt;/code&gt; file, we import&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {
  Field,
  SmartContract,
  state,
  State,
  method,
} from 'o1js';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each item in the import are&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Field: The native number type in o1js.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SmartContract: The class that creates zkApp smart contracts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;state: A convenience decorator used in zkApp smart contracts to create references to state stored on-chain in a zkApp account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;State: A class used in zkApp smart contracts to create a state stored on-chain in a zkApp account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;method: A convenience decorator used in zkApp smart contracts to create smart contract methods like functions. Methods that use this decorator are the end user's entry points to interacting with a smart contract.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the same file, we add the smart contract called Square has one element of on-chain state named num of type Field as defined by the following code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export class Square extends SmartContract {
  @state(Field) num = State&amp;lt;Field&amp;gt;();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As mentioned earlier zkApps can have up to eight fields of on-chain state. We add &lt;code&gt;init&lt;/code&gt; method to the code to set up the initial state of the smart contract on deployment&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  init() {
    super.init();
    this.num.set(Field(3));
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since this code extends &lt;code&gt;SmartContract&lt;/code&gt; it has its own initialization to perform, calling super.init() invokes this function on the base class. Then, &lt;code&gt;this.num.set(Field(3))&lt;/code&gt;initializes the on-chain state num to a value of 3.&lt;/p&gt;

&lt;p&gt;Finally, we add an update() function&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
  @method async update(square: Field) {
    const currentState = this.num.get();
    this.num.requireEquals(currentState);
    square.assertEquals(currentState.mul(currentState));
    this.num.set(square);
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When put together, it should look like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Field, SmartContract, state, State, method } from 'o1js';

export class Square extends SmartContract {
  @state(Field) num = State&amp;lt;Field&amp;gt;();

  init() {
    super.init();
    this.num.set(Field(3));
  }

  @method async update(square: Field) {
    const currentState = this.num.get();
    this.num.requireEquals(currentState);
    square.assertEquals(currentState.mul(currentState));
    this.num.set(square);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The function name update is arbitrary, but it makes sense for this example. Notice how the @method decorator is used because it is intended to be invoked by end users by using a zkApp UI, or as in this case, the main.ts script.&lt;/p&gt;

&lt;p&gt;This method contains the logic by which end users are allowed to update the zkApp's account state on chain. A zkApp account is an account on the Mina blockchain where a zkApp smart contract is deployed. A zkApp account has a verification key associated with it.&lt;/p&gt;

&lt;p&gt;In our example: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If the user provides a number for example, 9 to the update() method that is the square of the existing on-chain state referred to as num for example, 3, then update the num value that is stored on-chain to the provided value in this case, 9.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;If the user provides a number that does not meet these conditions, they are unable to generate proof or update the on-chain state.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These update conditions are accomplished by using assertions within the method. When a user invokes a method on a smart contract, all assertions must be true to generate the zero knowledge proof from that smart contract. The Mina network accepts the transaction and updates the on-chain state only if the attached proof is valid. This assertion is how you can achieve predictable behaviour in an off-chain execution model.&lt;/p&gt;

&lt;p&gt;Notice that get() and set() methods are used for retrieving and setting on-chain state.&lt;/p&gt;

&lt;p&gt;A smart contract retrieves the on-chain account state when it is first invoked if at least one get() exists within it.&lt;/p&gt;

&lt;p&gt;Similarly, using set() changes the transaction to indicate that changes to this particular on-chain state are updated only when the transaction is received by the Mina network if it contains a valid authorization (usually, a valid authorization is proof).&lt;/p&gt;

&lt;p&gt;For the next step, we need to interact with a smart contract, we will write a script that interacts with your smart contract. As before, the complete main.ts example file is provided. In the &lt;code&gt;main.ts&lt;/code&gt; file we are going to do the following&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Square } from './Square.js';
import { Field, Mina, PrivateKey, AccountUpdate } from 'o1js';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using a simulated local blockchain speeds up development and tests the behaviour of your smart contract locally, To initialize the simulated local blockchain, we add the following code from the main.ts file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const useProof = false;
 const Local = await Mina.LocalBlockchain({ proofsEnabled: useProof });
 Mina.setActiveInstance(Local);
 const deployerAccount = Local.testAccounts[0];
 const deployerKey = deployerAccount.key;
 const senderAccount = Local.testAccounts[1];
 const senderKey = senderAccount.key;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This simulated local blockchain provides pre-funded accounts. So we add these lines to create local test accounts with test MINA (tMINA) four our own use.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ----------------------------------------------------
// Create a public/private key pair. The public key is your address and where you deploy the zkApp to
const zkAppPrivateKey = PrivateKey.random();
const zkAppAddress = zkAppPrivateKey.toPublicKey();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After we have made this changes our &lt;code&gt;main.ts&lt;/code&gt; file should look like this&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Square } from './Square.js';
import { Field, Mina, PrivateKey, AccountUpdate } from 'o1js';

const useProof = false;

const Local = await Mina.LocalBlockchain({ proofsEnabled: useProof });
Mina.setActiveInstance(Local);

const deployerAccount = Local.testAccounts[0];
const deployerKey = deployerAccount.key;
const senderAccount = Local.testAccounts[1];
const senderKey = senderAccount.key;
// ----------------------------------------------------

// Create a public/private key pair. The public key is your address and where you deploy the zkApp to
const zkAppPrivateKey = PrivateKey.random();
const zkAppAddress = zkAppPrivateKey.toPublicKey();

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can now build and run the smart contract, we have to first build to compile the TypeScript code into JavaScript with this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we run the JavaScript code with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;node build/src/main.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We can combine to make it run in one command with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build &amp;amp;&amp;amp; node build/src/main.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have set up our environment to let us run the smart contract, we now have to move to initialize our smart contract, we are going to add more code to &lt;code&gt;main.ts&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// create an instance of Square - and deploy it to zkAppAddress
const zkAppInstance = new Square(zkAppAddress);
const deployTxn = await Mina.transaction(deployerAccount, async () =&amp;gt; {
  AccountUpdate.fundNewAccount(deployerAccount);
  await zkAppInstance.deploy();
});
await deployTxn.sign([deployerKey, zkAppPrivateKey]).send();
// get the initial state of Square after deployment
const num0 = zkAppInstance.num.get();
console.log('state after init:', num0.toString());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above what we are doing is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We create a public/private key pair; the public key is an address on the Mina network where you deploy the zkApp to&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We create an instance of your smart contract Square and deploy it to zkAppAddress&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then we get the initial state of Square after deployment&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then we run the below in the terminal&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm run build &amp;amp;&amp;amp; node build/src/main.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;our expected output is&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;state after init: 3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The next thing we want to do is update zkApp account with a transaction&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ----------------------------------------------------
const txn1 = await Mina.transaction(senderAccount, async () =&amp;gt; {
  await zkAppInstance.update(Field(9));
});
await txn1.prove();
await txn1.sign([senderKey]).send();
const num1 = zkAppInstance.num.get();
console.log('state after txn1:', num1.toString());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then we run our command again and our expected output should be&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;state after init: 3
state after txn1: 9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One more thing we have to explore is when a transaction fails, this gives us the full breadth to know what we are doing, the contract logic allows the number that is stored as on-chain state to be replaced only by its square. Now that num is in state 9, updating is possible only with 81. To test a failure, we add these next lines of code  change the state to 75 in zkAppInstance.update(Field(75))&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// ----------------------------------------------------
try {
  const txn2 = await Mina.transaction(senderAccount, async () =&amp;gt; {
    await zkAppInstance.update(Field(75));
  });
  await txn2.prove();
  await txn2.sign([senderKey]).send();
} catch (error: any) {
  console.log(error.message);
}
const num2 = zkAppInstance.num.get();
console.log('state after txn2:', num2.toString());
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Like we have done previously to test we run our command and the expected output should be&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;state after init: 3
state after txn1: 9
Field.assertEquals(): 75 != 81
state after txn2: 9
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And finally, be sure to change your &lt;code&gt;main.ts&lt;/code&gt; file to include the correct update to change the state to 81 in zkAppInstance.update(Field(81)). After running the command again the output should be&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;state after init: 3
state after txn1: 9
state after txn2: 81
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We have been able to play around with o1js to see what it offers and how it powers Mina application. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExaTM3a2NnazF4YmpwNXY3d2c2MXQwY3BlbjdzNTlhenBsdGMyZG10OSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FjIv6pfqKiIvHPYZO6y%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia2.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExaTM3a2NnazF4YmpwNXY3d2c2MXQwY3BlbjdzNTlhenBsdGMyZG10OSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FjIv6pfqKiIvHPYZO6y%2Fgiphy.gif" alt="phew" width="600" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have one more topic to touch which is Protokit and what it offers us in Mina.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1gztrmabo18sxghy4ju0.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1gztrmabo18sxghy4ju0.gif" alt="let's go" width="480" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Protokit&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Protokit is a framework for building privacy-enabled application chains a.k.a. zk-roll-apps/zk-rollups. Enabling developers to build zero-knowledge privacy-preserving applications with a minimal learning curve. The framework itself is powered by o1js, an SDK for building zkApps. All applications built with Protokit are compatible with the Mina blockchain by design and can use the Mina L1 for settlement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rollups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Rollups are a form of an L2 scaling solution, originating from networks such as Ethereum. L2 solutions aim to address the scalability issues of L1 networks by moving transactions off-chain, while still maintaining the security guarantees of the L1 network.&lt;/p&gt;

&lt;p&gt;Rollups alleviate the potential race condition scenarios by moving the execution from the client side to the server/sequencer side. Protokit offers a hybrid execution model, where code can run both on and off-chain, thanks to recursive zero-knowledge proofs. This allows retaining the capabilities of smart contracts while extending them with the capabilities of sequential execution.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Application Chain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The application chain is an application-specific form of a rollup. Application-specific rollups allow developers to optimize their rollup implementation to suit their application's needs, providing a better user experience like faster block times and potentially lower fees than general-purpose rollups like zkSync.&lt;/p&gt;

&lt;p&gt;Protokit Architecture consists of Runtime, Protocol and Sequencer, Let's break this down further.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Runtime&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Runtime is the first modular component of the app chain, which contains all the business logic of the application itself. Business logic is implemented as runtime modules, defining the runtime state and runtime methods of each module. &lt;/p&gt;

&lt;p&gt;Runtime methods are functions callable by user's transactions, responsible for reading and writing to the state following their inner business logic implementation. Each runtime module can define its own state (storage), which can be of two types: state and state map.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Protocol&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Protocol is the focal point of every Protokit app chain. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Firstly it defines how state transitions generated by the rest of the framework are applied to the underlying state tree. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Secondly, it determines how proofs of state transitions are brought together with proofs of runtime execution to form a block, or at least a part of it.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every protocol is composed of protocol modules, following the modular design of Protokit. The bare minimum protocol must always contain a StateTransitionProver and a BlockProver module.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Sequencer&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sequencer is the gateway between the user's transactions and the block production. the sequencer is responsible for accepting user's transactions into a mempool, validating them, sequencing them as part of the block production process, orchestrating the block production prover worker pipeline, and finally submitting the rollup block to the settlement layer.&lt;/p&gt;

&lt;p&gt;All working components of the sequencer are sequencer modules and may be added, removed or replaced at the developer's convenience following the modularity principles.&lt;/p&gt;

&lt;p&gt;With this overview, we can now get our hands dirty building a single runtime module. The runtime module would store a ledger of balances for public keys, and the current circulating supply.&lt;/p&gt;

&lt;p&gt;We are going to use the starter kit &lt;a href="https://github.com/proto-kit/starter-kit" rel="noopener noreferrer"&gt;here&lt;/a&gt;, navigate to &lt;code&gt;packages/chain/src/balances.ts&lt;/code&gt; and you'll see the snippet below, one thing you'll also notice is we're making use of o1js.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { runtimeModule, state, runtimeMethod } from "@proto-kit/module";
import { State, assert } from "@proto-kit/protocol";
import { Balance, Balances as BaseBalances, TokenId } from "@proto-kit/library";
import { PublicKey } from "o1js";

interface BalancesConfig {
  totalSupply: Balance;
}

@runtimeModule()
export class Balances extends BaseBalances&amp;lt;BalancesConfig&amp;gt; {
  @state() public circulatingSupply = State.from(Balance);

  // implicitly inherited from `BaseBalances`
  // @state() public balances = StateMap.from(..);

  @runtimeMethod()
  public addBalance(tokenId: TokenId, address: PublicKey, amount: Balance) {
    const circulatingSupply = this.circulatingSupply.get();
    const newCirculatingSupply = Balance.from(circulatingSupply.value).add(
      amount
    );
    assert(
      newCirculatingSupply.lessThanOrEqual(this.config.totalSupply),
      "Circulating supply would be higher than total supply"
    );
    this.circulatingSupply.set(newCirculatingSupply);
    this.mint(tokenId, address, amount);
  }
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first thing we'll be doing is testing the runtime, it is a good practice to test your runtime modules in isolation.&lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;packages/chain/test/runtime/modules&lt;/code&gt; folder we'll navigate to our test file named &lt;code&gt;balances.test.ts&lt;/code&gt; where we'll do the following&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We'll Setup a &lt;code&gt;TestingAppChain.fromRuntime&lt;/code&gt;, providing only the Balances module.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We Provide non-mutable configuration for the Balances module, including the totalSupply.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then we start the application chain, which generates keypairs for testing and sets the transaction signer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It'll forge a transaction to the Balances module, calling the addBalance method.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then it signs and sends the transaction and produces a block for the application chain.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After that it Queries the Balances module for the balance of the test account from keypair generated earlier.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It asserts that the transaction was included in the block, while the execution of the transaction was successful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It also asserts that the balance of the test account has been updated accordingly.&lt;br&gt;
&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { TestingAppChain } from "@proto-kit/sdk";
import { PrivateKey } from "o1js";
import { Balances } from "../src/balances";
import { log } from "@proto-kit/common";
import { BalancesKey, TokenId, UInt64 } from "@proto-kit/library";

log.setLevel("ERROR");

describe("balances", () =&amp;gt; {
  it("should demonstrate how balances work", async () =&amp;gt; {
    const appChain = TestingAppChain.fromRuntime({
      Balances,
    });

    appChain.configurePartial({
      Runtime: {
        Balances: {
          totalSupply: UInt64.from(10000),
        },
      },
    });

    await appChain.start();

    const alicePrivateKey = PrivateKey.random();
    const alice = alicePrivateKey.toPublicKey();
    const tokenId = TokenId.from(0);

    appChain.setSigner(alicePrivateKey);

    const balances = appChain.runtime.resolve("Balances");

    const tx1 = await appChain.transaction(alice, () =&amp;gt; {
      balances.addBalance(tokenId, alice, UInt64.from(1000));
    });

    await tx1.sign();
    await tx1.send();

    const block = await appChain.produceBlock();

    const key = new BalancesKey({ tokenId, address: alice });
    const balance = await appChain.query.runtime.Balances.balances.get(key);

    expect(block?.transactions[0].status.toBoolean()).toBe(true);
    expect(balance?.toBigInt()).toBe(1000n);
  }, 1_000_000);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we run the test command with the following&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pnpm run test --filter=chain --watchAll
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After that is successful, we can go on to configure the app-chain, which can be configured at three different levels, the runtime, the chain and the client. We are going to start the runtime configuration, specifying the configuration of the runtime module layout. &lt;/p&gt;

&lt;p&gt;In the &lt;code&gt;packages/chain/src/runtime/index.ts&lt;/code&gt; we have&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Balance } from "@proto-kit/library";
import { Balances } from "./balances";
import { ModulesConfig } from "@proto-kit/common";

export const modules = {
  Balances,
};

export const config: ModulesConfig&amp;lt;typeof modules&amp;gt; = {
  Balances: {
    totalSupply: Balance.from(10_000),
  },
};

export default {
  modules,
  config,
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The runtime configuration above is then used to define app-chain configurations for both client and server side app-chains. One thing to keep in mind is that configuration for the rest of the app chain, namely the protocol and the sequencer is provided implicitly behind the scenes.&lt;/p&gt;

&lt;p&gt;So our &lt;code&gt;packages/chain/src/chain.config.ts&lt;/code&gt; and &lt;code&gt;packages/chain/src/client.config.ts&lt;/code&gt; will look like the below respectively&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { LocalhostAppChain } from "@proto-kit/cli";
import runtime from "./runtime";

const appChain = LocalhostAppChain.fromRuntime(runtime.modules);

appChain.configure({
  ...appChain.config,
  Runtime: runtime.config,
});

// TODO: remove temporary `as any` once `error TS2742` is resolved
export default appChain as any;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { ClientAppChain } from "@proto-kit/sdk";
import runtime from "./runtime";

const appChain = ClientAppChain.fromRuntime(runtime.modules);

appChain.configurePartial({
  Runtime: runtime.config,
});

export const client = appChain;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This helps us with the server &amp;amp; client configuration. With this, we can implement our own runtime module. Here we have to consider a couple of things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What will be configurable in the module?&lt;/li&gt;
&lt;li&gt;What data will the module store?&lt;/li&gt;
&lt;li&gt;What methods will the module expose?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In &lt;code&gt;packages/chain/src/&lt;/code&gt; we will create a folder named &lt;code&gt;guest-book&lt;/code&gt; and in there we'll have our &lt;code&gt;check-in.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Field, PublicKey, Struct } from "o1js";
import { UInt64 } from "@proto-kit/library";

export class CheckInId extends Field {}
export class CheckIn extends Struct({
  guest: PublicKey,
  createdAt: UInt64,
  rating: UInt64,
}) {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;we'll want to allow users to check in in the guest book. We'll start by defining the data model, namely the CheckIn struct, which will determine what constitutes a check-in. Then we'll take the next step creating our runtime module and defining the checkIns storage property, which will map a guest to the check-in they made.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {
  RuntimeModule,
  runtimeMethod,
  runtimeModule,
  state,
} from "@proto-kit/module";
import { StateMap, assert } from "@proto-kit/protocol";
import { PublicKey } from "o1js";
import { CheckIn } from "./check-in";

@runtimeModule()
export class GuestBook extends RuntimeModule&amp;lt;Record&amp;lt;string, never&amp;gt;&amp;gt; {
  @state() public checkIns = StateMap.from(PublicKey, CheckIn);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now that we have our storage defined, we can start implementing the methods that will allow users to interact with the module. We'll define the checkIn_ method, which will allow users to check-in. Inside the &lt;code&gt;guest-book&lt;/code&gt; folder we'll create an &lt;code&gt;index.ts&lt;/code&gt; file where we have the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {
  RuntimeModule,
  runtimeMethod,
  runtimeModule,
  state,
} from "@proto-kit/module";
import { StateMap, assert } from "@proto-kit/protocol";
import { PublicKey } from "o1js";
import { CheckIn } from "./check-in";
import { UInt64 } from "@proto-kit/library";

@runtimeModule()
export class GuestBook extends RuntimeModule&amp;lt;Record&amp;lt;string, never&amp;gt;&amp;gt; {
  @state() public checkIns = StateMap.from(PublicKey, CheckIn);

  @runtimeMethod()
  public checkIn(rating: UInt64) {
    assert(rating.lessThanOrEqual(UInt64.from(5)), "Maximum rating can be 5");
    const guest = this.transaction.sender.value;
    const createdAt = UInt64.from(this.network.block.height);
    const checkIn = new CheckIn({
      guest,
      createdAt,
      rating,
    });

    this.checkIns.set(checkIn.guest, checkIn);
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The we can extend the app-chain configuration by updating it like so in &lt;code&gt;packages/chain/src/runtime/index.ts&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Balance } from "@proto-kit/library";
import { Balances } from "./balances";
import { ModulesConfig } from "@proto-kit/common";
import { GuestBook } from "./guest-book";

export const modules = {
  Balances,
  GuestBook,
};

export const config: ModulesConfig&amp;lt;typeof modules&amp;gt; = {
  Balances: {
    totalSupply: Balance.from(10_000),
  },
  GuestBook: {},
};

export default {
  modules,
  config,
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this, we have just implemented a custom runtime module, At this point, we would be able to read its storage or send transactions to it from the client side app-chain. Let's continue and interact with the app-chain, the first step is to start the sequencer. we can do so by using the Protokit CLI, which is available as part of the starter kit under the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pnpm env:inmemory dev --filter chain
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command above will start a local sequencer, which will be available at &lt;code&gt;http://localhost:8080/graphql&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Every app-chain exposes a transaction API, which is aware of the underlying runtime configuration. This allows us to forge, sign and send transactions to the sequencer without having to worry about the internal workings of the sequencer and its mempool. Let's send a transaction, in our &lt;code&gt;packages/chain/test/&lt;/code&gt; we create our file for testing in a file named &lt;code&gt;interaction.test.ts&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { InMemorySigner } from "@proto-kit/sdk";
import { UInt64 } from "@proto-kit/library";
import { client as appChain } from "./../src/client.config";
import { PrivateKey } from "o1js";
import { GuestBook } from "../src/guest-book";

const signer = PrivateKey.random();
const sender = signer.toPublicKey();

describe("interaction", () =&amp;gt; {
  let guestBook: GuestBook;

  beforeAll(async () =&amp;gt; {
    await appChain.start();

    const inMemorySigner = new InMemorySigner();

    appChain.registerValue({
      Signer: inMemorySigner,
    });

    const resolvedInMemorySigner = appChain.resolve("Signer") as InMemorySigner;
    resolvedInMemorySigner.config = { signer };

    guestBook = appChain.runtime.resolve("GuestBook");
  });

  it("should interact with the app-chain", async () =&amp;gt; {
    const rating = UInt64.from(3);
    const tx = await appChain.transaction(sender, () =&amp;gt; {
      guestBook.checkIn(rating);
    });

    await tx.sign();
    await tx.send();
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In the above the code does the following&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Generate a random signer keypair.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start the client appChain and register a custom in-memory signer, which will be used to sign transactions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Resolve the GuestBook runtime module, so we can interact with it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a transaction, which will call the checkIn method of the GuestBook runtime module&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sign and send the transaction to the locally hosted sequencer.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We can now test by running this command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pnpm test --filter=chain ./test/interaction.test.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This brings us to the query API which allows us to fetch the latest state of the app-chain, using the underlying app-chain module configuration. Let's query for the latest check-in for a guest, from our GuestBook runtime module.&lt;/p&gt;

&lt;p&gt;We can update  our test file from above with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { InMemorySigner } from "@proto-kit/sdk";
import { UInt64 } from "@proto-kit/library";
import { client as appChain } from "./../src/client.config";
import { PrivateKey, Provable } from "o1js";
import { GuestBook } from "../src/guest-book";
import { sleep } from "@proto-kit/common";

const signer = PrivateKey.random();
const sender = signer.toPublicKey();

describe("interaction", () =&amp;gt; {
  let guestBook: GuestBook;

  beforeAll(async () =&amp;gt; {
    await appChain.start();

    const inMemorySigner = new InMemorySigner();

    appChain.registerValue({
      Signer: inMemorySigner,
    });

    const resolvedInMemorySigner = appChain.resolve("Signer") as InMemorySigner;
    resolvedInMemorySigner.config = { signer };

    guestBook = appChain.runtime.resolve("GuestBook");
  });

  it("should interact with the app-chain", async () =&amp;gt; {
    const rating = UInt64.from(3);
    const tx = await appChain.transaction(sender, () =&amp;gt; {
      guestBook.checkIn(rating);
    });

    await tx.sign();
    await tx.send();

    await sleep(8000);

    const checkIn = await appChain.query.runtime.GuestBook.checkIns.get(sender);
    Provable.log("checkIn", sender, checkIn);
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And we run our test command again. One thing to note is that the starter kit comes with a user interface that makes for a flexible reusable interface however we choose to use it&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;By leveraging Protokit and 01js, we have begun to uncover the potential of zero-knowledge technology within the Mina ecosystem, opening doors to countless exciting possibilities.&lt;/p&gt;

</description>
      <category>web3</category>
      <category>mina</category>
      <category>blockchain</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Exploring the Mina Ecosystem</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Sat, 04 Jan 2025 13:18:05 +0000</pubDate>
      <link>https://forem.com/babalasisi/exploring-the-mina-ecosystem-107e</link>
      <guid>https://forem.com/babalasisi/exploring-the-mina-ecosystem-107e</guid>
      <description>&lt;p&gt;As we explore the Mina ecosystem, we will present an overview of its necessity and its role. Furthermore, we will examine the zkApps within the ecosystem, the tools available for developing these applications, and the grants that Mina offers to support builders and developers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;In our digital world we have a lot of our personal data scattered across different platforms, ones we actively use and others we probably forgot about. This fragmentation coupled with data silos and the spread of misinformation that plague the internet, poses a challenge to managing and handling our digital identities, which is compounded by the rise of AI and deepfakes.&lt;/p&gt;

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

&lt;p&gt;Blockchain technology has brought on a new era of decentralized digital identity management. While Web2, with its centralized model, allows for multiple online personas is still vulnerable to data breaches.&lt;/p&gt;

&lt;p&gt;Web3 offers decentralized solutions but still faces challenges in regulation and privacy. Zero-knowledge proofs, when combined with decentralized identifiers enable secure and private identity verification without revealing personal information.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwf3ij35hj5tztde8ygm.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuwf3ij35hj5tztde8ygm.gif" alt="hiding secrets" width="480" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Mina
&lt;/h2&gt;

&lt;p&gt;Mina is a ZK blockchain with a 22KB size, enabling "proof of everything" through infinitely recursive proofs. It overcomes the limitations of traditional blockchains, which often rely on public-private key pairs and on-chain data storage. By providing a collaborative, reusable "proof of everything," Mina addresses these limitations. While the security and efficiency of these systems are improving every day, the transparency of distributed ledgers raises privacy concerns. This transparency hinders mainstream adoption by corporations and their users, who are hesitant to migrate to Web3. We also need to consider building privacy into blockchain is complex and has many regulatory concerns.&lt;/p&gt;

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

&lt;p&gt;Mina, with its innovative ZKP approach, is addressing the gap between Web2 and Web3. ZKPs enable users to control their identity while providing necessary information without revealing sensitive data. &lt;/p&gt;

&lt;h2&gt;
  
  
  Mina’s Core Tools
&lt;/h2&gt;

&lt;p&gt;o1Labs, pioneers in blockchain innovation, specializing in zero knowledge are the team behind groundbreaking technologies such as Mina Protocol and o1js. Since 2017 they have been at the forefront of designing Mina's protocol and tools that power zkApps. For a deeper dive into their roadmap, visit their website &lt;a href="https://www.o1labs.org/blog/the-o1roadmap-2025" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The tools are:&lt;br&gt;
* &lt;a href="https://github.com/o1-labs/o1js" rel="noopener noreferrer"&gt;o1js&lt;/a&gt; (formerly Snarkyjs)— a TypeScript library for zk-SNARKs and zkApps&lt;br&gt;&lt;br&gt;
* &lt;a href="https://o1-labs.github.io/proof-systems/specs/kimchi.html" rel="noopener noreferrer"&gt;Kimchi&lt;/a&gt; — a modular, general-purpose, PLONK-inspired zero-knowledge-proof system.&lt;/p&gt;

&lt;p&gt;zkOracles&lt;br&gt;
o1Labs is also working on developing a new type of blockchain oracle called zkOracles. Blockchain oracles are a class of technology that knows all things from the real world and brings that information to the blockchain. &lt;/p&gt;

&lt;p&gt;Another way to expatiate on oracles is, that we generally have all our data on web2, Oracles serve as an interface to access that web2 data and bring it on-chain.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbrfbvcqywv7so20l1zeu.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbrfbvcqywv7so20l1zeu.gif" alt="accessing information" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The amazing thing about zkOracles is a unique two-step execution model, that at first proves off-chain that some computation has been performed, then it is packed up into a small proof which is verified on-chain. The off-chain computation is unique in that it can be run locally without paying any costs, allowing for the ability to perform really sophisticated and exciting operations off-chain&lt;/p&gt;

&lt;p&gt;As we explore further, let's dive into the products currently in the ecosystem. From infrastructure and tooling for developers to wallets and in-browser zkApps, we'll select one representative product from each category. This also shows how the numerous ways Mina can be integrated.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Digital ID&lt;/strong&gt;&lt;br&gt;
zkHumans: A ZK-powered protocol decentralized protocol for secure and private programmable identity with cross-organizational utility using Zero-Knowledge Proofs and Crypto-Biometrics. &lt;br&gt;
While crypto-biometrics are a first-class feature, they aren’t a hard requirement. Biometrics facilitate proof of unique and living humans (sybil-resistance). zkHumans supports a multitude of authentication factors to attest to identity ownership, including biometrics, from a multitude of sources or providers. To explore this application further, you can visit their &lt;a href="https://zkhumans.io/" rel="noopener noreferrer"&gt;website&lt;/a&gt; or their &lt;a href="https://github.com/zkHumans/zkHumans" rel="noopener noreferrer"&gt;repository&lt;/a&gt; and &lt;a href="https://github.com/zkHumans/docs" rel="noopener noreferrer"&gt;whitepaper&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DEX&lt;/strong&gt;&lt;br&gt;
Lumina: A zero-knowledge, KYC-enabled, enterprise-ready DEX on Mina.&lt;br&gt;
It shines a new light on decentralized finance, inspired by permissioned venues for trading large asset blocks while maintaining privacy, compliance, and auditability. To explore this application further, you can visit their &lt;a href="https://luminadex.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt; and &lt;a href="https://docsend.com/view/5tviuhs8cqditskh" rel="noopener noreferrer"&gt;whitepaper&lt;/a&gt;, they also have a &lt;a href="https://medium.com/luminadex" rel="noopener noreferrer"&gt;blog&lt;/a&gt; where they discuss about Lumina&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explorer&lt;/strong&gt;&lt;br&gt;
Mina Explorer: A Mina explorer with charts and analytics on expected protocol returns, locked/circulating supply, current transaction fees, pending transactions, and much more. you can visit the &lt;a href="https://minaexplorer.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt; to see how it works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Gaming&lt;/strong&gt;&lt;br&gt;
CTF - Capture the flag:  A competition where teams or individuals have to solve several challenges by building zkApps on Mina. The one that solves/collects the most flags the fastest wins the competition. Once each challenge has been solved successfully, the user will find a “flag” within the challenge that is proof of completion. To explore and play the game you can visit their &lt;a href="https://minactf.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt; and you can visit the &lt;a href="https://github.com/SutuLabs/MinaCTF" rel="noopener noreferrer"&gt;repository&lt;/a&gt; to see how it works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Governance&lt;/strong&gt;&lt;br&gt;
On-chain Funding platform for builders and investors: They provide funding workflows (investments, grants, accelerators) on-chain for better transparency and lower risks for both investors and builders. Utilizing ZKPs and the privacy-preserving Mina blockchain, this innovative solution protects investors’ privacy while allowing them to engage in the funding and decision-making processes. They encourage open and transparent interactions with new standards of transparency and security, such as DAO and milestone-based vesting. &lt;br&gt;
To explore further, you can visit &lt;a href="https://www.auxo.fund/" rel="noopener noreferrer"&gt;website&lt;/a&gt; and their &lt;a href="https://github.com/auxo-zk" rel="noopener noreferrer"&gt;repository&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;&lt;br&gt;
=nil; Foundation Bridge: An In-EVM Mina Protocol state verification that enables every state transition, every transaction made within Mina state to be proved on Ethereum directly, in a completely trustless way.&lt;br&gt;
Such a full state verification, thanks to fixed Mina Protocol state proof size (~22Kb), allows to bring provable computations of various complexity made possible by Mina to Ethereum (aka bridge) without any requirements for intermediate relays.&lt;br&gt;
To explore and demo how it works, you can visit their &lt;a href="https://verify.mina.nil.foundation/" rel="noopener noreferrer"&gt;website&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;NFTs&lt;/strong&gt;&lt;br&gt;
CPoNE (pronounced see-poh-nee): This is a method for achieving this verification by deploying a zkApp on the Mina blockchain. This app generates proof of the endorsement’s authenticity and then bridges it to Ethereum, where the NFT is minted. In this method, they use X(formerly Twitter) as an “identity provider” since it is a widely used and popular service. To explore how it works, can visit the &lt;a href="https://github.com/racampos/cpone" rel="noopener noreferrer"&gt;repository&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Oracles&lt;/strong&gt;&lt;br&gt;
zkNotary: A zkOracle for Mina powered by TLSNotary. zkNotary addresses the challenge of proving data originating from TLS-secured APIs. By utilizing a two-party computation (2PC), it divides TLS session keys so anyone can create cryptographic proofs of authenticity that prove that data accessed via TLS genuinely originated from a specific REST API. This is a powerful cryptographic primitive that will enable more ZK applications.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Privacy&lt;/strong&gt;&lt;br&gt;
AdMeta: This helps Web3 projects acquire users and promote their products in a decentralized way. In AdMeta users own, control and profit from their data. The data used for ad matching is fully authorized by the user and is processed in a privacy-protected manner.AdMeta also enables Web3 content creators, and Metaverse landholders to monetize their content and land in a simple and decentralized way. To explore more you can visit their &lt;a href="https://admeta.network/" rel="noopener noreferrer"&gt;website&lt;/a&gt; and go through their &lt;a href="https://github.com/AdMetaNetwork" rel="noopener noreferrer"&gt;repository&lt;/a&gt; to understand how it works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tooling&lt;/strong&gt;&lt;br&gt;
zkApp.store: A zkApp marketplace for Mina Protocol that provides a platform where developers can submit, manage, and showcase their zkApps, and users can easily discover, use, and rate the zkApp ecosystem. To discover more zkApps you can visit their &lt;a href="https://zkapp.store/home" rel="noopener noreferrer"&gt;website&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Wallets&lt;/strong&gt;&lt;br&gt;
Clor.io: A Mina Protocol wallet to store, send, receive, and stake Mina Protocol tokens from desktop, browser, and hardware wallets. To download and use the wallets you can visit their &lt;a href="https://clor.io/" rel="noopener noreferrer"&gt;website&lt;/a&gt; and explore their &lt;a href="https://github.com/nerdvibe/clorio-client" rel="noopener noreferrer"&gt;repository&lt;/a&gt; to see how it works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;zkRollups&lt;/strong&gt;&lt;br&gt;
Zeko: A Layer 2 ZK Rollup ecosystem specifically designed for zero-knowledge applications (zkApps), settled by Mina Protocol, the ultimate L1 for processing ZKPs. Its purpose is to bring higher throughput and ultra-fast transaction confirmation times, a modular stack for building custom ZK Rollups, and an L2 interoperability layer for zkApps. To explore you can visit their &lt;a href="https://zeko.io/" rel="noopener noreferrer"&gt;website&lt;/a&gt; and check out their &lt;a href="https://github.com/zeko-labs" rel="noopener noreferrer"&gt;repository&lt;/a&gt; to understand how it works.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now we have taken a look at projects that actively use Mina, let's explore the grants Mina is providing to developers and builders.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ecosystem Grants
&lt;/h2&gt;

&lt;p&gt;In the rapidly expanding landscape of blockchain technology, zero-knowledge proofs have emerged as a powerful new primitive. Developers seeking to explore zero-knowledge's unique scalability and privacy properties actively choose Mina for its lightweight recursive design and intuitive developer experience. This has brought the need for Mina to design grant programs designed to empower developers and entrepreneurs to learn and build their ideas on the Mina Protocol. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flt867n0jd29b5h3t7201.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flt867n0jd29b5h3t7201.gif" alt="giving money" width="500" height="380"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These grants are split into these options&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Navigator Grants&lt;/strong&gt;
Navigators is an ongoing developer program for builders to accelerate their ZK projects to production on Mina Protocol. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This grant program is designed for teams that are in the early to mid lifecycle of their project. The Navigators grant program provides support via growth or starter grants.&lt;/p&gt;

&lt;p&gt;The goal is to fund at least 100 projects that enhance the Mina ecosystem this year.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify &amp;amp; onboard skilled teams swiftly &amp;amp; enable them to start building.&lt;/li&gt;
&lt;li&gt;Accelerate the deployment of applications/tooling into production.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Grants are continuously awarded to skilled developers and teams based on written project proposals. The allocation of funding is determined by a Navigators Exploration Team (NExT) composed of members from Mina Foundation, o1Labs, and Mina ecosystem builders.&lt;/p&gt;

&lt;p&gt;There are two tracks for grants:&lt;/p&gt;

&lt;p&gt;a. Starter: Suited for teams that are new to the Mina ecosystem. Teams will be awarded up to 15,000 MINA to build a project over one month. This is an invite-only program and currently not accepting applications.&lt;/p&gt;

&lt;p&gt;b. Growth: Suited for experienced teams in the web3/Mina ecosystem. Teams will be awarded up to 100,000 MINA to build a project that enriches the Mina ecosystem and pushes it forward, be it tooling, infrastructure, or a zkApp over 1-3 Months.&lt;/p&gt;

&lt;p&gt;Both tracks are milestone-based and teams will need to submit a proposal that outlines at least one mid-point milestone and the final deliverable(s) in detail. The grants program is open to both solo developers and teams alike. It is open for application on a rolling basis throughout this year. You can apply for support to build existing projects or propose new projects.&lt;/p&gt;

&lt;p&gt;For more information, see the &lt;a href="https://minafoundation.notion.site/Mina-Navigators-Season-2-72ccd35e45304bc98dbeec88c1ca2056" rel="noopener noreferrer"&gt;pages&lt;/a&gt; for each respective track.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;zkIgnite Grants&lt;/strong&gt;
zkIgnite is a cohort-based, community-governed innovation fund for experienced ZK builders and entrepreneurs in the Mina ecosystem. This program is designed to support developers with key resources and grants to turn their ideas and passion projects into full-fledged businesses. The allocation of funding is determined by a team of electors from the Mina community. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So far, zkIgnite has financed 80 ZK applications and developer tools that are expanding the possibilities within the Mina Protocol, via &lt;a href="https://minaprotocol.com/blog/zkignite-cohort-1-update" rel="noopener noreferrer"&gt;Cohort 1,&lt;/a&gt; &lt;a href="https://minaprotocol.com/blog/cohort-2-funded-projects" rel="noopener noreferrer"&gt;Cohort 2,&lt;/a&gt; and &lt;a href="https://minaprotocol.com/blog/zkignite-cohort-3-funded-projects" rel="noopener noreferrer"&gt;Cohort 3&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You can get involved in one of the two available tracks&lt;/p&gt;

&lt;p&gt;a. zkApp Product: In this track, developers are to build consumer applications leveraging zero-knowledge proofs to solve real-world problems. Both teams and individual contributors are welcome, with teams encouraged to have at least 1-2 technical developers.&lt;/p&gt;

&lt;p&gt;b. Developer Tooling and Infrastructure: In this track developers create tools that make it easier to build on Mina Protocol, enhancing efficiency for fellow developers.&lt;/p&gt;

&lt;p&gt;For more information, see this &lt;a href="https://minaprotocol.com/blog/zkignite-update" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Core Grants&lt;/strong&gt;
Core is a grant program that funds public goods and addresses current infrastructure needs on Mina Protocol through an RFP (Request for Proposals) process. These grants are allocated on a rolling basis and are specific in scope. They focus on supporting high-priority development areas, including token standards, zkOracles, Data Availability layers, new development features, and more.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are two types of Core grant tracks&lt;/p&gt;

&lt;p&gt;a. Ecosystem Advancement: Here, the focus is on proposals originating from RFCs, covering specific scopes and deliverables.&lt;/p&gt;

&lt;p&gt;b. Public Goods: This aims to support new developments, maintenance, or enhancement of Mina Protocol.&lt;/p&gt;

&lt;p&gt;To explore this grant further, you can go to this &lt;a href="https://github.com/MinaFoundation/Core-Grants" rel="noopener noreferrer"&gt;link&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Foundation program
&lt;/h2&gt;

&lt;p&gt;The Mina Foundation, a non-profit, supports the Mina Protocol and its ecosystem by working with ecosystem partners to support network health and security, administering grant programs to community members who make significant contributions, fostering community growth, and enhancing the vibrancy of the Mina ecosystem. &lt;/p&gt;

&lt;p&gt;The Mina Foundation Delegation Program delegates voting power associated with tokens held by the Mina Foundation to a group of third-party block producers in Mina Foundation's commitment to decentralization. Block producers are objectively and transparently chosen based on their uptime performance. For more details on how to get started, you can visit the &lt;a href="https://www.minafoundation.com/" rel="noopener noreferrer"&gt;website&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With a major upgrade of Mina Protocol coming soon, plus bridges and other critical tooling in progress, now is the time to start building. Mina’s TypeScript framework for zkApps makes it easy and provides unique recursion properties that make your smart contracts composable and efficient.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This glimpse into the Mina ecosystem only scratched the surface. Dive deeper into Mina by exploring their resources and official channels:&lt;/p&gt;

&lt;p&gt;Website: link &lt;a href="https://minaprotocol.com/" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
Youtube: link &lt;a href="https://www.youtube.com/channel/UCWzKMFfIlMzHUXKSnYot5HA" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
Telegram: link &lt;a href="https://bit.ly/MinaTelegram" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
Discord: link &lt;a href="https://bit.ly/MinaDiscord" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
X(formerly Twitter): link &lt;a href="https://x.com/minaprotocol" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>web3</category>
      <category>mina</category>
      <category>blockchain</category>
      <category>minaprotocol</category>
    </item>
    <item>
      <title>Introductions to zk-SNARKs technology in Mina Protocol</title>
      <dc:creator>Adetayo Lasisi</dc:creator>
      <pubDate>Thu, 12 Dec 2024 09:41:44 +0000</pubDate>
      <link>https://forem.com/babalasisi/introductions-to-zk-snarks-technology-in-mina-protocol-1415</link>
      <guid>https://forem.com/babalasisi/introductions-to-zk-snarks-technology-in-mina-protocol-1415</guid>
      <description>&lt;p&gt;Zk-snarks stands for Zero-Knowledge Succinct Non-Interactive Argument of Knowledge. It refers to a proof construction in which one can prove possession of certain information utilizing a concept known as a "zero-knowledge proof."&lt;/p&gt;

&lt;p&gt;A zero-knowledge proof allows a prover to convince a verifier of a statement's truth without disclosing additional information. For example, a prover could demonstrate knowledge of a number's hash without revealing the number itself.&lt;/p&gt;

&lt;p&gt;In a zero-knowledge proof of knowledge, the prover can convince the verifier not only of the existence of a piece of information but also of their possession of that information. In the context of password authentication, this would involve proving knowledge of the correct password without exposing the password itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbl69curogzljnwj8h0o.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffbl69curogzljnwj8h0o.gif" alt="Asking for password" width="220" height="114"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a zero-knowledge proof of knowledge, the prover can convince the verifier not only of the existence of a piece of information but also of their possession of that information. In the context of password authentication, this would involve proving knowledge of the correct password without exposing the password itself.&lt;/p&gt;

&lt;p&gt;Another way to look at this is to think of a locked treasure chest, You, the prover, want to show someone (the verifier) that you know the secret code to unlock the chest, but you don’t want to reveal the code itself. Instead, you open the chest, let the verifier see the treasure inside, and then lock it again. The verifier is convinced you know the code because they saw the chest open and close but they still don’t know the code itself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqcmrtrpiz4ocuyrgmct.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjqcmrtrpiz4ocuyrgmct.gif" alt="opening treasure chest" width="500" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;“Succinct” zero-knowledge proofs can be verified within a few milliseconds, with a proof length of only a few hundred bytes even for statements about programs that are very large. In the first zero-knowledge protocols, the prover and verifier had to communicate back and forth for multiple rounds, but in “non-interactive” constructions, the proof consists of a single message sent from the prover to the verifier. &lt;/p&gt;

&lt;p&gt;Zero-knowledge proofs are characterized by their &lt;strong&gt;succinctness&lt;/strong&gt; and &lt;strong&gt;non-interactivity&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Succinctness:&lt;/strong&gt; Proofs can be verified very quickly, often within milliseconds, and are typically only a few hundred bytes long, even for complex statements.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-interactivity:&lt;/strong&gt; The proof consists of a single message from the prover to the verifier, eliminating the need for multiple rounds of interaction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most efficient way to produce zero-knowledge proofs that are non-interactive and short enough to publish to a blockchain is to have an initial setup phase that generates a common reference string shared between the prover and the verifier. We refer to this common reference string as the public parameters of the system.&lt;/p&gt;

&lt;p&gt;To achieve these properties, many zero-knowledge proof systems rely on a &lt;strong&gt;common reference string (CRS)&lt;/strong&gt;, also known as public parameters. This string is generated through a setup phase and is shared between the prover and the verifier.&lt;/p&gt;

&lt;p&gt;While this approach enables efficient and non-interactive proofs, it introduces a trust assumption: if someone gains access to the secret randomness used to generate the CRS, they could potentially create fraudulent proofs.&lt;/p&gt;

&lt;p&gt;If someone had access to the secret randomness used to generate these parameters, they would be able to create false proofs that would look valid to the verifier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz90d1z3beluax6fd8l21.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz90d1z3beluax6fd8l21.gif" alt="accusing a scammer" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How did it come about&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Early cryptocurrency enthusiasts, particularly in the Bitcoin community, have always envisioned a future where digital transactions could be conducted anonymously and without the need for intermediaries. The nature of Bitcoin addresses seemed to offer a degree of privacy, as users could transact without revealing their real-world identities.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctupdp22rnp9fwkg5jru.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fctupdp22rnp9fwkg5jru.gif" alt="we are killing it" width="480" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, as the technology matured, it became increasingly clear that Bitcoin's level of privacy was insufficient. Data scientists, hackers, and law enforcement agencies developed techniques to remove the anonymity of users by analyzing on-chain data and correlating it with other information sources.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Characteristics of zk-SNARKs&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;They don't leak information.&lt;/li&gt;
&lt;li&gt;Tiny and easy to verify.&lt;/li&gt;
&lt;li&gt;They don't require back-and-forth communication.&lt;/li&gt;
&lt;li&gt;They are proofs of knowledge.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Mina’s zk-SNARKs Possibilities&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Mina Protocol uses zk-SNARK technology and takes it to a new level by using recursion so that no matter how many transactions or blocks are added to the chain, the computations stay small, scalable, and efficient. Mina’s smart contracts, zkApps, also leverage zk-SNARKs making it especially powerful to enable privacy &amp;amp; security allowing you to keep your data on a local device while only sharing proof of it on the chain.&lt;/p&gt;

&lt;p&gt;Mina does this by proving that there exists a sequence of blocks that form a blockchain, rather than revalidating the full sequence of blocks every time a new block is created, the proof statement is slightly tweaked, Mina proves that there was a valid proof for some sequence of blocks and an extra one that is also valid. Every time a new block is created and broadcast throughout the network, the proof is extended to support this extra block&lt;/p&gt;

&lt;p&gt;One big advantage of this is when a proof refers to itself it doesn't increase the size of proofs, no how many times a reference is made. "Mina’s self-referential concept of proofs is like a picture of a picture"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1xmjvckbxkgkz5x26o7.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr1xmjvckbxkgkz5x26o7.gif" alt="picture in picture" width="480" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mina is building a secure, democratic future by creating a private gateway between the real world and crypto. With its unique privacy features and ability to connect to any website, Mina is redefining the way we interact with the digital world.&lt;/p&gt;

&lt;p&gt;zk-SNARKs opens the possibilities for new blockchain use cases such as sensitive data like your credit score, home address, medical information, and more. An example of this is &lt;a href="https://www.teller.org/" rel="noopener noreferrer"&gt;Teller&lt;/a&gt;, Teller and Mina work together to prove a customer's credit score to secure a loan without revealing private information.&lt;/p&gt;

&lt;p&gt;To get started with building zk-SNARK apps on Mina protocol, you can go to their &lt;a href="https://docs.minaprotocol.com/zkapps/o1js" rel="noopener noreferrer"&gt;docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;References&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://z.cash/learn/what-are-zk-snarks/" rel="noopener noreferrer"&gt;https://z.cash/learn/what-are-zk-snarks/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.investopedia.com/terms/z/zksnark.asp" rel="noopener noreferrer"&gt;https://www.investopedia.com/terms/z/zksnark.asp&lt;/a&gt;&lt;br&gt;
&lt;a href="https://minaprotocol.com/blog/what-are-zk-snarks" rel="noopener noreferrer"&gt;https://minaprotocol.com/blog/what-are-zk-snarks&lt;/a&gt;&lt;br&gt;
&lt;a href="https://minaprotocol.com/blog/zk-you-should-know-snarks-starks" rel="noopener noreferrer"&gt;https://minaprotocol.com/blog/zk-you-should-know-snarks-starks&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blog.zkbob.com/zksnarks-explained-how-zkbob-achieves-anonymity-in-blockchain-transactions/" rel="noopener noreferrer"&gt;https://blog.zkbob.com/zksnarks-explained-how-zkbob-achieves-anonymity-in-blockchain-transactions/&lt;/a&gt;&lt;br&gt;
&lt;a href="https://medium.com/@bhaskark2/understanding-zero-knowledge-proofs-part-1-verifiable-computation-with-zk-snarks-ba6cbb8e6001" rel="noopener noreferrer"&gt;https://medium.com/@bhaskark2/understanding-zero-knowledge-proofs-part-1-verifiable-computation-with-zk-snarks-ba6cbb8e6001&lt;/a&gt;&lt;br&gt;
&lt;a href="https://blockofchain.medium.com/mina-snark-workers-e37de54ef2a2#:%7E:text=Mina%20Protocol%20uses%20zk%2DSNARKs,or%20proofs%2C%20that%20validate%20transactions" rel="noopener noreferrer"&gt;https://blockofchain.medium.com/mina-snark-workers-e37de54ef2a2#:~:text=Mina%20Protocol%20uses%20zk%2DSNARKs,or%20proofs%2C%20that%20validate%20transactions&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>zksnarks</category>
      <category>minaprotocol</category>
      <category>web3</category>
      <category>blockchain</category>
    </item>
  </channel>
</rss>
