Files
rippled/classripple_1_1NegativeUNLVote.html
2023-04-11 22:54:00 +00:00

931 lines
55 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "https://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.17"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>rippled: ripple::NegativeUNLVote Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
<tbody>
<tr style="height: 56px;">
<td id="projectalign" style="padding-left: 0.5em;">
<div id="projectname">rippled
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.17 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
var searchBox = new SearchBox("searchBox", "search",false,'Search');
/* @license-end */
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:cf05388f2679ee054f2beb29a391d25f4e673ac3&amp;dn=gpl-2.0.txt GPL-v2 */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
onmouseover="return searchBox.OnSearchSelectShow()"
onmouseout="return searchBox.OnSearchSelectHide()"
onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>
<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0"
name="MSearchResults" id="MSearchResults">
</iframe>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="namespaceripple.html">ripple</a></li><li class="navelem"><a class="el" href="classripple_1_1NegativeUNLVote.html">NegativeUNLVote</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-types">Public Types</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pub-static-attribs">Static Public Attributes</a> &#124;
<a href="#pri-methods">Private Member Functions</a> &#124;
<a href="#pri-attribs">Private Attributes</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classripple_1_1NegativeUNLVote-members.html">List of all members</a> </div>
<div class="headertitle">
<div class="title">ripple::NegativeUNLVote Class Reference<span class="mlabels"><span class="mlabel">final</span></span></div> </div>
</div><!--header-->
<div class="contents">
<p>Manager to create NegativeUNL votes.
<a href="classripple_1_1NegativeUNLVote.html#details">More...</a></p>
<div class="dynheader">
Collaboration diagram for ripple::NegativeUNLVote:</div>
<div class="dyncontent">
<div class="center"><img src="classripple_1_1NegativeUNLVote__coll__graph.png" border="0" usemap="#ripple_1_1NegativeUNLVote_coll__map" alt="Collaboration graph"/></div>
<map name="ripple_1_1NegativeUNLVote_coll__map" id="ripple_1_1NegativeUNLVote_coll__map">
<area shape="rect" title="Manager to create NegativeUNL votes." alt="" coords="1053,117,1235,144"/>
<area shape="rect" href="http://en.cppreference.com/w/cpp/container/unordered_map.html" title=" " alt="" coords="749,5,901,61"/>
<area shape="rect" href="http://en.cppreference.com/w/cpp/types/integer.html" title=" " alt="" coords="5,37,108,64"/>
<area shape="rect" href="http://en.cppreference.com/w/cpp/container/array.html" title=" " alt="" coords="221,59,389,101"/>
<area shape="rect" href="classripple_1_1base__uint.html" title="Integers of any length that is a multiple of 32&#45;bits." alt="" coords="505,70,647,111"/>
<area shape="rect" href="http://en.cppreference.com/w/cpp/types/size_t.html" title=" " alt="" coords="261,127,349,153"/>
<area shape="rect" href="http://en.cppreference.com/w/cpp/thread/mutex.html" title="STL class." alt="" coords="779,148,871,175"/>
<area shape="rect" href="classbeast_1_1Journal.html" title="A generic endpoint for log messages." alt="" coords="770,199,881,225"/>
<area shape="rect" href="classbeast_1_1Journal_1_1Sink.html" title="Abstraction for the underlying message destination." alt="" coords="503,199,649,225"/>
</map>
<center><span class="legend">[<a href="graph_legend.html">legend</a>]</span></center></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structripple_1_1NegativeUNLVote_1_1Candidates.html">Candidates</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight">UNLModify Tx candidates. <a href="structripple_1_1NegativeUNLVote_1_1Candidates.html#details">More...</a><br /></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-types"></a>
Public Types</h2></td></tr>
<tr class="memitem:a4fc6405fdb02e58c350e175b6d58e7cf"><td class="memItemLeft" align="right" valign="top">enum &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cf">NegativeUNLModify</a> { <a class="el" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cfabe47f804b7bde80da32af12f772dc7c5">ToDisable</a>,
<a class="el" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cfa50aab7a54a0d4bee43c5e3fcedd50d13">ToReEnable</a>
}</td></tr>
<tr class="memdesc:a4fc6405fdb02e58c350e175b6d58e7cf"><td class="mdescLeft">&#160;</td><td class="mdescRight">A flag indicating whether a UNLModify Tx is to disable or to re-enable a validator. <a href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cf">More...</a><br /></td></tr>
<tr class="separator:a4fc6405fdb02e58c350e175b6d58e7cf"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:afb3ed2c981663495ad603c103040fbf1"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#afb3ed2c981663495ad603c103040fbf1">NegativeUNLVote</a> (<a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> const &amp;myId, <a class="el" href="classbeast_1_1Journal.html">beast::Journal</a> j)</td></tr>
<tr class="memdesc:afb3ed2c981663495ad603c103040fbf1"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor. <a href="classripple_1_1NegativeUNLVote.html#afb3ed2c981663495ad603c103040fbf1">More...</a><br /></td></tr>
<tr class="separator:afb3ed2c981663495ad603c103040fbf1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a97f003bda574fab190cf2fae6016cd83"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a97f003bda574fab190cf2fae6016cd83">~NegativeUNLVote</a> ()=default</td></tr>
<tr class="separator:a97f003bda574fab190cf2fae6016cd83"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac58c464cefde1519ac23d1b51aa28833"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#ac58c464cefde1519ac23d1b51aa28833">doVoting</a> (<a class="elRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>&lt; <a class="el" href="classripple_1_1Ledger.html">Ledger</a> const &gt; const &amp;prevLedger, <a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="classripple_1_1PublicKey.html">PublicKey</a> &gt; const &amp;unlKeys, <a class="el" href="namespaceripple.html#af4f638fef00deb6c3f611b9639f66d7a">RCLValidations</a> &amp;validations, <a class="elRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>&lt; <a class="el" href="classripple_1_1SHAMap.html">SHAMap</a> &gt; const &amp;initialSet)</td></tr>
<tr class="memdesc:ac58c464cefde1519ac23d1b51aa28833"><td class="mdescLeft">&#160;</td><td class="mdescRight">Cast our local vote on the NegativeUNL candidates. <a href="classripple_1_1NegativeUNLVote.html#ac58c464cefde1519ac23d1b51aa28833">More...</a><br /></td></tr>
<tr class="separator:ac58c464cefde1519ac23d1b51aa28833"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af279cb391bcbed65e431f14d6322441c"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#af279cb391bcbed65e431f14d6322441c">newValidators</a> (<a class="el" href="namespaceripple.html#a12af8e98b794e8ee3b4dbecaed2a4efd">LedgerIndex</a> seq, <a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;nowTrusted)</td></tr>
<tr class="memdesc:af279cb391bcbed65e431f14d6322441c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Notify <a class="el" href="classripple_1_1NegativeUNLVote.html" title="Manager to create NegativeUNL votes.">NegativeUNLVote</a> that new validators are added. <a href="classripple_1_1NegativeUNLVote.html#af279cb391bcbed65e431f14d6322441c">More...</a><br /></td></tr>
<tr class="separator:af279cb391bcbed65e431f14d6322441c"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-static-attribs"></a>
Static Public Attributes</h2></td></tr>
<tr class="memitem:ab76d9fbc4b6a779ef802d683ce6aff5f"><td class="memItemLeft" align="right" valign="top">static constexpr size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#ab76d9fbc4b6a779ef802d683ce6aff5f">negativeUNLLowWaterMark</a></td></tr>
<tr class="memdesc:ab76d9fbc4b6a779ef802d683ce6aff5f"><td class="mdescLeft">&#160;</td><td class="mdescRight">A validator is considered unreliable if its validations is less than negativeUNLLowWaterMark in the last flag ledger period. <a href="classripple_1_1NegativeUNLVote.html#ab76d9fbc4b6a779ef802d683ce6aff5f">More...</a><br /></td></tr>
<tr class="separator:ab76d9fbc4b6a779ef802d683ce6aff5f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2f5602017495d3901ff8d662c38891af"><td class="memItemLeft" align="right" valign="top">static constexpr size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a2f5602017495d3901ff8d662c38891af">negativeUNLHighWaterMark</a></td></tr>
<tr class="memdesc:a2f5602017495d3901ff8d662c38891af"><td class="mdescLeft">&#160;</td><td class="mdescRight">An unreliable validator must have more than negativeUNLHighWaterMark validations in the last flag ledger period to be re-enabled. <a href="classripple_1_1NegativeUNLVote.html#a2f5602017495d3901ff8d662c38891af">More...</a><br /></td></tr>
<tr class="separator:a2f5602017495d3901ff8d662c38891af"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:afd511e1daa58039d360430adf4043f0a"><td class="memItemLeft" align="right" valign="top">static constexpr size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#afd511e1daa58039d360430adf4043f0a">negativeUNLMinLocalValsToVote</a></td></tr>
<tr class="memdesc:afd511e1daa58039d360430adf4043f0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The minimum number of validations of the local node for it to participate in the voting. <a href="classripple_1_1NegativeUNLVote.html#afd511e1daa58039d360430adf4043f0a">More...</a><br /></td></tr>
<tr class="separator:afd511e1daa58039d360430adf4043f0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab62eededf03134ab139bed2a3e4712b2"><td class="memItemLeft" align="right" valign="top">static constexpr size_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#ab62eededf03134ab139bed2a3e4712b2">newValidatorDisableSkip</a> = <a class="el" href="namespaceripple.html#a9a1e35684311191adb2870e2d88030fc">FLAG_LEDGER_INTERVAL</a> * 2</td></tr>
<tr class="memdesc:ab62eededf03134ab139bed2a3e4712b2"><td class="mdescLeft">&#160;</td><td class="mdescRight">We don't want to disable new validators immediately after adding them. <a href="classripple_1_1NegativeUNLVote.html#ab62eededf03134ab139bed2a3e4712b2">More...</a><br /></td></tr>
<tr class="separator:ab62eededf03134ab139bed2a3e4712b2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af2de75b9bfd6f9725a3dce10979fc128"><td class="memItemLeft" align="right" valign="top">static constexpr float&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#af2de75b9bfd6f9725a3dce10979fc128">negativeUNLMaxListed</a> = 0.25</td></tr>
<tr class="memdesc:af2de75b9bfd6f9725a3dce10979fc128"><td class="mdescLeft">&#160;</td><td class="mdescRight">We only want to put 25% of the UNL on the NegativeUNL. <a href="classripple_1_1NegativeUNLVote.html#af2de75b9bfd6f9725a3dce10979fc128">More...</a><br /></td></tr>
<tr class="separator:af2de75b9bfd6f9725a3dce10979fc128"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-methods"></a>
Private Member Functions</h2></td></tr>
<tr class="memitem:af8a85a2853312bc4b1ff9852a2498bd4"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#af8a85a2853312bc4b1ff9852a2498bd4">addTx</a> (<a class="el" href="namespaceripple.html#a12af8e98b794e8ee3b4dbecaed2a4efd">LedgerIndex</a> seq, <a class="el" href="classripple_1_1PublicKey.html">PublicKey</a> const &amp;vp, <a class="el" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cf">NegativeUNLModify</a> modify, <a class="elRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>&lt; <a class="el" href="classripple_1_1SHAMap.html">SHAMap</a> &gt; const &amp;initialSet)</td></tr>
<tr class="memdesc:af8a85a2853312bc4b1ff9852a2498bd4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Add a ttUNL_MODIFY Tx to the transaction set. <a href="classripple_1_1NegativeUNLVote.html#af8a85a2853312bc4b1ff9852a2498bd4">More...</a><br /></td></tr>
<tr class="separator:af8a85a2853312bc4b1ff9852a2498bd4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a34a78d1a576f170278ca9daae7b60b0b"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a34a78d1a576f170278ca9daae7b60b0b">choose</a> (<a class="el" href="namespaceripple.html#a356c68147333a9a48a344718038576d9">uint256</a> const &amp;randomPadData, <a class="elRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;candidates)</td></tr>
<tr class="memdesc:a34a78d1a576f170278ca9daae7b60b0b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Pick one candidate from a vector of candidates. <a href="classripple_1_1NegativeUNLVote.html#a34a78d1a576f170278ca9daae7b60b0b">More...</a><br /></td></tr>
<tr class="separator:a34a78d1a576f170278ca9daae7b60b0b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4293d7509ebb8528e12faeee020f0bf0"><td class="memItemLeft" align="right" valign="top"><a class="elRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional</a>&lt; <a class="el" href="namespaceripple.html#a46c521271235f4e2715d7fa8b68940ca">hash_map</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a>, <a class="elRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a4293d7509ebb8528e12faeee020f0bf0">buildScoreTable</a> (<a class="elRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>&lt; <a class="el" href="classripple_1_1Ledger.html">Ledger</a> const &gt; const &amp;prevLedger, <a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;unl, <a class="el" href="namespaceripple.html#af4f638fef00deb6c3f611b9639f66d7a">RCLValidations</a> &amp;validations)</td></tr>
<tr class="memdesc:a4293d7509ebb8528e12faeee020f0bf0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Build a reliability measurement score table of validators' validation messages in the last flag ledger period. <a href="classripple_1_1NegativeUNLVote.html#a4293d7509ebb8528e12faeee020f0bf0">More...</a><br /></td></tr>
<tr class="separator:a4293d7509ebb8528e12faeee020f0bf0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aad6b405da7214440280177d02be243ff"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="structripple_1_1NegativeUNLVote_1_1Candidates.html">Candidates</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#aad6b405da7214440280177d02be243ff">findAllCandidates</a> (<a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;unl, <a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;negUnl, <a class="el" href="namespaceripple.html#a46c521271235f4e2715d7fa8b68940ca">hash_map</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a>, <a class="elRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> &gt; const &amp;scoreTable)</td></tr>
<tr class="memdesc:aad6b405da7214440280177d02be243ff"><td class="mdescLeft">&#160;</td><td class="mdescRight">Process the score table and find all disabling and re-enabling candidates. <a href="classripple_1_1NegativeUNLVote.html#aad6b405da7214440280177d02be243ff">More...</a><br /></td></tr>
<tr class="separator:aad6b405da7214440280177d02be243ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a715cdaf670c930941605e79e41f37a12"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a715cdaf670c930941605e79e41f37a12">purgeNewValidators</a> (<a class="el" href="namespaceripple.html#a12af8e98b794e8ee3b4dbecaed2a4efd">LedgerIndex</a> seq)</td></tr>
<tr class="memdesc:a715cdaf670c930941605e79e41f37a12"><td class="mdescLeft">&#160;</td><td class="mdescRight">Purge validators that are not new anymore. <a href="classripple_1_1NegativeUNLVote.html#a715cdaf670c930941605e79e41f37a12">More...</a><br /></td></tr>
<tr class="separator:a715cdaf670c930941605e79e41f37a12"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pri-attribs"></a>
Private Attributes</h2></td></tr>
<tr class="memitem:a31a627b1220b08b6ee258bbb6bfed61c"><td class="memItemLeft" align="right" valign="top">const <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a31a627b1220b08b6ee258bbb6bfed61c">myId_</a></td></tr>
<tr class="separator:a31a627b1220b08b6ee258bbb6bfed61c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a045ac9f409d032963fedb01a724b4f6f"><td class="memItemLeft" align="right" valign="top"><a class="el" href="classbeast_1_1Journal.html">beast::Journal</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a045ac9f409d032963fedb01a724b4f6f">j_</a></td></tr>
<tr class="separator:a045ac9f409d032963fedb01a724b4f6f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa8c381a7b9dd1ea9ac0c06e03b89ca35"><td class="memItemLeft" align="right" valign="top"><a class="elRef" href="http://en.cppreference.com/w/cpp/thread/mutex.html">std::mutex</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#aa8c381a7b9dd1ea9ac0c06e03b89ca35">mutex_</a></td></tr>
<tr class="separator:aa8c381a7b9dd1ea9ac0c06e03b89ca35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad06aac6b466a08700b51ab59c5200108"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceripple.html#a46c521271235f4e2715d7fa8b68940ca">hash_map</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a>, <a class="el" href="namespaceripple.html#a12af8e98b794e8ee3b4dbecaed2a4efd">LedgerIndex</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#ad06aac6b466a08700b51ab59c5200108">newValidators_</a></td></tr>
<tr class="separator:ad06aac6b466a08700b51ab59c5200108"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a008614bce957cc424e60b19aa4ac4333"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a008614bce957cc424e60b19aa4ac4333">test::NegativeUNLVoteInternal_test</a></td></tr>
<tr class="separator:a008614bce957cc424e60b19aa4ac4333"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a02bbec76313b08a8ae44e40de39a9fa4"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classripple_1_1NegativeUNLVote.html#a02bbec76313b08a8ae44e40de39a9fa4">test::NegativeUNLVoteScoreTable_test</a></td></tr>
<tr class="separator:a02bbec76313b08a8ae44e40de39a9fa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Manager to create NegativeUNL votes. </p>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00046">46</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div><h2 class="groupheader">Member Enumeration Documentation</h2>
<a id="a4fc6405fdb02e58c350e175b6d58e7cf"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4fc6405fdb02e58c350e175b6d58e7cf">&#9670;&nbsp;</a></span>NegativeUNLModify</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">enum <a class="el" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cf">ripple::NegativeUNLVote::NegativeUNLModify</a></td>
</tr>
</table>
</div><div class="memdoc">
<p>A flag indicating whether a UNLModify Tx is to disable or to re-enable a validator. </p>
<table class="fieldtable">
<tr><th colspan="2">Enumerator</th></tr><tr><td class="fieldname"><a id="a4fc6405fdb02e58c350e175b6d58e7cfabe47f804b7bde80da32af12f772dc7c5"></a>ToDisable&#160;</td><td class="fielddoc"></td></tr>
<tr><td class="fieldname"><a id="a4fc6405fdb02e58c350e175b6d58e7cfa50aab7a54a0d4bee43c5e3fcedd50d13"></a>ToReEnable&#160;</td><td class="fielddoc"></td></tr>
</table>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00083">83</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Constructor &amp; Destructor Documentation</h2>
<a id="afb3ed2c981663495ad603c103040fbf1"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afb3ed2c981663495ad603c103040fbf1">&#9670;&nbsp;</a></span>NegativeUNLVote()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">ripple::NegativeUNLVote::NegativeUNLVote </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> const &amp;&#160;</td>
<td class="paramname"><em>myId</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classbeast_1_1Journal.html">beast::Journal</a>&#160;</td>
<td class="paramname"><em>j</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Constructor. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">myId</td><td>the NodeID of the local node </td></tr>
<tr><td class="paramname">j</td><td>log </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8cpp_source.html#l00027">27</a> of file <a class="el" href="NegativeUNLVote_8cpp_source.html">NegativeUNLVote.cpp</a>.</p>
</div>
</div>
<a id="a97f003bda574fab190cf2fae6016cd83"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a97f003bda574fab190cf2fae6016cd83">&#9670;&nbsp;</a></span>~NegativeUNLVote()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">ripple::NegativeUNLVote::~NegativeUNLVote </td>
<td>(</td>
<td class="paramname"></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">default</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
</div>
</div>
<h2 class="groupheader">Member Function Documentation</h2>
<a id="ac58c464cefde1519ac23d1b51aa28833"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ac58c464cefde1519ac23d1b51aa28833">&#9670;&nbsp;</a></span>doVoting()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ripple::NegativeUNLVote::doVoting </td>
<td>(</td>
<td class="paramtype"><a class="elRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>&lt; <a class="el" href="classripple_1_1Ledger.html">Ledger</a> const &gt; const &amp;&#160;</td>
<td class="paramname"><em>prevLedger</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="classripple_1_1PublicKey.html">PublicKey</a> &gt; const &amp;&#160;</td>
<td class="paramname"><em>unlKeys</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceripple.html#af4f638fef00deb6c3f611b9639f66d7a">RCLValidations</a> &amp;&#160;</td>
<td class="paramname"><em>validations</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>&lt; <a class="el" href="classripple_1_1SHAMap.html">SHAMap</a> &gt; const &amp;&#160;</td>
<td class="paramname"><em>initialSet</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Cast our local vote on the NegativeUNL candidates. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">prevLedger</td><td>the parent ledger </td></tr>
<tr><td class="paramname">unlKeys</td><td>the trusted master keys of validators in the UNL </td></tr>
<tr><td class="paramname">validations</td><td>the validation message container </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>validations is an in/out parameter. It contains validation messages that will be deleted when no longer needed by other consensus logic. This function asks it to keep the validation messages long enough for this function to use. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">initialSet</td><td>the transactions set for adding ttUNL_MODIFY Tx if any </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8cpp_source.html#l00033">33</a> of file <a class="el" href="NegativeUNLVote_8cpp_source.html">NegativeUNLVote.cpp</a>.</p>
</div>
</div>
<a id="af279cb391bcbed65e431f14d6322441c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af279cb391bcbed65e431f14d6322441c">&#9670;&nbsp;</a></span>newValidators()</h2>
<div class="memitem">
<div class="memproto">
<table class="memname">
<tr>
<td class="memname">void ripple::NegativeUNLVote::newValidators </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a12af8e98b794e8ee3b4dbecaed2a4efd">LedgerIndex</a>&#160;</td>
<td class="paramname"><em>seq</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;&#160;</td>
<td class="paramname"><em>nowTrusted</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</div><div class="memdoc">
<p>Notify <a class="el" href="classripple_1_1NegativeUNLVote.html" title="Manager to create NegativeUNL votes.">NegativeUNLVote</a> that new validators are added. </p>
<p>So that they don't get voted to the NegativeUNL immediately.</p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">seq</td><td>the current LedgerIndex when adding the new validators </td></tr>
<tr><td class="paramname">nowTrusted</td><td>the new validators </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8cpp_source.html#l00317">317</a> of file <a class="el" href="NegativeUNLVote_8cpp_source.html">NegativeUNLVote.cpp</a>.</p>
</div>
</div>
<a id="af8a85a2853312bc4b1ff9852a2498bd4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af8a85a2853312bc4b1ff9852a2498bd4">&#9670;&nbsp;</a></span>addTx()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void ripple::NegativeUNLVote::addTx </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a12af8e98b794e8ee3b4dbecaed2a4efd">LedgerIndex</a>&#160;</td>
<td class="paramname"><em>seq</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classripple_1_1PublicKey.html">PublicKey</a> const &amp;&#160;</td>
<td class="paramname"><em>vp</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="classripple_1_1NegativeUNLVote.html#a4fc6405fdb02e58c350e175b6d58e7cf">NegativeUNLModify</a>&#160;</td>
<td class="paramname"><em>modify</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>&lt; <a class="el" href="classripple_1_1SHAMap.html">SHAMap</a> &gt; const &amp;&#160;</td>
<td class="paramname"><em>initialSet</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Add a ttUNL_MODIFY Tx to the transaction set. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">seq</td><td>the LedgerIndex when adding the Tx </td></tr>
<tr><td class="paramname">vp</td><td>the master public key of the validator </td></tr>
<tr><td class="paramname">modify</td><td>disabling or re-enabling the validator </td></tr>
<tr><td class="paramname">initialSet</td><td>the transaction set </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8cpp_source.html#l00107">107</a> of file <a class="el" href="NegativeUNLVote_8cpp_source.html">NegativeUNLVote.cpp</a>.</p>
</div>
</div>
<a id="a34a78d1a576f170278ca9daae7b60b0b"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a34a78d1a576f170278ca9daae7b60b0b">&#9670;&nbsp;</a></span>choose()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> ripple::NegativeUNLVote::choose </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a356c68147333a9a48a344718038576d9">uint256</a> const &amp;&#160;</td>
<td class="paramname"><em>randomPadData</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="elRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;&#160;</td>
<td class="paramname"><em>candidates</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Pick one candidate from a vector of candidates. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">randomPadData</td><td>the data used for picking a candidate. </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>Nodes must use the same randomPadData for picking the same candidate. The hash of the parent ledger is used. </dd></dl>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">candidates</td><td>the vector of candidates </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the picked candidate </dd></dl>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8cpp_source.html#l00139">139</a> of file <a class="el" href="NegativeUNLVote_8cpp_source.html">NegativeUNLVote.cpp</a>.</p>
</div>
</div>
<a id="a4293d7509ebb8528e12faeee020f0bf0"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a4293d7509ebb8528e12faeee020f0bf0">&#9670;&nbsp;</a></span>buildScoreTable()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="elRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional</a>&lt; <a class="el" href="namespaceripple.html#a46c521271235f4e2715d7fa8b68940ca">hash_map</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a>, <a class="elRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> &gt; &gt; ripple::NegativeUNLVote::buildScoreTable </td>
<td>(</td>
<td class="paramtype"><a class="elRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a>&lt; <a class="el" href="classripple_1_1Ledger.html">Ledger</a> const &gt; const &amp;&#160;</td>
<td class="paramname"><em>prevLedger</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;&#160;</td>
<td class="paramname"><em>unl</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceripple.html#af4f638fef00deb6c3f611b9639f66d7a">RCLValidations</a> &amp;&#160;</td>
<td class="paramname"><em>validations</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Build a reliability measurement score table of validators' validation messages in the last flag ledger period. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">prevLedger</td><td>the parent ledger </td></tr>
<tr><td class="paramname">unl</td><td>the trusted master keys </td></tr>
<tr><td class="paramname">validations</td><td>the validation container </td></tr>
</table>
</dd>
</dl>
<dl class="section note"><dt>Note</dt><dd>validations is an in/out parameter. It contains validation messages that will be deleted when no longer needed by other consensus logic. This function asks it to keep the validation messages long enough for this function to use. </dd></dl>
<dl class="section return"><dt>Returns</dt><dd>the built scoreTable or empty optional if table could not be built </dd></dl>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8cpp_source.html#l00158">158</a> of file <a class="el" href="NegativeUNLVote_8cpp_source.html">NegativeUNLVote.cpp</a>.</p>
</div>
</div>
<a id="aad6b405da7214440280177d02be243ff"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aad6b405da7214440280177d02be243ff">&#9670;&nbsp;</a></span>findAllCandidates()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="structripple_1_1NegativeUNLVote_1_1Candidates.html">NegativeUNLVote::Candidates</a> ripple::NegativeUNLVote::findAllCandidates </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;&#160;</td>
<td class="paramname"><em>unl</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a7750eec5e079354285f1d60cfd0247ca">hash_set</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> &gt; const &amp;&#160;</td>
<td class="paramname"><em>negUnl</em>, </td>
</tr>
<tr>
<td class="paramkey"></td>
<td></td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a46c521271235f4e2715d7fa8b68940ca">hash_map</a>&lt; <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a>, <a class="elRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> &gt; const &amp;&#160;</td>
<td class="paramname"><em>scoreTable</em>&#160;</td>
</tr>
<tr>
<td></td>
<td>)</td>
<td></td><td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Process the score table and find all disabling and re-enabling candidates. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">unl</td><td>the trusted master keys </td></tr>
<tr><td class="paramname">negUnl</td><td>the NegativeUNL </td></tr>
<tr><td class="paramname">scoreTable</td><td>the score table </td></tr>
</table>
</dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>the candidates to disable and the candidates to re-enable </dd></dl>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8cpp_source.html#l00242">242</a> of file <a class="el" href="NegativeUNLVote_8cpp_source.html">NegativeUNLVote.cpp</a>.</p>
</div>
</div>
<a id="a715cdaf670c930941605e79e41f37a12"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a715cdaf670c930941605e79e41f37a12">&#9670;&nbsp;</a></span>purgeNewValidators()</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">void ripple::NegativeUNLVote::purgeNewValidators </td>
<td>(</td>
<td class="paramtype"><a class="el" href="namespaceripple.html#a12af8e98b794e8ee3b4dbecaed2a4efd">LedgerIndex</a>&#160;</td>
<td class="paramname"><em>seq</em></td><td>)</td>
<td></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>Purge validators that are not new anymore. </p>
<dl class="params"><dt>Parameters</dt><dd>
<table class="params">
<tr><td class="paramname">seq</td><td>the current LedgerIndex </td></tr>
</table>
</dd>
</dl>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8cpp_source.html#l00334">334</a> of file <a class="el" href="NegativeUNLVote_8cpp_source.html">NegativeUNLVote.cpp</a>.</p>
</div>
</div>
<h2 class="groupheader">Friends And Related Function Documentation</h2>
<a id="a008614bce957cc424e60b19aa4ac4333"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a008614bce957cc424e60b19aa4ac4333">&#9670;&nbsp;</a></span>test::NegativeUNLVoteInternal_test</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">friend class <a class="el" href="classripple_1_1test_1_1NegativeUNLVoteInternal__test.html">test::NegativeUNLVoteInternal_test</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00211">211</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<a id="a02bbec76313b08a8ae44e40de39a9fa4"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a02bbec76313b08a8ae44e40de39a9fa4">&#9670;&nbsp;</a></span>test::NegativeUNLVoteScoreTable_test</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">friend class <a class="el" href="classripple_1_1test_1_1NegativeUNLVoteScoreTable__test.html">test::NegativeUNLVoteScoreTable_test</a></td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00212">212</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<h2 class="groupheader">Member Data Documentation</h2>
<a id="ab76d9fbc4b6a779ef802d683ce6aff5f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab76d9fbc4b6a779ef802d683ce6aff5f">&#9670;&nbsp;</a></span>negativeUNLLowWaterMark</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr size_t ripple::NegativeUNLVote::negativeUNLLowWaterMark</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div>
<div class="line"> <a class="code" href="namespaceripple.html#a9a1e35684311191adb2870e2d88030fc">FLAG_LEDGER_INTERVAL</a> * 50 / 100</div>
</div><!-- fragment -->
<p>A validator is considered unreliable if its validations is less than negativeUNLLowWaterMark in the last flag ledger period. </p>
<p>An unreliable validator is a candidate to be disabled by the NegativeUNL protocol. </p>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00055">55</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<a id="a2f5602017495d3901ff8d662c38891af"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a2f5602017495d3901ff8d662c38891af">&#9670;&nbsp;</a></span>negativeUNLHighWaterMark</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr size_t ripple::NegativeUNLVote::negativeUNLHighWaterMark</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div>
<div class="line"> <a class="code" href="namespaceripple.html#a9a1e35684311191adb2870e2d88030fc">FLAG_LEDGER_INTERVAL</a> * 80 / 100</div>
</div><!-- fragment -->
<p>An unreliable validator must have more than negativeUNLHighWaterMark validations in the last flag ledger period to be re-enabled. </p>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00061">61</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<a id="afd511e1daa58039d360430adf4043f0a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#afd511e1daa58039d360430adf4043f0a">&#9670;&nbsp;</a></span>negativeUNLMinLocalValsToVote</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr size_t ripple::NegativeUNLVote::negativeUNLMinLocalValsToVote</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<b>Initial value:</b><div class="fragment"><div class="line">=</div>
<div class="line"> <a class="code" href="namespaceripple.html#a9a1e35684311191adb2870e2d88030fc">FLAG_LEDGER_INTERVAL</a> * 90 / 100</div>
</div><!-- fragment -->
<p>The minimum number of validations of the local node for it to participate in the voting. </p>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00067">67</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<a id="ab62eededf03134ab139bed2a3e4712b2"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ab62eededf03134ab139bed2a3e4712b2">&#9670;&nbsp;</a></span>newValidatorDisableSkip</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr size_t ripple::NegativeUNLVote::newValidatorDisableSkip = <a class="el" href="namespaceripple.html#a9a1e35684311191adb2870e2d88030fc">FLAG_LEDGER_INTERVAL</a> * 2</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>We don't want to disable new validators immediately after adding them. </p>
<p>So we skip voting for disabling them for 2 flag ledgers. </p>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00073">73</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<a id="af2de75b9bfd6f9725a3dce10979fc128"></a>
<h2 class="memtitle"><span class="permalink"><a href="#af2de75b9bfd6f9725a3dce10979fc128">&#9670;&nbsp;</a></span>negativeUNLMaxListed</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">constexpr float ripple::NegativeUNLVote::negativeUNLMaxListed = 0.25</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">static</span><span class="mlabel">constexpr</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p>We only want to put 25% of the UNL on the NegativeUNL. </p>
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00077">77</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<a id="a31a627b1220b08b6ee258bbb6bfed61c"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a31a627b1220b08b6ee258bbb6bfed61c">&#9670;&nbsp;</a></span>myId_</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname">const <a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a> ripple::NegativeUNLVote::myId_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00127">127</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<a id="a045ac9f409d032963fedb01a724b4f6f"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a045ac9f409d032963fedb01a724b4f6f">&#9670;&nbsp;</a></span>j_</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="classbeast_1_1Journal.html">beast::Journal</a> ripple::NegativeUNLVote::j_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00128">128</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<a id="aa8c381a7b9dd1ea9ac0c06e03b89ca35"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa8c381a7b9dd1ea9ac0c06e03b89ca35">&#9670;&nbsp;</a></span>mutex_</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="elRef" href="http://en.cppreference.com/w/cpp/thread/mutex.html">std::mutex</a> ripple::NegativeUNLVote::mutex_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">mutable</span><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00129">129</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
<a id="ad06aac6b466a08700b51ab59c5200108"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad06aac6b466a08700b51ab59c5200108">&#9670;&nbsp;</a></span>newValidators_</h2>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
<tr>
<td class="mlabels-left">
<table class="memname">
<tr>
<td class="memname"><a class="el" href="namespaceripple.html#a46c521271235f4e2715d7fa8b68940ca">hash_map</a>&lt;<a class="el" href="namespaceripple.html#a4e412a5834900d9affa8db3ac1a27209">NodeID</a>, <a class="el" href="namespaceripple.html#a12af8e98b794e8ee3b4dbecaed2a4efd">LedgerIndex</a>&gt; ripple::NegativeUNLVote::newValidators_</td>
</tr>
</table>
</td>
<td class="mlabels-right">
<span class="mlabels"><span class="mlabel">private</span></span> </td>
</tr>
</table>
</div><div class="memdoc">
<p class="definition">Definition at line <a class="el" href="NegativeUNLVote_8h_source.html#l00130">130</a> of file <a class="el" href="NegativeUNLVote_8h_source.html">NegativeUNLVote.h</a>.</p>
</div>
</div>
</div><!-- contents -->
<div class="ttc" id="anamespaceripple_html_a9a1e35684311191adb2870e2d88030fc"><div class="ttname"><a href="namespaceripple.html#a9a1e35684311191adb2870e2d88030fc">ripple::FLAG_LEDGER_INTERVAL</a></div><div class="ttdeci">constexpr std::uint32_t FLAG_LEDGER_INTERVAL</div><div class="ttdef"><b>Definition:</b> <a href="Ledger_8h_source.html#l00426">Ledger.h:426</a></div></div>
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.17
</small></address>
</body>
</html>