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 } => { | ||||
|                 write!( | ||||
|                     f, | ||||
|                     "Fee rate too low: required {} sat/kwu", | ||||
|                     required.to_sat_per_kwu() | ||||
|                     // Note: alternate fmt as sat/vb (ceil) available in bitcoin-0.31
 | ||||
|                     //"Fee rate too low: required {required:#}"
 | ||||
|                     "Fee rate too low: required {} sat/vb", | ||||
|                     crate::floating_rate!(required) | ||||
|                 ) | ||||
|             } | ||||
|             CreateTxError::NoUtxosSelected => { | ||||
|  | ||||
| @ -2563,6 +2563,17 @@ fn create_signers<E: IntoWalletDescriptor>( | ||||
|     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] | ||||
| #[doc(hidden)] | ||||
| /// Macro for getting a wallet for use in a doctest
 | ||||
|  | ||||
| @ -1488,7 +1488,6 @@ fn test_bump_fee_confirmed_tx() { | ||||
| } | ||||
| 
 | ||||
| #[test] | ||||
| #[should_panic(expected = "FeeRateTooLow")] | ||||
| fn test_bump_fee_low_fee_rate() { | ||||
|     let (mut wallet, _) = get_funded_wallet(get_test_wpkh()); | ||||
|     let addr = wallet.get_address(New); | ||||
| @ -1497,6 +1496,7 @@ fn test_bump_fee_low_fee_rate() { | ||||
|         .add_recipient(addr.script_pubkey(), 25_000) | ||||
|         .enable_rbf(); | ||||
|     let psbt = builder.finish().unwrap(); | ||||
|     let feerate = psbt.fee_rate().unwrap(); | ||||
| 
 | ||||
|     let tx = psbt.extract_tx(); | ||||
|     let txid = tx.txid(); | ||||
| @ -1506,8 +1506,18 @@ fn test_bump_fee_low_fee_rate() { | ||||
|         .unwrap(); | ||||
| 
 | ||||
|     let mut builder = wallet.build_fee_bump(txid).unwrap(); | ||||
|     builder.fee_rate(FeeRate::from_sat_per_vb_unchecked(1)); | ||||
|     builder.finish().unwrap(); | ||||
|     builder.fee_rate(FeeRate::BROADCAST_MIN); | ||||
|     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] | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user