Assessment reports>SP1 Helios>Informational findings>Redundant check on ,prevSyncCommitteeHash
Category: Coding Mistakes

Redundant check on prevSyncCommitteeHash

Informational Impact
Informational Severity
N/A Likelihood

Description

In the update function, both currentSyncCommitteeHash and po.prevSyncCommitteeHash are derived from syncCommittees[getSyncCommitteePeriod(head)]. Therefore, the check [D] is redundant in the current implementation.

ProofOutputs memory po = ProofOutputs({
    prevHeader: headers[head],
    prevHead: head,
    prevSyncCommitteeHash: syncCommittees[getSyncCommitteePeriod(head)],   // ------------- [A]
    [...]
});

[...]

// The sync committee for the current head should always be set.
uint256 currentPeriod = getSyncCommitteePeriod(head);   // ------------- [B]
bytes32 currentSyncCommitteeHash = syncCommittees[currentPeriod];   // ------------- [C]

[...]

// The sync committee hash used in the proof should match the current sync committee.
if (currentSyncCommitteeHash != po.prevSyncCommitteeHash) {   // -------------  [D]
    revert SyncCommitteeStartMismatch(po.prevSyncCommitteeHash, currentSyncCommitteeHash);
}

Impact

This redundant check unnecessarily increases gas usage and adds complexity to the code, which may make it harder for users to understand.

Recommendations

Remove the following check from the update function.

if (currentSyncCommitteeHash != po.prevSyncCommitteeHash) {
    revert SyncCommitteeStartMismatch(po.prevSyncCommitteeHash, currentSyncCommitteeHash);
}

Remediation

This issue has been acknowledged by Succinct Labs, and a fix was implemented in commit 9a91a3be.

Zellic © 2025Back to top ↑