@@ -26,6 +26,7 @@ use bdk_wallet::bitcoin::Transaction as BdkTransaction;
26
26
use bdk_wallet:: bitcoin:: TxIn as BdkTxIn ;
27
27
use bdk_wallet:: bitcoin:: TxOut as BdkTxOut ;
28
28
use bdk_wallet:: bitcoin:: Txid as BitcoinTxid ;
29
+ use bdk_wallet:: bitcoin:: Weight ;
29
30
use bdk_wallet:: bitcoin:: Wtxid as BitcoinWtxid ;
30
31
use bdk_wallet:: miniscript:: psbt:: PsbtExt ;
31
32
use bdk_wallet:: serde_json;
@@ -156,6 +157,30 @@ impl FeeRate {
156
157
pub fn to_sat_per_kwu ( & self ) -> u64 {
157
158
self . 0 . to_sat_per_kwu ( )
158
159
}
160
+
161
+ /// Calculates fee in satoshis by multiplying this fee rate by weight, in virtual bytes, returning `None` if overflow occurred.
162
+ ///
163
+ /// This is equivalent to converting vb to weight using Weight::from_vb and then calling Self::fee_wu(weight).
164
+ pub fn fee_vb ( & self , vb : u64 ) -> Option < Arc < Amount > > {
165
+ let rust_amount: BdkAmount = self . 0 . fee_vb ( vb) ?;
166
+ let amount: Amount = rust_amount. into ( ) ;
167
+ Some ( Arc :: new ( amount) )
168
+
169
+ // The whole code above should be replaceable by the following line:
170
+ // self.0.fee_vb(vb).map(Arc::new(Amount::from))
171
+ // But in practice you get uniffi compilation errors on it. Not sure what is going on with it,
172
+ // but the code we use works just as well.
173
+ }
174
+
175
+ /// Calculates fee by multiplying this fee rate by weight, in weight units, returning `None` if overflow occurred.
176
+ //
177
+ // This is equivalent to Self::checked_mul_by_weight().
178
+ pub fn fee_wu ( & self , wu : u64 ) -> Option < Arc < Amount > > {
179
+ let weight: Weight = Weight :: from_wu ( wu) ;
180
+ let rust_amount: BdkAmount = self . 0 . fee_wu ( weight) ?;
181
+ let amount: Amount = rust_amount. into ( ) ;
182
+ Some ( Arc :: new ( amount) )
183
+ }
159
184
}
160
185
161
186
impl Display for FeeRate {
0 commit comments