@@ -8,12 +8,16 @@ pub struct FeeCalculator {
8
8
// The current cost of a signature This amount may increase/decrease over time based on
9
9
// cluster processing load.
10
10
pub lamports_per_signature : u64 ,
11
+
12
+ // What portion of collected fees are to be destroyed, as a fraction of std::u8::MAX
13
+ pub burn_percent : u8 ,
11
14
}
12
15
13
16
impl Default for FeeCalculator {
14
17
fn default ( ) -> Self {
15
18
Self {
16
19
lamports_per_signature : 0 ,
20
+ burn_percent : DEFAULT_BURN_PERCENT ,
17
21
}
18
22
}
19
23
}
@@ -22,12 +26,19 @@ impl FeeCalculator {
22
26
pub fn new ( lamports_per_signature : u64 ) -> Self {
23
27
Self {
24
28
lamports_per_signature,
29
+ ..FeeCalculator :: default ( )
25
30
}
26
31
}
27
32
28
33
pub fn calculate_fee ( & self , message : & Message ) -> u64 {
29
34
self . lamports_per_signature * u64:: from ( message. header . num_required_signatures )
30
35
}
36
+
37
+ /// calculate unburned fee from a fee total, returns (unburned, burned)
38
+ pub fn burn ( & self , fees : u64 ) -> ( u64 , u64 ) {
39
+ let burned = fees * u64:: from ( self . burn_percent ) / 100 ;
40
+ ( fees - burned, burned)
41
+ }
31
42
}
32
43
33
44
#[ derive( Serialize , Deserialize , PartialEq , Eq , Clone , Debug ) ]
@@ -148,16 +159,11 @@ impl FeeRateGovernor {
148
159
me
149
160
}
150
161
151
- /// calculate unburned fee from a fee total, returns (unburned, burned)
152
- pub fn burn ( & self , fees : u64 ) -> ( u64 , u64 ) {
153
- let burned = fees * u64:: from ( self . burn_percent ) / 100 ;
154
- ( fees - burned, burned)
155
- }
156
-
157
162
/// create a FeeCalculator based on current cluster signature throughput
158
163
pub fn create_fee_calculator ( & self ) -> FeeCalculator {
159
164
FeeCalculator {
160
165
lamports_per_signature : self . lamports_per_signature ,
166
+ burn_percent : self . burn_percent ,
161
167
}
162
168
}
163
169
}
@@ -168,15 +174,15 @@ mod tests {
168
174
use crate :: { pubkey:: Pubkey , system_instruction} ;
169
175
170
176
#[ test]
171
- fn test_fee_rate_governor_burn ( ) {
172
- let mut fee_rate_governor = FeeRateGovernor :: default ( ) ;
173
- assert_eq ! ( fee_rate_governor . burn( 2 ) , ( 1 , 1 ) ) ;
177
+ fn test_fee_calculator_burn ( ) {
178
+ let mut fee_calculator = FeeCalculator :: default ( ) ;
179
+ assert_eq ! ( fee_calculator . burn( 2 ) , ( 1 , 1 ) ) ;
174
180
175
- fee_rate_governor . burn_percent = 0 ;
176
- assert_eq ! ( fee_rate_governor . burn( 2 ) , ( 2 , 0 ) ) ;
181
+ fee_calculator . burn_percent = 0 ;
182
+ assert_eq ! ( fee_calculator . burn( 2 ) , ( 2 , 0 ) ) ;
177
183
178
- fee_rate_governor . burn_percent = 100 ;
179
- assert_eq ! ( fee_rate_governor . burn( 2 ) , ( 0 , 2 ) ) ;
184
+ fee_calculator . burn_percent = 100 ;
185
+ assert_eq ! ( fee_calculator . burn( 2 ) , ( 0 , 2 ) ) ;
180
186
}
181
187
182
188
#[ test]
0 commit comments