From 2367693384b08b52dc7b2de13bb52bb96f4e96ef Mon Sep 17 00:00:00 2001 From: Kalidou Diagne Date: Thu, 24 Apr 2025 23:45:03 +0300 Subject: [PATCH] feat: blog updates (#349) --- app/[lang]/blog/[slug]/page.tsx | 62 +++++++++++++++--- articles/README.md | 4 +- articles/_article-template.md | 1 + ...dvancing-anon-aadhaar-whats-new-in-v100.md | 4 +- articles/announcing-anon-aadhaar.md | 3 +- articles/announcing-maci-v111.md | 2 +- ...journey-in-privacy-preserving-solutions.md | 3 +- articles/bandada-is-live.md | 3 +- ...whats-next-in-programmable-cryptography.md | 3 +- ...ertificate-transparency-using-newtonpir.md | 3 +- articles/circom-mpc-tldr-and-retrospective.md | 3 +- ...-landscape-of-post-quantum-cryptography.md | 3 +- .../continuing-the-zero-gravity-journey.md | 4 +- .../from-cex-to-ccex-with-summa-part-1.md | 3 +- .../from-cex-to-ccex-with-summa-part-2.md | 3 +- ...ment-l2-from-plasma-and-validity-proofs.md | 3 +- articles/lattice-based-proof-systems.md | 11 ++-- .../mopro-comparison-of-circom-provers.md | 3 +- articles/retrospective-summa.md | 3 +- articles/secure-multi-party-computation.md | 3 +- ...grammable-cryptography-challenges-ahead.md | 3 +- ...ext-chapter-for-zkevm-community-edition.md | 3 +- articles/the-zk-ecdsa-landscape.md | 3 +- articles/tlsnotary-updates.md | 3 +- ...ion-to-the-celestial-call-and-unirep-v2.md | 3 +- ...ential-introducing-the-pse-core-program.md | 3 +- articles/web2-nullifiers-using-voprf.md | 3 +- ...tly-secure-multi-party-applications-yet.md | 3 +- ...fully-homomorphic-encryption-fhe-part-1.md | 3 +- ...fully-homomorphic-encryption-fhe-part-2.md | 2 +- ...m-community-edition-part-1-introduction.md | 3 +- ...evm-community-edition-part-2-components.md | 3 +- ...nity-edition-part-3-logic-and-structure.md | 3 +- ...iml-and-web3-with-zero-knowledge-proofs.md | 3 +- components/blog/blog-article-card.tsx | 30 +++------ components/blog/blog-articles.tsx | 1 - components/blog/blog-recent-articles.tsx | 10 +-- components/ui/markdown.tsx | 17 +++-- lib/blog.ts | 4 +- ...-anon-aadhaar-whats-new-in-v100-cover.webp | Bin 0 -> 38670 bytes .../announcing-anon-aadhaar-cover.webp | Bin 0 -> 69700 bytes ...in-privacy-preserving-solutions-cover.webp | Bin 0 -> 119344 bytes .../bandada-is-live-cover.webp | Bin 0 -> 39288 bytes ...xt-in-programmable-cryptography-cover.webp | Bin 0 -> 67862 bytes ...te-transparency-using-newtonpir-cover.webp | Bin 0 -> 75912 bytes ...rcom-mpc-tldr-and-retrospective-cover.webp | Bin 0 -> 29804 bytes ...pe-of-post-quantum-cryptography-cover.webp | Bin 0 -> 88814 bytes ...inuing-the-zero-gravity-journey-cover.webp | Bin 0 -> 101876 bytes ...m-cex-to-ccex-with-summa-part-1-cover.webp | Bin 0 -> 72492 bytes ...m-cex-to-ccex-with-summa-part-2-cover.webp | Bin 0 -> 104184 bytes ...from-plasma-and-validity-proofs-cover.webp | Bin 0 -> 214124 bytes .../lattice-based-proof-systems/image-1.png | Bin 0 -> 28293 bytes .../lattice-based-proof-systems/image-2.png | Bin 0 -> 35426 bytes .../lattice-based-proof-systems/image-3.png | Bin 0 -> 27909 bytes .../lattice-based-proof-systems/image-4.png | Bin 0 -> 27642 bytes .../lattice-based-proof-systems-cover.webp | Bin 0 -> 191608 bytes ...ro-comparison-of-circom-provers-cover.webp | Bin 0 -> 233126 bytes .../retrospective-summa-cover.webp | Bin 0 -> 204690 bytes ...usted-setups-and-p0tion-project-cover.webp | Bin 0 -> 222340 bytes .../secure-multi-party-computation-cover.webp | Bin 0 -> 179486 bytes ...e-cryptography-challenges-ahead-cover.webp | Bin 0 -> 135784 bytes ...ter-for-zkevm-community-edition-cover.webp | Bin 0 -> 369392 bytes .../the-zk-ecdsa-landscape/cover.webp | Bin 65068 -> 0 bytes .../the-zk-ecdsa-landscape-cover.webp | Bin 0 -> 144434 bytes public/articles/tlsnotary-updates/cover.webp | Bin 46790 -> 0 bytes .../tlsnotary-updates-cover.webp | Bin 0 -> 156834 bytes .../cover.webp | Bin 34492 -> 0 bytes ...he-celestial-call-and-unirep-v2-cover.webp | Bin 0 -> 49156 bytes .../cover.webp | Bin 516640 -> 0 bytes ...ntroducing-the-pse-core-program-cover.webp | Bin 0 -> 229824 bytes .../web2-nullifiers-using-voprf/cover.webp | Bin 360152 -> 0 bytes .../web2-nullifiers-using-voprf-cover.webp | Bin 0 -> 186228 bytes .../cover.webp | Bin 340860 -> 0 bytes ...re-multi-party-applications-yet-cover.webp | Bin 0 -> 786262 bytes .../cover.webp | Bin 43592 -> 0 bytes ...momorphic-encryption-fhe-part-1-cover.webp | Bin 0 -> 688836 bytes .../cover.webp | Bin 41774 -> 0 bytes ...morphic-encryption-fhe-part-2-cover-1.webp | Bin 0 -> 886998 bytes .../cover.webp | Bin 476638 -> 0 bytes ...y-edition-part-1-introduction-cover-1.webp | Bin 0 -> 972262 bytes .../cover.webp | Bin 773620 -> 0 bytes ...unity-edition-part-2-components-cover.webp | Bin 0 -> 1292838 bytes .../cover.webp | Bin 791246 -> 0 bytes ...tion-part-3-logic-and-structure-cover.webp | Bin 0 -> 1268492 bytes .../cover.webp | Bin 440528 -> 0 bytes ...web3-with-zero-knowledge-proofs-cover.webp | Bin 0 -> 747288 bytes public/fallback.webp | Bin 0 -> 78634 bytes 87 files changed, 151 insertions(+), 79 deletions(-) create mode 100644 public/articles/advancing-anon-aadhaar-whats-new-in-v100/advancing-anon-aadhaar-whats-new-in-v100-cover.webp create mode 100644 public/articles/announcing-anon-aadhaar/announcing-anon-aadhaar-cover.webp create mode 100644 public/articles/anonklub-reflections-on-our-journey-in-privacy-preserving-solutions/anonklub-reflections-on-our-journey-in-privacy-preserving-solutions-cover.webp create mode 100644 public/articles/bandada-is-live/bandada-is-live-cover.webp create mode 100644 public/articles/beyond-zero-knowledge-whats-next-in-programmable-cryptography/beyond-zero-knowledge-whats-next-in-programmable-cryptography-cover.webp create mode 100644 public/articles/certificate-transparency-using-newtonpir/certificate-transparency-using-newtonpir-cover.webp create mode 100644 public/articles/circom-mpc-tldr-and-retrospective/circom-mpc-tldr-and-retrospective-cover.webp create mode 100644 public/articles/code-optimizations-in-the-landscape-of-post-quantum-cryptography/code-optimizations-in-the-landscape-of-post-quantum-cryptography-cover.webp create mode 100644 public/articles/continuing-the-zero-gravity-journey/continuing-the-zero-gravity-journey-cover.webp create mode 100644 public/articles/from-cex-to-ccex-with-summa-part-1/from-cex-to-ccex-with-summa-part-1-cover.webp create mode 100644 public/articles/from-cex-to-ccex-with-summa-part-2/from-cex-to-ccex-with-summa-part-2-cover.webp create mode 100644 public/articles/intmax-a-scalable-payment-l2-from-plasma-and-validity-proofs/intmax-a-scalable-payment-l2-from-plasma-and-validity-proofs-cover.webp create mode 100644 public/articles/lattice-based-proof-systems/image-1.png create mode 100644 public/articles/lattice-based-proof-systems/image-2.png create mode 100644 public/articles/lattice-based-proof-systems/image-3.png create mode 100644 public/articles/lattice-based-proof-systems/image-4.png create mode 100644 public/articles/lattice-based-proof-systems/lattice-based-proof-systems-cover.webp create mode 100644 public/articles/mopro-comparison-of-circom-provers/mopro-comparison-of-circom-provers-cover.webp create mode 100644 public/articles/retrospective-summa/retrospective-summa-cover.webp create mode 100644 public/articles/retrospective-trusted-setups-and-p0tion-project/retrospective-trusted-setups-and-p0tion-project-cover.webp create mode 100644 public/articles/secure-multi-party-computation/secure-multi-party-computation-cover.webp create mode 100644 public/articles/self-sovereign-identity-programmable-cryptography-challenges-ahead/self-sovereign-identity-programmable-cryptography-challenges-ahead-cover.webp create mode 100644 public/articles/the-next-chapter-for-zkevm-community-edition/the-next-chapter-for-zkevm-community-edition-cover.webp delete mode 100644 public/articles/the-zk-ecdsa-landscape/cover.webp create mode 100644 public/articles/the-zk-ecdsa-landscape/the-zk-ecdsa-landscape-cover.webp delete mode 100644 public/articles/tlsnotary-updates/cover.webp create mode 100644 public/articles/tlsnotary-updates/tlsnotary-updates-cover.webp delete mode 100644 public/articles/unirep-ceremony-an-invitation-to-the-celestial-call-and-unirep-v2/cover.webp create mode 100644 public/articles/unirep-ceremony-an-invitation-to-the-celestial-call-and-unirep-v2/unirep-ceremony-an-invitation-to-the-celestial-call-and-unirep-v2-cover.webp delete mode 100644 public/articles/unleashing-potential-introducing-the-pse-core-program/cover.webp create mode 100644 public/articles/unleashing-potential-introducing-the-pse-core-program/unleashing-potential-introducing-the-pse-core-program-cover.webp delete mode 100644 public/articles/web2-nullifiers-using-voprf/cover.webp create mode 100644 public/articles/web2-nullifiers-using-voprf/web2-nullifiers-using-voprf-cover.webp delete mode 100644 public/articles/why-we-cant-build-perfectly-secure-multi-party-applications-yet/cover.webp create mode 100644 public/articles/why-we-cant-build-perfectly-secure-multi-party-applications-yet/why-we-cant-build-perfectly-secure-multi-party-applications-yet-cover.webp delete mode 100644 public/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1/cover.webp create mode 100644 public/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1-cover.webp delete mode 100644 public/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-2/cover.webp create mode 100644 public/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-2/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-2-cover-1.webp delete mode 100644 public/articles/zkevm-community-edition-part-1-introduction/cover.webp create mode 100644 public/articles/zkevm-community-edition-part-1-introduction/zkevm-community-edition-part-1-introduction-cover-1.webp delete mode 100644 public/articles/zkevm-community-edition-part-2-components/cover.webp create mode 100644 public/articles/zkevm-community-edition-part-2-components/zkevm-community-edition-part-2-components-cover.webp delete mode 100644 public/articles/zkevm-community-edition-part-3-logic-and-structure/cover.webp create mode 100644 public/articles/zkevm-community-edition-part-3-logic-and-structure/zkevm-community-edition-part-3-logic-and-structure-cover.webp delete mode 100644 public/articles/zkml-bridging-aiml-and-web3-with-zero-knowledge-proofs/cover.webp create mode 100644 public/articles/zkml-bridging-aiml-and-web3-with-zero-knowledge-proofs/zkml-bridging-aiml-and-web3-with-zero-knowledge-proofs-cover.webp create mode 100644 public/fallback.webp diff --git a/app/[lang]/blog/[slug]/page.tsx b/app/[lang]/blog/[slug]/page.tsx index beb83fe..6acf4d7 100644 --- a/app/[lang]/blog/[slug]/page.tsx +++ b/app/[lang]/blog/[slug]/page.tsx @@ -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 (
-
-
+
+
+
- + {post?.date || post?.tldr ? (
{post?.date && ( @@ -70,28 +92,50 @@ export default function BlogArticle({ params }: any) {
)} {post?.canonical && ( -
+
This post was originally posted in{" "} {new URL(post.canonical).hostname.replace(/^www\./, "")}
)} - {post?.tldr && {post?.tldr}} + {post?.tldr && ( + {post?.tldr} + )}
) : null} {(post?.tags ?? [])?.length > 0 && (
- Tags: + + Tags: +
{post?.tags?.map((tag) => ( - + ))}
diff --git a/articles/README.md b/articles/README.md index 3f77e73..f99b117 100644 --- a/articles/README.md +++ b/articles/README.md @@ -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 diff --git a/articles/_article-template.md b/articles/_article-template.md index f99d437..3bceba6 100644 --- a/articles/_article-template.md +++ b/articles/_article-template.md @@ -2,6 +2,7 @@ authors: [""] title: "Examle Title" image: "cover.png" +coverImage: true tldr: "" date: "2024-04-07" --- diff --git a/articles/advancing-anon-aadhaar-whats-new-in-v100.md b/articles/advancing-anon-aadhaar-whats-new-in-v100.md index 85c5603..c0a321d 100644 --- a/articles/advancing-anon-aadhaar-whats-new-in-v100.md +++ b/articles/advancing-anon-aadhaar-whats-new-in-v100.md @@ -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** diff --git a/articles/announcing-anon-aadhaar.md b/articles/announcing-anon-aadhaar.md index 40c423a..ec13a18 100644 --- a/articles/announcing-anon-aadhaar.md +++ b/articles/announcing-anon-aadhaar.md @@ -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" --- diff --git a/articles/announcing-maci-v111.md b/articles/announcing-maci-v111.md index e566107..56a6031 100644 --- a/articles/announcing-maci-v111.md +++ b/articles/announcing-maci-v111.md @@ -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" diff --git a/articles/anonklub-reflections-on-our-journey-in-privacy-preserving-solutions.md b/articles/anonklub-reflections-on-our-journey-in-privacy-preserving-solutions.md index 09c637b..2ef137a 100644 --- a/articles/anonklub-reflections-on-our-journey-in-privacy-preserving-solutions.md +++ b/articles/anonklub-reflections-on-our-journey-in-privacy-preserving-solutions.md @@ -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" --- diff --git a/articles/bandada-is-live.md b/articles/bandada-is-live.md index 77feb58..43f8b2d 100644 --- a/articles/bandada-is-live.md +++ b/articles/bandada-is-live.md @@ -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" --- diff --git a/articles/beyond-zero-knowledge-whats-next-in-programmable-cryptography.md b/articles/beyond-zero-knowledge-whats-next-in-programmable-cryptography.md index 61b8a82..81389b0 100644 --- a/articles/beyond-zero-knowledge-whats-next-in-programmable-cryptography.md +++ b/articles/beyond-zero-knowledge-whats-next-in-programmable-cryptography.md @@ -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" --- diff --git a/articles/certificate-transparency-using-newtonpir.md b/articles/certificate-transparency-using-newtonpir.md index a318600..07c67a4 100644 --- a/articles/certificate-transparency-using-newtonpir.md +++ b/articles/certificate-transparency-using-newtonpir.md @@ -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" --- diff --git a/articles/circom-mpc-tldr-and-retrospective.md b/articles/circom-mpc-tldr-and-retrospective.md index 7c46cd5..ce45aad 100644 --- a/articles/circom-mpc-tldr-and-retrospective.md +++ b/articles/circom-mpc-tldr-and-retrospective.md @@ -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" --- diff --git a/articles/code-optimizations-in-the-landscape-of-post-quantum-cryptography.md b/articles/code-optimizations-in-the-landscape-of-post-quantum-cryptography.md index 338e06b..8295581 100644 --- a/articles/code-optimizations-in-the-landscape-of-post-quantum-cryptography.md +++ b/articles/code-optimizations-in-the-landscape-of-post-quantum-cryptography.md @@ -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" --- diff --git a/articles/continuing-the-zero-gravity-journey.md b/articles/continuing-the-zero-gravity-journey.md index 4530004..3a73a97 100644 --- a/articles/continuing-the-zero-gravity-journey.md +++ b/articles/continuing-the-zero-gravity-journey.md @@ -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" --- diff --git a/articles/from-cex-to-ccex-with-summa-part-1.md b/articles/from-cex-to-ccex-with-summa-part-1.md index d449ca8..6bd4b63 100644 --- a/articles/from-cex-to-ccex-with-summa-part-1.md +++ b/articles/from-cex-to-ccex-with-summa-part-1.md @@ -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" diff --git a/articles/from-cex-to-ccex-with-summa-part-2.md b/articles/from-cex-to-ccex-with-summa-part-2.md index 3c47f91..8f82a90 100644 --- a/articles/from-cex-to-ccex-with-summa-part-2.md +++ b/articles/from-cex-to-ccex-with-summa-part-2.md @@ -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" diff --git a/articles/intmax-a-scalable-payment-l2-from-plasma-and-validity-proofs.md b/articles/intmax-a-scalable-payment-l2-from-plasma-and-validity-proofs.md index 1a3b1c3..9c13e98 100644 --- a/articles/intmax-a-scalable-payment-l2-from-plasma-and-validity-proofs.md +++ b/articles/intmax-a-scalable-payment-l2-from-plasma-and-validity-proofs.md @@ -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" diff --git a/articles/lattice-based-proof-systems.md b/articles/lattice-based-proof-systems.md index c6be9b6..d39562c 100644 --- a/articles/lattice-based-proof-systems.md +++ b/articles/lattice-based-proof-systems.md @@ -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$. -![](Lattice-Based%20Proof%20Systems%20%E2%80%94%20Privacy%20and%20Scaling%20Explorations/m41XdEx2qfG3QUbA-5R15.png) +![](/articles/lattice-based-proof-systems/image-1.png) 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$. -![](Lattice-Based%20Proof%20Systems%20%E2%80%94%20Privacy%20and%20Scaling%20Explorations/EmM5uUyedN5ggMAMnNZst.png) +![](/articles/lattice-based-proof-systems/image-2.png) 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? -![](Lattice-Based%20Proof%20Systems%20%E2%80%94%20Privacy%20and%20Scaling%20Explorations/KfuE6fUruAV0iHaf9rGwj.png) +![](/articles/lattice-based-proof-systems/image-3.png) 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 -![](Lattice-Based%20Proof%20Systems%20%E2%80%94%20Privacy%20and%20Scaling%20Explorations/SrRkMdowTCtUl9M6JhZp4.png) +![](/articles/lattice-based-proof-systems/image-4.png) 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. diff --git a/articles/mopro-comparison-of-circom-provers.md b/articles/mopro-comparison-of-circom-provers.md index 444e081..3e4dfca 100644 --- a/articles/mopro-comparison-of-circom-provers.md +++ b/articles/mopro-comparison-of-circom-provers.md @@ -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" diff --git a/articles/retrospective-summa.md b/articles/retrospective-summa.md index 2f89d05..9266e95 100644 --- a/articles/retrospective-summa.md +++ b/articles/retrospective-summa.md @@ -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" diff --git a/articles/secure-multi-party-computation.md b/articles/secure-multi-party-computation.md index 7ef29b3..ae6f7a1 100644 --- a/articles/secure-multi-party-computation.md +++ b/articles/secure-multi-party-computation.md @@ -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" diff --git a/articles/self-sovereign-identity-programmable-cryptography-challenges-ahead.md b/articles/self-sovereign-identity-programmable-cryptography-challenges-ahead.md index 78fed03..2884a2b 100644 --- a/articles/self-sovereign-identity-programmable-cryptography-challenges-ahead.md +++ b/articles/self-sovereign-identity-programmable-cryptography-challenges-ahead.md @@ -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" diff --git a/articles/the-next-chapter-for-zkevm-community-edition.md b/articles/the-next-chapter-for-zkevm-community-edition.md index 57db68d..54c30e8 100644 --- a/articles/the-next-chapter-for-zkevm-community-edition.md +++ b/articles/the-next-chapter-for-zkevm-community-edition.md @@ -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" diff --git a/articles/the-zk-ecdsa-landscape.md b/articles/the-zk-ecdsa-landscape.md index 3d5edc0..12235b7 100644 --- a/articles/the-zk-ecdsa-landscape.md +++ b/articles/the-zk-ecdsa-landscape.md @@ -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" diff --git a/articles/tlsnotary-updates.md b/articles/tlsnotary-updates.md index 5993b05..6188472 100644 --- a/articles/tlsnotary-updates.md +++ b/articles/tlsnotary-updates.md @@ -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" diff --git a/articles/unirep-ceremony-an-invitation-to-the-celestial-call-and-unirep-v2.md b/articles/unirep-ceremony-an-invitation-to-the-celestial-call-and-unirep-v2.md index 78850d2..d93c23d 100644 --- a/articles/unirep-ceremony-an-invitation-to-the-celestial-call-and-unirep-v2.md +++ b/articles/unirep-ceremony-an-invitation-to-the-celestial-call-and-unirep-v2.md @@ -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" diff --git a/articles/unleashing-potential-introducing-the-pse-core-program.md b/articles/unleashing-potential-introducing-the-pse-core-program.md index e0d9554..7596bf9 100644 --- a/articles/unleashing-potential-introducing-the-pse-core-program.md +++ b/articles/unleashing-potential-introducing-the-pse-core-program.md @@ -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" diff --git a/articles/web2-nullifiers-using-voprf.md b/articles/web2-nullifiers-using-voprf.md index b7084d6..78922c7 100644 --- a/articles/web2-nullifiers-using-voprf.md +++ b/articles/web2-nullifiers-using-voprf.md @@ -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" diff --git a/articles/why-we-cant-build-perfectly-secure-multi-party-applications-yet.md b/articles/why-we-cant-build-perfectly-secure-multi-party-applications-yet.md index d9c1e78..00b45de 100644 --- a/articles/why-we-cant-build-perfectly-secure-multi-party-applications-yet.md +++ b/articles/why-we-cant-build-perfectly-secure-multi-party-applications-yet.md @@ -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" diff --git a/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1.md b/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1.md index a9b28ba..f70e51b 100644 --- a/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1.md +++ b/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-1.md @@ -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" diff --git a/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-2.md b/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-2.md index 551745c..ef8e753 100644 --- a/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-2.md +++ b/articles/zero-to-start-applied-fully-homomorphic-encryption-fhe-part-2.md @@ -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" diff --git a/articles/zkevm-community-edition-part-1-introduction.md b/articles/zkevm-community-edition-part-1-introduction.md index ca4c2b3..c07ea54 100644 --- a/articles/zkevm-community-edition-part-1-introduction.md +++ b/articles/zkevm-community-edition-part-1-introduction.md @@ -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" diff --git a/articles/zkevm-community-edition-part-2-components.md b/articles/zkevm-community-edition-part-2-components.md index 947707a..c1397ea 100644 --- a/articles/zkevm-community-edition-part-2-components.md +++ b/articles/zkevm-community-edition-part-2-components.md @@ -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" diff --git a/articles/zkevm-community-edition-part-3-logic-and-structure.md b/articles/zkevm-community-edition-part-3-logic-and-structure.md index d49d1bd..80a77e2 100644 --- a/articles/zkevm-community-edition-part-3-logic-and-structure.md +++ b/articles/zkevm-community-edition-part-3-logic-and-structure.md @@ -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" diff --git a/articles/zkml-bridging-aiml-and-web3-with-zero-knowledge-proofs.md b/articles/zkml-bridging-aiml-and-web3-with-zero-knowledge-proofs.md index f53a0c3..9b2e855 100644 --- a/articles/zkml-bridging-aiml-and-web3-with-zero-knowledge-proofs.md +++ b/articles/zkml-bridging-aiml-and-web3-with-zero-knowledge-proofs.md @@ -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" diff --git a/components/blog/blog-article-card.tsx b/components/blog/blog-article-card.tsx index 08126cb..1ad994a 100644 --- a/components/blog/blog-article-card.tsx +++ b/components/blog/blog-article-card.tsx @@ -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 (
- {!!image && ( - {title} - )} + {title}
-
- Privacy and Scaling Explorations - - Privacy and Scaling Explorations - -

{title}

diff --git a/components/blog/blog-articles.tsx b/components/blog/blog-articles.tsx index 76b4ecc..4b11df5 100644 --- a/components/blog/blog-articles.tsx +++ b/components/blog/blog-articles.tsx @@ -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 (
diff --git a/components/blog/blog-recent-articles.tsx b/components/blog/blog-recent-articles.tsx index 31ab85b..dc47ad9 100644 --- a/components/blog/blog-recent-articles.tsx +++ b/components/blog/blog-recent-articles.tsx @@ -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")} -
-
+
+
{lastArticle.title}
-
+
{otherArticles.map((article, index) => ( ))} - +