שילוב EigenDA: זמינות נתונים מבוזרת עבור Rollups

פרויקטים של Rollup עומדים בפני דילמה: אחסון כל הנתונים על Ethereum הוא יקר, בעוד שפתרונות DA מחוץ לשרשרת דורשים אמון. EigenDA פותר זאת עם הוכחות מתמטיות לזמינות וערבויות כלכליות מ-EigenLayer. בהשוואה ל-Ethereum blobs, EigenDA מספק תפוקה גבוהה פי 10 (10+ MB/s) ו

שירותי פיתוח בלוקצ'יין

שאלות נפוצות

העבודות האחרונות

  • image_website-b2b-advance_0.webp
    פיתוח אתר חברה B2B ADVANCE
    1450
  • image_web-applications_feedme_466_0.webp
    פיתוח אפליקציית ווב עבור FEEDME
    1308
  • image_websites_belfingroup_462_0.webp
    פיתוח אתר עבור BELFINGROUP
    1003
  • image_ecommerce_furnoro_435_0.webp
    פיתוח חנות מקוונת לחברת FURNORO
    1269
  • image_logo-advance_0.webp
    עיצוב לוגו לחברת B2B Advance
    717
  • image_crm_enviok_479_0.webp
    פיתוח אפליקציית ווב עבור Enviok
    1008

פרויקטי 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

  1. ניתוח ארכיטקטורה — קביעת סוג האינטגרציה: proxy מוכן (OP Stack) או מותאם אישית.
  2. פריסת תשתית — הקמת EigenDA Disperser, חוזים, וחיבור ל-EigenLayer. בדיקות על Holesky.
  3. אינטגרציית פיזור — הטמעת שליחת נתונים דרך API של EigenDA עם גיבוי ל-calldata של Ethereum. הטמעת אימות על-השרשרת.
  4. בדיקות עומס — אימות תפוקה, חביון וסבילות לתקלות. שימוש ב-Tenderly לסימולציה.
  5. ביקורת ופריסה — ביקורת חוזים (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.

תיעוד וקוד מקור ה-whitepaper של EigenDA ומאגר GitHub: github.com/Layr-Labs/eigenda