rippled
Public Types | Public Member Functions | Static Public Member Functions | Private Attributes | Friends | List of all members
ripple::SeqProxy Class Reference

A type that represents either a sequence value or a ticket value. More...

Collaboration diagram for ripple::SeqProxy:
Collaboration graph
[legend]

Public Types

enum  Type : std::uint8_t { seq = 0, ticket }
 

Public Member Functions

constexpr SeqProxy (Type t, std::uint32_t v)
 
 SeqProxy (SeqProxy const &other)=default
 
SeqProxyoperator= (SeqProxy const &other)=default
 
constexpr std::uint32_t value () const
 
constexpr bool isSeq () const
 
constexpr bool isTicket () const
 
SeqProxyadvanceBy (std::uint32_t amount)
 

Static Public Member Functions

static constexpr SeqProxy sequence (std::uint32_t v)
 Factory function to return a sequence-based SeqProxy. More...
 

Private Attributes

std::uint32_t value_
 
Type type_
 

Friends

constexpr friend bool operator== (SeqProxy lhs, SeqProxy rhs)
 
constexpr friend bool operator!= (SeqProxy lhs, SeqProxy rhs)
 
constexpr friend bool operator< (SeqProxy lhs, SeqProxy rhs)
 
constexpr friend bool operator> (SeqProxy lhs, SeqProxy rhs)
 
constexpr friend bool operator>= (SeqProxy lhs, SeqProxy rhs)
 
constexpr friend bool operator<= (SeqProxy lhs, SeqProxy rhs)
 
std::ostreamoperator<< (std::ostream &os, SeqProxy seqProx)
 

Detailed Description

A type that represents either a sequence value or a ticket value.

We use the value() of a SeqProxy in places where a sequence was used before. An example of this is the sequence of an Offer stored in the ledger. We do the same thing with the in-ledger identifier of a Check, Payment Channel, and Escrow.

Why is this safe? If we use the SeqProxy::value(), how do we know that each ledger entry will be unique?

There are two components that make this safe:

  1. A "TicketCreate" transaction carefully avoids creating a ticket that corresponds with an already used Sequence or Ticket value. The transactor does this by referring to the account root's sequence number. Creating the ticket advances the account root's sequence number so the same ticket (or sequence) value cannot be used again.
  2. When a "TicketCreate" transaction creates a batch of tickets it advances the account root sequence to one past the largest created ticket.

    Therefore all tickets in a batch other than the first may never have the same value as a sequence on that same account. And since a ticket may only be used once there will never be any duplicates within this account.

Definition at line 55 of file SeqProxy.h.

Member Enumeration Documentation

◆ Type

Enumerator
seq 
ticket 

Definition at line 58 of file SeqProxy.h.

Constructor & Destructor Documentation

◆ SeqProxy() [1/2]

constexpr ripple::SeqProxy::SeqProxy ( Type  t,
std::uint32_t  v 
)
explicitconstexpr

Definition at line 65 of file SeqProxy.h.

◆ SeqProxy() [2/2]

ripple::SeqProxy::SeqProxy ( SeqProxy const &  other)
default

Member Function Documentation

◆ operator=()

SeqProxy& ripple::SeqProxy::operator= ( SeqProxy const &  other)
default

◆ sequence()

static constexpr SeqProxy ripple::SeqProxy::sequence ( std::uint32_t  v)
staticconstexpr

Factory function to return a sequence-based SeqProxy.

Definition at line 76 of file SeqProxy.h.

◆ value()

constexpr std::uint32_t ripple::SeqProxy::value ( ) const
constexpr

Definition at line 82 of file SeqProxy.h.

◆ isSeq()

constexpr bool ripple::SeqProxy::isSeq ( ) const
constexpr

Definition at line 88 of file SeqProxy.h.

◆ isTicket()

constexpr bool ripple::SeqProxy::isTicket ( ) const
constexpr

Definition at line 94 of file SeqProxy.h.

◆ advanceBy()

SeqProxy& ripple::SeqProxy::advanceBy ( std::uint32_t  amount)

Definition at line 104 of file SeqProxy.h.

Friends And Related Function Documentation

◆ operator==

constexpr friend bool operator== ( SeqProxy  lhs,
SeqProxy  rhs 
)
friend

Definition at line 121 of file SeqProxy.h.

◆ operator!=

constexpr friend bool operator!= ( SeqProxy  lhs,
SeqProxy  rhs 
)
friend

Definition at line 129 of file SeqProxy.h.

◆ operator<

constexpr friend bool operator< ( SeqProxy  lhs,
SeqProxy  rhs 
)
friend

Definition at line 135 of file SeqProxy.h.

◆ operator>

constexpr friend bool operator> ( SeqProxy  lhs,
SeqProxy  rhs 
)
friend

Definition at line 143 of file SeqProxy.h.

◆ operator>=

constexpr friend bool operator>= ( SeqProxy  lhs,
SeqProxy  rhs 
)
friend

Definition at line 149 of file SeqProxy.h.

◆ operator<=

constexpr friend bool operator<= ( SeqProxy  lhs,
SeqProxy  rhs 
)
friend

Definition at line 155 of file SeqProxy.h.

◆ operator<<

std::ostream& operator<< ( std::ostream os,
SeqProxy  seqProx 
)
friend

Definition at line 161 of file SeqProxy.h.

Member Data Documentation

◆ value_

std::uint32_t ripple::SeqProxy::value_
private

Definition at line 61 of file SeqProxy.h.

◆ type_

Type ripple::SeqProxy::type_
private

Definition at line 62 of file SeqProxy.h.