Інтеграція з EigenDA (Data Availability)

Проєктуємо та розробляємо блокчейн-рішення повного циклу: від архітектури смарт-контрактів до запуску DeFi-протоколів, NFT-маркетплейсів та криптобірж. Аудит безпеки, токеноміка, інтеграція з наявною інфраструктурою.
Показано 1 з 1Усі 1306 послуг
Інтеграція з EigenDA (Data Availability)
Складний
~3-5 днів
Часті запитання

Напрямки блокчейн-розробки

Етапи блокчейн-розробки

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1285
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1198
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    902
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    587
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Інтеграція з EigenDA (Data Availability)

Data Availability — це не зберігання даних. Це гарантія того, що дані були опубліковані і доступні для завантаження в конкретний момент часу. Для rollup це фундаментальна властивість: fraud proofs або validity proofs беззмістовні, якщо хто-небудь не може отримати дані транзакцій для верифікації стану.

Ethereum Danksharding (EIP-4844) вирішив цю проблему для Ethereum-based rollups через blobs. EigenDA — альтернатива, побудована на EigenLayer restaking, яка пропонує значно вищу пропускну здатність і нижчу вартість ціною іншої моделі довіри.

Як працює EigenDA: технічні деталі

Архітектура системи

EigenDA складається з трьох компонентів:

Оператори — власники нод, які restaked ETH через EigenLayer і надають зберігання та пропускну здатність. Вони приймають фрагменти даних, зберігають їх і відповідають на запити доступності.

Disperser — сервіс (наразі централізований у EigenLabs, roadmap на децентралізацію), який приймає дані від rollup, ділить їх на фрагменти через erasure coding, розподіляє між операторами, збирає підписи.

On-chain Верифікатор — смарт-контракт на Ethereum, який верифікує, що quorum операторів підписав attestation про отримання даних.

Erasure Coding і Data Availability Sampling

EigenDA використовує Reed-Solomon erasure coding: дані розміром D кодуються в M фрагментів (M > D), при цьому будь-які D з M фрагментів достатньо для відновлення оригіналу. Типові параметри: якщо 50% операторів недоступні — дані все одно можна відновити.

Data Availability Sampling (DAS) — техніка, при якій light client може верифікувати доступність даних, завантажуючи лише невелику випадкову підмножину фрагментів. Математично: якщо завантажити 30 випадкових фрагментів і всі доступні, з ймовірністю >99.9% всі дані доступні (при 50% erasure coding).

Blob (дані rollup)
  ↓ Reed-Solomon encoding
Фрагменти [c0, c1, c2, ..., cn]
  ↓ KZG polynomial commitments
Commitment (коротке доказ даних)
  ↓ Dispersal до операторів
Оператори зберігають фрагменти + відповідають на sampling запити

BlobHeader і Certificate

При публікації даних до EigenDA disperser повертає BlobHeader і BlobCertificate:

type BlobHeader struct {
    Commitment       G1Point        // KZG commitment до даних
    DataLength       uint32         // розмір у символах
    BlobQuorumParams []BlobQuorumParam
}

type BlobQuorumParam struct {
    QuorumNumber                 uint8
    AdversaryThresholdPercentage uint8  // макс злонамісних операторів
    ConfirmationThresholdPercentage uint8 // мін підтверджень
    ChunkLength                 uint32
}

type BlobCertificate struct {
    BlobHeader   BlobHeader
    BlobVerificationProof BlobVerificationProof
}

Certificate зберігається rollup в calldata або blob транзакції на Ethereum — це дозволяє верифікатору перевірити, що дані були дійсно опубліковані в EigenDA.

Інтеграція rollup з EigenDA

Dispersal: публікація даних

Rollup sequencer (або batch poster) відправляє дані через EigenDA Disperser API:

package main

import (
    "context"
    "github.com/Layr-Labs/eigenda/api/grpc/disperser"
    "google.golang.org/grpc"
)

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{}, // використовувати default quorum
        AccountId: accountId,            // для rate limiting
    })
    if err != nil {
        return nil, err
    }
    
    // Polling до finalization
    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)
    }
}

Після підтвердження — serialized BlobInfo (включаючи BlobHeader і BlobVerificationProof) постять в Ethereum в calldata замість або додатково до самих даних.

On-chain верифікація

Для rollups з fraud proofs потрібно верифікувати on-chain, що дані були дійсно доступні:

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
        eigenDA.verifyBlob(eigenDABlobHeader, eigenDAProof);
        
        // Продовжуємо з звичайною логікою rollup
        bytes32 batchRoot = keccak256(batchData);
        _submitBatchRoot(batchRoot);
    }
}

Інтеграція OP Stack через EigenDA Proxy

Для OP Stack-based rollups існує готовий EigenDA Proxy sidecar сервіс, який реалізує OP Stack alt-DA інтерфейс і трансльрує запити в EigenDA:

# docker-compose.yml для EigenDA Proxy
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

OP Stack batch poster конфігурується з --altda.da-service=true і вказує на proxy. Все решта прозоро — proxy сам обробляє dispersal, polling, збереження certificate.

Подібний паттерн для Arbitrum Orbit через AnyTrust: EigenDA може виступати як альтернатива Data Availability Committee (DAC).

Порівняння з альтернативами

Параметр Ethereum blobs (EIP-4844) EigenDA Celestia Avail
Throughput ~0.75 MB/блок (6 blobs) 10+ MB/s (масштабується) ~1-2 MB/блок ~2 MB/блок
Вартість Залежить від blob ринку Значно дешевше Дешевше ніж ETH blobs Дешевше ніж ETH blobs
Модель довіри Ethereum validator set EigenLayer restakers Celestia validators Avail validators
Latency ~12 сек (1 блок) ~10-12 сек ~15 сек ~20 сек
Зрілість Production Mainnet (2024) Production Beta
EVM інтеграція Нативна Через proxy/adapter Через adapters Через adapters

EigenDA виигрує по throughput і вартості для високонаванилого rollups. Компромісс — додаткова залежність від EigenLayer і поки що часткова централізація disperser.

Операційні міркування

Характеристики Latency

Dispersal в EigenDA займає 10–15 секунд до confirmation (залежить від quorum і мережевих умов). Це потрібно враховувати в архітектурі sequencer: batch posting може бути асинхронним.

Retry і Fallback логіка

Disperser може стати недоступним. Потрібна fallback стратегія:

func postBatchWithFallback(batchData []byte) error {
    // Пробуємо EigenDA
    blobInfo, err := disperseToEigenDA(batchData)
    if err == nil {
        return postToEthereumWithEigenDARef(blobInfo)
    }
    
    log.Warn("EigenDA dispersal failed, falling back to calldata", "err", err)
    
    // Fallback: постим дані напрямку до Ethereum calldata
    // Дорожче, але гарантує liveness
    return postToEthereumCalldata(batchData)
}

Це паттерн з OP Stack AltDA spec: якщо DA layer недоступен — rollup може упасти обратно на Ethereum calldata, зберігаючи liveness ціною більшого gas.

Моніторинг

  • Dispersal latency: алерт якщо >30 секунд
  • Quorum thresholds: моніторинг відсотка ответивших операторів
  • Certificate validity: всі сертифікати в Ethereum повинні пройти on-chain верифікацію

Тайм-лайн інтеграції

Інтеграція OP Stack rollup з EigenDA через proxy: 2–3 тижні (настройка інфраструктури, тестування на Holesky, моніторинг).

Кастомний rollup з нативною EigenDA інтеграцією: 4–8 тижнів (імплементація dispersal логіки, on-chain верифікатор, fallback механізм, аудит контрактів).

Розробка кастомного DA layer на базі EigenDA: 3–4 місяці (власні quorum параметри, кастомний ServiceManager контракт, інтеграція в EigenLayer).

EigenDA інтеграція передбачає роботу з testnet (Holesky) мінімум 2–3 тижні до mainnet деплою — занадто багато рухливих частин для миттєвої production.