פרויקטי Rollup עומדים בפני דילמה: אחסון כל הנתונים ב-Ethereum הוא יקר, בעוד שפתרונות DA מחוץ לשרשרת דורשים אמון. EigenDA פותר זאת באמצעות הוכחות מתמטיות לזמינות והבטחות כלכליות מ-EigenLayer. בהשוואה ל-blobs של Ethereum, EigenDA מספק תפוקה גבוהה פי 10 (10+ MB/s) בשבריר מהעלות. חיסכון בעמלות יכול להגיע ל-90%—באחד הפרויקטים שלנו, החיסכון עלה על עשרות אלפי דולרים בחודש בתפוקה של 5 MB/s.
הצוות שלנו ביצע 10+ אינטגרציות מוצלחות של שכבת DA עבור rollups ב-Ethereum, Arbitrum ו-OP Stack. EigenDA משתמש ב-restaking של EigenLayer לאבטחה.
כיצד EigenDA פותר את בעיית זמינות הנתונים
EigenDA משתמש בקוד מחיקה (erasure coding) ובדגימת זמינות נתונים (DAS). נתונים בגודל D מקודדים ל-M חלקים (M > D) באמצעות קוד Reed-Solomon. כל D מתוך M חלקים מספיקים לשחזור הנתונים המקוריים. גם אם 50% מהמפעילים אינם זמינים, הנתונים עדיין ניתנים לשחזור.
דגימת זמינות נתונים (DAS) מאפשרת ללקוח קל לאמת זמינות נתונים על ידי הורדת תת-קבוצה אקראית קטנה בלבד של חלקים. אם 30 חלקים אקראיים מורדים וכולם זמינים, קיימת הסתברות של >99.9% שכל הנתונים זמינים (בהנחה של קידוד מחיקה של 50%).
Blob (данные rollup) ↓ Reed-Solomon encoding Chunks [c0, c1, c2, ..., cn] ↓ KZG polynomial commitments Commitment (короткое доказательство данных) ↓ Dispersal к операторам Операторы хранят chunks + отвечают на sampling запросы ארכיטקטורת EigenDA
EigenDA מורכב משלושה רכיבים:
- מפעילים (Operators) — בעלי צמתים שביצעו restaking ל-ETH דרך EigenLayer ומספקים אחסון ורוחב פס. למעלה מ-100 מפעילים כבר נמצאים ברשת.
- מפזר (Disperser) — שירות (כיום מרוכז על ידי EigenLabs, עם מפת דרכים לביזור) שמקבל נתונים מה-rollup, מפצל אותם לחלקים באמצעות קוד מחיקה, מפיץ למפעילים ואוסף חתימות.
- מאמת על-השרשרת (On-chain Verifier) — חוזה חכם ב-Ethereum שמאמת שקוורום של מפעילים חתם על אישור קבלת נתונים.
השוואה עם חלופות
| פרמטר | Ethereum blobs (EIP-4844) | EigenDA | Celestia | Avail |
|---|---|---|---|---|
| תפוקה | ~0.75 MB/בלוק (6 blobs) | 10+ MB/s (ניתן להרחבה) | ~1-2 MB/בלוק | ~2 MB/בלוק |
| עלות | תלויה בשוק ה-blobs | זולה משמעותית | זולה יותר מ-ETH blobs | זולה יותר מ-ETH blobs |
| מודל אמון | קבוצת מאמתי Ethereum | מבצעי restaking ב-EigenLayer | מאמתי Celestia | מאמתי Avail |
| חביון | ~12 שניות (בלוק אחד) | ~10-12 שניות | ~15 שניות | ~20 שניות |
| בשלות | ייצור | Mainnet | ייצור | בטא |
| אינטגרציית EVM | מובנית | דרך proxy/מתאם | דרך מתאמים | דרך מתאמים |
כיצד לבצע אינטגרציית EigenDA
- ניתוח ארכיטקטורה — קביעת סוג האינטגרציה: proxy מוכן (OP Stack) או מותאם אישית.
- פריסת תשתית — הקמת EigenDA Disperser, חוזים, וחיבור ל-EigenLayer. בדיקות על Holesky.
- אינטגרציית פיזור — הטמעת שליחת נתונים דרך API של EigenDA עם גיבוי ל-calldata של Ethereum. הטמעת אימות על-השרשרת.
- בדיקות עומס — אימות תפוקה, חביון וסבילות לתקלות. שימוש ב-Tenderly לסימולציה.
- ביקורת ופריסה — ביקורת חוזים (Slither, Mythril) והעברת תצורה ל-mainnet. הקמת ניטור.
דוגמת קוד לפיזור ואימות
ה-sequencer של ה-rollup שולח נתונים דרך ה-API של EigenDA Disperser:
func disperseBlob(data []byte) (*disperser.BlobInfo, error) { conn, err := grpc.Dial("disperser-holesky.eigenda.xyz:443", grpc.WithTransportCredentials(...)) if err != nil { return nil, err } defer conn.Close() client := disperser.NewDisperserClient(conn) reply, err := client.DisperseBlob(context.Background(), &disperser.DisperseBlobRequest{ Data: data, CustomQuorumNumbers: []uint32{}, AccountId: accountId, }) if err != nil { return nil, err } for { statusReply, _ := client.GetBlobStatus(context.Background(), &disperser.BlobStatusRequest{ RequestId: reply.RequestId, }) if statusReply.Status == disperser.BlobStatus_CONFIRMED { return statusReply.Info, nil } time.Sleep(2 * time.Second) } } func postBatchWithFallback(batchData []byte) error { blobInfo, err := disperseToEigenDA(batchData) if err == nil { return postToEthereumWithEigenDARef(blobInfo) } log.Warn("EigenDA dispersal failed, falling back to calldata", "err", err) return postToEthereumCalldata(batchData) } לאחר אישור, ה-Blob (данные rollup) ↓ Reed-Solomon encoding Chunks [c0, c1, c2, ..., cn] ↓ KZG polynomial commitments Commitment (короткое доказательство данных) ↓ Dispersal к операторам Операторы хранят chunks + отвечают на sampling запросы המסודר (serialized) מועלה ל-Ethereum ב-calldata.
אימות על-השרשרת
interface IEigenDAServiceManager { function confirmBatch(BatchHeader calldata batchHeader, OperatorStakesAndSignature calldata operatorStakesAndSignature) external; function verifyBlob(BlobHeader calldata blobHeader, BlobVerificationProof calldata blobVerificationProof) external view; } contract RollupWithEigenDA { IEigenDAServiceManager public eigenDA; function submitBatch(bytes calldata batchData, BlobHeader calldata eigenDABlobHeader, BlobVerificationProof calldata eigenDAProof) external { eigenDA.verifyBlob(eigenDABlobHeader, eigenDAProof); bytes32 batchRoot = keccak256(batchData); _submitBatchRoot(batchRoot); } } אינטגרציה עם OP Stack דרך EigenDA Proxy
עבור rollups המבוססים על OP Stack, קיים EigenDA Proxy מוכן—שירות צדדי (sidecar) המיישם את ממשק ה-alt-DA של OP Stack:
eigenda-proxy: image: ghcr.io/layr-labs/eigenda-proxy:latest environment: - EIGENDA_PROXY_ADDR=0.0.0.0 - EIGENDA_PROXY_PORT=4242 - EIGENDA_PROXY_EIGENDA_DISPERSER_RPC=disperser-holesky.eigenda.xyz:443 - EIGENDA_PROXY_G1_PATH=/data/g1.point - EIGENDA_PROXY_G2_POWER_OF_TAU_PATH=/data/g2.point.powerOf2 volumes: - ./data:/data ה-batch poster של OP Stack מוגדר עם func disperseBlob(data []byte) (*disperser.BlobInfo, error) { conn, err := grpc.Dial("disperser-holesky.eigenda.xyz:443", grpc.WithTransportCredentials(...)) if err != nil { return nil, err } defer conn.Close() client := disperser.NewDisperserClient(conn) reply, err := client.DisperseBlob(context.Background(), &disperser.DisperseBlobRequest{ Data: data, CustomQuorumNumbers: []uint32{}, AccountId: accountId, }) if err != nil { return nil, err } for { statusReply, _ := client.GetBlobStatus(context.Background(), &disperser.BlobStatusRequest{ RequestId: reply.RequestId, }) if statusReply.Status == disperser.BlobStatus_CONFIRMED { return statusReply.Info, nil } time.Sleep(2 * time.Second) } } func postBatchWithFallback(batchData []byte) error { blobInfo, err := disperseToEigenDA(batchData) if err == nil { return postToEthereumWithEigenDARef(blobInfo) } log.Warn("EigenDA dispersal failed, falling back to calldata", "err", err) return postToEthereumCalldata(batchData) } ומצביע על ה-proxy. כל השאר שקוף.
מה כלול באינטגרציה
| שלב | מה אנחנו עושים | תוצאה |
|---|---|---|
| ניתוח | לימוד ארכיטקטורת ה-rollup שלך, בחירת סכמת אינטגרציה (proxy / מותאם אישית) | תוכנית טכנית |
| הקמת מופע EigenDA | פריסת חוזים, הגדרת קוורום, חיבור ל-EigenLayer | סביבת testnet עובדת |
| אינטגרציית תוכנה | הטמעת לוגיקת פיזור, התאמת batch poster | קוד שנבדק על Holesky |
| בדיקות וביקורת | בדיקות עומס, ביקורת חוזים (Slither, Mythril) | דוח ביקורת |
| פריסה ל-Mainnet | העברת תצורה, ניטור, תיעוד | מערכת ייצור + runbook |
לוחות זמנים ועלות
- אינטגרציית proxy (OP Stack): 2 עד 3 שבועות להקמה, בדיקות והשקה ב-testnet.
- אינטגרציה מותאמת אישית: 4 עד 8 שבועות, כולל ביקורת.
- פיתוח שכבת DA מותאמת אישית על EigenDA: 3 עד 4 חודשים.
העלות מחושבת באופן פרטני. קבלו ייעוץ מהנדס—נעריך את הפרויקט שלכם בחינם. צרו קשר עם המומחים שלנו לדיון מפורט.
הצוות שלנו ביצע 10+ אינטגרציות של שכבת DA, משתמש בכלים תעשייתיים (Foundry, Slither, Tenderly), ומבטיח תצורה נכונה עם תמיכה שוטפת. בקשו ייעוץ בנושא אינטגרציית EigenDA.







