rippled
Classes | Public Types | Public Member Functions | Public Attributes | List of all members
ripple::test::csf::Peer Struct Reference

A single peer in the simulation. More...

Collaboration diagram for ripple::test::csf::Peer:
Collaboration graph
[legend]

Classes

struct  BroadcastMesg
 
class  Position
 Basic wrapper of a proposed position taken by a peer. More...
 
struct  ProcessingDelays
 Simulated delays in internal peer processing. More...
 
struct  Router
 
class  ValAdaptor
 Generic Validations adaptor that simply ignores recently stale validations. More...
 

Public Types

using Ledger_t = Ledger
 Type definitions for generic consensus. More...
 
using NodeID_t = PeerID
 
using NodeKey_t = PeerKey
 
using TxSet_t = TxSet
 
using PeerPosition_t = Position
 
using Result = ConsensusResult< Peer >
 
using NodeKey = Validation::NodeKey
 

Public Member Functions

 Peer (PeerID i, Scheduler &s, LedgerOracle &o, BasicNetwork< Peer * > &n, TrustGraph< Peer * > &tg, CollectorRefs &c, beast::Journal jIn)
 Constructor. More...
 
template<class T >
void schedule (std::chrono::nanoseconds when, T &&what)
 Schedule the provided callback in when duration, but if when is 0, call immediately. More...
 
template<class E >
void issue (E const &event)
 
void trust (Peer &o)
 
void untrust (Peer &o)
 
bool trusts (Peer &o)
 
bool trusts (PeerID const &oId)
 
bool connect (Peer &o, SimDuration dur)
 Create network connection. More...
 
bool disconnect (Peer &o)
 Remove a network connection. More...
 
Ledger const * acquireLedger (Ledger::ID const &ledgerID)
 
TxSet const * acquireTxSet (TxSet::ID const &setId)
 
bool hasOpenTransactions () const
 
std::size_t proposersValidated (Ledger::ID const &prevLedger)
 
std::size_t proposersFinished (Ledger const &prevLedger, Ledger::ID const &prevLedgerID)
 
Result onClose (Ledger const &prevLedger, NetClock::time_point closeTime, ConsensusMode mode)
 
void onForceAccept (Result const &result, Ledger const &prevLedger, NetClock::duration const &closeResolution, ConsensusCloseTimes const &rawCloseTimes, ConsensusMode const &mode, Json::Value &&consensusJson)
 
void onAccept (Result const &result, Ledger const &prevLedger, NetClock::duration const &closeResolution, ConsensusCloseTimes const &rawCloseTimes, ConsensusMode const &mode, Json::Value &&consensusJson)
 
Ledger::Seq earliestAllowedSeq () const
 
Ledger::ID getPrevLedger (Ledger::ID const &ledgerID, Ledger const &ledger, ConsensusMode mode)
 
void propose (Proposal const &pos)
 
ConsensusParms const & parms () const
 
void onModeChange (ConsensusMode, ConsensusMode)
 
template<class M >
void share (M const &m)
 
void share (Position const &p)
 
bool addTrustedValidation (Validation v)
 Add a trusted validation and return true if it is worth forwarding. More...
 
void checkFullyValidated (Ledger const &ledger)
 Check if a new ledger can be deemed fully validated. More...
 
template<class M >
void send (BroadcastMesg< M > const &bm, PeerID from)
 
template<class M >
void receive (BroadcastMesg< M > const &bm, PeerID from)
 
bool handle (Proposal const &p)
 
bool handle (TxSet const &txs)
 
bool handle (Tx const &tx)
 
bool handle (Validation const &v)
 
bool haveValidated () const
 
Ledger::Seq getValidLedgerIndex () const
 
std::pair< std::size_t, hash_set< NodeKey_t > > getQuorumKeys ()
 
std::size_t laggards (Ledger::Seq const seq, hash_set< NodeKey_t > &trusted)
 
bool validator () const
 
void updateOperatingMode (std::size_t const positions) const
 
void submit (Tx const &tx)
 
void timerEntry ()
 Heartbeat timer call. More...
 
void startRound ()
 
void start ()
 
NetClock::time_point now () const
 
Ledger::ID prevLedgerID () const
 
TxSet injectTxs (Ledger prevLedger, TxSet const &src)
 Inject non-consensus Tx. More...
 

Public Attributes

beast::WrappedSink sink
 Logging support that prefixes messages with the peer ID. More...
 
beast::Journal j
 
Consensus< Peerconsensus
 Generic consensus. More...
 
PeerID id
 Our unique ID. More...
 
PeerKey key
 Current signing key. More...
 
LedgerOracleoracle
 The oracle that manages unique ledgers. More...
 
Schedulerscheduler
 Scheduler of events. More...
 
BasicNetwork< Peer * > & net
 Handle to network for sending messages. More...
 
TrustGraph< Peer * > & trustGraph
 Handle to Trust graph of network. More...
 
TxSetType openTxs
 openTxs that haven't been closed in a ledger yet More...
 
Ledger lastClosedLedger
 The last ledger closed by this node. More...
 
hash_map< Ledger::ID, Ledgerledgers
 Ledgers this node has closed or loaded from the network. More...
 
Validations< ValAdaptorvalidations
 Validations from trusted nodes. More...
 
Ledger fullyValidatedLedger
 The most recent ledger that has been fully validated by the network from the perspective of this Peer. More...
 
bc::flat_map< Ledger::ID, std::vector< Proposal > > peerPositions
 Map from Ledger::ID to vector of Positions with that ledger as the prior ledger. More...
 
bc::flat_map< TxSet::ID, TxSettxSets
 TxSet associated with a TxSet::ID. More...
 
bc::flat_map< Ledger::ID, SimTimeacquiringLedgers
 
bc::flat_map< TxSet::ID, SimTimeacquiringTxSets
 
int completedLedgers = 0
 The number of ledgers this peer has completed. More...
 
int targetLedgers = std::numeric_limits<int>::max()
 The number of ledgers this peer should complete before stopping to run. More...
 
std::chrono::seconds clockSkew {0}
 Skew of time relative to the common scheduler clock. More...
 
ProcessingDelays delays
 Simulated delays to use for internal processing. More...
 
bool runAsValidator = true
 Whether to simulate running as validator or a tracking node. More...
 
std::size_t prevProposers = 0
 
std::chrono::milliseconds prevRoundTime
 
std::size_t quorum = 0
 
hash_set< NodeKey_ttrustedKeys
 
ConsensusParms consensusParms
 
CollectorRefscollectors
 The collectors to report events to. More...
 
Router router
 
hash_map< Ledger::Seq, TxtxInjections
 

Detailed Description

A single peer in the simulation.

This is the main work-horse of the consensus simulation framework and is where many other components are integrated. The peer

Definition at line 54 of file test/csf/Peer.h.

Member Typedef Documentation

◆ Ledger_t

Type definitions for generic consensus.

Definition at line 157 of file test/csf/Peer.h.

◆ NodeID_t

Definition at line 158 of file test/csf/Peer.h.

◆ NodeKey_t

Definition at line 159 of file test/csf/Peer.h.

◆ TxSet_t

Definition at line 160 of file test/csf/Peer.h.

◆ PeerPosition_t

Definition at line 161 of file test/csf/Peer.h.

◆ Result

Definition at line 162 of file test/csf/Peer.h.

◆ NodeKey

Definition at line 163 of file test/csf/Peer.h.

Constructor & Destructor Documentation

◆ Peer()

ripple::test::csf::Peer::Peer ( PeerID  i,
Scheduler s,
LedgerOracle o,
BasicNetwork< Peer * > &  n,
TrustGraph< Peer * > &  tg,
CollectorRefs c,
beast::Journal  jIn 
)

Constructor.

Parameters
iUnique PeerID
sSimulation Scheduler
oSimulation Oracle
nSimulation network
tgSimulation trust graph
cSimulation collectors
jInSimulation journal

Definition at line 264 of file test/csf/Peer.h.

Member Function Documentation

◆ schedule()

template<class T >
void ripple::test::csf::Peer::schedule ( std::chrono::nanoseconds  when,
T &&  what 
)

Schedule the provided callback in when duration, but if when is 0, call immediately.

Definition at line 298 of file test/csf/Peer.h.

◆ issue()

template<class E >
void ripple::test::csf::Peer::issue ( E const &  event)

Definition at line 311 of file test/csf/Peer.h.

◆ trust()

void ripple::test::csf::Peer::trust ( Peer o)

Definition at line 324 of file test/csf/Peer.h.

◆ untrust()

void ripple::test::csf::Peer::untrust ( Peer o)

Definition at line 331 of file test/csf/Peer.h.

◆ trusts() [1/2]

bool ripple::test::csf::Peer::trusts ( Peer o)

Definition at line 338 of file test/csf/Peer.h.

◆ trusts() [2/2]

bool ripple::test::csf::Peer::trusts ( PeerID const &  oId)

Definition at line 345 of file test/csf/Peer.h.

◆ connect()

bool ripple::test::csf::Peer::connect ( Peer o,
SimDuration  dur 
)

Create network connection.

Creates a new outbound connection to another Peer if none exists

Parameters
oThe peer with the inbound connection
durThe fixed delay for messages between the two Peers
Returns
Whether the connection was created.

Definition at line 363 of file test/csf/Peer.h.

◆ disconnect()

bool ripple::test::csf::Peer::disconnect ( Peer o)

Remove a network connection.

Removes a connection between peers if one exists

Parameters
oThe peer we disconnect from
Returns
Whether the connection was removed

Definition at line 376 of file test/csf/Peer.h.

◆ acquireLedger()

Ledger const* ripple::test::csf::Peer::acquireLedger ( Ledger::ID const &  ledgerID)

Definition at line 386 of file test/csf/Peer.h.

◆ acquireTxSet()

TxSet const* ripple::test::csf::Peer::acquireTxSet ( TxSet::ID const &  setId)

Definition at line 433 of file test/csf/Peer.h.

◆ hasOpenTransactions()

bool ripple::test::csf::Peer::hasOpenTransactions ( ) const

Definition at line 478 of file test/csf/Peer.h.

◆ proposersValidated()

std::size_t ripple::test::csf::Peer::proposersValidated ( Ledger::ID const &  prevLedger)

Definition at line 484 of file test/csf/Peer.h.

◆ proposersFinished()

std::size_t ripple::test::csf::Peer::proposersFinished ( Ledger const &  prevLedger,
Ledger::ID const &  prevLedgerID 
)

Definition at line 490 of file test/csf/Peer.h.

◆ onClose()

Result ripple::test::csf::Peer::onClose ( Ledger const &  prevLedger,
NetClock::time_point  closeTime,
ConsensusMode  mode 
)

Definition at line 496 of file test/csf/Peer.h.

◆ onForceAccept()

void ripple::test::csf::Peer::onForceAccept ( Result const &  result,
Ledger const &  prevLedger,
NetClock::duration const &  closeResolution,
ConsensusCloseTimes const &  rawCloseTimes,
ConsensusMode const &  mode,
Json::Value &&  consensusJson 
)

Definition at line 515 of file test/csf/Peer.h.

◆ onAccept()

void ripple::test::csf::Peer::onAccept ( Result const &  result,
Ledger const &  prevLedger,
NetClock::duration const &  closeResolution,
ConsensusCloseTimes const &  rawCloseTimes,
ConsensusMode const &  mode,
Json::Value &&  consensusJson 
)

Definition at line 533 of file test/csf/Peer.h.

◆ earliestAllowedSeq()

Ledger::Seq ripple::test::csf::Peer::earliestAllowedSeq ( ) const

Definition at line 607 of file test/csf/Peer.h.

◆ getPrevLedger()

Ledger::ID ripple::test::csf::Peer::getPrevLedger ( Ledger::ID const &  ledgerID,
Ledger const &  ledger,
ConsensusMode  mode 
)

Definition at line 613 of file test/csf/Peer.h.

◆ propose()

void ripple::test::csf::Peer::propose ( Proposal const &  pos)

Definition at line 635 of file test/csf/Peer.h.

◆ parms()

ConsensusParms const& ripple::test::csf::Peer::parms ( ) const

Definition at line 641 of file test/csf/Peer.h.

◆ onModeChange()

void ripple::test::csf::Peer::onModeChange ( ConsensusMode  ,
ConsensusMode   
)

Definition at line 647 of file test/csf/Peer.h.

◆ share() [1/2]

template<class M >
void ripple::test::csf::Peer::share ( M const &  m)

Definition at line 654 of file test/csf/Peer.h.

◆ share() [2/2]

void ripple::test::csf::Peer::share ( Position const &  p)

Definition at line 662 of file test/csf/Peer.h.

◆ addTrustedValidation()

bool ripple::test::csf::Peer::addTrustedValidation ( Validation  v)

Add a trusted validation and return true if it is worth forwarding.

Definition at line 672 of file test/csf/Peer.h.

◆ checkFullyValidated()

void ripple::test::csf::Peer::checkFullyValidated ( Ledger const &  ledger)

Check if a new ledger can be deemed fully validated.

Definition at line 689 of file test/csf/Peer.h.

◆ send()

template<class M >
void ripple::test::csf::Peer::send ( BroadcastMesg< M > const &  bm,
PeerID  from 
)

Definition at line 742 of file test/csf/Peer.h.

◆ receive()

template<class M >
void ripple::test::csf::Peer::receive ( BroadcastMesg< M > const &  bm,
PeerID  from 
)

Definition at line 767 of file test/csf/Peer.h.

◆ handle() [1/4]

bool ripple::test::csf::Peer::handle ( Proposal const &  p)

Definition at line 783 of file test/csf/Peer.h.

◆ handle() [2/4]

bool ripple::test::csf::Peer::handle ( TxSet const &  txs)

Definition at line 802 of file test/csf/Peer.h.

◆ handle() [3/4]

bool ripple::test::csf::Peer::handle ( Tx const &  tx)

Definition at line 813 of file test/csf/Peer.h.

◆ handle() [4/4]

bool ripple::test::csf::Peer::handle ( Validation const &  v)

Definition at line 825 of file test/csf/Peer.h.

◆ haveValidated()

bool ripple::test::csf::Peer::haveValidated ( ) const

Definition at line 836 of file test/csf/Peer.h.

◆ getValidLedgerIndex()

Ledger::Seq ripple::test::csf::Peer::getValidLedgerIndex ( ) const

Definition at line 842 of file test/csf/Peer.h.

◆ getQuorumKeys()

std::pair<std::size_t, hash_set<NodeKey_t> > ripple::test::csf::Peer::getQuorumKeys ( )

Definition at line 848 of file test/csf/Peer.h.

◆ laggards()

std::size_t ripple::test::csf::Peer::laggards ( Ledger::Seq const  seq,
hash_set< NodeKey_t > &  trusted 
)

Definition at line 857 of file test/csf/Peer.h.

◆ validator()

bool ripple::test::csf::Peer::validator ( ) const

Definition at line 863 of file test/csf/Peer.h.

◆ updateOperatingMode()

void ripple::test::csf::Peer::updateOperatingMode ( std::size_t const  positions) const

Definition at line 869 of file test/csf/Peer.h.

◆ submit()

void ripple::test::csf::Peer::submit ( Tx const &  tx)

Definition at line 876 of file test/csf/Peer.h.

◆ timerEntry()

void ripple::test::csf::Peer::timerEntry ( )

Heartbeat timer call.

Definition at line 888 of file test/csf/Peer.h.

◆ startRound()

void ripple::test::csf::Peer::startRound ( )

Definition at line 898 of file test/csf/Peer.h.

◆ start()

void ripple::test::csf::Peer::start ( )

Definition at line 919 of file test/csf/Peer.h.

◆ now()

NetClock::time_point ripple::test::csf::Peer::now ( ) const

Definition at line 928 of file test/csf/Peer.h.

◆ prevLedgerID()

Ledger::ID ripple::test::csf::Peer::prevLedgerID ( ) const

Definition at line 941 of file test/csf/Peer.h.

◆ injectTxs()

TxSet ripple::test::csf::Peer::injectTxs ( Ledger  prevLedger,
TxSet const &  src 
)

Inject non-consensus Tx.

Injects a transactionsinto the ledger following prevLedger's sequence number.

Parameters
prevLedgerThe ledger we are building the new ledger on top of
srcThe Consensus TxSet
Returns
Consensus TxSet with inject transactions added if prevLedger.seq matches a previously registered Tx.

Definition at line 965 of file test/csf/Peer.h.

Member Data Documentation

◆ sink

beast::WrappedSink ripple::test::csf::Peer::sink

Logging support that prefixes messages with the peer ID.

Definition at line 166 of file test/csf/Peer.h.

◆ j

beast::Journal ripple::test::csf::Peer::j

Definition at line 167 of file test/csf/Peer.h.

◆ consensus

Consensus<Peer> ripple::test::csf::Peer::consensus

Generic consensus.

Definition at line 170 of file test/csf/Peer.h.

◆ id

PeerID ripple::test::csf::Peer::id

Our unique ID.

Definition at line 173 of file test/csf/Peer.h.

◆ key

PeerKey ripple::test::csf::Peer::key

Current signing key.

Definition at line 176 of file test/csf/Peer.h.

◆ oracle

LedgerOracle& ripple::test::csf::Peer::oracle

The oracle that manages unique ledgers.

Definition at line 179 of file test/csf/Peer.h.

◆ scheduler

Scheduler& ripple::test::csf::Peer::scheduler

Scheduler of events.

Definition at line 182 of file test/csf/Peer.h.

◆ net

BasicNetwork<Peer*>& ripple::test::csf::Peer::net

Handle to network for sending messages.

Definition at line 185 of file test/csf/Peer.h.

◆ trustGraph

TrustGraph<Peer*>& ripple::test::csf::Peer::trustGraph

Handle to Trust graph of network.

Definition at line 188 of file test/csf/Peer.h.

◆ openTxs

TxSetType ripple::test::csf::Peer::openTxs

openTxs that haven't been closed in a ledger yet

Definition at line 191 of file test/csf/Peer.h.

◆ lastClosedLedger

Ledger ripple::test::csf::Peer::lastClosedLedger

The last ledger closed by this node.

Definition at line 194 of file test/csf/Peer.h.

◆ ledgers

hash_map<Ledger::ID, Ledger> ripple::test::csf::Peer::ledgers

Ledgers this node has closed or loaded from the network.

Definition at line 197 of file test/csf/Peer.h.

◆ validations

Validations<ValAdaptor> ripple::test::csf::Peer::validations

Validations from trusted nodes.

Definition at line 200 of file test/csf/Peer.h.

◆ fullyValidatedLedger

Ledger ripple::test::csf::Peer::fullyValidatedLedger

The most recent ledger that has been fully validated by the network from the perspective of this Peer.

Definition at line 204 of file test/csf/Peer.h.

◆ peerPositions

bc::flat_map<Ledger::ID, std::vector<Proposal> > ripple::test::csf::Peer::peerPositions

Map from Ledger::ID to vector of Positions with that ledger as the prior ledger.

Definition at line 212 of file test/csf/Peer.h.

◆ txSets

bc::flat_map<TxSet::ID, TxSet> ripple::test::csf::Peer::txSets

TxSet associated with a TxSet::ID.

Definition at line 214 of file test/csf/Peer.h.

◆ acquiringLedgers

bc::flat_map<Ledger::ID, SimTime> ripple::test::csf::Peer::acquiringLedgers

Definition at line 217 of file test/csf/Peer.h.

◆ acquiringTxSets

bc::flat_map<TxSet::ID, SimTime> ripple::test::csf::Peer::acquiringTxSets

Definition at line 218 of file test/csf/Peer.h.

◆ completedLedgers

int ripple::test::csf::Peer::completedLedgers = 0

The number of ledgers this peer has completed.

Definition at line 221 of file test/csf/Peer.h.

◆ targetLedgers

int ripple::test::csf::Peer::targetLedgers = std::numeric_limits<int>::max()

The number of ledgers this peer should complete before stopping to run.

Definition at line 224 of file test/csf/Peer.h.

◆ clockSkew

std::chrono::seconds ripple::test::csf::Peer::clockSkew {0}

Skew of time relative to the common scheduler clock.

Definition at line 227 of file test/csf/Peer.h.

◆ delays

ProcessingDelays ripple::test::csf::Peer::delays

Simulated delays to use for internal processing.

Definition at line 230 of file test/csf/Peer.h.

◆ runAsValidator

bool ripple::test::csf::Peer::runAsValidator = true

Whether to simulate running as validator or a tracking node.

Definition at line 233 of file test/csf/Peer.h.

◆ prevProposers

std::size_t ripple::test::csf::Peer::prevProposers = 0

Definition at line 237 of file test/csf/Peer.h.

◆ prevRoundTime

std::chrono::milliseconds ripple::test::csf::Peer::prevRoundTime

Definition at line 239 of file test/csf/Peer.h.

◆ quorum

std::size_t ripple::test::csf::Peer::quorum = 0

Definition at line 243 of file test/csf/Peer.h.

◆ trustedKeys

hash_set<NodeKey_t> ripple::test::csf::Peer::trustedKeys

Definition at line 245 of file test/csf/Peer.h.

◆ consensusParms

ConsensusParms ripple::test::csf::Peer::consensusParms

Definition at line 248 of file test/csf/Peer.h.

◆ collectors

CollectorRefs& ripple::test::csf::Peer::collectors

The collectors to report events to.

Definition at line 251 of file test/csf/Peer.h.

◆ router

Router ripple::test::csf::Peer::router

Definition at line 737 of file test/csf/Peer.h.

◆ txInjections

hash_map<Ledger::Seq, Tx> ripple::test::csf::Peer::txInjections

Definition at line 952 of file test/csf/Peer.h.