test: Reproduce #660 conditions
Issue #660 has been fixed by 32ae95f463f62c42c6d6aec62c1832a30298fce4, when we moved the change calculation inside the coin selection. This commit just adds a test to make sure that the problem is fixed.
This commit is contained in:
		
							parent
							
								
									50af51da5a
								
							
						
					
					
						commit
						2756411ef7
					
				| @ -4050,6 +4050,38 @@ pub(crate) mod test { | |||||||
|         builder.finish().unwrap(); |         builder.finish().unwrap(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     #[test] | ||||||
|  |     fn test_fee_amount_negative_drain_val() { | ||||||
|  |         // While building the transaction, bdk would calculate the drain_value
 | ||||||
|  |         // as
 | ||||||
|  |         // current_delta - fee_amount - drain_fee
 | ||||||
|  |         // using saturating_sub, meaning that if the result would end up negative,
 | ||||||
|  |         // it'll remain to zero instead.
 | ||||||
|  |         // This caused a bug in master where we would calculate the wrong fee
 | ||||||
|  |         // for a transaction.
 | ||||||
|  |         // See https://github.com/bitcoindevkit/bdk/issues/660
 | ||||||
|  |         let (wallet, descriptors, _) = get_funded_wallet(get_test_wpkh()); | ||||||
|  |         let send_to = Address::from_str("tb1ql7w62elx9ucw4pj5lgw4l028hmuw80sndtntxt").unwrap(); | ||||||
|  |         let fee_rate = FeeRate::from_sat_per_vb(2.01); | ||||||
|  |         let incoming_txid = crate::populate_test_db!( | ||||||
|  |             wallet.database.borrow_mut(), | ||||||
|  |             testutils! (@tx ( (@external descriptors, 0) => 8859 ) (@confirmations 1)), | ||||||
|  |             Some(100), | ||||||
|  |         ); | ||||||
|  | 
 | ||||||
|  |         let mut builder = wallet.build_tx(); | ||||||
|  |         builder | ||||||
|  |             .add_recipient(send_to.script_pubkey(), 8630) | ||||||
|  |             .add_utxo(OutPoint::new(incoming_txid, 0)) | ||||||
|  |             .unwrap() | ||||||
|  |             .enable_rbf() | ||||||
|  |             .fee_rate(fee_rate); | ||||||
|  |         let (psbt, details) = builder.finish().unwrap(); | ||||||
|  | 
 | ||||||
|  |         assert!(psbt.inputs.len() == 1); | ||||||
|  |         assert_fee_rate!(psbt, details.fee.unwrap_or(0), fee_rate, @add_signature); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|     #[test] |     #[test] | ||||||
|     fn test_sign_single_xprv() { |     fn test_sign_single_xprv() { | ||||||
|         let (wallet, _, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)"); |         let (wallet, _, _) = get_funded_wallet("wpkh(tprv8ZgxMBicQKsPd3EupYiPRhaMooHKUHJxNsTfYuScep13go8QFfHdtkG9nRkFGb7busX4isf6X9dURGCoKgitaApQ6MupRhZMcELAxTBRJgS/*)"); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user