pub enum LockTime {
    Blocks(Height),
    Time(Time),
}
Expand description

A relative lock time value, representing either a block height or time (512 second intervals).

The relative::LockTime type does not have any constructors, this is by design, please use Sequence::to_relative_lock_time to create a relative lock time.

Relevant BIPs

Variants§

§

Blocks(Height)

A block height lock time value.

§

Time(Time)

A 512 second time interval value.

Implementations§

source§

impl LockTime

source

pub fn is_satisfied_by(&self, h: Height, t: Time) -> bool

Returns true if this relative::LockTime is satisfied by either height or time.

Examples


// Users that have chain data can get the current height and time to check against a lock.
let height_and_time = (current_time(), current_height());  // tuple order does not matter.
assert!(lock.is_satisfied_by(current_height(), current_time()));
source

pub fn is_implied_by(&self, other: LockTime) -> bool

Returns true if satisfaction of other lock time implies satisfaction of this relative::LockTime.

A lock time can only be satisfied by n blocks being mined or n seconds passing. If you have two lock times (same unit) then the larger lock time being satisfied implies (in a mathematical sense) the smaller one being satisfied.

This function is useful when checking sequence values against a lock, first one checks the sequence represents a relative lock time by converting to LockTime then use this function to see if satisfaction of the newly created lock time would imply satisfaction of self.

Can also be used to remove the smaller value of two OP_CHECKSEQUENCEVERIFY operations within one branch of the script.

Examples


let satisfied = match test_sequence.to_relative_lock_time() {
    None => false, // Handle non-lock-time case.
    Some(test_lock) => lock.is_implied_by(test_lock),
};
assert!(satisfied);
source

pub fn is_satisfied_by_height(&self, h: Height) -> Result<bool, Error>

Returns true if this relative::LockTime is satisfied by Height.

Errors

Returns an error if this lock is not lock-by-height.

Examples

let height: u16 = 100;
let lock = Sequence::from_height(height).to_relative_lock_time().expect("valid height");
assert!(lock.is_satisfied_by_height(Height::from(height+1)).expect("a height"));
source

pub fn is_satisfied_by_time(&self, t: Time) -> Result<bool, Error>

Returns true if this relative::LockTime is satisfied by Time.

Errors

Returns an error if this lock is not lock-by-time.

Examples

let intervals: u16 = 70; // approx 10 hours;
let lock = Sequence::from_512_second_intervals(intervals).to_relative_lock_time().expect("valid time");
assert!(lock.is_satisfied_by_time(Time::from_512_second_intervals(intervals + 10)).expect("a time"));

Trait Implementations§

source§

impl Clone for LockTime

source§

fn clone(&self) -> LockTime

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl Debug for LockTime

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<'de> Deserialize<'de> for LockTime

source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
source§

impl Display for LockTime

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl From<Height> for LockTime

source§

fn from(h: Height) -> Self

Converts to this type from the input type.
source§

impl From<Time> for LockTime

source§

fn from(t: Time) -> Self

Converts to this type from the input type.
source§

impl Hash for LockTime

source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · source§

fn hash_slice<H>(data: &[Self], state: &mut H)where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
source§

impl PartialEq<LockTime> for LockTime

source§

fn eq(&self, other: &LockTime) -> bool

This method tests for self and other values to be equal, and is used by ==.
1.0.0 · source§

fn ne(&self, other: &Rhs) -> bool

This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
source§

impl Serialize for LockTime

source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
source§

impl Copy for LockTime

source§

impl Eq for LockTime

source§

impl StructuralEq for LockTime

source§

impl StructuralPartialEq for LockTime

Auto Trait Implementations§

Blanket Implementations§

source§

impl<T> Any for Twhere T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for Twhere T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for Twhere U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T> ToOwned for Twhere T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T> ToString for Twhere T: Display + ?Sized,

source§

default fn to_string(&self) -> String

Converts the given value to a String. Read more
source§

impl<T, U> TryFrom<U> for Twhere U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for Twhere U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
source§

impl<T> DeserializeOwned for Twhere T: for<'de> Deserialize<'de>,