From 0517b18a01cc3b1bad9b7101e400055656da44db Mon Sep 17 00:00:00 2001 From: benthecarman Date: Tue, 2 May 2023 02:01:37 -0500 Subject: [PATCH] Incorporate low-R values into estimate signature size --- lightning/src/chain/keysinterface.rs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/lightning/src/chain/keysinterface.rs b/lightning/src/chain/keysinterface.rs index b1290708b..3ccab2ce9 100644 --- a/lightning/src/chain/keysinterface.rs +++ b/lightning/src/chain/keysinterface.rs @@ -85,6 +85,8 @@ pub struct DelayedPaymentOutputDescriptor { } impl DelayedPaymentOutputDescriptor { /// The maximum length a well-formed witness spending one of these should have. + /// Note: If you have the grind_signatures feature enabled, this will be at least 1 byte + /// shorter. // Calculated as 1 byte length + 73 byte signature, 1 byte empty vec push, 1 byte length plus // redeemscript push length. pub const MAX_WITNESS_LENGTH: usize = 1 + 73 + 1 + chan_utils::REVOKEABLE_REDEEMSCRIPT_MAX_LENGTH + 1; @@ -117,6 +119,8 @@ pub struct StaticPaymentOutputDescriptor { } impl StaticPaymentOutputDescriptor { /// The maximum length a well-formed witness spending one of these should have. + /// Note: If you have the grind_signatures feature enabled, this will be at least 1 byte + /// shorter. // Calculated as 1 byte legnth + 73 byte signature, 1 byte empty vec push, 1 byte length plus // redeemscript push length. pub const MAX_WITNESS_LENGTH: usize = 1 + 73 + 34; @@ -1188,6 +1192,8 @@ impl KeysManager { witness: Witness::new(), }); witness_weight += StaticPaymentOutputDescriptor::MAX_WITNESS_LENGTH; + #[cfg(feature = "grind_signatures")] + { witness_weight -= 1; } // Guarantees a low R signature input_value += descriptor.output.value; if !output_set.insert(descriptor.outpoint) { return Err(()); } }, @@ -1199,6 +1205,8 @@ impl KeysManager { witness: Witness::new(), }); witness_weight += DelayedPaymentOutputDescriptor::MAX_WITNESS_LENGTH; + #[cfg(feature = "grind_signatures")] + { witness_weight -= 1; } // Guarantees a low R signature input_value += descriptor.output.value; if !output_set.insert(descriptor.outpoint) { return Err(()); } }, @@ -1210,6 +1218,8 @@ impl KeysManager { witness: Witness::new(), }); witness_weight += 1 + 73 + 34; + #[cfg(feature = "grind_signatures")] + { witness_weight -= 1; } // Guarantees a low R signature input_value += output.value; if !output_set.insert(*outpoint) { return Err(()); } } -- 2.39.5