אנו מפתחים יישומי ZK-SNARK מקצה לקצה: מתכנון מעגל ועד ביקורת ופריסה. ZK-SNARK (Zero-Knowledge Succinct Non-interactive ARgument of Knowledge) הוא הוכחה שאתה יודע סוד מבלי לחשוף אותו. זה נשמע מופשט עד שאתה נתקל בבעיה קונקרטית: הוכחה שמשתמש מעל גיל 18 מבלי לשתף את תאריך הלידה שלו, אישור יתרת ארנק מבלי לחשוף את הכתובת, או אימות ביצוע תוכנית מבלי להריץ אותה מחדש.
Tornado Cash (לפני הסנקציות) העביר כ-7 מיליארד דולר באמצעות ZK-SNARK כדי להוכיח זכויות משיכה מבלי לקשר לכתובות הפקדה (מקור: Tornado Cash whitepaper). Zcash מגן על עסקאות עם אותה טכנולוגיה. Polygon zkEVM מוכיח את נכונותה של אצווה של אלפי עסקאות באמצעות הוכחה קומפקטית אחת. למהנדסים שלנו יש ניסיון מעשי בפריסת ZK בפרויקטים אמיתיים, מ-DeFi ועד פתרונות זהות.
לצוות שלנו יש ניסיון של 5+ שנים בהוכחות אפס ידע וסיפקנו 15+ פרויקטים בייצור. יש לנו אחוזי הצלחה של 100% בביקורות ופריסה.
איך ZK-SNARKs עובדים: מספיק עמוק כדי לבנות
מבעיה למעגל
כל משימה חישובית שניתן לבטא כמערכת של אילוצים אריתמטיים (מעגל אריתמטי) ניתנת להוכחה באמצעות ZK-SNARK. מעגל אינו תוכנית רגילה; הוא מתאר חישוב כמערכת משוואות מעל שדה סופי.
שקול משימה פשוטה: הוכח שאני יודע x כך ש-x² + x + 5 = y, כאשר y הוא ציבורי. המעגל:
signal input x; signal output y; signal x_squared; x_squared <== x * x; y <== x_squared + x + 5; זוהי Circom, השפה העיקרית לתיאור מעגלי ZK (ראה תיעוד רשמי). המהדר הופך את המעגל לאילוצי R1CS, ולאחר מכן ל-QAP, הבסיס המתמטי עבור SNARKs.
למה Groth16 עדיין הוא התקן
Groth16 נותן את ההוכחה הקטנה ביותר (~200 בתים) ואת עלות האימות הנמוכה ביותר (~250k גז). החיסרון: כל מעגל דורש טקס trusted setup נפרד. אם המעגל משתנה, יש צורך בטקס חדש. בשימוש ב-Tornado Cash, Zcash וברוב יישומי ZK בייצור.
איך לבחור בין Groth16, PLONK ו-FFLONK
בחירת מערכת ההוכחה קובעת את כל שאר הפרמטרים: גודל ההוכחה, זמן היצירה, גודל ה-trusted setup ועלות האימות (ולכן עלות הגז).
| מערכת | גודל הוכחה | גז אימות | Trusted setup | זמן Prover |
|---|---|---|---|---|
| Groth16 | ~200 בתים | ~250k גז | לכל מעגל | מהיר |
| PLONK | ~800 בתים | ~450k גז | אוניברסלי | איטי יותר |
| FFLONK | ~800 בתים | ~200k גז | אוניברסלי | איטי יותר |
| STARKs | >40 KB | >1M גז | אין | מהיר |
Groth16 — ההוכחה הקטנה ביותר ועלות האימות הנמוכה ביותר. כל מעגל דורש טקס trusted setup נפרד; אם המעגל משתנה, יש צורך בטקס חדש. בשימוש על ידי: Tornado Cash, Zcash, רוב יישומי ZK בייצור.
PLONK — trusted setup אוניברסלי (Powers of Tau) שעובד עבור כל מעגל עד לגודל מסוים. ניתן לשנות את המעגל ללא טקס חדש. ההוכחה גדולה יותר, אך מקובלת עבור רוב היישומים. בשימוש על ידי: zkSync Era, Aztec Protocol.
FFLONK — גרסה אופטימלית של PLONK עם עלות אימות נמוכה יותר. בשימוש ב-Polygon zkEVM.
אנו ממליצים על Groth16 עבור יישומים בייצור עם מעגל קבוע ונפח עסקאות גבוה (עלות אימות מינימלית). PLONK עבור אבות טיפוס ויישומים שבהם המעגל עשוי להשתנות.
Trusted Setup ולמה זה חשוב
Trusted setup הוא טקס קריפטוגרפי שמייצר פרמטרים להוכחות. אם מישהו שומר על ה"פסולת רעילה" (ערכי ביניים), הם יכולים לזייף הוכחות. זה לא איום תיאורטי: אם ה-setup נפגע, כל מערכת האמון קורסת.
Groth16 דורש טקס דו-שלבי:
- Powers of Tau — חלק אוניברסלי, בלתי תלוי במעגל. קיימים trusted setups ציבוריים מ-Ethereum Foundation (Hermez 1, 2) עם אלפי משתתפים. אנו משתמשים באלה; איננו מייצרים משלנו.
- שלב 2 — חלק ספציפי למעגל. עבור מערכות ייצור, אנו מארגנים טקס עם מספר משתתפים באמצעות snarkjs.
מחסנית וכלים
- Circom 2 — שפה לכתיבת מעגלים. מהדר ב-Rust, מהיר משמעותית מהגרסה הראשונה. תומך בתבניות לשימוש חוזר במעגלים.
- snarkjs — ספריית JavaScript ליצירת הוכחות ואימות, trusted setup וייצוא verifiers ל-Solidity.
- circomlibjs — ספריית מעגלים סטנדרטיים: פונקציות גיבוב (Poseidon, MiMC, SHA256 בתוך מעגל), חתימות (EdDSA, ECDSA), עצי Merkle.
- Noir (Aztec) — שפה חלופית עם רמת הפשטה גבוהה יותר, מתקמפלת ל-PLONK. קלה יותר למפתחים המכירים תחביר Rust.
- SnarkVM / Leo (Aleo) — עבור בלוקצ'יין Aleo אם המשימה דורשת L1 עם פרטיות ראשונה.
פרויקט טיפוסי: אימות גיל עם ZK
בעיה: משתמש מוכיח שהוא מעל גיל 18 באמצעות נתונים מאישור מאומת (למשל, מספק KYC). הספק חתם על תאריך הלידה עם המפתח שלו. המשתמש אינו חושף את תאריך הלידה, רק מוכיח את העובדה.
מעגל (מפושט):
template AgeVerification(merkleDepth) {
// Публичные входы
signal input currentDate; // текущая дата (публичная)
signal input issuerPubKeyHash; // хэш публичного ключа провайдера (публичная)
// Приватные входы (witness)
signal input birthDate; // дата рождения (приватная)
signal input signature[2]; // подпись провайдера (приватная)
signal input issuerPubKey[2]; // публичный ключ провайдера (приватная)
// Проверяем подпись провайдера
component sigVerifier = EdDSAVerifier();
sigVerifier.msg <== birthDate;
sigVerifier.pubKey <== issuerPubKey;
sigVerifier.sig <== signature;
// Проверяем, что pubKey соответствует публичному хэшу
component hasher = Poseidon(2);
hasher.inputs <== issuerPubKey;
issuerPubKeyHash === hasher.out;
// Проверяем возраст
signal age;
age <== currentDate - birthDate;
component ageCheck = GreaterThan(32);
ageCheck.in[0] <== age;
ageCheck.in[1] <== 18 * 365; // 18 лет в днях
ageCheck.out === 1;
}ה-Solidity verifier נוצר אוטומטית באמצעות snarkjs וכולל קריאות precompile לצימוד עקומות אליפטיות (EIP-197). עלות האימות היא ~250k גז עבור Groth16.
ביצועים ומגבלות
זמן יצירת ההוכחה תלוי בגודל המעגל (מספר האילוצים). הערכות עבור Groth16 על חומרה מודרנית:
| אילוצים במעגל | זמן Prover (CPU) | זמן Prover (GPU) |
|---|---|---|
| 100k | ~5 שניות | ~0.5 שניות |
| 1M | ~60 שניות | ~5 שניות |
| 10M | ~15 דקות | ~60 שניות |
עבור יישומי web, הוכחה בדפדפן אפשרית עבור מעגלים עד 500k אילוצים (באמצעות קומפילציית WASM). מעגלים כבדים יותר דורשים prover בצד השרת או שירות הוכחה ייעודי (Sindri, Succinct).
גיבוב Poseidon יעיל הרבה יותר בתוך מעגל מאשר SHA256: Poseidon ~250 אילוצים לגיבוב, SHA256 ~27,000. לכן, כל הפרוטוקולים הידידותיים ל-ZK משתמשים ב-Poseidon.
מה כלול בעבודה שלנו
- תכנון מעגל אריתמטי המותאם למקרה השימוש שלך
- פיתוח מעגל ב-Circom/Noir עם בדיקות יחידה מקיפות
- Trusted setup (בדיקות לפיתוח, ייצור רב-משתתפים ל-mainnet)
- יצירת Solidity verifier תואם Groth16 או PLONK
- אינטגרציה של ה-verifier לתוך החוזה החכם שלך ו-SDK ב-TypeScript
- ביקורת מעגל המכסה underconstraining, overconstraining, signal aliasing
- תיעוד והדרכה לצוות שלך, כולל מדריכים כתובים ודוגמאות קוד
- תמיכה לאחר פריסה לחודש הראשון
המחירים מתחילים מ-$15,000 עבור מעגל פשוט מבוסס PLONK ועד $80,000+ עבור zkApps מורכבים עם פרימיטיבים מותאמים אישית וביקורת מלאה.
מה אנו מספקים
- תכנון מעגל אריתמטי למשימה הספציפית שלך
- פיתוח מעגל ב-Circom/Noir עם בדיקות יחידה
- Trusted setup (בדיקות/ייצור)
- יצירת Solidity verifier (Groth16/PLONK)
- אינטגרציה של ה-verifier לתוך החוזה החכם שלך ו-SDK ב-TypeScript
- ביקורת מעגל (underconstraining, overconstraining, signal aliasing)
- תיעוד והדרכה לצוות שלך
תהליך הפיתוח
-
מחקר ותכנון מעגל (1–2 שבועות). אנו מתרגמים את הבעיה העסקית לאילוצים אריתמטיים. מעריכים את גודל המעגל וזמן ההוכחה. בוחרים את מערכת ההוכחה. זהו השלב הקריטי ביותר—שגיאת תכנון עשויה לדרוש עיצוב מחדש מלא.
-
פיתוח מעגל ב-Circom (1–2 שבועות). כתיבת המעגל, כיסוי בבדיקות יחידה באמצעות Jest + circomlibjs. אימות נכונות מתמטית של האילוצים בנפרד.
-
Trusted Setup. עבור אבות טיפוס, השתמשו באנטרופיה לבדיקות. עבור ייצור, ארגנו טקס עם מספר משתתפים.
-
פיתוח ואינטגרציה של verifier (שבוע). יצירת Solidity verifier באמצעות snarkjs. אינטגרציה לתוך החוזה החכם הראשי. פיתוח SDK ב-TypeScript עבור הפרונטאנד.
-
ביקורת מעגל. למעגלי ZK יש נקודות תורפה ספציפיות: underconstraining, overconstraining, signal aliasing. זהו סוג ביקורת נפרד הדורש התמחות. אנו מבצעים ביקורות באמצעות Circomspect ו-Ecne.
לוחות הזמנים נעים בין שבוע (מעגל פשוט, PLONK) ל-3 חודשים (zkApp מורכב עם פרימיטיבים קריפטוגרפיים מותאמים אישית). המחיר נקבע לאחר ניתוח דרישות מפורט. צרו קשר לייעוץ והערכת פרויקט מדויקת.
קבלו ייעוץ—אנו נעריך את הפרויקט שלכם ונציע את הפתרון האופטימלי.







