refactor(bdk): display CreateTxError::FeeRateTooLow in sat/vb
Also modify a unit test `test_bump_fee_low_fee_rate` to additionally assert the expected error message
This commit is contained in:
		
							parent
							
								
									09bd86e2d8
								
							
						
					
					
						commit
						89608ddd0f
					
				| @ -168,8 +168,10 @@ where | |||||||
|             CreateTxError::FeeRateTooLow { required } => { |             CreateTxError::FeeRateTooLow { required } => { | ||||||
|                 write!( |                 write!( | ||||||
|                     f, |                     f, | ||||||
|                     "Fee rate too low: required {} sat/kwu", |                     // Note: alternate fmt as sat/vb (ceil) available in bitcoin-0.31
 | ||||||
|                     required.to_sat_per_kwu() |                     //"Fee rate too low: required {required:#}"
 | ||||||
|  |                     "Fee rate too low: required {} sat/vb", | ||||||
|  |                     crate::floating_rate!(required) | ||||||
|                 ) |                 ) | ||||||
|             } |             } | ||||||
|             CreateTxError::NoUtxosSelected => { |             CreateTxError::NoUtxosSelected => { | ||||||
|  | |||||||
| @ -2563,6 +2563,17 @@ fn create_signers<E: IntoWalletDescriptor>( | |||||||
|     Ok((signers, change_signers)) |     Ok((signers, change_signers)) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /// Transforms a [`FeeRate`] to `f64` with unit as sat/vb.
 | ||||||
|  | #[macro_export] | ||||||
|  | #[doc(hidden)] | ||||||
|  | macro_rules! floating_rate { | ||||||
|  |     ($rate:expr) => {{ | ||||||
|  |         use $crate::bitcoin::blockdata::constants::WITNESS_SCALE_FACTOR; | ||||||
|  |         // sat_kwu / 250.0 -> sat_vb
 | ||||||
|  |         $rate.to_sat_per_kwu() as f64 / ((1000 / WITNESS_SCALE_FACTOR) as f64) | ||||||
|  |     }}; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #[macro_export] | #[macro_export] | ||||||
| #[doc(hidden)] | #[doc(hidden)] | ||||||
| /// Macro for getting a wallet for use in a doctest
 | /// Macro for getting a wallet for use in a doctest
 | ||||||
|  | |||||||
| @ -1488,7 +1488,6 @@ fn test_bump_fee_confirmed_tx() { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[test] | #[test] | ||||||
| #[should_panic(expected = "FeeRateTooLow")] |  | ||||||
| fn test_bump_fee_low_fee_rate() { | fn test_bump_fee_low_fee_rate() { | ||||||
|     let (mut wallet, _) = get_funded_wallet(get_test_wpkh()); |     let (mut wallet, _) = get_funded_wallet(get_test_wpkh()); | ||||||
|     let addr = wallet.get_address(New); |     let addr = wallet.get_address(New); | ||||||
| @ -1497,6 +1496,7 @@ fn test_bump_fee_low_fee_rate() { | |||||||
|         .add_recipient(addr.script_pubkey(), 25_000) |         .add_recipient(addr.script_pubkey(), 25_000) | ||||||
|         .enable_rbf(); |         .enable_rbf(); | ||||||
|     let psbt = builder.finish().unwrap(); |     let psbt = builder.finish().unwrap(); | ||||||
|  |     let feerate = psbt.fee_rate().unwrap(); | ||||||
| 
 | 
 | ||||||
|     let tx = psbt.extract_tx(); |     let tx = psbt.extract_tx(); | ||||||
|     let txid = tx.txid(); |     let txid = tx.txid(); | ||||||
| @ -1506,8 +1506,18 @@ fn test_bump_fee_low_fee_rate() { | |||||||
|         .unwrap(); |         .unwrap(); | ||||||
| 
 | 
 | ||||||
|     let mut builder = wallet.build_fee_bump(txid).unwrap(); |     let mut builder = wallet.build_fee_bump(txid).unwrap(); | ||||||
|     builder.fee_rate(FeeRate::from_sat_per_vb_unchecked(1)); |     builder.fee_rate(FeeRate::BROADCAST_MIN); | ||||||
|     builder.finish().unwrap(); |     let res = builder.finish(); | ||||||
|  |     assert_matches!( | ||||||
|  |         res, | ||||||
|  |         Err(CreateTxError::FeeRateTooLow { .. }), | ||||||
|  |         "expected FeeRateTooLow error" | ||||||
|  |     ); | ||||||
|  | 
 | ||||||
|  |     let required = feerate.to_sat_per_kwu() + 250; // +1 sat/vb
 | ||||||
|  |     let sat_vb = required as f64 / 250.0; | ||||||
|  |     let expect = format!("Fee rate too low: required {} sat/vb", sat_vb); | ||||||
|  |     assert_eq!(res.unwrap_err().to_string(), expect); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| #[test] | #[test] | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user