pub enum TransactionSpendingCondition {
Singlesig(SinglesigSpendingCondition),
Multisig(MultisigSpendingCondition),
}
Variants§
Singlesig(SinglesigSpendingCondition)
Multisig(MultisigSpendingCondition)
Implementations§
Source§impl TransactionSpendingCondition
impl TransactionSpendingCondition
pub fn new_singlesig_p2pkh( pubkey: Secp256k1PublicKey, ) -> Option<TransactionSpendingCondition>
pub fn new_singlesig_p2wpkh( pubkey: Secp256k1PublicKey, ) -> Option<TransactionSpendingCondition>
pub fn new_multisig_p2sh( num_sigs: u16, pubkeys: Vec<Secp256k1PublicKey>, ) -> Option<TransactionSpendingCondition>
pub fn new_multisig_p2wsh( num_sigs: u16, pubkeys: Vec<Secp256k1PublicKey>, ) -> Option<TransactionSpendingCondition>
Sourcepub fn new_initial_sighash() -> TransactionSpendingCondition
pub fn new_initial_sighash() -> TransactionSpendingCondition
When committing to the fact that a transaction is sponsored, the origin doesn’t know anything else. Instead, it commits to this sentinel value as its sponsor. It is intractable to calculate a private key that could generate this.
pub fn num_signatures(&self) -> u16
pub fn signatures_required(&self) -> u16
pub fn nonce(&self) -> u64
pub fn tx_fee(&self) -> u64
pub fn set_nonce(&mut self, n: u64)
pub fn set_tx_fee(&mut self, tx_fee: u64)
pub fn get_tx_fee(&self) -> u64
Sourcepub fn address_mainnet(&self) -> StacksAddress
pub fn address_mainnet(&self) -> StacksAddress
Get the mainnet account address of the spending condition
Sourcepub fn address_testnet(&self) -> StacksAddress
pub fn address_testnet(&self) -> StacksAddress
Get the mainnet account address of the spending condition
pub fn make_sighash_presign( cur_sighash: &Txid, cond_code: &TransactionAuthFlags, tx_fee: u64, nonce: u64, ) -> Txid
pub fn make_sighash_postsign( cur_sighash: &Txid, pubkey: &Secp256k1PublicKey, sig: &MessageSignature, ) -> Txid
Sourcepub fn next_signature(
cur_sighash: &Txid,
cond_code: &TransactionAuthFlags,
tx_fee: u64,
nonce: u64,
privk: &Secp256k1PrivateKey,
) -> Result<(MessageSignature, Txid), CodecError>
pub fn next_signature( cur_sighash: &Txid, cond_code: &TransactionAuthFlags, tx_fee: u64, nonce: u64, privk: &Secp256k1PrivateKey, ) -> Result<(MessageSignature, Txid), CodecError>
Linear-complexity signing algorithm – we sign a rolling hash over all data committed to by the previous signer (instead of naively re-serializing the transaction each time), as well as over new data provided by this key (excluding its own public key or signature, which are authenticated by the spending condition’s key hash). Calculates and returns the next signature and sighash, which the subsequent private key must sign.
Sourcepub fn next_verification(
cur_sighash: &Txid,
cond_code: &TransactionAuthFlags,
tx_fee: u64,
nonce: u64,
key_encoding: &TransactionPublicKeyEncoding,
sig: &MessageSignature,
) -> Result<(Secp256k1PublicKey, Txid), CodecError>
pub fn next_verification( cur_sighash: &Txid, cond_code: &TransactionAuthFlags, tx_fee: u64, nonce: u64, key_encoding: &TransactionPublicKeyEncoding, sig: &MessageSignature, ) -> Result<(Secp256k1PublicKey, Txid), CodecError>
Linear-complexity verifying algorithm – we verify a rolling hash over all data committed to by order of signers (instead of re-serializing the tranasction each time). Calculates the next sighash and public key, which the next verifier must verify. Used by StacksTransaction::verify*
Sourcepub fn verify(
&self,
initial_sighash: &Txid,
cond_code: &TransactionAuthFlags,
) -> Result<Txid, CodecError>
pub fn verify( &self, initial_sighash: &Txid, cond_code: &TransactionAuthFlags, ) -> Result<Txid, CodecError>
Verify all signatures
Trait Implementations§
Source§impl Clone for TransactionSpendingCondition
impl Clone for TransactionSpendingCondition
Source§fn clone(&self) -> TransactionSpendingCondition
fn clone(&self) -> TransactionSpendingCondition
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreSource§impl Debug for TransactionSpendingCondition
impl Debug for TransactionSpendingCondition
Source§impl<'de> Deserialize<'de> for TransactionSpendingCondition
impl<'de> Deserialize<'de> for TransactionSpendingCondition
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl PartialEq for TransactionSpendingCondition
impl PartialEq for TransactionSpendingCondition
Source§fn eq(&self, other: &TransactionSpendingCondition) -> bool
fn eq(&self, other: &TransactionSpendingCondition) -> bool
self
and other
values to be equal, and is used by ==
.Source§impl StacksMessageCodec for TransactionSpendingCondition
impl StacksMessageCodec for TransactionSpendingCondition
Source§fn consensus_serialize<W: Write>(&self, fd: &mut W) -> Result<(), CodecError>
fn consensus_serialize<W: Write>(&self, fd: &mut W) -> Result<(), CodecError>
fd
fn consensus_deserialize<R: Read>( fd: &mut R, ) -> Result<TransactionSpendingCondition, CodecError>
impl StructuralPartialEq for TransactionSpendingCondition
Auto Trait Implementations§
impl Freeze for TransactionSpendingCondition
impl RefUnwindSafe for TransactionSpendingCondition
impl Send for TransactionSpendingCondition
impl Sync for TransactionSpendingCondition
impl Unpin for TransactionSpendingCondition
impl UnwindSafe for TransactionSpendingCondition
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.