Merge rust-bitcoin/rust-bitcoin#4302: Add push_relative_lock_time() and deprecate push_sequence()
ebaf162a96
Add push_relative_lock_time() and deprecate push_sequence() (Erick Cestari) Pull request description: This pr improves the script builder API to better align with Bitcoin semantics when working with relative timelocks: - Add `push_relative_lock_time()` method that takes a `relative::LockTime` parameter, which correctly represents the semantic meaning when working with CHECKSEQUENCEVERIFY - Deprecate `push_sequence()` in favor of `push_relative_lock_time()` to avoid confusion between sequence numbers and relative timelocks This addresses a potential confusion point in the API where developers might incorrectly push raw sequence numbers in scripts when what they actually need is to push a relative locktime value that will be checked against the transaction's sequence numbers by CHECKSEQUENCEVERIFY. Closes #4301 ACKs for top commit: apoelstra: ACK ebaf162a962494329c6cb5f6d375a6a4a97fe83b; successfully ran local tests tcharding: ACKebaf162a96
Tree-SHA512: 52c37b6e8bbcaa3f9346c5fd5db26eba69169bce13f915906df95fdc65204067fd75f803f8b5adad76978c9baad553c99281628736db4d1d317b149ab257d81f
This commit is contained in:
commit
9f7f659591
|
@ -2,6 +2,8 @@
|
|||
|
||||
use core::fmt;
|
||||
|
||||
use primitives::relative;
|
||||
|
||||
use super::{opcode_to_verify, write_scriptint, Error, PushBytes, Script, ScriptBuf};
|
||||
use crate::locktime::absolute;
|
||||
use crate::opcodes::all::*;
|
||||
|
@ -115,7 +117,26 @@ impl Builder {
|
|||
self.push_int_unchecked(lock_time.to_consensus_u32().into())
|
||||
}
|
||||
|
||||
/// Adds instructions to push a relative lock time onto the stack.
|
||||
///
|
||||
/// This is used when creating scripts that use CHECKSEQUENCEVERIFY (CSV) to enforce
|
||||
/// relative time locks.
|
||||
pub fn push_relative_lock_time(self, lock_time: relative::LockTime) -> Builder {
|
||||
self.push_int_unchecked(lock_time.to_consensus_u32().into())
|
||||
}
|
||||
|
||||
/// Adds instructions to push a sequence number onto the stack.
|
||||
///
|
||||
/// # Deprecated
|
||||
/// This method is deprecated in favor of `push_relative_lock_time`.
|
||||
///
|
||||
/// In Bitcoin script semantics, when using CHECKSEQUENCEVERIFY, you typically
|
||||
/// want to push a relative locktime value to be compared against the input's
|
||||
/// sequence number, not the sequence number itself.
|
||||
#[deprecated(
|
||||
since = "TBD",
|
||||
note = "Use push_relative_lock_time instead for working with timelocks in scripts"
|
||||
)]
|
||||
pub fn push_sequence(self, sequence: Sequence) -> Builder {
|
||||
self.push_int_unchecked(sequence.to_consensus_u32().into())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue