using dust value from rust-bitcoin
This commit is contained in:
		
							parent
							
								
									77bce06caf
								
							
						
					
					
						commit
						ca682819b3
					
				| @ -53,7 +53,7 @@ use address_validator::AddressValidator; | ||||
| use coin_selection::DefaultCoinSelectionAlgorithm; | ||||
| use signer::{SignOptions, Signer, SignerOrdering, SignersContainer}; | ||||
| use tx_builder::{BumpFee, CreateTx, FeePolicy, TxBuilder, TxParams}; | ||||
| use utils::{check_nlocktime, check_nsequence_rbf, After, Older, SecpCtx, DUST_LIMIT_SATOSHI}; | ||||
| use utils::{check_nlocktime, check_nsequence_rbf, After, Older, SecpCtx}; | ||||
| 
 | ||||
| use crate::blockchain::{Blockchain, Progress}; | ||||
| use crate::database::memory::MemoryDatabase; | ||||
| @ -601,7 +601,7 @@ where | ||||
|         let recipients = params.recipients.iter().map(|(r, v)| (r, *v)); | ||||
| 
 | ||||
|         for (index, (script_pubkey, value)) in recipients.enumerate() { | ||||
|             if value.is_dust() && !script_pubkey.is_provably_unspendable() { | ||||
|             if value.is_dust(script_pubkey) && !script_pubkey.is_provably_unspendable() { | ||||
|                 return Err(Error::OutputBelowDustLimit(index)); | ||||
|             } | ||||
| 
 | ||||
| @ -677,9 +677,9 @@ where | ||||
| 
 | ||||
|         if tx.output.is_empty() { | ||||
|             if params.drain_to.is_some() { | ||||
|                 if drain_val.is_dust() { | ||||
|                 if drain_val.is_dust(&drain_output.script_pubkey) { | ||||
|                     return Err(Error::InsufficientFunds { | ||||
|                         needed: DUST_LIMIT_SATOSHI, | ||||
|                         needed: drain_output.script_pubkey.dust_value().as_sat(), | ||||
|                         available: drain_val, | ||||
|                     }); | ||||
|                 } | ||||
| @ -688,7 +688,7 @@ where | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         if drain_val.is_dust() { | ||||
|         if drain_val.is_dust(&drain_output.script_pubkey) { | ||||
|             fee_amount += drain_val; | ||||
|         } else { | ||||
|             drain_output.value = drain_val; | ||||
| @ -3424,7 +3424,7 @@ pub(crate) mod test { | ||||
|             .unwrap(); | ||||
| 
 | ||||
|         let mut builder = wallet.build_fee_bump(txid).unwrap(); | ||||
|         builder.fee_rate(FeeRate::from_sat_per_vb(140.0)); | ||||
|         builder.fee_rate(FeeRate::from_sat_per_vb(141.0)); | ||||
|         let (psbt, details) = builder.finish().unwrap(); | ||||
| 
 | ||||
|         assert_eq!( | ||||
|  | ||||
| @ -9,13 +9,11 @@ | ||||
| // You may not use this file except in accordance with one or both of these
 | ||||
| // licenses.
 | ||||
| 
 | ||||
| use bitcoin::blockdata::script::Script; | ||||
| use bitcoin::secp256k1::{All, Secp256k1}; | ||||
| 
 | ||||
| use miniscript::{MiniscriptKey, Satisfier, ToPublicKey}; | ||||
| 
 | ||||
| // De-facto standard "dust limit" (even though it should change based on the output type)
 | ||||
| pub const DUST_LIMIT_SATOSHI: u64 = 546; | ||||
| 
 | ||||
| // MSB of the nSequence. If set there's no consensus-constraint, so it must be disabled when
 | ||||
| // spending using CSV in order to enforce CSV rules
 | ||||
| pub(crate) const SEQUENCE_LOCKTIME_DISABLE_FLAG: u32 = 1 << 31; | ||||
| @ -34,12 +32,12 @@ pub(crate) const BLOCKS_TIMELOCK_THRESHOLD: u32 = 500000000; | ||||
| // encourage the usage of this trait.
 | ||||
| pub trait IsDust { | ||||
|     /// Check whether or not a value is below dust limit
 | ||||
|     fn is_dust(&self) -> bool; | ||||
|     fn is_dust(&self, script: &Script) -> bool; | ||||
| } | ||||
| 
 | ||||
| impl IsDust for u64 { | ||||
|     fn is_dust(&self) -> bool { | ||||
|         *self <= DUST_LIMIT_SATOSHI | ||||
|     fn is_dust(&self, script: &Script) -> bool { | ||||
|         *self <= script.dust_value().as_sat() | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user