Summary
The off-chain C2→C4 commitment check blames a dealer only when its commitments match no recipient.
Evidence
crates/slashing/src/commitment_consistency/workflow.rs:372-449 (LinkScope::SourceMustExistInTargets): for each C2a/C2b source, found = all_targets.iter().any(|tgt| link.check_consistency(…)). A mismatch is recorded only when found is false.
check_consistency compares the source row for that specific recipient (c2_to_c4/mod.rs:196-230, exact match of all L values).
- So a dealer with correct commitments for one recipient and wrong commitments for the others is not accused off-chain.
- The module docs say that fault is attributed when the commitments "for the C4 recipient do not exactly match". The aggregation circuit still checks every pair, so a bad dealer makes the DKG proof fail instead of causing an accusation.
Question
Is the any rule intended (for example, to tolerate missing C4 targets)? If not, the check can require a match for every recipient on the roster.
Summary
The off-chain C2→C4 commitment check blames a dealer only when its commitments match no recipient.
Evidence
crates/slashing/src/commitment_consistency/workflow.rs:372-449(LinkScope::SourceMustExistInTargets): for each C2a/C2b source,found = all_targets.iter().any(|tgt| link.check_consistency(…)). A mismatch is recorded only whenfoundis false.check_consistencycompares the source row for that specific recipient (c2_to_c4/mod.rs:196-230, exact match of all L values).Question
Is the
anyrule intended (for example, to tolerate missing C4 targets)? If not, the check can require a match for every recipient on the roster.