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.
Recommended Fix
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
BLOBHASHas 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.