10
10
//!
11
11
//! [`Simulacrum`]: crate::Simulacrum
12
12
13
+ use std:: num:: NonZeroUsize ;
14
+
13
15
use anyhow:: { anyhow, Result } ;
14
16
use rand:: rngs:: OsRng ;
15
17
use sui_config:: { genesis, transaction_deny_config:: TransactionDenyConfig } ;
91
93
let config = ConfigBuilder :: new_with_temp_dir ( )
92
94
. rng ( & mut rng)
93
95
. with_chain_start_timestamp_ms ( 1 )
96
+ . deterministic_committee_size ( NonZeroUsize :: new ( 1 ) . unwrap ( ) )
94
97
. build ( ) ;
95
98
let keystore = KeyStore :: from_newtork_config ( & config) ;
96
99
let store = InMemoryStore :: new ( & config. genesis ) ;
@@ -358,6 +361,7 @@ impl<'a> CommitteeWithKeys<'a> {
358
361
mod tests {
359
362
use std:: time:: Duration ;
360
363
364
+ use rand:: { rngs:: StdRng , SeedableRng } ;
361
365
use shared_crypto:: intent:: Intent ;
362
366
use sui_types:: {
363
367
base_types:: SuiAddress ,
@@ -369,6 +373,36 @@ mod tests {
369
373
370
374
use super :: * ;
371
375
376
+ #[ test]
377
+ fn deterministic_genesis ( ) {
378
+ let rng = StdRng :: from_seed ( [ 9 ; 32 ] ) ;
379
+ let chain1 = Simulacrum :: new_with_rng ( rng) ;
380
+ let genesis_checkpoint_digest1 = chain1
381
+ . store ( )
382
+ . get_checkpoint_by_sequence_number ( 0 )
383
+ . unwrap ( )
384
+ . digest ( ) ;
385
+
386
+ let rng = StdRng :: from_seed ( [ 9 ; 32 ] ) ;
387
+ let chain2 = Simulacrum :: new_with_rng ( rng) ;
388
+ let genesis_checkpoint_digest2 = chain2
389
+ . store ( )
390
+ . get_checkpoint_by_sequence_number ( 0 )
391
+ . unwrap ( )
392
+ . digest ( ) ;
393
+
394
+ assert_eq ! ( genesis_checkpoint_digest1, genesis_checkpoint_digest2) ;
395
+
396
+ // Ensure the committees are different when using different seeds
397
+ let rng = StdRng :: from_seed ( [ 0 ; 32 ] ) ;
398
+ let chain3 = Simulacrum :: new_with_rng ( rng) ;
399
+
400
+ assert_ne ! (
401
+ chain1. store( ) . get_committee_by_epoch( 0 ) ,
402
+ chain3. store( ) . get_committee_by_epoch( 0 ) ,
403
+ ) ;
404
+ }
405
+
372
406
#[ test]
373
407
fn simple ( ) {
374
408
let steps = 10 ;
0 commit comments