Skip to main content
Sigvex

Blob Dependency Remediation

How to use EIP-4844 blob data safely by committing to it on-chain and respecting the ~18-day availability window.

Blob Dependency Remediation

Overview

Related Detector: Blob Dependency

EIP-4844 blob data is only guaranteed available for roughly 18 days after inclusion, and BLOBHASH/BLOBBASEFEE expose only versioned hashes and fee data — not the blob contents. A contract that assumes blobs persist, or that trusts blob data without committing to it, will break or accept unverifiable input. The remediation is to persist any long-lived commitment on-chain and to verify blob data against its versioned hash within the availability window.

Before (Vulnerable)

function anchor() external {
    // Assumes the blob (and its data) will still be retrievable indefinitely.
    bytes32 h = blobhash(0);
    storedBlobHash = h;   // hash kept, but the underlying data prunes in ~18 days
}

After (Fixed — commit what you need on-chain, verify in-window)

function anchor(bytes32 versionedHash, bytes calldata commitmentProof) external {
    // Bind to the blob's versioned hash and store the specific commitment your
    // protocol needs, rather than depending on the raw blob remaining available.
    require(blobhash(0) == versionedHash, "Blob mismatch");
    require(_verifyCommitment(versionedHash, commitmentProof), "Bad proof");
    commitments[block.number] = versionedHash;   // durable on-chain record
}

Design so that anything needed after the availability window is either stored in regular contract storage/calldata or reconstructable from an on-chain commitment.

Common Mistakes

  • Storing a blob hash and assuming the blob data behind it can always be fetched.
  • Reading BLOBHASH as if it returned blob contents; it returns a versioned hash only.
  • Building a challenge/fraud-proof window longer than the ~18-day blob retention period, leaving proofs unverifiable.

References