Skip to content

Commit 1aede81

Browse files
add other operations
1 parent b983fef commit 1aede81

1 file changed

Lines changed: 128 additions & 58 deletions

File tree

fuzz/fuzz_targets/standard/fuzz_database_states.rs

Lines changed: 128 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ use database::NetworkDatabase;
66
use indexmap::IndexSet;
77
use openssl::rsa::Rsa;
88
use ssv_types::{
9-
Cluster, ClusterId, OperatorId, Share, ValidatorIndex, ValidatorMetadata, ENCRYPTED_KEY_LENGTH,
9+
Cluster, ClusterId, Operator, OperatorId, Share, ValidatorIndex, ValidatorMetadata, ENCRYPTED_KEY_LENGTH,
1010
};
1111
use ssz::Decode;
1212
use std::{path::Path, sync::OnceLock};
@@ -46,24 +46,51 @@ static RSA_KEY: OnceLock<Rsa<openssl::pkey::Public>> = OnceLock::new();
4646

4747
#[derive(Arbitrary, Debug)]
4848
enum DbAction {
49-
InsertValidator,
50-
UpdateStatus(bool),
51-
DeleteValidator,
52-
BumpNonce,
49+
InsertValidator {
50+
cluster_id: [u8; 32],
51+
owner: [u8; 20],
52+
fee_recipient: [u8; 20],
53+
liquidated: bool,
54+
validator_pubkey: [u8; 48],
55+
share_pubkey: [u8; 48],
56+
operator_id: u64,
57+
encrypted_private_key: [u8; ENCRYPTED_KEY_LENGTH],
58+
validator_index: usize,
59+
graffiti: [u8; 32],
60+
},
61+
UpdateStatus {
62+
cluster_id: [u8; 32],
63+
status: bool,
64+
},
65+
DeleteValidator {
66+
validator_pubkey: [u8; 48],
67+
},
68+
BumpNonce {
69+
owner: [u8; 20],
70+
},
71+
InsertOperator {
72+
operator_id: u64,
73+
owner: [u8; 20],
74+
},
75+
DeleteOperator {
76+
operator_id: u64,
77+
},
78+
UpdateFeeRecipient {
79+
owner: [u8; 20],
80+
fee_recipient: [u8; 20],
81+
},
82+
UpdateGraffiti {
83+
validator_pubkey: [u8; 48],
84+
graffiti: [u8; 32],
85+
},
86+
SetValidatorIndices {
87+
validator_pubkey: [u8; 48],
88+
index: Option<usize>,
89+
},
5390
}
5491

5592
#[derive(Arbitrary, Debug)]
5693
struct FuzzData {
57-
cluster_id: [u8; 32],
58-
owner: [u8; 20],
59-
fee_recipient: [u8; 20],
60-
liquidated: bool,
61-
validator_pubkey: [u8; 48],
62-
share_pubkey: [u8; 48],
63-
operator_id: u64,
64-
encrypted_private_key: [u8; ENCRYPTED_KEY_LENGTH],
65-
validator_index: usize,
66-
graffiti: [u8; 32],
6794
actions: Vec<DbAction>,
6895
}
6996

@@ -92,40 +119,6 @@ fn fuzz_with_data(fuzz: FuzzData) {
92119
return;
93120
};
94121

95-
// Create test data with correct types
96-
let mut cluster_members = IndexSet::new();
97-
cluster_members.insert(OperatorId(fuzz.operator_id));
98-
99-
let Ok(validator_pk) = PublicKeyBytes::from_ssz_bytes(&fuzz.validator_pubkey) else {
100-
return;
101-
};
102-
let Ok(share_pk) = PublicKeyBytes::from_ssz_bytes(&fuzz.share_pubkey) else {
103-
return;
104-
};
105-
106-
let cluster = Cluster {
107-
cluster_id: ClusterId(fuzz.cluster_id),
108-
owner: Address::from(fuzz.owner),
109-
fee_recipient: Address::from(fuzz.fee_recipient),
110-
liquidated: fuzz.liquidated,
111-
cluster_members,
112-
};
113-
114-
let validator = ValidatorMetadata {
115-
public_key: validator_pk,
116-
cluster_id: ClusterId(fuzz.cluster_id),
117-
index: Some(ValidatorIndex(fuzz.validator_index)),
118-
graffiti: Graffiti(fuzz.graffiti),
119-
};
120-
121-
let share = Share {
122-
validator_pubkey: validator_pk,
123-
operator_id: OperatorId(fuzz.operator_id),
124-
cluster_id: ClusterId(fuzz.cluster_id),
125-
share_pubkey: share_pk,
126-
encrypted_private_key: fuzz.encrypted_private_key,
127-
};
128-
129122
for action in fuzz.actions {
130123
let Ok(conn) = old.connection() else {
131124
return;
@@ -135,17 +128,94 @@ fn fuzz_with_data(fuzz: FuzzData) {
135128
};
136129

137130
match action {
138-
DbAction::InsertValidator => {
139-
let _ = old.insert_validator(cluster.clone(), &validator, vec![share.clone()], &tx);
131+
DbAction::InsertValidator {
132+
cluster_id,
133+
owner,
134+
fee_recipient,
135+
liquidated,
136+
validator_pubkey,
137+
share_pubkey,
138+
operator_id,
139+
encrypted_private_key,
140+
validator_index,
141+
graffiti,
142+
} => {
143+
let Ok(validator_pk) = PublicKeyBytes::from_ssz_bytes(&validator_pubkey) else {
144+
continue;
145+
};
146+
let Ok(share_pk) = PublicKeyBytes::from_ssz_bytes(&share_pubkey) else {
147+
continue;
148+
};
149+
150+
let mut cluster_members = IndexSet::new();
151+
cluster_members.insert(OperatorId(operator_id));
152+
153+
let cluster = Cluster {
154+
cluster_id: ClusterId(cluster_id),
155+
owner: Address::from(owner),
156+
fee_recipient: Address::from(fee_recipient),
157+
liquidated,
158+
cluster_members,
159+
};
160+
161+
let validator = ValidatorMetadata {
162+
public_key: validator_pk,
163+
cluster_id: ClusterId(cluster_id),
164+
index: Some(ValidatorIndex(validator_index)),
165+
graffiti: Graffiti(graffiti),
166+
};
167+
168+
let share = Share {
169+
validator_pubkey: validator_pk,
170+
operator_id: OperatorId(operator_id),
171+
cluster_id: ClusterId(cluster_id),
172+
share_pubkey: share_pk,
173+
encrypted_private_key,
174+
};
175+
176+
let _ = old.insert_validator(cluster, &validator, vec![share], &tx);
177+
}
178+
DbAction::UpdateStatus { cluster_id, status } => {
179+
let _ = old.update_status(ClusterId(cluster_id), status, &tx);
140180
}
141-
DbAction::UpdateStatus(status) => {
142-
let _ = old.update_status(ClusterId(fuzz.cluster_id), status, &tx);
181+
DbAction::DeleteValidator { validator_pubkey } => {
182+
let Ok(validator_pk) = PublicKeyBytes::from_ssz_bytes(&validator_pubkey) else {
183+
continue;
184+
};
185+
let _ = old.delete_validator(&validator_pk, &tx);
143186
}
144-
DbAction::DeleteValidator => {
145-
let _ = old.delete_validator(&validator.public_key, &tx);
187+
DbAction::BumpNonce { owner } => {
188+
let _ = old.bump_and_get_nonce(&Address::from(owner), &tx);
146189
}
147-
DbAction::BumpNonce => {
148-
let _ = old.bump_and_get_nonce(&cluster.owner, &tx);
190+
DbAction::InsertOperator { operator_id, owner } => {
191+
let operator = Operator {
192+
id: OperatorId(operator_id),
193+
rsa_pubkey: rsa_key.clone(),
194+
owner: Address::from(owner),
195+
};
196+
let _ = old.insert_operator(&operator, &tx);
197+
}
198+
DbAction::DeleteOperator { operator_id } => {
199+
let _ = old.delete_operator(OperatorId(operator_id), &tx);
200+
}
201+
DbAction::UpdateFeeRecipient { owner, fee_recipient } => {
202+
let _ = old.update_fee_recipient(Address::from(owner), Address::from(fee_recipient), &tx);
203+
}
204+
DbAction::UpdateGraffiti { validator_pubkey, graffiti } => {
205+
if let Ok(validator_pk) = PublicKeyBytes::from_ssz_bytes(&validator_pubkey) {
206+
let _ = old.update_graffiti(&validator_pk, Graffiti(graffiti), &tx);
207+
};
208+
}
209+
DbAction::SetValidatorIndices { validator_pubkey, index } => {
210+
if let Ok(validator_pk) = PublicKeyBytes::from_ssz_bytes(&validator_pubkey) {
211+
if let Some(idx) = index {
212+
let mut map = std::collections::HashMap::new();
213+
map.insert(validator_pk, ValidatorIndex(idx));
214+
let _ = old.set_validator_indices(map);
215+
continue;
216+
};
217+
};
218+
149219
}
150220
}
151221

@@ -186,4 +256,4 @@ fn main() {
186256
};
187257
fuzz_with_data(fuzz);
188258
});
189-
}
259+
}

0 commit comments

Comments
 (0)