From 00b71a670fcedeca255e69fe5e3d08e5a9d1b72e Mon Sep 17 00:00:00 2001 From: "Tobin C. Harding" Date: Fri, 24 Jan 2025 09:05:00 +1100 Subject: [PATCH] Use from_sat_unchecked for hardcoded ints We have an `_unchecked` amount constructor that makes no assumptions about the argument. We would like to start enforcing MAX_MONEY but the diff to introduce this is massive. In an effort to make it smaller we can do all the hardcoded ints first. We did this already but a bunch more snuck in or were missed. In any amount constructor that passes in a hardcoded const as a decimal integer (i.e., not hex) use the `_unchecked` version. Done in preparation for enforcing MAX_MONEY. --- bitcoin/examples/sighash.rs | 4 ++-- units/src/amount/tests.rs | 6 +++--- units/src/fee.rs | 18 +++++++++--------- 3 files changed, 14 insertions(+), 14 deletions(-) diff --git a/bitcoin/examples/sighash.rs b/bitcoin/examples/sighash.rs index 15439b46c..4f1f4d441 100644 --- a/bitcoin/examples/sighash.rs +++ b/bitcoin/examples/sighash.rs @@ -148,7 +148,7 @@ fn sighash_p2wpkh() { let inp_idx = 0; //output value from the referenced vout:0 from the referenced tx: //bitcoin-cli getrawtransaction 752d675b9cc0bd14e0bd23969effee0005ad6d7e550dcc832f0216c7ffd4e15c 3 - let ref_out_value = Amount::from_sat(200000000); + let ref_out_value = Amount::from_sat_unchecked(200000000); println!("\nsighash_p2wpkh:"); compute_sighash_p2wpkh(&raw_tx, inp_idx, ref_out_value); @@ -178,7 +178,7 @@ fn sighash_p2wsh_multisig_2x2() { //For the witness transaction sighash computation, we need its referenced output's value from the original transaction: //bitcoin-cli getrawtransaction 2845399a8cd7a52733f9f9d0e0b8b6c5d1c88aea4cee09f8d8fa762912b49e1b 3 //we need vout 0 value in sats: - let ref_out_value = Amount::from_sat(968240); + let ref_out_value = Amount::from_sat_unchecked(968240); println!("\nsighash_p2wsh_multisig_2x2:"); compute_sighash_p2wsh(&raw_tx, 0, ref_out_value); diff --git a/units/src/amount/tests.rs b/units/src/amount/tests.rs index 27d5607fe..33eeb5f8d 100644 --- a/units/src/amount/tests.rs +++ b/units/src/amount/tests.rs @@ -142,7 +142,7 @@ fn mul_div() { #[test] fn neg() { - let amount = -SignedAmount::from_sat(2); + let amount = -SignedAmount::from_sat_unchecked(2); assert_eq!(amount.to_sat(), -2); } @@ -231,7 +231,7 @@ fn amount_checked_div_by_weight_floor() { #[cfg(feature = "alloc")] #[test] fn amount_checked_div_by_fee_rate() { - let amount = Amount::from_sat(1000); + let amount = Amount::from_sat_unchecked(1000); let fee_rate = FeeRate::from_sat_per_kwu(2); // Test floor division @@ -244,7 +244,7 @@ fn amount_checked_div_by_fee_rate() { assert_eq!(weight, Weight::from_wu(500_000)); // Same result for exact division // Test truncation behavior - let amount = Amount::from_sat(1000); + let amount = Amount::from_sat_unchecked(1000); let fee_rate = FeeRate::from_sat_per_kwu(3); let floor_weight = amount.checked_div_by_fee_rate_floor(fee_rate).unwrap(); let ceil_weight = amount.checked_div_by_fee_rate_ceil(fee_rate).unwrap(); diff --git a/units/src/fee.rs b/units/src/fee.rs index 1f0a535b4..833399279 100644 --- a/units/src/fee.rs +++ b/units/src/fee.rs @@ -197,7 +197,7 @@ mod tests { #[test] fn fee_rate_div_by_weight() { - let fee_rate = Amount::from_sat(329) / Weight::from_wu(381); + let fee_rate = Amount::from_sat_unchecked(329) / Weight::from_wu(381); assert_eq!(fee_rate, FeeRate::from_sat_per_kwu(863)); } @@ -208,7 +208,7 @@ mod tests { let fee_rate = FeeRate::from_sat_per_vb(2).unwrap(); let weight = Weight::from_vb(3).unwrap(); - assert_eq!(fee_rate.fee_wu(weight).unwrap(), Amount::from_sat(6)); + assert_eq!(fee_rate.fee_wu(weight).unwrap(), Amount::from_sat_unchecked(6)); } #[test] @@ -217,7 +217,7 @@ mod tests { assert!(fee_overflow.is_none()); let fee_rate = FeeRate::from_sat_per_vb(2).unwrap(); - assert_eq!(fee_rate.fee_vb(3).unwrap(), Amount::from_sat(6)); + assert_eq!(fee_rate.fee_vb(3).unwrap(), Amount::from_sat_unchecked(6)); } #[test] @@ -227,7 +227,7 @@ mod tests { .unwrap() .checked_mul_by_weight(weight) .expect("expected Amount"); - assert_eq!(Amount::from_sat(100), fee); + assert_eq!(Amount::from_sat_unchecked(100), fee); let fee = FeeRate::from_sat_per_kwu(10).checked_mul_by_weight(Weight::MAX); assert!(fee.is_none()); @@ -235,14 +235,14 @@ mod tests { let weight = Weight::from_vb(3).unwrap(); let fee_rate = FeeRate::from_sat_per_vb(3).unwrap(); let fee = fee_rate.checked_mul_by_weight(weight).unwrap(); - assert_eq!(Amount::from_sat(9), fee); + assert_eq!(Amount::from_sat_unchecked(9), fee); let weight = Weight::from_wu(381); let fee_rate = FeeRate::from_sat_per_kwu(864); let fee = fee_rate.checked_mul_by_weight(weight).unwrap(); // 381 * 0.864 yields 329.18. // The result is then rounded up to 330. - assert_eq!(fee, Amount::from_sat(330)); + assert_eq!(fee, Amount::from_sat_unchecked(330)); } #[test] @@ -250,7 +250,7 @@ mod tests { fn multiply() { let two = FeeRate::from_sat_per_vb(2).unwrap(); let three = Weight::from_vb(3).unwrap(); - let six = Amount::from_sat(6); + let six = Amount::from_sat_unchecked(6); assert_eq!(two * three, six); } @@ -258,13 +258,13 @@ mod tests { #[test] fn amount_div_by_fee_rate() { // Test exact division - let amount = Amount::from_sat(1000); + let amount = Amount::from_sat_unchecked(1000); let fee_rate = FeeRate::from_sat_per_kwu(2); let weight = amount / fee_rate; assert_eq!(weight, Weight::from_wu(500_000)); // Test truncation behavior - let amount = Amount::from_sat(1000); + let amount = Amount::from_sat_unchecked(1000); let fee_rate = FeeRate::from_sat_per_kwu(3); let weight = amount / fee_rate; // 1000 * 1000 = 1,000,000 msats