Merge rust-bitcoin/rust-bitcoin#1820: Expose valid (min, max) difficulty transition thresholds
8e6f953aa7
Expose valid (min, max) difficulty transition thresholds (Wilmer Paulino) Pull request description: Once `U256` was made private, we lost the ability to check whether a valid difficulty transition was made in the chain, since `Target` doesn't expose any operations. We only choose to expose `Shl<u32>` and `Shr<u32>` such that we can compute the min and max target thresholds allowed for a difficulty transition. This is something we realized was missing after bumping to `rust-bitcoin v0.30.0` in `rust-lightning`, specifically for our `lightning-block-sync` crate. It may also be worth having a helper in `rust-bitcoin` that checks a header properly builds upon the previous, but that can be left for future work. ACKs for top commit: Kixunil: ACK8e6f953aa7
sanket1729: ACK8e6f953aa7
. Sorry, was confused by some details. apoelstra: ACK8e6f953aa7
Tree-SHA512: 740dd64089426463dc6a19726d5a562276bd0966e0e31af8e1e67b28d18945644ac0e50be3cf0cc7fa604acc3d2c5b912a77a7caa69d8cff85f70fd57e5328c5
This commit is contained in:
commit
4abbdc20a0
|
@ -234,6 +234,20 @@ impl Target {
|
|||
/// [`difficulty`]: Target::difficulty
|
||||
#[cfg_attr(all(test, mutate), mutate)]
|
||||
pub fn difficulty_float(&self) -> f64 { TARGET_MAX_F64 / self.0.to_f64() }
|
||||
|
||||
/// Computes the minimum valid [`Target`] threshold allowed for a block in which a difficulty
|
||||
/// adjustment occurs.
|
||||
///
|
||||
/// The difficulty can only decrease or increase by a factor of 4 max on each difficulty
|
||||
/// adjustment period.
|
||||
pub fn min_difficulty_transition_threshold(&self) -> Self { Self(self.0 >> 2) }
|
||||
|
||||
/// Computes the maximum valid [`Target`] threshold allowed for a block in which a difficulty
|
||||
/// adjustment occurs.
|
||||
///
|
||||
/// The difficulty can only decrease or increase by a factor of 4 max on each difficulty
|
||||
/// adjustment period.
|
||||
pub fn max_difficulty_transition_threshold(&self) -> Self { Self(self.0 << 2) }
|
||||
}
|
||||
do_impl!(Target);
|
||||
|
||||
|
|
Loading…
Reference in New Issue