@@ -23,14 +23,14 @@ struct PrioritizationFeeMetrics {
23
23
// Count of attempted update on finalized PrioritizationFee
24
24
attempted_update_on_finalized_fee_count : Saturating < u64 > ,
25
25
26
- // Total prioritization fees included in this slot.
26
+ // Total transaction fees of non-vote transactions included in this slot.
27
27
total_prioritization_fee : Saturating < u64 > ,
28
28
29
- // The minimum prioritization fee of prioritized transactions in this slot.
30
- min_prioritization_fee : Option < u64 > ,
29
+ // The minimum compute unit price of prioritized transactions in this slot.
30
+ min_compute_unit_price : Option < u64 > ,
31
31
32
- // The maximum prioritization fee of prioritized transactions in this slot.
33
- max_prioritization_fee : u64 ,
32
+ // The maximum compute unit price of prioritized transactions in this slot.
33
+ max_compute_unit_price : u64 ,
34
34
35
35
// Accumulated time spent on tracking prioritization fee for each slot.
36
36
total_update_elapsed_us : Saturating < u64 > ,
@@ -49,20 +49,20 @@ impl PrioritizationFeeMetrics {
49
49
self . attempted_update_on_finalized_fee_count += val;
50
50
}
51
51
52
- fn update_prioritization_fee ( & mut self , fee : u64 ) {
53
- if fee == 0 {
52
+ fn update_compute_unit_price ( & mut self , cu_price : u64 ) {
53
+ if cu_price == 0 {
54
54
self . non_prioritized_transactions_count += 1 ;
55
55
return ;
56
56
}
57
57
58
58
// update prioritized transaction fee metrics.
59
59
self . prioritized_transactions_count += 1 ;
60
60
61
- self . max_prioritization_fee = self . max_prioritization_fee . max ( fee ) ;
61
+ self . max_compute_unit_price = self . max_compute_unit_price . max ( cu_price ) ;
62
62
63
- self . min_prioritization_fee = Some (
64
- self . min_prioritization_fee
65
- . map_or ( fee , |min_fee| min_fee . min ( fee ) ) ,
63
+ self . min_compute_unit_price = Some (
64
+ self . min_compute_unit_price
65
+ . map_or ( cu_price , |min_cu_price| min_cu_price . min ( cu_price ) ) ,
66
66
) ;
67
67
}
68
68
@@ -75,8 +75,8 @@ impl PrioritizationFeeMetrics {
75
75
attempted_update_on_finalized_fee_count :
76
76
Saturating ( attempted_update_on_finalized_fee_count) ,
77
77
total_prioritization_fee : Saturating ( total_prioritization_fee) ,
78
- min_prioritization_fee ,
79
- max_prioritization_fee ,
78
+ min_compute_unit_price ,
79
+ max_compute_unit_price ,
80
80
total_update_elapsed_us : Saturating ( total_update_elapsed_us) ,
81
81
} = self ;
82
82
datapoint_info ! (
@@ -113,11 +113,11 @@ impl PrioritizationFeeMetrics {
113
113
i64
114
114
) ,
115
115
(
116
- "min_prioritization_fee " ,
117
- min_prioritization_fee . unwrap_or( 0 ) as i64 ,
116
+ "min_compute_unit_price " ,
117
+ min_compute_unit_price . unwrap_or( 0 ) as i64 ,
118
118
i64
119
119
) ,
120
- ( "max_prioritization_fee " , max_prioritization_fee as i64 , i64 ) ,
120
+ ( "max_compute_unit_price " , max_compute_unit_price as i64 , i64 ) ,
121
121
(
122
122
"total_update_elapsed_us" ,
123
123
total_update_elapsed_us as i64 ,
@@ -144,11 +144,11 @@ pub enum PrioritizationFeeError {
144
144
/// Block minimum prioritization fee stats, includes the minimum prioritization fee for a transaction in this
145
145
/// block; and the minimum fee for each writable account in all transactions in this block. The only relevant
146
146
/// write account minimum fees are those greater than the block minimum transaction fee, because the minimum fee needed to land
147
- /// a transaction is determined by Max( min_transaction_fee , min_writable_account_fees(key), ...)
147
+ /// a transaction is determined by Max( min_compute_unit_price , min_writable_account_fees(key), ...)
148
148
#[ derive( Debug ) ]
149
149
pub struct PrioritizationFee {
150
150
// The minimum prioritization fee of transactions that landed in this block.
151
- min_transaction_fee : u64 ,
151
+ min_compute_unit_price : u64 ,
152
152
153
153
// The minimum prioritization fee of each writable account in transactions in this block.
154
154
min_writable_account_fees : HashMap < Pubkey , u64 > ,
@@ -164,7 +164,7 @@ pub struct PrioritizationFee {
164
164
impl Default for PrioritizationFee {
165
165
fn default ( ) -> Self {
166
166
PrioritizationFee {
167
- min_transaction_fee : u64:: MAX ,
167
+ min_compute_unit_price : u64:: MAX ,
168
168
min_writable_account_fees : HashMap :: new ( ) ,
169
169
is_finalized : false ,
170
170
metrics : PrioritizationFeeMetrics :: default ( ) ,
@@ -174,25 +174,30 @@ impl Default for PrioritizationFee {
174
174
175
175
impl PrioritizationFee {
176
176
/// Update self for minimum transaction fee in the block and minimum fee for each writable account.
177
- pub fn update ( & mut self , transaction_fee : u64 , writable_accounts : Vec < Pubkey > ) {
177
+ pub fn update (
178
+ & mut self ,
179
+ compute_unit_price : u64 ,
180
+ prioritization_fee : u64 ,
181
+ writable_accounts : Vec < Pubkey > ,
182
+ ) {
178
183
let ( _, update_us) = measure_us ! ( {
179
184
if !self . is_finalized {
180
- if transaction_fee < self . min_transaction_fee {
181
- self . min_transaction_fee = transaction_fee ;
185
+ if compute_unit_price < self . min_compute_unit_price {
186
+ self . min_compute_unit_price = compute_unit_price ;
182
187
}
183
188
184
189
for write_account in writable_accounts {
185
190
self . min_writable_account_fees
186
191
. entry( write_account)
187
192
. and_modify( |write_lock_fee| {
188
- * write_lock_fee = std:: cmp:: min( * write_lock_fee, transaction_fee )
193
+ * write_lock_fee = std:: cmp:: min( * write_lock_fee, compute_unit_price )
189
194
} )
190
- . or_insert( transaction_fee ) ;
195
+ . or_insert( compute_unit_price ) ;
191
196
}
192
197
193
198
self . metrics
194
- . accumulate_total_prioritization_fee( transaction_fee ) ;
195
- self . metrics. update_prioritization_fee ( transaction_fee ) ;
199
+ . accumulate_total_prioritization_fee( prioritization_fee ) ;
200
+ self . metrics. update_compute_unit_price ( compute_unit_price ) ;
196
201
} else {
197
202
self . metrics
198
203
. increment_attempted_update_on_finalized_fee_count( 1 ) ;
@@ -207,7 +212,7 @@ impl PrioritizationFee {
207
212
fn prune_irrelevant_writable_accounts ( & mut self ) {
208
213
self . metrics . total_writable_accounts_count = self . get_writable_accounts_count ( ) as u64 ;
209
214
self . min_writable_account_fees
210
- . retain ( |_, account_fee| account_fee > & mut self . min_transaction_fee ) ;
215
+ . retain ( |_, account_fee| account_fee > & mut self . min_compute_unit_price ) ;
211
216
self . metrics . relevant_writable_accounts_count = self . get_writable_accounts_count ( ) as u64 ;
212
217
}
213
218
@@ -220,8 +225,8 @@ impl PrioritizationFee {
220
225
Ok ( ( ) )
221
226
}
222
227
223
- pub fn get_min_transaction_fee ( & self ) -> Option < u64 > {
224
- ( self . min_transaction_fee != u64:: MAX ) . then_some ( self . min_transaction_fee )
228
+ pub fn get_min_compute_unit_price ( & self ) -> Option < u64 > {
229
+ ( self . min_compute_unit_price != u64:: MAX ) . then_some ( self . min_compute_unit_price )
225
230
}
226
231
227
232
pub fn get_writable_account_fee ( & self , key : & Pubkey ) -> Option < u64 > {
@@ -250,22 +255,23 @@ mod tests {
250
255
use { super :: * , solana_pubkey:: Pubkey } ;
251
256
252
257
#[ test]
253
- fn test_update_prioritization_fee ( ) {
258
+ fn test_update_compute_unit_price ( ) {
254
259
solana_logger:: setup ( ) ;
255
260
let write_account_a = Pubkey :: new_unique ( ) ;
256
261
let write_account_b = Pubkey :: new_unique ( ) ;
257
262
let write_account_c = Pubkey :: new_unique ( ) ;
263
+ let tx_fee = 10 ;
258
264
259
265
let mut prioritization_fee = PrioritizationFee :: default ( ) ;
260
- assert ! ( prioritization_fee. get_min_transaction_fee ( ) . is_none( ) ) ;
266
+ assert ! ( prioritization_fee. get_min_compute_unit_price ( ) . is_none( ) ) ;
261
267
262
268
// Assert for 1st transaction
263
- // [fee , write_accounts...] --> [block, account_a, account_b, account_c]
269
+ // [cu_px , write_accounts...] --> [block, account_a, account_b, account_c]
264
270
// -----------------------------------------------------------------------
265
271
// [5, a, b ] --> [5, 5, 5, nil ]
266
272
{
267
- prioritization_fee. update ( 5 , vec ! [ write_account_a, write_account_b] ) ;
268
- assert_eq ! ( 5 , prioritization_fee. get_min_transaction_fee ( ) . unwrap( ) ) ;
273
+ prioritization_fee. update ( 5 , tx_fee , vec ! [ write_account_a, write_account_b] ) ;
274
+ assert_eq ! ( 5 , prioritization_fee. get_min_compute_unit_price ( ) . unwrap( ) ) ;
269
275
assert_eq ! (
270
276
5 ,
271
277
prioritization_fee
@@ -284,12 +290,12 @@ mod tests {
284
290
}
285
291
286
292
// Assert for second transaction:
287
- // [fee , write_accounts...] --> [block, account_a, account_b, account_c]
293
+ // [cu_px , write_accounts...] --> [block, account_a, account_b, account_c]
288
294
// -----------------------------------------------------------------------
289
295
// [9, b, c ] --> [5, 5, 5, 9 ]
290
296
{
291
- prioritization_fee. update ( 9 , vec ! [ write_account_b, write_account_c] ) ;
292
- assert_eq ! ( 5 , prioritization_fee. get_min_transaction_fee ( ) . unwrap( ) ) ;
297
+ prioritization_fee. update ( 9 , tx_fee , vec ! [ write_account_b, write_account_c] ) ;
298
+ assert_eq ! ( 5 , prioritization_fee. get_min_compute_unit_price ( ) . unwrap( ) ) ;
293
299
assert_eq ! (
294
300
5 ,
295
301
prioritization_fee
@@ -311,12 +317,12 @@ mod tests {
311
317
}
312
318
313
319
// Assert for third transaction:
314
- // [fee , write_accounts...] --> [block, account_a, account_b, account_c]
320
+ // [cu_px , write_accounts...] --> [block, account_a, account_b, account_c]
315
321
// -----------------------------------------------------------------------
316
322
// [2, a, c ] --> [2, 2, 5, 2 ]
317
323
{
318
- prioritization_fee. update ( 2 , vec ! [ write_account_a, write_account_c] ) ;
319
- assert_eq ! ( 2 , prioritization_fee. get_min_transaction_fee ( ) . unwrap( ) ) ;
324
+ prioritization_fee. update ( 2 , tx_fee , vec ! [ write_account_a, write_account_c] ) ;
325
+ assert_eq ! ( 2 , prioritization_fee. get_min_compute_unit_price ( ) . unwrap( ) ) ;
320
326
assert_eq ! (
321
327
2 ,
322
328
prioritization_fee
@@ -341,7 +347,7 @@ mod tests {
341
347
{
342
348
prioritization_fee. prune_irrelevant_writable_accounts ( ) ;
343
349
assert_eq ! ( 1 , prioritization_fee. min_writable_account_fees. len( ) ) ;
344
- assert_eq ! ( 2 , prioritization_fee. get_min_transaction_fee ( ) . unwrap( ) ) ;
350
+ assert_eq ! ( 2 , prioritization_fee. get_min_compute_unit_price ( ) . unwrap( ) ) ;
345
351
assert ! ( prioritization_fee
346
352
. get_writable_account_fee( & write_account_a)
347
353
. is_none( ) ) ;
@@ -357,6 +363,25 @@ mod tests {
357
363
}
358
364
}
359
365
366
+ #[ test]
367
+ fn test_total_prioritization_fee ( ) {
368
+ let mut prioritization_fee = PrioritizationFee :: default ( ) ;
369
+ prioritization_fee. update ( 0 , 10 , vec ! [ ] ) ;
370
+ assert_eq ! ( 10 , prioritization_fee. metrics. total_prioritization_fee. 0 ) ;
371
+
372
+ prioritization_fee. update ( 10 , u64:: MAX , vec ! [ ] ) ;
373
+ assert_eq ! (
374
+ u64 :: MAX ,
375
+ prioritization_fee. metrics. total_prioritization_fee. 0
376
+ ) ;
377
+
378
+ prioritization_fee. update ( 10 , 100 , vec ! [ ] ) ;
379
+ assert_eq ! (
380
+ u64 :: MAX ,
381
+ prioritization_fee. metrics. total_prioritization_fee. 0
382
+ ) ;
383
+ }
384
+
360
385
#[ test]
361
386
fn test_mark_block_completed ( ) {
362
387
let mut prioritization_fee = PrioritizationFee :: default ( ) ;
0 commit comments