xrpld
Loading...
Searching...
No Matches
xrpl::ValidatorSite Class Reference

#include <ValidatorSite.h>

Collaboration diagram for xrpl::ValidatorSite:

Classes

struct  Site

Public Member Functions

 ValidatorSite (Application &app, std::optional< beast::Journal > j=std::nullopt, std::chrono::seconds timeout=std::chrono::seconds{20})
 ~ValidatorSite ()
bool load (std::vector< std::string > const &siteURIs)
 Load configured site URIs.
void start ()
 Start fetching lists from sites.
void join ()
 Wait for current fetches from sites to complete.
void stop ()
 Stop fetching lists from sites.
json::Value getJson () const
 Return JSON representation of configured validator sites.

Private Types

using error_code = boost::system::error_code
using clock_type = std::chrono::system_clock
using endpoint_type = boost::asio::ip::tcp::endpoint

Private Member Functions

bool load (std::vector< std::string > const &siteURIs, std::scoped_lock< std::mutex > const &)
 Load configured site URIs.
void setTimer (std::scoped_lock< std::mutex > const &, std::scoped_lock< std::mutex > const &)
 Queue next site to be fetched lock over site_mutex_ and state_mutex_ required.
void onRequestTimeout (std::size_t siteIdx, error_code const &ec)
 request took too long
void onTimer (std::size_t siteIdx, error_code const &ec)
 Fetch site whose time has come.
void onSiteFetch (boost::system::error_code const &ec, endpoint_type const &endpoint, detail::response_type const &res, std::size_t siteIdx)
 Store latest list fetched from site.
void onTextFetch (boost::system::error_code const &ec, std::string const &res, std::size_t siteIdx)
 Store latest list fetched from anywhere.
void makeRequest (std::shared_ptr< Site::Resource > resource, std::size_t siteIdx, std::scoped_lock< std::mutex > const &)
 Initiate request to given resource.
void parseJsonResponse (std::string const &res, std::size_t siteIdx, std::scoped_lock< std::mutex > const &)
 Parse json response from validator list site.
std::shared_ptr< Site::ResourceprocessRedirect (detail::response_type const &res, std::size_t siteIdx, std::scoped_lock< std::mutex > const &)
 Interpret a redirect response.
bool missingSite (std::scoped_lock< std::mutex > const &)
 If no sites are provided, or a site fails to load, get a list of local cache files from the ValidatorList.

Private Attributes

Applicationapp_
beast::Journal const j_
std::mutex sitesMutex_
std::mutex stateMutex_
std::condition_variable cv_
std::weak_ptr< detail::Workwork_
boost::asio::basic_waitable_timer< clock_typetimer_
std::atomic< bool > fetching_
std::atomic< bool > pending_
std::atomic< bool > stopping_
std::vector< Sitesites_
std::chrono::seconds const requestTimeout_

Friends

class Work

Detailed Description

Validator Sites

This class manages the set of configured remote sites used to fetch the latest published recommended validator lists.

Lists are fetched at a regular interval. Fetched lists are expected to be in JSON format and contain the following fields:

  • "blob": Base64-encoded JSON string containing a "sequence", "validUntil", and "validators" field. "validUntil" contains the XRPL timestamp (seconds since January 1st, 2000 (00:00 UTC)) for when the list expires. "validators" contains an array of objects with a "validation_public_key" and optional "manifest" field. "validation_public_key" should be the hex-encoded master public key. "manifest" should be the base64-encoded validator manifest.
  • "manifest": Base64-encoded serialization of a manifest containing the publisher's master and signing public keys.
  • "signature": Hex-encoded signature of the blob using the publisher's signing key.
  • "version": 1
  • "refreshInterval" (optional, integer minutes). This value is clamped internally to [1,1440] (1 min - 1 day)

Definition at line 48 of file ValidatorSite.h.

Member Typedef Documentation

◆ error_code

using xrpl::ValidatorSite::error_code = boost::system::error_code
private

Definition at line 53 of file ValidatorSite.h.

◆ clock_type

Definition at line 54 of file ValidatorSite.h.

◆ endpoint_type

using xrpl::ValidatorSite::endpoint_type = boost::asio::ip::tcp::endpoint
private

Definition at line 55 of file ValidatorSite.h.

Constructor & Destructor Documentation

◆ ValidatorSite()

xrpl::ValidatorSite::ValidatorSite ( Application & app,
std::optional< beast::Journal > j = std::nullopt,
std::chrono::seconds timeout = std::chrono::seconds{20} )

Definition at line 101 of file ValidatorSite.cpp.

◆ ~ValidatorSite()

xrpl::ValidatorSite::~ValidatorSite ( )

Definition at line 115 of file ValidatorSite.cpp.

Member Function Documentation

◆ load() [1/2]

bool xrpl::ValidatorSite::load ( std::vector< std::string > const & siteURIs)

Load configured site URIs.

Parameters
siteURIsList of URIs to fetch published validator lists
Thread Safety

May be called concurrently

Returns
false if an entry is invalid or unparsable

Definition at line 140 of file ValidatorSite.cpp.

◆ start()

void xrpl::ValidatorSite::start ( )

Start fetching lists from sites.

This does nothing if list fetching has already started

Thread Safety

May be called concurrently

Definition at line 179 of file ValidatorSite.cpp.

◆ join()

void xrpl::ValidatorSite::join ( )

Wait for current fetches from sites to complete.

Thread Safety

May be called concurrently

Definition at line 188 of file ValidatorSite.cpp.

◆ stop()

void xrpl::ValidatorSite::stop ( )

Stop fetching lists from sites.

This blocks until list fetching has stopped

Thread Safety

May be called concurrently

Definition at line 195 of file ValidatorSite.cpp.

◆ getJson()

json::Value xrpl::ValidatorSite::getJson ( ) const

Return JSON representation of configured validator sites.

Definition at line 670 of file ValidatorSite.cpp.

◆ load() [2/2]

bool xrpl::ValidatorSite::load ( std::vector< std::string > const & siteURIs,
std::scoped_lock< std::mutex > const & lockSites )
private

Load configured site URIs.

Definition at line 150 of file ValidatorSite.cpp.

◆ setTimer()

void xrpl::ValidatorSite::setTimer ( std::scoped_lock< std::mutex > const & siteLock,
std::scoped_lock< std::mutex > const & stateLock )
private

Queue next site to be fetched lock over site_mutex_ and state_mutex_ required.

Definition at line 221 of file ValidatorSite.cpp.

◆ onRequestTimeout()

void xrpl::ValidatorSite::onRequestTimeout ( std::size_t siteIdx,
error_code const & ec )
private

request took too long

Definition at line 323 of file ValidatorSite.cpp.

◆ onTimer()

void xrpl::ValidatorSite::onTimer ( std::size_t siteIdx,
error_code const & ec )
private

Fetch site whose time has come.

Definition at line 354 of file ValidatorSite.cpp.

◆ onSiteFetch()

void xrpl::ValidatorSite::onSiteFetch ( boost::system::error_code const & ec,
endpoint_type const & endpoint,
detail::response_type const & res,
std::size_t siteIdx )
private

Store latest list fetched from site.

Definition at line 544 of file ValidatorSite.cpp.

◆ onTextFetch()

void xrpl::ValidatorSite::onTextFetch ( boost::system::error_code const & ec,
std::string const & res,
std::size_t siteIdx )
private

Store latest list fetched from anywhere.

Definition at line 630 of file ValidatorSite.cpp.

◆ makeRequest()

void xrpl::ValidatorSite::makeRequest ( std::shared_ptr< Site::Resource > resource,
std::size_t siteIdx,
std::scoped_lock< std::mutex > const & sitesLock )
private

Initiate request to given resource.

lock over sites_mutex_ required

Definition at line 240 of file ValidatorSite.cpp.

◆ parseJsonResponse()

void xrpl::ValidatorSite::parseJsonResponse ( std::string const & res,
std::size_t siteIdx,
std::scoped_lock< std::mutex > const & sitesLock )
private

Parse json response from validator list site.

lock over sites_mutex_ required

Definition at line 385 of file ValidatorSite.cpp.

◆ processRedirect()

std::shared_ptr< ValidatorSite::Site::Resource > xrpl::ValidatorSite::processRedirect ( detail::response_type const & res,
std::size_t siteIdx,
std::scoped_lock< std::mutex > const & sitesLock )
private

Interpret a redirect response.

lock over sites_mutex_ required

Definition at line 503 of file ValidatorSite.cpp.

◆ missingSite()

bool xrpl::ValidatorSite::missingSite ( std::scoped_lock< std::mutex > const & lockSites)
private

If no sites are provided, or a site fails to load, get a list of local cache files from the ValidatorList.

Definition at line 133 of file ValidatorSite.cpp.

◆ Work

friend class Work
friend

Definition at line 50 of file ValidatorSite.h.

Member Data Documentation

◆ app_

Application& xrpl::ValidatorSite::app_
private

Definition at line 96 of file ValidatorSite.h.

◆ j_

beast::Journal const xrpl::ValidatorSite::j_
private

Definition at line 97 of file ValidatorSite.h.

◆ sitesMutex_

std::mutex xrpl::ValidatorSite::sitesMutex_
mutableprivate

Definition at line 101 of file ValidatorSite.h.

◆ stateMutex_

std::mutex xrpl::ValidatorSite::stateMutex_
mutableprivate

Definition at line 102 of file ValidatorSite.h.

◆ cv_

std::condition_variable xrpl::ValidatorSite::cv_
private

Definition at line 104 of file ValidatorSite.h.

◆ work_

std::weak_ptr<detail::Work> xrpl::ValidatorSite::work_
private

Definition at line 105 of file ValidatorSite.h.

◆ timer_

boost::asio::basic_waitable_timer<clock_type> xrpl::ValidatorSite::timer_
private

Definition at line 106 of file ValidatorSite.h.

◆ fetching_

std::atomic<bool> xrpl::ValidatorSite::fetching_
private

Definition at line 109 of file ValidatorSite.h.

◆ pending_

std::atomic<bool> xrpl::ValidatorSite::pending_
private

Definition at line 112 of file ValidatorSite.h.

◆ stopping_

std::atomic<bool> xrpl::ValidatorSite::stopping_
private

Definition at line 113 of file ValidatorSite.h.

◆ sites_

std::vector<Site> xrpl::ValidatorSite::sites_
private

Definition at line 116 of file ValidatorSite.h.

◆ requestTimeout_

std::chrono::seconds const xrpl::ValidatorSite::requestTimeout_
private

Definition at line 119 of file ValidatorSite.h.