pub struct Ticket {
    pub channel_id: HashBase<CoreWrapper<Keccak256Core>>,
    pub amount: Balance<WxHOPR>,
    pub index: u64,
    pub index_offset: u32,
    pub encoded_win_prob: [u8; 7],
    pub channel_epoch: u32,
    pub challenge: EthereumChallenge,
    pub signature: Option<ChainSignature<NativeEcdsaSigningEngine>>,
}Expand description
Contains the overall description of a ticket with a signature.
This structure is not considered verified, unless the Ticket::verify or Ticket::sign methods are called.
§Ticket state machine
See the entire state machine describing the relations of different ticket types below:
flowchart TB
    A[Ticket] -->|verify| B(VerifiedTicket)
    B --> |leak| A
    A --> |sign| B
    B --> |into_unacknowledged| C(UnacknowledgedTicket)
    B --> |into_acknowledged| D(AcknowledgedTicket)
    C --> |acknowledge| D
    D --> |into_redeemable| E(RedeemableTicket)
    D --> |into_transferable| F(TransferableWinningTicket)
    E --> |into_transferable| F
    F --> |into_redeemable| EFields§
§channel_id: HashBase<CoreWrapper<Keccak256Core>>Channel ID. See generate_channel_id for how this value is generated.
amount: Balance<WxHOPR>Amount of HOPR tokens this ticket is worth. Always between 0 and 2^92.
index: u64Ticket index. Always between 0 and 2^48.
index_offset: u32Ticket index offset. Always between 1 and 2^32. For normal tickets this is always equal to 1, for aggregated this is always > 1.
encoded_win_prob: [u8; 7]Encoded winning probability represented via 56-bit number.
channel_epoch: u32Epoch of the channel this ticket belongs to. Always between 0 and 2^24.
challenge: EthereumChallengeRepresent the Proof of Relay challenge encoded as an Ethereum address.
signature: Option<ChainSignature<NativeEcdsaSigningEngine>>ECDSA secp256k1 signature of all the above values.
Implementations§
Source§impl Ticket
 
impl Ticket
Sourcepub fn get_hash(
    &self,
    domain_separator: &HashBase<CoreWrapper<Keccak256Core>>,
) -> HashBase<CoreWrapper<Keccak256Core>>
 
pub fn get_hash( &self, domain_separator: &HashBase<CoreWrapper<Keccak256Core>>, ) -> HashBase<CoreWrapper<Keccak256Core>>
Computes Ethereum signature hash of the ticket, must be equal to on-chain computation
Sourcepub fn sign(
    self,
    signing_key: &ChainKeypair,
    domain_separator: &HashBase<CoreWrapper<Keccak256Core>>,
) -> VerifiedTicket
 
pub fn sign( self, signing_key: &ChainKeypair, domain_separator: &HashBase<CoreWrapper<Keccak256Core>>, ) -> VerifiedTicket
Signs the ticket using the given private key, turning this ticket into VerifiedTicket. If a signature was already present, it will be replaced.
Sourcepub fn verify(
    self,
    issuer: &Address,
    domain_separator: &HashBase<CoreWrapper<Keccak256Core>>,
) -> Result<VerifiedTicket, Box<Ticket>>
 
pub fn verify( self, issuer: &Address, domain_separator: &HashBase<CoreWrapper<Keccak256Core>>, ) -> Result<VerifiedTicket, Box<Ticket>>
Verifies the signature of this ticket, turning this ticket into VerifiedTicket.
If the verification fails, Self is returned in the error.
This is done by recovering the signer from the signature and verifying that it matches
the given issuer argument. This is possible due this specific instantiation of the ECDSA
over the secp256k1 curve.
The operation can fail if a public key cannot be recovered from the ticket signature.
Sourcepub fn is_aggregated(&self) -> bool
 
pub fn is_aggregated(&self) -> bool
Returns true if this ticket aggregates multiple tickets.
Sourcepub fn win_prob(&self) -> WinningProbability
 
pub fn win_prob(&self) -> WinningProbability
Returns the decoded winning probability of the ticket
Trait Implementations§
Source§impl BytesEncodable<hopr_internal_types::::tickets::{impl#23}::{constant#0}> for Ticket
 
impl BytesEncodable<hopr_internal_types::::tickets::{impl#23}::{constant#0}> for Ticket
Source§impl<'de> Deserialize<'de> for Ticket
 
impl<'de> Deserialize<'de> for Ticket
Source§fn deserialize<__D>(
    __deserializer: __D,
) -> Result<Ticket, <__D as Deserializer<'de>>::Error>where
    __D: Deserializer<'de>,
 
fn deserialize<__D>(
    __deserializer: __D,
) -> Result<Ticket, <__D as Deserializer<'de>>::Error>where
    __D: Deserializer<'de>,
Source§impl From<&Ticket> for TicketBuilder
 
impl From<&Ticket> for TicketBuilder
Source§fn from(value: &Ticket) -> TicketBuilder
 
fn from(value: &Ticket) -> TicketBuilder
Source§impl From<Ticket> for TicketBuilder
 
impl From<Ticket> for TicketBuilder
Source§fn from(value: Ticket) -> TicketBuilder
 
fn from(value: Ticket) -> TicketBuilder
Source§impl Ord for Ticket
 
impl Ord for Ticket
Source§impl PartialOrd for Ticket
 
impl PartialOrd for Ticket
Source§impl Serialize for Ticket
 
impl Serialize for Ticket
Source§fn serialize<__S>(
    &self,
    __serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
    __S: Serializer,
 
fn serialize<__S>(
    &self,
    __serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
    __S: Serializer,
impl Eq for Ticket
impl StructuralPartialEq for Ticket
Auto Trait Implementations§
impl Freeze for Ticket
impl RefUnwindSafe for Ticket
impl Send for Ticket
impl Sync for Ticket
impl Unpin for Ticket
impl UnwindSafe for Ticket
Blanket Implementations§
§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
    T: 'a,
 
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
    T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
    T: 'a,
 
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
    T: 'a,
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,
§impl<Q, K> Comparable<K> for Q
 
impl<Q, K> Comparable<K> for Q
§impl<T> Conv for T
 
impl<T> Conv for T
§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<Q, K> Equivalent<K> for Q
 
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
 
fn equivalent(&self, key: &K) -> bool
§impl<T> FmtForward for T
 
impl<T> FmtForward for T
§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.§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.§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.§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.§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.§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.§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.§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.§fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
 
fn fmt_list(self) -> FmtList<Self>where
    &'a Self: for<'a> IntoIterator,
§impl<T> Instrument for T
 
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
 
fn instrument(self, span: Span) -> Instrumented<Self>
§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 more§impl<T> Pipe for Twhere
    T: ?Sized,
 
impl<T> Pipe for Twhere
    T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
 
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
    Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.§impl<T> Pointable for T
 
impl<T> Pointable for T
§impl<T> PolicyExt for Twhere
    T: ?Sized,
 
impl<T> PolicyExt for Twhere
    T: ?Sized,
§impl<T> Tap for T
 
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.§impl<T> ToStringFallible for Twhere
    T: Display,
 
impl<T> ToStringFallible for Twhere
    T: Display,
§fn try_to_string(&self) -> Result<String, TryReserveError>
 
fn try_to_string(&self) -> Result<String, TryReserveError>
ToString::to_string, but without panic on OOM.