Skip to content

Commit 9bd7556

Browse files
committed
Revert "refactor(signature_collector): Remove base_hash (#437)"
This reverts commit 22df8e1.
1 parent d2bf18d commit 9bd7556

File tree

2 files changed

+38
-19
lines changed
  • anchor

2 files changed

+38
-19
lines changed

anchor/signature_collector/src/lib.rs

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ impl SignatureCollectorManager {
103103
self: &Arc<Self>,
104104
metadata: SignatureMetadata,
105105
requester: SignatureRequester,
106-
signing_data: SigningData,
106+
validator_signing_data: ValidatorSigningData,
107107
) -> Result<Arc<Signature>, CollectionError> {
108108
let Some(signer) = self.operator_id.get() else {
109109
return Err(CollectionError::OwnOperatorIdUnknown);
@@ -114,8 +114,8 @@ impl SignatureCollectorManager {
114114
debug!(
115115
?metadata,
116116
?requester,
117-
root=?signing_data.root,
118-
index=?signing_data.index,
117+
root=?validator_signing_data.root,
118+
index=?validator_signing_data.index,
119119
"sign_and_collect called",
120120
);
121121

@@ -125,8 +125,8 @@ impl SignatureCollectorManager {
125125
self.processor.permitless.send_immediate(
126126
move |drop_on_finish| {
127127
let sender = manager.get_or_spawn(
128-
signing_data.root,
129-
signing_data.index,
128+
validator_signing_data.root,
129+
validator_signing_data.index,
130130
cloned_metadata.slot,
131131
);
132132
let _ = sender.send(CollectorMessage {
@@ -144,21 +144,21 @@ impl SignatureCollectorManager {
144144
let manager = self.clone();
145145
self.processor.urgent_consensus.send_blocking(
146146
move || {
147-
trace!(root = ?signing_data.root, "Signing...");
147+
trace!(root = ?validator_signing_data.root, "Signing...");
148148
// If we have no share, we can not actually sign the message, because we are running
149149
// in impostor mode.
150-
let partial_signature = if let Some(share) = &signing_data.share {
151-
share.sign(signing_data.root)
150+
let partial_signature = if let Some(share) = &validator_signing_data.share {
151+
share.sign(validator_signing_data.root)
152152
} else {
153153
Signature::empty()
154154
};
155-
trace!(root = ?signing_data.root, "Signed");
155+
trace!(root = ?validator_signing_data.root, "Signed");
156156

157157
let message = PartialSignatureMessage {
158158
partial_signature,
159-
signing_root: signing_data.root,
159+
signing_root: validator_signing_data.root,
160160
signer,
161-
validator_index: signing_data.index,
161+
validator_index: validator_signing_data.index,
162162
};
163163
match requester {
164164
SignatureRequester::SingleValidator { pubkey } => {
@@ -178,12 +178,13 @@ impl SignatureCollectorManager {
178178
}
179179
SignatureRequester::Committee {
180180
num_signatures_to_collect,
181+
base_hash,
181182
} => {
182183
// We have to collect all signatures from the given validators.
183184
// To check this create or get an entry from the `committee_signatures` map.
184185
let mut entry = match manager
185186
.committee_signatures
186-
.entry((signing_data.root, metadata.committee_id))
187+
.entry((base_hash, metadata.committee_id))
187188
{
188189
Entry::Occupied(occupied) => occupied,
189190
Entry::Vacant(vacant) => vacant.insert_entry(CommitteeSignatures {
@@ -224,7 +225,7 @@ impl SignatureCollectorManager {
224225

225226
// Finally, make the local instance aware of the partial signature, if it is a real
226227
// signature.
227-
if signing_data.share.is_some() {
228+
if validator_signing_data.share.is_some() {
228229
let _ = manager.receive_partial_signature(message, metadata.slot);
229230
}
230231
},
@@ -391,11 +392,15 @@ pub enum SignatureRequester {
391392
Committee {
392393
/// The number of signatures we have to wait for.
393394
num_signatures_to_collect: usize,
395+
/// A hash that identifies what we are signing. Note that the actual signing root might be
396+
/// different - for example, because we are in different beacon chain attestation
397+
/// committees, and the attestation data differs therefore.
398+
base_hash: Hash256,
394399
},
395400
}
396401

397402
#[derive(Clone)]
398-
pub struct SigningData {
403+
pub struct ValidatorSigningData {
399404
pub root: Hash256,
400405
pub index: ValidatorIndex,
401406
pub share: Option<SecretKey>,

anchor/validator_store/src/lib.rs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,16 +24,17 @@ use qbft_manager::{
2424
};
2525
use safe_arith::{ArithError, SafeArith};
2626
use signature_collector::{
27-
CollectionError, SignatureCollectorManager, SignatureMetadata, SignatureRequester, SigningData,
27+
CollectionError, SignatureCollectorManager, SignatureMetadata, SignatureRequester,
28+
ValidatorSigningData,
2829
};
2930
use slashing_protection::{NotSafe, Safe, SlashingDatabase};
3031
use slot_clock::SlotClock;
3132
use ssv_types::{
3233
Cluster, CommitteeId, ValidatorIndex, ValidatorMetadata,
3334
consensus::{
3435
BEACON_ROLE_AGGREGATOR, BEACON_ROLE_PROPOSER, BEACON_ROLE_SYNC_COMMITTEE_CONTRIBUTION,
35-
BeaconVote, Contribution, ContributionWrapper, Contributions, ValidatorConsensusData,
36-
ValidatorDuty,
36+
BeaconVote, Contribution, ContributionWrapper, Contributions, QbftData,
37+
ValidatorConsensusData, ValidatorDuty,
3738
},
3839
msgid::Role,
3940
partial_sig::PartialSignatureKind,
@@ -342,6 +343,7 @@ impl<T: SlotClock, E: EthSpec> AnchorValidatorStore<T, E> {
342343
&self,
343344
signature_kind: PartialSignatureKind,
344345
role: Role,
346+
base_hash: Option<Hash256>,
345347
validator: InitializedValidator,
346348
signing_root: Hash256,
347349
slot: Slot,
@@ -360,7 +362,7 @@ impl<T: SlotClock, E: EthSpec> AnchorValidatorStore<T, E> {
360362
committee_id,
361363
};
362364

363-
let requester = if role == Role::Committee {
365+
let requester = if let Some(base_hash) = base_hash {
364366
let metadata = self.get_slot_metadata(slot).await?;
365367
SignatureRequester::Committee {
366368
num_signatures_to_collect: self
@@ -382,14 +384,15 @@ impl<T: SlotClock, E: EthSpec> AnchorValidatorStore<T, E> {
382384
.sum()
383385
})
384386
.unwrap_or_default(),
387+
base_hash,
385388
}
386389
} else {
387390
SignatureRequester::SingleValidator {
388391
pubkey: validator.metadata.public_key,
389392
}
390393
};
391394

392-
let signing_data = SigningData {
395+
let signing_data = ValidatorSigningData {
393396
root: signing_root,
394397
index: validator
395398
.metadata
@@ -521,6 +524,7 @@ impl<T: SlotClock, E: EthSpec> AnchorValidatorStore<T, E> {
521524
.collect_signature(
522525
PartialSignatureKind::PostConsensus,
523526
Role::Proposer,
527+
None,
524528
self.validator(validator_pubkey)?,
525529
signing_root,
526530
header.slot,
@@ -623,6 +627,7 @@ impl<T: SlotClock, E: EthSpec> AnchorValidatorStore<T, E> {
623627
.collect_signature(
624628
PartialSignatureKind::VoluntaryExit,
625629
Role::VoluntaryExit,
630+
None,
626631
self.validator(validator_pubkey)?,
627632
signing_root,
628633
slot,
@@ -842,6 +847,7 @@ impl<T: SlotClock, E: EthSpec> ValidatorStore for AnchorValidatorStore<T, E> {
842847
self.collect_signature(
843848
PartialSignatureKind::RandaoPartialSig,
844849
Role::Proposer,
850+
None,
845851
self.validator(validator_pubkey)?,
846852
signing_root,
847853
self.slot_clock.now().ok_or(SpecificError::SlotClock)?,
@@ -979,6 +985,7 @@ impl<T: SlotClock, E: EthSpec> ValidatorStore for AnchorValidatorStore<T, E> {
979985
Completed::TimedOut => return Err(Error::SpecificError(SpecificError::Timeout)),
980986
Completed::Success(data) => data,
981987
};
988+
let data_hash = data.hash();
982989
attestation.data_mut().beacon_block_root = data.block_root;
983990
attestation.data_mut().source = data.source;
984991
attestation.data_mut().target = data.target;
@@ -999,6 +1006,7 @@ impl<T: SlotClock, E: EthSpec> ValidatorStore for AnchorValidatorStore<T, E> {
9991006
.collect_signature(
10001007
PartialSignatureKind::PostConsensus,
10011008
Role::Committee,
1009+
Some(data_hash),
10021010
validator,
10031011
signing_root,
10041012
attestation.data().slot,
@@ -1043,6 +1051,7 @@ impl<T: SlotClock, E: EthSpec> ValidatorStore for AnchorValidatorStore<T, E> {
10431051
.collect_signature(
10441052
PartialSignatureKind::ValidatorRegistration,
10451053
Role::ValidatorRegistration,
1054+
None,
10461055
self.validator(validator_registration_data.pubkey)?,
10471056
signing_root,
10481057
validity_slot,
@@ -1156,6 +1165,7 @@ impl<T: SlotClock, E: EthSpec> ValidatorStore for AnchorValidatorStore<T, E> {
11561165
.collect_signature(
11571166
PartialSignatureKind::PostConsensus,
11581167
Role::Aggregator,
1168+
None,
11591169
validator,
11601170
signing_root,
11611171
message.aggregate().get_slot(),
@@ -1197,6 +1207,7 @@ impl<T: SlotClock, E: EthSpec> ValidatorStore for AnchorValidatorStore<T, E> {
11971207
self.collect_signature(
11981208
PartialSignatureKind::SelectionProofPartialSig,
11991209
Role::Aggregator,
1210+
None,
12001211
self.validator(validator_pubkey)?,
12011212
signing_root,
12021213
slot,
@@ -1241,6 +1252,7 @@ impl<T: SlotClock, E: EthSpec> ValidatorStore for AnchorValidatorStore<T, E> {
12411252
self.collect_signature(
12421253
PartialSignatureKind::ContributionProofs,
12431254
Role::SyncCommittee,
1255+
None,
12441256
self.validator(*validator_pubkey)?,
12451257
signing_root,
12461258
slot,
@@ -1301,6 +1313,7 @@ impl<T: SlotClock, E: EthSpec> ValidatorStore for AnchorValidatorStore<T, E> {
13011313
.collect_signature(
13021314
PartialSignatureKind::PostConsensus,
13031315
Role::Committee,
1316+
Some(data.hash()),
13041317
validator,
13051318
signing_root,
13061319
slot,
@@ -1448,6 +1461,7 @@ impl<T: SlotClock, E: EthSpec> ValidatorStore for AnchorValidatorStore<T, E> {
14481461
self.collect_signature(
14491462
PartialSignatureKind::PostConsensus,
14501463
Role::SyncCommittee,
1464+
None,
14511465
validator,
14521466
signing_root,
14531467
slot,

0 commit comments

Comments
 (0)