feat: blog updates (#349)
@@ -3,8 +3,9 @@ import { BlogContent } from "@/components/blog/blog-content"
|
||||
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 { createMarkdownElement, Markdown } from "@/components/ui/markdown"
|
||||
import { getArticles, getArticleById } from "@/lib/blog"
|
||||
import { cn } from "@/lib/utils"
|
||||
import { Metadata } from "next"
|
||||
import Link from "next/link"
|
||||
|
||||
@@ -47,13 +48,34 @@ export default function BlogArticle({ params }: any) {
|
||||
const slug = params.slug
|
||||
const post = getArticleById(slug)
|
||||
|
||||
const imageUrl =
|
||||
(post?.image ?? "")?.length > 0
|
||||
? `/articles/${post?.id}/${post?.image}`
|
||||
: undefined
|
||||
|
||||
const imageAsCover = post?.coverImage ?? false
|
||||
|
||||
if (!post) return null
|
||||
return (
|
||||
<div className="flex flex-col">
|
||||
<div className="flex items-start justify-center background-gradient z-0">
|
||||
<div className="w-full bg-cover-gradient border-b border-tuatara-300">
|
||||
<div className="flex items-start justify-center z-0 relative">
|
||||
<div
|
||||
className={cn(
|
||||
"absolute inset-0 bg-cover",
|
||||
imageAsCover
|
||||
? "bg-cover after:content-[''] after:absolute after:inset-0 after:bg-black after:opacity-10 bg-center"
|
||||
: "bg-cover-gradient"
|
||||
)}
|
||||
style={{
|
||||
backgroundImage: imageAsCover ? `url(${imageUrl})` : undefined,
|
||||
}}
|
||||
/>
|
||||
<div className="flex items-start justify-center z-0 bg-cover border-tuatara-300 border-b w-full">
|
||||
<AppContent className="flex flex-col gap-8 py-10 max-w-[978px]">
|
||||
<Label.PageTitle label={post?.title} />
|
||||
<Label.PageTitle
|
||||
label={post?.title}
|
||||
className={cn(imageAsCover && "text-white")}
|
||||
/>
|
||||
{post?.date || post?.tldr ? (
|
||||
<div className="flex flex-col gap-2">
|
||||
{post?.date && (
|
||||
@@ -70,28 +92,50 @@ export default function BlogArticle({ params }: any) {
|
||||
</div>
|
||||
)}
|
||||
{post?.canonical && (
|
||||
<div className="text-sm italic text-gray-500 mt-1">
|
||||
<div
|
||||
className={cn(
|
||||
"text-sm italic mt-1",
|
||||
imageAsCover ? "text-white" : "text-gray-500"
|
||||
)}
|
||||
>
|
||||
This post was originally posted in{" "}
|
||||
<a
|
||||
href={post.canonical}
|
||||
target="_blank"
|
||||
rel="noopener noreferrer canonical"
|
||||
className="text-primary hover:underline"
|
||||
className={cn(
|
||||
"text-primary hover:underline",
|
||||
imageAsCover ? "text-white" : "text-gray-500"
|
||||
)}
|
||||
>
|
||||
{new URL(post.canonical).hostname.replace(/^www\./, "")}
|
||||
</a>
|
||||
</div>
|
||||
)}
|
||||
{post?.tldr && <Markdown>{post?.tldr}</Markdown>}
|
||||
{post?.tldr && (
|
||||
<Markdown darkMode={imageAsCover}>{post?.tldr}</Markdown>
|
||||
)}
|
||||
</div>
|
||||
) : null}
|
||||
{(post?.tags ?? [])?.length > 0 && (
|
||||
<div className="flex flex-col gap-2">
|
||||
<span className="text-sm italic text-tuatara-950">Tags:</span>
|
||||
<span
|
||||
className={cn(
|
||||
"text-sm italic",
|
||||
imageAsCover ? "text-white" : "text-tuatara-950"
|
||||
)}
|
||||
>
|
||||
Tags:
|
||||
</span>
|
||||
<div className="flex gap-2">
|
||||
{post?.tags?.map((tag) => (
|
||||
<Link key={tag} href={`/${params.lang}/blog?tag=${tag}`}>
|
||||
<Button size="xs">{tag}</Button>
|
||||
<Button
|
||||
size="xs"
|
||||
variant={imageAsCover ? "secondary" : "default"}
|
||||
>
|
||||
{tag}
|
||||
</Button>
|
||||
</Link>
|
||||
))}
|
||||
</div>
|
||||
|
||||
@@ -15,7 +15,8 @@ Edit the frontmatter section at the top of the file:
|
||||
---
|
||||
authors: ["Your Name"] # Add your name or multiple authors in an array
|
||||
title: "Your Article Title" # The title of your article
|
||||
image: "/articles/my-new-article/cover.webp" # Image used as cover
|
||||
image: "/articles/my-new-article/cover.webp" # Image used as cover, Keep in mind the image size, where possible use .webp format, possibly images less then 200/300kb
|
||||
coverImage: true # Image will be set as cover in the blog page, if not set the default is false
|
||||
tldr: "A brief summary of your article" #Short summary
|
||||
date: "YYYY-MM-DD" # Publication date in ISO format
|
||||
canonical: "mirror.xyz/my-new-article" # (Optional) The original source URL, this tells search engines the primary version of the content
|
||||
@@ -51,6 +52,7 @@ Write your article content using Markdown formatting:
|
||||
2. Add your images to this folder:
|
||||
- Any additional images you want to use in your article should be placed in this folder
|
||||
- Reference images in your article using just the file name and the extensions of it
|
||||
-
|
||||
|
||||
## Step 4: Preview Your Article
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
authors: [""]
|
||||
title: "Examle Title"
|
||||
image: "cover.png"
|
||||
coverImage: true
|
||||
tldr: ""
|
||||
date: "2024-04-07"
|
||||
---
|
||||
|
||||
@@ -1,10 +1,12 @@
|
||||
---
|
||||
authors: ["Anon Aadhaar Team"]
|
||||
title: "Advancing Anon Aadhaar: what's new in v1.0.0"
|
||||
image: "cover.webp"
|
||||
image: "advancing-anon-aadhaar-whats-new-in-v100-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by the Anon Aadhaar team. If you’re new to Anon Aadhaar make sure to read our [initial announcement post](https://mirror.xyz/privacy-scaling-explorations.eth/6R8kACTYp9mF3eIpLZMXs8JAQmTyb6Uy8KnZqzmDFZI)."
|
||||
date: "2024-02-14"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/YnqHAxpjoWl4e_K2opKPN4OAy5EU4sIJYYYHFCjkNOE"
|
||||
tags: ["test"]
|
||||
---
|
||||
|
||||
### **Introducing Anon Aadhaar v1.0.0**
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
---
|
||||
authors: ["Anon Aadhaar team"]
|
||||
title: "Announcing Anon Aadhaar"
|
||||
image: "cover.webp"
|
||||
image: "announcing-anon-aadhaar-cover.webp"
|
||||
tldr: "_This post was written by the Anon Aadhaar team._ /n/n _We’re excited to announce the public release of Anon Aadhaar!_"
|
||||
date: "2023-09-21"
|
||||
coverImage: true
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/6R8kACTYp9mF3eIpLZMXs8JAQmTyb6Uy8KnZqzmDFZI"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
authors: ["Alessandro", "Chao"]
|
||||
title: "Announcing MACI v1.1.1"
|
||||
image: "cover.webp"
|
||||
image: ""
|
||||
tldr: "This post was authored by [Alessandro](https://github.com/ctrlc03) and [Chao](https://github.com/chaosma)"
|
||||
date: "2023-01-18"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/ltCt68hslI5jmMf1AnfkrP2eUwkeZ8_fgkHc_WyD9Nc"
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
---
|
||||
authors: ["AnonKlub Team"]
|
||||
title: "AnonKlub: Reflections on Our Journey in Privacy-Preserving Solutions"
|
||||
image: "cover.webp"
|
||||
image: "anonklub-reflections-on-our-journey-in-privacy-preserving-solutions-cover.webp"
|
||||
tldr: "This post was written by the AnonKlub team."
|
||||
date: "2024-10-01"
|
||||
coverImage: true
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/7VTKFVR4PM75WtNnBzuQSBZW-UYoJOsnzBBQmB9MWbY"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
---
|
||||
authors: ["Bandada Team"]
|
||||
title: "Bandada is live!"
|
||||
image: "cover.webp"
|
||||
image: "bandada-is-live-cover.webp"
|
||||
tldr: "This post was written by the Bandada team. /n/n We are happy to announce the public release of Bandada V1! Try our [app](https://bandada.pse.dev/) out or run it yourself locally [v1.0.0-alpha](https://github.com/privacy-scaling-explorations/bandada/releases/tag/v1.0.0-alpha)"
|
||||
date: "2023-08-23"
|
||||
coverImage: true
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/p3Mtft28FG1ctgeUARVEKLTK_KexnWC6T4CUHaQark4"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
---
|
||||
authors: ["kichong"]
|
||||
title: "Beyond Zero-Knowledge: What's Next in Programmable Cryptography?"
|
||||
image: "cover.webp"
|
||||
image: "beyond-zero-knowledge-whats-next-in-programmable-cryptography-cover.webp"
|
||||
tldr: "_This post was written by [kichong](https://twitter.com/kichongtran) with helpful feedback and comments from [sinu](https://twitter.com/sinu_eth) and [jmall](https://twitter.com/Janmajaya_mall)._"
|
||||
date: "2023-11-09"
|
||||
coverImage: true
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/xXcRj5QfvA_qhkiZCVg46Gn9uX8P_Ld-DXlqY51roPY"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
---
|
||||
authors: ["PSE Team"]
|
||||
title: "Certificate Transparency Using NewtonPIR"
|
||||
image: "cover.webp"
|
||||
image: "certificate-transparency-using-newtonpir-cover.webp"
|
||||
tldr: "This post was written by PSE grantee Vishal Kulkarni."
|
||||
date: "2025-01-28"
|
||||
coverImage: true
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/V0PIyv1d_e_WPsAVhBP7zkDvn0XACY63uSvFFxBvjrk"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
---
|
||||
authors: ["Circom MPC research team"]
|
||||
title: "Circom MPC: TL;DR and Retrospective"
|
||||
image: "cover.webp"
|
||||
image: "circom-mpc-tldr-and-retrospective-cover.webp"
|
||||
tldr: "This post was authored by the Circom MPC research team."
|
||||
date: "2025-03-06"
|
||||
coverImage: true
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/qelA6kAr-CMq-dgmvFUKMMqxf6GoDaP8Cs-5sRWYfO4"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
---
|
||||
authors: ["Miha Stopar"]
|
||||
title: "Code Optimizations in the Landscape of Post-Quantum Cryptography"
|
||||
image: "cover.webp"
|
||||
image: "code-optimizations-in-the-landscape-of-post-quantum-cryptography-cover.webp"
|
||||
tldr: "This post was written by PSE researcher Miha Stopar."
|
||||
date: "2025-04-07"
|
||||
coverImage: true
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/BKI3tyauHIiUCYHgma-EHeSRXNTNDtLUQV9VNGQWLUg"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,9 +1,11 @@
|
||||
---
|
||||
authors: ["George Wiese"]
|
||||
title: "Continuing the Zero Gravity Journey"
|
||||
image: "cover.webp"
|
||||
image: "zero-to-start-applied-fully-homomorphic-encryption-fhe-part-2-cover-1.webp"
|
||||
coverImage: true
|
||||
tldr: "_This post was written by [George Wiese](https://github.com/georgwiese) and [Artem Grigor](https://github.com/ElusAegis). After Zero Gravity's 1st place finish at [ZK Hack Lisbon in April](https://zkhack.dev/2023/07/11/zk-hack-lisbon/), PSE recognized the potential of the Zero Gravity project and provided a grant for further research in the ZKML area._"
|
||||
date: "2023-10-19"
|
||||
coverImage: true
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/Jpy-PUcH1tpOWrqSdGS4gCxa72F-aZCssACJnFDD1U0"
|
||||
---
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Enrico Bottazzi"]
|
||||
title: "From CEX to CCEX with Summa Part 1"
|
||||
image: "cover.webp"
|
||||
image: "from-cex-to-ccex-with-summa-part-1-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by [Enrico Bottazzi](https://github.com/enricobottazzi) /n/n Special thanks to Yi-Hsiu Chen (Coinbase), Shashank Agrawal (Coinbase), Stenton Mayne (kn0x1y), Michelle Lai and Kostas Chalkias (Mysten Labs) for review and discussion. /n/n Part 1 introduces the main concepts behind the Summa protocol and can be skipped if already familiar to the reader. /n/n [Part 2](https://mirror.xyz/privacy-scaling-explorations.eth/f2ZfkPXZpvc6DUmG5-SyLjjYf78bcOcFeiJX2tb2hS0) dives into a full Proof of Solvency flow."
|
||||
date: "2023-09-14"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/_1Y6ExFD_Rs3oDxwx5_kWAj_Tl_L9c0Hm7E6SVJei0A"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Enrico Bottazzi"]
|
||||
title: "From CEX to CCEX with Summa Part 2"
|
||||
image: "cover.webp"
|
||||
image: "from-cex-to-ccex-with-summa-part-2-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by [Enrico Bottazzi](https://github.com/enricobottazzi) /n/n Special thanks to Yi-Hsiu Chen (Coinbase), Shashank Agrawal (Coinbase), Stenton Mayne (kn0x1y), Michelle Lai and Kostas Chalkias (Mysten Labs) for review and discussion. /n/n [Part 1](https://mirror.xyz/privacy-scaling-explorations.eth/_1Y6ExFD_Rs3oDxwx5_kWAj_Tl_L9c0Hm7E6SVJei0A) introduces the main concepts behind the Summa protocol. /n/n Part 2 dives into a full Proof of Solvency flow."
|
||||
date: "2023-09-14"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/f2ZfkPXZpvc6DUmG5-SyLjjYf78bcOcFeiJX2tb2hS0"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["PSE researcher Pierre"]
|
||||
title: "Intmax: a scalable payment L2 from plasma and validity proofs"
|
||||
image: "cover.webp"
|
||||
image: "intmax-a-scalable-payment-l2-from-plasma-and-validity-proofs-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by PSE researcher Pierre and originally posted on his [personal blog](https://www.pierredm.xyz/posts/intmax). Thanks to the Intmax team for their helpful review on this post!"
|
||||
date: "2025-03-04"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/__VLZrfjSScx42E786k-Ba4YptQfv8ujCWY_DuN1k4o"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Miha Stopar"]
|
||||
title: "Lattice-Based Proof Systems"
|
||||
image: "cover.webp"
|
||||
image: "lattice-based-proof-systems-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by PSE researcher Miha Stopar."
|
||||
date: "2025-02-18"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/4OyAht_dHsVT1MgcZTwrK2qJ-bwxpINcpBmLNfF4I2E"
|
||||
@@ -47,11 +48,11 @@ For the zero-knowledge proof of $x_1$ such that $g^{x_1} = h_1$, the [Schnorr pr
|
||||
- The prover sends $z_1 = y_1 + x_1 d$ to the verifier.
|
||||
- The verifier checks whether $g^{z_1} = t_1 h_1^d$.
|
||||
|
||||

|
||||

|
||||
|
||||
Now, the protocol can be easily extended to prove the knowledge of $x_2$ such that $g^{x_2} = h_2$. In this case, the prover would also send $t_2 = g^{y_2}$ in the first step and $z_2 = y_2 + x_1 d$ in the third one. The verifier would then check whether $g^{z_2} = t_2 h_2^d$.
|
||||
|
||||

|
||||

|
||||
|
||||
Note that checking the additional property $x_1 = u \cdot x_2$ is straightforward:
|
||||
|
||||
@@ -97,7 +98,7 @@ $||x_1|| \leq B$
|
||||
|
||||
Would the following protocol work?
|
||||
|
||||

|
||||

|
||||
|
||||
The last step of the protocol would be verifier checking whether $A z_1 = A y_1 + d A x_1 = t_1 + d h_1$.
|
||||
|
||||
@@ -165,7 +166,7 @@ $f \cdot \begin{pmatrix} \mathbf{c}_1 \\ \mathbf{c}_2 \end{pmatrix} = \begin{pma
|
||||
|
||||
#### Proof of opening
|
||||
|
||||

|
||||

|
||||
|
||||
Note that the opening for this commitment schemes is not simply $\mathbf{r}$ and $\mathbf{x}$; it also includes a polynomial $f \in \bar{C}.$ This is due to the issue with the extractor described above.
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Vivian Jeng"]
|
||||
title: "Mopro: Comparison of Circom Provers"
|
||||
image: "cover.webp"
|
||||
image: "mopro-comparison-of-circom-provers-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by [Vivian Jeng](https://mirror.xyz/privacy-scaling-explorations.eth/GLbuCflH0hu_DncKxiC2No5w3LZJAGw4QaCB-HYD5e0), a developer on the Mopro team."
|
||||
date: "2025-01-21"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/GLbuCflH0hu_DncKxiC2No5w3LZJAGw4QaCB-HYD5e0"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Summa Team"]
|
||||
title: "Retrospective: Summa"
|
||||
image: "cover.webp"
|
||||
image: "retrospective-summa-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was authored by the Summa team."
|
||||
date: "2025-02-10"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/HRlshQwWxo66EMt3lwk6PSuDkitJCr_-ltCETZHNeu0"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Brechy"]
|
||||
title: "Secure Multi-Party Computation"
|
||||
image: "cover.webp"
|
||||
coverImage: true
|
||||
image: "secure-multi-party-computation-cover.webp"
|
||||
tldr: "This post was written by [Brechy](https://github.com/brech1). Thanks [Nam Ngo](https://github.com/namnc) for the feedback and review!"
|
||||
date: "2024-08-06"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/v_KNOV_NwQwKV0tb81uBS4m-rbs-qJGvCx7WvwP4sDg"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["0xZoey"]
|
||||
title: "Self-Sovereign Identity & Programmable Cryptography: Challenges Ahead"
|
||||
image: "cover.webp"
|
||||
image: "self-sovereign-identity-programmable-cryptography-challenges-ahead-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by [0xZoey](https://twitter.com/0xZoey), with contributions from Chance."
|
||||
date: "2025-01-23"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/zRM7qQSt_igfoSxdSa0Pts9MFdAoD96DD3m43bPQJT8"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["PSE Team"]
|
||||
title: "The next chapter for zkEVM Community Edition"
|
||||
image: "cover.webp"
|
||||
image: "the-next-chapter-for-zkevm-community-edition-cover.webp"
|
||||
coverImage: true
|
||||
tldr: ""
|
||||
date: "2024-06-05"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/hqLMwLfKmQLj773QCRLTOT-Z8sSUaTEfQpBSdTbitbs"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Blake M Scurr"]
|
||||
title: "The zk-ECDSA Landscape"
|
||||
image: "cover.webp"
|
||||
image: "the-zk-ecdsa-landscape-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was authored by grantee [Blake M Scurr](https://github.com/BlakeMScurr). His mandate was to explore zk-ECDSA, build applications with zk-ECDSA, and contribute to ZKPs to make this vision come true."
|
||||
date: "2023-04-18"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/djxf2g9VzUcss1e-gWIL2DSRD4stWggtTOcgsv1RlxY"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["sinu"]
|
||||
title: "TLSNotary Updates"
|
||||
image: "cover.webp"
|
||||
image: "tlsnotary-updates-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by [sinu](https://github.com/sinui0)."
|
||||
date: "2023-09-19"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/T4MR2PgBzBmN2I3dhDJpILXkQsqZp1Bp8GSm_Oo3Vnw"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Chance"]
|
||||
title: "UniRep Ceremony: An Invitation to the Celestial Call and UniRep v2"
|
||||
image: "cover.webp"
|
||||
image: "unirep-ceremony-an-invitation-to-the-celestial-call-and-unirep-v2-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "The initial ideas for this blog post originated from UniRep core contributor [Chance](https://github.com/vimwitch). Additional write up and review by [CJ](https://github.com/CJ-Rose), [Chiali](https://github.com/ChialiT), [Vivian](https://github.com/vivianjeng), [Doris](https://github.com/kittybest), and [Anthony](https://github.com/AnthonyMadia)."
|
||||
date: "2023-10-24"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/z-gW2RtgFTV18ZkRGED2XKLn_wDd-SwMSs17vWQwfLs"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["PSE EcoDev Team"]
|
||||
title: "Unleashing Potential: Introducing the PSE Core Program"
|
||||
image: "cover.webp"
|
||||
image: "unleashing-potential-introducing-the-pse-core-program-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by the PSE EcoDev Team."
|
||||
date: "2024-04-24"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/PvNKlzp8Xlaic_DeIFEW20-ai4eN1AqJO26d4YRqWwM"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Rasul Ibragimov"]
|
||||
title: "Web2 Nullifiers using vOPRF"
|
||||
image: "cover.webp"
|
||||
image: "web2-nullifiers-using-voprf-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by PSE researcher Rasul Ibragimov. Big thanks to Lev Soukhanov for explaining the majority of this to me - without him, this blog post wouldn't exist."
|
||||
date: "2025-01-30"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/L4LSAWflNocKolhV6ZVaqt3KDxdSjFPNSv0U5SCc__0"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["Enrico Bottazzi"]
|
||||
title: "Why We Can't Build Perfectly Secure Multi-Party Applications (yet)"
|
||||
image: "cover.webp"
|
||||
image: "why-we-cant-build-perfectly-secure-multi-party-applications-yet-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by PSE researcher Enrico Bottazzi. Thanks to Pia Park for discussions and reviews."
|
||||
date: "2025-01-14"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/nXUhkZ84ckZi_5mYRFCCKgkLVFAmM2ECdEFCQul2jPs"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["0xZoey"]
|
||||
title: "Zero to Start: Applied Fully Homomorphic Encryption (FHE) Part 1"
|
||||
image: "cover.webp"
|
||||
image: "zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was written by [0xZoey](https://twitter.com/0xZoey). Special thanks to [Janmajaya](https://twitter.com/Janmajaya_mall), [Enrico](https://twitter.com/backaes?lang=en), and [Owen](https://twitter.com/omurovec) who generously gave their time and expertise to review this piece. Your valuable contributions and feedback have greatly enhanced the quality and depth of this work. /n/n Find [Part 2: Fundamental Concepts, FHE Development, Applied FHE, Challenges and Open Problems](https://mirror.xyz/privacy-scaling-explorations.eth/wQZqa9acMdGS7LTXmKX-fR05VHfkgFf9Wrjso7XxDzs) here…"
|
||||
date: "2023-12-21"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/D8UHFW1t48x2liWb5wuP6LDdCRbgUH_8vOFvA0tNDJA"
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
---
|
||||
authors: ["0xZoey"]
|
||||
title: "Zero to Start: Applied Fully Homomorphic Encryption (FHE) Part 2"
|
||||
image: "cover.webp"
|
||||
image: "zero-to-start-applied-fully-homomorphic-encryption-fhe-part-2-cover-1.webp"
|
||||
tldr: "This post was written by [0xZoey](https://twitter.com/0xZoey), with contributions from Chance. /n This is an extension of [Part 1: An Introduction to FHE, ZKPs & MPC, and The State of FHE Development](https://mirror.xyz/privacy-scaling-explorations.eth/D8UHFW1t48x2liWb5wuP6LDdCRbgUH_8vOFvA0tNDJA)."
|
||||
date: "2023-12-21"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/wQZqa9acMdGS7LTXmKX-fR05VHfkgFf9Wrjso7XxDzs"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["PSE Team"]
|
||||
title: "zkEVM Community Edition Part 1: Introduction"
|
||||
image: "cover.webp"
|
||||
image: "zkevm-community-edition-part-1-introduction-cover-1.webp"
|
||||
coverImage: true
|
||||
tldr: ""
|
||||
date: "2023-05-23"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/I5BzurX-T6slFaPbA4i3hVrO7U2VkBR45eO-N3CSnSg"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["PSE Team"]
|
||||
title: "zkEVM Community Edition Part 2: Components"
|
||||
image: "cover.webp"
|
||||
image: "zkevm-community-edition-part-2-components-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This series of articles intends to provide an overview of the zkEVM Community Edition in a way that is broadly accessible. Part 2 is a summary of the common components used in most zkEVMs."
|
||||
date: "2023-05-23"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/AW854RXMqS3SU8WCA7Yz-LVnTXCOjpwhmwUq30UNi1Q"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["PSE Team"]
|
||||
title: "zkEVM Community Edition Part 3: Logic and Structure"
|
||||
image: "cover.webp"
|
||||
image: "zkevm-community-edition-part-3-logic-and-structure-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This series intends to provide an overview of the zkEVM Community Edition in a way that is broadly accessible. Part 3 reviews the general logic and structure of the zkEVM Community Edition."
|
||||
date: "2023-05-23"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/shl8eMBiObd6_AUBikXZrjKD4fibI6xUZd7d9Yv5ezE"
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
---
|
||||
authors: ["drCathieSo.eth"]
|
||||
title: "ZKML: Bridging AI/ML and Web3 with Zero-Knowledge Proofs"
|
||||
image: "cover.webp"
|
||||
image: "zkml-bridging-aiml-and-web3-with-zero-knowledge-proofs-cover.webp"
|
||||
coverImage: true
|
||||
tldr: "This post was authored by [drCathieSo.eth](https://twitter.com/drCathieSo_eth) and was originally published [here](https://hackmd.io/@cathie/zkml)."
|
||||
date: "2023-05-02"
|
||||
canonical: "https://mirror.xyz/privacy-scaling-explorations.eth/K88lOS4XegJGzMoav9K5bLuT9Zhn3Hz2KkhB3ITq-m8"
|
||||
|
||||
@@ -22,34 +22,22 @@ export const BlogArticleCard = ({
|
||||
date,
|
||||
authors,
|
||||
}: Article) => {
|
||||
const imageUrl = `/articles/${id}/${image}`
|
||||
const imageUrl =
|
||||
(image ?? "")?.length > 0 ? `/articles/${id}/${image}` : "/fallback.webp"
|
||||
return (
|
||||
<div className="flex flex-col h-full w-full">
|
||||
<div className="relative h-48 w-full overflow-hidden bg-gray-100">
|
||||
{!!image && (
|
||||
<Image
|
||||
src={imageUrl}
|
||||
alt={title}
|
||||
fill
|
||||
className="object-cover"
|
||||
quality={90}
|
||||
/>
|
||||
)}
|
||||
<Image
|
||||
src={imageUrl}
|
||||
alt={title}
|
||||
fill
|
||||
className="object-cover"
|
||||
quality={90}
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div className="p-5 flex flex-col flex-grow gap-5 lg:gap-8 min-h-[180px]">
|
||||
<div className="flex flex-col gap-2">
|
||||
<div className="flex items-center gap-1">
|
||||
<Image
|
||||
src="/logos/pse-logo-bg.svg"
|
||||
alt="Privacy and Scaling Explorations"
|
||||
width={24}
|
||||
height={24}
|
||||
/>
|
||||
<span className="text-black/50 font-medium text-sm">
|
||||
Privacy and Scaling Explorations
|
||||
</span>
|
||||
</div>
|
||||
<h2 className="text-2xl font-bold leading-7 text-black duration-200 cursor-pointer hover:text-anakiwa-500">
|
||||
{title}
|
||||
</h2>
|
||||
|
||||
@@ -30,7 +30,6 @@ function ArticlesGrid({
|
||||
)}
|
||||
{articles.map(
|
||||
({ id, title, image, tldr = "", date, authors, content }: Article) => {
|
||||
// Use lang parameter for correct article URL
|
||||
const url = `/${lang}/blog/${id}`
|
||||
return (
|
||||
<div key={id} className="flex h-full">
|
||||
|
||||
@@ -8,7 +8,7 @@ import { Button } from "../ui/button"
|
||||
import { Icons } from "../icons"
|
||||
|
||||
export async function BlogRecentArticles({ lang }: { lang: any }) {
|
||||
const articles = getArticles({ limit: 5 })
|
||||
const articles = getArticles({ limit: 6 })
|
||||
const { t } = await useTranslation(lang, "blog-page")
|
||||
|
||||
const lastArticle = articles[0]
|
||||
@@ -24,8 +24,8 @@ export async function BlogRecentArticles({ lang }: { lang: any }) {
|
||||
{t("recentArticles")}
|
||||
</h3>
|
||||
|
||||
<div className="grid grid-cols-1 lg:grid-cols-3 gap-10">
|
||||
<div className="flex flex-col gap-5 lg:col-span-2">
|
||||
<div className="grid grid-cols-1 lg:grid-cols-5 gap-10 lg:gap-x-14 lg:max-w-[1200px] mx-auto">
|
||||
<div className="flex flex-col gap-5 lg:col-span-3">
|
||||
<Image
|
||||
src={imageUrl}
|
||||
alt={lastArticle.title}
|
||||
@@ -50,7 +50,7 @@ export async function BlogRecentArticles({ lang }: { lang: any }) {
|
||||
)}
|
||||
</Link>
|
||||
</div>
|
||||
<div className="flex flex-col gap-6 lg:col-span-1">
|
||||
<div className="flex flex-col gap-6 lg:col-span-2">
|
||||
{otherArticles.map((article, index) => (
|
||||
<Link
|
||||
key={article.id}
|
||||
@@ -67,7 +67,7 @@ export async function BlogRecentArticles({ lang }: { lang: any }) {
|
||||
)}
|
||||
</Link>
|
||||
))}
|
||||
<Link href="/blog">
|
||||
<Link href="/blog" className="mt-auto">
|
||||
<Button className="uppercase">
|
||||
<div className="flex items-center gap-2">
|
||||
<span>{t("seeMore")}</span>
|
||||
|
||||
@@ -108,10 +108,10 @@ const remarkCustomNewlines = () => {
|
||||
}
|
||||
|
||||
// Styling for HTML attributes for markdown component
|
||||
const REACT_MARKDOWN_CONFIG: Components = {
|
||||
const REACT_MARKDOWN_CONFIG = (darkMode: boolean): Components => ({
|
||||
a: ({ ...props }) =>
|
||||
createMarkdownElement("a", {
|
||||
className: "text-anakiwa-500 hover:text-orange duration-200",
|
||||
className: `${darkMode ? "text-anakiwa-300" : "text-anakiwa-500"} hover:text-orange duration-200`,
|
||||
target: "_blank",
|
||||
...props,
|
||||
}),
|
||||
@@ -147,7 +147,7 @@ const REACT_MARKDOWN_CONFIG: Components = {
|
||||
}),
|
||||
p: ({ ...props }) =>
|
||||
createMarkdownElement("p", {
|
||||
className: "text-tuatara-700 font-sans text-base font-normal",
|
||||
className: `${darkMode ? "text-white" : "text-tuatara-700 "} font-sans text-base font-normal`,
|
||||
...props,
|
||||
}),
|
||||
ul: ({ ordered, ...props }) =>
|
||||
@@ -189,19 +189,24 @@ const REACT_MARKDOWN_CONFIG: Components = {
|
||||
className: "w-auto w-auto mx-auto rounded-lg object-cover",
|
||||
...props,
|
||||
}),
|
||||
}
|
||||
})
|
||||
|
||||
interface MarkdownProps {
|
||||
children: string
|
||||
components?: Components // components overrides the default components
|
||||
darkMode?: boolean
|
||||
}
|
||||
|
||||
export const Markdown = ({ children, components }: MarkdownProps) => {
|
||||
export const Markdown = ({
|
||||
children,
|
||||
components,
|
||||
darkMode = false,
|
||||
}: MarkdownProps) => {
|
||||
return (
|
||||
<ReactMarkdown
|
||||
skipHtml={false}
|
||||
components={{
|
||||
...REACT_MARKDOWN_CONFIG,
|
||||
...REACT_MARKDOWN_CONFIG(darkMode),
|
||||
...components,
|
||||
}}
|
||||
remarkPlugins={[remarkGfm, remarkMath, remarkCustomNewlines]}
|
||||
|
||||
@@ -16,6 +16,7 @@ export interface Article {
|
||||
hash?: string
|
||||
canonical?: string
|
||||
tags?: string[]
|
||||
coverImage?: boolean
|
||||
}
|
||||
|
||||
const articlesDirectory = path.join(process.cwd(), "articles")
|
||||
@@ -66,7 +67,8 @@ export function getArticles(options?: { limit?: number; tag?: string }) {
|
||||
return {
|
||||
id,
|
||||
...matterResult.data,
|
||||
tags: tags, // Assign the combined and normalized tags array
|
||||
coverImage: matterResult.data?.coverImage ?? false,
|
||||
tags: tags,
|
||||
content: matterResult.content,
|
||||
}
|
||||
} catch (error) {
|
||||
|
||||
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 116 KiB |
BIN
public/articles/bandada-is-live/bandada-is-live-cover.webp
Normal file
|
After Width: | Height: | Size: 38 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 74 KiB |
|
After Width: | Height: | Size: 29 KiB |
|
After Width: | Height: | Size: 87 KiB |
|
After Width: | Height: | Size: 100 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 102 KiB |
|
After Width: | Height: | Size: 209 KiB |
BIN
public/articles/lattice-based-proof-systems/image-1.png
Normal file
|
After Width: | Height: | Size: 28 KiB |
BIN
public/articles/lattice-based-proof-systems/image-2.png
Normal file
|
After Width: | Height: | Size: 35 KiB |
BIN
public/articles/lattice-based-proof-systems/image-3.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
BIN
public/articles/lattice-based-proof-systems/image-4.png
Normal file
|
After Width: | Height: | Size: 27 KiB |
|
After Width: | Height: | Size: 187 KiB |
|
After Width: | Height: | Size: 228 KiB |
|
After Width: | Height: | Size: 200 KiB |
|
After Width: | Height: | Size: 217 KiB |
|
After Width: | Height: | Size: 175 KiB |
|
After Width: | Height: | Size: 133 KiB |
|
After Width: | Height: | Size: 361 KiB |
|
Before Width: | Height: | Size: 64 KiB |
|
After Width: | Height: | Size: 141 KiB |
|
Before Width: | Height: | Size: 46 KiB |
BIN
public/articles/tlsnotary-updates/tlsnotary-updates-cover.webp
Normal file
|
After Width: | Height: | Size: 153 KiB |
|
Before Width: | Height: | Size: 34 KiB |
|
After Width: | Height: | Size: 48 KiB |
|
Before Width: | Height: | Size: 504 KiB |
|
After Width: | Height: | Size: 224 KiB |
|
Before Width: | Height: | Size: 352 KiB |
|
After Width: | Height: | Size: 182 KiB |
|
Before Width: | Height: | Size: 333 KiB |
|
After Width: | Height: | Size: 768 KiB |
|
Before Width: | Height: | Size: 43 KiB |
|
After Width: | Height: | Size: 673 KiB |
|
Before Width: | Height: | Size: 41 KiB |
|
After Width: | Height: | Size: 866 KiB |
|
Before Width: | Height: | Size: 466 KiB |
|
After Width: | Height: | Size: 950 KiB |
|
Before Width: | Height: | Size: 756 KiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 773 KiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
Before Width: | Height: | Size: 430 KiB |
|
After Width: | Height: | Size: 730 KiB |
BIN
public/fallback.webp
Normal file
|
After Width: | Height: | Size: 77 KiB |