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 coin_selection::DefaultCoinSelectionAlgorithm;
|
||||||
use signer::{SignOptions, Signer, SignerOrdering, SignersContainer};
|
use signer::{SignOptions, Signer, SignerOrdering, SignersContainer};
|
||||||
use tx_builder::{BumpFee, CreateTx, FeePolicy, TxBuilder, TxParams};
|
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::blockchain::{Blockchain, Progress};
|
||||||
use crate::database::memory::MemoryDatabase;
|
use crate::database::memory::MemoryDatabase;
|
||||||
@ -601,7 +601,7 @@ where
|
|||||||
let recipients = params.recipients.iter().map(|(r, v)| (r, *v));
|
let recipients = params.recipients.iter().map(|(r, v)| (r, *v));
|
||||||
|
|
||||||
for (index, (script_pubkey, value)) in recipients.enumerate() {
|
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));
|
return Err(Error::OutputBelowDustLimit(index));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -677,9 +677,9 @@ where
|
|||||||
|
|
||||||
if tx.output.is_empty() {
|
if tx.output.is_empty() {
|
||||||
if params.drain_to.is_some() {
|
if params.drain_to.is_some() {
|
||||||
if drain_val.is_dust() {
|
if drain_val.is_dust(&drain_output.script_pubkey) {
|
||||||
return Err(Error::InsufficientFunds {
|
return Err(Error::InsufficientFunds {
|
||||||
needed: DUST_LIMIT_SATOSHI,
|
needed: drain_output.script_pubkey.dust_value().as_sat(),
|
||||||
available: drain_val,
|
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;
|
fee_amount += drain_val;
|
||||||
} else {
|
} else {
|
||||||
drain_output.value = drain_val;
|
drain_output.value = drain_val;
|
||||||
@ -3424,7 +3424,7 @@ pub(crate) mod test {
|
|||||||
.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(140.0));
|
builder.fee_rate(FeeRate::from_sat_per_vb(141.0));
|
||||||
let (psbt, details) = builder.finish().unwrap();
|
let (psbt, details) = builder.finish().unwrap();
|
||||||
|
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
|
@ -9,13 +9,11 @@
|
|||||||
// You may not use this file except in accordance with one or both of these
|
// You may not use this file except in accordance with one or both of these
|
||||||
// licenses.
|
// licenses.
|
||||||
|
|
||||||
|
use bitcoin::blockdata::script::Script;
|
||||||
use bitcoin::secp256k1::{All, Secp256k1};
|
use bitcoin::secp256k1::{All, Secp256k1};
|
||||||
|
|
||||||
use miniscript::{MiniscriptKey, Satisfier, ToPublicKey};
|
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
|
// 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
|
// spending using CSV in order to enforce CSV rules
|
||||||
pub(crate) const SEQUENCE_LOCKTIME_DISABLE_FLAG: u32 = 1 << 31;
|
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.
|
// encourage the usage of this trait.
|
||||||
pub trait IsDust {
|
pub trait IsDust {
|
||||||
/// Check whether or not a value is below dust limit
|
/// 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 {
|
impl IsDust for u64 {
|
||||||
fn is_dust(&self) -> bool {
|
fn is_dust(&self, script: &Script) -> bool {
|
||||||
*self <= DUST_LIMIT_SATOSHI
|
*self <= script.dust_value().as_sat()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user