From 0498f7b7b7d43cc015d6788efe826df25d6156a5 Mon Sep 17 00:00:00 2001 From: jrakibi Date: Mon, 14 Apr 2025 20:07:41 +0800 Subject: [PATCH] Remove Option return from `minimal_non_dust` we replace Option return type with Amount in minimal_non_dust - Use `.expect("dust_relay_fee or script length should not be absurdly large")` to handle overflow from .checked_mul() `.expect()` is only triggered if the value calculateed overflows u64 such an overflow would require a script size exceeding ~6.15 petabytes --- bitcoin/src/blockdata/script/borrowed.rs | 5 +++-- bitcoin/src/blockdata/script/tests.rs | 4 ++-- bitcoin/src/blockdata/transaction.rs | 4 ++-- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/bitcoin/src/blockdata/script/borrowed.rs b/bitcoin/src/blockdata/script/borrowed.rs index c048ba367..481145e8d 100644 --- a/bitcoin/src/blockdata/script/borrowed.rs +++ b/bitcoin/src/blockdata/script/borrowed.rs @@ -261,7 +261,7 @@ crate::internal_macros::define_extension_trait! { /// Returns the minimum value an output with this script should have in order to be /// broadcastable on today’s Bitcoin network. #[deprecated(since = "0.32.0", note = "use `minimal_non_dust` etc. instead")] - fn dust_value(&self) -> Option { self.minimal_non_dust() } + fn dust_value(&self) -> Amount { self.minimal_non_dust() } /// Returns the minimum value an output with this script should have in order to be /// broadcastable on today's Bitcoin network. @@ -272,8 +272,9 @@ crate::internal_macros::define_extension_trait! { /// To use a custom value, use [`minimal_non_dust_custom`]. /// /// [`minimal_non_dust_custom`]: Script::minimal_non_dust_custom - fn minimal_non_dust(&self) -> Option { + fn minimal_non_dust(&self) -> Amount { self.minimal_non_dust_internal(DUST_RELAY_TX_FEE.into()) + .expect("dust_relay_fee or script length should not be absurdly large") } /// Returns the minimum value an output with this script should have in order to be diff --git a/bitcoin/src/blockdata/script/tests.rs b/bitcoin/src/blockdata/script/tests.rs index 27dcd32ea..6d5068104 100644 --- a/bitcoin/src/blockdata/script/tests.rs +++ b/bitcoin/src/blockdata/script/tests.rs @@ -684,7 +684,7 @@ fn default_dust_value() { // well-known scriptPubKey types. let script_p2wpkh = Builder::new().push_int_unchecked(0).push_slice([42; 20]).into_script(); assert!(script_p2wpkh.is_p2wpkh()); - assert_eq!(script_p2wpkh.minimal_non_dust(), Some(Amount::from_sat_u32(294))); + assert_eq!(script_p2wpkh.minimal_non_dust(), Amount::from_sat_u32(294)); assert_eq!( script_p2wpkh.minimal_non_dust_custom(FeeRate::from_sat_per_vb_unchecked(6)), Some(Amount::from_sat_u32(588)) @@ -698,7 +698,7 @@ fn default_dust_value() { .push_opcode(OP_CHECKSIG) .into_script(); assert!(script_p2pkh.is_p2pkh()); - assert_eq!(script_p2pkh.minimal_non_dust(), Some(Amount::from_sat_u32(546))); + assert_eq!(script_p2pkh.minimal_non_dust(), Amount::from_sat_u32(546)); assert_eq!( script_p2pkh.minimal_non_dust_custom(FeeRate::from_sat_per_vb_unchecked(6)), Some(Amount::from_sat_u32(1092)) diff --git a/bitcoin/src/blockdata/transaction.rs b/bitcoin/src/blockdata/transaction.rs index 341fba105..bdb7a383b 100644 --- a/bitcoin/src/blockdata/transaction.rs +++ b/bitcoin/src/blockdata/transaction.rs @@ -183,8 +183,8 @@ crate::internal_macros::define_extension_trait! { /// To use a custom value, use [`minimal_non_dust_custom`]. /// /// [`minimal_non_dust_custom`]: TxOut::minimal_non_dust_custom - fn minimal_non_dust(script_pubkey: ScriptBuf) -> Option { - Some(TxOut { value: script_pubkey.minimal_non_dust()?, script_pubkey }) + fn minimal_non_dust(script_pubkey: ScriptBuf) -> TxOut { + TxOut { value: script_pubkey.minimal_non_dust(), script_pubkey } } /// Constructs a new `TxOut` with given script and the smallest possible `value` that is **not** dust