@@ -75,7 +75,11 @@ define_mask_fn!(mask_low_bits64, 64, u64);
7575define_mask_fn ! ( mask_low_bits128, 128 , u128 ) ;
7676
7777fn mask_deposit ( deposit : u128 , deposit_per_byte : u128 ) -> u128 {
78- let min_mask_bits = 128 - ( deposit_per_byte * 1024 ) . leading_zeros ( ) ;
78+ const MIN_MASKED_BYTES : u128 = 256 ;
79+ let min_masked_value = deposit_per_byte
80+ . saturating_mul ( MIN_MASKED_BYTES )
81+ . saturating_sub ( 1 ) ;
82+ let min_mask_bits = 128 - min_masked_value. leading_zeros ( ) ;
7983 mask_low_bits128 ( deposit, min_mask_bits)
8084}
8185
@@ -103,9 +107,11 @@ fn mask_low_bits_works() {
103107 ) ;
104108
105109 let price = 10 ;
106- assert_eq ! ( mask_deposit( 0 , price) , 0x3fff ) ;
107- assert_eq ! ( mask_deposit( 0x10 , price) , 0x3fff ) ;
108- assert_eq ! ( mask_deposit( 0x10_0000 , price) , 0x10_3fff ) ;
110+ assert_eq ! ( mask_deposit( 0 , 0 ) , 0 ) ;
111+ assert_eq ! ( mask_deposit( 0 , 1 ) , 255 ) ;
112+ assert_eq ! ( mask_deposit( 0 , price) , 4095 ) ;
113+ assert_eq ! ( mask_deposit( 0x10 , price) , 4095 ) ;
114+ assert_eq ! ( mask_deposit( 0x10_0000 , price) , 0x10_0fff ) ;
109115 assert_eq ! ( mask_deposit( 0x10_0000_0000 , price) , 0x10_0fff_ffff ) ;
110116 assert_eq ! (
111117 mask_deposit( 0x10_0000_0000_0000 , price) ,
0 commit comments