Skip to content

Commit 71916ff

Browse files
committed
test new signature scheme in contract unit tests
1 parent b994c70 commit 71916ff

File tree

17 files changed

+699
-788
lines changed

17 files changed

+699
-788
lines changed

crates/contract/src/lib.rs

Lines changed: 38 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2393,10 +2393,11 @@ mod tests {
23932393
}
23942394
}
23952395
}
2396-
2396+
const NUM_GENERATED_DOMAINS: usize = 1;
2397+
const NUM_DOMAINS: usize = 5;
23972398
#[test]
23982399
fn test_start_node_migration_failure_not_participant() {
2399-
let running_state = ProtocolContractState::Running(gen_running_state(2));
2400+
let running_state = ProtocolContractState::Running(gen_running_state(NUM_DOMAINS));
24002401
let mut contract = MpcContract::new_from_protocol_state(running_state);
24012402

24022403
// sanity check
@@ -2413,7 +2414,7 @@ mod tests {
24132414

24142415
#[test]
24152416
fn test_start_node_migration_success() {
2416-
let running_state = ProtocolContractState::Running(gen_running_state(2));
2417+
let running_state = ProtocolContractState::Running(gen_running_state(NUM_DOMAINS));
24172418
let mut contract = MpcContract::new_from_protocol_state(running_state);
24182419

24192420
// sanity check
@@ -2469,14 +2470,14 @@ mod tests {
24692470
#[test]
24702471
fn test_start_node_migration_failure_initializing() {
24712472
let initializing_state =
2472-
ProtocolContractState::Initializing(gen_initializing_state(2, 0).1);
2473+
ProtocolContractState::Initializing(gen_initializing_state(NUM_DOMAINS, 0).1);
24732474
let contract = MpcContract::new_from_protocol_state(initializing_state);
24742475
test_start_migration_node_failure_not_running(contract);
24752476
}
24762477

24772478
#[test]
24782479
fn test_start_node_migration_failure_resharing() {
2479-
let resharing_state = ProtocolContractState::Resharing(gen_resharing_state(2).1);
2480+
let resharing_state = ProtocolContractState::Resharing(gen_resharing_state(NUM_DOMAINS).1);
24802481
let contract = MpcContract::new_from_protocol_state(resharing_state);
24812482
test_start_migration_node_failure_not_running(contract);
24822483
}
@@ -2498,22 +2499,22 @@ mod tests {
24982499

24992500
#[test]
25002501
fn test_register_backup_service_fail_non_participant_running() {
2501-
let running_state = ProtocolContractState::Running(gen_running_state(2));
2502+
let running_state = ProtocolContractState::Running(gen_running_state(NUM_DOMAINS));
25022503
let contract = MpcContract::new_from_protocol_state(running_state);
25032504
test_register_backup_service_fail_non_participant(contract);
25042505
}
25052506

25062507
#[test]
25072508
fn test_register_backup_service_fail_non_participant_initializing() {
25082509
let initializing_state =
2509-
ProtocolContractState::Initializing(gen_initializing_state(2, 0).1);
2510+
ProtocolContractState::Initializing(gen_initializing_state(NUM_DOMAINS, 0).1);
25102511
let contract = MpcContract::new_from_protocol_state(initializing_state);
25112512
test_register_backup_service_fail_non_participant(contract);
25122513
}
25132514

25142515
#[test]
25152516
fn test_register_backup_service_fail_non_participant_resharnig() {
2516-
let resharing_state = ProtocolContractState::Resharing(gen_resharing_state(2).1);
2517+
let resharing_state = ProtocolContractState::Resharing(gen_resharing_state(NUM_DOMAINS).1);
25172518
let contract = MpcContract::new_from_protocol_state(resharing_state);
25182519
test_register_backup_service_fail_non_participant(contract);
25192520
}
@@ -2549,7 +2550,7 @@ mod tests {
25492550

25502551
#[test]
25512552
fn test_register_backup_service_success_running() {
2552-
let running_state = gen_running_state(2);
2553+
let running_state = gen_running_state(NUM_DOMAINS);
25532554
let participants = running_state.parameters.participants().clone();
25542555
let running_state = ProtocolContractState::Running(running_state);
25552556
let contract = MpcContract::new_from_protocol_state(running_state);
@@ -2558,7 +2559,7 @@ mod tests {
25582559

25592560
#[test]
25602561
fn test_register_backup_service_success_resharing() {
2561-
let resharing_state = gen_resharing_state(2).1;
2562+
let resharing_state = gen_resharing_state(NUM_DOMAINS).1;
25622563
let participants = resharing_state
25632564
.resharing_key
25642565
.proposed_parameters()
@@ -2571,7 +2572,7 @@ mod tests {
25712572

25722573
#[test]
25732574
fn test_register_backup_service_success_initializing() {
2574-
let initializing_state = gen_initializing_state(2, 0).1;
2575+
let initializing_state = gen_initializing_state(NUM_DOMAINS, 0).1;
25752576
let participants = initializing_state
25762577
.generating_key
25772578
.proposed_parameters()
@@ -2584,7 +2585,7 @@ mod tests {
25842585

25852586
#[test]
25862587
fn test_conclude_node_migration_success() {
2587-
let running_state = gen_running_state(2);
2588+
let running_state = gen_running_state(NUM_DOMAINS);
25882589
let keyset = running_state.keyset.clone();
25892590
let participants = running_state.parameters.participants().clone();
25902591
let running_state = ProtocolContractState::Running(running_state);
@@ -2614,7 +2615,7 @@ mod tests {
26142615

26152616
#[test]
26162617
fn test_conclude_node_migration_invalid_tee() {
2617-
let running_state = gen_running_state(2);
2618+
let running_state = gen_running_state(NUM_DOMAINS);
26182619
let keyset = running_state.keyset.clone();
26192620
let participants = running_state.parameters.participants().clone();
26202621
let running_state = ProtocolContractState::Running(running_state);
@@ -2642,7 +2643,7 @@ mod tests {
26422643

26432644
#[test]
26442645
fn test_conclude_node_migration_migration_not_found() {
2645-
let running_state = gen_running_state(2);
2646+
let running_state = gen_running_state(NUM_DOMAINS);
26462647
let keyset = running_state.keyset.clone();
26472648
let participants = running_state.parameters.participants().clone();
26482649
let running_state = ProtocolContractState::Running(running_state);
@@ -2675,7 +2676,7 @@ mod tests {
26752676

26762677
#[test]
26772678
fn test_conclude_node_migration_keyset_mismatch() {
2678-
let running_state = gen_running_state(2);
2679+
let running_state = gen_running_state(NUM_DOMAINS);
26792680
let mut keyset = running_state.keyset.clone();
26802681
keyset.epoch_id = keyset.epoch_id.next();
26812682
let participants = running_state.parameters.participants().clone();
@@ -2709,7 +2710,7 @@ mod tests {
27092710

27102711
#[test]
27112712
fn test_conclude_node_migration_not_participant() {
2712-
let running_state = gen_running_state(2);
2713+
let running_state = gen_running_state(NUM_DOMAINS);
27132714
let keyset = running_state.keyset.clone();
27142715
let running_state = ProtocolContractState::Running(running_state);
27152716
let mut contract = MpcContract::new_from_protocol_state(running_state);
@@ -2764,7 +2765,7 @@ mod tests {
27642765

27652766
#[test]
27662767
fn test_conclude_node_migration_failure_resharing() {
2767-
let (_, resharing_state) = gen_resharing_state(2);
2768+
let (_, resharing_state) = gen_resharing_state(NUM_DOMAINS);
27682769

27692770
let keyset = resharing_state.previous_running_state.keyset.clone();
27702771
let participants = resharing_state
@@ -2779,7 +2780,7 @@ mod tests {
27792780

27802781
#[test]
27812782
fn test_conclude_node_migration_failure_initializing() {
2782-
let (_, initializing) = gen_initializing_state(2, 0);
2783+
let (_, initializing) = gen_initializing_state(NUM_DOMAINS, 0);
27832784

27842785
let keyset = Keyset::new(
27852786
initializing.generating_key.epoch_id(),
@@ -2868,7 +2869,7 @@ mod tests {
28682869

28692870
#[test]
28702871
pub fn test_cleanup_orphaned_node_migrations() {
2871-
let running_state = gen_running_state(2);
2872+
let running_state = gen_running_state(NUM_DOMAINS);
28722873
let participants = running_state.parameters.participants().clone();
28732874
let running_state = ProtocolContractState::Running(running_state);
28742875
let mut contract = MpcContract::new_from_protocol_state(running_state);
@@ -3001,26 +3002,29 @@ mod tests {
30013002

30023003
#[test]
30033004
pub fn test_proposed_updates_interface_running() {
3004-
let protocol_contract_state = ProtocolContractState::Running(gen_running_state(2));
3005+
let protocol_contract_state =
3006+
ProtocolContractState::Running(gen_running_state(NUM_DOMAINS));
30053007
test_proposed_updates_case_given_state(protocol_contract_state);
30063008
}
30073009

30083010
#[test]
30093011
pub fn test_proposed_updates_interface_resharing() {
3010-
let protocol_contract_state = ProtocolContractState::Resharing(gen_resharing_state(2).1);
3012+
let protocol_contract_state =
3013+
ProtocolContractState::Resharing(gen_resharing_state(NUM_DOMAINS).1);
30113014
test_proposed_updates_case_given_state(protocol_contract_state);
30123015
}
30133016

30143017
#[test]
30153018
pub fn test_proposed_updates_interface_initialzing() {
3016-
let protocol_contract_state =
3017-
ProtocolContractState::Initializing(gen_initializing_state(2, 1).1);
3019+
let protocol_contract_state = ProtocolContractState::Initializing(
3020+
gen_initializing_state(NUM_DOMAINS, NUM_GENERATED_DOMAINS).1,
3021+
);
30183022
test_proposed_updates_case_given_state(protocol_contract_state);
30193023
}
30203024

30213025
#[test]
30223026
pub fn test_remove_update_vote_running() {
3023-
let running_state = gen_running_state(2);
3027+
let running_state = gen_running_state(NUM_DOMAINS);
30243028
let participants = running_state.parameters.participants().clone();
30253029
let protocol_contract_state = ProtocolContractState::Running(running_state);
30263030
let mut contract = MpcContract::new_from_protocol_state(protocol_contract_state);
@@ -3061,7 +3065,7 @@ mod tests {
30613065
#[test]
30623066
#[should_panic(expected = "not a voter")]
30633067
fn test_remove_update_vote_panics_if_non_voter() {
3064-
let running_state = gen_running_state(2);
3068+
let running_state = gen_running_state(NUM_DOMAINS);
30653069
let protocol_contract_state = ProtocolContractState::Running(running_state);
30663070
let mut contract = MpcContract::new_from_protocol_state(protocol_contract_state);
30673071
let expected = propose_and_vote_code(0, &mut contract);
@@ -3080,7 +3084,8 @@ mod tests {
30803084
#[test]
30813085
#[should_panic(expected = "protocol must be in running state")]
30823086
pub fn test_remove_update_vote_resharing() {
3083-
let protocol_contract_state = ProtocolContractState::Resharing(gen_resharing_state(2).1);
3087+
let protocol_contract_state =
3088+
ProtocolContractState::Resharing(gen_resharing_state(NUM_DOMAINS).1);
30843089
let mut contract = MpcContract::new_from_protocol_state(protocol_contract_state);
30853090
let account_id = gen_account_id();
30863091
testing_env!(VMContextBuilder::new()
@@ -3093,8 +3098,9 @@ mod tests {
30933098
#[test]
30943099
#[should_panic(expected = "protocol must be in running state")]
30953100
pub fn test_remove_update_vote_initializing() {
3096-
let protocol_contract_state =
3097-
ProtocolContractState::Initializing(gen_initializing_state(2, 1).1);
3101+
let protocol_contract_state = ProtocolContractState::Initializing(
3102+
gen_initializing_state(NUM_DOMAINS, NUM_GENERATED_DOMAINS).1,
3103+
);
30983104
let mut contract = MpcContract::new_from_protocol_state(protocol_contract_state);
30993105
let account_id = gen_account_id();
31003106
testing_env!(VMContextBuilder::new()
@@ -3164,7 +3170,7 @@ mod tests {
31643170
/// (simulating post-resharing cleanup).
31653171
#[test]
31663172
pub fn test_remove_non_participant_update_votes() {
3167-
let running_state = gen_running_state(2);
3173+
let running_state = gen_running_state(NUM_DOMAINS);
31683174
let participants = running_state.parameters.participants().clone();
31693175
let mut contract =
31703176
MpcContract::new_from_protocol_state(ProtocolContractState::Running(running_state));
@@ -3216,9 +3222,9 @@ mod tests {
32163222
}
32173223

32183224
#[rstest]
3219-
#[case(ProtocolContractState::Running(gen_running_state(2)))]
3220-
#[case(ProtocolContractState::Resharing(gen_resharing_state(2).1))]
3221-
#[case(ProtocolContractState::Initializing(gen_initializing_state(2, 1).1))]
3225+
#[case(ProtocolContractState::Running(gen_running_state(NUM_DOMAINS)))]
3226+
#[case(ProtocolContractState::Resharing(gen_resharing_state(NUM_DOMAINS).1))]
3227+
#[case(ProtocolContractState::Initializing(gen_initializing_state(NUM_DOMAINS, NUM_GENERATED_DOMAINS).1))]
32223228
fn test_contract_stores_allowed_hashes(#[case] protocol_state: ProtocolContractState) {
32233229
const CURRENT_BLOCK_TIME_STAMP: u64 = 10;
32243230
let mut contract = MpcContract::new_from_protocol_state(protocol_state);

crates/contract/src/primitives/domain.rs

Lines changed: 23 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -220,11 +220,11 @@ pub mod tests {
220220
let domains2 = vec![
221221
DomainConfig {
222222
id: DomainId(2),
223-
scheme: SignatureScheme::Secp256k1,
223+
scheme: SignatureScheme::Bls12381,
224224
},
225225
DomainConfig {
226226
id: DomainId(3),
227-
scheme: SignatureScheme::Ed25519,
227+
scheme: SignatureScheme::V2Secp256k1,
228228
},
229229
];
230230
let new_registry = new_registry.add_domains(domains2.clone()).unwrap();
@@ -254,57 +254,30 @@ pub mod tests {
254254

255255
#[test]
256256
fn test_retain_domains() {
257-
let mut registry = DomainRegistry::from_raw_validated(
258-
vec![
259-
DomainConfig {
260-
id: DomainId(0),
261-
scheme: SignatureScheme::Secp256k1,
262-
},
263-
DomainConfig {
264-
id: DomainId(2),
265-
scheme: SignatureScheme::Ed25519,
266-
},
267-
DomainConfig {
268-
id: DomainId(3),
269-
scheme: SignatureScheme::Secp256k1,
270-
},
271-
],
272-
6,
273-
)
274-
.unwrap();
257+
let expected = vec![
258+
DomainConfig {
259+
id: DomainId(0),
260+
scheme: SignatureScheme::Secp256k1,
261+
},
262+
DomainConfig {
263+
id: DomainId(2),
264+
scheme: SignatureScheme::Ed25519,
265+
},
266+
DomainConfig {
267+
id: DomainId(3),
268+
scheme: SignatureScheme::Bls12381,
269+
},
270+
DomainConfig {
271+
id: DomainId(4),
272+
scheme: SignatureScheme::V2Secp256k1,
273+
},
274+
];
275+
let mut registry = DomainRegistry::from_raw_validated(expected.clone(), 6).unwrap();
275276
registry.retain_domains(3);
276-
assert_eq!(
277-
registry.domains,
278-
vec![
279-
DomainConfig {
280-
id: DomainId(0),
281-
scheme: SignatureScheme::Secp256k1,
282-
},
283-
DomainConfig {
284-
id: DomainId(2),
285-
scheme: SignatureScheme::Ed25519,
286-
},
287-
DomainConfig {
288-
id: DomainId(3),
289-
scheme: SignatureScheme::Secp256k1,
290-
},
291-
]
292-
);
277+
assert_eq!(registry.domains, expected[0..3]);
293278
assert_eq!(registry.next_domain_id, 6);
294279
registry.retain_domains(2);
295-
assert_eq!(
296-
registry.domains,
297-
vec![
298-
DomainConfig {
299-
id: DomainId(0),
300-
scheme: SignatureScheme::Secp256k1,
301-
},
302-
DomainConfig {
303-
id: DomainId(2),
304-
scheme: SignatureScheme::Ed25519,
305-
},
306-
]
307-
);
280+
assert_eq!(registry.domains, expected[0..2]);
308281
assert_eq!(registry.next_domain_id, 6);
309282
registry.retain_domains(0);
310283
assert_eq!(registry.domains, Vec::new());

crates/contract/src/primitives/test_utils.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,11 @@ use std::collections::BTreeMap;
1313

1414
use super::domain::{DomainConfig, DomainId, DomainRegistry, SignatureScheme};
1515

16-
const ALL_PROTOCOLS: [SignatureScheme; 3] = [
16+
const ALL_PROTOCOLS: [SignatureScheme; 4] = [
1717
SignatureScheme::Secp256k1,
1818
SignatureScheme::Ed25519,
1919
SignatureScheme::Bls12381,
20+
SignatureScheme::V2Secp256k1,
2021
];
2122

2223
/// Generates a valid DomainRegistry with various signature schemes, with num_domains total.

crates/contract/src/state.rs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,26 @@ impl ProtocolContractState {
302302
_ => None,
303303
}
304304
}
305+
306+
pub fn next_domain_id(&self) -> u64 {
307+
match self {
308+
ProtocolContractState::Running(state) => state.domains.next_domain_id(),
309+
ProtocolContractState::Initializing(state) => state.domains.next_domain_id(),
310+
ProtocolContractState::Resharing(state) => {
311+
state.previous_running_state.domains.next_domain_id()
312+
}
313+
_ => panic!("should be in initializing state"),
314+
}
315+
}
316+
317+
pub fn current_epoch(&self) -> EpochId {
318+
match self {
319+
ProtocolContractState::Running(state) => state.keyset.epoch_id,
320+
ProtocolContractState::Initializing(state) => state.epoch_id,
321+
ProtocolContractState::Resharing(state) => state.previous_running_state.keyset.epoch_id,
322+
_ => panic!("should be in initializing state"),
323+
}
324+
}
305325
}
306326

307327
#[derive(Debug, Clone)]

crates/contract/src/state/initializing.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -336,9 +336,10 @@ pub mod tests {
336336
test_initializing_contract_state_for(3, 2);
337337
}
338338

339+
const NUM_DOMAINS: usize = 5;
339340
#[test]
340341
fn test_cancel_key_generation() {
341-
let (mut env, mut state) = gen_initializing_state(5, 2);
342+
let (mut env, mut state) = gen_initializing_state(NUM_DOMAINS, 2);
342343

343344
// Vote for domain #2.
344345
let leader = find_leader(&state.generating_key);

0 commit comments

Comments
 (0)