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

אחסון כל נתוני ה-rollup ב-Ethereum הוא יקר, בעוד שחלופות off-chain דורשות אמון במתווכים. אנחנו מספקים אינטגרציית turnkey עם EigenDA, שכבת זמינות נתונים מבוזרת המציעה תפוקה גבוהה ועלות נמוכה, עם תמיכה מתמשכת לפתרונות אמינים וניתנים להרחבה.

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

שאלות נפוצות

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

  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1365
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1330
  • עיצוב לוגו לחברת B2B Advance
    עיצוב לוגו לחברת B2B Advance
    776
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1077
  • פיתוח לוגו חברת AIDER
    פיתוח לוגו חברת AIDER
    1022
  • פיתוח CRM עבור Chasseurs
    פיתוח CRM עבור Chasseurs
    1113

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