Skip to main content

PushDrop

Struct PushDrop 

Source
pub struct PushDrop {
    pub fields: Vec<Vec<u8>>,
    pub private_key: Option<PrivateKey>,
    pub sighash_type: u32,
}
Expand description

PushDrop script template for embedding data with spending control.

Creates a locking script that pushes data fields onto the stack, drops them with OP_DROP operations, then verifies a signature against a public key (OP_CHECKSIG).

Fields§

§fields: Vec<Vec<u8>>

Data fields to embed in the script.

§private_key: Option<PrivateKey>

Private key for signing (used for both lock pubkey and unlock signature).

§sighash_type: u32

Sighash scope for signing (default: SIGHASH_ALL | SIGHASH_FORKID).

Implementations§

Source§

impl PushDrop

Source

pub fn new(fields: Vec<Vec<u8>>, key: PrivateKey) -> Self

Create a PushDrop template with data fields and a key for locking and unlocking.

The private key’s public key will be used in the locking script, and the private key will be used for signing in the unlocking script.

Source

pub fn lock_only(fields: Vec<Vec<u8>>) -> Self

Create a PushDrop template for locking only (no signing capability).

Requires knowing the public key bytes to embed in the script. Use new() instead if you also need unlock capability.

Source

pub fn unlock(&self, preimage: &[u8]) -> Result<UnlockingScript, ScriptError>

Create an unlocking script from a sighash preimage.

Produces: <signature_DER + sighash_byte>

Source

pub fn estimate_unlock_length(&self) -> usize

Estimate the byte length of the unlocking script.

PushDrop unlock is just a signature: approximately 74 bytes (1 push opcode + up to 72 DER sig bytes + 1 sighash byte).

Source

pub fn decode(script: &LockingScript) -> Result<PushDrop, ScriptError>

Decode a PushDrop locking script, recovering the embedded data fields.

Parses the script pattern: <field_1> <field_2> ... <field_N> OP_DROP|OP_2DROP... <pubkey> OP_CHECKSIG

Returns a PushDrop with the extracted fields, no private key, and default sighash.

Trait Implementations§

Source§

impl Clone for PushDrop

Source§

fn clone(&self) -> PushDrop

Returns a duplicate 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 PushDrop

Source§

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

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

impl ScriptTemplateLock for PushDrop

Source§

fn lock(&self) -> Result<LockingScript, ScriptError>

Create a PushDrop locking script.

Structure: <field_1> <field_2> ... <field_N> OP_DROP|OP_2DROP... <pubkey> OP_CHECKSIG

Each field is pushed as data, then removed with OP_DROP (or OP_2DROP for pairs). The final element on stack will be verified against the embedded public key via OP_CHECKSIG.

Source§

impl ScriptTemplateUnlock for PushDrop

Source§

fn sign(&self, preimage: &[u8]) -> Result<UnlockingScript, ScriptError>

Sign a transaction input and produce an unlocking script. Read more
Source§

fn estimate_length(&self) -> Result<usize, ScriptError>

Estimate the byte length of the unlocking script (for fee calculation).

Auto Trait Implementations§

Blanket Implementations§

Source§

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

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

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

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

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

Source§

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

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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 T
where 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 T
where T: Clone,

Source§

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

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 T
where U: TryFrom<T>,

Source§

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.