@@ -13,7 +13,7 @@ enum FeeStrategy {
13
13
}
14
14
15
15
impl Miner {
16
- pub async fn dynamic_fee ( & self ) -> Option < u64 > {
16
+ pub async fn dynamic_fee ( & self ) -> Result < u64 , String > {
17
17
// Get url
18
18
let rpc_url = self
19
19
. dynamic_fee_url
@@ -35,7 +35,7 @@ impl Miner {
35
35
} else if host. contains ( "rpcpool.com" ) {
36
36
FeeStrategy :: Triton
37
37
} else {
38
- return None ;
38
+ return Err ( "Dynamic fees not supported by this RPC." . to_string ( ) ) ;
39
39
} ;
40
40
41
41
// Build fee estimate request
@@ -109,45 +109,43 @@ impl Miner {
109
109
FeeStrategy :: Helius => response[ "result" ] [ "priorityFeeEstimate" ]
110
110
. as_f64 ( )
111
111
. map ( |fee| fee as u64 )
112
- . ok_or_else ( || format ! ( "Failed to parse priority fee. Response: {:?}" , response) )
113
- . unwrap ( ) ,
112
+ . ok_or_else ( || format ! ( "Failed to parse priority fee response: {:?}" , response) ) ,
114
113
FeeStrategy :: Quiknode => response[ "result" ] [ "per_compute_unit" ] [ "medium" ]
115
- . as_f64 ( )
116
- . map ( |fee| fee as u64 )
117
- . ok_or_else ( || {
118
- format ! ( "Failed to parse priority fee. Response: {:?}" , response)
119
- } )
120
- . unwrap ( ) ,
114
+ . as_f64 ( )
115
+ . map ( |fee| fee as u64 )
116
+ . ok_or_else ( || format ! ( "Please enable the Solana Priority Fee API add-on in your QuickNode account." ) ) ,
121
117
FeeStrategy :: Alchemy => response[ "result" ]
122
- . as_array ( )
118
+ . as_array ( )
123
119
. and_then ( |arr| {
124
- Some (
125
- arr. into_iter ( )
126
- . map ( |v| v[ "prioritizationFee" ] . as_u64 ( ) . unwrap ( ) )
127
- . collect :: < Vec < u64 > > ( ) ,
128
- )
129
- } )
130
- . and_then ( |fees| {
131
- Some ( ( ( fees. iter ( ) . sum :: < u64 > ( ) as f32 / fees. len ( ) as f32 ) . ceil ( ) * 1.2 )
132
- as u64 )
133
- } )
134
- . ok_or_else ( || {
135
- format ! ( "Failed to parse priority fee. Response: {:?}" , response)
136
- } )
137
- . unwrap ( ) ,
120
+ Some (
121
+ arr. into_iter ( )
122
+ . map ( |v| v[ "prioritizationFee" ] . as_u64 ( ) . unwrap ( ) )
123
+ . collect :: < Vec < u64 > > ( ) ,
124
+ )
125
+ } )
126
+ . and_then ( |fees| {
127
+ Some (
128
+ ( ( fees. iter ( ) . sum :: < u64 > ( ) as f32 / fees. len ( ) as f32 ) . ceil ( ) * 1.2 ) as u64 ,
129
+ )
130
+ } )
131
+ . ok_or_else ( || format ! ( "Failed to parse priority fee response: {:?}" , response) ) ,
138
132
FeeStrategy :: Triton => response[ "result" ]
139
133
. as_array ( )
140
134
. and_then ( |arr| arr. last ( ) )
141
135
. and_then ( |last| last[ "prioritizationFee" ] . as_u64 ( ) )
142
- . ok_or_else ( || format ! ( "Failed to parse priority fee. Response: {:?}" , response) )
143
- . unwrap ( ) ,
136
+ . ok_or_else ( || format ! ( "Failed to parse priority fee response: {:?}" , response) ) ,
144
137
} ;
145
138
146
139
// Check if the calculated fee is higher than max
147
- if let Some ( max_fee) = self . priority_fee {
148
- Some ( calculated_fee. min ( max_fee) )
149
- } else {
150
- Some ( calculated_fee)
140
+ match calculated_fee {
141
+ Err ( err) => Err ( err) ,
142
+ Ok ( fee) => {
143
+ if let Some ( max_fee) = self . priority_fee {
144
+ Ok ( fee. min ( max_fee) )
145
+ } else {
146
+ Ok ( fee)
147
+ }
148
+ }
151
149
}
152
150
}
153
151
}
0 commit comments