Merge rust-bitcoin/rust-bitcoin#3663: Fix internal weight calculation
f961f3c0ec
Add test (yancy)3352032892
Fix internal weight calculation (yancy) Pull request description: A fix for261c8d8ae6
. Maybe it's better to roll back that commit instead. Clearly there needs to be a test or two added here as well since this change causes not test failures. ACKs for top commit: apoelstra: ACK f961f3c0eca4e9b175761756f48699012b63d70a; successfully ran local tests sanket1729: utACKf961f3c0ec
tcharding: ACKf961f3c0ec
Tree-SHA512: e6bb6d492b6a85f328bdfae6d0e5df9ea48c9c06bd0c310816826c893163bd0a6071af893fa7012fbd4eea0394bc8997277151486807fb8bd06ac78ce8cfc5fd
This commit is contained in:
commit
4123f2c00f
|
@ -920,14 +920,14 @@ pub const fn predict_weight_from_slices(
|
||||||
inputs: &[InputWeightPrediction],
|
inputs: &[InputWeightPrediction],
|
||||||
output_script_lens: &[usize],
|
output_script_lens: &[usize],
|
||||||
) -> Weight {
|
) -> Weight {
|
||||||
let mut partial_input_weight = 0;
|
let mut input_weight = 0;
|
||||||
let mut inputs_with_witnesses = 0;
|
let mut inputs_with_witnesses = 0;
|
||||||
|
|
||||||
// for loops not supported in const fn
|
// for loops not supported in const fn
|
||||||
let mut i = 0;
|
let mut i = 0;
|
||||||
while i < inputs.len() {
|
while i < inputs.len() {
|
||||||
let prediction = inputs[i];
|
let prediction = inputs[i];
|
||||||
partial_input_weight += prediction.witness_weight().to_wu() as usize;
|
input_weight += prediction.total_weight().to_wu() as usize;
|
||||||
inputs_with_witnesses += (prediction.witness_size > 0) as usize;
|
inputs_with_witnesses += (prediction.witness_size > 0) as usize;
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
@ -943,7 +943,7 @@ pub const fn predict_weight_from_slices(
|
||||||
|
|
||||||
predict_weight_internal(
|
predict_weight_internal(
|
||||||
inputs.len(),
|
inputs.len(),
|
||||||
partial_input_weight,
|
input_weight,
|
||||||
inputs_with_witnesses,
|
inputs_with_witnesses,
|
||||||
output_script_lens.len(),
|
output_script_lens.len(),
|
||||||
output_scripts_size,
|
output_scripts_size,
|
||||||
|
@ -1964,6 +1964,21 @@ mod tests {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn weight_prediction_const_from_slices() {
|
||||||
|
let predict = [
|
||||||
|
InputWeightPrediction::P2WPKH_MAX,
|
||||||
|
InputWeightPrediction::NESTED_P2WPKH_MAX,
|
||||||
|
InputWeightPrediction::P2PKH_COMPRESSED_MAX,
|
||||||
|
InputWeightPrediction::P2PKH_UNCOMPRESSED_MAX,
|
||||||
|
InputWeightPrediction::P2TR_KEY_DEFAULT_SIGHASH,
|
||||||
|
InputWeightPrediction::P2TR_KEY_NON_DEFAULT_SIGHASH
|
||||||
|
];
|
||||||
|
|
||||||
|
let weight = predict_weight_from_slices(&predict, &[1]);
|
||||||
|
assert_eq!(weight, Weight::from_wu(2493));
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn sequence_debug_output() {
|
fn sequence_debug_output() {
|
||||||
let seq = Sequence::from_seconds_floor(1000);
|
let seq = Sequence::from_seconds_floor(1000);
|
||||||
|
|
Loading…
Reference in New Issue