From 5e1981d348e4821d698320fa0eafa2233adfaf95 Mon Sep 17 00:00:00 2001 From: Kalidou Diagne Date: Fri, 13 Jun 2025 18:11:37 +0400 Subject: [PATCH] move contents markdown in specific folder --- README.md | 4 +- app/(pages)/blog/[slug]/page.tsx | 2 +- app/(pages)/blog/page.tsx | 4 +- app/(pages)/blog/tags/[tag]/page.tsx | 2 +- app/(pages)/blog/tags/page.tsx | 2 +- app/(pages)/layout.tsx | 52 ----- app/(pages)/programs/index.tsx | 16 +- .../projects/sections/ProjectContent.tsx | 6 +- app/api/articles/route.ts | 2 +- app/api/projects/route.ts | 26 +++ app/labels.ts | 71 ++++++ app/layout.tsx | 63 ++++-- app/providers/GlobalProvider.tsx | 87 ++++++++ app/providers/ProjectsProvider.tsx | 94 ++++++++ components/blog/article-in-evidance-card.tsx | 2 +- .../{ArticlesList.tsx => articles-list.tsx} | 26 +-- components/blog/blog-article-card.tsx | 2 +- components/blog/blog-articles.tsx | 2 +- components/blog/blog-content.tsx | 2 +- components/blog/blog-recent-articles.tsx | 2 +- components/blog/project-blog-articles.tsx | 2 +- components/layouts/GlobalProviderLayout.tsx | 18 ++ components/layouts/QueryProviderLayout.tsx | 15 -- components/project/project-list.tsx | 34 +-- content/articles/README.md | 4 +- {data => content}/events/devcon-7.ts | 0 content/projects/README.md | 204 ++++++++++++++++++ content/projects/_project-template.md | 89 ++++++++ content/projects/anon-aadhaar.md | 55 +++++ content/projects/anon-klub.md | 30 +++ content/projects/bandada.md | 108 ++++++++++ content/projects/channel-4.md | 20 ++ content/projects/chiquito.md | 27 +++ content/projects/circom-mpc.md | 32 +++ content/projects/client-side-proving.md | 70 ++++++ content/projects/coco.md | 24 +++ content/projects/cryptkeeper.md | 18 ++ content/projects/cursive.md | 40 ++++ content/projects/discreetly.md | 19 ++ content/projects/dsl-working-group.md | 18 ++ content/projects/ecip-halo2.md | 19 ++ content/projects/eigen-trust.md | 18 ++ content/projects/excubiae.md | 68 ++++++ content/projects/interep.md | 21 ++ content/projects/jubmoji.md | 31 +++ content/projects/machina-iO.md | 78 +++++++ content/projects/maci-platform.md | 33 +++ content/projects/maci.md | 38 ++++ content/projects/mopro.md | 57 +++++ content/projects/mpc-framework.md | 108 ++++++++++ content/projects/mpc-stats.md | 32 +++ content/projects/mpz.md | 27 +++ content/projects/openpassport.md | 27 +++ content/projects/p0tion.md | 32 +++ content/projects/p256.md | 27 +++ content/projects/pir-scaling-semaphore.md | 80 +++++++ content/projects/plasma-fold.md | 65 ++++++ content/projects/pod2.md | 42 ++++ content/projects/pollen-labs.md | 34 +++ content/projects/post-quantum-cryptography.md | 48 +++++ content/projects/powers-of-tau.md | 26 +++ content/projects/private-proof-delegation.md | 80 +++++++ content/projects/pse-halo2.md | 28 +++ content/projects/pse-security.md | 19 ++ .../publicly-verifiable-garbled-circuit.md | 18 ++ content/projects/rln.md | 19 ++ content/projects/scaling-semaphore.md | 49 +++++ content/projects/semaphore.md | 85 ++++++++ content/projects/sonobe.md | 42 ++++ content/projects/summa.md | 22 ++ content/projects/tlsn.md | 32 +++ content/projects/trusted-setups.md | 31 +++ content/projects/unirep-protocol.md | 59 +++++ content/projects/vOPRF.md | 79 +++++++ content/projects/voice-deck.md | 20 ++ content/projects/wax.md | 26 +++ content/projects/zk-email.md | 20 ++ content/projects/zk-id.md | 103 +++++++++ content/projects/zk-kit.md | 56 +++++ content/projects/zkevm-community.md | 18 ++ content/projects/zkitter.md | 28 +++ content/projects/zkml.md | 18 ++ content/projects/zkopru.md | 49 +++++ content/projects/zkp2p.md | 20 ++ {app/(pages)/content => content}/resources.md | 0 data/programs/accelerationProgramFaq.tsx | 51 ----- data/programs/coreProgramFaq.tsx | 34 --- hooks/useGetProjectRelatedArticles.ts | 2 +- lib/{blog.ts => content.ts} | 46 +++- locales/en/devcon-7.json | 3 - styles/globals.css | 35 ++- tailwind.config.js | 11 +- 92 files changed, 3051 insertions(+), 257 deletions(-) delete mode 100644 app/(pages)/layout.tsx create mode 100644 app/api/projects/route.ts create mode 100644 app/providers/GlobalProvider.tsx create mode 100644 app/providers/ProjectsProvider.tsx rename components/blog/{ArticlesList.tsx => articles-list.tsx} (91%) create mode 100644 components/layouts/GlobalProviderLayout.tsx delete mode 100644 components/layouts/QueryProviderLayout.tsx rename {data => content}/events/devcon-7.ts (100%) create mode 100644 content/projects/README.md create mode 100644 content/projects/_project-template.md create mode 100644 content/projects/anon-aadhaar.md create mode 100644 content/projects/anon-klub.md create mode 100644 content/projects/bandada.md create mode 100644 content/projects/channel-4.md create mode 100644 content/projects/chiquito.md create mode 100644 content/projects/circom-mpc.md create mode 100644 content/projects/client-side-proving.md create mode 100644 content/projects/coco.md create mode 100644 content/projects/cryptkeeper.md create mode 100644 content/projects/cursive.md create mode 100644 content/projects/discreetly.md create mode 100644 content/projects/dsl-working-group.md create mode 100644 content/projects/ecip-halo2.md create mode 100644 content/projects/eigen-trust.md create mode 100644 content/projects/excubiae.md create mode 100644 content/projects/interep.md create mode 100644 content/projects/jubmoji.md create mode 100644 content/projects/machina-iO.md create mode 100644 content/projects/maci-platform.md create mode 100644 content/projects/maci.md create mode 100644 content/projects/mopro.md create mode 100644 content/projects/mpc-framework.md create mode 100644 content/projects/mpc-stats.md create mode 100644 content/projects/mpz.md create mode 100644 content/projects/openpassport.md create mode 100644 content/projects/p0tion.md create mode 100644 content/projects/p256.md create mode 100644 content/projects/pir-scaling-semaphore.md create mode 100644 content/projects/plasma-fold.md create mode 100644 content/projects/pod2.md create mode 100644 content/projects/pollen-labs.md create mode 100644 content/projects/post-quantum-cryptography.md create mode 100644 content/projects/powers-of-tau.md create mode 100644 content/projects/private-proof-delegation.md create mode 100644 content/projects/pse-halo2.md create mode 100644 content/projects/pse-security.md create mode 100644 content/projects/publicly-verifiable-garbled-circuit.md create mode 100644 content/projects/rln.md create mode 100644 content/projects/scaling-semaphore.md create mode 100644 content/projects/semaphore.md create mode 100644 content/projects/sonobe.md create mode 100644 content/projects/summa.md create mode 100644 content/projects/tlsn.md create mode 100644 content/projects/trusted-setups.md create mode 100644 content/projects/unirep-protocol.md create mode 100644 content/projects/vOPRF.md create mode 100644 content/projects/voice-deck.md create mode 100644 content/projects/wax.md create mode 100644 content/projects/zk-email.md create mode 100644 content/projects/zk-id.md create mode 100644 content/projects/zk-kit.md create mode 100644 content/projects/zkevm-community.md create mode 100644 content/projects/zkitter.md create mode 100644 content/projects/zkml.md create mode 100644 content/projects/zkopru.md create mode 100644 content/projects/zkp2p.md rename {app/(pages)/content => content}/resources.md (100%) delete mode 100644 data/programs/accelerationProgramFaq.tsx delete mode 100644 data/programs/coreProgramFaq.tsx rename lib/{blog.ts => content.ts} (83%) delete mode 100644 locales/en/devcon-7.json diff --git a/README.md b/README.md index 116daec..2fd084b 100644 --- a/README.md +++ b/README.md @@ -11,11 +11,11 @@ Enhancing Ethereum through cryptographic research and collective experimentation ### Add/Edit article -- For updating/adding a new article [you can follow this guide](https://github.com/privacy-scaling-explorations/pse.dev/blob/main/articles/README.md) +- For updating/adding a new article [you can follow this guide](content/articles/README.md) ### Add/Edit project list -- For updating/adding project detail [you can follow this guide](https://github.com/privacy-scaling-explorations/pse.dev/blob/main/data/projects/README.md) +- For updating/adding project detail [you can follow this guide](content/projects/_README.md) ## PR Review process diff --git a/app/(pages)/blog/[slug]/page.tsx b/app/(pages)/blog/[slug]/page.tsx index 2e47b61..4fb842b 100644 --- a/app/(pages)/blog/[slug]/page.tsx +++ b/app/(pages)/blog/[slug]/page.tsx @@ -4,7 +4,7 @@ import { AppContent } from "@/components/ui/app-content" import { Button } from "@/components/ui/button" import { Label } from "@/components/ui/label" import { Markdown } from "@/components/ui/markdown" -import { getArticles, getArticleById } from "@/lib/blog" +import { getArticles, getArticleById } from "@/lib/content" import { cn, getBackgroundImage } from "@/lib/utils" import { Metadata } from "next" import Link from "next/link" diff --git a/app/(pages)/blog/page.tsx b/app/(pages)/blog/page.tsx index dd935f8..76aa846 100644 --- a/app/(pages)/blog/page.tsx +++ b/app/(pages)/blog/page.tsx @@ -8,9 +8,9 @@ import { QueryClient, dehydrate, } from "@tanstack/react-query" -import ArticlesList from "@/components/blog/ArticlesList" import { Skeleton } from "@/components/skeleton" -import { getArticles } from "@/lib/blog" +import { getArticles } from "@/lib/content" +import { ArticlesList } from "@/components/blog/articles-list" export const dynamic = "force-dynamic" diff --git a/app/(pages)/blog/tags/[tag]/page.tsx b/app/(pages)/blog/tags/[tag]/page.tsx index b5b3dc3..194e9a6 100644 --- a/app/(pages)/blog/tags/[tag]/page.tsx +++ b/app/(pages)/blog/tags/[tag]/page.tsx @@ -2,7 +2,7 @@ import { LABELS } from "@/app/labels" import { ArticleListCard } from "@/components/blog/article-list-card" import { AppContent } from "@/components/ui/app-content" import { Label } from "@/components/ui/label" -import { getArticles, Article, getArticleTags } from "@/lib/blog" +import { getArticles, Article, getArticleTags } from "@/lib/content" import { interpolate } from "@/lib/utils" import { HydrationBoundary, diff --git a/app/(pages)/blog/tags/page.tsx b/app/(pages)/blog/tags/page.tsx index 88947de..837a8ce 100644 --- a/app/(pages)/blog/tags/page.tsx +++ b/app/(pages)/blog/tags/page.tsx @@ -2,7 +2,7 @@ import { LABELS } from "@/app/labels" import { Icons } from "@/components/icons" import { AppContent } from "@/components/ui/app-content" import { Label } from "@/components/ui/label" -import { getArticleTags } from "@/lib/blog" +import { getArticleTags } from "@/lib/content" import { HydrationBoundary, QueryClient } from "@tanstack/react-query" import Link from "next/link" import { Suspense } from "react" diff --git a/app/(pages)/layout.tsx b/app/(pages)/layout.tsx deleted file mode 100644 index feb8cbe..0000000 --- a/app/(pages)/layout.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import "@/styles/globals.css" -import Script from "next/script" - -import { fontDisplay, fontSans } from "@/lib/fonts" -import { SiteFooter } from "@/components/site-footer" -import { SiteHeader } from "@/components/site-header" -import { TailwindIndicator } from "@/components/tailwind-indicator" - -interface RootLayoutProps { - children: React.ReactNode - params: any -} - -export default function RootLayout({ children }: RootLayoutProps) { - return ( - <> - - - - -
- -
{children}
- -
- - - - - ) -} diff --git a/app/(pages)/programs/index.tsx b/app/(pages)/programs/index.tsx index 1988c92..912b36f 100644 --- a/app/(pages)/programs/index.tsx +++ b/app/(pages)/programs/index.tsx @@ -3,8 +3,6 @@ import { useCallback, useEffect, useRef, useState } from "react" import Image from "next/image" import Link from "next/link" -import { accelerationProgramFaq } from "@/data/programs/accelerationProgramFaq" -import { coreProgramFaq } from "@/data/programs/coreProgramFaq" import { ReactNode } from "react-markdown/lib/ast-to-react" import { twMerge } from "tailwind-merge" @@ -299,8 +297,8 @@ export const ProgramPageContent = () => { id="faq" className="!border-anakiwa-300" size="xs" - items={coreProgramFaq.map( - ({ question: label, answer }, index) => { + items={LABELS.CORE_PROGRAM_FAQ.map( + ({ QUESTION: label, ANSWER: answer }, index) => { return { label, value: index.toString(), @@ -441,14 +439,18 @@ export const ProgramPageContent = () => { { + items={LABELS.ACCELERATION_PROGRAM_FAQ.map( + ({ QUESTION: label, ANSWER: answer }, index) => { return { label, value: index.toString(), children: ( - {answer} + {typeof answer === "string" + ? answer + : answer.map((item, index) => { + return {item} + })} ), } diff --git a/app/(pages)/projects/sections/ProjectContent.tsx b/app/(pages)/projects/sections/ProjectContent.tsx index 25e10d8..418b472 100644 --- a/app/(pages)/projects/sections/ProjectContent.tsx +++ b/app/(pages)/projects/sections/ProjectContent.tsx @@ -1,4 +1,4 @@ -"use client" +// "use client" import Link from "next/link" import { useRouter } from "next/navigation" @@ -23,7 +23,7 @@ import { ProjectBlogArticles } from "@/components/blog/project-blog-articles" import { ProjectYouTubeVideos } from "@/components/sections/ProjectYouTubeVideos" export const ProjectContent = ({ id }: { id: string }) => { - const router = useRouter() + // const router = useRouter() const { project, content } = getProjectById(id) ?? {} const hasSocialLinks = Object.keys(project?.links ?? {}).length > 0 @@ -42,7 +42,7 @@ export const ProjectContent = ({ id }: { id: string }) => { const isResearchProject = project?.category === ProjectCategory.RESEARCH if (!project?.id) { - router.push("/404") + // router.push("/404") } if (!project?.id) { diff --git a/app/api/articles/route.ts b/app/api/articles/route.ts index 3dca471..4711165 100644 --- a/app/api/articles/route.ts +++ b/app/api/articles/route.ts @@ -1,5 +1,5 @@ import { NextRequest, NextResponse } from "next/server" -import { getArticles } from "@/lib/blog" +import { getArticles } from "@/lib/content" // Cache control export const revalidate = 60 // Revalidate cache after 60 seconds diff --git a/app/api/projects/route.ts b/app/api/projects/route.ts new file mode 100644 index 0000000..c76923e --- /dev/null +++ b/app/api/projects/route.ts @@ -0,0 +1,26 @@ +import { NextRequest, NextResponse } from "next/server" +import { getProjects } from "@/lib/content" + +// Cache control +export const revalidate = 60 // Revalidate cache after 60 seconds +export const dynamic = "force-dynamic" // Ensure the route is always evaluated + +export async function GET(request: NextRequest) { + const { searchParams } = new URL(request.url) + const tag = searchParams.get("tag") || undefined + const limit = searchParams.get("limit") + ? parseInt(searchParams.get("limit") as string, 10) + : undefined + const status = searchParams.get("status") || undefined + + try { + const projects = getProjects({ tag, limit, status }) + return NextResponse.json(projects ?? []) + } catch (error) { + console.error("Error fetching projects:", error) + return NextResponse.json( + { error: "Failed to fetch projects", success: false }, + { status: 500 } + ) + } +} diff --git a/app/labels.ts b/app/labels.ts index 951c1ec..ff521ba 100644 --- a/app/labels.ts +++ b/app/labels.ts @@ -343,4 +343,75 @@ export const LABELS = { "We are mapping the emerging zero knowledge ecosystem through collective experimentation. We collaborate, share what we learn, and welcome contributions from around the world.", }, }, + CORE_PROGRAM_FAQ: [ + { + QUESTION: "Who can apply?", + ANSWER: + "The Core Program is open to university students based in Japan, South Korea, Taiwan, Costa Rica, Ecuador and Argentina with a basic understanding of programming. If you're currently enrolled in a mathematics or computer science program, you're likely an excellent fit.", + }, + { + QUESTION: "What is the structure of the program?", + ANSWER: + "We use a hybrid learning model with the majority of learning happening online and weekly in-person meetings for discussions and problem-solving. The program consists of three stages: 1) self-driven exploration & guidance, 2) hands-on circuit writing, and 3) open-source project contribution.", + }, + { + QUESTION: "How much time will I need to commit?", + ANSWER: + "We're looking for dedicated students who can commit 40 hours a week from mid-July to September. You will be required to attend in-person meetups once a week and make presentations.", + }, + { + QUESTION: "Can I participate remotely?", + ANSWER: + "Unfortunately no, the weekly in-person sessions are required for in-depth discussions and collaborative problem-solving.", + }, + { + QUESTION: "What will I gain from this program?", + ANSWER: + "Upon completing the program, you'll have comprehensive knowledge about programmable cryptography, a bolstered GitHub portfolio, and opportunities to apply for grants for further research and contributions.", + }, + { + QUESTION: "What if I have more questions?", + ANSWER: + "For any further questions or additional information, you can join our Telegram group!", + }, + ], + ACCELERATION_PROGRAM_FAQ: [ + { + QUESTION: "Who can apply?", + ANSWER: + "The Acceleration program is open to alumni of our entry level programs (e.g. Launch Program, ZK Playground) and other applicants at beginner to intermediate levels with programmable cryptography.", + }, + { + QUESTION: "What platform does the program use?", + ANSWER: + "We will primarily utilize a Github repository for managing documents and staging of the grant proposals, grantees, and their progress. Stakeholders involved can utilize Github issues and pull requests to comment and collaborate.", + }, + { + QUESTION: "How does the grant funding work?", + ANSWER: [ + "While the core funding this program comes through PSE via the Ethereum Ecosystem Support Program (ESP), some bounties are supported by specific teams.", + "Selected grantees will receive a small amount of funding after the completion of the first milestone. Following milestones will be awarded larger amounts.", + ], + }, + { + QUESTION: "How many proposals are accepted per open task?", + ANSWER: + "Generally one proposal will be accepted. However, it is possible for applicants to form a team and work collaboratively.", + }, + { + QUESTION: "How long will I have to tackle the open tasks?", + ANSWER: + "Though our rounds are run in three month periods, the duration of your grant may be shorter or longer depending on task details.", + }, + { + QUESTION: "Can I propose an open task?", + ANSWER: + "If you have an interesting idea, you can submit it as an self proposed open task. Just to make sure you clearly credit to the original idea and clearly state if that idea is also funded by someone else.", + }, + { + QUESTION: "What if I have more questions?", + ANSWER: + "For any further questions or additional information, you can join our Telegram group!", + }, + ], } diff --git a/app/layout.tsx b/app/layout.tsx index ec43447..70c9e90 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -1,8 +1,13 @@ import "@/styles/globals.css" +import Script from "next/script" import { Metadata, Viewport } from "next" +import { GlobalProviderLayout } from "@/components/layouts/GlobalProviderLayout" +import { SiteFooter } from "@/components/site-footer" +import { SiteHeader } from "@/components/site-header" +import { TailwindIndicator } from "@/components/tailwind-indicator" import { siteConfig } from "@/config/site" -import { QueryClientProviderLayout } from "@/components/layouts/QueryProviderLayout" +import { cn } from "@/lib/utils" import { DM_Sans, Inter, Space_Grotesk } from "next/font/google" @@ -38,6 +43,13 @@ const sans = DM_Sans({ const fonts = [inter, display, sans] +export const viewport: Viewport = { + themeColor: [ + { media: "(prefers-color-scheme: light)", color: "white" }, + { media: "(prefers-color-scheme: dark)", color: "black" }, + ], +} + export const metadata: Metadata = { title: { default: siteConfig.name, @@ -99,25 +111,46 @@ export const metadata: Metadata = { }, } -export const viewport: Viewport = { - themeColor: [ - { media: "(prefers-color-scheme: light)", color: "white" }, - { media: "(prefers-color-scheme: dark)", color: "black" }, - ], -} - interface RootLayoutProps { children: React.ReactNode } export default function RootLayout({ children }: RootLayoutProps) { return ( - - font.className).join(" ")}> - - {children} - - - + + + + + +
+ +
{children}
+ +
+ +
+ + ) } diff --git a/app/providers/GlobalProvider.tsx b/app/providers/GlobalProvider.tsx new file mode 100644 index 0000000..f37da16 --- /dev/null +++ b/app/providers/GlobalProvider.tsx @@ -0,0 +1,87 @@ +"use client" + +import { + createContext, + useContext, + ReactNode, + useState, + useEffect, +} from "react" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" +import { ProjectsProvider } from "./ProjectsProvider" + +interface GlobalContextType { + children?: ReactNode + isDarkMode: boolean + setIsDarkMode: (value: boolean) => void +} + +const DARK_MODE_KEY = "pse-dark-mode" +const GlobalContext = createContext(undefined) + +const queryClient = new QueryClient({ + defaultOptions: { + queries: { + refetchOnWindowFocus: false, + retry: false, + }, + }, +}) + +export function GlobalProvider({ children }: { children: ReactNode }) { + // Initialize dark mode from local storage or system preference + const [isDarkMode, setIsDarkMode] = useState(() => { + // Check local storage first + const storedPreference = localStorage.getItem(DARK_MODE_KEY) + if (storedPreference !== null) { + return storedPreference === "true" + } + // Fall back to system preference + return window.matchMedia("(prefers-color-scheme: dark)").matches + }) + + // Listen for system preference changes + useEffect(() => { + const mediaQuery = window.matchMedia("(prefers-color-scheme: dark)") + const handleChange = (e: MediaQueryListEvent) => { + // Only update if user hasn't explicitly set a preference + if (localStorage.getItem("pse,") === null) { + setIsDarkMode(e.matches) + } + } + + // Add event listener + mediaQuery.addEventListener("change", handleChange) + + // Cleanup + return () => mediaQuery.removeEventListener("change", handleChange) + }, []) + + // Save preference to localStorage when it changes + useEffect(() => { + localStorage.setItem(DARK_MODE_KEY, isDarkMode.toString()) + }, [isDarkMode]) + + const value = { + isDarkMode: true, + setIsDarkMode, + } + + return ( + + + + {children} + + + + ) +} + +export function useGlobalProvider() { + const context = useContext(GlobalContext) + if (context === undefined) { + throw new Error("useGlobalContext must be used within a GlobalProvider") + } + return context +} diff --git a/app/providers/ProjectsProvider.tsx b/app/providers/ProjectsProvider.tsx new file mode 100644 index 0000000..c5c7183 --- /dev/null +++ b/app/providers/ProjectsProvider.tsx @@ -0,0 +1,94 @@ +"use client" + +import { createContext, useContext, ReactNode } from "react" +import { useQuery } from "@tanstack/react-query" + +// Define the Project type based on your needs +export interface Project { + id: string + title: string + description: string + image?: string + tags?: string[] + url?: string + github?: string + date?: string + status?: "completed" | "in-progress" | "planned" +} + +interface ProjectsContextType { + projects: any[] + isLoading: boolean + isError: boolean + error: Error | null + refetch: () => Promise +} + +const ProjectsContext = createContext( + undefined +) + +async function fetchProjects(tag?: string) { + try { + const params = new URLSearchParams() + if (tag) params.append("tag", tag) + + const response = await fetch(`/api/projects?${params.toString()}`, { + cache: "default", + }) + + if (!response.ok) { + throw new Error(`Failed to fetch projects: ${response.status}`) + } + + const projects = await response.json() + return projects || [] + } catch (error) { + console.error("Error fetching projects:", error) + throw error // Let React Query handle the error + } +} + +interface ProjectsProviderProps { + children: ReactNode + tag?: string +} + +export function ProjectsProvider({ children, tag }: ProjectsProviderProps) { + const { + data: projects = [], + isLoading, + isError, + error, + refetch, + } = useQuery({ + queryKey: ["projects", tag], + queryFn: async () => { + const projects = await fetchProjects() + console.log("projects for provider", projects) + return projects + }, + }) + + return ( + + {children} + + ) +} + +export function useProjects() { + const context = useContext(ProjectsContext) + if (context === undefined) { + throw new Error("useProjects must be used within a ProjectsProvider") + } + return context +} diff --git a/components/blog/article-in-evidance-card.tsx b/components/blog/article-in-evidance-card.tsx index 96fb010..2c9b8f2 100644 --- a/components/blog/article-in-evidance-card.tsx +++ b/components/blog/article-in-evidance-card.tsx @@ -2,7 +2,7 @@ import { Icons } from "../icons" import { Button } from "../ui/button" -import { Article } from "@/lib/blog" +import { Article } from "@/lib/content" import { cn } from "@/lib/utils" import Link from "next/link" import { LABELS } from "@/app/labels" diff --git a/components/blog/ArticlesList.tsx b/components/blog/articles-list.tsx similarity index 91% rename from components/blog/ArticlesList.tsx rename to components/blog/articles-list.tsx index 4dd271d..ed8b9ec 100644 --- a/components/blog/ArticlesList.tsx +++ b/components/blog/articles-list.tsx @@ -1,7 +1,7 @@ "use client" import { useQuery } from "@tanstack/react-query" -import { Article } from "@/lib/blog" +import { Article } from "@/lib/content" import { ArticleListCard } from "./article-list-card" import { cn, getBackgroundImage } from "@/lib/utils" import Link from "next/link" @@ -161,7 +161,7 @@ interface ArticlesListProps { tag?: string } -const ArticlesList: React.FC = ({ +export const ArticlesList: React.FC = ({ tag, }: ArticlesListProps) => { const { @@ -186,21 +186,23 @@ const ArticlesList: React.FC = ({ } const lastArticle = articles[0] - const featuredArticles = !tag ? articles.slice(1, 5) : [] - const otherArticles = !tag ? articles.slice(5) : articles + const featuredArticles = !tag ? articles.slice(1, 3) : [] + const otherArticles = !tag ? articles.slice(3) : articles const hasTag = tag !== undefined return (
{!hasTag && ( -
- +
+
+ +
{featuredArticles?.map((article: Article) => { return ( @@ -225,5 +227,3 @@ const ArticlesList: React.FC = ({
) } - -export default ArticlesList diff --git a/components/blog/blog-article-card.tsx b/components/blog/blog-article-card.tsx index 2b3c7e1..63337a0 100644 --- a/components/blog/blog-article-card.tsx +++ b/components/blog/blog-article-card.tsx @@ -1,4 +1,4 @@ -import { Article } from "@/lib/blog" +import { Article } from "@/lib/content" import { cn } from "@/lib/utils" import { cva } from "class-variance-authority" import Image from "next/image" diff --git a/components/blog/blog-articles.tsx b/components/blog/blog-articles.tsx index 11b2428..3175acd 100644 --- a/components/blog/blog-articles.tsx +++ b/components/blog/blog-articles.tsx @@ -1,4 +1,4 @@ -import { Article, getArticles } from "@/lib/blog" +import { Article, getArticles } from "@/lib/content" import Link from "next/link" import { BlogArticleCard } from "./blog-article-card" diff --git a/components/blog/blog-content.tsx b/components/blog/blog-content.tsx index 49f6415..4800d85 100644 --- a/components/blog/blog-content.tsx +++ b/components/blog/blog-content.tsx @@ -1,4 +1,4 @@ -import { Article, getArticles } from "@/lib/blog" +import { Article, getArticles } from "@/lib/content" import Link from "next/link" import { AppContent } from "../ui/app-content" import { Markdown } from "../ui/markdown" diff --git a/components/blog/blog-recent-articles.tsx b/components/blog/blog-recent-articles.tsx index 2d488cb..3592dee 100644 --- a/components/blog/blog-recent-articles.tsx +++ b/components/blog/blog-recent-articles.tsx @@ -1,6 +1,6 @@ import { LABELS } from "@/app/labels" import { AppContent } from "../ui/app-content" -import { getArticles, Article } from "@/lib/blog" +import { getArticles, Article } from "@/lib/content" import Link from "next/link" import { cn } from "@/lib/utils" import { Button } from "../ui/button" diff --git a/components/blog/project-blog-articles.tsx b/components/blog/project-blog-articles.tsx index 07b078a..d8f481c 100644 --- a/components/blog/project-blog-articles.tsx +++ b/components/blog/project-blog-articles.tsx @@ -2,7 +2,7 @@ import { ProjectInterface } from "@/lib/types" import { AppContent } from "../ui/app-content" -import { Article } from "@/lib/blog" +import { Article } from "@/lib/content" import { ArticleListCard } from "./article-list-card" import { useGetProjectRelatedArticles } from "@/hooks/useGetProjectRelatedArticles" diff --git a/components/layouts/GlobalProviderLayout.tsx b/components/layouts/GlobalProviderLayout.tsx new file mode 100644 index 0000000..8ca38fb --- /dev/null +++ b/components/layouts/GlobalProviderLayout.tsx @@ -0,0 +1,18 @@ +"use client" + +import { GlobalProvider } from "@/app/providers/GlobalProvider" +import { QueryClient, QueryClientProvider } from "@tanstack/react-query" + +const queryClient = new QueryClient() + +export const GlobalProviderLayout = ({ + children, +}: { + children: React.ReactNode +}) => { + return ( + + {children} + + ) +} diff --git a/components/layouts/QueryProviderLayout.tsx b/components/layouts/QueryProviderLayout.tsx deleted file mode 100644 index 42e09f5..0000000 --- a/components/layouts/QueryProviderLayout.tsx +++ /dev/null @@ -1,15 +0,0 @@ -"use client" - -import { QueryClient, QueryClientProvider } from "@tanstack/react-query" - -const queryClient = new QueryClient() - -export const QueryClientProviderLayout = ({ - children, -}: { - children: React.ReactNode -}) => { - return ( - {children} - ) -} diff --git a/components/project/project-list.tsx b/components/project/project-list.tsx index 4ad0ceb..b6e7227 100644 --- a/components/project/project-list.tsx +++ b/components/project/project-list.tsx @@ -18,6 +18,7 @@ import { cn } from "@/lib/utils" import { LABELS } from "@/app/labels" import ProjectCard from "./project-card" +import { useProjects } from "@/app/providers/ProjectsProvider" const sectionTitleClass = cva( "relative font-sans text-base font-bold uppercase tracking-[3.36px] text-anakiwa-950 after:ml-8 after:absolute after:top-1/2 after:h-[1px] after:w-full after:translate-y-1/2 after:bg-anakiwa-300 after:content-['']" @@ -47,9 +48,7 @@ export const ProjectList = () => { const [isManualScroll, setIsManualScroll] = useState(false) const [isMounted, setIsMounted] = useState(false) - const { projects, searchQuery, queryString } = useProjectFiltersState( - (state) => state - ) + const { projects } = useProjects() const noItems = projects?.length === 0 @@ -94,8 +93,6 @@ export const ProjectList = () => { } }, []) - const hasActiveFilters = searchQuery !== "" || queryString !== "" - // loading state skeleton if (!isMounted) { return ( @@ -129,23 +126,6 @@ export const ProjectList = () => { {} as Record ) - // show all projects without sections if there are active filters - if (hasActiveFilters) { - return ( -
- {projects.map((project) => ( - - ))} -
- ) - } - return (
@@ -165,16 +145,8 @@ export const ProjectList = () => { className="flex justify-between gap-10" >
- {!hasActiveFilters && ( -
-

{status}

- - {description} - -
- )}
- {projects.map((project) => ( + {projects.map((project: any) => ( 18, Gender, State, Pincode). Note that by default the Prover will reveal nothing from the ID. +- **Nullifier**: Nullifier is a unique identifiers derived from data fields, used to prevent double-spending or duplicate proofs without revealing the actual data. +- **Timestamp**: The timestamp of the signature associated with the data is converted into a UNIX UTC format, enabling Timebased One Time Password verification at the verifier level. + +The protocol is served through an SDK containing: + +- TypeScript Library: [@anon-aadhaar/core](https://www.npmjs.com/package/@anon-aadhaar/core) +- Solidity Library: [@anon-aadhaar/contracts](https://www.npmjs.com/package/@anon-aadhaar/contracts) +- React Library: [@anon-aadhaar/react](https://www.npmjs.com/package/@anon-aadhaar/react) + +You can play with our **mobile prover**, which offer a faster proving time: + +- [Anon Aadhaar React Native](https://github.com/anon-aadhaar/anon-aadhaar-react-native) + +We developed a prover for [Digilocker](https://www.digilocker.gov.in/), that let you generate ZKPs from official documents stored in the Digolocker App, enabling use cases with proof of degrees, UPI, driver license and more. + +### Applications: + +- Quick Setup - [Website](https://anon-aadhaar-quick-setup.vercel.app/) | [GitHub](https://github.com/anon-aadhaar/quick-setup) +- Boilerplate On-Chain Voting App - [Website](https://boilerplate.anon-aadhaar.pse.dev/) | [GitHub](https://github.com/anon-aadhaar/boilerplate) +- Anon Digilocker - [Website](https://anon-digilocker.vercel.app/) | [GitHub](https://github.com/anon-aadhaar/anon-digilocker) diff --git a/content/projects/anon-klub.md b/content/projects/anon-klub.md new file mode 100644 index 0000000..57c32dd --- /dev/null +++ b/content/projects/anon-klub.md @@ -0,0 +1,30 @@ +--- +id: "anon-klub" +name: "AnonKlub" +image: "anonklub.svg" +section: "archived" +projectStatus: "inactive" +category: "application" +tldr: "A mechanism for anonymous proof of Ethereum address ownership." +tags: + keywords: + [ + "Transaction privacy", + "Anonymity/privacy", + "Social", + "Identity", + "Voting/governance", + ] + themes: ["build", "play"] + types: ["Infrastructure/protocol", "Prototype", "Proof of concept"] + builtWith: ["circom", "snarkjs", "halo2"] +links: + github: "https://github.com/anonklub" + website: "https://anonklub.github.io" +extraLinks: + learn: + - label: "Sunsetting Blog Post: Reflections on Our Journey in Privacy-Preserving Solutions" + url: "https://mirror.xyz/privacy-scaling-explorations.eth/7VTKFVR4PM75WtNnBzuQSBZW-UYoJOsnzBBQmB9MWbY" +--- + +AnonKlub is a tool designed for Ethereum developers that allows for anonymous proof of Ethereum address ownership. It doesn't directly address the public observability of Ethereum transactions but provides a workaround for privacy. Users can prepare a list of Ethereum addresses, sign a message from an address they own, and use that signature to generate a zero-knowledge proof. This proof enables users to perform actions anonymously that would typically require ownership of an address from the initial list. Use cases include anonymous NFT minting and Discord verification for DAOs without disclosing the public address. diff --git a/content/projects/bandada.md b/content/projects/bandada.md new file mode 100644 index 0000000..b52cdfa --- /dev/null +++ b/content/projects/bandada.md @@ -0,0 +1,108 @@ +--- +id: "bandada" +name: "Bandada" +image: "bandada.webp" +section: "pse" +projectStatus: "maintained" +category: "application" +tldr: "An open-source tool for managing privacy-preserving groups of anonymous individuals." +tags: + keywords: + [ + "Anonymity/privacy", + "Social", + "Identity", + "Transaction privacy", + "Voting/governance", + "Reputation", + "Education", + "Scaling", + "Key management", + ] + types: + [ + "Legos/dev tools", + "Lego sets/toolkits", + "Prototype", + "Proof of concept", + "Infrastructure/protocol", + "Plugin", + "Application", + ] + builtWith: ["semaphore", "zk-kit"] + themes: ["build", "play"] +links: + github: "https://github.com/bandada-infra/bandada" + website: "https://bandada.pse.dev" + twitter: "https://twitter.com/BandadaDevs" +extraLinks: + buildWith: + - label: "Bandada API" + url: "https://api.bandada.pse.dev/" + - label: "Bandada API SDK" + url: "https://github.com/bandada-infra/bandada/tree/main/libs/api-sdk" + - label: "Bandada Boilerplate" + url: "https://github.com/bandada-infra/boilerplate" + play: + - label: "Bandada Dashboard" + url: "https://app.bandada.pse.dev/" + - label: "Bandada Boilerplate Live App" + url: "https://demo.bandada.pse.dev/" + learn: + - label: "Bandada Website" + url: "https://bandada.pse.dev/" + - label: "Bandada Documentation" + url: "https://docs.bandada.pse.dev/" + - label: "Bandada Board" + url: "https://github.com/orgs/bandada-infra/projects/1" +--- + +### Overview + +[Bandada](https://bandada.pse.dev/) is a project designed to simplify the management of privacy-preserving groups. It is aimed at developers who want to build privacy-based applications and integrate anonymity sets, as well as non-developers working in DAOs, governments, international institutions, non-profit organizations, and associations that want to create and manage anonymous groups. + +Bandada offers a plug-and-play infrastructure, reducing the time and complexity required for managing anonymity sets. It enables anonymous signaling, such as voting, messaging, logging in, or endorsing, in various use cases like private organizations, GitHub repository contributors, and groups of wallets holding a specific NFT. + +### Features + +- Easily create onchain or offchain anonymous groups with a few clicks using the Bandada Admin Dashboard. + +- Decide how members will join, with a unique invitation URL or by proving credentials. + +- Select which credentials users will need to prove to join a group (GitHub, Twitter, [EAS](https://attest.org/), Blockchain information, etc.). Multiple credentials using logical operators and parentheses are supported. + +- Build your application on top of Bandada, leveraging completely anonymous signals (like votes, endorsements, claims, messages, etc.) + +### Background + +In Spanish, "Bandada" means "flock" or "group" of birds or animals moving together in a coordinated manner. Groups are an important concept when we speak about privacy and zero-knowledge technologies, they can be thought of as anonymity sets. Credentials are a way to establish necessary trust between a set of participants while letting users keep control over how their identities are stored and used. + +Bandada allows you to create groups and establish trust within the participants by ensuring that everyone who joins the group must meet the credential requirements. + +### How Does It Work + +Bandada consists of a back-end to store the groups and provide the API, two front-ends: the dashboard to manage groups and members and a demo application to allow end-users to join the groups, and the contracts. Additionally, it provides a set of JavaScript libraries to support developers. + +The groups are currently binary Merkle trees compatible with the Semaphore protocol, but additional data structures will be integrated in the future. Two types of groups can be created from the dashboard: manual or credential groups. In the former, you can add members by entering IDs directly or by creating invite links, while in the latter you can define credentials that members must prove they have in order to access the group. + +Once you create your manual group in the dashboard, you can either create an API key to add or remove members or use the invite codes to add members with the [@bandada/api-sdk](https://github.com/bandada-infra/bandada/tree/main/libs/api-sdk) library. Credential groups can instead be accessed by redirecting users to an appropriate page in the dashboard, Bandada will ask users for permission to fetch their credentials and check if they are eligible. + +Bandada also provides a preset of credential validators that can be extended with the [@bandada/credentials](https://github.com/bandada-infra/bandada/tree/main/libs/credentials) library. + +### Use Cases + +- Group with members who have contributed to a specific GitHub repository. + +- "Whitelist" a group of GitHub devs who have contributed to top DAOs' repositories. + +- Group of people with more than X followers on Twitter. + +- Custom anti-Sybil mechanism. + +- Group of people in an organization like DAO, company, etc. + +- Unlocking private interactions, such as anonymous feedback, whistleblowing, chat, and voting. + +- Groups of wallets holding a specific NFT. + +- Token-gated access to content. diff --git a/content/projects/channel-4.md b/content/projects/channel-4.md new file mode 100644 index 0000000..91ce848 --- /dev/null +++ b/content/projects/channel-4.md @@ -0,0 +1,20 @@ +--- +id: "channel-4" +name: "Channel 4" +image: "channel4.svg" +section: "archived" +projectStatus: "inactive" +category: "application" +tldr: "Content discovery through community contributions, using state channels to reward users for popular posts." +tags: + keywords: ["Scaling"] + themes: ["play"] + types: ["Application"] + builtWith: ["state channel", "smart contract"] +links: + github: "https://github.com/State-Channel-4" + website: "https://channel4.wtf/" + discord: "https://discord.gg/76UrYgVyEx" +--- + +Channel 4 is a community-driven platform where users can submit and discover content. It uses state channels to incentivize user engagement. When a user likes the content you've submitted, a state channel closes and rewards are dropped into their wallet. This approach combines entertainment with the power of state channels, enabling community members to earn while they engage. diff --git a/content/projects/chiquito.md b/content/projects/chiquito.md new file mode 100644 index 0000000..f752020 --- /dev/null +++ b/content/projects/chiquito.md @@ -0,0 +1,27 @@ +--- +id: "chiquito" +name: "chiquito" +image: "" +section: "pse" +projectStatus: "inactive" +category: "devtools" +tldr: "A modern ZKP language and compiler for plonkish and AIR arithmetizations" +tags: + themes: ["build"] + types: + [ + "Legos/dev tools", + "Lego sets/toolkits", + "Proof of concept", + "language", + "dsl", + ] + keywords: ["DSL", "language", "rust", "python", "halo2"] + builtWith: ["halo2", "rust"] +links: + github: "https://github.com/privacy-scaling-explorations/chiquito" + website: "https://docs.pecadorplonkish.xyz/" + twitter: "" +--- + +Chiquito is a high-level structured language for implementing zero knowledge proof circuits, currently being implemented in the DSL Working Group of PSE. It is a state machine zk-language that provides better syntax and abstraction. It can automatically compiler arbitrary boolean expressions for state machine transitions. It can optimise the resulting arithmetization. Chiquito has a Halo2 backend, which is a low level zkDSL that writes circuits using the PLONKish arithmetization and is working on supporting additional backends. Chiquito circuits can be written using both Python and Rust. diff --git a/content/projects/circom-mpc.md b/content/projects/circom-mpc.md new file mode 100644 index 0000000..580a1a3 --- /dev/null +++ b/content/projects/circom-mpc.md @@ -0,0 +1,32 @@ +--- +id: "circom-mpc" +name: "Circom-MPC" +image: "" +section: "pse" +projectStatus: "inactive" +category: "research" +tldr: "PSE Research project that enables the use of the Circom language to develop MPC applications." +tags: + keywords: ["mpc", "circom", "mp-spdz"] + themes: ["research"] +links: + github: "https://github.com/namnc/circom-2-arithc" +--- + +Circom-MPC is a set of projects designed to compile and run arithmetic and boolean MPC circuits written in Circom. +In this project, we envisioned MPC as a broader paradigm, where MPC serves as an umbrella for generic techniques such as Zero-Knowledge Proof, Garbled Circuit, Secret-Sharing, or Fully Homomorphic Encryption. + +Throughout this research the team produced some valuable resources and insights, including: + +- Implementation of [circom-2-arithc](https://github.com/namnc/circom-2-arithc), a fork of the Circom compiler that targets arithmetic circuits, which can be fed into any MPC backend +- Example integration of circom-2-arithc with the popular Secret-Sharing based backend MP-SPDZ in [circom-MP-SPDZ](https://github.com/namnc/circom-mp-spdz). +- Proof of concept application using [MPC-ML](https://hackmd.io/YsWhryEtQ0WwKyerSL8oCw#Circomlib-ML-Patches-and-Benchmarks) with [keras-2-circom-MP-SPDZ](https://github.com/namnc/circom-mp-spdz/blob/main/ML-TESTS.md) which extends keras-2-circom-ZK to [keras-2-circom-MPC](https://github.com/namnc/keras2circom). +- [Modular Layer benchmarks](https://github.com/namnc/circom-mp-spdz/blob/main/BENCHMARK.md) for the keras model. + +We decided to sunset the project for a few reasons: + +- The overwhelming amount of effort to fully implement it. +- The low current traction of users (could be due to Circom). Hence an [MPC-Framework](https://pse.dev/en/projects/mpc-framework) variant may be of more public interest. +- The existence of competitors such as [Sharemind MPC into Carbyne Stack](https://cyber.ee/uploads/Sharemind_MPC_CS_integration_a01ca476a7.pdf). + +Therefore, we will leave it as a paradigm, and hope that any interested party will pick it up and continue its development. diff --git a/content/projects/client-side-proving.md b/content/projects/client-side-proving.md new file mode 100644 index 0000000..e457d0c --- /dev/null +++ b/content/projects/client-side-proving.md @@ -0,0 +1,70 @@ +--- +id: "client-side-proving" +name: "Client-Side Proving" +image: "" +section: "pse" +projectStatus: "active" +category: "research" +tldr: "Developing efficient zero-knowledge proving systems for mobile devices, enabling private digital ID and secure communication with minimal resources." +license: "MIT" +tags: + keywords: ["Zero Knowledge", "Mobile", "Privacy", "Digital Identity"] + themes: ["build", "research"] + types: ["Legos/dev tools", "Benchmarking", "Proof systems"] +team: + - name: "Alex Kuzmin" + email: "alex.kuzmin@pse.dev" + - name: "Guorong Du" + email: "dgr009@pse.dev" +--- + +### Project Overview + +The Client-Side Proving project aims to develop practical and efficient zero-knowledge (ZK) proving systems tailored specifically for mobile devices. By exploring various proving systems - including Binius, Spartan, Plonky2, Scribe, and WHIR - we provide benchmarks, insights, and optimized implementations that enable performant client-side applications. + +### Objective + +Our primary objective is to identify and optimize ZK proof systems that require minimal resources, have no trusted setup, and maintain post-quantum security. These efforts are particularly focused on supporting applications in digital identity, secure communications, and privacy-preserving credential management. + +### Project Status + +- **Stage:** MVP Development +- **Status:** Active +- **Team Lead:** Alex Kuzmin +- **Team Members:** Guorong Du + +### Technical Approach + +The project rigorously benchmarks mobile-friendly ZK proving systems based on critical criteria including computational complexity, RAM efficiency and proof size. Key innovations and strategies include: + +- **Benchmarking Binius, Spartan, Plonky2, and Scribe** for mobile usability. +- **Optimizing RAM usage** through streaming techniques. +- **Evaluation and integration of lookups** to enhance proving efficiency in computationally intensive ZK circuits. + +### Milestones + +- **April 2025:** Established baseline benchmarks for common mobile hardware. +- **May 2025 (planned):** Comprehensive benchmarking results published for selected ZK proving systems. +- **June 2025 (planned):** Optimization of Spartan using WHIR PCS and/or Scribe's read-write streaming techniques. +- **Q3 2025 (planned):** Collaboration with an Identity initiative, integrating optimized proving systems. + +### Applications + +Client-Side Proving enables numerous privacy-focused mobile applications, including: + +- Mobile Digital ID wallets ensuring user privacy. +- Anonymous online communication and collaboration tools. + +### How to get in touch + +- Join the [PSE Discord](https://discord.com/invite/sF5CT5rzrR) +- Reach out via email Alex: alex.kuzmin@pse.dev or Guorong Du: dgr009@pse.dev + +### Publications + +- [Benchmarks for Digital ID Wallet](https://hackmd.io/@clientsideproving/S1wiUc0n1e) +- [Mobile Hardware Survey](https://hackmd.io/@clientsideproving/ByqafXAv1e) +- [Plonky2 Sha256 Benchmarks](https://hackmd.io/@clientsideproving/B1xLCuJL5yg) +- [Proof Systems Survey](https://hackmd.io/@clientsideproving/HyKBkz7jye) + +Benchmark findings and technical write-ups will be released regularly, highlighting the project's research outcomes and performance evaluations. diff --git a/content/projects/coco.md b/content/projects/coco.md new file mode 100644 index 0000000..c8e22a3 --- /dev/null +++ b/content/projects/coco.md @@ -0,0 +1,24 @@ +--- +id: "coco" +name: "COCO" +image: "coco.svg" +section: "archived" +projectStatus: "inactive" +category: "application" +tldr: "Integrating Nova into the EVM involves wrapping Liam Eagen's theoretical ECIP argument in Halo 2" +tags: + keywords: ["prediction market", "scaling"] +extraLinks: + learn: + - label: "Meet COCO!" + url: "https://mirror.xyz/privacy-scaling-explorations.eth/tEf7iYa8l7ECZwN2T57yyiws7h9Uchip30CQvx-JBBQ" + buildWith: + - label: "Smart contracts" + url: "https://github.com/Janmajayamall/coco-contracts" + - label: "Frontend" + url: "https://github.com/Janmajayamall/coco-frontend" + - label: "Frontend (General)" + url: "https://github.com/Janmajayamall/coco-frontend-general" +--- + +With Coco, groups can collaborate to curate feeds of any topic they're interested in. As you scroll through your Coco feed, rather than upvoting or downvoting posts, you'll spend WETH to predict what other group members and the group's moderators will want to see. When you're right, you'll get back your original WETH and more — but if you're wrong, you'll lose what you put in. Through this process, you help Coco filter value from noise to make sure group feeds only consist of posts that the group cares about.With Coco, groups can collaborate to curate feeds of any topic they're interested in. As you scroll through your Coco feed, rather than upvoting or downvoting posts, you'll spend WETH to predict what other group members and the group's moderators will want to see. When you're right, you'll get back your original WETH and more — but if you're wrong, you'll lose what you put in. Through this process, you help Coco filter value from noise to make sure group feeds only consist of posts that the group cares about. diff --git a/content/projects/cryptkeeper.md b/content/projects/cryptkeeper.md new file mode 100644 index 0000000..f853f30 --- /dev/null +++ b/content/projects/cryptkeeper.md @@ -0,0 +1,18 @@ +--- +id: "cryptkeeper" +name: "CryptKeeper" +image: "cryptkeeper.webp" +section: "archived" +projectStatus: "inactive" +category: "application" +tldr: "A browser extension for secure, portable anonymous identity management across applications." +tags: + keywords: ["Anonymity/privacy", "Social", "Identity"] + themes: ["build"] + types: ["Application", "Infrastructure/protocol", "Lego sets/toolkits"] + builtWith: ["semaphore", "rln"] +links: + github: "https://github.com/CryptKeeperZK" +--- + +CryptKeeper is a browser extension that generates Semaphore and RLN proofs for websites, providing a secure and portable solution for managing anonymous identity secrets across different applications. It simplifies the integration of zero-knowledge (ZK) identities and proofs into applications, allowing developers to focus on building the front-end and logic of their applications. By handling complex aspects of cryptography, circuits, caching, and storage, CryptKeeper enables users to interact with decentralized applications (dapps) without revealing their private identity secrets. It is aimed at building secure community standards for the growing ZK ecosystem. diff --git a/content/projects/cursive.md b/content/projects/cursive.md new file mode 100644 index 0000000..68080ad --- /dev/null +++ b/content/projects/cursive.md @@ -0,0 +1,40 @@ +--- +id: "cursive" +name: "Cursive" +image: "cursive.webp" +section: "grant" +projectStatus: "active" +category: "application" +tldr: "A research lab & design studio exploring how cryptography like MPC and ZK can be used to discover and deepen human connection." +tags: + keywords: + [ + "anonymity/privacy", + "education", + "data portability", + "social", + "wallets", + "identity", + "key management", + "reputation", + "toolkits", + ] + builtWith: [] + themes: ["build", "play"] +links: + github: "https://github.com/cursive-team" + website: "https://www.cursive.team/" +--- + +What began as an experimental initiative to transform PSE's theoretical cryptography research into tangible applications has evolved into a dedicated lab that incubates practical ways to connect people through applied cryptography. + +Cursive's work creates essential feedback loops between researchers and developers, continuously improving a variety of open source codebases. They also experiment with new interfaces to experience cryptography, finding particular success with NFC technology. They have used a variety of form factors like cards, stickers, and bracelets to enable users to securely collect private data for cryptographic computations. + +While initial experiments focused on creating engaging ways for users to gather data for zero-knowledge proofs, Cursive is now expanding into developing meaningful multiparty computation (MPC) interactions that put cutting-edge cryptographic research directly into users' hands. + +Here are some product + research highlights: + +- Client-side Nova folding to provide a "Spotify Wrapped" summary of your ZKSummit11 experience: https://github.com/cursive-team/zk-summit +- Private set intersection using multi-party FHE: https://github.com/cursive-team/2P-PSI +- Private hiring matcher using phantom-zone, a full multi-party FHE circuit builder: https://github.com/cursive-team/pz-hiring +- Trinity, a new 2PC scheme with optimal DevX and UX: https://github.com/cursive-team/trinity-v0 diff --git a/content/projects/discreetly.md b/content/projects/discreetly.md new file mode 100644 index 0000000..20d8bab --- /dev/null +++ b/content/projects/discreetly.md @@ -0,0 +1,19 @@ +--- +id: "discreetly" +name: "Discreetly" +image: "discreetly.svg" +section: "pse" +projectStatus: "inactive" +category: "applications" +tldr: "An anonymous, federated, chat application using ZK." +tags: + keywords: ["Anonymity/privacy", "Social"] + themes: ["play"] + types: ["Legos/dev tools", "Proof of concept", "Application"] + builtWith: ["rln", "semaphore"] +links: + github: "https://github.com/Discreetly" + website: "https://app.discreetly.chat/" +--- + +An anonymous, federated, chat application that uses Rate-Limiting Nullifier for spam prevention. diff --git a/content/projects/dsl-working-group.md b/content/projects/dsl-working-group.md new file mode 100644 index 0000000..723aeeb --- /dev/null +++ b/content/projects/dsl-working-group.md @@ -0,0 +1,18 @@ +--- +id: "dsl-working-group" +name: "DSL Working Group" +image: "" +section: "pse" +projectStatus: "inactive" +category: "research" +tldr: "Exploration of languages for writing zk circuits" +tags: + types: ["Legos/dev tools", "Proof of concept", "Developer tooling"] + keywords: [] + themes: ["research"] + builtWith: [] +links: + github: "https://github.com/privacy-scaling-explorations/chiquito/" +--- + +The DSL Working Group is focused on the exploration and improvement of languages used to write zero-knowledge circuits. The group's primary goal is to enhance the state of zk circuit languages, making them easier to write and review by offering the right abstractions. They also aim to make it harder to write unsound circuits by implementing static analysis and enforcing safer patterns. Additionally, they are working to support next-generation (Incrementally Verifiable Computation or IVC) proving systems. The group is currently working on Chiquito, a high-level Domain-Specific Language (DSL) for Halo2 circuits that lowers the entry barrier to write zk circuits with a state-machine abstraction API. diff --git a/content/projects/ecip-halo2.md b/content/projects/ecip-halo2.md new file mode 100644 index 0000000..03e18a1 --- /dev/null +++ b/content/projects/ecip-halo2.md @@ -0,0 +1,19 @@ +--- +id: "ecip-halo2" +name: "ECIP (Elliptic Curve Inner Products) Halo 2 Implementation" +image: "" +section: "pse" +projectStatus: "inactive" +category: "devtools" +tldr: "Integrating Nova into the EVM involves wrapping Liam Eagen's theoretical ECIP argument in Halo 2" +links: + github: "https://github.com/levs57/sage-circuits/" +extraLinks: + learn: + - label: "Designing a plonk circuit for Liam Eagen's protocol" + url: "https://hackmd.io/@levs57/r1n77YvP3" + - label: "ZKPs of Elliptic Curve Inner Products from Principal Divisors and Weil Reciprocity" + url: "https://eprint.iacr.org/2022/596" +--- + +Liam Eagen has developed a ZK proof for Elliptic Curve Inner Products (ECIPs) to overcome a significant bottle neck in recursive proof composition over elliptic curve cycles. The process of integrating Nova into the EVM requires an efficient method or "argument" for handling large elliptic Multi-Scalar Multiplications (MSMs). The final step in this integration process involves wrapping this argument Halo 2. diff --git a/content/projects/eigen-trust.md b/content/projects/eigen-trust.md new file mode 100644 index 0000000..e0b5e62 --- /dev/null +++ b/content/projects/eigen-trust.md @@ -0,0 +1,18 @@ +--- +id: "eigen-trust" +name: "EigenTrust" +image: "" +section: "archived" +projectStatus: "inactive" +category: "research" +tldr: "A distributed reputation system with zero-knowledge features." +tags: + keywords: ["Reputation", "Identity"] + themes: ["build"] + types: ["Infrastructure/protocol"] + builtWith: ["ethereum attestation service", "halo2", "ethers.rs"] +links: + github: "https://github.com/eigen-trust/protocol" +--- + +EigenTrust is a library designed to manage trust within a distributed network, incorporating zero-knowledge features. It serves as a reputation bank for the Ethereum ecosystem, providing an interoperable layer for managing reputation and trust. The protocol creates zero-knowledge proofs of reputation scores based on ratings given by network participants. This allows for the creation of a reputation system for peer-to-peer marketplaces and exchanges, reputation-weighted voting, and community gatekeeping. diff --git a/content/projects/excubiae.md b/content/projects/excubiae.md new file mode 100644 index 0000000..cf3272a --- /dev/null +++ b/content/projects/excubiae.md @@ -0,0 +1,68 @@ +--- +id: "excubiae" +name: "Excubiae" +image: "" +section: "pse" +projectStatus: "maintained" +category: "devtools" +tldr: "an on-chain flexible & composable framework to create, reuse and customize gatekeepers." +license: "MIT" +tags: + keywords: ["Gatekeeper", "Access Control", "Policy", "Checker"] + themes: ["build"] + types: ["Legos/dev tools", "Lego sets/frameworks"] + builtWith: ["TypeScript", "Solidity"] +links: + github: "https://github.com/privacy-scaling-explorations/excubiae" + discord: "https://discord.com/channels/943612659163602974/1332087370065117260" +--- + +### Overview + +Excubiae is a composable framework for implementing custom, attribute-based access control policies on EVM-compatible networks. It separates policy definition (_what rules to enforce_) from policy checking (_how to validate those rules_), enabling flexible and reusable access control patterns. + +The framework enforces access through two core components: Policy, which defines the enforcement of rules and, Checker which defines the validation of submitted evidence based on the rules. + +Designed with modularity, customizability and reusability in mind, Excubiae provides protocol developers with the building blocks to implement robust access control systems. + +The name "Excubiae" comes from the ancient Roman guards who stood watch and enforced access control—a fitting metaphor for a system that secures smart contract access through configurable policies. + +### Vision + +As blockchain protocols evolve, they generate new forms of verifiable evidence and proofs. While these proofs are critical for access control, integrating them into on-chain systems outside their native environments (e.g., APIs, apps, libraries) remains a challenge. + +Excubiae bridges this gap by providing a universal framework for composing and enforcing interoperable on-chain access policies, serving as a foundational layer for secure, evidence-based authentication across the ecosystem. + +### Features + +- **Composable Access Control** – A modular and reusable framework for attribute-based access control on EVM-compatible networks. Excubiae separates policy logic from validation logic, enabling independent audits and cross-protocol composability. +- **Gas-Efficient Minimal Proxy Pattern** – Uses a minimal proxy pattern with immutable arguments to reduce gas costs. Factory contracts can efficiently deploy Policies and Checkers while ensuring proper initialization. +- **Multi-Stage Validation System** – Supports three validation stages to support layered access control for use cases such as voting, governance, and staged authentication. + - **PRE** – Initial conditions (e.g., token ownership). + - **MAIN** – Ongoing validation (e.g., governance approval). + - **POST** – Follow-up actions (e.g., logging, permission updates). + +### Status + +🚀 Version [v0.3.2](https://github.com/privacy-scaling-explorations/excubiae/releases/tag/v0.3.2) has been officially released! Excubiae has reached a fully-fledged MVP, and the focus is now on adoption and integration. + +The roadmap includes: + +- ✅ A set of ready-to-use Checkers & Policies and their respective Factories ("extensions"). We are going to start by porting the [MACI Gatekeepers](https://github.com/privacy-scaling-explorations/maci/tree/dev/apps/website/versioned_docs/version-v1.2/solidity-docs/gatekeepers) as Excubiae Policy-Checker contracts. + - The current version supports the porting of MACI's [Semaphore](https://github.com/privacy-scaling-explorations/excubiae/tree/main/packages/contracts/contracts/extensions) gatekeeper as extension. This extension enforces membership proofs for a Semaphore group with frontrunning resistance. +- ✅ Deployment scripts, guides, and examples for seamless integration. + - You can already find a [BaseVoting or AdvancedVoting](https://github.com/privacy-scaling-explorations/excubiae/tree/main/packages/contracts/contracts/test/core) examples, plus the Semaphore extension built on the Base core contracts. +- ⚠️ Some lower-priority features are on hold and may be revisited based on adoption trends. + +### Contributing + +We welcome contributions! Whether you're interested in integrating Excubiae, developing custom Policies or Checkers, or providing feedback, we'd love to hear from you. + +🔗 Join the conversation: + +- 📢 [PSE Discord](https://discord.com/invite/sF5CT5rzrR) (#🚪-excubiae channel) +- 🛠️ Open an [Issue](https://github.com/privacy-scaling-explorations/excubiae/issues/new) or [Pull Request](https://github.com/privacy-scaling-explorations/excubiae/compare) on the [GitHub monorepo](https://github.com/privacy-scaling-explorations/excubiae). + +### Learn More + +For deeper insights into the core design, philosophy, roadmap, and integration guides, check out our [documentation](https://github.com/privacy-scaling-explorations/excubiae/tree/main/documentation). diff --git a/content/projects/interep.md b/content/projects/interep.md new file mode 100644 index 0000000..26516a3 --- /dev/null +++ b/content/projects/interep.md @@ -0,0 +1,21 @@ +--- +id: "interep" +name: "Interep" +image: "interep.svg" +section: "archived" +projectStatus: "inactive" +category: "devtools" +tldr: "An identity bridge from web2 to web3" +tags: + keywords: ["social", "reputation"] +links: + website: "https://docs.interep.link/" + github: "https://github.com/interep-project" + youtube: "https://www.youtube.com/watch?v=dYKgHkb_aqk" +extraLinks: + learn: + - label: "Interep: An on-ramp for reputation" + url: "https://mirror.xyz/privacy-scaling-explorations.eth/w7zCHj0xoxIfhoJIxI-ZeYIXwvNatP1t4w0TsqSIBe4" +--- + +Interep aims to provide an identity solution for Ethereum users by bridging from an established digital identity source such as Reddit, Twitter, and Github. The product provides an identity layer in the application stack and uses the Semaphore framework to ensure privacy. Interep allows users to establish sybil-resistant decentralized identities on web3 without starting from scratch. By leveraging zero-knowledge proofs, Interep ensures only essential information is disclosed. diff --git a/content/projects/jubmoji.md b/content/projects/jubmoji.md new file mode 100644 index 0000000..60528e7 --- /dev/null +++ b/content/projects/jubmoji.md @@ -0,0 +1,31 @@ +--- +id: "jubmoji" +name: "jubmoji.quest" +image: "jubmoji.webp" +section: "archived" +projectStatus: "inactive" +category: "application" +tldr: "Users of Jubmoji.quest tap NFC cards to collect signatures. By collecting these signatures, they complete quests." +tags: + keywords: + [ + "anonymity/privacy", + "education", + "data portability", + "social", + "wallets", + "identity", + "key management", + "reputation", + "toolkits", + ] + builtWith: ["snarkjs", "circom", "node"] + themes: ["build", "play"] +links: + github: "https://github.com/jubmoji/jubmoji.quest" + website: "https://www.jubmoji.quest/" +--- + +Jubmoji.quest is a place to keep personal, provable digital mementos from people you meet and places you visit IRL. Each time you tap a card, you collect a Jubmoji, a unique cryptographic signature that you can store privately and share as you wish! + +The learnings from this experiment influenced the creation of [Cursive](https://pse.dev/en/projects/cursive) which continues to explore applications of cryptography for human connection. diff --git a/content/projects/machina-iO.md b/content/projects/machina-iO.md new file mode 100644 index 0000000..9137a50 --- /dev/null +++ b/content/projects/machina-iO.md @@ -0,0 +1,78 @@ +--- +id: "machina-iO" +name: "MachinaIO" +image: "" +section: "pse" +projectStatus: "active" +category: "research" +tldr: "Building the first practical indistinguishability obfuscation (iO) system for secure and scalable cryptographic applications." +tags: + keywords: + [ + "indistinguishability obfuscation", + "iO", + "cryptography", + "Ethereum", + "FHE", + "SNARKs", + ] + themes: ["cryptography", "privacy", "scalability"] + types: ["research", "development"] +links: + twitter: "https://x.com/machina__io" + github: "https://github.com/MachinaIO/" + website: "https://hackmd.io/@MachinaIO/H1w5iwmDke" +team: + - name: "Enrico Bottazzi" + email: "enrico@pse.dev" + - name: "Sora Suegami" + email: "sorasuegami@pse.dev" + - name: "Pia" + email: "pia@pse.dev" +--- + +### Project Overview + +The MachinaIO project aims to develop the first practical implementation of Indistinguishability Obfuscation (iO). By converting programs into black-box representations, MachinaIO enables users to execute obfuscated programs locally without revealing their internal workings and hardcoded secrets, thus significantly enhancing security and scalability for blockchain applications and beyond. This removes the reliance on threshold-based committees from existing privacy-preserving applications based on MPC and (multi-key) FHE + +### Objective + +The primary goal of MachinaIO is to build a secure, and practical implementation of iO, eliminating the need for trusted committees in applications relying on Multi-party Computation (MPC) and Fully Homomorphic Encryption (FHE). Achieving practical iO would provide these applications with unlimited scalability and robust security. + +### Project Status + +- **Stage:** MVP Development +- **Status:** Active +- **Team Lead:** Sora Suegami +- **Team Members:** Enrico Bottazzi, Pia + +### Technical Approach + +MachinaIO aims to create the first _practical_ iO system based on formal security proofs, transforming any program into a black-box that hides its internals while preserving its functionality. By replacing committees in multi-party computation (MPC) or multi-key fully homomorphic encryption (FHE), iO can scale these applications securely and eliminate trust bottlenecks. + +### Contributions + +- Focus on Core Obfuscation: Obfuscation only for FHE decryption and SNARK verification, leveraging recent efficiency gains in FHE and ZK proofs. +- SNARK compatible with iO: An implementation of a SNARK scheme that can be efficiently verified within the obfuscated program, specifically a lattice-based designated-verifier SNARK. + +### Milestones + +- **February 2025:** Published foundational paper on MachinaIO [here](https://eprint.iacr.org/2025/236) +- **March 2025:** Released initial implementation publicly on [GitHub](https://github.com/MachinaIO/diamond-io) +- **July 2025 (planned):** Develop an input-scalable iO scheme with noise refreshing +- **September 2025 (planned):** Obfuscated program supporting ZKP verification and FHE decryption +- **November 2025 (planned, Devconnect):** Demonstration of practical iO-based applications + +### Applications + +MachinaIO can transform blockchain and cryptographic applications, such as trustless bitcoin bridges. + +### Publications + +- **MachinaIO Paper:** [Diamond iO: A Straightforward Construction of Indistinguishability Obfuscation from Lattices](https://eprint.iacr.org/2025/236) +- Hello world: The first sign of practical iO ([blogpost](https://pse.dev/en/blog/hello-world-the-first-signs-of-practical-io)) + +### Resources + +- **GitHub Repository:** [Machina iO](https://github.com/MachinaIO/) +- **Project Plan:** [HackMD Plan](https://hackmd.io/@MachinaIO/H1w5iwmDke) diff --git a/content/projects/maci-platform.md b/content/projects/maci-platform.md new file mode 100644 index 0000000..5212576 --- /dev/null +++ b/content/projects/maci-platform.md @@ -0,0 +1,33 @@ +--- +id: "maci-platform" +name: "MACI Platform" +image: "maci-platform.png" +section: "pse" +projectStatus: "inactive" +category: "application" +tldr: "Run a voting round in your community! Forked from EasyRetroPGF and enhanced with MACI for privacy, anti-bribery and anti-collusion" +tags: + keywords: ["Anonymity/privacy", "Voting/governance"] + themes: ["build"] + types: ["Lego sets/toolkits", "Infrastructure/protocol", "Public Good"] + builtWith: ["MACI", "EAS", "EasyRetroPGF"] +links: + github: "https://github.com/privacy-scaling-explorations/maci-platform" + website: "https://maci.pse.dev" + twitter: "https://twitter.com/zkmaci" +--- + +### Overview + +[MACI Platform](https://github.com/privacy-scaling-explorations/maci-platform/tree/main) is an implementation of EasyRetroPGF with MACI. + +This project enables any community, organization or ecosystem to run a voting round. +It is highly configurable to enable different voting mechanisms (quadratic voting, quadratic funding, etc), gating mechanisms (token based, attestation based, hats-based, etc) and an easy-to-use UI for both round organizers and voters. + +### Features + +With MACI Platform, you can run different kind of voting rounds for your community, with the following features: + +1. Full benefit of MACI's properties - Plug into MACI's anti-collusion and privacy features +2. Clean UX - The interface is optimised for voters and projects that want to participate in rounds +3. Customisable - The platform can be customised quickly to fit different use cases diff --git a/content/projects/maci.md b/content/projects/maci.md new file mode 100644 index 0000000..1cf6c65 --- /dev/null +++ b/content/projects/maci.md @@ -0,0 +1,38 @@ +--- +id: "maci" +name: "MACI" +image: "maci.png" +section: "pse" +projectStatus: "active" +category: "application" +tldr: "An on-chain voting solution that protects privacy and minimizes the risk of collusion and bribery" +tags: + keywords: ["Anonymity/privacy", "Voting/governance"] + themes: ["build"] + types: ["Lego sets/toolkits", "Infrastructure/protocol"] + builtWith: ["p0tion", "zk-kit", "snarkjs", "circom", "solidity"] +links: + github: "https://github.com/privacy-scaling-explorations/maci" + website: "https://maci.pse.dev" + twitter: "https://twitter.com/zkmaci" +--- + +### Overview + +[MACI](https://github.com/privacy-scaling-explorations/maci/tree/dev) is a protocol designed to provide a highly secure e-voting solution. + +It enables organisations to conduct on-chain voting processes with a significantly reduced risk of cheating, such as bribery or collusion. + +MACI uses zero-knowledge proofs to implement a receipt-free voting scheme, making it impossible for anyone other than the vote coordinator to verify how a specific user voted. This ensures the correct execution of votes and allows anyone to verify the results. + +It's particularly beneficial for governance and funding events, where its anti-collusion mechanisms help ensure fair and transparent outcomes. + +Please refer to MACI's [documentation](https://maci.pse.dev) for more details. + +### Features + +With MACI, you can take on chain voting to the next level: + +1. Uncensorable - no one can censor votes, not even the coordinator +2. Votes are private - votes are sent encrypted on chain and only the voter and the coordinator can decrypt them +3. Fully verifiable voting process - anyone can verify the tally is correct thanks to zero-knowledge proofs diff --git a/content/projects/mopro.md b/content/projects/mopro.md new file mode 100644 index 0000000..7c2c623 --- /dev/null +++ b/content/projects/mopro.md @@ -0,0 +1,57 @@ +--- +id: "mopro" +name: "Mopro" +image: "mopro.png" +section: "pse" +projectStatus: "active" +category: "devtools" +tldr: "Mopro makes client-side proving on mobile simple." +license: "MIT" +tags: + keywords: ["Mobile", "Client", "iOS", "Android"] + themes: ["build", "play"] + types: + [ + "Legos/dev tools", + "Lego sets/toolkits", + "Infrastructure/protocol", + "Plugin", + ] + builtWith: ["halo2", "circom"] +links: + github: "https://github.com/zkmopro" + website: "https://zkmopro.org/" + telegram: "https://t.me/zkmopro" + twitter: "https://x.com/zkmopro" +extraLinks: + buildWith: + - label: "Getting Started with mopro" + url: "https://zkmopro.org/docs/getting-started" + play: + - label: "Try it out: Mopro Benchmark" + url: "https://testflight.apple.com/join/TBlBDicy" +--- + +### Overview + +Mopro makes client-side proving simple. You can think of it as a toolkit for ZK app development. It primarily focuses on running natively mobile. + +How? Mopro connects different adapters with different platforms. You can think of an adapter as a way to use a library with some proof system and performance profile. Because Mopro takes care of hooking up your circuit to some library, and generating bindings for use on multiple platforms, you can focus on what you do best: ZK app development. + +### Features + +With mopro, developers can overcome the limitations of existing tools like `snarkjs`, which struggles with small circuit sizes and slow performance in browsers. Our solution leverages the growing power of mobile GPUs to deliver a fast, scalable, and secure proving experience directly on client-side applications + +Mopro, short for Mobile Prover, redefines the landscape of mobile app development by introducing an innovative toolkit designed for zero-knowledge (zk) proofs. + +Developer Capabilities: + +- **Ease of use**: mopro simplifies the complexity of integrating zk-proofs into mobile apps, making it accessible even for developers new to mobile development. +- **Scalability**: Designed to scale with your needs, mopro supports a wide range of proving systems, facilitating the development of versatile, high-performance applications. +- **X-platform compatibility**: Whether you're developing for iOS, Android, Windows, or Mac, mopro supports you with a unified toolkit that works seamlessly across all platforms. +- **Performance**: By optimizing for mobile GPUs, mopro significantly enhances the speed and capacity for handling large circuits, surpassing traditional browser-based solutions. +- **Security**: Users can generate claims securely on their devices, ensuring data privacy and integrity. + +### Applications + +- iOS Mopro Benchmark - [TestFlight](https://testflight.apple.com/join/TBlBDicy) | [GitHub](https://github.com/zkmopro/benchmark-app) diff --git a/content/projects/mpc-framework.md b/content/projects/mpc-framework.md new file mode 100644 index 0000000..6a1b7b9 --- /dev/null +++ b/content/projects/mpc-framework.md @@ -0,0 +1,108 @@ +--- +id: "mpc-framework" +name: "MPC Framework" +image: "mpc-framework.png" +section: "pse" +projectStatus: "active" +category: "devtools" +tldr: "Create secure MPC apps easily in TypeScript." +license: "MIT" +tags: + keywords: ["MPC", "TypeScript", "privacy", "Garbled Circuits", "iZK"] + themes: ["buildWith", "play", "research"] + types: [] + builtWith: ["ValueScript", "Summon", "MPZ", "EMP-Toolkit"] +links: + github: "https://github.com/privacy-scaling-explorations/mpc-framework" + website: "https://mpc.pse.dev" + telegram: "https://t.me/+FKnOHTkvmX02ODVl" +team: + - name: "Andrew Morris" + image: "/avatars/andrew.png" + links: + github: "https://github.com/voltrevo" + twitter: "https://x.com/voltrevo" + - name: "Yanis Meziane" + image: "/avatars/yanis.png" + links: + github: "https://github.com/Meyanis95" + twitter: "https://x.com/yanis_mezn" +extraLinks: + buildWith: + - label: "Create MPC-powered apps in Typescript" + url: "https://github.com/privacy-scaling-explorations/mpc-framework" + - label: "Generate circuits with Summon" + url: "https://github.com/privacy-scaling-explorations/summon" + research: + - label: "Trinity: 2PC with Laconic OT + Garbled Circuits + PLONK" + url: "https://github.com/privacy-scaling-explorations/Trinity" + - label: "Authenticated Garbling" + url: "https://hackmd.io/@a37205y_SL2LtEA1y2OWhQ/Sy4-nZ3lyx" + play: + - label: "Hello world in MPC" + url: "https://mpc.pse.dev/apps/hello" + - label: "Lizard Spock in MPC" + url: "https://mpc.pse.dev/apps/lizard-spock" + - label: "More demos" + url: "https://mpc.pse.dev/showcase" +--- + +# MPC Framework + +A framework that makes MPC easy, in TypeScript. + +## Quick Start + +Try [a demo app](https://mpc.pse.dev/apps/hello) or quickly [spin up your own](https://github.com/privacy-scaling-explorations/mpc-framework?tab=readme-ov-file#usage-guide). + +## Overview + +To make an MPC app you need three things: + +**1) Engine** + +- Implements the underlying cryptography. + +**2) Circuit Generator** + +- The shared computation needs to be specified as a circuit, and you need something to generate + that. This is similar to using a compiler to get programs to run on your machine. + +**3) Messaging with each Party** + +- Send and receive bytes. + +MPC Framework brings these pieces together in a straightforward TypeScript API to make MPC +application development easy. + +It includes multiple officially supported components for (1) and (2), templates that include (3), +and is designed to accommodate new solutions for each component. + +The main solution for (2) is [Summon](https://github.com/privacy-scaling-explorations/summon), which is a TypeScript-like +language for generating circuits. + +## What is MPC? + +MPC stands for _Multi-Party Computation_. In regular computation, all inputs, +outputs, and intermediate calculations are necessarily visible on the device +performing the computation. MPC, by contrast, allows multiple devices to +collaborate on a computation while keeping intermediate calculations and others' +inputs private. + +Here's some ways that can be useful: + +- Provide analysis on patient data to researchers without revealing the patient data +- Play [Rock Paper Scissors Lizard Spock](https://github.com/privacy-scaling-explorations/mpc-lizard-spock) while keeping your move secret +- Hold an auction while keeping the bids secret (only the winning bidder and price is revealed) +- [Match employers and job-seekers that each have hidden criteria](https://github.com/cursive-team/pz-hiring) +- Arrange optimal asset swaps (eg sports players / trading cards / corporate assets / NFTs) using hidden valuations +- Find out if you qualify for an insurance policy without sharing your health data and without requiring the insurer to reveal the policy requirements +- Quantify how much you have in common with someone and then figure out the commonalities together (or choose not to) +- Create an embarrassing songs playlist for a party where each song is liked by >=N people + +For a bit more of an introduction to MPC, see Barry Whitehat's talk +[2PC is for Lovers](https://www.youtube.com/watch?v=PzcDqegGoKI). The +lovers' app described in the talk has been implemented using mpc-framework +[here](https://mpc.pse.dev/apps/2pc-is-for-lovers). + +For a more technical introduction, see [Computerphile's video on Garbled Circuits](https://www.youtube.com/watch?v=FMZ-HARN0gI). For a deeper dive: [Pragmatic MPC](https://securecomputation.org/). diff --git a/content/projects/mpc-stats.md b/content/projects/mpc-stats.md new file mode 100644 index 0000000..f810c71 --- /dev/null +++ b/content/projects/mpc-stats.md @@ -0,0 +1,32 @@ +--- +id: "mpc-stats" +name: "MPCStats" +image: "mpc-stats.png" +section: "pse" +projectStatus: "inactive" +category: "applications" +tldr: "A framework for private and verifiable statistical analysis across multiple data providers." +tags: + keywords: ["MPC", "statistics", "data analysis"] + themes: ["build"] + types: ["Legos/dev tools", "Lego sets/toolkits"] + builtWith: ["MP-SPDZ", "tlsn", "python"] +links: + github: "https://github.com/MPCStats" + website: "https://mpcstats.github.io/docs" +--- + +## Overview + +MPCStats is a framework that enables data consumers to query statistical computations across multiple data providers while ensuring privacy and result correctness. By integrating privacy-preserving technologies such as ZKP, MPC, and FHE, our goal is to provide tools and guidance for integrating privacy-preserving analysis into their workflows. We also aim to identify real-world applications that can benefit from this framework. + +## Features + +- **Privacy-preserving and verifiable statistical analysis**: Allows data providers to keep their inputs confidential while giving data consumers the assurance that computations are performed accurately and securely. +- **Data validity**: Integrates TLSNotary to authenticate inputs from verified web sources, ensuring data consumers can trust that data inputs are genuine and accurate. + +## Use Cases + +- **Cross-department data sharing and surveys**: Enables secure, private data sharing across government departments for streamlined operations and collaborative analysis. +- **Healthcare research**: Aggregates data from sources such as fitness apps and sleep trackers, allowing researchers to uncover relationships between health factors, such as fitness and sleep patterns. +- **Salary survey**: A verifiable and anonymous alternative to platforms like Glassdoor, where users can contribute salary data with privacy guarantees. diff --git a/content/projects/mpz.md b/content/projects/mpz.md new file mode 100644 index 0000000..3009066 --- /dev/null +++ b/content/projects/mpz.md @@ -0,0 +1,27 @@ +--- +id: "mpz" +name: "mpz" +image: "mpz-cover.png" +section: "pse" +projectStatus: "active" +category: "devtools" +tldr: "A safe, performant, modular and portable multi-party computation (MPC) library." +license: "MIT or Apache-2.0" +tags: + themes: ["build", "play"] + types: ["Legos/dev tools", "Infrastructure/protocol"] + builtWith: ["rust"] + keywords: ["Anonymity/privacy", "mpc"] +links: + github: "https://github.com/privacy-scaling-explorations/mpz" +extraLinks: + play: + - label: "mpz-play (Exercises to get familiar with mpz)" + url: "https://github.com/th4s/mpz-play" +--- + +mpz (_pronounced as "em-peasy"_) is a collection of Rust-based libraries for multi-party computation (MPC), designed to be safe, performant and modular. + +Built with portability in mind, mpz runs natively or in the browser via WebAssembly (WASM). It serves as the core MPC implementation behind [TLSNotary](tlsn), but its architecture is broadly applicable across privacy-preserving and cryptographic use cases. + +mpz is part of Privacy & Scaling Explorations' broader effort to advance practical cryptographic tooling. It is dual-licensed under Apache-2.0 and MIT to encourage open-source collaboration. diff --git a/content/projects/openpassport.md b/content/projects/openpassport.md new file mode 100644 index 0000000..ea71b40 --- /dev/null +++ b/content/projects/openpassport.md @@ -0,0 +1,27 @@ +--- +id: "openpassport" +name: "OpenPassport" +image: "openpassport.jpg" +section: "grant" +projectStatus: "active" +category: "application" +tldr: "OpenPassport lets you check a passport is valid in zero-knowledge" +tags: + keywords: + ["Passports", "Identity", "Anonymity/privacy", "Signatures", "Social"] + builtWith: ["circom", "snarkjs"] +links: + github: "https://github.com/zk-passport/openpassport" + website: "https://openpassport.app" + twitter: "https://x.com/openpassportapp" + telegram: "https://t.me/openpassport" +--- + +OpenPassport originally started at ETHGlobal Paris 2023 as a hackathon project, with the goal of verifying the validity of passports in zero knowledge. +The idea was simple: electronic passports are embedded with a chip that contains an attestation signed by the issuing country. It should be possible to read the chip's content using NFC and use it to generate zk proofs. + +After the first prototype, OpenPassport developed the ability to do selective disclosure proofs for attributes such as nationality or age, without disclosing any other private information. Because countries use different signature algorithms, many circuits had to be developed to offer the widest support possible. + +The motivation behind this work lies in the fact that it can help break the deadlock identity verification is currently stuck in. Traditional KYC requires sharing all private data with a centralized verifier, and it's becoming easily manipulable using deepfakes. It can also aid in Sybil resistance, in combination with other identity solutions for users who don't have a biometric passport. + +After getting help from PSE for more than a year, OpenPassport graduated and grew to a team of five. In February 2025, OpenPassport joined Self Protocol to get the firepower to ship zk passport verification at a large scale. They launched in production with support for 130+ countries and are now working on adding support for other identity documents. diff --git a/content/projects/p0tion.md b/content/projects/p0tion.md new file mode 100644 index 0000000..8bcd2a5 --- /dev/null +++ b/content/projects/p0tion.md @@ -0,0 +1,32 @@ +--- +id: "p0tion" +name: "p0tion" +image: "p0tion.png" +section: "archived" +projectStatus: "maintained" +category: "devtools" +tldr: "Toolkit for Groth16 Phase 2 Trusted Setup ceremonies." +tags: + keywords: ["Toolkits", "Infrastructure/protocol"] + themes: ["build"] + types: ["Legos/dev tools"] + builtWith: [] +links: + website: "https://ceremony.pse.dev/" + github: "https://github.com/privacy-scaling-explorations/p0tion" +--- + +# p0tion + +### Overview + +p0tion is an agnostic-from-ceremony public good toolkit, with the aim of making Groth16 zk-applications scale and become production-ready in a safe and secure manner by running Phase 2 Trusted Setup ceremonies. + +### Status + +This project has been sunset and it is entering a long term support phase (no further development). p0tion toolkit is available for developers to use and run their own trusted setups ceremonies. We encourage the community to fork and continue the improvement of this toolkit. + +### Resources + +- **p0tion**: A tool to help developers create and manage trusted setups - [GitHub](https://github.com/privacy-scaling-explorations/p0tion) +- **DefinitelySetup WebApp**: A WebApp to monitor and contribute to trusted setups - [Website](https://ceremony.pse.dev/) | [GitHub](https://github.com/privacy-scaling-explorations/DefinitelySetup) diff --git a/content/projects/p256.md b/content/projects/p256.md new file mode 100644 index 0000000..34aca86 --- /dev/null +++ b/content/projects/p256.md @@ -0,0 +1,27 @@ +--- +id: "p256" +name: "P256" +image: "" +section: "pse" +projectStatus: "inactive" +category: "devtools" +tldr: "Smart contract wallet enabling transactions through familiar flows like touchID, faceID, WebAuth, and Passkeys." +tags: + keywords: + [ + "Toolkits", + "Infrastructure/protocol", + "User Experience", + "Key management", + "Wallets", + "Account Abstraction", + ] + themes: ["build"] + types: ["Legos/dev tools"] + builtWith: ["halo2"] +links: + website: "https://www.p256wallet.org/" + github: "https://github.com/privacy-scaling-explorations/p256-circom" +--- + +P256 is an ERC-4337 smart contract wallet that leverages zk-SNARKs for WebAuthn and P-256 signature verification. It aims to simplify Ethereum transactions by incorporating familiar authentication methods like touchID and faceID. The project addresses the challenges of seed phrase management and leverages the biometric capabilities of billions of cellphones to create a more user-friendly crypto experience. Technically, it is an end-to-end ERC-4337 smart contract wallet that verifies ZK proofs of Passkey signatures using the Halo2 proving system. diff --git a/content/projects/pir-scaling-semaphore.md b/content/projects/pir-scaling-semaphore.md new file mode 100644 index 0000000..ff4c5bd --- /dev/null +++ b/content/projects/pir-scaling-semaphore.md @@ -0,0 +1,80 @@ +--- +id: "scaling-semaphore-pir" +name: "Scaling Semaphore – PIR Merkle-Path Retrieval" +image: "" +section: "pse" +projectStatus: "active" +category: "research" +tldr: "Private Information Retrieval lets Semaphore users fetch their Merkle path from a server without revealing which identity they own, enabling truly private proofs for groups with millions of members." +tags: + keywords: + [ + "Semaphore", + "PIR", + "LeanIMT", + "zero-knowledge proofs", + "privacy", + "Merkle tree", + ] + themes: ["privacy", "scalability", "identity"] + types: ["research", "development"] +links: + discord: "https://discord.com/invite/sF5CT5rzrR" +team: + - name: "Brechy" + email: "brechy@pse.dev" +--- + +# Scaling Semaphore – PIR Merkle-Path Retrieval + +### Scaling Semaphore – Private Merkle-Path Retrieval with PIR + +#### Project Overview + +The project tackles the privacy bottleneck that appears when Semaphore groups grow to millions of members. In large groups, a user must obtain their Merkle-path (all sibling hashes from leaf to root) from a remote database before they can create a zero-knowledge membership proof. Asking for that path naïvely reveals **which identity** they own. + +This project solves the problem by letting users **query the server with Private Information Retrieval (PIR)**. PIR lets a client fetch database records without the server learning which records were requested, preserving full anonymity at Internet scale. + +#### Why PIR matters + +Traditional PIR protocols were too heavy for on-chain use. Recent schemes—e.g. **Respire** and Frodo-PIR—support 2²⁰ elements (≈ 1 million) with sub-second online latency and no trusted setup. By storing Merkle leaves/hashes in PIR-friendly chunks (32 B records) we can keep group trees on a server while users privately retrieve only the ~64 kB they need for a proof. + +#### Technical Approach + +| Component | Role | +| ------------------------------------------ | ----------------------------------------------------------------------------------------------------------------- | +| **Lean Incremental Merkle Tree (LeanIMT)** | Append-only tree used by Semaphore; gives deterministic indices so the client knows exactly which nodes to fetch. | +| **PIR Layer (Respire)** | Batched, lattice-based PIR with no offline phase; ideal for many small records. | +| **`lean-imt` integration** | Rust implementation and benchmarks with Respire | + +**Data flow** + +1. Client computes the indices of its Merkle path. +2. Client sends a PIR query for those indices to the server. +3. Server responds with encrypted buckets; client decrypts to obtain hashes/leaves. +4. Client generates the standard Semaphore ZK proof locally; nothing is leaked to the server. + +#### Current Status (Apr 2025) + +- ✅ ZK-Kit LeanIMT Rust implementation +- 🔄 PIR proof-of-concept fetching 32-byte records from a 2²⁰-element DB +- 🔜 Benchmarks +- 🔜 Post & L&S session + +#### Use-cases Enabled + +- **World-scale anonymous voting** without delegating proofs to a company server. +- **On-chain reputation** where users prove historical actions privately. +- **Privacy-preserving NFT drops** that gate by membership but hide identities. + +#### Resources + +- **Project Plan:** +- **Semaphore v4 (Rust):** +- **Respire PIR paper:** +- **Customizable LeanIMT implementation:** + +#### Contact + +- **Brechy:** +- **Discord:** diff --git a/content/projects/plasma-fold.md b/content/projects/plasma-fold.md new file mode 100644 index 0000000..b9d8d87 --- /dev/null +++ b/content/projects/plasma-fold.md @@ -0,0 +1,65 @@ +--- +id: "plasma-fold" +name: "Plasma Fold" +image: "" +section: "pse" +projectStatus: "active" +category: "research" +tldr: "Integrating folding schemes into plasma-based L2 solutions for efficient and scalable Ethereum transactions." +tags: + keywords: + [ + "plasma", + "folding schemes", + "Ethereum", + "scalability", + "L2", + "zero-knowledge proofs", + ] + themes: ["scalability", "L2 solutions", "zk proofs"] + types: ["research", "development"] +--- + +## Plasma Fold + +**Reimagining Plasma with Folding Schemes** + +Plasma Fold is an experimental Layer 2 (L2) design that combines the original Plasma architecture with modern zero-knowledge folding schemes to dramatically scale Ethereum transaction throughput. By leveraging recent advances in Incremental Verifiable Computation (IVC) and folding-based proof systems, Plasma Fold achieves high-speed client-side proving while keeping on-chain data to a minimum. + +Unlike traditional rollups that post extensive transaction data to L1, Plasma Fold operates using a _minimal data availability_ model inspired by Intmax, where only essential metadata—like tree roots and signer indices—are recorded onchain. Validity is ensured through user-generated proofs, making this model far more efficient for resource-constrained environments. + +## Why Plasma Fold? + +Most L2s today struggle to scale without relying on increasingly expensive data availability solutions (e.g., blobs). Plasma Fold offers a low-cost, high-throughput alternative. Inspired by Vitalik Buterin's vision of a Plasma-EVM hybrid, Plasma Fold explores the use of folding schemes to support lightweight client-side proving—ideal for mobile or browser-based clients. In theory, this architecture could enable transaction rates in the range of 90k–260k TPS, matching or exceeding centralized systems like VISA. + +## Key Innovations + +- **Client-Side Proving with Folding Schemes:** Users generate recursive ZK proofs on their devices to attest to their own balances and transactions, minimizing trust and computation on the L1. +- **UTXO-Based Design with IVC:** Transactions are modeled as UTXO trees, allowing users to maintain and prove their own balances incrementally across time. +- **Minimal Onchain Footprint:** Only block roots, nullifier indices, and signer bitmaps are posted on L1—greatly reducing gas costs and data needs. +- **Instant Exits & Offline-Friendliness:** Users can exit the system at any time using a locally stored proof. They do not need to stay online between blocks unless actively transacting. +- **Composable and Future-Proof:** Designed to eventually support multiple assets, order books, and potentially even programmable features. + +## Status + +- **Stage:** Research and Prototyping +- **Current Focus:** Implementing and benchmarking core circuits +- **Target Output:** A technical paper and reference implementation +- **Team Lead:** Pierre Daix-Moreux +- **Collaborators:** Chengru + +## Timeline & Milestones + +- **Q2 2025:** Initial circuit design and benchmarks against Plonky2 +- **Q2–Q3 2025:** Drafting formal paper; collaborative review with Intmax +- **Q3 2025:** Reference implementation using Sonobe's Nova-based tooling +- **Beyond:** Explore multi-asset support, privacy enhancements, and programmability + +## Learn More + +- [Technical Write-Up on Intmax2](https://www.pierredm.xyz/posts/intmax) +- [GitHub – Sonobe](https://github.com/privacy-scaling-explorations/sonobe) + +## Get Involved + +Join the conversation on [PSE Discord](https://discord.com/invite/sF5CT5rzrR) diff --git a/content/projects/pod2.md b/content/projects/pod2.md new file mode 100644 index 0000000..cdb8cf7 --- /dev/null +++ b/content/projects/pod2.md @@ -0,0 +1,42 @@ +--- +id: "pod2" +name: "POD2" +image: "pod2.png" +section: "collaboration" +projectStatus: "active" +category: "devtools" +tldr: "The second generation of cryptographic PODs: Provable Data Objects" +tags: + keywords: + ["anonymity/privacy", "data portability", "social", "identity", "toolkits"] + builtWith: ["Rust", "Plonky2", "Groth16", "Typescript"] + themes: ["build", "research"] +links: + github: "https://github.com/0xPARC/pod2" + website: "https://pod.org" + telegram: "https://t.me/zupass" +team: + - name: "Edu" + image: "/avatars/edu.jpeg" + links: + github: "https://github.com/ed255" +extraLinks: + buildWith: + - label: "PODify your proofs" + url: "https://pod.org/pod/introduction" + - label: "Config-driven proofs" + url: "https://pod.org/gpc/introduction" + - label: "Create and consume PODs in your web app" + url: "https://pod.org/z-api/introduction" + - label: "POD book (evolving)" + url: "https://0xparc.github.io/pod2/introduction.html" + research: + - label: "State of POD R&D" + url: "https://github.com/0xPARC/pod2/milestones" + - label: "Ideation on a logic VM for PODs" + url: "https://hackmd.io/@gubsheep/r1zxZGpQke" +--- + +POD2 is the next iteration of the Provable Object Datatype (POD). This new iteration introduces arbitrary computation on data via custom predicates, recursion and interoperability with other data provenance cryptographic tools. + +This is a 0xPARC project that PSE is collaborating on. diff --git a/content/projects/pollen-labs.md b/content/projects/pollen-labs.md new file mode 100644 index 0000000..fca82e2 --- /dev/null +++ b/content/projects/pollen-labs.md @@ -0,0 +1,34 @@ +--- +id: "pollen-labs" +name: "Pollen Labs" +image: "pollen-labs.svg" +section: "archived" +projectStatus: "inactive" +category: "application" +tldr: "Building a better world through open-source & blockchain technology." +tags: + keywords: ["Anonymity/privacy", "Scaling", "Public good"] + themes: ["play"] + types: ["Application"] + builtWith: [] +links: + website: "https://pollenlabs.org/" + twitter: "https://twitter.com/PollenLabs_" + discord: "https://discord.gg/5B3jP2sgWS" +--- + +Pollen Labs is driven by a mission to make a significant impact on global lives by addressing complex, pressing issues. We work alongside the community to break barriers, preserve privacy, and build a future where every voice is heard, and a free web is accessible to all. Our projects, like Channel 4, a content discovery engine, and Daisy, focusing on information transparency, embody this mission, enabling community members to earn while they engage. + +We are a small team with a diverse skillset including design, engineering, community growth, and operations. We serve as a product accelerator, facilitating solutions to real-world problems with advanced blockchain technology. Our core value as follow: + +- **A Decentralized Internet for All** + +- **Open Source at Our Core** + +- **Technology as Public Goods** + +- **Privacy as a Human Right** + +- **Collaboration for Impact** + +Pollen Labs exits the PSE in Q4 2024 and now operates as a self-autonomous collective. Join our conversation: https://discord.gg/5B3jP2sgWS diff --git a/content/projects/post-quantum-cryptography.md b/content/projects/post-quantum-cryptography.md new file mode 100644 index 0000000..3c648a5 --- /dev/null +++ b/content/projects/post-quantum-cryptography.md @@ -0,0 +1,48 @@ +--- +id: "post-quantum-cryptography" +name: "Post-Quantum Cryptography and Ethereum" +image: "" +section: "pse" +projectStatus: "active" +category: "research" +tldr: "Ensuring Ethereum's cryptographic security against future quantum threats." +tags: + keywords: + ["post-quantum cryptography", "Ethereum", "security", "cryptography"] + themes: ["cryptography", "security"] + types: ["research", "development"] + builtWith: ["ECC", "PQC", "zero-knowledge proofs"] +--- + +Post-quantum cryptography (PQC) is crucial for securing digital communication against future quantum computers, which threaten to break widely used cryptographic schemes such as RSA, ECC, and DSA. A smooth transition to PQC requires careful consideration of performance trade-offs, compatibility with existing protocols, and resilience against potential future attacks. + +### The Importance of PQC for Ethereum + +PQC is especially important for Ethereum, which relies on cryptographic security for transactions, smart contracts, and consensus mechanisms. Ethereum primarily uses elliptic curve cryptography (ECC) for digital signatures (via ECDSA and BLS), which quantum computers could break using Shor's algorithm. If large-scale quantum computers become practical, attackers could: + +- Forge signatures +- Steal funds +- Undermine the integrity of the network + +Additionally, many Ethereum accounts use externally owned addresses (EOAs) derived from public keys, making them particularly vulnerable to quantum attacks once those public keys are revealed on-chain. This highlights the urgency of transitioning Ethereum's cryptographic foundations to quantum-resistant alternatives. + +Moreover, smart contract platforms need to support post-quantum-friendly cryptographic primitives for zero-knowledge proofs and rollups, which are essential for Ethereum scaling. + +### Transitioning from ECC to PQC + +Traditional cryptography relied on ECC, which enables various cryptographic primitives while also offering efficiency. In contrast, post-quantum cryptography is more diverse, and no single approach serves as a universal solution for all use cases. The development of PQC involves designing and standardizing cryptographic schemes based on problems believed to be hard even for quantum computers, such as: + +- Lattice-based cryptography +- Code-based cryptography +- Multivariate cryptography +- Isogeny-based cryptography + +### Publications + +- Post Quantum signature aggregation with Falcon and LaBRADOR ([ethresear.ch post](https://pse.dev/en/blog/post-quantum-signature-aggregation-with-falcon-and-LaBRADOR)) +- Are elliptic curves going to survive the quantum apocalypse? ([blogpost](https://pse.dev/en/blog/are-elliptic-curves-going-to-survive-the-quantum-apocalypse)) +- Post quantum TXs in The Verge ([ethresear.ch post](https://ethresear.ch/t/post-quantum-txs-in-the-verge/21763)) + +### Our Commitment to PQC at PSE + +At PSE, we are committed to staying at the forefront of the rapidly evolving field of PQC by continuously following, testing, and optimizing the latest advancements. Our goal is to ensure that the Ethereum ecosystem is well-prepared for the challenges and opportunities that come with the transition to quantum-safe systems. diff --git a/content/projects/powers-of-tau.md b/content/projects/powers-of-tau.md new file mode 100644 index 0000000..d29a7f8 --- /dev/null +++ b/content/projects/powers-of-tau.md @@ -0,0 +1,26 @@ +--- +id: "powers-of-tau" +name: "Perpetual Powers of Tau" +image: "powers-of-tau.png" +section: "archived" +projectStatus: "maintained" +category: "devtools" +tldr: "An ongoing (since 2019) zk-SNARK trusted setup ceremony for circuits up to 2^28 constraints." +tags: + keywords: ["scaling"] +links: + github: "https://github.com/privacy-scaling-explorations/perpetualpowersoftau" + website: "https://perpetualpowersoftau.com/" +extraLinks: + learn: + - label: "Announcing the Perpetual Powers of Tau Ceremony" + url: "https://medium.com/coinmonks/announcing-the-perpetual-powers-of-tau-ceremony-to-benefit-all-zk-snark-projects-c3da86af8377" +--- + +### Overview + +The Perpetual Powers of Tau is a multi-party trusted setup ceremony, rooted in the Zcash Powers of Tau. Its primary objective is the secure generation of zk-SNARK parameters for circuits accommodating up to 2^28 (260+ million) constraints. This translates to the creation of over 530 million powers of tau. The ceremony's integrity hinges on the principle that as long as one participant acts honestly and remains uncompromised, the entire setup remains trustworthy. It's a pivotal step for zk-SNARK projects, ensuring the security and privacy of the system. Those who can handle a 100Gb download and many hours of compute time are invited to join by contacting [@nicoserranop on Twitter](https://twitter.com/NicoSerranoP) or Telegram, or asking questions via the PSE [Discord](https://discord.com/invite/sF5CT5rzrR). + +### Status + +This project is entering a long term support phase. The ceremony is ongoing and accepting new participants. There are no further development plans for the project. diff --git a/content/projects/private-proof-delegation.md b/content/projects/private-proof-delegation.md new file mode 100644 index 0000000..4fb6728 --- /dev/null +++ b/content/projects/private-proof-delegation.md @@ -0,0 +1,80 @@ +--- +id: "private-proof-delegation" +name: "Private proof delegation" +image: "" +section: "pse" +projectStatus: "active" +category: "research" +tldr: "Private Delegated Proving aims to unlock efficient zero-knowledge proof (ZKP) generation for resource-constrained clients such as mobile phones, without compromising privacy." +tags: + keywords: ["fhe", "zkp", "tee"] + themes: ["research"] +links: + github: "https://github.com/privacy-scaling-explorations/private-proof-delegation-docs" +--- + +# Private Delegated Proving + +## Project Overview + +Private Delegated Proving aims to unlock efficient zero-knowledge proof (ZKP) generation for resource-constrained clients such as mobile phones, without compromising privacy. The project explores how clients can securely delegate proof generation to external servers—be they trusted hardware, distributed MPC setups, or FHE —while keeping sensitive data protected. + +By focusing on delegation frameworks that avoid trust assumptions or excessive overhead, the project paves the way for scalable, privacy-preserving applications that are accessible to everyday users. + +## Objective + +The goal is to explore the space and potentially develop a practical, trust-minimized framework that allows clients with limited computational and network resources to outsource ZKP generation. This includes: + +- Benchmarking feasible approaches including Trusted Execution Environment (TEE)-based delegation, collaborative zkSNARKs, client-side proving. +- Investigating Fully Homomorphic Encryption (FHE) as a foundation for verifiable delegation. +- Exploring new polynomial commitment schemes (PCS) that are FHE-compatible. +- Reducing client-side costs via packing, modulus switching, and interaction design. + +Ultimately, the project seeks to identify viable building blocks for a future where client-side privacy doesn't require massive compute or trusted intermediaries. + +## Project Status + +- **Stage:** MVP Development +- **Status:** Active +- **Team Lead:** Takamichi Tsutsumi +- **Team Members:** Wanseob Lim, Shouki Tsuda +- **Collaborators:** Keewoo + +## Technical Approach + +Private Delegated Proving is built around deep evaluation and experimentation with three major tracks: + +- **TEE-based delegation**: Establishing a baseline implementation using VM-based TEEs (e.g. Intel TDX), benchmarking large ZKP circuits like ZK Email under realistic conditions. +- **FHE-based delegation**: Designing and testing FHE-friendly proving flows, including witness expansion, encrypted proof generation, and optimized PCS like Greyhound. +- **Hybrid & future schemes**: Studying advanced techniques such as folding-based verification and R1CS-structured delegation under FHE. + +The team maintains a strong focus on publishing intermediate findings to guide the broader ZK and cryptography community. + +## Milestones + +- **Milestone 1:** TEE-based proving benchmark & write-up (in progress, due June 2025) +- **Milestone 2:** Literature review and design space mapping for FHE-based delegated proving +- **Milestone 3 (planned):** Experimental implementation of FHE-friendly proving system (Q3–Q4 2025) + +## Applications + +Private Delegated Proving has potential to reshape the user experience and architecture of ZK-enabled systems: + +- **Client-side ZKP support on mobile devices** for privacy-preserving identity, messaging, and transactions. +- **Decentralized proof services** that enable scalable ZK protocols without exposing sensitive inputs. +- **Privacy-first interactions** for systems like ZK Email, anonymous voting, and attestations. + +## Publications + +No publications yet, but the team plans to share regular updates and design notes via blog posts, research forums, and talks (e.g. Devconnect). + +## Resources + +- **GitHub Repository:** [Private Proof Delegation Docs](https://github.com/privacy-scaling-explorations/private-proof-delegation-docs) +- **Project Plan:** [HackMD Plan](https://hackmd.io/qdYZCxweQmix8ezdh7l-Aw?view) + +## Contact + +- **Takamichi Tsutsumi:** [tkmct@pse.dev](mailto:tkmct@pse.dev) +- **Wanseob Lim:** [wanseob@pse.dev](mailto:wanseob@pse.dev) +- **Join the conversation:** on [PSE Discord](https://discord.com/invite/sF5CT5rzrR) diff --git a/content/projects/pse-halo2.md b/content/projects/pse-halo2.md new file mode 100644 index 0000000..210f40b --- /dev/null +++ b/content/projects/pse-halo2.md @@ -0,0 +1,28 @@ +--- +id: "pse-halo2" +name: "PSE-Halo2" +image: "" +section: "pse" +projectStatus: "maintained" +tldr: "PSE-Halo2 is a re-architected, KZG-backended fork of Zcash's Halo2, an instantiation of PLONK, with support for more curves and other features." +tags: + keywords: ["Proof Systems", "PLONK", "KZG", "Halo2"] + themes: ["build"] + types: ["Infrastructure/protocol", "Lego sets/toolkits"] + builtWith: ["halo2", "rust"] +links: + github: "https://github.com/privacy-scaling-explorations/halo2" + website: "https://privacy-scaling-explorations.github.io/halo2/" +extraLinks: + learn: + - label: "Documentation" + url: "https://privacy-scaling-explorations.github.io/halo2/" + - label: "PLONK" + url: "https://www.youtube.com/watch?v=A0oZVEXav24" + - label: "Origins of Halo2" + url: "https://www.youtube.com/watch?v=KdkVTEHUxgo" +--- + +PSE-Halo2 modified, extended, and eventually [re-architected](https://github.com/privacy-scaling-explorations/halo2/pull/254) the [original Halo2 implementation by Zcash](https://github.com/zcash/halo2) - an instantiation of the PLONK proof system. + +The original IPA backend was swapped with KZG for cost-effective L1 verifiability, and comes with a Solidity verifier. Support for many [additional curves](https://github.com/privacy-scaling-explorations/halo2curves) and other [experimental features](https://github.com/kilic/tetris) were added, and the system was eventually re-architected by [splitting the front- and backends](https://github.com/privacy-scaling-explorations/halo2/pull/254). PSE-Halo2 has significant contributions from the wider community. diff --git a/content/projects/pse-security.md b/content/projects/pse-security.md new file mode 100644 index 0000000..308ae77 --- /dev/null +++ b/content/projects/pse-security.md @@ -0,0 +1,19 @@ +--- +id: "pse-security" +name: "PSE Security" +image: "pse-security.png" +section: "pse" +projectStatus: "inactive" +category: "research" +tldr: "Proactively securing Ethereum's L2 and ZK ecosystems." +tags: + keywords: + ["Anonymity/privacy", "Education", "Key management", "Scaling", "Security"] + themes: ["build"] + types: ["Legos/dev tools"] + builtWith: ["slither", "ecne", "circomspect", "echidna"] +links: + github: "https://github.com/privacy-scaling-explorations/security" +--- + +PSE Security is a division of the Privacy & Scaling Explorations team at the Ethereum Foundation. Its primary goal is to identify and rectify bugs, thereby enhancing the security of the Ethereum Layer 2 and Zero-Knowledge ecosystems. Recognizing the potential for critical bugs to cause significant setbacks, PSE Security is committed to preemptively addressing these issues. The team offers open-source projects like the ZK Bug Tracker and Bridge Bug Tracker, which track real bugs and exploits in production code, and encourages community contributions. PSE Security also conducts manual audits and plans to help teach the community more about security and ways they can prevent bugs themselves. diff --git a/content/projects/publicly-verifiable-garbled-circuit.md b/content/projects/publicly-verifiable-garbled-circuit.md new file mode 100644 index 0000000..3841f2d --- /dev/null +++ b/content/projects/publicly-verifiable-garbled-circuit.md @@ -0,0 +1,18 @@ +--- +id: "publicly-verifiable-garbled-circuit" +name: "Publicly verifiable garbled circuit" +image: "" +section: "pse" +projectStatus: "inactive" +category: "research" +tldr: "Publicly verifiable garbled circuit research" +tags: + keywords: ["mpc", "garbled circuit", "zkp"] + themes: ["research"] +links: + website: "https://hackmd.io/bPUw6M9qSL-AyE19A58tMw" +--- + +We are actively researching on publicly verifiable garbled circuit. This will lead to constant round publicly verifiable 2 party computation. Currently we're exploring two ways to achieve this. The first approach is based on authenticated garbling and vector OLE and the second approach is based on committed OT and zkp. + +See more details [here](https://hackmd.io/bPUw6M9qSL-AyE19A58tMw). diff --git a/content/projects/rln.md b/content/projects/rln.md new file mode 100644 index 0000000..d73c23c --- /dev/null +++ b/content/projects/rln.md @@ -0,0 +1,19 @@ +--- +id: "rln" +name: "Rate-Limiting Nullifier" +image: "rln.svg" +section: "pse" +projectStatus: "inactive" +category: "devtools" +tldr: "A protocol for deterring spam and maintaining anonymity in communication systems." +tags: + keywords: ["Anonymity/privacy"] + themes: ["build"] + types: ["Infrastructure/protocol"] + builtWith: ["circom", "solidity", "semaphore"] +links: + github: "https://github.com/Rate-Limiting-Nullifier/circom-rln" + website: "https://rate-limiting-nullifier.github.io/rln-docs/" +--- + +Rate-Limiting Nullifier (RLN) is a protocol designed to combat spam and denial of service attacks in privacy-preserving environments. It allows users in an anonymous system to penalize those who exceed the rate limit, either by withdrawing the offender's stake or revealing their secrets. This mechanism helps maintain system integrity and deters abuse. RLN is built on the Semaphore protocol and uses zero-knowledge proofs and the Shamir's Secret Sharing scheme to reveal the spammer's private key. It's particularly useful for developers working on communication systems that require privacy and anonymity, such as chat apps, client-server communications, and peer-to-peer communications. It's already being used in projects like Zerokit and Waku, and is also being developed for use with the KZG polynomial commitment scheme. diff --git a/content/projects/scaling-semaphore.md b/content/projects/scaling-semaphore.md new file mode 100644 index 0000000..021e51f --- /dev/null +++ b/content/projects/scaling-semaphore.md @@ -0,0 +1,49 @@ +--- +id: "scaling-semaphore" +name: "Scaling Semaphore" +image: "" +section: "pse" +projectStatus: "active" +category: "research" +tldr: "A scalable implementation of the Semaphore protocol" +tags: + keywords: ["Privacy", "Scaling", "Zero Knowledge", "Semaphore"] + themes: ["privacy", "scalability"] + types: ["research", "development"] +links: + github: "https://github.com/semaphore-protocol" + website: "https://semaphore.pse.dev/" +--- + +### Scaling Semaphore + +The Scaling Semaphore project focuses on developing a scalable implementation of the Semaphore protocol, a zero-knowledge protocol for anonymous signaling and voting. This initiative addresses the growing need for privacy-preserving systems that can handle large-scale applications while maintaining security and performance. + +### Key Features + +- **Enhanced Scalability**: Optimized implementations that can handle thousands of users simultaneously +- **Privacy-First**: Maintains the core privacy guarantees of the Semaphore protocol +- **Zero-Knowledge Proofs**: Utilizes advanced cryptographic techniques for anonymous verification +- **Production-Ready**: Built for real-world deployment scenarios + +### Technical Approach + +The project implements various optimization techniques to improve the performance and scalability of Semaphore: + +- Efficient Merkle tree operations +- Optimized zero-knowledge circuits +- Batch processing capabilities +- Memory-efficient proof generation + +### Applications + +Scaling Semaphore enables various use cases including: + +- Large-scale anonymous voting systems +- Privacy-preserving surveys and polls +- Anonymous feedback collection +- Decentralized governance applications + +### Resources + +For more information about the Semaphore protocol and its scaling implementations, visit the official documentation and GitHub repositories. diff --git a/content/projects/semaphore.md b/content/projects/semaphore.md new file mode 100644 index 0000000..5105748 --- /dev/null +++ b/content/projects/semaphore.md @@ -0,0 +1,85 @@ +--- +id: "semaphore" +name: "Semaphore" +image: "semaphore.webp" +section: "pse" +projectStatus: "active" +category: "devtools" +tldr: "A zero-knowledge protocol for anonymous interactions." +previousBrandImage: "semaphorePrevious.jpg" +license: "MIT" +tags: + keywords: + [ + "Anonymity/privacy", + "Social", + "Identity", + "Transaction privacy", + "Voting/governance", + "Reputation", + "Education", + "Scaling", + "Key management", + "Other (group membership)", + ] + themes: ["build"] + types: ["Legos/dev tools", "Lego sets/toolkits", "Infrastructure/protocol"] + builtWith: ["zk-kit", "circom", "snarkjs"] +links: + github: "https://github.com/semaphore-protocol" + website: "https://semaphore.pse.dev/" + telegram: "https://semaphore.pse.dev/telegram" + twitter: "https://semaphore.pse.dev/x" +extraLinks: + play: + - label: "Semaphore Demo" + url: "https://demo.semaphore.pse.dev/" + buildWith: + - label: "Semaphore CLI (Getting Started)" + url: "https://docs.semaphore.pse.dev/getting-started" + - label: "Semaphore JS libraries" + url: "https://docs.semaphore.pse.dev/guides/identities" + - label: "Semaphore Boilerplate" + url: "https://github.com/semaphore-protocol/boilerplate" + learn: + - label: "Semaphore Website" + url: "https://semaphore.pse.dev" + - label: "Semaphore Documentation" + url: "https://docs.semaphore.pse.dev" + - label: "Semaphore Board" + url: "https://github.com/orgs/semaphore-protocol/projects/10/views/1" +--- + +### Overview + +[Semaphore](https://semaphore.pse.dev/) is a generic privacy layer. Leveraging zero-knowledge technology, users can prove their membership in groups and send messages (extending from votes to endorsements) +off-chain or across EVM-compatible blockchains, all without revealing their personal identity. Use cases include private voting, whistleblowing, anonymous DAOs, and mixers. + +Semaphore is designed to be a simple and generic privacy layer for decentralized applications (dApps). It encourages modular application design, allowing +dApp developers to choose and customize the on-chain and off-chain components they need. + +The core of the protocol is the circuit logic. In addition to circuits, Semaphore provides [Solidity contracts](https://github.com/semaphore-protocol/semaphore/tree/main/packages/contracts) and +[JavaScript libraries](https://github.com/semaphore-protocol/semaphore/tree/main#-packages) that allow developers to generate zero-knowledge proofs and verify them with minimal effort. + +### Features + +With Semaphore, you can allow your users to do the following: + +1. [Create a Semaphore identity](https://docs.semaphore.pse.dev/guides/identities) +2. [Add their Semaphore identity to a group (i.e. Merkle tree)](https://docs.semaphore.pse.dev/guides/groups) +3. [Send a verifiable, anonymous message (e.g. a vote or endorsement)](https://docs.semaphore.pse.dev/guides/proofs) + +When a user broadcasts a message, Semaphore zero-knowledge proofs can ensure that the user has joined the group and hasn't already cast a message with a nullifier. + +### Ways to contribute + +- Submit your idea to PSE's [acceleration program](https://github.com/privacy-scaling-explorations/acceleration-program) (check out this [discussion](https://github.com/orgs/semaphore-protocol/discussions/463) for potential ideas). +- Work on [open issues](https://github.com/semaphore-protocol/semaphore/contribute) +- Suggest new terms for our [glossary](https://semaphore.pse.dev/docs/glossary) ([website-issue](https://github.com/semaphore-protocol/website/issues/new?assignees=&labels=documentation&template=---glossary-term.md&title=)) +- Propose new networks for our [deployed contracts](https://semaphore.pse.dev/docs/deployed-contracts) ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=&template=----network.md&title=)) +- Suggest new developer tools ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=feature+%3Arocket%3A&template=---package.md&title=)) +- Share your Semaphore project with us ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=documentation++%F0%9F%93%96&template=----project.md&title=)) +- Share ideas for new features ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=feature+%3Arocket%3A&template=---feature.md&title=)) +- Create a report if you find any bugs in the code ([semaphore-issue](https://github.com/semaphore-protocol/semaphore/issues/new?assignees=&labels=bug+%F0%9F%90%9B&template=---bug.md&title=)) + +As a Semaphore contributor, you'll be able to claim a special GitPOAP per year 🏅 diff --git a/content/projects/sonobe.md b/content/projects/sonobe.md new file mode 100644 index 0000000..1d32f48 --- /dev/null +++ b/content/projects/sonobe.md @@ -0,0 +1,42 @@ +--- +id: "sonobe" +name: "Sonobe Folding Library" +image: "sonobe.png" +section: "pse" +projectStatus: "active" +category: "devtools" +tldr: "Modular folding library supporting multiple schemes and decider backends" +tags: + keywords: ["Folding", "IVC"] + themes: ["build"] + types: ["Infrastructure/protocol", "Lego sets/toolkits"] + builtWith: ["rust"] +links: + github: "https://github.com/privacy-scaling-explorations/sonobe" + website: "https://privacy-scaling-explorations.github.io/sonobe-docs" +--- + +In collaboration with [0xPARC](https://0xparc.org), [Sonobe](https://github.com/privacy-scaling-explorations/sonobe) is a modular library to fold arithmetic circuit instances in an Incremental Verifiable computation (IVC) style. It supports multiple frontends, multiple folding schemes, and multiple decider backends, allowing users to plug-and-play different components. + +- **Frontends:** + - Arkworks + - Circom + - Noir + - Noname +- **Folding schemes:** + - [Nova](https://eprint.iacr.org/2021/370), supporting also both the [Mova](https://eprint.iacr.org/2024/1220) & [Ova](https://hackmd.io/V4838nnlRKal9ZiTHiGYzw) variants. + - [CycleFold](https://eprint.iacr.org/2023/1192) + - [HyperNova](https://eprint.iacr.org/2023/573) + - [ProtoGalaxy](https://eprint.iacr.org/2023/1106) +- **Decider backends:** + + - Groth16 and KZG commitment [proofs](https://privacy-scaling-explorations.github.io/sonobe-docs/usage/decider-prove.html) which are [verifiable on-chain](https://privacy-scaling-explorations.github.io/sonobe-docs/usage/solidity-verifier.html). + +- **Other features:** + + - [ZK Layer](https://privacy-scaling-explorations.github.io/sonobe-docs/usage/nova-zk.html) + - In-browser [WASM usage](https://privacy-scaling-explorations.github.io/sonobe-docs/usage/wasm.html) + +- **Example projects:** + - [Bitcoin light client](https://github.com/dmpierre/sonobe-btc) leveraging Sonobe + - [Hash chains](https://github.com/arnaucube/hash-chain-sonobe): proving chains of Sha256 and Keccak256 hashes diff --git a/content/projects/summa.md b/content/projects/summa.md new file mode 100644 index 0000000..40fef6a --- /dev/null +++ b/content/projects/summa.md @@ -0,0 +1,22 @@ +--- +id: "summa" +name: "Summa" +image: "summa.svg" +section: "pse" +projectStatus: "inactive" +category: "devtools" +tldr: "Protocol enabling centralized exchanges to prove solvency without compromising private information." +tags: + keywords: ["Anonymity/privacy", "Computational Integrity"] + themes: ["build", "play"] + types: ["Infrastructure/protocol", "Application"] + builtWith: ["halo2"] +links: + github: "https://github.com/summa-dev" +extraLinks: + learn: + - label: "Documentation" + url: "https://summa.gitbook.io/summa" +--- + +Summa allows centralized exchanges to demonstrate that their assets exceed their liabilities without revealing critical business information such as individual user balances, total number of users, and total liabilities or assets. It uses zero-knowledge proofs to ensure that exchanges can demonstrate they have sufficient assets to cover all user balances. The protocol involves building a Merkle Sum Tree of user balances, generating proofs for each user, and allowing users to verify these proofs. diff --git a/content/projects/tlsn.md b/content/projects/tlsn.md new file mode 100644 index 0000000..57c4be0 --- /dev/null +++ b/content/projects/tlsn.md @@ -0,0 +1,32 @@ +--- +id: "tlsn" +name: "TLSNotary" +image: "tlsn.webp" +section: "pse" +projectStatus: "active" +category: "devtools" +tldr: "A protocol for creating cryptographic proofs of authenticity for any data on the web." +license: "MIT or Apache-2.0" +tags: + themes: ["build", "play"] + types: ["Legos/dev tools", "Infrastructure/protocol", "Plugin", "Application"] + builtWith: ["rust"] + keywords: + ["Anonymity/privacy", "Identity", "Reputation", "Data portability", "zkTLS"] +links: + github: "https://github.com/tlsnotary" + website: "https://tlsnotary.org/" + discord: "https://discord.gg/9XwESXtcN7" + twitter: "https://x.com/tlsnotary" +extraLinks: + play: + - label: "Getting started" + url: "https://tlsnotary.org/docs/quick_start/" + learn: + - label: "Documentation" + url: "https://tlsnotary.org/docs" +--- + +TLSNotary is ideal for developers of privacy-focused projects that require **data provenance** from secure web servers. It leverages the widely-used **Transport Layer Security (TLS)** protocol to securely and privately prove that a transcript of communications with a web server took place. The protocol divides TLS session keys between two parties: the Prover and the Verifier, using **Multi-Party Computation (MPC)**. Neither the User nor Notary are in possession of the full TLS session keys, they only hold a share of those keys. This retains the security assumptions of TLS while allowing the Prover to demonstrate the **authenticity of the communication** to the Verifier. The Verifier remains unaware of which webserver is being queried, and the Verifier never has access to the unencrypted communications, except for the data the Prover explicitly wants to disclose. + +**TLSNotary can help your project with secure and privacy-preserving data portability!** diff --git a/content/projects/trusted-setups.md b/content/projects/trusted-setups.md new file mode 100644 index 0000000..eb6997a --- /dev/null +++ b/content/projects/trusted-setups.md @@ -0,0 +1,31 @@ +--- +id: "trusted-setups" +name: "Trusted Setups" +image: "trusted-setups.svg" +section: "archived" +projectStatus: "inactive" +category: "devtools" +tldr: "Aiding developers with tools for trusted setups." +tags: + themes: ["play"] + types: ["Legos/dev tools", "Lego sets/toolkits"] + builtWith: [] + keywords: ["Scaling", "Education"] +links: + github: "https://github.com/zkparty" +--- + +### Overview + +The Trusted Setups project is dedicated to simplifying the process of trusted setups, which are crucial for privacy or scaling solutions. Trusted setups involve multiple participants contributing to the generation of secrets. As long as one participant forgets their part of the secret, the final solution remains secure. The team recognizes the complexity of developing contribution programs and coordinating the participants' queue in a trusted setup. To address this, they are developing tools, including scripts, WebApps, and APIs, to streamline the contribution and coordination effort. This allows developers to focus on building their circuits and applications, enhancing efficiency and productivity in the development of zero-knowledge applications. + +### Status + +This project has been sunset and there will be no further development. The tools and resources developed are available under no warranty and are provided as-is. We believe they are enough for developers to run their trusted setups on their own. The team encourages the community to fork and continue the development of these tools. + +### Resources + +- **p0tion**: A tool to help developers create and manage trusted setups - [GitHub](https://github.com/privacy-scaling-explorations/p0tion) +- **DefinitelySetup WebApp**: A WebApp to monitor and contribute to trusted setups - [Website](https://ceremony.pse.dev/) | [GitHub](https://github.com/privacy-scaling-explorations/DefinitelySetup) +- **KZG WebApp**: A WebApp used to contributed to the KZG Ceremony - [Website](https://ceremony.ethereum.org/) | [GitHub](https://github.com/zkparty/trusted-setup-frontend) +- **Perpetual Powers of Tau**: A phase 1 ceremony to generate Powers of Tau - [GitHub](https://github.com/privacy-scaling-explorations/perpetualpowersoftau) diff --git a/content/projects/unirep-protocol.md b/content/projects/unirep-protocol.md new file mode 100644 index 0000000..f983446 --- /dev/null +++ b/content/projects/unirep-protocol.md @@ -0,0 +1,59 @@ +--- +id: "unirep-protocol" +name: "UniRep Protocol" +image: "unirep.svg" +section: "archived" +projectStatus: "inactive" +category: "application" +tldr: "A Zero-Knowledge Protocol built to handle anonymous user data." +license: "MIT" +previousBrandImage: "unirep-previousBrand.png" +tags: + keywords: ["Anonymity/privacy", "Social", "Identity", "Reputation"] + themes: ["build", "play"] + types: ["Legos/dev tools, Protocol"] + builtWith: ["semaphore", "circom"] +links: + github: "https://github.com/Unirep" + website: "https://developer.unirep.io/docs/welcome" + twitter: "https://twitter.com/UniRep_Protocol" + discord: "https://discord.gg/VzMMDJmYc5" +extraLinks: + buildWith: + - label: "Getting Started with create-unirep-app" + url: "https://developer.unirep.io/docs/next/getting-started/create-unirep-app" + play: + - label: "Try it out: UniRep.social (Staging)" + url: "https://social-staging.unirep.workers.dev" + - label: "Try it out: Trustlist (coming soon) " + url: "https://trustlist.pse.dev" +--- + +### Overview + +UniRep is a zero-knowledge protocol that securely manages user data through anonymous identifiers, enabling trustless interactions and enhanced user privacy in applications. UniRep expands the notion of reputation to include various user data aspects, such as preferences, activity, alignments, and ownership. + +Using anonymous identifiers ([epoch keys](https://developer.unirep.io/docs/protocol/epoch-key)), the protocol allows for trustless engagement with applications while preserving user privacy. This approach promotes non-custodial applications that don't hold user data, reducing data breach risks and emphasizing security for both users and developers. + +UniRep was originally proposed by BarryWhiteHat in this [ethresear.ch](https://ethresear.ch) post. + +### Features + +UniRep aims to be the ultimate foundation for constructing tailored, yet fully compatible, zero-knowledge (zk) applications. It functions as a powerful memory layer for zk, offering private, non-repudiable data storage and retrieval capabilities. With UniRep, users can effortlessly receive data, prove facts about their information, and store the results while enjoying robust privacy assurances. The protocol empowers developers to create bespoke zk applications without compromising on interoperability and efficiency. + +Key UniRep features include: + +- **Data Storage**: Unirep allows small amounts of data to be associated with anonymous users. Applications can conditionally associate data, like requiring a user to prove control of an Ethereum address before attesting to it. +- **Extensible Proofs**: The system is designed to be extended with custom application logic. For example, an application might require proof of [Ethereum address control to sign up](https://github.com/Unirep/zketh/blob/b7e0fdf3dcc1b3f97673da20837ed9c7d3e27c9f/packages/circuits/circuits/signupWithAddress.circom). +- **Trustless Interoperability**: Applications can interconnect by having users create proofs using publicly available state. +- **No Forced Data Sharing**: Unirep applications cannot see what data belongs to what user, unless the user reveals it. User data also cannot be changed unless the user provides the application with an [epoch key](https://developer.unirep.io/docs/protocol/epoch-key). + +### Applications + +- Anon Transfer - [Website](https://anon-transfer.online/) | [GitHub](https://github.com/vivianjeng/anon-transfer) +- Trustlist - [Website](https://trustlist.xyz/) | [GitHub](https://github.com/trustlist/trustlist) +- Unirep Social TW - [GitHub](https://github.com/social-tw/social-tw-website) +- Unirep Social - [Website](https://unirep.social/) | [GitHub](https://github.com/Unirep/Unirep-Social) +- Sacred Protocol - [Website](https://www.sacredprotocol.com/) +- My-Badge - [GitHub](https://github.com/kittybest/my-badge) +- Voteathon - [Website](https://voteathon.org/) | [GitHub](https://github.com/NicoSerranoP/voteathon) diff --git a/content/projects/vOPRF.md b/content/projects/vOPRF.md new file mode 100644 index 0000000..508280c --- /dev/null +++ b/content/projects/vOPRF.md @@ -0,0 +1,79 @@ +--- +id: "vOPRF" +name: "Web2-ID Nullifiers using vOPRF" +image: "" +section: "pse" +projectStatus: "active" +category: "research" +tldr: "Enabling pseudonymous systems for Web2 identities using verifiable Oblivious PseudoRandom Functions (vOPRFs)." +tags: + keywords: ["vOPRF", "nullifiers", "Web2", "privacy", "ZK proofs", "MPC"] + themes: ["privacy", "identity", "zero-knowledge proofs"] + types: ["research", "development"] +links: + github: "https://github.com/privacy-scaling-explorations/vOPRF-ID/" +team: + - name: "Magamedrasul Ibragimov" + email: "curryrasul@pse.dev" +--- + +# Web2-ID Nullifiers using vOPRF + +## Project Overview + +Web2-ID Nullifiers is a cryptographic infrastructure project that enables pseudonymous systems for Web2 identities (like email or social accounts) using **verifiable Oblivious PseudoRandom Functions (vOPRFs)**. The project addresses the absence of native nullifiers in Web2 IDs—essential for enabling anonymous voting, forum participation, and other on-chain, privacy-preserving applications—by enabling secure, private nullifier generation tied to Web2 identity proofs (e.g., from zkEmail or TLSNotary). + +## Objective + +The goal is to create a secure, scalable protocol and supporting infrastructure that allows Web2 identities to be used pseudonymously across decentralized applications. This includes building a global registry akin to a "Web2 Semaphore," allowing users to reuse nullifiers without revealing their identity and without requiring trusted parties. + +## Project Status + +- **Stage:** MVP Development +- **Status:** Active +- **Team Lead:** Rasul Ibragimov +- **Team Members:** Aditya Bisht (joining full-time in May) + +## Technical Approach + +The vOPRF protocol enables deterministic yet private randomness generation. Nullifiers are computed via MPC-based OPRF, using ZK proofs to tie identity commitments (from protocols like zkEmail) to blinded requests. The design protects user identity while ensuring nullifier uniqueness and verifiability. + +Key elements include: + +- **ZK proofs** for identity commitment verification without revealing the underlying identity +- **MPC-based OPRF networks** to prevent single points of trust +- **Global Registry Contract** for reusability across applications + +## Milestones + +- **February 2025:** Full protocol spec and ethresearch post published + - See [ethresearch pos](https://ethresear.ch/t/web2-nullifiers-using-voprf/21762)t and full description of protocol [on Github](https://github.com/privacy-scaling-explorations/vOPRF-ID) and [this presentation](https://x.com/PrivacyScaling/status/1903084082529010174) +- **March 2025:** Initial implementation (vOPRF + zk circuits) completed see https://github.com/privacy-scaling-explorations/vOPRF-ID +- **May 2025:** Launch of PoC—fork of Stealthnote enabling pseudonymous posting via Web2-derived nullifiers +- **July 2025 (planned):** Production-ready OPRF server with key rotation and node monitoring +- **Q3 2025 (planned):** Global Registry MVP for Web2-IDs + +## Applications + +The protocol enables a broad range of applications requiring privacy and pseudonymity: + +- **Anonymous voting** using Google or email accounts, without sign-ups or wallets +- **Pseudonymous forums** tied to organizational emails (e.g., @ethereum.org) +- **Anonymous airdrops** for GitHub users, Reddit accounts, etc. +- **Web2-on-chain identity bridging** across zkEmail, TLSNotary, Anon Aadhaar, and more + +## Publications + +- [Part I: Web2 Nullifiers using vOPRF](https://curryrasul.com/blog/web2-nullifiers/) +- [Part II: Web2 Nullifiers pt. II](https://hackmd.io/Mp4MQT41RGCyLvnuQtgbnw) +- [Research post on Ethereum Research](https://ethresear.ch/t/web2-nullifiers-using-voprf/21762) + +## Resources + +- **GitHub Repository:** [vOPRF-ID](https://github.com/privacy-scaling-explorations/vOPRF-ID) +- **Project Plan:** [HackMD](https://hackmd.io/v1W_X9FcSNi1978i_Rv2Tw) + +## Contact + +- **Magamedrasul Ibragimov:** [curryrasul@pse.dev](mailto:curryrasul@pse.dev) | [@curryrasul](https://twitter.com/curryrasul) +- **Join** the PSE Discord](https://discord.com/invite/sF5CT5rzrR) diff --git a/content/projects/voice-deck.md b/content/projects/voice-deck.md new file mode 100644 index 0000000..c128502 --- /dev/null +++ b/content/projects/voice-deck.md @@ -0,0 +1,20 @@ +--- +id: "voice-deck" +name: "VoiceDeck" +image: "voiceDeck.svg" +section: "collaboration" +projectStatus: "inactive" +category: "application" +tldr: "From Individual Actions to Collective Impact, Every Voice Makes a Difference" +tags: + keywords: ["Public goods"] + themes: ["play"] + types: ["Application"] + builtWith: ["anonAadhaar", "Hypercerts"] +links: + github: "https://github.com/VoiceDeck" + website: "https://voicedeck.org/" + twitter: "https://twitter.com/VoiceDeckDAO" +--- + +VoiceDeck isn't just a platform; it's a movement. By enabling citizens to fund journalism that makes a real difference, we're crafting a narrative where every contribution paints a stroke on the canvas of our collective future. Join us to foster a legacy where journalism is powered by the very communities it serves. diff --git a/content/projects/wax.md b/content/projects/wax.md new file mode 100644 index 0000000..0f02e02 --- /dev/null +++ b/content/projects/wax.md @@ -0,0 +1,26 @@ +--- +id: "wax" +name: "Wallet Account eXperiments - WAX" +image: "wax.webp" +section: "pse" +projectStatus: "inactive" +category: "devtools" +tldr: "" +tags: + keywords: ["Scaling", "Key management", "WAX"] + themes: ["build"] + types: ["Prototype", "Proof of concept", "Lego sets/toolkits"] + builtWith: + [ + "foundry", + "hardhat", + "node", + "solidity bls library", + "sqlite", + "docker", + "ethers.js", + "deno", + ] +links: + github: "https://github.com/getwax" +--- diff --git a/content/projects/zk-email.md b/content/projects/zk-email.md new file mode 100644 index 0000000..e2f6f1f --- /dev/null +++ b/content/projects/zk-email.md @@ -0,0 +1,20 @@ +--- +id: "zk-email" +name: "zk-email" +image: "zk-email.jpeg" +section: "collaboration" +projectStatus: "active" +category: "application" +tldr: "ZK Email is a library that allows for anonymous verification of email signatures while masking specific data." +tags: + themes: [] + types: [] + keywords: ["email", "identity", "anonymity/privacy", "DKIM", "signatures"] + builtWith: ["circom", "snarkjs", "halo2"] +links: + github: "https://github.com/zkemail" + twitter: "https://twitter.com/zkemail" + website: "https://zk.email/" +--- + +ZK Email is a library for anonymous verification of emails while selectively revealing specific data. It allows a prover to demonstrate receipt of an email from a specific sender or domain or the presence of certain text in the subject or body. This can be used for Web 2.0 interoperability, email recovery solutions of smart accounts, anonymous KYC, or to create interesting applications based on anonymity sets. diff --git a/content/projects/zk-id.md b/content/projects/zk-id.md new file mode 100644 index 0000000..89b7dd2 --- /dev/null +++ b/content/projects/zk-id.md @@ -0,0 +1,103 @@ +--- +id: "zk-id" +name: "zkID" +image: "zk-id.png" +section: "pse" +projectStatus: "active" +category: "devtools" +tldr: "zkID advances privacy-preserving digital identity by drafting technical standards, building open-source infrastructure, and strategic outreach." +license: "" +tags: + keywords: + ["Identity", "Credentials", "Standards", "SSI", "Verifiable Credentials"] + themes: ["research"] + types: ["Legos/dev tools", "Lego sets/toolkits"] + builtWith: [] +links: + github: "https://github.com/privacy-scaling-explorations/zkID" +--- + +# zkID + +### Overview + +zkID is a strategic initiative of the Ethereum Foundation, in collaboration with Privacy and Scaling Explorations (PSE), focused on advancing the use of Zero Knowledge Proofs (ZKPs) in digital identity systems. We contribute to PSE by leading research, coordination, education, and development efforts that enable privacy-preserving, interoperable, and standards-aligned identity infrastructure. + +Our team works and distributes grants across the identity ecosystem to draft technical standards, maintain open-source resources, and prototype infrastructure that aligns with evolving regulatory frameworks. By stewarding collaboration between researchers, developers, governments, and institutions, zkID bridges foundational cryptographic research with real-world deployment and impact. + +### Vision + +Our vision is a future where digital identity infrastructure is **privacy-preserving.** We are working to ensure that **privacy is** built into global digital identity systems _by default_. As governments make foundational decisions on how identity is issued, verified, and protected, we see an opportunity for EF and PSE to: + +- Embed **zero-knowledge proofs (ZKPs)** at the core of these systems +- Define the underlying [blockchain and distributed ledger](https://github.com/orgs/eu-digital-identity-wallet/projects/29/views/1?pane=issue&itemId=86398709&issue=eu-digital-identity-wallet%7Ceudi-doc-standards-and-technical-specifications%7C202) technology used as trust registries and guiding [GPDR policies](https://www.edpb.europa.eu/system/files/2025-04/edpb_guidelines_202502_blockchain_en.pdf) + +### Why It Is Urgent + +The [European Union's **EUDI Wallet**](https://ec.europa.eu/digital-building-blocks/sites/display/EUDIGITALIDENTITYWALLET/EU+Digital+Identity+Wallet+Home) is on track for rollout in **2026**. In parallel, countries are building identity stacks, with deployment frameworks and policies that mirror or precede the EU's. This is a **critical inflection point**: [technical decisions](https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/discussions/408) made today will determine whether future digital identity systems become tools for mass surveillance or embed privacy, user agency, and interoperability as defaults. + +We are in a rare window of influence. Over the next 12 to 18 months: + +- **Standards are ossifying**. [Technical specifications](https://github.com/eu-digital-identity-wallet/eudi-doc-standards-and-technical-specifications/blob/main/docs/technical-specifications/README.md) and legal requirements being defined now will become defaults for dozens of countries. +- **Public-private partnerships are forming**. Major technology monopolies ([Google](https://datatracker.ietf.org/doc/draft-google-cfrg-libzk/), [Microsoft](https://github.com/microsoft/crescent-credentials), [Orange](https://csrc.nist.gov/csrc/media/presentations/2024/wpec2024-3b3/images-media/wpec2024-3b3-slides-antoine-jacques--BBS-sharp-eIDAS2.pdf), etc.) are positioning themselves to define and deploy identity solutions - from non-credibly neutral stances. +- **Once deployed, systems are sticky.** National identity systems are expensive, complex, and politically sensitive to overhaul. As we have learned from our experience working with other countries, if ZKPs are not integrated now, retrofitting them later will be slow, bureaucratic, and unlikely to succeed. + +### What We Do + +zkID operates across [three strategic workstreams](https://www.notion.so/zkID-Team-Strategy-Proposal-db3c5788dc7a4916a33e580a79177053?pvs=21) to ensure zero-knowledge proofs (ZKPs) are embedded in digital identity systems of the future: + +1. **Proliferate Programmable ZKP Standards** + +We work with standard bodies to embed ZKPs into emerging identity frameworks to ensure interoperability. Our [grant](https://hackmd.io/@therealyingtong/zkid-infopage)-backed efforts include: + +- [Technical reviews](https://docs.google.com/presentation/d/1C4D8zK4gAdafgIEW-2m_qDyyT39gWo0mmFYpwmA8N3M/edit#slide=id.g338a079cb64_0_15) of implementations from Orange, Google, and Microsoft +- [Technical reviews](https://hackmd.io/@therealyingtong/vc-formats) of verifiable credential data models +- Drafting an IETF [standard on Programmable ZKPs](https://datatracker.ietf.org/doc/draft-zkproof-polycommit/) +- [Engage](https://www.youtube.com/watch?v=LyvqyeSAvL0) the wider zkp community on standards collaboration +- Participating in [DIF](https://github.com/decentralized-identity/zkp-self-attestations) and [W3C](https://docs.google.com/presentation/d/1HqFtSiS2hVHaSS8-u-8iecVFeMehMGBtZJnnbnXj83c/edit#slide=id.p) standards working groups +- Shaping specifications within the [EUDI technical framework](https://github.com/eu-digital-identity-wallet/eudi-doc-architecture-and-reference-framework/discussions/408) +- Draft [informal technical specifications](https://github.com/zkspecs/zkspecs) on zk protocols + +Standards like the IETF and EUDI framework are **global signaling mechanisms.** Dozens of countries reference the EUDI frameworks to shape their own identity regulations. If we can ensure ZKPs are part of the EUDI ARF spec, we create downstream pressure to adopt privacy-preserving architecture across multiple jurisdictions. + +2. **Research, Prototype, Subtraction** + +We [research](https://www.notion.so/Evaluation-Framework-for-SSI-Solutions-8eceb793a5b442cb8da65acc3c337d5c?pvs=21) and build standards-compliant, [**minimal and modular PoCs**](https://github.com/adria0/seediq-playground) like the [ZKP Wallet Unit](https://www.notion.so/External-zkID-ZKP-Wallet-Unit-Proposal-1bad57e8dd7e80c98d73fc7e7666375d?pvs=21). This is done in collaboration with governments, to ensure practical real-world ZKP integration pathways. + +By delivering vendor-neutral, open-source PoCs, zkID aims to provide tangible working proof in production-ready environments. + +3. **Education and Strategic Outreach** + +We publish research, [articles](https://mirror.xyz/privacy-scaling-explorations.eth/zRM7qQSt_igfoSxdSa0Pts9MFdAoD96DD3m43bPQJT8), [analysis](https://www.notion.so/Evaluation-Framework-for-SSI-Solutions-8eceb793a5b442cb8da65acc3c337d5c?pvs=21), lead [workshops](https://docs.google.com/presentation/d/1YROCEHK_t10wo5CukgYWmS1nuYKZi46NJBu-XZ8zXiw/edit#slide=id.p), and run [technical engagements](https://docs.google.com/presentation/d/1C4D8zK4gAdafgIEW-2m_qDyyT39gWo0mmFYpwmA8N3M/edit#slide=id.p). + +[Zero-knowledge proofs](https://docs.zkproof.org/reference.pdf) are powerful, but often misunderstood or underutilized by policymakers and civic organizations. + +In parallel, we aim to advise institutions on selecting the right Layer 2 infrastructure, prioritizing solutions with strong decentralization roadmaps for identity-specific use cases. + +zkID serves as a neutral translator and strategic steward, helping institutions grasp the practical applications of ZKPs and guiding their integration into public goods. + +### Mission + +Our mission is to establish zero-knowledge proofs as the foundational technology for privacy-preserving identity verification systems worldwide. + +### Current Focus Areas + +1. **Standards Development**: Leading the creation of technical standards for ZK-based identity systems +2. **Open Source Infrastructure**: Building and maintaining tools and libraries for ZK identity implementation +3. **Research & Development**: Advancing the state-of-the-art in privacy-preserving identity technologies +4. **Ecosystem Coordination**: Facilitating collaboration between stakeholders across the identity ecosystem + +### Key Initiatives + +- **W3C Standards Participation**: Active involvement in World Wide Web Consortium standards development +- **Government Outreach**: Engaging with policy makers and regulatory bodies +- **Academic Partnerships**: Collaborating with universities and research institutions +- **Industry Collaboration**: Working with technology companies and identity providers + +### Impact + +zkID's work aims to create a world where individuals have full control over their digital identity while maintaining privacy and security. Our efforts contribute to a more equitable and privacy-respecting digital future for all users. + +### Resources + +For more information about zkID initiatives, technical standards, and ongoing projects, visit our GitHub repository and follow our research publications. diff --git a/content/projects/zk-kit.md b/content/projects/zk-kit.md new file mode 100644 index 0000000..3ec05e6 --- /dev/null +++ b/content/projects/zk-kit.md @@ -0,0 +1,56 @@ +--- +id: "zk-kit" +name: "ZK-Kit" +image: "zk-kit.svg" +section: "pse" +projectStatus: "active" +category: "devtools" +tldr: "A set of reusable libraries for zero-knowledge technologies." +tags: + keywords: ["Education", "Toolkits", "Anonymity/Privacy", "Algorithms"] + themes: ["build"] + types: ["Legos/dev tools"] + builtWith: ["Circom", "JavaScript", "Solidity", "Noir", "Rust"] +links: + website: "https://zkkit.pse.dev" + github: "https://github.com/privacy-scaling-explorations/zk-kit" +extraLinks: + buildWith: + - label: "ZK-Kit JavaScript" + url: "https://github.com/privacy-scaling-explorations/zk-kit" + - label: "ZK-Kit Solidity" + url: "https://github.com/privacy-scaling-explorations/zk-kit.solidity" + - label: "ZK-Kit Circom" + url: "https://github.com/privacy-scaling-explorations/zk-kit.circom" + - label: "ZK-Kit Rust" + url: "https://github.com/privacy-scaling-explorations/zk-kit.rust" + - label: "ZK-Kit Noir" + url: "https://github.com/privacy-scaling-explorations/zk-kit.noir" +--- + +### Overview + +ZK-Kit is an innovative toolkit that provides reference implementations of cryptographic primitives across multiple +programming languages. It is designed to streamline the development of production-level projects involving zero-knowledge +proofs (ZKPs), offering developers a robust foundation for building secure and efficient applications. + +### Motivations + +One of the primary motivations behind ZK-Kit is to address a common challenge in the cryptographic development space: +the tendency to reinvent the wheel with each new project. Cryptographic primitives, especially those related to zero-knowledge +proofs, are complex and require deep expertise to implement correctly. By providing ready-to-use, well-tested implementations, +ZK-Kit allows developers to focus on their specific application logic rather than spending valuable time and resources on +recreating fundamental building blocks. + +It also aims to foster a collaborative community where developers can engage in open discussions, share insights, +and tackle complex challenges in cryptography. By creating an environment that encourages knowledge exchange and +innovation, ZK-Kit aspires to become a hub for cryptographic advancement, empowering developers to experiment, +contribute, and drive progress in privacy-focused technologies. + +### Key aspects + +One of ZK-Kit's standout features is its commitment to providing a consistent developer experience +across various programming languages. By maintaining a common API structure, ZK-Kit enables developers to switch +languages effortlessly. +Additionally, ZK-Kit emphasizes code quality and reliability through rigorous code checks, integrating linters, +formatters, comprehensive testing, and regular audits, ensuring robust and maintainable code throughout development. diff --git a/content/projects/zkevm-community.md b/content/projects/zkevm-community.md new file mode 100644 index 0000000..1c91f6c --- /dev/null +++ b/content/projects/zkevm-community.md @@ -0,0 +1,18 @@ +--- +id: "zkevm-community" +name: "zkEVM Community Edition" +image: "zkevm.jpg" +section: "pse" +projectStatus: "inactive" +category: "devtools" +tldr: "A zero-knowledge proof mechanism for Ethereum block verification." +tags: + keywords: ["Scaling"] + themes: ["build"] + types: ["Infrastructure/protocol", "Lego sets/toolkits"] + builtWith: ["halo2", "rust", "geth"] +links: + github: "https://github.com/privacy-scaling-explorations/zkevm-circuits" +--- + +zkEVM Community Edition is a project aimed at validating Ethereum blocks using zero-knowledge proofs. It is designed to be fully compatible with Ethereum's EVM and serves two primary goals. First, it enables the creation of a layer 2 network (zkRollup) compatible with the Ethereum ecosystem, which uses zero-knowledge proofs to validate blocks, thus enhancing scalability. Second, it allows the generation of zero-knowledge proofs for blocks from the existing layer 1 Ethereum network, enabling light clients to quickly synchronize many blocks with low resource consumption while ensuring block correctness without needing trust in external parties. diff --git a/content/projects/zkitter.md b/content/projects/zkitter.md new file mode 100644 index 0000000..bc1572e --- /dev/null +++ b/content/projects/zkitter.md @@ -0,0 +1,28 @@ +--- +id: "zkitter" +name: "Zkitter" +image: "zkitter.webp" +section: "archived" +projectStatus: "inactive" +category: "applications" +tldr: "A decentralized social network prioritizing privacy and anonymity" +tags: + keywords: ["Anonymity/privacy", "Social", "Identity"] + themes: ["build"] + types: ["Application", "Infrastructure/protocol"] + builtWith: ["semaphore", "rln", "interep", "zkchat"] +links: + github: "https://github.com/zkitter" + website: "https://www.zkitter.com/explore/" + discord: "https://discord.gg/Em4Z9yE8eW" +--- + +### Overview + +Zkitter is a decentralized social network that emphasizes privacy by default. It allows users to share thoughts and communicate in various modes: as known identities, as a member of a group, or entirely anonymously. Built with Semaphore and RLN, Zkitter offers familiar social media features such as posting, chatting, following, and liking, but with a strong focus on user privacy and anonymity. It serves as an experiment to explore new ways of engaging in conversations without the fear of damaging one's personal reputation and is an example of a user-facing application using zero-knowledge primitives such as Semaphore, CryptKeeper, ZK-Chat, and Interep. Users can sign up using an Ethereum address or ENS name, or create an anonymous account, with options for anonymous chat and posting. + +### Learn more + +- [Zkitter: An Anon-friendly Social Network](https://mirror.xyz/privacy-scaling-explorations.eth/P4jDH1gLrVQ-DP5VyIKQrlPAJUTDhtXZkFl2vp8ewSg) - Introductory post from the PSE blog +- [Zkitter - Anonymous Social Network](https://www.youtube.com/watch?v=GOQZHWC3cH0) - Devcon 6 talk +- [Zkitter documentation](https://docs.zkitter.com/) diff --git a/content/projects/zkml.md b/content/projects/zkml.md new file mode 100644 index 0000000..d69d33d --- /dev/null +++ b/content/projects/zkml.md @@ -0,0 +1,18 @@ +--- +id: "zkml" +name: "ZKML" +image: "zkml.png" +section: "pse" +projectStatus: "inactive" +category: "research" +tldr: "ZKML (Zero-Knowledge Machine Learning) leverages zero-knowledge proofs for privacy-preserving machine learning, enabling model and data privacy with transparent verification." +tags: + keywords: ["Anonymity/privacy", "Scaling"] + themes: ["research"] + types: ["Proof of concept", "Infrastructure/protocol"] + builtWith: ["circom", "halo2", "nova"] +links: + github: "https://github.com/socathie/circomlib-ml" +--- + +ZKML is a solution that combines the power of zero-knowledge proofs (ZKPs) and machine learning to address the privacy concerns in traditional machine learning. It provides a platform for machine learning developers to convert their TensorFlow Keras models into ZK-compatible versions, ensuring model privacy, data privacy, and transparent verification. ZKML can be used to verify if a specific machine learning model was used to generate a particular piece of content, without revealing the input or the model used. It has potential use cases in on-chain biometric authentication, private data marketplace, proprietary ML model sharing, and AIGC NFTs. diff --git a/content/projects/zkopru.md b/content/projects/zkopru.md new file mode 100644 index 0000000..2903cb0 --- /dev/null +++ b/content/projects/zkopru.md @@ -0,0 +1,49 @@ +--- +id: "zkopru" +name: "ZKOPRU" +image: "zkopru.svg" +section: "archived" +projectStatus: "inactive" +category: "devtools" +tldr: "Optimistic Rollup with zk-SNARKs for private Ethereum transactions." +tags: + keywords: ["anonymity/privacy", "private transactions"] +links: + website: "https://zkopru.network/" + github: "https://github.com/zkopru-network" +--- + +### Overview + +ZkOPRU (Zero-Knowledge Optimistic Private Rollup) is a Layer 2 scaling solution for Ethereum designed to enable private transactions while maintaining scalability and compatibility with +the Ethereum ecosystem. It combines zero-knowledge proofs (specifically zk-SNARKs) with optimistic rollup technology to provide a privacy-focused framework for transferring ETH, +ERC-20 tokens, and ERC-721 NFTs. The project aims to address Ethereum's limitations in transaction privacy and cost by moving computation off-chain while ensuring security through +cryptographic proofs and Ethereum's mainnet as the settlement layer. + +### History + +ZkOPRU was developed as an open-source initiative, with significant contributions from developers like Barry Whitehat and Wanseob Lim. Its first testnet was announced in July 2020, +marking a milestone in bringing privacy to Ethereum's public blockchain. The system operates by batching transactions into a rollup, where zk-SNARKs shield sensitive details—such +as sender, recipient, and amount—while optimistic rollups assume transaction validity unless challenged, reducing the need for immediate on-chain verification. This hybrid approach +allows ZkOPRU to offer low-cost, private transactions with the ability to scale, supporting use cases like confidential payments and private NFT transfers. + +The project emerged from earlier efforts like ZK Rollup but distinguishes itself with its optimistic mechanism, which avoids the high computational cost of generating zero-knowledge +proofs for every transaction on-chain. Instead, it uses a challenge period during which invalid transactions can be disputed, balancing efficiency and security. ZkOPRU also includes +a coordinator system to manage transaction batching, though it aims to minimize trust assumptions over time. + +### Features + +- **Privacy**: Transactions are shielded using zk-SNARKs, ensuring confidentiality on a public ledger. +- **Scalability**: Optimistic rollups bundle hundreds of transactions into a single proof, lowering gas fees and increasing throughput. +- **Compatibility**: Supports Ethereum-native assets (ETH, ERC-20, ERC-721), making it versatile for existing applications. +- **Decentralization**: Relies on Ethereum for final settlement, inheriting its security while offloading computation. + +### Impact + +As of March 26, 2025, ZkOPRU remains a notable experiment in Ethereum's privacy and scaling landscape, though its development has been somewhat overshadowed by other Layer 2 solutions +like zkSync and Arbitrum. Its GitHub repository (under the zkWizard organization) and initial testnet documentation provide insight into its technical design, which includes a +UTXO-based model for transaction tracking and a focus on user accessibility via wallet integration. While it hasn't achieved widespread adoption, ZkOPRU's influence is seen in the +broader trend of combining zero-knowledge cryptography with rollup technology, paving the way for projects like Aztec and Polygon Nightfall. + +In summary, ZkOPRU is a pioneering effort to bring privacy to Ethereum's Layer 2 ecosystem, leveraging zk-SNARKs and optimistic rollups to offer a scalable, confidential transaction +layer as of its last significant updates around 2020-2021. diff --git a/content/projects/zkp2p.md b/content/projects/zkp2p.md new file mode 100644 index 0000000..7190f56 --- /dev/null +++ b/content/projects/zkp2p.md @@ -0,0 +1,20 @@ +--- +id: "zkp2p" +name: "ZKP2P" +image: "zkp2p.png" +section: "grant" +projectStatus: "active" +category: "application" +tldr: "Instant fiat to crypto onramp connecting traditional peer-to-peer payment services with zero-knowledge proofs." +tags: + keywords: ["Private communications"] + themes: ["play"] + types: ["Proof of concept", "Application"] + builtWith: ["circom", "halo2"] +links: + github: "https://github.com/zkp2p" + website: "https://zkp2p.xyz/" + twitter: "https://twitter.com/zkp2p" +--- + +ZKP2P is for defi consumers looking to onramp assets on chain quickly without going through a CEX as an intermediary. ZKP2P generates a privacy-preserving proof of payment between two users on existing payment rails like Venmo or Paypal and uses said proof to unlock escrowed digital assets on-chain. diff --git a/app/(pages)/content/resources.md b/content/resources.md similarity index 100% rename from app/(pages)/content/resources.md rename to content/resources.md diff --git a/data/programs/accelerationProgramFaq.tsx b/data/programs/accelerationProgramFaq.tsx deleted file mode 100644 index 7397192..0000000 --- a/data/programs/accelerationProgramFaq.tsx +++ /dev/null @@ -1,51 +0,0 @@ -import { Faq } from "@/lib/types" - -export const accelerationProgramFaq: Faq[] = [ - { - question: "Who can apply?", - answer: - "The Acceleration program is open to alumni of our entry level programs (e.g. Launch Program, ZK Playground) and other applicants at beginner to intermediate levels with programmable cryptography.", - }, - { - question: "What platform does the program use?", - answer: - "We will primarily utilize a Github repository for managing documents and staging of the grant proposals, grantees, and their progress. Stakeholders involved can utilize Github issues and pull requests to comment and collaborate.", - }, - { - question: "How does the grant funding work?", - answer: ( - <> - - While the core funding this program comes through PSE via the Ethereum - Ecosystem Support Program (ESP), some bounties are supported by - specific teams. - - - Selected grantees will receive a small amount of funding after the - completion of the first milestone. Following milestones will be - awarded larger amounts. - - - ), - }, - { - question: "How many proposals are accepted per open task?", - answer: - "Generally one proposal will be accepted. However, it is possible for applicants to form a team and work collaboratively.", - }, - { - question: "How long will I have to tackle the open tasks?", - answer: - "Though our rounds are run in three month periods, the duration of your grant may be shorter or longer depending on task details.", - }, - { - question: "Can I propose an open task?", - answer: - "If you have an interesting idea, you can submit it as an self proposed open task. Just to make sure you clearly credit to the original idea and clearly state if that idea is also funded by someone else.", - }, - { - question: "What if I have more questions?", - answer: - "For any further questions or additional information, you can join our Telegram group!", - }, -] diff --git a/data/programs/coreProgramFaq.tsx b/data/programs/coreProgramFaq.tsx deleted file mode 100644 index 1ad8259..0000000 --- a/data/programs/coreProgramFaq.tsx +++ /dev/null @@ -1,34 +0,0 @@ -import { Faq } from "@/lib/types" - -export const coreProgramFaq: Faq[] = [ - { - question: "Who can apply?", - answer: - "The Core Program is open to university students based in Japan, South Korea, Taiwan, Costa Rica, Ecuador and Argentina with a basic understanding of programming. If you're currently enrolled in a mathematics or computer science program, you're likely an excellent fit.", - }, - { - question: "What is the structure of the program?", - answer: - "We use a hybrid learning model with the majority of learning happening online and weekly in-person meetings for discussions and problem-solving. The program consists of three stages: 1) self-driven exploration & guidance, 2) hands-on circuit writing, and 3) open-source project contribution.", - }, - { - question: "How much time will I need to commit?", - answer: - "We're looking for dedicated students who can commit 40 hours a week from mid-July to September. You will be required to attend in-person meetups once a week and make presentations.", - }, - { - question: "Can I participate remotely?", - answer: - "Unfortunately no, the weekly in-person sessions are required for in-depth discussions and collaborative problem-solving.", - }, - { - question: "What will I gain from this program?", - answer: - "Upon completing the program, you'll have comprehensive knowledge about programmable cryptography, a bolstered GitHub portfolio, and opportunities to apply for grants for further research and contributions.", - }, - { - question: "What if I have more questions?", - answer: - "For any further questions or additional information, you can join our Telegram group!", - }, -] diff --git a/hooks/useGetProjectRelatedArticles.ts b/hooks/useGetProjectRelatedArticles.ts index 62a50d0..9edd117 100644 --- a/hooks/useGetProjectRelatedArticles.ts +++ b/hooks/useGetProjectRelatedArticles.ts @@ -1,5 +1,5 @@ import { useState, useEffect } from "react" -import { Article } from "@/lib/blog" +import { Article } from "@/lib/content" interface UseGetProjectRelatedArticlesProps { projectId: string diff --git a/lib/blog.ts b/lib/content.ts similarity index 83% rename from lib/blog.ts rename to lib/content.ts index 6b95d8d..ffb7b09 100644 --- a/lib/blog.ts +++ b/lib/content.ts @@ -3,6 +3,13 @@ import path from "path" import matter from "gray-matter" import jsYaml from "js-yaml" +export interface Project { + id: string + title: string + description: string + [key: string]: any +} + export interface Article { id: string title: string @@ -89,7 +96,6 @@ export function getMarkdownContent(options: { return allContentData.filter(Boolean) as T[] } -// Get all articles from /articles export function getArticles(options?: { limit?: number tag?: string @@ -99,7 +105,7 @@ export function getArticles(options?: { const allArticles = getMarkdownContent
({ directory: articlesDirectory, - excludeFiles: ["readme", "_article-template"], + excludeFiles: ["readme", "_readme", "_article-template"], processContent: (data, content, id) => { // Ensure tags are always an array, combining 'tags' and 'tag' const tags = [ @@ -152,6 +158,35 @@ export function getArticles(options?: { .filter((article) => article.id !== "_article-template") } +export function getProjects(options?: { + tag?: string + limit?: number + status?: string +}) { + const { tag, limit, status } = options ?? {} + let allProjects = getMarkdownContent({ + directory: projectsDirectory, + excludeFiles: ["readme", "_readme", "_project-template"], + }) + + // Filter by tag if provided + if (tag) { + allProjects = allProjects.filter((project) => project.tags?.includes(tag)) + } + + // Filter by status if provided + if (status) { + allProjects = allProjects.filter((project) => project.status === status) + } + + // Apply limit if provided + if (limit && limit > 0) { + allProjects = allProjects.slice(0, limit) + } + + return allProjects +} + export const getArticleTags = () => { const articles = getArticles() const allTags = @@ -175,13 +210,10 @@ export const getArticleTagsWithIds = () => { } export function getArticleById(slug?: string) { - // Note: This might need adjustment if you expect getArticleById to also have tags - // Currently relies on the base getArticles() which fetches all tags - const articles = getArticles() // Fetch all articles to find the one by ID - + const articles = getArticles() return articles.find((article) => article.id === slug) } -const lib = { getArticles, getArticleById } +const lib = { getArticles, getArticleById, getProjects } export default lib diff --git a/locales/en/devcon-7.json b/locales/en/devcon-7.json deleted file mode 100644 index ef5265c..0000000 --- a/locales/en/devcon-7.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "showMore": "Show More" -} diff --git a/styles/globals.css b/styles/globals.css index 80009cc..416af81 100644 --- a/styles/globals.css +++ b/styles/globals.css @@ -4,8 +4,19 @@ @layer base { :root { - --background: 0 0% 100%; - --foreground: 222.2 47.4% 11.2%; + --background: #FFFFFF; + --foreground: #0F172A; + + --active-selection: #50C3E0; + + --primary: 222.2 47.4% 11.2%; + --primary-foreground: 210 40% 98%; + + + --text-primary: #242528; + --text-secondary: #808590; + + /* TODO: */ --muted: 210 40% 96.1%; --muted-foreground: 215.4 16.3% 46.9%; @@ -19,8 +30,7 @@ --card: 0 0% 100%; --card-foreground: 222.2 47.4% 11.2%; - --primary: 222.2 47.4% 11.2%; - --primary-foreground: 210 40% 98%; + --secondary: 210 40% 96.1%; --secondary-foreground: 222.2 47.4% 11.2%; @@ -38,8 +48,21 @@ } .dark { - --background: 224 71% 4%; - --foreground: 213 31% 91%; + --background: #000000; + --foreground: #FFFFFF; + + --active-selection: #E1523A; + + --text-primary: #242528; + --text-secondary: #808590; + + + + + /* TODO: */ + + --primary: #E1523A; + --primary-foreground: #FFF; --muted: 223 47% 11%; --muted-foreground: 215.4 16.3% 56.9%; diff --git a/tailwind.config.js b/tailwind.config.js index 1e51695..0b358eb 100644 --- a/tailwind.config.js +++ b/tailwind.config.js @@ -62,10 +62,15 @@ module.exports = { 700: "#4A4C54", 950: "#242528", }, - background: "hsl(var(--background))", - foreground: "hsl(var(--foreground))", + + background: "var(--background)", + foreground: "var(--foreground)", + active: { + selection: "var(--active-selection)", + }, + primary: { - DEFAULT: "hsl(var(--primary))", + DEFAULT: "var(--primary)", foreground: "hsl(var(--primary-foreground))", }, secondary: {