@@ -5,14 +5,10 @@ use num_traits::FromPrimitive;
55use pallas:: ledger:: primitives:: { byron:: Blake2b256 , Hash } ;
66use pallas:: ledger:: traverse:: time:: Slot ;
77use quickcheck:: { Arbitrary , Gen } ;
8- use rand:: prelude:: Distribution ;
9- use rand:: rngs:: StdRng ;
10- use rand:: SeedableRng ;
118use serde:: { Deserialize , Deserializer , Serialize , Serializer } ;
12- use statrs:: distribution:: ContinuousCDF ;
13- use statrs:: distribution:: { Beta , Uniform } ;
149use std:: collections:: BTreeMap ;
1510
11+ use crate :: realism:: realistic_stake_dist;
1612use crate :: util:: { arbitrary_fixed_bytes, deserialize_fixed_bytes, serialize_fixed_bytes} ;
1713
1814pub use pallas:: ledger:: primitives:: PoolKeyhash ;
@@ -27,28 +23,6 @@ pub fn arbitrary_coin(g: &mut Gen) -> Coin {
2723 u64:: arbitrary ( g) % 999999 + 1
2824}
2925
30- pub ( crate ) fn realistic_stake_dist (
31- g : & mut Gen ,
32- total : u64 ,
33- n : usize ,
34- alpha : f64 ,
35- beta : f64 ,
36- ) -> Vec < Coin > {
37- let rng = & mut StdRng :: seed_from_u64 ( u64:: arbitrary ( g) ) ;
38- let noise = Uniform :: new ( 0.75 , 1.25 ) . unwrap ( ) ;
39- let curve = Beta :: new ( alpha, beta) . unwrap ( ) ;
40- let cum: Vec < f64 > = ( 0 ..n)
41- . map ( |i| curve. cdf ( ( i as f64 ) / ( total as f64 ) ) )
42- . collect ( ) ;
43- let dif: Vec < f64 > = ( 1 ..n)
44- . map ( |i| ( cum[ i] - cum[ i - 1 ] ) * noise. sample ( rng) )
45- . collect ( ) ;
46- let scale: f64 = ( total as f64 ) / dif. iter ( ) . sum :: < f64 > ( ) ;
47- dif. iter ( )
48- . map ( |coin| ( scale * * coin) . round ( ) as Coin )
49- . collect ( )
50- }
51-
5226pub fn arbitrary_stake_distribution (
5327 g : & mut Gen ,
5428 total : u64 ,
0 commit comments