From f42f13cd8da6f6d956542498207260edc79c758c Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Thu, 12 Dec 2024 11:47:43 +1100 Subject: [PATCH 1/2] Simplify closures in call to fold Remove unnecessary code comments and make the closure variable names more terse with no loss of clarity. Refactor only, no logic changes. --- bitcoin/src/blockdata/transaction.rs | 29 ++++++++++------------------ 1 file changed, 10 insertions(+), 19 deletions(-) diff --git a/bitcoin/src/blockdata/transaction.rs b/bitcoin/src/blockdata/transaction.rs index 35c0ff606..4abb83a8a 100644 --- a/bitcoin/src/blockdata/transaction.rs +++ b/bitcoin/src/blockdata/transaction.rs @@ -851,29 +851,20 @@ where I: IntoIterator, O: IntoIterator, { - // sum input_weights, input_count and count of inputs with witness data - let (input_count, input_weight, inputs_with_witnesses) = inputs.into_iter().fold( - (0, 0, 0), - |(count, input_weight, inputs_with_witnesses), prediction| { + let (input_count, input_weight, inputs_with_witnesses) = + inputs.into_iter().fold((0, 0, 0), |(count, weight, with_witnesses), prediction| { ( count + 1, - input_weight + prediction.total_weight().to_wu() as usize, - inputs_with_witnesses + (prediction.witness_size > 0) as usize, + weight + prediction.total_weight().to_wu() as usize, + with_witnesses + (prediction.witness_size > 0) as usize, ) - }, - ); + }); + + let (output_count, output_scripts_size) = + output_script_lens.into_iter().fold((0, 0), |(count, scripts_size), script_len| { + (count + 1, scripts_size + script_len + compact_size::encoded_size(script_len)) + }); - // This fold() does two things: - // 1) Counts the outputs and returns the sum as `output_count`. - // 2) Sums the output script sizes and returns the sum as `output_scripts_size`. - // script_len + the length of a VarInt struct that stores the value of script_len - let (output_count, output_scripts_size) = output_script_lens.into_iter().fold( - (0, 0), - |(output_count, total_scripts_size), script_len| { - let script_size = script_len + compact_size::encoded_size(script_len); - (output_count + 1, total_scripts_size + script_size) - }, - ); predict_weight_internal( input_count, input_weight, From 0135cddc32462490528dea549fd8db4c0a30646e Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Thu, 12 Dec 2024 11:56:18 +1100 Subject: [PATCH 2/2] Refactor non_input_size Looks like the formatter has put code comments in the wrong place. Refactor the `non_input_size` line so that the formatter does not mess with it. --- bitcoin/src/blockdata/transaction.rs | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/bitcoin/src/blockdata/transaction.rs b/bitcoin/src/blockdata/transaction.rs index 4abb83a8a..dace1376f 100644 --- a/bitcoin/src/blockdata/transaction.rs +++ b/bitcoin/src/blockdata/transaction.rs @@ -883,15 +883,11 @@ const fn predict_weight_internal( ) -> Weight { // The value field of a TxOut is 8 bytes. let output_size = 8 * output_count + output_scripts_size; - let non_input_size = - // version: - 4 + - // count varints: - compact_size::encoded_size_const(input_count as u64) + - compact_size::encoded_size_const(output_count as u64) + - output_size + - // lock_time - 4; + let non_input_size = 4 // version + + compact_size::encoded_size_const(input_count as u64) // Can't use ToU64 in const context. + + compact_size::encoded_size_const(output_count as u64) + + output_size + + 4; // locktime let weight = if inputs_with_witnesses == 0 { non_input_size * 4 + input_weight } else {