Files
rippled/Loan__test_8cpp_source.html
2026-02-03 11:11:33 -08:00

7531 lines
1.5 MiB
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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" lang="en-US">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=11"/>
<meta name="generator" content="Doxygen 1.9.8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>rippled: Loan_test.cpp Source File</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 id="projectrow">
<td id="projectalign">
<div id="projectname">rippled
</div>
</td>
</tr>
</tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.9.8 -->
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
var searchBox = new SearchBox("searchBox", "search/",'.html');
/* @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:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(function() {
initMenu('',true,false,'search.php','Search');
$(document).ready(function() { init_search(); });
});
/* @license-end */
</script>
<div id="main-nav"></div>
<script type="text/javascript">
/* @license magnet:?xt=urn:btih:d3d9a9a6595521f9666a5e94cc830dab83b65699&amp;dn=expat.txt MIT */
$(document).ready(function() { init_codefold(0); });
/* @license-end */
</script>
<!-- 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">
<div id="MSearchResults">
<div class="SRPage">
<div id="SRIndex">
<div id="SRResults"></div>
<div class="SRStatus" id="Loading">Loading...</div>
<div class="SRStatus" id="Searching">Searching...</div>
<div class="SRStatus" id="NoMatches">No Matches</div>
</div>
</div>
</div>
</div>
<div id="nav-path" class="navpath">
<ul>
<li class="navelem"><a class="el" href="dir_120ed4da3e3217b1e7fc0b4f48568e79.html">test</a></li><li class="navelem"><a class="el" href="dir_7ab758b8a77751d62709b12ccae53e10.html">app</a></li> </ul>
</div>
</div><!-- top -->
<div class="header">
<div class="headertitle"><div class="title">Loan_test.cpp</div></div>
</div><!--header-->
<div class="contents">
<div class="fragment"><div class="line"><a id="l00001" name="l00001"></a><span class="lineno"> 1</span><span class="preprocessor">#include &lt;xrpl/beast/unit_test/suite.h&gt;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span><span class="comment">//</span></div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &lt;test/jtx.h&gt;</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;test/jtx/mpt.h&gt;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span> </div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;xrpld/app/misc/LendingHelpers.h&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;xrpld/app/misc/LoadFeeTrack.h&gt;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;xrpld/app/tx/detail/Batch.h&gt;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;xrpld/app/tx/detail/LoanSet.h&gt;</span></div>
<div class="line"><a id="l00010" name="l00010"></a><span class="lineno"> 10</span> </div>
<div class="line"><a id="l00011" name="l00011"></a><span class="lineno"> 11</span><span class="preprocessor">#include &lt;xrpl/beast/xor_shift_engine.h&gt;</span></div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="preprocessor">#include &lt;xrpl/protocol/SField.h&gt;</span></div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span> </div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span><span class="preprocessor">#include &lt;<a class="codeRef" href="http://en.cppreference.com/w/cpp/header/chrono.html">chrono</a>&gt;</span></div>
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"> 15</span> </div>
<div class="line"><a id="l00016" name="l00016"></a><span class="lineno"> 16</span><span class="keyword">namespace </span><a class="code hl_namespace" href="namespacexrpl.html">xrpl</a> {</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"> 17</span><span class="keyword">namespace </span>test {</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="foldopen" id="foldopen00019" data-start="{" data-end="};">
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html"> 19</a></span><span class="keyword">class </span><a class="code hl_class" href="classxrpl_1_1test_1_1Loan__test.html">Loan_test</a> : <span class="keyword">public</span> <a class="code hl_class" href="classbeast_1_1unit__test_1_1suite.html">beast::unit_test::suite</a></div>
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"> 20</span>{</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span><span class="keyword">protected</span>:</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <span class="comment">// Ensure that all the features needed for Lending Protocol are included,</span></div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <span class="comment">// even if they are set to unsupported.</span></div>
<div class="foldopen" id="foldopen00024" data-start="{" data-end="};">
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a2319fbdfa7d469531a7f2b8833e283b3"> 24</a></span> <a class="code hl_class" href="classxrpl_1_1FeatureBitset.html">FeatureBitset</a> <span class="keyword">const</span> <a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a2319fbdfa7d469531a7f2b8833e283b3">all</a>{</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a948c1d39ac993c7db8cdb69f4dd62c68">jtx::testable_amendments</a>() | featureMPTokensV1 | featureSingleAssetVault | featureLendingProtocol};</div>
</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> </div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a0e7045b5ac0a07c23a631dd911475b6b"> 27</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span> <a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a0e7045b5ac0a07c23a631dd911475b6b">iouCurrency</a>{<span class="stringliteral">&quot;IOU&quot;</span>};</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> </div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00030" data-start="{" data-end="}">
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#aa5f024cff13bac04480e38a4e5e35ae1"> 30</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa5f024cff13bac04480e38a4e5e35ae1">testDisabled</a>()</div>
<div class="line"><a id="l00031" name="l00031"></a><span class="lineno"> 31</span> {</div>
<div class="line"><a id="l00032" name="l00032"></a><span class="lineno"> 32</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Disabled&quot;</span>);</div>
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"> 33</span> <span class="comment">// Lending Protocol depends on Single Asset Vault (SAV). Test</span></div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <span class="comment">// combinations of the two amendments.</span></div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <span class="comment">// Single Asset Vault depends on MPTokensV1, but don&#39;t test every combo</span></div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <span class="comment">// of that.</span></div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> <span class="keyword">auto</span> failAll = [<span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1FeatureBitset.html">FeatureBitset</a> features) {</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, features);</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> </div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> bob{<span class="stringliteral">&quot;bob&quot;</span>};</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_enumvalue" href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5dab963e1952393b6f6899c6978de03a6f6">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> </div>
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"> 45</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(alice, env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a7e2bf847bf817405a5d8db448d8b4f6f">seq</a>(alice));</div>
<div class="line"><a id="l00046" name="l00046"></a><span class="lineno"> 46</span> </div>
<div class="line"><a id="l00047" name="l00047"></a><span class="lineno"> 47</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> </div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="comment">// counter party signature is optional on LoanSet. Confirm that by</span></div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> <span class="comment">// sending transaction without one.</span></div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> <span class="keyword">auto</span> setTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(alice, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(10000)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a9f1529f017ea5997b90a13bc159b586f">temDISABLED</a>));</div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> env(setTx);</div>
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"> 54</span> </div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> <span class="comment">// All loan transactions are disabled.</span></div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="comment">// 1. LoanSet</span></div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> setTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(setTx, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, bob), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a9f1529f017ea5997b90a13bc159b586f">temDISABLED</a>));</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</span> env(setTx);</div>
<div class="line"><a id="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="comment">// Actual sequence will be based off the loan broker, but we</span></div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="comment">// obviously don&#39;t have one of those if the amendment is disabled</span></div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a7e2bf847bf817405a5d8db448d8b4f6f">seq</a>(alice));</div>
<div class="line"><a id="l00062" name="l00062"></a><span class="lineno"> 62</span> <span class="comment">// Other Loan transactions are disabled, too.</span></div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> <span class="comment">// 2. LoanDelete</span></div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> env(del(alice, loanKeylet.key), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a9f1529f017ea5997b90a13bc159b586f">temDISABLED</a>));</div>
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"> 65</span> <span class="comment">// 3. LoanManage</span></div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> env(manage(alice, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a9f1529f017ea5997b90a13bc159b586f">temDISABLED</a>));</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <span class="comment">// 4. LoanPay</span></div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(alice, loanKeylet.key, <a class="code hl_enumvalue" href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5dab963e1952393b6f6899c6978de03a6f6">XRP</a>(500)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a9f1529f017ea5997b90a13bc159b586f">temDISABLED</a>));</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> };</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> failAll(<a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a2319fbdfa7d469531a7f2b8833e283b3">all</a> - featureMPTokensV1);</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> failAll(<a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a2319fbdfa7d469531a7f2b8833e283b3">all</a> - featureSingleAssetVault - featureLendingProtocol);</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> failAll(<a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a2319fbdfa7d469531a7f2b8833e283b3">all</a> - featureSingleAssetVault);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> failAll(<a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a2319fbdfa7d469531a7f2b8833e283b3">all</a> - featureLendingProtocol);</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> }</div>
</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> </div>
<div class="foldopen" id="foldopen00076" data-start="{" data-end="};">
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html"> 76</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a></div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> {</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc"> 78</a></span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = 1&#39;000&#39;000;</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a25badc9387457857607edbadf6fac63e"> 79</a></span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a25badc9387457857607edbadf6fac63e">debtMax</a> = 25&#39;000;</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#afd23bc194671b792907026345c880e4a"> 80</a></span> <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#afd23bc194671b792907026345c880e4a">coverRateMin</a> = <a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(10);</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a329bf5a8059bcca800bdca04ca187f6c"> 81</a></span> <span class="keywordtype">int</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a329bf5a8059bcca800bdca04ca187f6c">coverDeposit</a> = 1000;</div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4"> 82</a></span> <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>{100};</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a864cdf9099cbadba6b525029eedeb41e"> 83</a></span> <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a864cdf9099cbadba6b525029eedeb41e">coverRateLiquidation</a> = <a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(25);</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a13b6cc2777f0ca3d71642f68e5baa3ee"> 84</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a13b6cc2777f0ca3d71642f68e5baa3ee">data</a>{};</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#ae646b87dc7a420634f1413c6a2cf4562"> 85</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a> = 0;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> </div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a></div>
<div class="foldopen" id="foldopen00088" data-start="{" data-end="}">
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a06aa9eec8beeb6eae8477cb0eeb7675c"> 88</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a06aa9eec8beeb6eae8477cb0eeb7675c">maxCoveredLoanValue</a>(<a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; currentDebt)<span class="keyword"> const</span></div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <a class="code hl_class" href="classxrpl_1_1NumberRoundModeGuard.html">NumberRoundModeGuard</a> mg(<a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aefac6c5bd63a85dcee4fc69baf788d40">Number::downward</a>);</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> <span class="keyword">auto</span> debtLimit = <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a329bf5a8059bcca800bdca04ca187f6c">coverDeposit</a> * <a class="code hl_function" href="namespacexrpl.html#ab37df14edb5505c053e5756f280ac70f">tenthBipsPerUnity</a>.<a class="code hl_function" href="classxrpl_1_1unit_1_1ValueUnit.html#a11cab90191ba952710e80df82c3a722c">value</a>() / <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#afd23bc194671b792907026345c880e4a">coverRateMin</a>.<a class="code hl_function" href="classxrpl_1_1unit_1_1ValueUnit.html#a11cab90191ba952710e80df82c3a722c">value</a>();</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> </div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> <span class="keywordflow">return</span> debtLimit - currentDebt;</div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> }</div>
</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> </div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> <span class="keyword">static</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span>&amp;</div>
<div class="foldopen" id="foldopen00097" data-start="{" data-end="}">
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a5eff62ebb8fc160f1e1ec740c9fd4bb4"> 97</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a5eff62ebb8fc160f1e1ec740c9fd4bb4">defaults</a>()</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> {</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> <span class="keyword">static</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> result{};</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <span class="keywordflow">return</span> result;</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> }</div>
</div>
<div class="line"><a id="l00102" name="l00102"></a><span class="lineno"> 102</span> </div>
<div class="line"><a id="l00103" name="l00103"></a><span class="lineno"> 103</span> <span class="comment">// TODO: create an operator() which returns a transaction similar to</span></div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// LoanParameters</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> };</div>
</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> </div>
<div class="foldopen" id="foldopen00107" data-start="{" data-end="};">
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html"> 107</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> {</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327"> 109</a></span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">jtx::PrettyAsset</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>;</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6"> 110</a></span> <a class="code hl_class" href="classxrpl_1_1base__uint.html">uint256</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>;</div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#a8c0c0c0e8fb2481108157ce6539f5cff"> 111</a></span> <a class="code hl_class" href="classxrpl_1_1base__uint.html">uint256</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#a8c0c0c0e8fb2481108157ce6539f5cff">vaultID</a>;</div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9"> 112</a></span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>;</div>
<div class="foldopen" id="foldopen00113" data-start="{" data-end="}">
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac61233b4dda4f94d6dec39c9eda22de4"> 113</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac61233b4dda4f94d6dec39c9eda22de4">BrokerInfo</a>(</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">jtx::PrettyAsset</a> <span class="keyword">const</span>&amp; asset_,</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; brokerKeylet_,</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; vaultKeylet_,</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span>&amp; p)</div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> : <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(asset_), <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>(brokerKeylet_.key), <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#a8c0c0c0e8fb2481108157ce6539f5cff">vaultID</a>(vaultKeylet_.key), <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>(p)</div>
<div class="line"><a id="l00119" name="l00119"></a><span class="lineno"> 119</span> {</div>
<div class="line"><a id="l00120" name="l00120"></a><span class="lineno"> 120</span> }</div>
</div>
<div class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> </div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a></div>
<div class="foldopen" id="foldopen00123" data-start="{" data-end="}">
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ae0a30bbbd93c503dda354456673fb205"> 123</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ae0a30bbbd93c503dda354456673fb205">brokerKeylet</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>);</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> }</div>
</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a></div>
<div class="foldopen" id="foldopen00128" data-start="{" data-end="}">
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac1399de1790b8d248a2f03fac1d4bbfc"> 128</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac1399de1790b8d248a2f03fac1d4bbfc">vaultKeylet</a>()<span class="keyword"> const</span></div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a9a7028770e8d9d38ca198d2096149766">keylet::vault</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#a8c0c0c0e8fb2481108157ce6539f5cff">vaultID</a>);</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> }</div>
</div>
<div class="line"><a id="l00132" name="l00132"></a><span class="lineno"> 132</span> </div>
<div class="line"><a id="l00133" name="l00133"></a><span class="lineno"> 133</span> <span class="keywordtype">int</span></div>
<div class="foldopen" id="foldopen00134" data-start="{" data-end="}">
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa9703000ec9d3519149be135245c57f2"> 134</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa9703000ec9d3519149be135245c57f2">vaultScale</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a> <span class="keyword">const</span>&amp; env)<span class="keyword"> const</span></div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> </div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a9a7028770e8d9d38ca198d2096149766">keylet::vault</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#a8c0c0c0e8fb2481108157ce6539f5cff">vaultID</a>));</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacexrpl.html#a45a752d036373d0d2e26aacd2ca9bdad">getAssetsTotalScale</a>(vaultSle);</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> }</div>
</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> };</div>
</div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> </div>
<div class="foldopen" id="foldopen00143" data-start="{" data-end="};">
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html"> 143</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a></div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> {</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="comment">// The account submitting the transaction. May be borrower or broker.</span></div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8"> 146</a></span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a>;</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> <span class="comment">// The counterparty. Should be the other of borrower or broker.</span></div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a63b7d9ad6ca11bdf6cc995b47c09245d"> 148</a></span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a63b7d9ad6ca11bdf6cc995b47c09245d">counter</a>;</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> <span class="comment">// Whether the counterparty is specified in the `counterparty` field, or</span></div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> <span class="comment">// only signs.</span></div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a84434db51db07c32a90851b7bf62b1d4"> 151</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a84434db51db07c32a90851b7bf62b1d4">counterpartyExplicit</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ab3d313a175cbd23b95d943878222b0a6"> 152</a></span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ab3d313a175cbd23b95d943878222b0a6">principalRequest</a>;</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a1e44cd94b5a2cfe4667fb2703b53d827"> 153</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;STAmount&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a1e44cd94b5a2cfe4667fb2703b53d827">setFee</a>{};</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af7ceb31d4bf7ebaf7002b4ad61752a44"> 154</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Number&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af7ceb31d4bf7ebaf7002b4ad61752a44">originationFee</a>{};</div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7ef3032e22b6dbb9de64f6358a7877cf"> 155</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Number&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7ef3032e22b6dbb9de64f6358a7877cf">serviceFee</a>{};</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a253a290b857fa217ec1aa5d613b7d4f3"> 156</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Number&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a253a290b857fa217ec1aa5d613b7d4f3">lateFee</a>{};</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7b3fae968ed270da3aab4ed742eeee13"> 157</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Number&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7b3fae968ed270da3aab4ed742eeee13">closeFee</a>{};</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad30970052c25bda6b0e9e605b79eee68"> 158</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;TenthBips32&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad30970052c25bda6b0e9e605b79eee68">overFee</a>{};</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a66077e07d08f1cd804e9b44242a0db69"> 159</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;TenthBips32&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a66077e07d08f1cd804e9b44242a0db69">interest</a>{};</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a094ab1fc90968d1093c74855237f137d"> 160</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;TenthBips32&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a094ab1fc90968d1093c74855237f137d">lateInterest</a>{};</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad3dbdc25c91318eb908350564776fd6e"> 161</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;TenthBips32&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad3dbdc25c91318eb908350564776fd6e">closeInterest</a>{};</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7f8814183ab2f9991a6f724ee82ec971"> 162</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;TenthBips32&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7f8814183ab2f9991a6f724ee82ec971">overpaymentInterest</a>{};</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51"> 163</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;std::uint32_t&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51">payTotal</a>{};</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61"> 164</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;std::uint32_t&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61">payInterval</a>{};</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#aaa833bb11ba7b43b54801a1bfb79c300"> 165</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;std::uint32_t&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#aaa833bb11ba7b43b54801a1bfb79c300">gracePd</a>{};</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a26bbcf3a409ef9e7d8d3b4af3733e931"> 166</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;std::uint32_t&gt;</a> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a>{};</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> </div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span>... FN&gt;</div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1JTx.html">jtx::JTx</a></div>
<div class="foldopen" id="foldopen00170" data-start="{" data-end="}">
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7da6e1152b9526ddf9ca39fa7fb79322"> 170</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7da6e1152b9526ddf9ca39fa7fb79322">operator()</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, FN <span class="keyword">const</span>&amp;... fN)<span class="keyword"> const</span></div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> <span class="keyword">using namespace </span>jtx::loan;</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> </div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1JTx.html">JTx</a> jt{<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a730c01ba24a9428b93c162915ffac2d1">loan::set</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a>, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ab3d313a175cbd23b95d943878222b0a6">principalRequest</a>).number(), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a>.value_or(0))};</div>
<div class="line"><a id="l00176" name="l00176"></a><span class="lineno"> 176</span> </div>
<div class="line"><a id="l00177" name="l00177"></a><span class="lineno"> 177</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a63b7d9ad6ca11bdf6cc995b47c09245d">counter</a>)(env, jt);</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> </div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>{<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a1e44cd94b5a2cfe4667fb2703b53d827">setFee</a>.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/optional/value_or.html">value_or</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2)}(env, jt);</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> </div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a84434db51db07c32a90851b7bf62b1d4">counterpartyExplicit</a>)</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> counterparty(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a63b7d9ad6ca11bdf6cc995b47c09245d">counter</a>)(env, jt);</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af7ceb31d4bf7ebaf7002b4ad61752a44">originationFee</a>)</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> loanOriginationFee(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(*originationFee).number())(env, jt);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7ef3032e22b6dbb9de64f6358a7877cf">serviceFee</a>)</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> loanServiceFee(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(*serviceFee).number())(env, jt);</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a253a290b857fa217ec1aa5d613b7d4f3">lateFee</a>)</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> latePaymentFee(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(*lateFee).number())(env, jt);</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7b3fae968ed270da3aab4ed742eeee13">closeFee</a>)</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> closePaymentFee(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(*closeFee).number())(env, jt);</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad30970052c25bda6b0e9e605b79eee68">overFee</a>)</div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> overpaymentFee (*<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad30970052c25bda6b0e9e605b79eee68">overFee</a>)(env, jt);</div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a66077e07d08f1cd804e9b44242a0db69">interest</a>)</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> interestRate (*<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a66077e07d08f1cd804e9b44242a0db69">interest</a>)(env, jt);</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a094ab1fc90968d1093c74855237f137d">lateInterest</a>)</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> lateInterestRate (*<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a094ab1fc90968d1093c74855237f137d">lateInterest</a>)(env, jt);</div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad3dbdc25c91318eb908350564776fd6e">closeInterest</a>)</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> closeInterestRate (*<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad3dbdc25c91318eb908350564776fd6e">closeInterest</a>)(env, jt);</div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7f8814183ab2f9991a6f724ee82ec971">overpaymentInterest</a>)</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> overpaymentInterestRate (*<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7f8814183ab2f9991a6f724ee82ec971">overpaymentInterest</a>)(env, jt);</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51">payTotal</a>)</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> paymentTotal (*<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51">payTotal</a>)(env, jt);</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61">payInterval</a>)</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> paymentInterval (*<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61">payInterval</a>)(env, jt);</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <span class="keywordflow">if</span> (<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#aaa833bb11ba7b43b54801a1bfb79c300">gracePd</a>)</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> gracePeriod (*<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#aaa833bb11ba7b43b54801a1bfb79c300">gracePd</a>)(env, jt);</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> </div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> <span class="keywordflow">return</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(jt, fN...);</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> }</div>
</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> };</div>
</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> </div>
<div class="foldopen" id="foldopen00212" data-start="{" data-end="};">
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html"> 212</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">PaymentParameters</a></div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> {</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ac10f0f39b2cef8126b07a7aa13baf988"> 214</a></span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ac10f0f39b2cef8126b07a7aa13baf988">overpaymentFactor</a> = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{1};</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a2e1370b56dd94df466792546475b023f"> 215</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Number&gt;</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a2e1370b56dd94df466792546475b023f">overpaymentExtra</a> = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>;</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a659b998481ea3f8073f7baea155c1f81"> 216</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a> = 0;</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ab14ea2a642db7b3ebbf93c1b49caebb4"> 217</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ab14ea2a642db7b3ebbf93c1b49caebb4">showStepBalances</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a274c0ee8eb7aca8d36062e71c2c1690d"> 218</a></span> <span class="keywordtype">bool</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a274c0ee8eb7aca8d36062e71c2c1690d">validateBalances</a> = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> </div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> <span class="keyword">static</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">PaymentParameters</a> <span class="keyword">const</span>&amp;</div>
<div class="foldopen" id="foldopen00221" data-start="{" data-end="}">
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a7eaf224726ca4af5e44253fea38bc339"> 221</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a7eaf224726ca4af5e44253fea38bc339">defaults</a>()</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> {</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> <span class="keyword">static</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">PaymentParameters</a> <span class="keyword">const</span> result{};</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> <span class="keywordflow">return</span> result;</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> }</div>
</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> };</div>
</div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> </div>
<div class="foldopen" id="foldopen00228" data-start="{" data-end="};">
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html"> 228</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html">LoanState</a></div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> {</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a3be6a4fbb9a2c37e3a410511ef1a10a4"> 230</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a3be6a4fbb9a2c37e3a410511ef1a10a4">previousPaymentDate</a> = 0;</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a5954f2c1ac54be9eb3164d90d073cb73"> 231</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a5954f2c1ac54be9eb3164d90d073cb73">startDate</a> = {};</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aeb13f712b02f4c2650243d9001677156"> 232</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aeb13f712b02f4c2650243d9001677156">nextPaymentDate</a> = 0;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aab539a8a36c1c03aa26a87184535a8c7"> 233</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aab539a8a36c1c03aa26a87184535a8c7">paymentRemaining</a> = 0;</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ab4ec0a2b13f69bb8fa78756c3f432e1d"> 234</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int32_t</a> <span class="keyword">const</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ab4ec0a2b13f69bb8fa78756c3f432e1d">loanScale</a> = 0;</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a10434ce558ef08b10dca1743ebc2131c"> 235</a></span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a10434ce558ef08b10dca1743ebc2131c">totalValue</a> = 0;</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ad5d54ef7384e4f97812089db11977db7"> 236</a></span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ad5d54ef7384e4f97812089db11977db7">principalOutstanding</a> = 0;</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#af2235821f055ad37320d930c7e1db312"> 237</a></span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#af2235821f055ad37320d930c7e1db312">managementFeeOutstanding</a> = 0;</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a9c452ceb162e85f536d6dc6dcd09375d"> 238</a></span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a9c452ceb162e85f536d6dc6dcd09375d">periodicPayment</a> = 0;</div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ae06eef6a44fb97414a4231aa95c088e4"> 239</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a> = 0;</div>
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a83e88518c4833ca58126ec8bd410eb73"> 240</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <span class="keyword">const</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a83e88518c4833ca58126ec8bd410eb73">paymentInterval</a> = 0;</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a47c3ac4e5b3fa0b58bee29b77fd50abd"> 241</a></span> <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a> <span class="keyword">const</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a47c3ac4e5b3fa0b58bee29b77fd50abd">interestRate</a>{};</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> };</div>
</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> </div>
<div class="foldopen" id="foldopen00247" data-start="{" data-end="};">
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html"> 247</a></span> <span class="keyword">struct </span><a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a></div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> {</div>
<div class="line"><a id="l00249" name="l00249"></a><span class="lineno"> 249</span> <span class="keyword">public</span>:</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2"> 250</a></span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a> <span class="keyword">const</span>&amp; <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>;</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e"> 251</a></span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>;</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa5de9ddecb90e00e73e81fe94261ca35"> 252</a></span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa5de9ddecb90e00e73e81fe94261ca35">pseudoAccount</a>;</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#ac47ad51b90a621abef35d31dbd63ea2b"> 253</a></span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#ac47ad51b90a621abef35d31dbd63ea2b">loanKeylet</a>;</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> </div>
<div class="foldopen" id="foldopen00255" data-start="{" data-end="}">
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a0d041cff7dc2574c747765a4a53f413f"> 255</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a0d041cff7dc2574c747765a4a53f413f">VerifyLoanStatus</a>(</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a> <span class="keyword">const</span>&amp; env_,</div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker_,</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; pseudo_,</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; keylet_)</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> : <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>(env_), <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>(broker_), <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa5de9ddecb90e00e73e81fe94261ca35">pseudoAccount</a>(pseudo_), <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#ac47ad51b90a621abef35d31dbd63ea2b">loanKeylet</a>(keylet_)</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> {</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> }</div>
</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> </div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00267" data-start="{" data-end="}">
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a79f1360ea24d102199a36d5d41b46d1b"> 267</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a79f1360ea24d102199a36d5d41b46d1b">checkBroker</a>(</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; principalOutstanding,</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; interestOwed,</div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a> interestRate,</div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> paymentInterval,</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> paymentsRemaining,</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a4ee345d5e6e5aba2de13526f1113ec4e">ownerCount</a>)<span class="keyword"> const</span></div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> brokerSle = <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>)); <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l00277" name="l00277"></a><span class="lineno"> 277</span> {</div>
<div class="line"><a id="l00278" name="l00278"></a><span class="lineno"> 278</span> <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a> <span class="keyword">const</span> managementFeeRate{brokerSle-&gt;at(sfManagementFeeRate)};</div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerDebt = brokerSle-&gt;at(sfDebtTotal);</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> <span class="keyword">auto</span> <span class="keyword">const</span> expectedDebt = principalOutstanding + interestOwed;</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(brokerDebt == expectedDebt);</div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(</div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa5de9ddecb90e00e73e81fe94261ca35">pseudoAccount</a>, <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>).<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a844148a5010081aacd11657cddd4b028">number</a>() == brokerSle-&gt;at(sfCoverAvailable));</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(brokerSle-&gt;at(sfOwnerCount) == <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a4ee345d5e6e5aba2de13526f1113ec4e">ownerCount</a>);</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> </div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> vaultSle = <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a9a7028770e8d9d38ca198d2096149766">keylet::vault</a>(brokerSle-&gt;at(sfVaultID))); <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(vaultSle))</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> {</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> vaultPseudo{<span class="stringliteral">&quot;vaultPseudoAccount&quot;</span>, vaultSle-&gt;at(sfAccount)};</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(</div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> vaultSle-&gt;at(sfAssetsAvailable) == <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(vaultPseudo, <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>).<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a844148a5010081aacd11657cddd4b028">number</a>());</div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a4ee345d5e6e5aba2de13526f1113ec4e">ownerCount</a> == 0)</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> {</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> <span class="comment">// Allow some slop for rounding IOUs</span></div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> </div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> <span class="comment">// TODO: This needs to be an exact match once all the</span></div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="comment">// other rounding issues are worked out.</span></div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = vaultSle-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_enumvalue" href="namespacexrpl.html#a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb">available</a> = vaultSle-&gt;at(sfAssetsAvailable);</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> total == <a class="code hl_enumvalue" href="namespacexrpl.html#a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb">available</a> ||</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> (!<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a4d74996b3b3f23322e00b032c8c35baa">integral</a>() &amp;&amp; <a class="code hl_enumvalue" href="namespacexrpl.html#a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb">available</a> != 0 &amp;&amp;</div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> ((total - <a class="code hl_enumvalue" href="namespacexrpl.html#a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb">available</a>) / <a class="code hl_enumvalue" href="namespacexrpl.html#a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb">available</a> &lt; <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(1, -6))));</div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(vaultSle-&gt;at(sfLossUnrealized) == 0);</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> }</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> }</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> }</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> }</div>
</div>
<div class="line"><a id="l00308" name="l00308"></a><span class="lineno"> 308</span> </div>
<div class="line"><a id="l00309" name="l00309"></a><span class="lineno"> 309</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00310" data-start="{" data-end="}">
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a64ccae9327f8d43f2b430b825129f5fa"> 310</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a64ccae9327f8d43f2b430b825129f5fa">checkPayment</a>(</div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int32_t</a> loanScale,</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; account,</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html">jtx::PrettyAmount</a> <span class="keyword">const</span>&amp; balanceBefore,</div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; expectedPayment,</div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html">jtx::PrettyAmount</a> <span class="keyword">const</span>&amp; adjustment)<span class="keyword"> const</span></div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerScale = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(loanScale, balanceBefore.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a844148a5010081aacd11657cddd4b028">number</a>().<a class="code hl_function" href="classxrpl_1_1Number.html#aa4058fefe18f86063240cfd2ba985358">exponent</a>());</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> </div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> balanceChangeAmount{</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, expectedPayment + adjustment, borrowerScale)};</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> {</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> <span class="keyword">auto</span> <span class="keyword">const</span> difference = <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(</div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(account, <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>) - (balanceBefore - balanceChangeAmount), borrowerScale);</div>
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"> 324</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.<a class="code hl_function" href="classbeast_1_1unit__test_1_1suite.html#ac6fc161c3c00cfbbc9590afe9e4559aa">expect</a>(</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(difference, loanScale) &gt;= beast::zero,</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <span class="stringliteral">&quot;Balance before: &quot;</span> + <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(balanceBefore.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a742750c3ad4996faa68c66664d3921db">value</a>()) +</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="stringliteral">&quot;, expected change: &quot;</span> + <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(balanceChangeAmount) +</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="stringliteral">&quot;, difference (balance after - expected): &quot;</span> + <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(difference),</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> __FILE__,</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> __LINE__);</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> }</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> }</div>
</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> </div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00336" data-start="{" data-end="}">
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#ae88259ad90deec2946018688a6681167"> 336</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#ae88259ad90deec2946018688a6681167">operator()</a>(</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> previousPaymentDate,</div>
<div class="line"><a id="l00338" name="l00338"></a><span class="lineno"> 338</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> nextPaymentDate,</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> paymentRemaining,</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; loanScale,</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; totalValue,</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; principalOutstanding,</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; managementFeeOutstanding,</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; periodicPayment,</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a>)<span class="keyword"> const</span></div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> loan = <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#ac47ad51b90a621abef35d31dbd63ea2b">loanKeylet</a>); <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan))</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> {</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan-&gt;at(sfPreviousPaymentDueDate) == previousPaymentDate);</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan-&gt;at(sfPaymentRemaining) == paymentRemaining);</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan-&gt;at(sfNextPaymentDueDate) == nextPaymentDate);</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan-&gt;at(sfLoanScale) == loanScale);</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan-&gt;at(sfTotalValueOutstanding) == totalValue);</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan-&gt;at(sfPrincipalOutstanding) == principalOutstanding);</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan-&gt;at(sfManagementFeeOutstanding) == managementFeeOutstanding);</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan-&gt;at(sfPeriodicPayment) == periodicPayment);</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan-&gt;at(sfFlags) == <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a>);</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> </div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> <span class="keyword">auto</span> <span class="keyword">const</span> ls = <a class="code hl_function" href="namespacexrpl.html#ac8b129bcfda287e4cf8286e544af7242">constructRoundedLoanState</a>(loan);</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> </div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> <span class="keyword">auto</span> <span class="keyword">const</span> interestRate = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{loan-&gt;at(sfInterestRate)};</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> <span class="keyword">auto</span> <span class="keyword">const</span> paymentInterval = loan-&gt;at(sfPaymentInterval);</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a79f1360ea24d102199a36d5d41b46d1b">checkBroker</a>(principalOutstanding, ls.interestDue, interestRate, paymentInterval, paymentRemaining, 1);</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> </div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> brokerSle = <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>)); <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> {</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> vaultSle = <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a9a7028770e8d9d38ca198d2096149766">keylet::vault</a>(brokerSle-&gt;at(sfVaultID)));</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(vaultSle))</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> {</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> <span class="keywordflow">if</span> ((<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a> &amp; <a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a3802c9462407c0d1bbe16fba206fee8b">lsfLoanImpaired</a>) &amp;&amp; !(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a> &amp; <a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1aa2c224929c4bf367cc269b52221cd778">lsfLoanDefault</a>))</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> {</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> vaultSle-&gt;at(sfLossUnrealized) == totalValue - managementFeeOutstanding);</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> }</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> {</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> <a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">env</a>.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(vaultSle-&gt;at(sfLossUnrealized) == 0);</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> }</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> }</div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> }</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> }</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> }</div>
</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> </div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00387" data-start="{" data-end="}">
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"><a class="line" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#af6e6e95e55e1d2858e0242f71d0318eb"> 387</a></span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#af6e6e95e55e1d2858e0242f71d0318eb">operator()</a>(<a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html">LoanState</a> <span class="keyword">const</span>&amp; state)<span class="keyword"> const</span></div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#ae88259ad90deec2946018688a6681167">operator()</a>(</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a3be6a4fbb9a2c37e3a410511ef1a10a4">previousPaymentDate</a>,</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aeb13f712b02f4c2650243d9001677156">nextPaymentDate</a>,</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aab539a8a36c1c03aa26a87184535a8c7">paymentRemaining</a>,</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ab4ec0a2b13f69bb8fa78756c3f432e1d">loanScale</a>,</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a10434ce558ef08b10dca1743ebc2131c">totalValue</a>,</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ad5d54ef7384e4f97812089db11977db7">principalOutstanding</a>,</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#af2235821f055ad37320d930c7e1db312">managementFeeOutstanding</a>,</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a9c452ceb162e85f536d6dc6dcd09375d">periodicPayment</a>,</div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ae06eef6a44fb97414a4231aa95c088e4">flags</a>);</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> };</div>
</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> };</div>
</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> </div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> BrokerInfo</div>
<div class="foldopen" id="foldopen00403" data-start="{" data-end="}">
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ac4c95bc58d306de8de546ac48a22de66"> 403</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ac4c95bc58d306de8de546ac48a22de66">createVaultAndBroker</a>(</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a>&amp; env,</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">jtx::PrettyAsset</a> <span class="keyword">const</span>&amp; asset,</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; lender,</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span>&amp; params = <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a5eff62ebb8fc160f1e1ec740c9fd4bb4">BrokerParameters::defaults</a>())</div>
<div class="line"><a id="l00408" name="l00408"></a><span class="lineno"> 408</span> {</div>
<div class="line"><a id="l00409" name="l00409"></a><span class="lineno"> 409</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> </div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1Vault.html">Vault</a> vault{env};</div>
<div class="line"><a id="l00412" name="l00412"></a><span class="lineno"> 412</span> </div>
<div class="line"><a id="l00413" name="l00413"></a><span class="lineno"> 413</span> <span class="keyword">auto</span> <span class="keyword">const</span> deposit = asset(params.vaultDeposit);</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> <span class="keyword">auto</span> <span class="keyword">const</span> debtMaximumValue = asset(params.debtMax).value();</div>
<div class="line"><a id="l00415" name="l00415"></a><span class="lineno"> 415</span> <span class="keyword">auto</span> <span class="keyword">const</span> coverDepositValue = asset(params.coverDeposit).value();</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> </div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> <span class="keyword">auto</span> <span class="keyword">const</span> coverRateMinValue = params.coverRateMin;</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> </div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> <span class="keyword">auto</span> [tx, vaultKeylet] = vault.create({.owner = lender, .asset = asset});</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> env(tx);</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(vaultKeylet));</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> </div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> env(vault.deposit({.depositor = lender, .id = vaultKeylet.key, .amount = deposit}));</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> vault = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a9a7028770e8d9d38ca198d2096149766">keylet::vault</a>(vaultKeylet.key)); BEAST_EXPECT(vault))</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> {</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> BEAST_EXPECT(vault-&gt;at(sfAssetsAvailable) == deposit.value());</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> }</div>
<div class="line"><a id="l00430" name="l00430"></a><span class="lineno"> 430</span> </div>
<div class="line"><a id="l00431" name="l00431"></a><span class="lineno"> 431</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(lender.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#aefcff537de98b56ea2f59a9b618cd246">id</a>(), env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a7e2bf847bf817405a5d8db448d8b4f6f">seq</a>(lender));</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> </div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> <span class="keyword">using namespace </span>loanBroker;</div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, vaultKeylet.key, params.flags),</div>
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"> 435</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a293e60256c283a66afb95f4e20e1a3e3">data</a>(params.data),</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> managementFeeRate(params.managementFeeRate),</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> debtMaximum(debtMaximumValue),</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> coverRateMinimum(coverRateMinValue),</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> coverRateLiquidation(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(params.coverRateLiquidation)));</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> </div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="keywordflow">if</span> (coverDepositValue != beast::zero)</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> env(coverDeposit(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, coverDepositValue));</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> </div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> </div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="keywordflow">return</span> {asset, keylet, vaultKeylet, params};</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> }</div>
</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> </div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <a class="code hl_struct" href="structxrpl_1_1LoanState.html">LoanState</a></div>
<div class="foldopen" id="foldopen00451" data-start="{" data-end="}">
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c"> 451</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">getCurrentState</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a> <span class="keyword">const</span>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; loanKeylet)</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> {</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> <span class="keyword">using </span>d = <a class="code hl_typedef" href="classxrpl_1_1NetClock.html#a8db39de3345bf89d6be8885338a624e5">NetClock::duration</a>;</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> <span class="keyword">using </span>tp = <a class="code hl_typedef" href="classxrpl_1_1NetClock.html#a6fdfbe103d809c714f11b914b391f8df">NetClock::time_point</a>;</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> </div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> <span class="comment">// Lookup the current loan state</span></div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> loan = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet); BEAST_EXPECT(loan))</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> {</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html">LoanState</a>{</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a3be6a4fbb9a2c37e3a410511ef1a10a4">previousPaymentDate</a> = loan-&gt;at(sfPreviousPaymentDueDate),</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> .startDate = tp{d{loan-&gt;at(sfStartDate)}},</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> .nextPaymentDate = loan-&gt;at(sfNextPaymentDueDate),</div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> .paymentRemaining = loan-&gt;at(sfPaymentRemaining),</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> .loanScale = loan-&gt;at(sfLoanScale),</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> .totalValue = loan-&gt;at(sfTotalValueOutstanding),</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> .principalOutstanding = loan-&gt;at(sfPrincipalOutstanding),</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> .managementFeeOutstanding = loan-&gt;at(sfManagementFeeOutstanding),</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> .periodicPayment = loan-&gt;at(sfPeriodicPayment),</div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> .flags = loan-&gt;at(sfFlags),</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> .paymentInterval = loan-&gt;at(sfPaymentInterval),</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> .interestRate = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{loan-&gt;at(sfInterestRate)},</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> };</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> }</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html">LoanState</a>{};</div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> }</div>
</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> </div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> <a class="code hl_struct" href="structxrpl_1_1LoanState.html">LoanState</a></div>
<div class="foldopen" id="foldopen00480" data-start="{" data-end="}">
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#acfc2a0b85ac94faf3b2cd28198f789be"> 480</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#acfc2a0b85ac94faf3b2cd28198f789be">getCurrentState</a>(</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a> <span class="keyword">const</span>&amp; env,</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker,</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; loanKeylet,</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> <span class="keyword">const</span>&amp; verifyLoanStatus)</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> {</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="keyword">using </span>d = <a class="code hl_typedef" href="classxrpl_1_1NetClock.html#a8db39de3345bf89d6be8885338a624e5">NetClock::duration</a>;</div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> <span class="keyword">using </span>tp = <a class="code hl_typedef" href="classxrpl_1_1NetClock.html#a6fdfbe103d809c714f11b914b391f8df">NetClock::time_point</a>;</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> </div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <span class="keyword">auto</span> <span class="keyword">const</span> state = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">getCurrentState</a>(env, broker, loanKeylet);</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> BEAST_EXPECT(state.previousPaymentDate == 0);</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> BEAST_EXPECT(tp{d{state.nextPaymentDate}} == state.startDate + 600s);</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> BEAST_EXPECT(state.paymentRemaining == 12);</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> BEAST_EXPECT(state.principalOutstanding == broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1000).value());</div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> state.loanScale &gt;=</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a4d74996b3b3f23322e00b032c8c35baa">integral</a>() ? 0 : <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(broker.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa9703000ec9d3519149be135245c57f2">vaultScale</a>(env), state.principalOutstanding.exponent())));</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> BEAST_EXPECT(state.paymentInterval == 600);</div>
<div class="line"><a id="l00499" name="l00499"></a><span class="lineno"> 499</span> {</div>
<div class="line"><a id="l00500" name="l00500"></a><span class="lineno"> 500</span> <a class="code hl_class" href="classxrpl_1_1NumberRoundModeGuard.html">NumberRoundModeGuard</a> mg(<a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>);</div>
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"> 501</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> state.totalValue ==</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, state.periodicPayment * state.paymentRemaining, state.loanScale));</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> }</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> state.managementFeeOutstanding ==</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <a class="code hl_function" href="namespacexrpl.html#a214a68fa4b462cf05138d87a9806bd06">computeManagementFee</a>(</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>,</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> state.totalValue - state.principalOutstanding,</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>,</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> state.loanScale));</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> </div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> verifyLoanStatus(state);</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> </div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keywordflow">return</span> state;</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> }</div>
</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> </div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keywordtype">bool</span></div>
<div class="foldopen" id="foldopen00519" data-start="{" data-end="}">
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a50bd51c59a032921500d206140880f1c"> 519</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a50bd51c59a032921500d206140880f1c">canImpairLoan</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a> <span class="keyword">const</span>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html">LoanState</a> <span class="keyword">const</span>&amp; state)</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> {</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> {</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> vaultSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a9a7028770e8d9d38ca198d2096149766">keylet::vault</a>(brokerSle-&gt;at(sfVaultID))); BEAST_EXPECT(vaultSle))</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> {</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <span class="comment">// log &lt;&lt; vaultSle-&gt;getJson() &lt;&lt; std::endl;</span></div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keyword">auto</span> <span class="keyword">const</span> assetsUnavailable = vaultSle-&gt;at(sfAssetsTotal) - vaultSle-&gt;at(sfAssetsAvailable);</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> <span class="keyword">auto</span> <span class="keyword">const</span> unrealizedLoss =</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> vaultSle-&gt;at(sfLossUnrealized) + state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a10434ce558ef08b10dca1743ebc2131c">totalValue</a> - state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#af2235821f055ad37320d930c7e1db312">managementFeeOutstanding</a>;</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> </div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(unrealizedLoss &lt;= assetsUnavailable))</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> {</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <span class="keywordflow">return</span> <span class="keyword">false</span>;</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> }</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> }</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> }</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keywordflow">return</span> <span class="keyword">true</span>;</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> }</div>
</div>
<div class="line"><a id="l00538" name="l00538"></a><span class="lineno"> 538</span> </div>
<div class="line"><a id="l00539" name="l00539"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5d"> 539</a></span> <span class="keyword">enum class</span> <a class="code hl_concept" href="conceptxrpl_1_1AssetType.html">AssetType</a> { <a class="code hl_enumvalue" href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5dab963e1952393b6f6899c6978de03a6f6">XRP</a> = 0, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a> = 1, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a> = 2 };</div>
<div class="line"><a id="l00540" name="l00540"></a><span class="lineno"> 540</span> </div>
<div class="line"><a id="l00541" name="l00541"></a><span class="lineno"> 541</span> <span class="comment">// Specify the accounts as params to allow other accounts to be used</span></div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">jtx::PrettyAsset</a></div>
<div class="foldopen" id="foldopen00543" data-start="{" data-end="}">
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ad04c266c4e78414ea43306304e69b142"> 543</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ad04c266c4e78414ea43306304e69b142">createAsset</a>(</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a>&amp; env,</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> <a class="code hl_concept" href="conceptxrpl_1_1AssetType.html">AssetType</a> assetType,</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span>&amp; brokerParams,</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; issuer,</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; lender,</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; borrower)</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> {</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> </div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> <span class="keywordflow">switch</span> (assetType)</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> {</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5dab963e1952393b6f6899c6978de03a6f6">AssetType::XRP</a>:</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> <span class="comment">// TODO: remove the factor, and set up loans in drops</span></div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> <span class="keywordflow">return</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a>{<a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>(), 1&#39;000&#39;000};</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> </div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5daf73c709124099e497ad22ae14efb498b">AssetType::IOU</a>: {</div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> asset{issuer[<a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a0e7045b5ac0a07c23a631dd911475b6b">iouCurrency</a>]};</div>
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"> 561</span> </div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> <span class="keyword">auto</span> <span class="keyword">const</span> limit = asset(100 * (brokerParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> + brokerParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a329bf5a8059bcca800bdca04ca187f6c">coverDeposit</a>));</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <span class="keywordflow">if</span> (lender != issuer)</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(lender, limit));</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="keywordflow">if</span> (borrower != issuer)</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(borrower, limit));</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> </div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <span class="keywordflow">return</span> asset;</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> }</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> </div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> <span class="keywordflow">case</span> <a class="code hl_enumvalue" href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5dabb4f8bb682e49b9452aa1cc2d348bbfe">AssetType::MPT</a>: {</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="comment">// Enough to cover initial fees</span></div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keywordflow">if</span> (!env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#ac5d7a88f7cef6ac1ddf06020da8ded16">keylet::account</a>(issuer)))</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().accountReserve(10) * 10, issuer);</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> <span class="keywordflow">if</span> (!env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#ac5d7a88f7cef6ac1ddf06020da8ded16">keylet::account</a>(lender)))</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().accountReserve(10) * 10, <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367af34d3a138958b0d338875bb910a39cf6">noripple</a>(lender));</div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> <span class="keywordflow">if</span> (!env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#ac5d7a88f7cef6ac1ddf06020da8ded16">keylet::account</a>(borrower)))</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().accountReserve(10) * 10, <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367af34d3a138958b0d338875bb910a39cf6">noripple</a>(borrower));</div>
<div class="line"><a id="l00579" name="l00579"></a><span class="lineno"> 579</span> </div>
<div class="line"><a id="l00580" name="l00580"></a><span class="lineno"> 580</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptt{env, issuer, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a03b59a84add36087c1a9e344e8dfadf2">mptInitNoFund</a>};</div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> mptt.<a class="code hl_variable" href="structxrpl_1_1test_1_1jtx_1_1MPTInit.html#a08696ed27a22a208272f4bd1883752e5">create</a>({.flags = <a class="code hl_variable" href="namespacexrpl.html#a843e5f9ce3b55788961db32fffb753d1">tfMPTCanClawback</a> | <a class="code hl_variable" href="namespacexrpl.html#a25a16d1e4a00f49801b8f6fd16da0459">tfMPTCanTransfer</a> | <a class="code hl_variable" href="namespacexrpl.html#a75a6d6ab0752128773a7c28ec32fa5d1">tfMPTCanLock</a>});</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> <span class="comment">// Scale the MPT asset so interest is interesting</span></div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> asset{mptt.issuanceID(), 10&#39;000};</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> <span class="comment">// Need to do the authorization here because mptt isn&#39;t</span></div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> <span class="comment">// accessible outside</span></div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keywordflow">if</span> (lender != issuer)</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> mptt.authorize({.account = lender});</div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> <span class="keywordflow">if</span> (borrower != issuer)</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> mptt.authorize({.account = borrower});</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> </div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> </div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> <span class="keywordflow">return</span> asset;</div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> }</div>
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"> 595</span> </div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> <span class="keywordflow">default</span>:</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="keywordflow">throw</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/runtime_error.html">std::runtime_error</a>(<span class="stringliteral">&quot;Unknown asset type&quot;</span>);</div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> }</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> }</div>
</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> </div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00602" data-start="{" data-end="}">
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a0b4b28704db8a49421e9644031ae89f1"> 602</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a0b4b28704db8a49421e9644031ae89f1">describeLoan</a>(</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a>&amp; env,</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span>&amp; brokerParams,</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span>&amp; loanParams,</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <a class="code hl_concept" href="conceptxrpl_1_1AssetType.html">AssetType</a> assetType,</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; issuer,</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; lender,</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; borrower)</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> {</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> </div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> <span class="keyword">auto</span> <span class="keyword">const</span> asset = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ad04c266c4e78414ea43306304e69b142">createAsset</a>(env, assetType, brokerParams, issuer, lender, borrower);</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> <span class="keyword">auto</span> <span class="keyword">const</span> principal = asset(loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ab3d313a175cbd23b95d943878222b0a6">principalRequest</a>).number();</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="keyword">auto</span> <span class="keyword">const</span> interest = loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a66077e07d08f1cd804e9b44242a0db69">interest</a>.value_or(<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{});</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61">payInterval</a>.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/optional/value_or.html">value_or</a>(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#a8b9cdc20003443cb594ba9a55af4cdb5">LoanSet::defaultPaymentInterval</a>);</div>
<div class="line"><a id="l00617" name="l00617"></a><span class="lineno"> 617</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51">payTotal</a>.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/optional/value_or.html">value_or</a>(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#abdd170e766ccea928b8520f9efe3a0ee">LoanSet::defaultPaymentTotal</a>);</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeRate = brokerParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>;</div>
<div class="line"><a id="l00619" name="l00619"></a><span class="lineno"> 619</span> <span class="keyword">auto</span> <span class="keyword">const</span> props = <a class="code hl_function" href="namespacexrpl.html#aeb1403000c2c2a5c8fa065d22f7cbcaf">computeLoanProperties</a>(</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> asset, principal, interest, interval, total, feeRate, asset(brokerParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a>).number().exponent());</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#a19b8ee0ce850d78834984655ae83b20e">log</a> &lt;&lt; <span class="stringliteral">&quot;Loan properties:\n&quot;</span></div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> &lt;&lt; <span class="stringliteral">&quot;\tPrincipal: &quot;</span> &lt;&lt; principal &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> &lt;&lt; <span class="stringliteral">&quot;\tInterest rate: &quot;</span> &lt;&lt; interest &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> &lt;&lt; <span class="stringliteral">&quot;\tPayment interval: &quot;</span> &lt;&lt; interval &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> &lt;&lt; <span class="stringliteral">&quot;\tManagement Fee Rate: &quot;</span> &lt;&lt; feeRate &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> &lt;&lt; <span class="stringliteral">&quot;\tTotal Payments: &quot;</span> &lt;&lt; total &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> &lt;&lt; <span class="stringliteral">&quot;\tPeriodic Payment: &quot;</span> &lt;&lt; props.periodicPayment &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> &lt;&lt; <span class="stringliteral">&quot;\tTotal Value: &quot;</span> &lt;&lt; props.loanState.valueOutstanding &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> &lt;&lt; <span class="stringliteral">&quot;\tManagement Fee: &quot;</span> &lt;&lt; props.loanState.managementFeeDue &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> &lt;&lt; <span class="stringliteral">&quot;\tLoan Scale: &quot;</span> &lt;&lt; props.loanScale &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> &lt;&lt; <span class="stringliteral">&quot;\tFirst payment principal: &quot;</span> &lt;&lt; props.firstPaymentPrincipal &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> </div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <span class="comment">// checkGuards returns a TER, so success is 0</span></div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> BEAST_EXPECT(!<a class="code hl_function" href="namespacexrpl.html#a7808b36d8f2224062a27cd2a84250604">checkLoanGuards</a>(</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> asset,</div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> asset(loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ab3d313a175cbd23b95d943878222b0a6">principalRequest</a>).number(),</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a66077e07d08f1cd804e9b44242a0db69">interest</a>.value_or(<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{}) != beast::zero,</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51">payTotal</a>.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/optional/value_or.html">value_or</a>(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#abdd170e766ccea928b8520f9efe3a0ee">LoanSet::defaultPaymentTotal</a>),</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> props,</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> env.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af5fb4f29ed4ad1594323cd5d11d1cdcb">journal</a>));</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> }</div>
</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> </div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;std::tuple&lt;BrokerInfo, Keylet, jtx::Account&gt;</a>&gt;</div>
<div class="foldopen" id="foldopen00644" data-start="{" data-end="}">
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ae30b1026332f38925b8e75291418804d"> 644</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ae30b1026332f38925b8e75291418804d">createLoan</a>(</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a>&amp; env,</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> <a class="code hl_concept" href="conceptxrpl_1_1AssetType.html">AssetType</a> assetType,</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span>&amp; brokerParams,</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span>&amp; loanParams,</div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; issuer,</div>
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"> 650</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; lender,</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; borrower)</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> {</div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> </div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> <span class="comment">// Enough to cover initial fees</span></div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().accountReserve(10) * 10, issuer);</div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="keywordflow">if</span> (lender != issuer)</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().accountReserve(10) * 10, <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367af34d3a138958b0d338875bb910a39cf6">noripple</a>(lender));</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> <span class="keywordflow">if</span> (borrower != issuer &amp;&amp; borrower != lender)</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().accountReserve(10) * 10, <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367af34d3a138958b0d338875bb910a39cf6">noripple</a>(borrower));</div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> </div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a0b4b28704db8a49421e9644031ae89f1">describeLoan</a>(env, brokerParams, loanParams, assetType, issuer, lender, borrower);</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> </div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> <span class="comment">// Make the asset</span></div>
<div class="line"><a id="l00665" name="l00665"></a><span class="lineno"> 665</span> <span class="keyword">auto</span> <span class="keyword">const</span> asset = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ad04c266c4e78414ea43306304e69b142">createAsset</a>(env, assetType, brokerParams, issuer, lender, borrower);</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> </div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> <span class="keywordflow">if</span> (asset.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>() || lender != issuer)</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> env(</div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>((asset.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>() ? env.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a916c0ffc7b244ec6267058543a0b5598">master</a> : issuer),</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> lender,</div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> asset(brokerParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> + brokerParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a329bf5a8059bcca800bdca04ca187f6c">coverDeposit</a>)));</div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="comment">// Fund the borrower later once we know the total loan</span></div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <span class="comment">// size</span></div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> </div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span> broker = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ac4c95bc58d306de8de546ac48a22de66">createVaultAndBroker</a>(env, asset, lender, brokerParams);</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> </div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> <span class="keyword">auto</span> <span class="keyword">const</span> pseudoAcctOpt = [&amp;]() -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Account&gt;</a> {</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>;</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerPseudo = brokerSle-&gt;at(sfAccount);</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;Broker pseudo-account&quot;</span>, brokerPseudo);</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> }();</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> <span class="keywordflow">if</span> (!pseudoAcctOpt)</div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>;</div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"> 687</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; pseudoAcct = *pseudoAcctOpt;</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> </div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeyletOpt = [&amp;]() -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Keylet&gt;</a> {</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>;</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> </div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="comment">// Broker has no loans</span></div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> BEAST_EXPECT(brokerSle-&gt;at(sfOwnerCount) == 0);</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> </div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> <span class="comment">// The loan keylet is based on the LoanSequence of the</span></div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <span class="comment">// _LOAN_BROKER_ object.</span></div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerSle-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> }();</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> <span class="keywordflow">if</span> (!loanKeyletOpt)</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>;</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; loanKeylet = *loanKeyletOpt;</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> </div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> env(loanParams(env, broker));</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> </div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> </div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/tuple/make_tuple.html">std::make_tuple</a>(broker, loanKeylet, pseudoAcct);</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> }</div>
</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> </div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00714" data-start="{" data-end="}">
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a48f0c2407a9bb51665073c1e1f81abaa"> 714</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a48f0c2407a9bb51665073c1e1f81abaa">topUpBorrower</a>(</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a>&amp; env,</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker,</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; issuer,</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; borrower,</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html">LoanState</a> <span class="keyword">const</span>&amp; state,</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Number&gt;</a> <span class="keyword">const</span>&amp; servFee)</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> {</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> </div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> serviceFee = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(servFee.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/optional/value_or.html">value_or</a>(0));</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> </div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <span class="comment">// Ensure the borrower has enough funds to make the payments</span></div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <span class="comment">// (including tx fees, if necessary)</span></div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerBalance = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>);</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> </div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> </div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> <span class="comment">// Add extra for transaction fees and reserves, if appropriate, or a</span></div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <span class="comment">// tiny amount for the extra paid in each transaction</span></div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <span class="keyword">auto</span> <span class="keyword">const</span> totalNeeded = state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a10434ce558ef08b10dca1743ebc2131c">totalValue</a> + (serviceFee * state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aab539a8a36c1c03aa26a87184535a8c7">paymentRemaining</a>) +</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>() ? <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> baseFee * state.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aab539a8a36c1c03aa26a87184535a8c7">paymentRemaining</a> +</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().accountReserve(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a4865ffdfc2b35ef2e94990ac89f7fd3b">ownerCount</a>(borrower)))</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> : broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(15).number());</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> </div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> <span class="keyword">auto</span> <span class="keyword">const</span> shortage = totalNeeded - borrowerBalance.number();</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> </div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> <span class="keywordflow">if</span> (shortage &gt; beast::zero &amp;&amp; (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>() || issuer != borrower))</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>((broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>() ? env.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a916c0ffc7b244ec6267058543a0b5598">master</a> : issuer), borrower, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, shortage}));</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> }</div>
</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> </div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00747" data-start="{" data-end="}">
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#aaadcdbed8098b9084079b519ef9502b5"> 747</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aaadcdbed8098b9084079b519ef9502b5">makeLoanPayments</a>(</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a>&amp; env,</div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker,</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span>&amp; loanParams,</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; loanKeylet,</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> <span class="keyword">const</span>&amp; verifyLoanStatus,</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; issuer,</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; lender,</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; borrower,</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">PaymentParameters</a> <span class="keyword">const</span>&amp; paymentParams = <a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a7eaf224726ca4af5e44253fea38bc339">PaymentParameters::defaults</a>())</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> {</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <span class="comment">// Make all the individual payments</span></div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <span class="keyword">using namespace </span>jtx::loan;</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> <span class="keyword">using </span>d = <a class="code hl_typedef" href="classxrpl_1_1NetClock.html#a8db39de3345bf89d6be8885338a624e5">NetClock::duration</a>;</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> </div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> showStepBalances = paymentParams.showStepBalances;</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> </div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> <span class="keyword">auto</span> <span class="keyword">const</span> currencyLabel = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ace0d2b7dbf91db8eb260184d9bf5ab58">getCurrencyLabel</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>);</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> </div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> </div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> <span class="keyword">auto</span> state = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">getCurrentState</a>(env, broker, loanKeylet);</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> </div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> verifyLoanStatus(state);</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> </div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> serviceFee = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7ef3032e22b6dbb9de64f6358a7877cf">serviceFee</a>.value_or(0));</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> </div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a48f0c2407a9bb51665073c1e1f81abaa">topUpBorrower</a>(env, broker, issuer, borrower, state, loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7ef3032e22b6dbb9de64f6358a7877cf">serviceFee</a>);</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> </div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <span class="comment">// Periodic payment amount will consist of</span></div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="comment">// 1. principal outstanding (1000)</span></div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="comment">// 2. interest interest rate (at 12%)</span></div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="comment">// 3. payment interval (600s)</span></div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="comment">// 4. loan service fee (2)</span></div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="comment">// Calculate these values without the helper functions</span></div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="comment">// to verify they&#39;re working correctly The numbers in</span></div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <span class="comment">// the below BEAST_EXPECTs may not hold across assets.</span></div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <span class="keyword">auto</span> <span class="keyword">const</span> periodicRate = <a class="code hl_function" href="namespacexrpl.html#a0ff65dbec299f5ffe3cc3e46822b54b1">loanPeriodicRate</a>(state.interestRate, state.paymentInterval);</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> roundedPeriodicPayment{</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, <a class="code hl_function" href="namespacexrpl.html#ac29d2e6cda0723b2ca1f1cdc06fe3965">roundPeriodicPayment</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, state.periodicPayment, state.loanScale)};</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> </div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <span class="keywordflow">if</span> (!showStepBalances)</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#a19b8ee0ce850d78834984655ae83b20e">log</a> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Payment components: &quot;</span></div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> &lt;&lt; <span class="stringliteral">&quot;Payments remaining, &quot;</span></div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> &lt;&lt; <span class="stringliteral">&quot;rawInterest, rawPrincipal, &quot;</span></div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="stringliteral">&quot;rawMFee, &quot;</span></div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> &lt;&lt; <span class="stringliteral">&quot;trackedValueDelta, trackedPrincipalDelta, &quot;</span></div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <span class="stringliteral">&quot;trackedInterestDelta, trackedMgmtFeeDelta, special&quot;</span></div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> </div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> <span class="comment">// Include the service fee</span></div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> totalDue = <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(roundedPeriodicPayment + serviceFee, state.loanScale, <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>);</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> </div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keyword">auto</span> currentRoundedState =</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <a class="code hl_function" href="namespacexrpl.html#aeb5f98fcbd289260f4848cbf266400a4">constructLoanState</a>(state.totalValue, state.principalOutstanding, state.managementFeeOutstanding);</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> {</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keyword">auto</span> <span class="keyword">const</span> raw = <a class="code hl_function" href="namespacexrpl.html#a5405a03459935d24ab27d4a0b9c5afc6">computeTheoreticalLoanState</a>(</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> state.periodicPayment, periodicRate, state.paymentRemaining, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>);</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> </div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keywordflow">if</span> (showStepBalances)</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> {</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#a19b8ee0ce850d78834984655ae83b20e">log</a> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Starting loan balances: &quot;</span></div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> &lt;&lt; <span class="stringliteral">&quot;\n\tTotal value: &quot;</span> &lt;&lt; currentRoundedState.valueOutstanding</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> &lt;&lt; <span class="stringliteral">&quot;\n\tPrincipal: &quot;</span> &lt;&lt; currentRoundedState.principalOutstanding</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> &lt;&lt; <span class="stringliteral">&quot;\n\tInterest: &quot;</span> &lt;&lt; currentRoundedState.interestDue</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> &lt;&lt; <span class="stringliteral">&quot;\n\tMgmt fee: &quot;</span> &lt;&lt; currentRoundedState.managementFeeDue &lt;&lt; <span class="stringliteral">&quot;\n\tPayments remaining &quot;</span></div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> &lt;&lt; state.paymentRemaining &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> }</div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> {</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#a19b8ee0ce850d78834984655ae83b20e">log</a> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Loan starting state: &quot;</span> &lt;&lt; state.paymentRemaining &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; raw.interestDue</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; raw.principalOutstanding &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; raw.managementFeeDue &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> &lt;&lt; currentRoundedState.valueOutstanding &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; currentRoundedState.principalOutstanding &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> &lt;&lt; currentRoundedState.interestDue &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; currentRoundedState.managementFeeDue &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> }</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> }</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> </div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> <span class="comment">// Try to pay a little extra to show that it&#39;s _not_</span></div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> <span class="comment">// taken</span></div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> <span class="keyword">auto</span> <span class="keyword">const</span> extraAmount = paymentParams.overpaymentExtra</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> ? broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(*paymentParams.overpaymentExtra).value()</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> : <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(10).value(), <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, totalDue / 20});</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> </div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> transactionAmount =</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, totalDue * paymentParams.overpaymentFactor} + extraAmount;</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> </div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerInitialBalance = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>).<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a844148a5010081aacd11657cddd4b028">number</a>();</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="keyword">auto</span> <span class="keyword">const</span> initialState = state;</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> <a class="code hl_struct" href="structxrpl_1_1detail_1_1PaymentComponents.html">detail::PaymentComponents</a> totalPaid{</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> .<a class="code hl_variable" href="structxrpl_1_1detail_1_1PaymentComponents.html#aaf147e388219822ba1e3c385e95252c2">trackedValueDelta</a> = 0, .trackedPrincipalDelta = 0, .trackedManagementFeeDelta = 0};</div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> totalInterestPaid = 0;</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> totalFeesPaid = 0;</div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> totalPaymentsMade = 0;</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> </div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <a class="code hl_struct" href="structxrpl_1_1LoanState.html">xrpl::LoanState</a> currentTrueState = <a class="code hl_function" href="namespacexrpl.html#a5405a03459935d24ab27d4a0b9c5afc6">computeTheoreticalLoanState</a>(</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> state.periodicPayment, periodicRate, state.paymentRemaining, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>);</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> </div>
<div class="line"><a id="l00847" name="l00847"></a><span class="lineno"> 847</span> <span class="keyword">auto</span> validateBorrowerBalance = [&amp;]() {</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> <span class="keywordflow">if</span> (borrower == issuer || !paymentParams.validateBalances)</div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00850" name="l00850"></a><span class="lineno"> 850</span> <span class="keyword">auto</span> <span class="keyword">const</span> totalSpent =</div>
<div class="line"><a id="l00851" name="l00851"></a><span class="lineno"> 851</span> (totalPaid.trackedValueDelta + totalFeesPaid +</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>() ? <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(baseFee) * totalPaymentsMade : <a class="code hl_variable" href="namespacexrpl.html#a37264e625a18dabd56787db7fedd5e75">numZero</a>));</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>).<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a844148a5010081aacd11657cddd4b028">number</a>() == borrowerInitialBalance - totalSpent);</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> };</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> </div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> <span class="keyword">auto</span> <span class="keyword">const</span> defaultRound = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a4d74996b3b3f23322e00b032c8c35baa">integral</a>() ? 3 : 0;</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <span class="keyword">auto</span> truncate = [defaultRound](<a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; n, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;int&gt;</a> places = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>) {</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <span class="keyword">auto</span> <span class="keyword">const</span> p = places.value_or(defaultRound);</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <span class="keywordflow">if</span> (p == 0)</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> <span class="keywordflow">return</span> n;</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> <span class="keyword">auto</span> <span class="keyword">const</span> factor = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{1, p};</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <span class="keywordflow">return</span> (n * factor).<a class="code hl_function" href="classxrpl_1_1Number.html#a3d6e8e71ee3641f8d21041d3ade5aed0">truncate</a>() / factor;</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> };</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> <span class="keywordflow">while</span> (state.paymentRemaining &gt; 0)</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> {</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> validateBorrowerBalance();</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> <span class="comment">// Compute the expected principal amount</span></div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> <span class="keyword">auto</span> <span class="keyword">const</span> paymentComponents = <a class="code hl_function" href="namespacexrpl_1_1detail.html#a15d4f3e9643b3ad99537596be2abca8f">detail::computePaymentComponents</a>(</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac5538be33495f6fdd3cd03177b25decf">raw</a>(),</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> state.loanScale,</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> state.totalValue,</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> state.principalOutstanding,</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> state.managementFeeOutstanding,</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> state.periodicPayment,</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> periodicRate,</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> state.paymentRemaining,</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>);</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> </div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> paymentComponents.trackedValueDelta &lt;= roundedPeriodicPayment ||</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> (paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> &amp;&amp;</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> paymentComponents.trackedValueDelta &gt;= roundedPeriodicPayment));</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> paymentComponents.trackedValueDelta ==</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> paymentComponents.trackedPrincipalDelta + paymentComponents.trackedInterestPart() +</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> paymentComponents.trackedManagementFeeDelta);</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> </div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> <a class="code hl_struct" href="structxrpl_1_1LoanState.html">xrpl::LoanState</a> <span class="keyword">const</span> nextTrueState = <a class="code hl_function" href="namespacexrpl.html#a5405a03459935d24ab27d4a0b9c5afc6">computeTheoreticalLoanState</a>(</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> state.periodicPayment, periodicRate, state.paymentRemaining - 1, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>);</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> <a class="code hl_struct" href="structxrpl_1_1detail_1_1LoanStateDeltas.html">detail::LoanStateDeltas</a> <span class="keyword">const</span> deltas = currentTrueState - nextTrueState;</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> BEAST_EXPECT(deltas.<a class="code hl_function" href="structxrpl_1_1detail_1_1LoanStateDeltas.html#a954f93333195a87448f2672f5c1e4321">total</a>() == deltas.<a class="code hl_variable" href="structxrpl_1_1detail_1_1LoanStateDeltas.html#a377edf644d144dac8ae69bd4ba930223">principal</a> + deltas.<a class="code hl_variable" href="structxrpl_1_1detail_1_1LoanStateDeltas.html#aaedef3ae0d90d921b1db94fea7da844a">interest</a> + deltas.<a class="code hl_variable" href="structxrpl_1_1detail_1_1LoanStateDeltas.html#af2847e11912feb8a9509d2002bc194ba">managementFee</a>);</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> ||</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> deltas.<a class="code hl_function" href="structxrpl_1_1detail_1_1LoanStateDeltas.html#a954f93333195a87448f2672f5c1e4321">total</a>() == state.periodicPayment ||</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> (state.loanScale - (deltas.<a class="code hl_function" href="structxrpl_1_1detail_1_1LoanStateDeltas.html#a954f93333195a87448f2672f5c1e4321">total</a>() - state.periodicPayment).exponent()) &gt; 14);</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> </div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> <span class="keywordflow">if</span> (!showStepBalances)</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#a19b8ee0ce850d78834984655ae83b20e">log</a> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Payment components: &quot;</span> &lt;&lt; state.paymentRemaining &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> </div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> &lt;&lt; deltas.<a class="code hl_variable" href="structxrpl_1_1detail_1_1LoanStateDeltas.html#aaedef3ae0d90d921b1db94fea7da844a">interest</a> &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; deltas.<a class="code hl_variable" href="structxrpl_1_1detail_1_1LoanStateDeltas.html#a377edf644d144dac8ae69bd4ba930223">principal</a> &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; deltas.<a class="code hl_variable" href="structxrpl_1_1detail_1_1LoanStateDeltas.html#af2847e11912feb8a9509d2002bc194ba">managementFee</a> &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> &lt;&lt; paymentComponents.trackedValueDelta &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; paymentComponents.trackedPrincipalDelta &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> &lt;&lt; paymentComponents.trackedInterestPart() &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; paymentComponents.trackedManagementFeeDelta</div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> &lt;&lt; (paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> ? <span class="stringliteral">&quot;final&quot;</span></div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> : paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0aea9f91b2cda019730f2891bd12a7a4d6">detail::PaymentSpecialCase::extra</a> ? <span class="stringliteral">&quot;extra&quot;</span></div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> : <span class="stringliteral">&quot;none&quot;</span>)</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> </div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <span class="keyword">auto</span> <span class="keyword">const</span> totalDueAmount = <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, paymentComponents.trackedValueDelta + serviceFee};</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> </div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> <span class="keywordflow">if</span> (paymentParams.validateBalances)</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> {</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> <span class="comment">// Due to the rounding algorithms to keep the interest and</span></div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <span class="comment">// principal in sync with &quot;true&quot; values, the computed amount</span></div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> <span class="comment">// may be a little less than the rounded fixed payment</span></div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> <span class="comment">// amount. For integral types, the difference should be &lt; 3</span></div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> <span class="comment">// (1 unit for each of the interest and management fee). For</span></div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> <span class="comment">// IOUs, the difference should be dust.</span></div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> diff = totalDue - totalDueAmount;</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> || diff == beast::zero ||</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> (diff &gt; beast::zero &amp;&amp;</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> ((broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a4d74996b3b3f23322e00b032c8c35baa">integral</a>() &amp;&amp; (<span class="keyword">static_cast&lt;</span><a class="code hl_class" href="classxrpl_1_1Number.html">Number</a><span class="keyword">&gt;</span>(diff) &lt; 3)) ||</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> (state.loanScale - diff.<a class="code hl_function" href="classxrpl_1_1Number.html#aa4058fefe18f86063240cfd2ba985358">exponent</a>() &gt; 13))));</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> </div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> paymentComponents.trackedPrincipalDelta &gt;= beast::zero &amp;&amp;</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> paymentComponents.trackedPrincipalDelta &lt;= state.principalOutstanding);</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> paymentComponents.specialCase != <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> ||</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> paymentComponents.trackedPrincipalDelta == state.principalOutstanding);</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> }</div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> </div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerBalanceBeforePayment = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>);</div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> </div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> <span class="comment">// Make the payment</span></div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, transactionAmount, paymentParams.flags));</div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> </div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>(d{state.paymentInterval / 2});</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> </div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> <span class="keywordflow">if</span> (paymentParams.validateBalances)</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> {</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> <span class="comment">// Need to account for fees if the loan is in XRP</span></div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html">PrettyAmount</a> adjustment = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(0);</div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> <span class="keywordflow">if</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>())</div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> {</div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> adjustment = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> }</div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> </div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> <span class="comment">// Check the result</span></div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> verifyLoanStatus.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a64ccae9327f8d43f2b430b825129f5fa">checkPayment</a>(</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> state.loanScale, borrower, borrowerBalanceBeforePayment, totalDueAmount, adjustment);</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> }</div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> </div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> <span class="keywordflow">if</span> (showStepBalances)</div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> {</div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet);</div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanSle))</div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> <span class="comment">// No reason for this not to exist</span></div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_enumvalue" href="namespacexrpl.html#a75da7d88563def930b866cd64dd96f06a43b5c9175984c071f30b873fdce0a000">current</a> = <a class="code hl_function" href="namespacexrpl.html#ac8b129bcfda287e4cf8286e544af7242">constructRoundedLoanState</a>(loanSle);</div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> <span class="keyword">auto</span> <span class="keyword">const</span> errors = nextTrueState - <a class="code hl_enumvalue" href="namespacexrpl.html#a75da7d88563def930b866cd64dd96f06a43b5c9175984c071f30b873fdce0a000">current</a>;</div>
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#a19b8ee0ce850d78834984655ae83b20e">log</a> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Loan balances: &quot;</span></div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> &lt;&lt; <span class="stringliteral">&quot;\n\tAmount taken: &quot;</span> &lt;&lt; paymentComponents.trackedValueDelta</div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> &lt;&lt; <span class="stringliteral">&quot;\n\tTotal value: &quot;</span> &lt;&lt; <a class="code hl_enumvalue" href="namespacexrpl.html#a75da7d88563def930b866cd64dd96f06a43b5c9175984c071f30b873fdce0a000">current</a>.valueOutstanding</div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> &lt;&lt; <span class="stringliteral">&quot; (true: &quot;</span> &lt;&lt; truncate(nextTrueState.<a class="code hl_variable" href="structxrpl_1_1LoanState.html#a5ee505459016c306e674fb26b4f031ac">valueOutstanding</a>) &lt;&lt; <span class="stringliteral">&quot;, error: &quot;</span> &lt;&lt; truncate(errors.total())</div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> &lt;&lt; <span class="stringliteral">&quot;)\n\tPrincipal: &quot;</span> &lt;&lt; <a class="code hl_enumvalue" href="namespacexrpl.html#a75da7d88563def930b866cd64dd96f06a43b5c9175984c071f30b873fdce0a000">current</a>.principalOutstanding</div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> &lt;&lt; <span class="stringliteral">&quot; (true: &quot;</span> &lt;&lt; truncate(nextTrueState.<a class="code hl_variable" href="structxrpl_1_1LoanState.html#a1f506c760e69ff48dced9856ee212ffd">principalOutstanding</a>)</div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> &lt;&lt; <span class="stringliteral">&quot;, error: &quot;</span> &lt;&lt; truncate(errors.principal) &lt;&lt; <span class="stringliteral">&quot;)\n\tInterest: &quot;</span> &lt;&lt; <a class="code hl_enumvalue" href="namespacexrpl.html#a75da7d88563def930b866cd64dd96f06a43b5c9175984c071f30b873fdce0a000">current</a>.interestDue</div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> &lt;&lt; <span class="stringliteral">&quot; (true: &quot;</span> &lt;&lt; truncate(nextTrueState.<a class="code hl_variable" href="structxrpl_1_1LoanState.html#ace2969cf6a9c612aec8512c4312722e3">interestDue</a>) &lt;&lt; <span class="stringliteral">&quot;, error: &quot;</span> &lt;&lt; truncate(errors.interest)</div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> &lt;&lt; <span class="stringliteral">&quot;)\n\tMgmt fee: &quot;</span> &lt;&lt; <a class="code hl_enumvalue" href="namespacexrpl.html#a75da7d88563def930b866cd64dd96f06a43b5c9175984c071f30b873fdce0a000">current</a>.managementFeeDue</div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> &lt;&lt; <span class="stringliteral">&quot; (true: &quot;</span> &lt;&lt; truncate(nextTrueState.<a class="code hl_variable" href="structxrpl_1_1LoanState.html#ae0ba86a40394a2d7ce4474945b724c02">managementFeeDue</a>)</div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> &lt;&lt; <span class="stringliteral">&quot;, error: &quot;</span> &lt;&lt; truncate(errors.managementFee) &lt;&lt; <span class="stringliteral">&quot;)\n\tPayments remaining &quot;</span></div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> &lt;&lt; loanSle-&gt;at(sfPaymentRemaining) &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> </div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> currentRoundedState = <a class="code hl_enumvalue" href="namespacexrpl.html#a75da7d88563def930b866cd64dd96f06a43b5c9175984c071f30b873fdce0a000">current</a>;</div>
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span> }</div>
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> </div>
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> --state.paymentRemaining;</div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span> state.previousPaymentDate = state.nextPaymentDate;</div>
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span> <span class="keywordflow">if</span> (paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a>)</div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> {</div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> state.paymentRemaining = 0;</div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span> state.nextPaymentDate = 0;</div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> }</div>
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span> {</div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> state.nextPaymentDate += state.paymentInterval;</div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> }</div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> state.principalOutstanding -= paymentComponents.trackedPrincipalDelta;</div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> state.managementFeeOutstanding -= paymentComponents.trackedManagementFeeDelta;</div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> state.totalValue -= paymentComponents.trackedValueDelta;</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> </div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> <span class="keywordflow">if</span> (paymentParams.validateBalances)</div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> verifyLoanStatus(state);</div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> </div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> totalPaid.trackedValueDelta += paymentComponents.trackedValueDelta;</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> totalPaid.trackedPrincipalDelta += paymentComponents.trackedPrincipalDelta;</div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> totalPaid.trackedManagementFeeDelta += paymentComponents.trackedManagementFeeDelta;</div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> totalInterestPaid += paymentComponents.trackedInterestPart();</div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> totalFeesPaid += serviceFee;</div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> ++totalPaymentsMade;</div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> </div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> currentTrueState = nextTrueState;</div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> }</div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> validateBorrowerBalance();</div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> </div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> <span class="comment">// Loan is paid off</span></div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> BEAST_EXPECT(state.paymentRemaining == 0);</div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> BEAST_EXPECT(state.principalOutstanding == 0);</div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> </div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> <span class="keyword">auto</span> <span class="keyword">const</span> initialInterestDue =</div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> initialState.totalValue - (initialState.principalOutstanding + initialState.managementFeeOutstanding);</div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordflow">if</span> (paymentParams.validateBalances)</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> {</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> <span class="comment">// Make sure all the payments add up</span></div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> BEAST_EXPECT(totalPaid.trackedValueDelta == initialState.totalValue);</div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> BEAST_EXPECT(totalPaid.trackedPrincipalDelta == initialState.principalOutstanding);</div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> BEAST_EXPECT(totalPaid.trackedManagementFeeDelta == initialState.managementFeeOutstanding);</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> <span class="comment">// This is almost a tautology given the previous checks, but</span></div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> <span class="comment">// check it anyway for completeness.</span></div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> BEAST_EXPECT(totalInterestPaid == initialInterestDue);</div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> BEAST_EXPECT(totalPaymentsMade == initialState.paymentRemaining);</div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> }</div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> </div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> <span class="keywordflow">if</span> (showStepBalances)</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> {</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet);</div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanSle))</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> <span class="comment">// No reason for this not to exist</span></div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#a19b8ee0ce850d78834984655ae83b20e">log</a> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Total amounts paid: &quot;</span></div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> &lt;&lt; <span class="stringliteral">&quot;\n\tTotal value: &quot;</span> &lt;&lt; totalPaid.trackedValueDelta</div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> &lt;&lt; <span class="stringliteral">&quot; (initial: &quot;</span> &lt;&lt; truncate(initialState.totalValue)</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> &lt;&lt; <span class="stringliteral">&quot;, error: &quot;</span> &lt;&lt; truncate(initialState.totalValue - totalPaid.trackedValueDelta)</div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> &lt;&lt; <span class="stringliteral">&quot;)\n\tPrincipal: &quot;</span> &lt;&lt; totalPaid.trackedPrincipalDelta</div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> &lt;&lt; <span class="stringliteral">&quot; (initial: &quot;</span> &lt;&lt; truncate(initialState.principalOutstanding)</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> &lt;&lt; <span class="stringliteral">&quot;, error: &quot;</span> &lt;&lt; truncate(initialState.principalOutstanding - totalPaid.trackedPrincipalDelta)</div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> &lt;&lt; <span class="stringliteral">&quot;)\n\tInterest: &quot;</span> &lt;&lt; totalInterestPaid &lt;&lt; <span class="stringliteral">&quot; (initial: &quot;</span> &lt;&lt; truncate(initialInterestDue)</div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> &lt;&lt; <span class="stringliteral">&quot;, error: &quot;</span> &lt;&lt; truncate(initialInterestDue - totalInterestPaid)</div>
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> &lt;&lt; <span class="stringliteral">&quot;)\n\tMgmt fee: &quot;</span> &lt;&lt; totalPaid.trackedManagementFeeDelta</div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> &lt;&lt; <span class="stringliteral">&quot; (initial: &quot;</span> &lt;&lt; truncate(initialState.managementFeeOutstanding)</div>
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> &lt;&lt; <span class="stringliteral">&quot;, error: &quot;</span> &lt;&lt; truncate(initialState.managementFeeOutstanding - totalPaid.trackedManagementFeeDelta)</div>
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> &lt;&lt; <span class="stringliteral">&quot;)\n\tTotal payments made: &quot;</span> &lt;&lt; totalPaymentsMade &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> }</div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> }</div>
</div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> </div>
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"> 1048</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01049" data-start="{" data-end="}">
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a9900c15511e2509ba55a9709f59fbea9"> 1049</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a9900c15511e2509ba55a9709f59fbea9">runLoan</a>(<a class="code hl_concept" href="conceptxrpl_1_1AssetType.html">AssetType</a> assetType, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span>&amp; brokerParams, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span>&amp; loanParams)</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> {</div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> </div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender(<span class="stringliteral">&quot;lender&quot;</span>);</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> </div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a2319fbdfa7d469531a7f2b8833e283b3">all</a>);</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> </div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> <span class="keyword">auto</span> loanResult = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ae30b1026332f38925b8e75291418804d">createLoan</a>(env, assetType, brokerParams, loanParams, issuer, lender, borrower);</div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanResult))</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> </div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> <span class="keyword">auto</span> broker = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;BrokerInfo&gt;</a>(*loanResult);</div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> <span class="keyword">auto</span> loanKeylet = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Keylet&gt;</a>(*loanResult);</div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> <span class="keyword">auto</span> pseudoAcct = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Account&gt;</a>(*loanResult);</div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> </div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> verifyLoanStatus(env, broker, pseudoAcct, loanKeylet);</div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> </div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aaadcdbed8098b9084079b519ef9502b5">makeLoanPayments</a>(</div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> env,</div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> broker,</div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> loanParams,</div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> loanKeylet,</div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> verifyLoanStatus,</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> issuer,</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> lender,</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> borrower,</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">PaymentParameters</a>{.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ab14ea2a642db7b3ebbf93c1b49caebb4">showStepBalances</a> = <span class="keyword">true</span>});</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> }</div>
</div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> </div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01092" data-start="{" data-end="}">
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1"> 1092</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span>&amp; caseLabel,</div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> <span class="keywordtype">char</span> <span class="keyword">const</span>* label,</div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a>&amp; env,</div>
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; loanAmount,</div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> <span class="keywordtype">int</span> interestExponent,</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; lender,</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; borrower,</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; evan,</div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker,</div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; pseudoAcct,</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a>,</div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> <span class="comment">// The end of life callback is expected to take the loan to 0 payments</span></div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> <span class="comment">// remaining, one way or another</span></div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;<span class="keywordtype">void</span>(<a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; loanKeylet, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> <span class="keyword">const</span>&amp; verifyLoanStatus)&gt; toEndOfLife)</div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> {</div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> <span class="keyword">auto</span> <span class="keyword">const</span> [keylet, loanSequence] = [&amp;]() {</div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> <span class="comment">// will be invalid</span></div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>), <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a>(0));</div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> </div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> <span class="comment">// Broker has no loans</span></div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> BEAST_EXPECT(brokerSle-&gt;at(sfOwnerCount) == 0);</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> </div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> <span class="comment">// The loan keylet is based on the LoanSequence of the _LOAN_BROKER_</span></div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> <span class="comment">// object.</span></div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerSle-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence), loanSequence);</div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> }();</div>
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"> 1122</span> </div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> <span class="keyword">const</span> verifyLoanStatus(env, broker, pseudoAcct, keylet);</div>
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> </div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> <span class="comment">// No loans yet</span></div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> verifyLoanStatus.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a79f1360ea24d102199a36d5d41b46d1b">checkBroker</a>(0, 0, <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0}, 1, 0, 0);</div>
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> </div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanSequence != 0))</div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> </div>
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a> &lt;&lt; caseLabel &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; label;</div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> </div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> </div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> <span class="keyword">auto</span> applyExponent = [interestExponent, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a> value) <span class="keyword">mutable</span> {</div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> BEAST_EXPECT(value &gt; <a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(0));</div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> <span class="keywordflow">while</span> (interestExponent &gt; 0)</div>
<div class="line"><a id="l01140" name="l01140"></a><span class="lineno"> 1140</span> {</div>
<div class="line"><a id="l01141" name="l01141"></a><span class="lineno"> 1141</span> <span class="keyword">auto</span> <span class="keyword">const</span> oldValue = value;</div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> value *= 10;</div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span> --interestExponent;</div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> BEAST_EXPECT(value / 10 == oldValue);</div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> }</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> <span class="keywordflow">while</span> (interestExponent &lt; 0)</div>
<div class="line"><a id="l01147" name="l01147"></a><span class="lineno"> 1147</span> {</div>
<div class="line"><a id="l01148" name="l01148"></a><span class="lineno"> 1148</span> <span class="keyword">auto</span> <span class="keyword">const</span> oldValue = value;</div>
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> value /= 10;</div>
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> ++interestExponent;</div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> BEAST_EXPECT(value * 10 == oldValue);</div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> }</div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> <span class="keywordflow">return</span> value;</div>
<div class="line"><a id="l01154" name="l01154"></a><span class="lineno"> 1154</span> };</div>
<div class="line"><a id="l01155" name="l01155"></a><span class="lineno"> 1155</span> </div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerOwnerCount = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a4865ffdfc2b35ef2e94990ac89f7fd3b">ownerCount</a>(borrower);</div>
<div class="line"><a id="l01157" name="l01157"></a><span class="lineno"> 1157</span> </div>
<div class="line"><a id="l01158" name="l01158"></a><span class="lineno"> 1158</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2;</div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span> loanParams{</div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a> = borrower,</div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> .counter = lender,</div>
<div class="line"><a id="l01162" name="l01162"></a><span class="lineno"> 1162</span> .counterpartyExplicit = <span class="keyword">false</span>,</div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> .principalRequest = loanAmount,</div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</span> .setFee = loanSetFee,</div>
<div class="line"><a id="l01165" name="l01165"></a><span class="lineno"> 1165</span> .originationFee = 1,</div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> .serviceFee = 2,</div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> .lateFee = 3,</div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> .closeFee = 4,</div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> .overFee = applyExponent(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(5) / 10),</div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> .interest = applyExponent(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(12)),</div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> <span class="comment">// 2.4%</span></div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> .lateInterest = applyExponent(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(24) / 10),</div>
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> .closeInterest = applyExponent(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(36) / 10),</div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> .overpaymentInterest = applyExponent(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(48) / 10),</div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> .payTotal = 12,</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> .payInterval = 600,</div>
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> .gracePd = 60,</div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> .flags = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a>,</div>
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> };</div>
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequestAmount = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ab3d313a175cbd23b95d943878222b0a6">principalRequest</a>).value();</div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> <span class="keyword">auto</span> <span class="keyword">const</span> originationFeeAmount = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(*loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af7ceb31d4bf7ebaf7002b4ad61752a44">originationFee</a>).value();</div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> <span class="keyword">auto</span> <span class="keyword">const</span> serviceFeeAmount = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(*loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7ef3032e22b6dbb9de64f6358a7877cf">serviceFee</a>).value();</div>
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> <span class="keyword">auto</span> <span class="keyword">const</span> lateFeeAmount = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(*loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a253a290b857fa217ec1aa5d613b7d4f3">lateFee</a>).value();</div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> <span class="keyword">auto</span> <span class="keyword">const</span> closeFeeAmount = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(*loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7b3fae968ed270da3aab4ed742eeee13">closeFee</a>).value();</div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> </div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerStartbalance = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>);</div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> </div>
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> <span class="keyword">auto</span> createJtx = loanParams(env, broker);</div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> <span class="comment">// Successfully create a Loan</span></div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> env(createJtx);</div>
<div class="line"><a id="l01191" name="l01191"></a><span class="lineno"> 1191</span> </div>
<div class="line"><a id="l01192" name="l01192"></a><span class="lineno"> 1192</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l01193" name="l01193"></a><span class="lineno"> 1193</span> </div>
<div class="line"><a id="l01194" name="l01194"></a><span class="lineno"> 1194</span> <span class="keyword">auto</span> <span class="keyword">const</span> startDate = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;header().parentCloseTime.time_since_epoch().count();</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> </div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l01197" name="l01197"></a><span class="lineno"> 1197</span> {</div>
<div class="line"><a id="l01198" name="l01198"></a><span class="lineno"> 1198</span> BEAST_EXPECT(brokerSle-&gt;at(sfOwnerCount) == 1);</div>
<div class="line"><a id="l01199" name="l01199"></a><span class="lineno"> 1199</span> }</div>
<div class="line"><a id="l01200" name="l01200"></a><span class="lineno"> 1200</span> </div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> {</div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> <span class="comment">// Need to account for fees if the loan is in XRP</span></div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html">PrettyAmount</a> adjustment = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(0);</div>
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> <span class="keywordflow">if</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>())</div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> {</div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> adjustment = 2 * env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> }</div>
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> </div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>).<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a742750c3ad4996faa68c66664d3921db">value</a>() ==</div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> borrowerStartbalance.<a class="code hl_function" href="classxrpl_1_1STAmount.html#aeef88e3d2dec1d53caba7820a9366b45">value</a>() + principalRequestAmount - originationFeeAmount - adjustment.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a742750c3ad4996faa68c66664d3921db">value</a>());</div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> }</div>
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> </div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanFlags = createJtx.stx-&gt;isFlag(<a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>) ? <a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a445ecc250b4e81d24d1bf9b1ba9c8455">lsfLoanOverpayment</a> : <a class="code hl_enumeration" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1">LedgerSpecificFlags</a>(0);</div>
<div class="line"><a id="l01215" name="l01215"></a><span class="lineno"> 1215</span> </div>
<div class="line"><a id="l01216" name="l01216"></a><span class="lineno"> 1216</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> loan = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet); BEAST_EXPECT(loan))</div>
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> {</div>
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> <span class="comment">// log &lt;&lt; &quot;loan after create: &quot; &lt;&lt; to_string(loan-&gt;getJson())</span></div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> <span class="comment">// &lt;&lt; std::endl;</span></div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> BEAST_EXPECT(loan-&gt;isFlag(<a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a445ecc250b4e81d24d1bf9b1ba9c8455">lsfLoanOverpayment</a>) == createJtx.stx-&gt;isFlag(<a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>));</div>
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> BEAST_EXPECT(loan-&gt;at(sfLoanSequence) == loanSequence);</div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> BEAST_EXPECT(loan-&gt;at(sfBorrower) == borrower.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#aefcff537de98b56ea2f59a9b618cd246">id</a>());</div>
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span> BEAST_EXPECT(loan-&gt;at(sfLoanBrokerID) == broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>);</div>
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> BEAST_EXPECT(loan-&gt;at(sfLoanOriginationFee) == originationFeeAmount);</div>
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> BEAST_EXPECT(loan-&gt;at(sfLoanServiceFee) == serviceFeeAmount);</div>
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> BEAST_EXPECT(loan-&gt;at(sfLatePaymentFee) == lateFeeAmount);</div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> BEAST_EXPECT(loan-&gt;at(sfClosePaymentFee) == closeFeeAmount);</div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> BEAST_EXPECT(loan-&gt;at(sfOverpaymentFee) == *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad30970052c25bda6b0e9e605b79eee68">overFee</a>);</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> BEAST_EXPECT(loan-&gt;at(sfInterestRate) == *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a66077e07d08f1cd804e9b44242a0db69">interest</a>);</div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> BEAST_EXPECT(loan-&gt;at(sfLateInterestRate) == *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a094ab1fc90968d1093c74855237f137d">lateInterest</a>);</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> BEAST_EXPECT(loan-&gt;at(sfCloseInterestRate) == *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad3dbdc25c91318eb908350564776fd6e">closeInterest</a>);</div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> BEAST_EXPECT(loan-&gt;at(sfOverpaymentInterestRate) == *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7f8814183ab2f9991a6f724ee82ec971">overpaymentInterest</a>);</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> BEAST_EXPECT(loan-&gt;at(sfStartDate) == startDate);</div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> BEAST_EXPECT(loan-&gt;at(sfPaymentInterval) == *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61">payInterval</a>);</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> BEAST_EXPECT(loan-&gt;at(sfGracePeriod) == *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#aaa833bb11ba7b43b54801a1bfb79c300">gracePd</a>);</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> BEAST_EXPECT(loan-&gt;at(sfPreviousPaymentDueDate) == 0);</div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> BEAST_EXPECT(loan-&gt;at(sfNextPaymentDueDate) == startDate + *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61">payInterval</a>);</div>
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"> 1238</span> BEAST_EXPECT(loan-&gt;at(sfPaymentRemaining) == *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51">payTotal</a>);</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> loan-&gt;at(sfLoanScale) &gt;=</div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a4d74996b3b3f23322e00b032c8c35baa">integral</a>() ? 0 : <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(broker.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa9703000ec9d3519149be135245c57f2">vaultScale</a>(env), principalRequestAmount.<a class="code hl_function" href="classxrpl_1_1Number.html#aa4058fefe18f86063240cfd2ba985358">exponent</a>())));</div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> BEAST_EXPECT(loan-&gt;at(sfPrincipalOutstanding) == principalRequestAmount);</div>
<div class="line"><a id="l01243" name="l01243"></a><span class="lineno"> 1243</span> }</div>
<div class="line"><a id="l01244" name="l01244"></a><span class="lineno"> 1244</span> </div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> <span class="keyword">auto</span> state = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">getCurrentState</a>(env, broker, keylet, verifyLoanStatus);</div>
<div class="line"><a id="l01246" name="l01246"></a><span class="lineno"> 1246</span> </div>
<div class="line"><a id="l01247" name="l01247"></a><span class="lineno"> 1247</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanProperties = <a class="code hl_function" href="namespacexrpl.html#aeb1403000c2c2a5c8fa065d22f7cbcaf">computeLoanProperties</a>(</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac5538be33495f6fdd3cd03177b25decf">raw</a>(),</div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> state.principalOutstanding,</div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> state.interestRate,</div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> state.paymentInterval,</div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> state.paymentRemaining,</div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>,</div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> state.loanScale);</div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> </div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> verifyLoanStatus(</div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> 0,</div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> startDate + *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61">payInterval</a>,</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51">payTotal</a>,</div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> state.loanScale,</div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> loanProperties.loanState.valueOutstanding,</div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> principalRequestAmount,</div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> loanProperties.loanState.managementFeeDue,</div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> loanProperties.periodicPayment,</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> loanFlags | 0);</div>
<div class="line"><a id="l01266" name="l01266"></a><span class="lineno"> 1266</span> </div>
<div class="line"><a id="l01267" name="l01267"></a><span class="lineno"> 1267</span> <span class="comment">// Manage the loan</span></div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> <span class="comment">// no-op</span></div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, 0));</div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> {</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> <span class="comment">// no flags</span></div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> <span class="keyword">auto</span> jt = manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, 0);</div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> jt.removeMember(sfFlags.getName());</div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> env(jt);</div>
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"> 1275</span> }</div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> <span class="comment">// Only the lender can manage</span></div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> env(manage(evan, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, 0), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> <span class="comment">// unknown flags</span></div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#af8fd3bcc9b244e894c954653a107601c">tfLoanManageMask</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> <span class="comment">// combinations of flags are not allowed</span></div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#ad4588a0661e75ea428d88c20f74d102e">tfLoanUnimpair</a> | <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a> | <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#ad4588a0661e75ea428d88c20f74d102e">tfLoanUnimpair</a> | <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#ad4588a0661e75ea428d88c20f74d102e">tfLoanUnimpair</a> | <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a> | <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> <span class="comment">// invalid loan ID</span></div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> env(manage(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba348afbc4922cc9b29af76316d5d8a277">tecNO_ENTRY</a>));</div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> <span class="comment">// Loan is unimpaired, can&#39;t unimpair it again</span></div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#ad4588a0661e75ea428d88c20f74d102e">tfLoanUnimpair</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> <span class="comment">// Loan is unimpaired, it can go into default, but only after it&#39;s past</span></div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> <span class="comment">// due</span></div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba7d6f804411ab68ae086c8933e905b96e">tecTOO_SOON</a>));</div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> </div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> <span class="comment">// Check the vault</span></div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> canImpair = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a50bd51c59a032921500d206140880f1c">canImpairLoan</a>(env, broker, state);</div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> <span class="comment">// Impair the loan, if possible</span></div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>), canImpair ? <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>) : <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae42e73dd030a94b926594ff177bb6c90">tecLIMIT_EXCEEDED</a>));</div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> <span class="comment">// Unimpair the loan</span></div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> env(manage(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#ad4588a0661e75ea428d88c20f74d102e">tfLoanUnimpair</a>), canImpair ? <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>) : <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> </div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> <span class="keyword">auto</span> <span class="keyword">const</span> nextDueDate = startDate + *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61">payInterval</a>;</div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> </div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> env.close();</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> </div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> verifyLoanStatus(</div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> 0,</div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> nextDueDate,</div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51">payTotal</a>,</div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> loanProperties.loanScale,</div>
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> loanProperties.loanState.valueOutstanding,</div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> principalRequestAmount,</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> loanProperties.loanState.managementFeeDue,</div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> loanProperties.periodicPayment,</div>
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"> 1313</span> loanFlags | 0);</div>
<div class="line"><a id="l01314" name="l01314"></a><span class="lineno"> 1314</span> </div>
<div class="line"><a id="l01315" name="l01315"></a><span class="lineno"> 1315</span> <span class="comment">// Can&#39;t delete the loan yet. It has payments remaining.</span></div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> env(del(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556baf9893323708f9529dce3dd46682f8336">tecHAS_OBLIGATIONS</a>));</div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> </div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> <span class="keywordflow">if</span> (BEAST_EXPECT(toEndOfLife))</div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> toEndOfLife(keylet, verifyLoanStatus);</div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> env.close();</div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> </div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> <span class="comment">// Verify the loan is at EOL</span></div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> loan = env.le(keylet); BEAST_EXPECT(loan))</div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> {</div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> BEAST_EXPECT(loan-&gt;at(sfPaymentRemaining) == 0);</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> BEAST_EXPECT(loan-&gt;at(sfPrincipalOutstanding) == 0);</div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> }</div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerStartingBalance = env.balance(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>);</div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> </div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> <span class="comment">// Try to delete the loan broker with an active loan</span></div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a356a504c7d6a431398e71e9b121fb087">loanBroker::del</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556baf9893323708f9529dce3dd46682f8336">tecHAS_OBLIGATIONS</a>));</div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> <span class="comment">// Ensure the above tx doesn&#39;t get ordered after the LoanDelete and</span></div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> <span class="comment">// delete our broker!</span></div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> env.close();</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> </div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> <span class="comment">// Test failure cases</span></div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> env(del(lender, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> env(del(evan, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> env(del(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba348afbc4922cc9b29af76316d5d8a277">tecNO_ENTRY</a>));</div>
<div class="line"><a id="l01340" name="l01340"></a><span class="lineno"> 1340</span> </div>
<div class="line"><a id="l01341" name="l01341"></a><span class="lineno"> 1341</span> <span class="comment">// Delete the loan</span></div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> <span class="comment">// Either the borrower or the lender can delete the loan. Alternate</span></div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> <span class="comment">// between who does it across tests.</span></div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> deleteCounter = 0;</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> <span class="keyword">auto</span> <span class="keyword">const</span> deleter = ++deleteCounter % 2 ? lender : borrower;</div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> env(del(deleter, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>));</div>
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> env.close();</div>
<div class="line"><a id="l01348" name="l01348"></a><span class="lineno"> 1348</span> </div>
<div class="line"><a id="l01349" name="l01349"></a><span class="lineno"> 1349</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html">PrettyAmount</a> adjustment = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(0);</div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> <span class="keywordflow">if</span> (deleter == borrower)</div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> {</div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> <span class="comment">// Need to account for fees if the loan is in XRP</span></div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> <span class="keywordflow">if</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>())</div>
<div class="line"><a id="l01354" name="l01354"></a><span class="lineno"> 1354</span> {</div>
<div class="line"><a id="l01355" name="l01355"></a><span class="lineno"> 1355</span> adjustment = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> }</div>
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> }</div>
<div class="line"><a id="l01358" name="l01358"></a><span class="lineno"> 1358</span> </div>
<div class="line"><a id="l01359" name="l01359"></a><span class="lineno"> 1359</span> <span class="comment">// No loans left</span></div>
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> verifyLoanStatus.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a79f1360ea24d102199a36d5d41b46d1b">checkBroker</a>(0, 0, *loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a66077e07d08f1cd804e9b44242a0db69">interest</a>, 1, 0, 0);</div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> </div>
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> BEAST_EXPECT(env.balance(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>).value() == borrowerStartingBalance.value() - adjustment);</div>
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> BEAST_EXPECT(env.ownerCount(borrower) == borrowerOwnerCount);</div>
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> </div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.le(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> {</div>
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> BEAST_EXPECT(brokerSle-&gt;at(sfOwnerCount) == 0);</div>
<div class="line"><a id="l01368" name="l01368"></a><span class="lineno"> 1368</span> }</div>
<div class="line"><a id="l01369" name="l01369"></a><span class="lineno"> 1369</span> }</div>
</div>
<div class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span> </div>
<div class="line"><a id="l01371" name="l01371"></a><span class="lineno"> 1371</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div>
<div class="foldopen" id="foldopen01372" data-start="{" data-end="}">
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ace0d2b7dbf91db8eb260184d9bf5ab58"> 1372</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ace0d2b7dbf91db8eb260184d9bf5ab58">getCurrencyLabel</a>(<a class="code hl_class" href="classxrpl_1_1Asset.html">Asset</a> <span class="keyword">const</span>&amp; asset)</div>
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> {</div>
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> <span class="keywordflow">return</span> (asset.<a class="code hl_function" href="classxrpl_1_1Asset.html#acd176ab2416dd3d190cbd4e1283d95b3">native</a>() ? <span class="stringliteral">&quot;XRP&quot;</span> : asset.<a class="code hl_function" href="classxrpl_1_1Asset.html#ae7764d785dce46113d1d2be6eabc3c17">holds</a>&lt;<a class="code hl_class" href="classxrpl_1_1Issue.html">Issue</a>&gt;() ? <span class="stringliteral">&quot;IOU&quot;</span> : asset.<a class="code hl_function" href="classxrpl_1_1Asset.html#ae7764d785dce46113d1d2be6eabc3c17">holds</a>&lt;<a class="code hl_class" href="classxrpl_1_1MPTIssue.html">MPTIssue</a>&gt;() ? <span class="stringliteral">&quot;MPT&quot;</span> : <span class="stringliteral">&quot;Unknown&quot;</span>);</div>
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span> }</div>
</div>
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> </div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> <span class="keyword">template</span> &lt;<span class="keyword">class</span> TAsset, std::<span class="keywordtype">size_t</span> NAsset&gt;</div>
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01387" data-start="{" data-end="}">
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a09cd21d5faddbc05bcd238bbf602db9c"> 1387</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a09cd21d5faddbc05bcd238bbf602db9c">testCaseWrapper</a>(</div>
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">jtx::Env</a>&amp; env,</div>
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">jtx::MPTTester</a>&amp; mptt,</div>
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/array.html">std::array&lt;TAsset, NAsset&gt;</a> <span class="keyword">const</span>&amp; assets,</div>
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker,</div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; loanAmount,</div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> <span class="keywordtype">int</span> interestExponent)</div>
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> {</div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> <span class="keyword">using namespace </span>Lending;</div>
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> </div>
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; asset = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac5538be33495f6fdd3cd03177b25decf">raw</a>();</div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> <span class="keyword">auto</span> <span class="keyword">const</span> currencyLabel = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ace0d2b7dbf91db8eb260184d9bf5ab58">getCurrencyLabel</a>(asset);</div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> <span class="keyword">auto</span> <span class="keyword">const</span> caseLabel = [&amp;]() {</div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/io/basic_stringstream.html">std::stringstream</a> ss;</div>
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> ss &lt;&lt; <span class="stringliteral">&quot;Lifecycle: &quot;</span> &lt;&lt; loanAmount &lt;&lt; <span class="stringliteral">&quot; &quot;</span> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Scale interest to: &quot;</span> &lt;&lt; interestExponent</div>
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> &lt;&lt; <span class="stringliteral">&quot; &quot;</span>;</div>
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span> <span class="keywordflow">return</span> ss.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/basic_stringstream/str.html">str</a>();</div>
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> }();</div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a> &lt;&lt; caseLabel;</div>
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> </div>
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> <span class="keyword">using </span>d = <a class="code hl_typedef" href="classxrpl_1_1NetClock.html#a8db39de3345bf89d6be8885338a624e5">NetClock::duration</a>;</div>
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span> <span class="keyword">using </span>tp = <a class="code hl_typedef" href="classxrpl_1_1NetClock.html#a6fdfbe103d809c714f11b914b391f8df">NetClock::time_point</a>;</div>
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> </div>
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> <span class="comment">// For simplicity, lender will be the sole actor for the vault &amp;</span></div>
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> <span class="comment">// brokers.</span></div>
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> <span class="comment">// Borrower only wants to borrow</span></div>
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> <span class="comment">// Evan will attempt to be naughty</span></div>
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> evan{<span class="stringliteral">&quot;evan&quot;</span>};</div>
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> <span class="comment">// Do not fund alice</span></div>
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a id="l01423" name="l01423"></a><span class="lineno"> 1423</span> </div>
<div class="line"><a id="l01424" name="l01424"></a><span class="lineno"> 1424</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(loanAmount).value();</div>
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> maxCoveredLoanValue = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a06aa9eec8beeb6eae8477cb0eeb7675c">maxCoveredLoanValue</a>(0);</div>
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> BEAST_EXPECT(maxCoveredLoanValue == 1000 * 100 / 10);</div>
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> maxCoveredLoanRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(maxCoveredLoanValue).value();</div>
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> totalVaultRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a>).value();</div>
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> debtMaximumRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a25badc9387457857607edbadf6fac63e">debtMax</a>).value();</div>
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> </div>
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> </div>
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> <span class="keyword">auto</span> <span class="keyword">const</span> pseudoAcct = [&amp;]() {</div>
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> <span class="keywordflow">return</span> lender;</div>
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerPseudo = brokerSle-&gt;at(sfAccount);</div>
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;Broker pseudo-account&quot;</span>, brokerPseudo);</div>
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> }();</div>
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> </div>
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l01442" name="l01442"></a><span class="lineno"> 1442</span> </div>
<div class="line"><a id="l01443" name="l01443"></a><span class="lineno"> 1443</span> <span class="keyword">auto</span> badKeylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a9a7028770e8d9d38ca198d2096149766">keylet::vault</a>(lender.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#aefcff537de98b56ea2f59a9b618cd246">id</a>(), env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a7e2bf847bf817405a5d8db448d8b4f6f">seq</a>(lender));</div>
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> <span class="comment">// Try some failure cases</span></div>
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> <span class="comment">// flags are checked first</span></div>
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest, <a class="code hl_variable" href="namespacexrpl.html#aa9486edaa86874b243fecc344f959e7c">tfLoanSetMask</a>),</div>
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> loanSetFee,</div>
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01450" name="l01450"></a><span class="lineno"> 1450</span> </div>
<div class="line"><a id="l01451" name="l01451"></a><span class="lineno"> 1451</span> <span class="comment">// field length validation</span></div>
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span> <span class="comment">// sfData: good length, bad account</span></div>
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a293e60256c283a66afb95f4e20e1a3e3">data</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a>(<a class="code hl_variable" href="namespacexrpl.html#a5757d2011cf084a64414ded0b2c7ed66">maxDataPayloadLength</a>, <span class="charliteral">&#39;X&#39;</span>)),</div>
<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"> 1456</span> loanSetFee,</div>
<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"> 1458</span> <span class="comment">// sfData: too long</span></div>
<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"> 1459</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"> 1461</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a293e60256c283a66afb95f4e20e1a3e3">data</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a>(<a class="code hl_variable" href="namespacexrpl.html#a5757d2011cf084a64414ded0b2c7ed66">maxDataPayloadLength</a> + 1, <span class="charliteral">&#39;Y&#39;</span>)),</div>
<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"> 1462</span> loanSetFee,</div>
<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"> 1463</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"> 1464</span> </div>
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span> <span class="comment">// field range validation</span></div>
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span> <span class="comment">// sfOverpaymentFee: good value, bad account</span></div>
<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span> overpaymentFee(maxOverpaymentFee),</div>
<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"> 1470</span> loanSetFee,</div>
<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span> <span class="comment">// sfOverpaymentFee: too big</span></div>
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"> 1474</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> overpaymentFee(maxOverpaymentFee + 1),</div>
<div class="line"><a id="l01476" name="l01476"></a><span class="lineno"> 1476</span> loanSetFee,</div>
<div class="line"><a id="l01477" name="l01477"></a><span class="lineno"> 1477</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01478" name="l01478"></a><span class="lineno"> 1478</span> </div>
<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"> 1479</span> <span class="comment">// sfInterestRate: good value, bad account</span></div>
<div class="line"><a id="l01480" name="l01480"></a><span class="lineno"> 1480</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01481" name="l01481"></a><span class="lineno"> 1481</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"> 1482</span> interestRate(maxInterestRate),</div>
<div class="line"><a id="l01483" name="l01483"></a><span class="lineno"> 1483</span> loanSetFee,</div>
<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"> 1484</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01485" name="l01485"></a><span class="lineno"> 1485</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01486" name="l01486"></a><span class="lineno"> 1486</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span> interestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(0)),</div>
<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"> 1488</span> loanSetFee,</div>
<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"> 1490</span> <span class="comment">// sfInterestRate: too big</span></div>
<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"> 1491</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"> 1493</span> interestRate(maxInterestRate + 1),</div>
<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span> loanSetFee,</div>
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span> <span class="comment">// sfInterestRate: too small</span></div>
<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span> interestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(-1)),</div>
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span> loanSetFee,</div>
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span> </div>
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span> <span class="comment">// sfLateInterestRate: good value, bad account</span></div>
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span> lateInterestRate(maxLateInterestRate),</div>
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span> loanSetFee,</div>
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> lateInterestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(0)),</div>
<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span> loanSetFee,</div>
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span> <span class="comment">// sfLateInterestRate: too big</span></div>
<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span> lateInterestRate(maxLateInterestRate + 1),</div>
<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span> loanSetFee,</div>
<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"> 1519</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span> <span class="comment">// sfLateInterestRate: too small</span></div>
<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"> 1521</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span> lateInterestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(-1)),</div>
<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span> loanSetFee,</div>
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01526" name="l01526"></a><span class="lineno"> 1526</span> </div>
<div class="line"><a id="l01527" name="l01527"></a><span class="lineno"> 1527</span> <span class="comment">// sfCloseInterestRate: good value, bad account</span></div>
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span> closeInterestRate(maxCloseInterestRate),</div>
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span> loanSetFee,</div>
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> closeInterestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(0)),</div>
<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span> loanSetFee,</div>
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> <span class="comment">// sfCloseInterestRate: too big</span></div>
<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span> closeInterestRate(maxCloseInterestRate + 1),</div>
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span> loanSetFee,</div>
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"> 1545</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> closeInterestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(-1)),</div>
<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span> loanSetFee,</div>
<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"> 1548</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01549" name="l01549"></a><span class="lineno"> 1549</span> </div>
<div class="line"><a id="l01550" name="l01550"></a><span class="lineno"> 1550</span> <span class="comment">// sfOverpaymentInterestRate: good value, bad account</span></div>
<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"> 1551</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"> 1552</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"> 1553</span> overpaymentInterestRate(maxOverpaymentInterestRate),</div>
<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span> loanSetFee,</div>
<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> overpaymentInterestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(0)),</div>
<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span> loanSetFee,</div>
<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span> <span class="comment">// sfOverpaymentInterestRate: too big</span></div>
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"> 1562</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01564" name="l01564"></a><span class="lineno"> 1564</span> overpaymentInterestRate(maxOverpaymentInterestRate + 1),</div>
<div class="line"><a id="l01565" name="l01565"></a><span class="lineno"> 1565</span> loanSetFee,</div>
<div class="line"><a id="l01566" name="l01566"></a><span class="lineno"> 1566</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01567" name="l01567"></a><span class="lineno"> 1567</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01568" name="l01568"></a><span class="lineno"> 1568</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01569" name="l01569"></a><span class="lineno"> 1569</span> overpaymentInterestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(-1)),</div>
<div class="line"><a id="l01570" name="l01570"></a><span class="lineno"> 1570</span> loanSetFee,</div>
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"> 1571</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01572" name="l01572"></a><span class="lineno"> 1572</span> </div>
<div class="line"><a id="l01573" name="l01573"></a><span class="lineno"> 1573</span> <span class="comment">// sfPaymentTotal: good value, bad account</span></div>
<div class="line"><a id="l01574" name="l01574"></a><span class="lineno"> 1574</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01575" name="l01575"></a><span class="lineno"> 1575</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01576" name="l01576"></a><span class="lineno"> 1576</span> paymentTotal(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#a56b9593dc7407600b0a89600532b5603">LoanSet::minPaymentTotal</a>),</div>
<div class="line"><a id="l01577" name="l01577"></a><span class="lineno"> 1577</span> loanSetFee,</div>
<div class="line"><a id="l01578" name="l01578"></a><span class="lineno"> 1578</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01579" name="l01579"></a><span class="lineno"> 1579</span> <span class="comment">// sfPaymentTotal: too small (there is no max)</span></div>
<div class="line"><a id="l01580" name="l01580"></a><span class="lineno"> 1580</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"> 1581</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span> paymentTotal(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#a56b9593dc7407600b0a89600532b5603">LoanSet::minPaymentTotal</a> - 1),</div>
<div class="line"><a id="l01583" name="l01583"></a><span class="lineno"> 1583</span> loanSetFee,</div>
<div class="line"><a id="l01584" name="l01584"></a><span class="lineno"> 1584</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01585" name="l01585"></a><span class="lineno"> 1585</span> </div>
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"> 1586</span> <span class="comment">// sfPaymentInterval: good value, bad account</span></div>
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01588" name="l01588"></a><span class="lineno"> 1588</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01589" name="l01589"></a><span class="lineno"> 1589</span> paymentInterval(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#a473051cf91fbec0e50f2f32ca9c71e87">LoanSet::minPaymentInterval</a>),</div>
<div class="line"><a id="l01590" name="l01590"></a><span class="lineno"> 1590</span> loanSetFee,</div>
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"> 1591</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span> <span class="comment">// sfPaymentInterval: too small (there is no max)</span></div>
<div class="line"><a id="l01593" name="l01593"></a><span class="lineno"> 1593</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01594" name="l01594"></a><span class="lineno"> 1594</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01595" name="l01595"></a><span class="lineno"> 1595</span> paymentInterval(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#a473051cf91fbec0e50f2f32ca9c71e87">LoanSet::minPaymentInterval</a> - 1),</div>
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"> 1596</span> loanSetFee,</div>
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01598" name="l01598"></a><span class="lineno"> 1598</span> </div>
<div class="line"><a id="l01599" name="l01599"></a><span class="lineno"> 1599</span> <span class="comment">// sfGracePeriod: good value, bad account</span></div>
<div class="line"><a id="l01600" name="l01600"></a><span class="lineno"> 1600</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"> 1601</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"> 1602</span> paymentInterval(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#a473051cf91fbec0e50f2f32ca9c71e87">LoanSet::minPaymentInterval</a> * 2),</div>
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span> gracePeriod(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#a473051cf91fbec0e50f2f32ca9c71e87">LoanSet::minPaymentInterval</a> * 2),</div>
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"> 1604</span> loanSetFee,</div>
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"> 1605</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"> 1606</span> <span class="comment">// sfGracePeriod: larger than paymentInterval</span></div>
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"> 1607</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span> paymentInterval(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#a473051cf91fbec0e50f2f32ca9c71e87">LoanSet::minPaymentInterval</a> * 2),</div>
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"> 1610</span> gracePeriod(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#a473051cf91fbec0e50f2f32ca9c71e87">LoanSet::minPaymentInterval</a> * 3),</div>
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span> loanSetFee,</div>
<div class="line"><a id="l01612" name="l01612"></a><span class="lineno"> 1612</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01613" name="l01613"></a><span class="lineno"> 1613</span> </div>
<div class="line"><a id="l01614" name="l01614"></a><span class="lineno"> 1614</span> <span class="comment">// insufficient fee - single sign</span></div>
<div class="line"><a id="l01615" name="l01615"></a><span class="lineno"> 1615</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01616" name="l01616"></a><span class="lineno"> 1616</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01617" name="l01617"></a><span class="lineno"> 1617</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a09be2aabc0ac5f377a30d0e35dab0aeea4bb393751801d6ada6003976dcc1dc69">telINSUF_FEE_P</a>));</div>
<div class="line"><a id="l01618" name="l01618"></a><span class="lineno"> 1618</span> <span class="comment">// insufficient fee - multisign</span></div>
<div class="line"><a id="l01619" name="l01619"></a><span class="lineno"> 1619</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3e1f4901e4bbcfed8fc80c31c2deda92">signers</a>(lender, 2, {{evan, 1}, {borrower, 1}}));</div>
<div class="line"><a id="l01620" name="l01620"></a><span class="lineno"> 1620</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3e1f4901e4bbcfed8fc80c31c2deda92">signers</a>(borrower, 2, {{evan, 1}, {lender, 1}}));</div>
<div class="line"><a id="l01621" name="l01621"></a><span class="lineno"> 1621</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01622" name="l01622"></a><span class="lineno"> 1622</span> counterparty(lender),</div>
<div class="line"><a id="l01623" name="l01623"></a><span class="lineno"> 1623</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(evan, lender),</div>
<div class="line"><a id="l01624" name="l01624"></a><span class="lineno"> 1624</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(sfCounterpartySignature, evan, borrower),</div>
<div class="line"><a id="l01625" name="l01625"></a><span class="lineno"> 1625</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5 - 1),</div>
<div class="line"><a id="l01626" name="l01626"></a><span class="lineno"> 1626</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a09be2aabc0ac5f377a30d0e35dab0aeea4bb393751801d6ada6003976dcc1dc69">telINSUF_FEE_P</a>));</div>
<div class="line"><a id="l01627" name="l01627"></a><span class="lineno"> 1627</span> <span class="comment">// Bad multisign signatures for borrower (Account)</span></div>
<div class="line"><a id="l01628" name="l01628"></a><span class="lineno"> 1628</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01629" name="l01629"></a><span class="lineno"> 1629</span> counterparty(lender),</div>
<div class="line"><a id="l01630" name="l01630"></a><span class="lineno"> 1630</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(alice, issuer),</div>
<div class="line"><a id="l01631" name="l01631"></a><span class="lineno"> 1631</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(sfCounterpartySignature, evan, borrower),</div>
<div class="line"><a id="l01632" name="l01632"></a><span class="lineno"> 1632</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l01633" name="l01633"></a><span class="lineno"> 1633</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1a90691815ffc09c4ac3310b80f30975ae">tefBAD_SIGNATURE</a>));</div>
<div class="line"><a id="l01634" name="l01634"></a><span class="lineno"> 1634</span> <span class="comment">// Bad multisign signatures for issuer (Counterparty)</span></div>
<div class="line"><a id="l01635" name="l01635"></a><span class="lineno"> 1635</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01636" name="l01636"></a><span class="lineno"> 1636</span> counterparty(lender),</div>
<div class="line"><a id="l01637" name="l01637"></a><span class="lineno"> 1637</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(evan, lender),</div>
<div class="line"><a id="l01638" name="l01638"></a><span class="lineno"> 1638</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(sfCounterpartySignature, alice, issuer),</div>
<div class="line"><a id="l01639" name="l01639"></a><span class="lineno"> 1639</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5 - 1),</div>
<div class="line"><a id="l01640" name="l01640"></a><span class="lineno"> 1640</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1a90691815ffc09c4ac3310b80f30975ae">tefBAD_SIGNATURE</a>));</div>
<div class="line"><a id="l01641" name="l01641"></a><span class="lineno"> 1641</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3e1f4901e4bbcfed8fc80c31c2deda92">signers</a>(lender, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a902ebcfb8e9d8d76fe6dc6cb026610f9">none</a>));</div>
<div class="line"><a id="l01642" name="l01642"></a><span class="lineno"> 1642</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3e1f4901e4bbcfed8fc80c31c2deda92">signers</a>(borrower, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a902ebcfb8e9d8d76fe6dc6cb026610f9">none</a>));</div>
<div class="line"><a id="l01643" name="l01643"></a><span class="lineno"> 1643</span> <span class="comment">// multisign sufficient fee, but no signers set up</span></div>
<div class="line"><a id="l01644" name="l01644"></a><span class="lineno"> 1644</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01645" name="l01645"></a><span class="lineno"> 1645</span> counterparty(lender),</div>
<div class="line"><a id="l01646" name="l01646"></a><span class="lineno"> 1646</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(evan, lender),</div>
<div class="line"><a id="l01647" name="l01647"></a><span class="lineno"> 1647</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(sfCounterpartySignature, evan, borrower),</div>
<div class="line"><a id="l01648" name="l01648"></a><span class="lineno"> 1648</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l01649" name="l01649"></a><span class="lineno"> 1649</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1afe83db457a54098554c8968bf04471d8">tefNOT_MULTI_SIGNING</a>));</div>
<div class="line"><a id="l01650" name="l01650"></a><span class="lineno"> 1650</span> <span class="comment">// not the broker owner, no counterparty, not signed by broker</span></div>
<div class="line"><a id="l01651" name="l01651"></a><span class="lineno"> 1651</span> <span class="comment">// owner</span></div>
<div class="line"><a id="l01652" name="l01652"></a><span class="lineno"> 1652</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01653" name="l01653"></a><span class="lineno"> 1653</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, evan),</div>
<div class="line"><a id="l01654" name="l01654"></a><span class="lineno"> 1654</span> loanSetFee,</div>
<div class="line"><a id="l01655" name="l01655"></a><span class="lineno"> 1655</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">tefBAD_AUTH</a>));</div>
<div class="line"><a id="l01656" name="l01656"></a><span class="lineno"> 1656</span> <span class="comment">// not the broker owner, counterparty is borrower</span></div>
<div class="line"><a id="l01657" name="l01657"></a><span class="lineno"> 1657</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01658" name="l01658"></a><span class="lineno"> 1658</span> counterparty(borrower),</div>
<div class="line"><a id="l01659" name="l01659"></a><span class="lineno"> 1659</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01660" name="l01660"></a><span class="lineno"> 1660</span> loanSetFee,</div>
<div class="line"><a id="l01661" name="l01661"></a><span class="lineno"> 1661</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l01662" name="l01662"></a><span class="lineno"> 1662</span> <span class="comment">// not a LoanBroker object, no counterparty</span></div>
<div class="line"><a id="l01663" name="l01663"></a><span class="lineno"> 1663</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, badKeylet.key, principalRequest),</div>
<div class="line"><a id="l01664" name="l01664"></a><span class="lineno"> 1664</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, evan),</div>
<div class="line"><a id="l01665" name="l01665"></a><span class="lineno"> 1665</span> loanSetFee,</div>
<div class="line"><a id="l01666" name="l01666"></a><span class="lineno"> 1666</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6ae6a0e0bf6dadc6ffbf80026872cc5a8e">temBAD_SIGNER</a>));</div>
<div class="line"><a id="l01667" name="l01667"></a><span class="lineno"> 1667</span> <span class="comment">// not a LoanBroker object, counterparty is valid</span></div>
<div class="line"><a id="l01668" name="l01668"></a><span class="lineno"> 1668</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, badKeylet.key, principalRequest),</div>
<div class="line"><a id="l01669" name="l01669"></a><span class="lineno"> 1669</span> counterparty(borrower),</div>
<div class="line"><a id="l01670" name="l01670"></a><span class="lineno"> 1670</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l01671" name="l01671"></a><span class="lineno"> 1671</span> loanSetFee,</div>
<div class="line"><a id="l01672" name="l01672"></a><span class="lineno"> 1672</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba348afbc4922cc9b29af76316d5d8a277">tecNO_ENTRY</a>));</div>
<div class="line"><a id="l01673" name="l01673"></a><span class="lineno"> 1673</span> <span class="comment">// borrower doesn&#39;t exist</span></div>
<div class="line"><a id="l01674" name="l01674"></a><span class="lineno"> 1674</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l01675" name="l01675"></a><span class="lineno"> 1675</span> counterparty(alice),</div>
<div class="line"><a id="l01676" name="l01676"></a><span class="lineno"> 1676</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, alice),</div>
<div class="line"><a id="l01677" name="l01677"></a><span class="lineno"> 1677</span> loanSetFee,</div>
<div class="line"><a id="l01678" name="l01678"></a><span class="lineno"> 1678</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a0a6c86e55d58f0dfb3d535c11e414c72ad71aaf9032f8c48b6fe709fbc44d431e">terNO_ACCOUNT</a>));</div>
<div class="line"><a id="l01679" name="l01679"></a><span class="lineno"> 1679</span> </div>
<div class="line"><a id="l01680" name="l01680"></a><span class="lineno"> 1680</span> <span class="comment">// Request more funds than the vault has available</span></div>
<div class="line"><a id="l01681" name="l01681"></a><span class="lineno"> 1681</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, totalVaultRequest + 1),</div>
<div class="line"><a id="l01682" name="l01682"></a><span class="lineno"> 1682</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01683" name="l01683"></a><span class="lineno"> 1683</span> loanSetFee,</div>
<div class="line"><a id="l01684" name="l01684"></a><span class="lineno"> 1684</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8479260fa4500bef887fa8e8c9f3c624">tecINSUFFICIENT_FUNDS</a>));</div>
<div class="line"><a id="l01685" name="l01685"></a><span class="lineno"> 1685</span> </div>
<div class="line"><a id="l01686" name="l01686"></a><span class="lineno"> 1686</span> <span class="comment">// Request more funds than the broker&#39;s first-loss capital can</span></div>
<div class="line"><a id="l01687" name="l01687"></a><span class="lineno"> 1687</span> <span class="comment">// cover.</span></div>
<div class="line"><a id="l01688" name="l01688"></a><span class="lineno"> 1688</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, maxCoveredLoanRequest + 1),</div>
<div class="line"><a id="l01689" name="l01689"></a><span class="lineno"> 1689</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01690" name="l01690"></a><span class="lineno"> 1690</span> loanSetFee,</div>
<div class="line"><a id="l01691" name="l01691"></a><span class="lineno"> 1691</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8479260fa4500bef887fa8e8c9f3c624">tecINSUFFICIENT_FUNDS</a>));</div>
<div class="line"><a id="l01692" name="l01692"></a><span class="lineno"> 1692</span> </div>
<div class="line"><a id="l01693" name="l01693"></a><span class="lineno"> 1693</span> <span class="comment">// Frozen trust line / locked MPT issuance</span></div>
<div class="line"><a id="l01694" name="l01694"></a><span class="lineno"> 1694</span> <span class="comment">// XRP can not be frozen, but run through the loop anyway to test</span></div>
<div class="line"><a id="l01695" name="l01695"></a><span class="lineno"> 1695</span> <span class="comment">// the tecLIMIT_EXCEEDED case</span></div>
<div class="line"><a id="l01696" name="l01696"></a><span class="lineno"> 1696</span> {</div>
<div class="line"><a id="l01697" name="l01697"></a><span class="lineno"> 1697</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l01698" name="l01698"></a><span class="lineno"> 1698</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l01699" name="l01699"></a><span class="lineno"> 1699</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l01700" name="l01700"></a><span class="lineno"> 1700</span> </div>
<div class="line"><a id="l01701" name="l01701"></a><span class="lineno"> 1701</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultPseudo = [&amp;]() {</div>
<div class="line"><a id="l01702" name="l01702"></a><span class="lineno"> 1702</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a9a7028770e8d9d38ca198d2096149766">keylet::vault</a>(brokerSle-&gt;at(sfVaultID)));</div>
<div class="line"><a id="l01703" name="l01703"></a><span class="lineno"> 1703</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(vaultSle))</div>
<div class="line"><a id="l01704" name="l01704"></a><span class="lineno"> 1704</span> <span class="comment">// This will be wrong, but the test has failed anyway.</span></div>
<div class="line"><a id="l01705" name="l01705"></a><span class="lineno"> 1705</span> <span class="keywordflow">return</span> lender;</div>
<div class="line"><a id="l01706" name="l01706"></a><span class="lineno"> 1706</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultPseudo = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;Vault pseudo-account&quot;</span>, vaultSle-&gt;at(sfAccount));</div>
<div class="line"><a id="l01707" name="l01707"></a><span class="lineno"> 1707</span> <span class="keywordflow">return</span> vaultPseudo;</div>
<div class="line"><a id="l01708" name="l01708"></a><span class="lineno"> 1708</span> }();</div>
<div class="line"><a id="l01709" name="l01709"></a><span class="lineno"> 1709</span> </div>
<div class="line"><a id="l01710" name="l01710"></a><span class="lineno"> 1710</span> <span class="keyword">auto</span> <span class="keyword">const</span> [<a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367aeb479605271a1f0ffff9d87f2cab0b75">freeze</a>, deepfreeze, unfreeze, expectedResult] =</div>
<div class="line"><a id="l01711" name="l01711"></a><span class="lineno"> 1711</span> [&amp;]() -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/tuple.html">std::tuple</a>&lt;</div>
<div class="line"><a id="l01712" name="l01712"></a><span class="lineno"> 1712</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;<span class="keywordtype">void</span>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; holder)&gt;,</div>
<div class="line"><a id="l01713" name="l01713"></a><span class="lineno"> 1713</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;void(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; holder)&gt;,</div>
<div class="line"><a id="l01714" name="l01714"></a><span class="lineno"> 1714</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;void(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; holder)&gt;,</div>
<div class="line"><a id="l01715" name="l01715"></a><span class="lineno"> 1715</span> <a class="code hl_class" href="classxrpl_1_1TERSubset.html">TER</a>&gt; {</div>
<div class="line"><a id="l01716" name="l01716"></a><span class="lineno"> 1716</span> <span class="comment">// Freeze / lock the asset</span></div>
<div class="line"><a id="l01717" name="l01717"></a><span class="lineno"> 1717</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;void(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; holder)&gt; empty;</div>
<div class="line"><a id="l01718" name="l01718"></a><span class="lineno"> 1718</span> <span class="keywordflow">if</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>())</div>
<div class="line"><a id="l01719" name="l01719"></a><span class="lineno"> 1719</span> {</div>
<div class="line"><a id="l01720" name="l01720"></a><span class="lineno"> 1720</span> <span class="comment">// XRP can&#39;t be frozen</span></div>
<div class="line"><a id="l01721" name="l01721"></a><span class="lineno"> 1721</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/tuple/make_tuple.html">std::make_tuple</a>(empty, empty, empty, <a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>);</div>
<div class="line"><a id="l01722" name="l01722"></a><span class="lineno"> 1722</span> }</div>
<div class="line"><a id="l01723" name="l01723"></a><span class="lineno"> 1723</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac74806960f3bff9148f4e830963062f7">holds</a>&lt;<a class="code hl_class" href="classxrpl_1_1Issue.html">Issue</a>&gt;())</div>
<div class="line"><a id="l01724" name="l01724"></a><span class="lineno"> 1724</span> {</div>
<div class="line"><a id="l01725" name="l01725"></a><span class="lineno"> 1725</span> <span class="keyword">auto</span> <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367aeb479605271a1f0ffff9d87f2cab0b75">freeze</a> = [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; holder) {</div>
<div class="line"><a id="l01726" name="l01726"></a><span class="lineno"> 1726</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(issuer, holder[<a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a0e7045b5ac0a07c23a631dd911475b6b">iouCurrency</a>](0), <a class="code hl_variable" href="namespacexrpl.html#ae974e82cf9dee1293007ca183f0e1ae2">tfSetFreeze</a>));</div>
<div class="line"><a id="l01727" name="l01727"></a><span class="lineno"> 1727</span> };</div>
<div class="line"><a id="l01728" name="l01728"></a><span class="lineno"> 1728</span> <span class="keyword">auto</span> deepfreeze = [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; holder) {</div>
<div class="line"><a id="l01729" name="l01729"></a><span class="lineno"> 1729</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(issuer, holder[<a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a0e7045b5ac0a07c23a631dd911475b6b">iouCurrency</a>](0), <a class="code hl_variable" href="namespacexrpl.html#ae974e82cf9dee1293007ca183f0e1ae2">tfSetFreeze</a> | <a class="code hl_variable" href="namespacexrpl.html#a9f9ee3523ab53fb96dbb6e80d6ca2992">tfSetDeepFreeze</a>));</div>
<div class="line"><a id="l01730" name="l01730"></a><span class="lineno"> 1730</span> };</div>
<div class="line"><a id="l01731" name="l01731"></a><span class="lineno"> 1731</span> <span class="keyword">auto</span> unfreeze = [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; holder) {</div>
<div class="line"><a id="l01732" name="l01732"></a><span class="lineno"> 1732</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(issuer, holder[<a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a0e7045b5ac0a07c23a631dd911475b6b">iouCurrency</a>](0), <a class="code hl_variable" href="namespacexrpl.html#a84537bb967d8021b730576d249e1a321">tfClearFreeze</a> | <a class="code hl_variable" href="namespacexrpl.html#a93d915cc3f2d1c8d8c014f1402ce1645">tfClearDeepFreeze</a>));</div>
<div class="line"><a id="l01733" name="l01733"></a><span class="lineno"> 1733</span> };</div>
<div class="line"><a id="l01734" name="l01734"></a><span class="lineno"> 1734</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/tuple/make_tuple.html">std::make_tuple</a>(<a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367aeb479605271a1f0ffff9d87f2cab0b75">freeze</a>, deepfreeze, unfreeze, <a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8045adcdb81ee941eb2f36fe5f1e4c8c">tecFROZEN</a>);</div>
<div class="line"><a id="l01735" name="l01735"></a><span class="lineno"> 1735</span> }</div>
<div class="line"><a id="l01736" name="l01736"></a><span class="lineno"> 1736</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01737" name="l01737"></a><span class="lineno"> 1737</span> {</div>
<div class="line"><a id="l01738" name="l01738"></a><span class="lineno"> 1738</span> <span class="keyword">auto</span> <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367aeb479605271a1f0ffff9d87f2cab0b75">freeze</a> = [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; holder) {</div>
<div class="line"><a id="l01739" name="l01739"></a><span class="lineno"> 1739</span> mptt.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a1991c39ac5c5bd21f7bb3736b811f14f">set</a>({.account = issuer, .holder = holder, .flags = <a class="code hl_variable" href="namespacexrpl.html#a91fd197c1aed397d38e1ed3bde3a2d33">tfMPTLock</a>});</div>
<div class="line"><a id="l01740" name="l01740"></a><span class="lineno"> 1740</span> };</div>
<div class="line"><a id="l01741" name="l01741"></a><span class="lineno"> 1741</span> <span class="keyword">auto</span> unfreeze = [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; holder) {</div>
<div class="line"><a id="l01742" name="l01742"></a><span class="lineno"> 1742</span> mptt.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a1991c39ac5c5bd21f7bb3736b811f14f">set</a>({.account = issuer, .holder = holder, .flags = <a class="code hl_variable" href="namespacexrpl.html#a65485546d5dd32422663a8d1bcf86c56">tfMPTUnlock</a>});</div>
<div class="line"><a id="l01743" name="l01743"></a><span class="lineno"> 1743</span> };</div>
<div class="line"><a id="l01744" name="l01744"></a><span class="lineno"> 1744</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/tuple/make_tuple.html">std::make_tuple</a>(<a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367aeb479605271a1f0ffff9d87f2cab0b75">freeze</a>, empty, unfreeze, <a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba1bd3879321f2df7d9e918c80dfd5e885">tecLOCKED</a>);</div>
<div class="line"><a id="l01745" name="l01745"></a><span class="lineno"> 1745</span> }</div>
<div class="line"><a id="l01746" name="l01746"></a><span class="lineno"> 1746</span> }();</div>
<div class="line"><a id="l01747" name="l01747"></a><span class="lineno"> 1747</span> </div>
<div class="line"><a id="l01748" name="l01748"></a><span class="lineno"> 1748</span> <span class="comment">// Try freezing the accounts that can&#39;t be frozen</span></div>
<div class="line"><a id="l01749" name="l01749"></a><span class="lineno"> 1749</span> <span class="keywordflow">if</span> (<a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367aeb479605271a1f0ffff9d87f2cab0b75">freeze</a>)</div>
<div class="line"><a id="l01750" name="l01750"></a><span class="lineno"> 1750</span> {</div>
<div class="line"><a id="l01751" name="l01751"></a><span class="lineno"> 1751</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; account : {vaultPseudo, evan})</div>
<div class="line"><a id="l01752" name="l01752"></a><span class="lineno"> 1752</span> {</div>
<div class="line"><a id="l01753" name="l01753"></a><span class="lineno"> 1753</span> <span class="comment">// Freeze the account</span></div>
<div class="line"><a id="l01754" name="l01754"></a><span class="lineno"> 1754</span> <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367aeb479605271a1f0ffff9d87f2cab0b75">freeze</a>(account);</div>
<div class="line"><a id="l01755" name="l01755"></a><span class="lineno"> 1755</span> </div>
<div class="line"><a id="l01756" name="l01756"></a><span class="lineno"> 1756</span> <span class="comment">// Try to create a loan with a frozen line</span></div>
<div class="line"><a id="l01757" name="l01757"></a><span class="lineno"> 1757</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest),</div>
<div class="line"><a id="l01758" name="l01758"></a><span class="lineno"> 1758</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01759" name="l01759"></a><span class="lineno"> 1759</span> loanSetFee,</div>
<div class="line"><a id="l01760" name="l01760"></a><span class="lineno"> 1760</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(expectedResult));</div>
<div class="line"><a id="l01761" name="l01761"></a><span class="lineno"> 1761</span> </div>
<div class="line"><a id="l01762" name="l01762"></a><span class="lineno"> 1762</span> <span class="comment">// Unfreeze the account</span></div>
<div class="line"><a id="l01763" name="l01763"></a><span class="lineno"> 1763</span> BEAST_EXPECT(unfreeze);</div>
<div class="line"><a id="l01764" name="l01764"></a><span class="lineno"> 1764</span> unfreeze(account);</div>
<div class="line"><a id="l01765" name="l01765"></a><span class="lineno"> 1765</span> </div>
<div class="line"><a id="l01766" name="l01766"></a><span class="lineno"> 1766</span> <span class="comment">// Ensure the line is unfrozen with a request that is fine</span></div>
<div class="line"><a id="l01767" name="l01767"></a><span class="lineno"> 1767</span> <span class="comment">// except too it requests more principal than the broker can</span></div>
<div class="line"><a id="l01768" name="l01768"></a><span class="lineno"> 1768</span> <span class="comment">// carry</span></div>
<div class="line"><a id="l01769" name="l01769"></a><span class="lineno"> 1769</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest + 1),</div>
<div class="line"><a id="l01770" name="l01770"></a><span class="lineno"> 1770</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01771" name="l01771"></a><span class="lineno"> 1771</span> loanSetFee,</div>
<div class="line"><a id="l01772" name="l01772"></a><span class="lineno"> 1772</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae42e73dd030a94b926594ff177bb6c90">tecLIMIT_EXCEEDED</a>));</div>
<div class="line"><a id="l01773" name="l01773"></a><span class="lineno"> 1773</span> }</div>
<div class="line"><a id="l01774" name="l01774"></a><span class="lineno"> 1774</span> }</div>
<div class="line"><a id="l01775" name="l01775"></a><span class="lineno"> 1775</span> </div>
<div class="line"><a id="l01776" name="l01776"></a><span class="lineno"> 1776</span> <span class="comment">// Deep freeze the borrower, which prevents them from receiving</span></div>
<div class="line"><a id="l01777" name="l01777"></a><span class="lineno"> 1777</span> <span class="comment">// funds</span></div>
<div class="line"><a id="l01778" name="l01778"></a><span class="lineno"> 1778</span> <span class="keywordflow">if</span> (deepfreeze)</div>
<div class="line"><a id="l01779" name="l01779"></a><span class="lineno"> 1779</span> {</div>
<div class="line"><a id="l01780" name="l01780"></a><span class="lineno"> 1780</span> <span class="comment">// Make sure evan has a trust line that so the issuer can</span></div>
<div class="line"><a id="l01781" name="l01781"></a><span class="lineno"> 1781</span> <span class="comment">// freeze it. (Don&#39;t need to do this for the borrower,</span></div>
<div class="line"><a id="l01782" name="l01782"></a><span class="lineno"> 1782</span> <span class="comment">// because LoanSet will create a line to the borrower</span></div>
<div class="line"><a id="l01783" name="l01783"></a><span class="lineno"> 1783</span> <span class="comment">// automatically.)</span></div>
<div class="line"><a id="l01784" name="l01784"></a><span class="lineno"> 1784</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(evan, issuer[<a class="code hl_variable" href="classxrpl_1_1test_1_1Loan__test.html#a0e7045b5ac0a07c23a631dd911475b6b">iouCurrency</a>](100&#39;000)));</div>
<div class="line"><a id="l01785" name="l01785"></a><span class="lineno"> 1785</span> </div>
<div class="line"><a id="l01786" name="l01786"></a><span class="lineno"> 1786</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; account : {<span class="comment">// these accounts can&#39;t be frozen, which deep freeze</span></div>
<div class="line"><a id="l01787" name="l01787"></a><span class="lineno"> 1787</span> <span class="comment">// implies</span></div>
<div class="line"><a id="l01788" name="l01788"></a><span class="lineno"> 1788</span> vaultPseudo,</div>
<div class="line"><a id="l01789" name="l01789"></a><span class="lineno"> 1789</span> evan,</div>
<div class="line"><a id="l01790" name="l01790"></a><span class="lineno"> 1790</span> <span class="comment">// these accounts can&#39;t be deep frozen</span></div>
<div class="line"><a id="l01791" name="l01791"></a><span class="lineno"> 1791</span> lender})</div>
<div class="line"><a id="l01792" name="l01792"></a><span class="lineno"> 1792</span> {</div>
<div class="line"><a id="l01793" name="l01793"></a><span class="lineno"> 1793</span> <span class="comment">// Freeze evan</span></div>
<div class="line"><a id="l01794" name="l01794"></a><span class="lineno"> 1794</span> deepfreeze(account);</div>
<div class="line"><a id="l01795" name="l01795"></a><span class="lineno"> 1795</span> </div>
<div class="line"><a id="l01796" name="l01796"></a><span class="lineno"> 1796</span> <span class="comment">// Try to create a loan with a deep frozen line</span></div>
<div class="line"><a id="l01797" name="l01797"></a><span class="lineno"> 1797</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest),</div>
<div class="line"><a id="l01798" name="l01798"></a><span class="lineno"> 1798</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01799" name="l01799"></a><span class="lineno"> 1799</span> loanSetFee,</div>
<div class="line"><a id="l01800" name="l01800"></a><span class="lineno"> 1800</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(expectedResult));</div>
<div class="line"><a id="l01801" name="l01801"></a><span class="lineno"> 1801</span> </div>
<div class="line"><a id="l01802" name="l01802"></a><span class="lineno"> 1802</span> <span class="comment">// Unfreeze evan</span></div>
<div class="line"><a id="l01803" name="l01803"></a><span class="lineno"> 1803</span> BEAST_EXPECT(unfreeze);</div>
<div class="line"><a id="l01804" name="l01804"></a><span class="lineno"> 1804</span> unfreeze(account);</div>
<div class="line"><a id="l01805" name="l01805"></a><span class="lineno"> 1805</span> </div>
<div class="line"><a id="l01806" name="l01806"></a><span class="lineno"> 1806</span> <span class="comment">// Ensure the line is unfrozen with a request that is fine</span></div>
<div class="line"><a id="l01807" name="l01807"></a><span class="lineno"> 1807</span> <span class="comment">// except too it requests more principal than the broker can</span></div>
<div class="line"><a id="l01808" name="l01808"></a><span class="lineno"> 1808</span> <span class="comment">// carry</span></div>
<div class="line"><a id="l01809" name="l01809"></a><span class="lineno"> 1809</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(evan, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest + 1),</div>
<div class="line"><a id="l01810" name="l01810"></a><span class="lineno"> 1810</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l01811" name="l01811"></a><span class="lineno"> 1811</span> loanSetFee,</div>
<div class="line"><a id="l01812" name="l01812"></a><span class="lineno"> 1812</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae42e73dd030a94b926594ff177bb6c90">tecLIMIT_EXCEEDED</a>));</div>
<div class="line"><a id="l01813" name="l01813"></a><span class="lineno"> 1813</span> }</div>
<div class="line"><a id="l01814" name="l01814"></a><span class="lineno"> 1814</span> }</div>
<div class="line"><a id="l01815" name="l01815"></a><span class="lineno"> 1815</span> }</div>
<div class="line"><a id="l01816" name="l01816"></a><span class="lineno"> 1816</span> </div>
<div class="line"><a id="l01817" name="l01817"></a><span class="lineno"> 1817</span> <span class="comment">// Finally! Create a loan</span></div>
<div class="line"><a id="l01818" name="l01818"></a><span class="lineno"> 1818</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> testData;</div>
<div class="line"><a id="l01819" name="l01819"></a><span class="lineno"> 1819</span> </div>
<div class="line"><a id="l01820" name="l01820"></a><span class="lineno"> 1820</span> <span class="keyword">auto</span> coverAvailable = [&amp;env, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; brokerID, <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; expected) {</div>
<div class="line"><a id="l01821" name="l01821"></a><span class="lineno"> 1821</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(brokerID)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l01822" name="l01822"></a><span class="lineno"> 1822</span> {</div>
<div class="line"><a id="l01823" name="l01823"></a><span class="lineno"> 1823</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_enumvalue" href="namespacexrpl.html#a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb">available</a> = brokerSle-&gt;<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/at.html">at</a>(sfCoverAvailable);</div>
<div class="line"><a id="l01824" name="l01824"></a><span class="lineno"> 1824</span> BEAST_EXPECT(<a class="code hl_enumvalue" href="namespacexrpl.html#a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb">available</a> == expected);</div>
<div class="line"><a id="l01825" name="l01825"></a><span class="lineno"> 1825</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespacexrpl.html#a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb">available</a>;</div>
<div class="line"><a id="l01826" name="l01826"></a><span class="lineno"> 1826</span> }</div>
<div class="line"><a id="l01827" name="l01827"></a><span class="lineno"> 1827</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{};</div>
<div class="line"><a id="l01828" name="l01828"></a><span class="lineno"> 1828</span> };</div>
<div class="line"><a id="l01829" name="l01829"></a><span class="lineno"> 1829</span> <span class="keyword">auto</span> getDefaultInfo = [&amp;env, <span class="keyword">this</span>](<a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html">LoanState</a> <span class="keyword">const</span>&amp; state, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker) {</div>
<div class="line"><a id="l01830" name="l01830"></a><span class="lineno"> 1830</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l01831" name="l01831"></a><span class="lineno"> 1831</span> {</div>
<div class="line"><a id="l01832" name="l01832"></a><span class="lineno"> 1832</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01833" name="l01833"></a><span class="lineno"> 1833</span> state.loanScale &gt;= (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a4d74996b3b3f23322e00b032c8c35baa">integral</a>()</div>
<div class="line"><a id="l01834" name="l01834"></a><span class="lineno"> 1834</span> ? 0</div>
<div class="line"><a id="l01835" name="l01835"></a><span class="lineno"> 1835</span> : <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(broker.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa9703000ec9d3519149be135245c57f2">vaultScale</a>(env), state.principalOutstanding.exponent())));</div>
<div class="line"><a id="l01836" name="l01836"></a><span class="lineno"> 1836</span> <a class="code hl_class" href="classxrpl_1_1NumberRoundModeGuard.html">NumberRoundModeGuard</a> mg(<a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>);</div>
<div class="line"><a id="l01837" name="l01837"></a><span class="lineno"> 1837</span> <span class="keyword">auto</span> <span class="keyword">const</span> defaultAmount = <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(</div>
<div class="line"><a id="l01838" name="l01838"></a><span class="lineno"> 1838</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>,</div>
<div class="line"><a id="l01839" name="l01839"></a><span class="lineno"> 1839</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(</div>
<div class="line"><a id="l01840" name="l01840"></a><span class="lineno"> 1840</span> <a class="code hl_function" href="namespacexrpl.html#a3f56d997a36633a10ca0f17c86113f56">tenthBipsOfValue</a>(</div>
<div class="line"><a id="l01841" name="l01841"></a><span class="lineno"> 1841</span> <a class="code hl_function" href="namespacexrpl.html#a3f56d997a36633a10ca0f17c86113f56">tenthBipsOfValue</a>(brokerSle-&gt;at(sfDebtTotal), broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#afd23bc194671b792907026345c880e4a">coverRateMin</a>),</div>
<div class="line"><a id="l01842" name="l01842"></a><span class="lineno"> 1842</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a864cdf9099cbadba6b525029eedeb41e">coverRateLiquidation</a>),</div>
<div class="line"><a id="l01843" name="l01843"></a><span class="lineno"> 1843</span> state.totalValue - state.managementFeeOutstanding),</div>
<div class="line"><a id="l01844" name="l01844"></a><span class="lineno"> 1844</span> state.loanScale);</div>
<div class="line"><a id="l01845" name="l01845"></a><span class="lineno"> 1845</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(defaultAmount, brokerSle-&gt;at(sfOwner));</div>
<div class="line"><a id="l01846" name="l01846"></a><span class="lineno"> 1846</span> }</div>
<div class="line"><a id="l01847" name="l01847"></a><span class="lineno"> 1847</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a>(<a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{}, <a class="code hl_class" href="classxrpl_1_1base__uint.html">AccountID</a>{});</div>
<div class="line"><a id="l01848" name="l01848"></a><span class="lineno"> 1848</span> };</div>
<div class="line"><a id="l01849" name="l01849"></a><span class="lineno"> 1849</span> <span class="keyword">auto</span> replenishCover = [&amp;env, &amp;coverAvailable](</div>
<div class="line"><a id="l01850" name="l01850"></a><span class="lineno"> 1850</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker,</div>
<div class="line"><a id="l01851" name="l01851"></a><span class="lineno"> 1851</span> <a class="code hl_class" href="classxrpl_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; brokerAcct,</div>
<div class="line"><a id="l01852" name="l01852"></a><span class="lineno"> 1852</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; startingCoverAvailable,</div>
<div class="line"><a id="l01853" name="l01853"></a><span class="lineno"> 1853</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; amountToBeCovered) {</div>
<div class="line"><a id="l01854" name="l01854"></a><span class="lineno"> 1854</span> coverAvailable(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, startingCoverAvailable - amountToBeCovered);</div>
<div class="line"><a id="l01855" name="l01855"></a><span class="lineno"> 1855</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a18c6e7172f76ece96bfb3797855ed4d3">loanBroker::coverDeposit</a>(brokerAcct, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, amountToBeCovered}));</div>
<div class="line"><a id="l01856" name="l01856"></a><span class="lineno"> 1856</span> coverAvailable(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, startingCoverAvailable);</div>
<div class="line"><a id="l01857" name="l01857"></a><span class="lineno"> 1857</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l01858" name="l01858"></a><span class="lineno"> 1858</span> };</div>
<div class="line"><a id="l01859" name="l01859"></a><span class="lineno"> 1859</span> </div>
<div class="line"><a id="l01860" name="l01860"></a><span class="lineno"> 1860</span> <span class="keyword">auto</span> defaultImmediately = [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> baseFlag, <span class="keywordtype">bool</span> impair = <span class="keyword">true</span>) {</div>
<div class="line"><a id="l01861" name="l01861"></a><span class="lineno"> 1861</span> <span class="keywordflow">return</span> [&amp;, impair, baseFlag](<a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; loanKeylet, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> <span class="keyword">const</span>&amp; verifyLoanStatus) {</div>
<div class="line"><a id="l01862" name="l01862"></a><span class="lineno"> 1862</span> <span class="comment">// toEndOfLife</span></div>
<div class="line"><a id="l01863" name="l01863"></a><span class="lineno"> 1863</span> <span class="comment">//</span></div>
<div class="line"><a id="l01864" name="l01864"></a><span class="lineno"> 1864</span> <span class="comment">// Default the loan</span></div>
<div class="line"><a id="l01865" name="l01865"></a><span class="lineno"> 1865</span> </div>
<div class="line"><a id="l01866" name="l01866"></a><span class="lineno"> 1866</span> <span class="comment">// Initialize values with the current state</span></div>
<div class="line"><a id="l01867" name="l01867"></a><span class="lineno"> 1867</span> <span class="keyword">auto</span> state = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">getCurrentState</a>(env, broker, loanKeylet, verifyLoanStatus);</div>
<div class="line"><a id="l01868" name="l01868"></a><span class="lineno"> 1868</span> BEAST_EXPECT(state.flags == baseFlag);</div>
<div class="line"><a id="l01869" name="l01869"></a><span class="lineno"> 1869</span> </div>
<div class="line"><a id="l01870" name="l01870"></a><span class="lineno"> 1870</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; broker = verifyLoanStatus.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">broker</a>;</div>
<div class="line"><a id="l01871" name="l01871"></a><span class="lineno"> 1871</span> <span class="keyword">auto</span> <span class="keyword">const</span> startingCoverAvailable =</div>
<div class="line"><a id="l01872" name="l01872"></a><span class="lineno"> 1872</span> coverAvailable(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a329bf5a8059bcca800bdca04ca187f6c">coverDeposit</a>).number());</div>
<div class="line"><a id="l01873" name="l01873"></a><span class="lineno"> 1873</span> </div>
<div class="line"><a id="l01874" name="l01874"></a><span class="lineno"> 1874</span> <span class="keywordflow">if</span> (impair)</div>
<div class="line"><a id="l01875" name="l01875"></a><span class="lineno"> 1875</span> {</div>
<div class="line"><a id="l01876" name="l01876"></a><span class="lineno"> 1876</span> <span class="comment">// Check the vault</span></div>
<div class="line"><a id="l01877" name="l01877"></a><span class="lineno"> 1877</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> canImpair = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a50bd51c59a032921500d206140880f1c">canImpairLoan</a>(env, broker, state);</div>
<div class="line"><a id="l01878" name="l01878"></a><span class="lineno"> 1878</span> <span class="comment">// Impair the loan, if possible</span></div>
<div class="line"><a id="l01879" name="l01879"></a><span class="lineno"> 1879</span> env(manage(lender, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>),</div>
<div class="line"><a id="l01880" name="l01880"></a><span class="lineno"> 1880</span> canImpair ? <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>) : <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae42e73dd030a94b926594ff177bb6c90">tecLIMIT_EXCEEDED</a>));</div>
<div class="line"><a id="l01881" name="l01881"></a><span class="lineno"> 1881</span> </div>
<div class="line"><a id="l01882" name="l01882"></a><span class="lineno"> 1882</span> <span class="keywordflow">if</span> (canImpair)</div>
<div class="line"><a id="l01883" name="l01883"></a><span class="lineno"> 1883</span> {</div>
<div class="line"><a id="l01884" name="l01884"></a><span class="lineno"> 1884</span> state.flags |= <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>;</div>
<div class="line"><a id="l01885" name="l01885"></a><span class="lineno"> 1885</span> state.nextPaymentDate = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#afc1be82a2d1572220adef1b06e2fda54">now</a>().<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch.html">time_since_epoch</a>().count();</div>
<div class="line"><a id="l01886" name="l01886"></a><span class="lineno"> 1886</span> </div>
<div class="line"><a id="l01887" name="l01887"></a><span class="lineno"> 1887</span> <span class="comment">// Once the loan is impaired, it can&#39;t be impaired again</span></div>
<div class="line"><a id="l01888" name="l01888"></a><span class="lineno"> 1888</span> env(manage(lender, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l01889" name="l01889"></a><span class="lineno"> 1889</span> }</div>
<div class="line"><a id="l01890" name="l01890"></a><span class="lineno"> 1890</span> verifyLoanStatus(state);</div>
<div class="line"><a id="l01891" name="l01891"></a><span class="lineno"> 1891</span> }</div>
<div class="line"><a id="l01892" name="l01892"></a><span class="lineno"> 1892</span> </div>
<div class="line"><a id="l01893" name="l01893"></a><span class="lineno"> 1893</span> <span class="keyword">auto</span> <span class="keyword">const</span> nextDueDate = tp{d{state.nextPaymentDate}};</div>
<div class="line"><a id="l01894" name="l01894"></a><span class="lineno"> 1894</span> </div>
<div class="line"><a id="l01895" name="l01895"></a><span class="lineno"> 1895</span> <span class="comment">// Can&#39;t default the loan yet. The grace period hasn&#39;t</span></div>
<div class="line"><a id="l01896" name="l01896"></a><span class="lineno"> 1896</span> <span class="comment">// expired</span></div>
<div class="line"><a id="l01897" name="l01897"></a><span class="lineno"> 1897</span> env(manage(lender, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba7d6f804411ab68ae086c8933e905b96e">tecTOO_SOON</a>));</div>
<div class="line"><a id="l01898" name="l01898"></a><span class="lineno"> 1898</span> </div>
<div class="line"><a id="l01899" name="l01899"></a><span class="lineno"> 1899</span> <span class="comment">// Let some time pass so that the loan can be</span></div>
<div class="line"><a id="l01900" name="l01900"></a><span class="lineno"> 1900</span> <span class="comment">// defaulted</span></div>
<div class="line"><a id="l01901" name="l01901"></a><span class="lineno"> 1901</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>(nextDueDate + 60s);</div>
<div class="line"><a id="l01902" name="l01902"></a><span class="lineno"> 1902</span> </div>
<div class="line"><a id="l01903" name="l01903"></a><span class="lineno"> 1903</span> <span class="keyword">auto</span> <span class="keyword">const</span> [amountToBeCovered, brokerAcct] = getDefaultInfo(state, broker);</div>
<div class="line"><a id="l01904" name="l01904"></a><span class="lineno"> 1904</span> </div>
<div class="line"><a id="l01905" name="l01905"></a><span class="lineno"> 1905</span> <span class="comment">// Default the loan</span></div>
<div class="line"><a id="l01906" name="l01906"></a><span class="lineno"> 1906</span> env(manage(lender, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>));</div>
<div class="line"><a id="l01907" name="l01907"></a><span class="lineno"> 1907</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l01908" name="l01908"></a><span class="lineno"> 1908</span> </div>
<div class="line"><a id="l01909" name="l01909"></a><span class="lineno"> 1909</span> <span class="comment">// The LoanBroker just lost some of it&#39;s first-loss capital.</span></div>
<div class="line"><a id="l01910" name="l01910"></a><span class="lineno"> 1910</span> <span class="comment">// Replenish it.</span></div>
<div class="line"><a id="l01911" name="l01911"></a><span class="lineno"> 1911</span> replenishCover(broker, brokerAcct, startingCoverAvailable, amountToBeCovered);</div>
<div class="line"><a id="l01912" name="l01912"></a><span class="lineno"> 1912</span> </div>
<div class="line"><a id="l01913" name="l01913"></a><span class="lineno"> 1913</span> state.flags |= <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>;</div>
<div class="line"><a id="l01914" name="l01914"></a><span class="lineno"> 1914</span> state.paymentRemaining = 0;</div>
<div class="line"><a id="l01915" name="l01915"></a><span class="lineno"> 1915</span> state.totalValue = 0;</div>
<div class="line"><a id="l01916" name="l01916"></a><span class="lineno"> 1916</span> state.principalOutstanding = 0;</div>
<div class="line"><a id="l01917" name="l01917"></a><span class="lineno"> 1917</span> state.managementFeeOutstanding = 0;</div>
<div class="line"><a id="l01918" name="l01918"></a><span class="lineno"> 1918</span> state.nextPaymentDate = 0;</div>
<div class="line"><a id="l01919" name="l01919"></a><span class="lineno"> 1919</span> verifyLoanStatus(state);</div>
<div class="line"><a id="l01920" name="l01920"></a><span class="lineno"> 1920</span> </div>
<div class="line"><a id="l01921" name="l01921"></a><span class="lineno"> 1921</span> <span class="comment">// Once a loan is defaulted, it can&#39;t be managed</span></div>
<div class="line"><a id="l01922" name="l01922"></a><span class="lineno"> 1922</span> env(manage(lender, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#ad4588a0661e75ea428d88c20f74d102e">tfLoanUnimpair</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l01923" name="l01923"></a><span class="lineno"> 1923</span> env(manage(lender, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l01924" name="l01924"></a><span class="lineno"> 1924</span> <span class="comment">// Can&#39;t make a payment on it either</span></div>
<div class="line"><a id="l01925" name="l01925"></a><span class="lineno"> 1925</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(300)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bad7d421519cd6967c3f800367554f8391">tecKILLED</a>));</div>
<div class="line"><a id="l01926" name="l01926"></a><span class="lineno"> 1926</span> };</div>
<div class="line"><a id="l01927" name="l01927"></a><span class="lineno"> 1927</span> };</div>
<div class="line"><a id="l01928" name="l01928"></a><span class="lineno"> 1928</span> </div>
<div class="line"><a id="l01929" name="l01929"></a><span class="lineno"> 1929</span> <span class="keyword">auto</span> singlePayment = [&amp;](<a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; loanKeylet,</div>
<div class="line"><a id="l01930" name="l01930"></a><span class="lineno"> 1930</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> <span class="keyword">const</span>&amp; verifyLoanStatus,</div>
<div class="line"><a id="l01931" name="l01931"></a><span class="lineno"> 1931</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html">LoanState</a>&amp; state,</div>
<div class="line"><a id="l01932" name="l01932"></a><span class="lineno"> 1932</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; payoffAmount,</div>
<div class="line"><a id="l01933" name="l01933"></a><span class="lineno"> 1933</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> numPayments,</div>
<div class="line"><a id="l01934" name="l01934"></a><span class="lineno"> 1934</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> baseFlag,</div>
<div class="line"><a id="l01935" name="l01935"></a><span class="lineno"> 1935</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> txFlags) {</div>
<div class="line"><a id="l01936" name="l01936"></a><span class="lineno"> 1936</span> <span class="comment">// toEndOfLife</span></div>
<div class="line"><a id="l01937" name="l01937"></a><span class="lineno"> 1937</span> <span class="comment">//</span></div>
<div class="line"><a id="l01938" name="l01938"></a><span class="lineno"> 1938</span> verifyLoanStatus(state);</div>
<div class="line"><a id="l01939" name="l01939"></a><span class="lineno"> 1939</span> </div>
<div class="line"><a id="l01940" name="l01940"></a><span class="lineno"> 1940</span> <span class="comment">// Send some bogus pay transactions</span></div>
<div class="line"><a id="l01941" name="l01941"></a><span class="lineno"> 1941</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(<a class="code hl_typedef" href="namespacexrpl.html#a76c892803711595bd0d3cf6fbedf028a">uint256</a>(0)).key, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(10), txFlags), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l01942" name="l01942"></a><span class="lineno"> 1942</span> <span class="comment">// broker.asset(80) is less than a single payment, but all these</span></div>
<div class="line"><a id="l01943" name="l01943"></a><span class="lineno"> 1943</span> <span class="comment">// checks fail before that matters</span></div>
<div class="line"><a id="l01944" name="l01944"></a><span class="lineno"> 1944</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(-80), txFlags), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6aa9a4c76c9c7d2e1fc83581b9ce4d5152">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l01945" name="l01945"></a><span class="lineno"> 1945</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(80), txFlags), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba348afbc4922cc9b29af76316d5d8a277">tecNO_ENTRY</a>));</div>
<div class="line"><a id="l01946" name="l01946"></a><span class="lineno"> 1946</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(evan, loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(80), txFlags), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l01947" name="l01947"></a><span class="lineno"> 1947</span> </div>
<div class="line"><a id="l01948" name="l01948"></a><span class="lineno"> 1948</span> <span class="comment">// TODO: Write a general &quot;isFlag&quot; function? See STObject::isFlag.</span></div>
<div class="line"><a id="l01949" name="l01949"></a><span class="lineno"> 1949</span> <span class="comment">// Maybe add a static overloaded member?</span></div>
<div class="line"><a id="l01950" name="l01950"></a><span class="lineno"> 1950</span> <span class="keywordflow">if</span> (!(state.flags &amp; <a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a445ecc250b4e81d24d1bf9b1ba9c8455">lsfLoanOverpayment</a>))</div>
<div class="line"><a id="l01951" name="l01951"></a><span class="lineno"> 1951</span> {</div>
<div class="line"><a id="l01952" name="l01952"></a><span class="lineno"> 1952</span> <span class="comment">// If the loan does not allow overpayments, send a payment that</span></div>
<div class="line"><a id="l01953" name="l01953"></a><span class="lineno"> 1953</span> <span class="comment">// tries to make an overpayment. Do not include `txFlags`, so we</span></div>
<div class="line"><a id="l01954" name="l01954"></a><span class="lineno"> 1954</span> <span class="comment">// don&#39;t end up duplicating the next test transaction.</span></div>
<div class="line"><a id="l01955" name="l01955"></a><span class="lineno"> 1955</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower,</div>
<div class="line"><a id="l01956" name="l01956"></a><span class="lineno"> 1956</span> loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>,</div>
<div class="line"><a id="l01957" name="l01957"></a><span class="lineno"> 1957</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, state.periodicPayment * Number{15, -1}},</div>
<div class="line"><a id="l01958" name="l01958"></a><span class="lineno"> 1958</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>),</div>
<div class="line"><a id="l01959" name="l01959"></a><span class="lineno"> 1959</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a>{baseFee * (<a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{15, -1} / loanPaymentsPerFeeIncrement + 1)}),</div>
<div class="line"><a id="l01960" name="l01960"></a><span class="lineno"> 1960</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01961" name="l01961"></a><span class="lineno"> 1961</span> }</div>
<div class="line"><a id="l01962" name="l01962"></a><span class="lineno"> 1962</span> <span class="comment">// Try to send a payment marked as multiple mutually exclusive</span></div>
<div class="line"><a id="l01963" name="l01963"></a><span class="lineno"> 1963</span> <span class="comment">// payment types. Do not include `txFlags`, so we don&#39;t duplicate</span></div>
<div class="line"><a id="l01964" name="l01964"></a><span class="lineno"> 1964</span> <span class="comment">// the prior test transaction.</span></div>
<div class="line"><a id="l01965" name="l01965"></a><span class="lineno"> 1965</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower,</div>
<div class="line"><a id="l01966" name="l01966"></a><span class="lineno"> 1966</span> loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>,</div>
<div class="line"><a id="l01967" name="l01967"></a><span class="lineno"> 1967</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(state.periodicPayment * 2),</div>
<div class="line"><a id="l01968" name="l01968"></a><span class="lineno"> 1968</span> <a class="code hl_variable" href="namespacexrpl.html#ac4c8f81ffaeaede92aec26c81003c8e5">tfLoanLatePayment</a> | <a class="code hl_variable" href="namespacexrpl.html#a502d13801f614009c077389a8809a70a">tfLoanFullPayment</a>),</div>
<div class="line"><a id="l01969" name="l01969"></a><span class="lineno"> 1969</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01970" name="l01970"></a><span class="lineno"> 1970</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower,</div>
<div class="line"><a id="l01971" name="l01971"></a><span class="lineno"> 1971</span> loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>,</div>
<div class="line"><a id="l01972" name="l01972"></a><span class="lineno"> 1972</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(state.periodicPayment * 2),</div>
<div class="line"><a id="l01973" name="l01973"></a><span class="lineno"> 1973</span> <a class="code hl_variable" href="namespacexrpl.html#ac4c8f81ffaeaede92aec26c81003c8e5">tfLoanLatePayment</a> | <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>),</div>
<div class="line"><a id="l01974" name="l01974"></a><span class="lineno"> 1974</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01975" name="l01975"></a><span class="lineno"> 1975</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower,</div>
<div class="line"><a id="l01976" name="l01976"></a><span class="lineno"> 1976</span> loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>,</div>
<div class="line"><a id="l01977" name="l01977"></a><span class="lineno"> 1977</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(state.periodicPayment * 2),</div>
<div class="line"><a id="l01978" name="l01978"></a><span class="lineno"> 1978</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a> | <a class="code hl_variable" href="namespacexrpl.html#a502d13801f614009c077389a8809a70a">tfLoanFullPayment</a>),</div>
<div class="line"><a id="l01979" name="l01979"></a><span class="lineno"> 1979</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01980" name="l01980"></a><span class="lineno"> 1980</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower,</div>
<div class="line"><a id="l01981" name="l01981"></a><span class="lineno"> 1981</span> loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>,</div>
<div class="line"><a id="l01982" name="l01982"></a><span class="lineno"> 1982</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(state.periodicPayment * 2),</div>
<div class="line"><a id="l01983" name="l01983"></a><span class="lineno"> 1983</span> <a class="code hl_variable" href="namespacexrpl.html#ac4c8f81ffaeaede92aec26c81003c8e5">tfLoanLatePayment</a> | <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a> | <a class="code hl_variable" href="namespacexrpl.html#a502d13801f614009c077389a8809a70a">tfLoanFullPayment</a>),</div>
<div class="line"><a id="l01984" name="l01984"></a><span class="lineno"> 1984</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">temINVALID_FLAG</a>));</div>
<div class="line"><a id="l01985" name="l01985"></a><span class="lineno"> 1985</span> </div>
<div class="line"><a id="l01986" name="l01986"></a><span class="lineno"> 1986</span> {</div>
<div class="line"><a id="l01987" name="l01987"></a><span class="lineno"> 1987</span> <span class="keyword">auto</span> <span class="keyword">const</span> otherAsset = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac5538be33495f6fdd3cd03177b25decf">raw</a>() == assets[0].raw() ? assets[1] : assets[0];</div>
<div class="line"><a id="l01988" name="l01988"></a><span class="lineno"> 1988</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, otherAsset(100), txFlags), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba1957d1d9fc2b8195c8717cd9b85ce5e3">tecWRONG_ASSET</a>));</div>
<div class="line"><a id="l01989" name="l01989"></a><span class="lineno"> 1989</span> }</div>
<div class="line"><a id="l01990" name="l01990"></a><span class="lineno"> 1990</span> </div>
<div class="line"><a id="l01991" name="l01991"></a><span class="lineno"> 1991</span> <span class="comment">// Amount doesn&#39;t cover a single payment</span></div>
<div class="line"><a id="l01992" name="l01992"></a><span class="lineno"> 1992</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, 1}, txFlags), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556baffcaa48f78bf349ec4434b2351577362">tecINSUFFICIENT_PAYMENT</a>));</div>
<div class="line"><a id="l01993" name="l01993"></a><span class="lineno"> 1993</span> </div>
<div class="line"><a id="l01994" name="l01994"></a><span class="lineno"> 1994</span> <span class="comment">// Get the balance after these failed transactions take</span></div>
<div class="line"><a id="l01995" name="l01995"></a><span class="lineno"> 1995</span> <span class="comment">// fees</span></div>
<div class="line"><a id="l01996" name="l01996"></a><span class="lineno"> 1996</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerBalanceBeforePayment = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>);</div>
<div class="line"><a id="l01997" name="l01997"></a><span class="lineno"> 1997</span> </div>
<div class="line"><a id="l01998" name="l01998"></a><span class="lineno"> 1998</span> BEAST_EXPECT(payoffAmount &gt; state.principalOutstanding);</div>
<div class="line"><a id="l01999" name="l01999"></a><span class="lineno"> 1999</span> <span class="comment">// Try to pay a little extra to show that it&#39;s _not_</span></div>
<div class="line"><a id="l02000" name="l02000"></a><span class="lineno"> 2000</span> <span class="comment">// taken</span></div>
<div class="line"><a id="l02001" name="l02001"></a><span class="lineno"> 2001</span> <span class="keyword">auto</span> <span class="keyword">const</span> transactionAmount = payoffAmount + broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(10);</div>
<div class="line"><a id="l02002" name="l02002"></a><span class="lineno"> 2002</span> </div>
<div class="line"><a id="l02003" name="l02003"></a><span class="lineno"> 2003</span> <span class="comment">// Send a transaction that tries to pay more than the borrowers&#39;s</span></div>
<div class="line"><a id="l02004" name="l02004"></a><span class="lineno"> 2004</span> <span class="comment">// balance</span></div>
<div class="line"><a id="l02005" name="l02005"></a><span class="lineno"> 2005</span> <a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a> <span class="keyword">const</span> badFee{</div>
<div class="line"><a id="l02006" name="l02006"></a><span class="lineno"> 2006</span> baseFee *</div>
<div class="line"><a id="l02007" name="l02007"></a><span class="lineno"> 2007</span> (borrowerBalanceBeforePayment.number() * 2 / state.periodicPayment / loanPaymentsPerFeeIncrement + 1)};</div>
<div class="line"><a id="l02008" name="l02008"></a><span class="lineno"> 2008</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower,</div>
<div class="line"><a id="l02009" name="l02009"></a><span class="lineno"> 2009</span> loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>,</div>
<div class="line"><a id="l02010" name="l02010"></a><span class="lineno"> 2010</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, borrowerBalanceBeforePayment.number() * 2},</div>
<div class="line"><a id="l02011" name="l02011"></a><span class="lineno"> 2011</span> txFlags),</div>
<div class="line"><a id="l02012" name="l02012"></a><span class="lineno"> 2012</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(badFee),</div>
<div class="line"><a id="l02013" name="l02013"></a><span class="lineno"> 2013</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8479260fa4500bef887fa8e8c9f3c624">tecINSUFFICIENT_FUNDS</a>));</div>
<div class="line"><a id="l02014" name="l02014"></a><span class="lineno"> 2014</span> </div>
<div class="line"><a id="l02015" name="l02015"></a><span class="lineno"> 2015</span> <a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a> <span class="keyword">const</span> goodFee{baseFee * (numPayments / loanPaymentsPerFeeIncrement + 1)};</div>
<div class="line"><a id="l02016" name="l02016"></a><span class="lineno"> 2016</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, transactionAmount, txFlags), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(goodFee));</div>
<div class="line"><a id="l02017" name="l02017"></a><span class="lineno"> 2017</span> </div>
<div class="line"><a id="l02018" name="l02018"></a><span class="lineno"> 2018</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02019" name="l02019"></a><span class="lineno"> 2019</span> </div>
<div class="line"><a id="l02020" name="l02020"></a><span class="lineno"> 2020</span> <span class="comment">// log &lt;&lt; env.meta()-&gt;getJson() &lt;&lt; std::endl;</span></div>
<div class="line"><a id="l02021" name="l02021"></a><span class="lineno"> 2021</span> </div>
<div class="line"><a id="l02022" name="l02022"></a><span class="lineno"> 2022</span> <span class="comment">// Need to account for fees if the loan is in XRP</span></div>
<div class="line"><a id="l02023" name="l02023"></a><span class="lineno"> 2023</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html">PrettyAmount</a> adjustment = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(0);</div>
<div class="line"><a id="l02024" name="l02024"></a><span class="lineno"> 2024</span> <span class="keywordflow">if</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>())</div>
<div class="line"><a id="l02025" name="l02025"></a><span class="lineno"> 2025</span> {</div>
<div class="line"><a id="l02026" name="l02026"></a><span class="lineno"> 2026</span> adjustment = badFee + goodFee;</div>
<div class="line"><a id="l02027" name="l02027"></a><span class="lineno"> 2027</span> }</div>
<div class="line"><a id="l02028" name="l02028"></a><span class="lineno"> 2028</span> </div>
<div class="line"><a id="l02029" name="l02029"></a><span class="lineno"> 2029</span> state.paymentRemaining = 0;</div>
<div class="line"><a id="l02030" name="l02030"></a><span class="lineno"> 2030</span> state.principalOutstanding = 0;</div>
<div class="line"><a id="l02031" name="l02031"></a><span class="lineno"> 2031</span> state.totalValue = 0;</div>
<div class="line"><a id="l02032" name="l02032"></a><span class="lineno"> 2032</span> state.managementFeeOutstanding = 0;</div>
<div class="line"><a id="l02033" name="l02033"></a><span class="lineno"> 2033</span> state.previousPaymentDate = state.nextPaymentDate + state.paymentInterval * (numPayments - 1);</div>
<div class="line"><a id="l02034" name="l02034"></a><span class="lineno"> 2034</span> state.nextPaymentDate = 0;</div>
<div class="line"><a id="l02035" name="l02035"></a><span class="lineno"> 2035</span> verifyLoanStatus(state);</div>
<div class="line"><a id="l02036" name="l02036"></a><span class="lineno"> 2036</span> </div>
<div class="line"><a id="l02037" name="l02037"></a><span class="lineno"> 2037</span> verifyLoanStatus.checkPayment(</div>
<div class="line"><a id="l02038" name="l02038"></a><span class="lineno"> 2038</span> state.loanScale, borrower, borrowerBalanceBeforePayment, payoffAmount, adjustment);</div>
<div class="line"><a id="l02039" name="l02039"></a><span class="lineno"> 2039</span> </div>
<div class="line"><a id="l02040" name="l02040"></a><span class="lineno"> 2040</span> <span class="comment">// Can&#39;t impair or default a paid off loan</span></div>
<div class="line"><a id="l02041" name="l02041"></a><span class="lineno"> 2041</span> env(manage(lender, loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l02042" name="l02042"></a><span class="lineno"> 2042</span> env(manage(lender, loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l02043" name="l02043"></a><span class="lineno"> 2043</span> };</div>
<div class="line"><a id="l02044" name="l02044"></a><span class="lineno"> 2044</span> </div>
<div class="line"><a id="l02045" name="l02045"></a><span class="lineno"> 2045</span> <span class="keyword">auto</span> fullPayment = [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> baseFlag) {</div>
<div class="line"><a id="l02046" name="l02046"></a><span class="lineno"> 2046</span> <span class="keywordflow">return</span> [&amp;, baseFlag](<a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; loanKeylet, VerifyLoanStatus <span class="keyword">const</span>&amp; verifyLoanStatus) {</div>
<div class="line"><a id="l02047" name="l02047"></a><span class="lineno"> 2047</span> <span class="comment">// toEndOfLife</span></div>
<div class="line"><a id="l02048" name="l02048"></a><span class="lineno"> 2048</span> <span class="comment">//</span></div>
<div class="line"><a id="l02049" name="l02049"></a><span class="lineno"> 2049</span> <span class="keyword">auto</span> state = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">getCurrentState</a>(env, broker, loanKeylet, verifyLoanStatus);</div>
<div class="line"><a id="l02050" name="l02050"></a><span class="lineno"> 2050</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>(state.startDate + 20s);</div>
<div class="line"><a id="l02051" name="l02051"></a><span class="lineno"> 2051</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanAge = (env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#afc1be82a2d1572220adef1b06e2fda54">now</a>() - state.startDate).count();</div>
<div class="line"><a id="l02052" name="l02052"></a><span class="lineno"> 2052</span> BEAST_EXPECT(loanAge == 30);</div>
<div class="line"><a id="l02053" name="l02053"></a><span class="lineno"> 2053</span> </div>
<div class="line"><a id="l02054" name="l02054"></a><span class="lineno"> 2054</span> <span class="comment">// Full payoff amount will consist of</span></div>
<div class="line"><a id="l02055" name="l02055"></a><span class="lineno"> 2055</span> <span class="comment">// 1. principal outstanding (1000)</span></div>
<div class="line"><a id="l02056" name="l02056"></a><span class="lineno"> 2056</span> <span class="comment">// 2. accrued interest (at 12%)</span></div>
<div class="line"><a id="l02057" name="l02057"></a><span class="lineno"> 2057</span> <span class="comment">// 3. prepayment penalty (closeInterest at 3.6%)</span></div>
<div class="line"><a id="l02058" name="l02058"></a><span class="lineno"> 2058</span> <span class="comment">// 4. close payment fee (4)</span></div>
<div class="line"><a id="l02059" name="l02059"></a><span class="lineno"> 2059</span> <span class="comment">// Calculate these values without the helper functions</span></div>
<div class="line"><a id="l02060" name="l02060"></a><span class="lineno"> 2060</span> <span class="comment">// to verify they&#39;re working correctly The numbers in</span></div>
<div class="line"><a id="l02061" name="l02061"></a><span class="lineno"> 2061</span> <span class="comment">// the below BEAST_EXPECTs may not hold across assets.</span></div>
<div class="line"><a id="l02062" name="l02062"></a><span class="lineno"> 2062</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> interval = state.paymentInterval;</div>
<div class="line"><a id="l02063" name="l02063"></a><span class="lineno"> 2063</span> <span class="keyword">auto</span> <span class="keyword">const</span> periodicRate = interval * <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(12, -2) / <a class="code hl_variable" href="namespacexrpl.html#a51ae455751dbb43d284de10584418214">secondsInYear</a>;</div>
<div class="line"><a id="l02064" name="l02064"></a><span class="lineno"> 2064</span> BEAST_EXPECT(periodicRate == <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(2283105022831050228ULL, -24, <a class="code hl_struct" href="structxrpl_1_1Number_1_1normalized.html">Number::normalized</a>{}));</div>
<div class="line"><a id="l02065" name="l02065"></a><span class="lineno"> 2065</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> principalOutstanding{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, state.principalOutstanding};</div>
<div class="line"><a id="l02066" name="l02066"></a><span class="lineno"> 2066</span> STAmount <span class="keyword">const</span> accruedInterest{</div>
<div class="line"><a id="l02067" name="l02067"></a><span class="lineno"> 2067</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, state.principalOutstanding * periodicRate * loanAge / interval};</div>
<div class="line"><a id="l02068" name="l02068"></a><span class="lineno"> 2068</span> BEAST_EXPECT(accruedInterest == broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(Number(1141552511415525, -19)));</div>
<div class="line"><a id="l02069" name="l02069"></a><span class="lineno"> 2069</span> STAmount <span class="keyword">const</span> prepaymentPenalty{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, state.principalOutstanding * Number(36, -3)};</div>
<div class="line"><a id="l02070" name="l02070"></a><span class="lineno"> 2070</span> BEAST_EXPECT(prepaymentPenalty == broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(36));</div>
<div class="line"><a id="l02071" name="l02071"></a><span class="lineno"> 2071</span> STAmount <span class="keyword">const</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#aaf4a3d6848cb7ccce6a91e48ba420d87">closePaymentFee</a> = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(4);</div>
<div class="line"><a id="l02072" name="l02072"></a><span class="lineno"> 2072</span> <span class="keyword">auto</span> <span class="keyword">const</span> payoffAmount = <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(</div>
<div class="line"><a id="l02073" name="l02073"></a><span class="lineno"> 2073</span> principalOutstanding + accruedInterest + prepaymentPenalty + closePaymentFee, state.loanScale);</div>
<div class="line"><a id="l02074" name="l02074"></a><span class="lineno"> 2074</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02075" name="l02075"></a><span class="lineno"> 2075</span> payoffAmount ==</div>
<div class="line"><a id="l02076" name="l02076"></a><span class="lineno"> 2076</span> <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(Number(1040000114155251, -12)).<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a5e9aefba81df96566550cb03ccee33ed">number</a>(), state.loanScale));</div>
<div class="line"><a id="l02077" name="l02077"></a><span class="lineno"> 2077</span> </div>
<div class="line"><a id="l02078" name="l02078"></a><span class="lineno"> 2078</span> <span class="comment">// The terms of this loan actually make the early payoff</span></div>
<div class="line"><a id="l02079" name="l02079"></a><span class="lineno"> 2079</span> <span class="comment">// more expensive than just making payments</span></div>
<div class="line"><a id="l02080" name="l02080"></a><span class="lineno"> 2080</span> BEAST_EXPECT(payoffAmount &gt; state.paymentRemaining * (state.periodicPayment + broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(2).value()));</div>
<div class="line"><a id="l02081" name="l02081"></a><span class="lineno"> 2081</span> </div>
<div class="line"><a id="l02082" name="l02082"></a><span class="lineno"> 2082</span> singlePayment(loanKeylet, verifyLoanStatus, state, payoffAmount, 1, baseFlag, <a class="code hl_variable" href="namespacexrpl.html#a502d13801f614009c077389a8809a70a">tfLoanFullPayment</a>);</div>
<div class="line"><a id="l02083" name="l02083"></a><span class="lineno"> 2083</span> };</div>
<div class="line"><a id="l02084" name="l02084"></a><span class="lineno"> 2084</span> };</div>
<div class="line"><a id="l02085" name="l02085"></a><span class="lineno"> 2085</span> </div>
<div class="line"><a id="l02086" name="l02086"></a><span class="lineno"> 2086</span> <span class="keyword">auto</span> combineAllPayments = [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> baseFlag) {</div>
<div class="line"><a id="l02087" name="l02087"></a><span class="lineno"> 2087</span> <span class="keywordflow">return</span> [&amp;, baseFlag](Keylet <span class="keyword">const</span>&amp; loanKeylet, VerifyLoanStatus <span class="keyword">const</span>&amp; verifyLoanStatus) {</div>
<div class="line"><a id="l02088" name="l02088"></a><span class="lineno"> 2088</span> <span class="comment">// toEndOfLife</span></div>
<div class="line"><a id="l02089" name="l02089"></a><span class="lineno"> 2089</span> <span class="comment">//</span></div>
<div class="line"><a id="l02090" name="l02090"></a><span class="lineno"> 2090</span> </div>
<div class="line"><a id="l02091" name="l02091"></a><span class="lineno"> 2091</span> <span class="keyword">auto</span> state = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">getCurrentState</a>(env, broker, loanKeylet, verifyLoanStatus);</div>
<div class="line"><a id="l02092" name="l02092"></a><span class="lineno"> 2092</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02093" name="l02093"></a><span class="lineno"> 2093</span> </div>
<div class="line"><a id="l02094" name="l02094"></a><span class="lineno"> 2094</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02095" name="l02095"></a><span class="lineno"> 2095</span> STAmount(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, state.periodicPayment) == broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(Number(8333457002039338267, -17)));</div>
<div class="line"><a id="l02096" name="l02096"></a><span class="lineno"> 2096</span> </div>
<div class="line"><a id="l02097" name="l02097"></a><span class="lineno"> 2097</span> <span class="comment">// Make all the payments in one transaction</span></div>
<div class="line"><a id="l02098" name="l02098"></a><span class="lineno"> 2098</span> <span class="comment">// service fee is 2</span></div>
<div class="line"><a id="l02099" name="l02099"></a><span class="lineno"> 2099</span> <span class="keyword">auto</span> <span class="keyword">const</span> startingPayments = state.paymentRemaining;</div>
<div class="line"><a id="l02100" name="l02100"></a><span class="lineno"> 2100</span> STAmount <span class="keyword">const</span> payoffAmount = [&amp;]() {</div>
<div class="line"><a id="l02101" name="l02101"></a><span class="lineno"> 2101</span> NumberRoundModeGuard mg(<a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>);</div>
<div class="line"><a id="l02102" name="l02102"></a><span class="lineno"> 2102</span> <span class="keyword">auto</span> <span class="keyword">const</span> rawPayoff = startingPayments * (state.periodicPayment + broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(2).value());</div>
<div class="line"><a id="l02103" name="l02103"></a><span class="lineno"> 2103</span> STAmount payoffAmount{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, rawPayoff};</div>
<div class="line"><a id="l02104" name="l02104"></a><span class="lineno"> 2104</span> BEAST_EXPECTS(payoffAmount == broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(Number(1024014840244721, -12)), <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(payoffAmount));</div>
<div class="line"><a id="l02105" name="l02105"></a><span class="lineno"> 2105</span> BEAST_EXPECT(payoffAmount &gt; state.principalOutstanding);</div>
<div class="line"><a id="l02106" name="l02106"></a><span class="lineno"> 2106</span> </div>
<div class="line"><a id="l02107" name="l02107"></a><span class="lineno"> 2107</span> payoffAmount = <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(payoffAmount, state.loanScale);</div>
<div class="line"><a id="l02108" name="l02108"></a><span class="lineno"> 2108</span> </div>
<div class="line"><a id="l02109" name="l02109"></a><span class="lineno"> 2109</span> <span class="keywordflow">return</span> payoffAmount;</div>
<div class="line"><a id="l02110" name="l02110"></a><span class="lineno"> 2110</span> }();</div>
<div class="line"><a id="l02111" name="l02111"></a><span class="lineno"> 2111</span> </div>
<div class="line"><a id="l02112" name="l02112"></a><span class="lineno"> 2112</span> <span class="keyword">auto</span> <span class="keyword">const</span> totalPayoffValue = state.totalValue + startingPayments * broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(2).value();</div>
<div class="line"><a id="l02113" name="l02113"></a><span class="lineno"> 2113</span> STAmount <span class="keyword">const</span> totalPayoffAmount{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, totalPayoffValue};</div>
<div class="line"><a id="l02114" name="l02114"></a><span class="lineno"> 2114</span> </div>
<div class="line"><a id="l02115" name="l02115"></a><span class="lineno"> 2115</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l02116" name="l02116"></a><span class="lineno"> 2116</span> totalPayoffAmount == payoffAmount,</div>
<div class="line"><a id="l02117" name="l02117"></a><span class="lineno"> 2117</span> <span class="stringliteral">&quot;Payoff amount: &quot;</span> + <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(payoffAmount) + <span class="stringliteral">&quot;. Total Value: &quot;</span> + <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(totalPayoffAmount));</div>
<div class="line"><a id="l02118" name="l02118"></a><span class="lineno"> 2118</span> </div>
<div class="line"><a id="l02119" name="l02119"></a><span class="lineno"> 2119</span> singlePayment(loanKeylet, verifyLoanStatus, state, payoffAmount, state.paymentRemaining, baseFlag, 0);</div>
<div class="line"><a id="l02120" name="l02120"></a><span class="lineno"> 2120</span> };</div>
<div class="line"><a id="l02121" name="l02121"></a><span class="lineno"> 2121</span> };</div>
<div class="line"><a id="l02122" name="l02122"></a><span class="lineno"> 2122</span> </div>
<div class="line"><a id="l02123" name="l02123"></a><span class="lineno"> 2123</span> <span class="comment">// There are a lot of fields that can be set on a loan, but most</span></div>
<div class="line"><a id="l02124" name="l02124"></a><span class="lineno"> 2124</span> <span class="comment">// of them only affect the &quot;math&quot; when a payment is made. The</span></div>
<div class="line"><a id="l02125" name="l02125"></a><span class="lineno"> 2125</span> <span class="comment">// only one that really affects behavior is the</span></div>
<div class="line"><a id="l02126" name="l02126"></a><span class="lineno"> 2126</span> <span class="comment">// `tfLoanOverpayment` flag.</span></div>
<div class="line"><a id="l02127" name="l02127"></a><span class="lineno"> 2127</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02128" name="l02128"></a><span class="lineno"> 2128</span> caseLabel,</div>
<div class="line"><a id="l02129" name="l02129"></a><span class="lineno"> 2129</span> <span class="stringliteral">&quot;Loan overpayment allowed - Impair and Default&quot;</span>,</div>
<div class="line"><a id="l02130" name="l02130"></a><span class="lineno"> 2130</span> env,</div>
<div class="line"><a id="l02131" name="l02131"></a><span class="lineno"> 2131</span> loanAmount,</div>
<div class="line"><a id="l02132" name="l02132"></a><span class="lineno"> 2132</span> interestExponent,</div>
<div class="line"><a id="l02133" name="l02133"></a><span class="lineno"> 2133</span> lender,</div>
<div class="line"><a id="l02134" name="l02134"></a><span class="lineno"> 2134</span> borrower,</div>
<div class="line"><a id="l02135" name="l02135"></a><span class="lineno"> 2135</span> evan,</div>
<div class="line"><a id="l02136" name="l02136"></a><span class="lineno"> 2136</span> broker,</div>
<div class="line"><a id="l02137" name="l02137"></a><span class="lineno"> 2137</span> pseudoAcct,</div>
<div class="line"><a id="l02138" name="l02138"></a><span class="lineno"> 2138</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l02139" name="l02139"></a><span class="lineno"> 2139</span> defaultImmediately(<a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a445ecc250b4e81d24d1bf9b1ba9c8455">lsfLoanOverpayment</a>));</div>
<div class="line"><a id="l02140" name="l02140"></a><span class="lineno"> 2140</span> </div>
<div class="line"><a id="l02141" name="l02141"></a><span class="lineno"> 2141</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02142" name="l02142"></a><span class="lineno"> 2142</span> caseLabel,</div>
<div class="line"><a id="l02143" name="l02143"></a><span class="lineno"> 2143</span> <span class="stringliteral">&quot;Loan overpayment prohibited - Impair and Default&quot;</span>,</div>
<div class="line"><a id="l02144" name="l02144"></a><span class="lineno"> 2144</span> env,</div>
<div class="line"><a id="l02145" name="l02145"></a><span class="lineno"> 2145</span> loanAmount,</div>
<div class="line"><a id="l02146" name="l02146"></a><span class="lineno"> 2146</span> interestExponent,</div>
<div class="line"><a id="l02147" name="l02147"></a><span class="lineno"> 2147</span> lender,</div>
<div class="line"><a id="l02148" name="l02148"></a><span class="lineno"> 2148</span> borrower,</div>
<div class="line"><a id="l02149" name="l02149"></a><span class="lineno"> 2149</span> evan,</div>
<div class="line"><a id="l02150" name="l02150"></a><span class="lineno"> 2150</span> broker,</div>
<div class="line"><a id="l02151" name="l02151"></a><span class="lineno"> 2151</span> pseudoAcct,</div>
<div class="line"><a id="l02152" name="l02152"></a><span class="lineno"> 2152</span> 0,</div>
<div class="line"><a id="l02153" name="l02153"></a><span class="lineno"> 2153</span> defaultImmediately(0));</div>
<div class="line"><a id="l02154" name="l02154"></a><span class="lineno"> 2154</span> </div>
<div class="line"><a id="l02155" name="l02155"></a><span class="lineno"> 2155</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02156" name="l02156"></a><span class="lineno"> 2156</span> caseLabel,</div>
<div class="line"><a id="l02157" name="l02157"></a><span class="lineno"> 2157</span> <span class="stringliteral">&quot;Loan overpayment allowed - Default without Impair&quot;</span>,</div>
<div class="line"><a id="l02158" name="l02158"></a><span class="lineno"> 2158</span> env,</div>
<div class="line"><a id="l02159" name="l02159"></a><span class="lineno"> 2159</span> loanAmount,</div>
<div class="line"><a id="l02160" name="l02160"></a><span class="lineno"> 2160</span> interestExponent,</div>
<div class="line"><a id="l02161" name="l02161"></a><span class="lineno"> 2161</span> lender,</div>
<div class="line"><a id="l02162" name="l02162"></a><span class="lineno"> 2162</span> borrower,</div>
<div class="line"><a id="l02163" name="l02163"></a><span class="lineno"> 2163</span> evan,</div>
<div class="line"><a id="l02164" name="l02164"></a><span class="lineno"> 2164</span> broker,</div>
<div class="line"><a id="l02165" name="l02165"></a><span class="lineno"> 2165</span> pseudoAcct,</div>
<div class="line"><a id="l02166" name="l02166"></a><span class="lineno"> 2166</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l02167" name="l02167"></a><span class="lineno"> 2167</span> defaultImmediately(<a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a445ecc250b4e81d24d1bf9b1ba9c8455">lsfLoanOverpayment</a>, <span class="keyword">false</span>));</div>
<div class="line"><a id="l02168" name="l02168"></a><span class="lineno"> 2168</span> </div>
<div class="line"><a id="l02169" name="l02169"></a><span class="lineno"> 2169</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02170" name="l02170"></a><span class="lineno"> 2170</span> caseLabel,</div>
<div class="line"><a id="l02171" name="l02171"></a><span class="lineno"> 2171</span> <span class="stringliteral">&quot;Loan overpayment prohibited - Default without Impair&quot;</span>,</div>
<div class="line"><a id="l02172" name="l02172"></a><span class="lineno"> 2172</span> env,</div>
<div class="line"><a id="l02173" name="l02173"></a><span class="lineno"> 2173</span> loanAmount,</div>
<div class="line"><a id="l02174" name="l02174"></a><span class="lineno"> 2174</span> interestExponent,</div>
<div class="line"><a id="l02175" name="l02175"></a><span class="lineno"> 2175</span> lender,</div>
<div class="line"><a id="l02176" name="l02176"></a><span class="lineno"> 2176</span> borrower,</div>
<div class="line"><a id="l02177" name="l02177"></a><span class="lineno"> 2177</span> evan,</div>
<div class="line"><a id="l02178" name="l02178"></a><span class="lineno"> 2178</span> broker,</div>
<div class="line"><a id="l02179" name="l02179"></a><span class="lineno"> 2179</span> pseudoAcct,</div>
<div class="line"><a id="l02180" name="l02180"></a><span class="lineno"> 2180</span> 0,</div>
<div class="line"><a id="l02181" name="l02181"></a><span class="lineno"> 2181</span> defaultImmediately(0, <span class="keyword">false</span>));</div>
<div class="line"><a id="l02182" name="l02182"></a><span class="lineno"> 2182</span> </div>
<div class="line"><a id="l02183" name="l02183"></a><span class="lineno"> 2183</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02184" name="l02184"></a><span class="lineno"> 2184</span> caseLabel,</div>
<div class="line"><a id="l02185" name="l02185"></a><span class="lineno"> 2185</span> <span class="stringliteral">&quot;Loan overpayment prohibited - Pay off immediately&quot;</span>,</div>
<div class="line"><a id="l02186" name="l02186"></a><span class="lineno"> 2186</span> env,</div>
<div class="line"><a id="l02187" name="l02187"></a><span class="lineno"> 2187</span> loanAmount,</div>
<div class="line"><a id="l02188" name="l02188"></a><span class="lineno"> 2188</span> interestExponent,</div>
<div class="line"><a id="l02189" name="l02189"></a><span class="lineno"> 2189</span> lender,</div>
<div class="line"><a id="l02190" name="l02190"></a><span class="lineno"> 2190</span> borrower,</div>
<div class="line"><a id="l02191" name="l02191"></a><span class="lineno"> 2191</span> evan,</div>
<div class="line"><a id="l02192" name="l02192"></a><span class="lineno"> 2192</span> broker,</div>
<div class="line"><a id="l02193" name="l02193"></a><span class="lineno"> 2193</span> pseudoAcct,</div>
<div class="line"><a id="l02194" name="l02194"></a><span class="lineno"> 2194</span> 0,</div>
<div class="line"><a id="l02195" name="l02195"></a><span class="lineno"> 2195</span> fullPayment(0));</div>
<div class="line"><a id="l02196" name="l02196"></a><span class="lineno"> 2196</span> </div>
<div class="line"><a id="l02197" name="l02197"></a><span class="lineno"> 2197</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02198" name="l02198"></a><span class="lineno"> 2198</span> caseLabel,</div>
<div class="line"><a id="l02199" name="l02199"></a><span class="lineno"> 2199</span> <span class="stringliteral">&quot;Loan overpayment allowed - Pay off immediately&quot;</span>,</div>
<div class="line"><a id="l02200" name="l02200"></a><span class="lineno"> 2200</span> env,</div>
<div class="line"><a id="l02201" name="l02201"></a><span class="lineno"> 2201</span> loanAmount,</div>
<div class="line"><a id="l02202" name="l02202"></a><span class="lineno"> 2202</span> interestExponent,</div>
<div class="line"><a id="l02203" name="l02203"></a><span class="lineno"> 2203</span> lender,</div>
<div class="line"><a id="l02204" name="l02204"></a><span class="lineno"> 2204</span> borrower,</div>
<div class="line"><a id="l02205" name="l02205"></a><span class="lineno"> 2205</span> evan,</div>
<div class="line"><a id="l02206" name="l02206"></a><span class="lineno"> 2206</span> broker,</div>
<div class="line"><a id="l02207" name="l02207"></a><span class="lineno"> 2207</span> pseudoAcct,</div>
<div class="line"><a id="l02208" name="l02208"></a><span class="lineno"> 2208</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l02209" name="l02209"></a><span class="lineno"> 2209</span> fullPayment(<a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a445ecc250b4e81d24d1bf9b1ba9c8455">lsfLoanOverpayment</a>));</div>
<div class="line"><a id="l02210" name="l02210"></a><span class="lineno"> 2210</span> </div>
<div class="line"><a id="l02211" name="l02211"></a><span class="lineno"> 2211</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02212" name="l02212"></a><span class="lineno"> 2212</span> caseLabel,</div>
<div class="line"><a id="l02213" name="l02213"></a><span class="lineno"> 2213</span> <span class="stringliteral">&quot;Loan overpayment prohibited - Combine all payments&quot;</span>,</div>
<div class="line"><a id="l02214" name="l02214"></a><span class="lineno"> 2214</span> env,</div>
<div class="line"><a id="l02215" name="l02215"></a><span class="lineno"> 2215</span> loanAmount,</div>
<div class="line"><a id="l02216" name="l02216"></a><span class="lineno"> 2216</span> interestExponent,</div>
<div class="line"><a id="l02217" name="l02217"></a><span class="lineno"> 2217</span> lender,</div>
<div class="line"><a id="l02218" name="l02218"></a><span class="lineno"> 2218</span> borrower,</div>
<div class="line"><a id="l02219" name="l02219"></a><span class="lineno"> 2219</span> evan,</div>
<div class="line"><a id="l02220" name="l02220"></a><span class="lineno"> 2220</span> broker,</div>
<div class="line"><a id="l02221" name="l02221"></a><span class="lineno"> 2221</span> pseudoAcct,</div>
<div class="line"><a id="l02222" name="l02222"></a><span class="lineno"> 2222</span> 0,</div>
<div class="line"><a id="l02223" name="l02223"></a><span class="lineno"> 2223</span> combineAllPayments(0));</div>
<div class="line"><a id="l02224" name="l02224"></a><span class="lineno"> 2224</span> </div>
<div class="line"><a id="l02225" name="l02225"></a><span class="lineno"> 2225</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02226" name="l02226"></a><span class="lineno"> 2226</span> caseLabel,</div>
<div class="line"><a id="l02227" name="l02227"></a><span class="lineno"> 2227</span> <span class="stringliteral">&quot;Loan overpayment allowed - Combine all payments&quot;</span>,</div>
<div class="line"><a id="l02228" name="l02228"></a><span class="lineno"> 2228</span> env,</div>
<div class="line"><a id="l02229" name="l02229"></a><span class="lineno"> 2229</span> loanAmount,</div>
<div class="line"><a id="l02230" name="l02230"></a><span class="lineno"> 2230</span> interestExponent,</div>
<div class="line"><a id="l02231" name="l02231"></a><span class="lineno"> 2231</span> lender,</div>
<div class="line"><a id="l02232" name="l02232"></a><span class="lineno"> 2232</span> borrower,</div>
<div class="line"><a id="l02233" name="l02233"></a><span class="lineno"> 2233</span> evan,</div>
<div class="line"><a id="l02234" name="l02234"></a><span class="lineno"> 2234</span> broker,</div>
<div class="line"><a id="l02235" name="l02235"></a><span class="lineno"> 2235</span> pseudoAcct,</div>
<div class="line"><a id="l02236" name="l02236"></a><span class="lineno"> 2236</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l02237" name="l02237"></a><span class="lineno"> 2237</span> combineAllPayments(<a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a445ecc250b4e81d24d1bf9b1ba9c8455">lsfLoanOverpayment</a>));</div>
<div class="line"><a id="l02238" name="l02238"></a><span class="lineno"> 2238</span> </div>
<div class="line"><a id="l02239" name="l02239"></a><span class="lineno"> 2239</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02240" name="l02240"></a><span class="lineno"> 2240</span> caseLabel,</div>
<div class="line"><a id="l02241" name="l02241"></a><span class="lineno"> 2241</span> <span class="stringliteral">&quot;Loan overpayment prohibited - Make payments&quot;</span>,</div>
<div class="line"><a id="l02242" name="l02242"></a><span class="lineno"> 2242</span> env,</div>
<div class="line"><a id="l02243" name="l02243"></a><span class="lineno"> 2243</span> loanAmount,</div>
<div class="line"><a id="l02244" name="l02244"></a><span class="lineno"> 2244</span> interestExponent,</div>
<div class="line"><a id="l02245" name="l02245"></a><span class="lineno"> 2245</span> lender,</div>
<div class="line"><a id="l02246" name="l02246"></a><span class="lineno"> 2246</span> borrower,</div>
<div class="line"><a id="l02247" name="l02247"></a><span class="lineno"> 2247</span> evan,</div>
<div class="line"><a id="l02248" name="l02248"></a><span class="lineno"> 2248</span> broker,</div>
<div class="line"><a id="l02249" name="l02249"></a><span class="lineno"> 2249</span> pseudoAcct,</div>
<div class="line"><a id="l02250" name="l02250"></a><span class="lineno"> 2250</span> 0,</div>
<div class="line"><a id="l02251" name="l02251"></a><span class="lineno"> 2251</span> [&amp;](Keylet <span class="keyword">const</span>&amp; loanKeylet, VerifyLoanStatus <span class="keyword">const</span>&amp; verifyLoanStatus) {</div>
<div class="line"><a id="l02252" name="l02252"></a><span class="lineno"> 2252</span> <span class="comment">// toEndOfLife</span></div>
<div class="line"><a id="l02253" name="l02253"></a><span class="lineno"> 2253</span> <span class="comment">//</span></div>
<div class="line"><a id="l02254" name="l02254"></a><span class="lineno"> 2254</span> <span class="comment">// Draw and make multiple payments</span></div>
<div class="line"><a id="l02255" name="l02255"></a><span class="lineno"> 2255</span> <span class="keyword">auto</span> state = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">getCurrentState</a>(env, broker, loanKeylet, verifyLoanStatus);</div>
<div class="line"><a id="l02256" name="l02256"></a><span class="lineno"> 2256</span> BEAST_EXPECT(state.flags == 0);</div>
<div class="line"><a id="l02257" name="l02257"></a><span class="lineno"> 2257</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02258" name="l02258"></a><span class="lineno"> 2258</span> </div>
<div class="line"><a id="l02259" name="l02259"></a><span class="lineno"> 2259</span> verifyLoanStatus(state);</div>
<div class="line"><a id="l02260" name="l02260"></a><span class="lineno"> 2260</span> </div>
<div class="line"><a id="l02261" name="l02261"></a><span class="lineno"> 2261</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>(state.startDate + 20s);</div>
<div class="line"><a id="l02262" name="l02262"></a><span class="lineno"> 2262</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanAge = (env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#afc1be82a2d1572220adef1b06e2fda54">now</a>() - state.startDate).<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/count.html">count</a>();</div>
<div class="line"><a id="l02263" name="l02263"></a><span class="lineno"> 2263</span> BEAST_EXPECT(loanAge == 30);</div>
<div class="line"><a id="l02264" name="l02264"></a><span class="lineno"> 2264</span> </div>
<div class="line"><a id="l02265" name="l02265"></a><span class="lineno"> 2265</span> <span class="comment">// Periodic payment amount will consist of</span></div>
<div class="line"><a id="l02266" name="l02266"></a><span class="lineno"> 2266</span> <span class="comment">// 1. principal outstanding (1000)</span></div>
<div class="line"><a id="l02267" name="l02267"></a><span class="lineno"> 2267</span> <span class="comment">// 2. interest interest rate (at 12%)</span></div>
<div class="line"><a id="l02268" name="l02268"></a><span class="lineno"> 2268</span> <span class="comment">// 3. payment interval (600s)</span></div>
<div class="line"><a id="l02269" name="l02269"></a><span class="lineno"> 2269</span> <span class="comment">// 4. loan service fee (2)</span></div>
<div class="line"><a id="l02270" name="l02270"></a><span class="lineno"> 2270</span> <span class="comment">// Calculate these values without the helper functions</span></div>
<div class="line"><a id="l02271" name="l02271"></a><span class="lineno"> 2271</span> <span class="comment">// to verify they&#39;re working correctly The numbers in</span></div>
<div class="line"><a id="l02272" name="l02272"></a><span class="lineno"> 2272</span> <span class="comment">// the below BEAST_EXPECTs may not hold across assets.</span></div>
<div class="line"><a id="l02273" name="l02273"></a><span class="lineno"> 2273</span> Number <span class="keyword">const</span> interval = state.paymentInterval;</div>
<div class="line"><a id="l02274" name="l02274"></a><span class="lineno"> 2274</span> <span class="keyword">auto</span> <span class="keyword">const</span> periodicRate = interval * Number(12, -2) / <a class="code hl_variable" href="namespacexrpl.html#a51ae455751dbb43d284de10584418214">secondsInYear</a>;</div>
<div class="line"><a id="l02275" name="l02275"></a><span class="lineno"> 2275</span> BEAST_EXPECT(periodicRate == Number(2283105022831050228, -24, Number::normalized{}));</div>
<div class="line"><a id="l02276" name="l02276"></a><span class="lineno"> 2276</span> STAmount <span class="keyword">const</span> roundedPeriodicPayment{</div>
<div class="line"><a id="l02277" name="l02277"></a><span class="lineno"> 2277</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, <a class="code hl_function" href="namespacexrpl.html#ac29d2e6cda0723b2ca1f1cdc06fe3965">roundPeriodicPayment</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, state.periodicPayment, state.loanScale)};</div>
<div class="line"><a id="l02278" name="l02278"></a><span class="lineno"> 2278</span> </div>
<div class="line"><a id="l02279" name="l02279"></a><span class="lineno"> 2279</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Payment components: &quot;</span></div>
<div class="line"><a id="l02280" name="l02280"></a><span class="lineno"> 2280</span> &lt;&lt; <span class="stringliteral">&quot;Payments remaining, rawInterest, rawPrincipal, &quot;</span></div>
<div class="line"><a id="l02281" name="l02281"></a><span class="lineno"> 2281</span> <span class="stringliteral">&quot;rawMFee, trackedValueDelta, trackedPrincipalDelta, &quot;</span></div>
<div class="line"><a id="l02282" name="l02282"></a><span class="lineno"> 2282</span> <span class="stringliteral">&quot;trackedInterestDelta, trackedMgmtFeeDelta, special&quot;</span>;</div>
<div class="line"><a id="l02283" name="l02283"></a><span class="lineno"> 2283</span> </div>
<div class="line"><a id="l02284" name="l02284"></a><span class="lineno"> 2284</span> <span class="keyword">auto</span> <span class="keyword">const</span> serviceFee = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(2);</div>
<div class="line"><a id="l02285" name="l02285"></a><span class="lineno"> 2285</span> </div>
<div class="line"><a id="l02286" name="l02286"></a><span class="lineno"> 2286</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02287" name="l02287"></a><span class="lineno"> 2287</span> roundedPeriodicPayment ==</div>
<div class="line"><a id="l02288" name="l02288"></a><span class="lineno"> 2288</span> <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(</div>
<div class="line"><a id="l02289" name="l02289"></a><span class="lineno"> 2289</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(Number(8333457002039338267, -17), <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>),</div>
<div class="line"><a id="l02290" name="l02290"></a><span class="lineno"> 2290</span> state.loanScale,</div>
<div class="line"><a id="l02291" name="l02291"></a><span class="lineno"> 2291</span> <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>));</div>
<div class="line"><a id="l02292" name="l02292"></a><span class="lineno"> 2292</span> <span class="comment">// 83334570.01162141</span></div>
<div class="line"><a id="l02293" name="l02293"></a><span class="lineno"> 2293</span> <span class="comment">// Include the service fee</span></div>
<div class="line"><a id="l02294" name="l02294"></a><span class="lineno"> 2294</span> STAmount <span class="keyword">const</span> totalDue =</div>
<div class="line"><a id="l02295" name="l02295"></a><span class="lineno"> 2295</span> <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(roundedPeriodicPayment + serviceFee, state.loanScale, <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>);</div>
<div class="line"><a id="l02296" name="l02296"></a><span class="lineno"> 2296</span> <span class="comment">// Only check the first payment since the rounding</span></div>
<div class="line"><a id="l02297" name="l02297"></a><span class="lineno"> 2297</span> <span class="comment">// may drift as payments are made</span></div>
<div class="line"><a id="l02298" name="l02298"></a><span class="lineno"> 2298</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02299" name="l02299"></a><span class="lineno"> 2299</span> totalDue ==</div>
<div class="line"><a id="l02300" name="l02300"></a><span class="lineno"> 2300</span> <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(</div>
<div class="line"><a id="l02301" name="l02301"></a><span class="lineno"> 2301</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(Number(8533457002039338267, -17), <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>),</div>
<div class="line"><a id="l02302" name="l02302"></a><span class="lineno"> 2302</span> state.loanScale,</div>
<div class="line"><a id="l02303" name="l02303"></a><span class="lineno"> 2303</span> <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>));</div>
<div class="line"><a id="l02304" name="l02304"></a><span class="lineno"> 2304</span> </div>
<div class="line"><a id="l02305" name="l02305"></a><span class="lineno"> 2305</span> {</div>
<div class="line"><a id="l02306" name="l02306"></a><span class="lineno"> 2306</span> <span class="keyword">auto</span> <span class="keyword">const</span> raw = <a class="code hl_function" href="namespacexrpl.html#a5405a03459935d24ab27d4a0b9c5afc6">computeTheoreticalLoanState</a>(</div>
<div class="line"><a id="l02307" name="l02307"></a><span class="lineno"> 2307</span> state.periodicPayment, periodicRate, state.paymentRemaining, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>);</div>
<div class="line"><a id="l02308" name="l02308"></a><span class="lineno"> 2308</span> <span class="keyword">auto</span> <span class="keyword">const</span> rounded = <a class="code hl_function" href="namespacexrpl.html#aeb5f98fcbd289260f4848cbf266400a4">constructLoanState</a>(</div>
<div class="line"><a id="l02309" name="l02309"></a><span class="lineno"> 2309</span> state.totalValue, state.principalOutstanding, state.managementFeeOutstanding);</div>
<div class="line"><a id="l02310" name="l02310"></a><span class="lineno"> 2310</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Loan starting state: &quot;</span> &lt;&lt; state.paymentRemaining &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l02311" name="l02311"></a><span class="lineno"> 2311</span> &lt;&lt; raw.interestDue &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; raw.principalOutstanding &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; raw.managementFeeDue</div>
<div class="line"><a id="l02312" name="l02312"></a><span class="lineno"> 2312</span> &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; rounded.valueOutstanding &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; rounded.principalOutstanding &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l02313" name="l02313"></a><span class="lineno"> 2313</span> &lt;&lt; rounded.interestDue &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; rounded.managementFeeDue;</div>
<div class="line"><a id="l02314" name="l02314"></a><span class="lineno"> 2314</span> }</div>
<div class="line"><a id="l02315" name="l02315"></a><span class="lineno"> 2315</span> </div>
<div class="line"><a id="l02316" name="l02316"></a><span class="lineno"> 2316</span> <span class="comment">// Try to pay a little extra to show that it&#39;s _not_</span></div>
<div class="line"><a id="l02317" name="l02317"></a><span class="lineno"> 2317</span> <span class="comment">// taken</span></div>
<div class="line"><a id="l02318" name="l02318"></a><span class="lineno"> 2318</span> STAmount <span class="keyword">const</span> transactionAmount = STAmount{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, totalDue} + broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(10);</div>
<div class="line"><a id="l02319" name="l02319"></a><span class="lineno"> 2319</span> <span class="comment">// Only check the first payment since the rounding</span></div>
<div class="line"><a id="l02320" name="l02320"></a><span class="lineno"> 2320</span> <span class="comment">// may drift as payments are made</span></div>
<div class="line"><a id="l02321" name="l02321"></a><span class="lineno"> 2321</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02322" name="l02322"></a><span class="lineno"> 2322</span> transactionAmount ==</div>
<div class="line"><a id="l02323" name="l02323"></a><span class="lineno"> 2323</span> <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(</div>
<div class="line"><a id="l02324" name="l02324"></a><span class="lineno"> 2324</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(Number(9533457002039400, -14), <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>), state.loanScale, <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>));</div>
<div class="line"><a id="l02325" name="l02325"></a><span class="lineno"> 2325</span> </div>
<div class="line"><a id="l02326" name="l02326"></a><span class="lineno"> 2326</span> <span class="keyword">auto</span> <span class="keyword">const</span> initialState = state;</div>
<div class="line"><a id="l02327" name="l02327"></a><span class="lineno"> 2327</span> detail::PaymentComponents totalPaid{</div>
<div class="line"><a id="l02328" name="l02328"></a><span class="lineno"> 2328</span> .trackedValueDelta = 0, .trackedPrincipalDelta = 0, .trackedManagementFeeDelta = 0};</div>
<div class="line"><a id="l02329" name="l02329"></a><span class="lineno"> 2329</span> Number totalInterestPaid = 0;</div>
<div class="line"><a id="l02330" name="l02330"></a><span class="lineno"> 2330</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> totalPaymentsMade = 0;</div>
<div class="line"><a id="l02331" name="l02331"></a><span class="lineno"> 2331</span> </div>
<div class="line"><a id="l02332" name="l02332"></a><span class="lineno"> 2332</span> <a class="code hl_struct" href="structxrpl_1_1LoanState.html">xrpl::LoanState</a> currentTrueState = <a class="code hl_function" href="namespacexrpl.html#a5405a03459935d24ab27d4a0b9c5afc6">computeTheoreticalLoanState</a>(</div>
<div class="line"><a id="l02333" name="l02333"></a><span class="lineno"> 2333</span> state.periodicPayment, periodicRate, state.paymentRemaining, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>);</div>
<div class="line"><a id="l02334" name="l02334"></a><span class="lineno"> 2334</span> </div>
<div class="line"><a id="l02335" name="l02335"></a><span class="lineno"> 2335</span> <span class="keywordflow">while</span> (state.paymentRemaining &gt; 0)</div>
<div class="line"><a id="l02336" name="l02336"></a><span class="lineno"> 2336</span> {</div>
<div class="line"><a id="l02337" name="l02337"></a><span class="lineno"> 2337</span> <span class="comment">// Compute the expected principal amount</span></div>
<div class="line"><a id="l02338" name="l02338"></a><span class="lineno"> 2338</span> <span class="keyword">auto</span> <span class="keyword">const</span> paymentComponents = <a class="code hl_function" href="namespacexrpl_1_1detail.html#a15d4f3e9643b3ad99537596be2abca8f">detail::computePaymentComponents</a>(</div>
<div class="line"><a id="l02339" name="l02339"></a><span class="lineno"> 2339</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac5538be33495f6fdd3cd03177b25decf">raw</a>(),</div>
<div class="line"><a id="l02340" name="l02340"></a><span class="lineno"> 2340</span> state.loanScale,</div>
<div class="line"><a id="l02341" name="l02341"></a><span class="lineno"> 2341</span> state.totalValue,</div>
<div class="line"><a id="l02342" name="l02342"></a><span class="lineno"> 2342</span> state.principalOutstanding,</div>
<div class="line"><a id="l02343" name="l02343"></a><span class="lineno"> 2343</span> state.managementFeeOutstanding,</div>
<div class="line"><a id="l02344" name="l02344"></a><span class="lineno"> 2344</span> state.periodicPayment,</div>
<div class="line"><a id="l02345" name="l02345"></a><span class="lineno"> 2345</span> periodicRate,</div>
<div class="line"><a id="l02346" name="l02346"></a><span class="lineno"> 2346</span> state.paymentRemaining,</div>
<div class="line"><a id="l02347" name="l02347"></a><span class="lineno"> 2347</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>);</div>
<div class="line"><a id="l02348" name="l02348"></a><span class="lineno"> 2348</span> </div>
<div class="line"><a id="l02349" name="l02349"></a><span class="lineno"> 2349</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l02350" name="l02350"></a><span class="lineno"> 2350</span> paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> ||</div>
<div class="line"><a id="l02351" name="l02351"></a><span class="lineno"> 2351</span> paymentComponents.trackedValueDelta &lt;= roundedPeriodicPayment,</div>
<div class="line"><a id="l02352" name="l02352"></a><span class="lineno"> 2352</span> <span class="stringliteral">&quot;Delta: &quot;</span> + <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(paymentComponents.trackedValueDelta) +</div>
<div class="line"><a id="l02353" name="l02353"></a><span class="lineno"> 2353</span> <span class="stringliteral">&quot;, periodic payment: &quot;</span> + <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(roundedPeriodicPayment));</div>
<div class="line"><a id="l02354" name="l02354"></a><span class="lineno"> 2354</span> </div>
<div class="line"><a id="l02355" name="l02355"></a><span class="lineno"> 2355</span> <a class="code hl_struct" href="structxrpl_1_1LoanState.html">xrpl::LoanState</a> <span class="keyword">const</span> nextTrueState = <a class="code hl_function" href="namespacexrpl.html#a5405a03459935d24ab27d4a0b9c5afc6">computeTheoreticalLoanState</a>(</div>
<div class="line"><a id="l02356" name="l02356"></a><span class="lineno"> 2356</span> state.periodicPayment,</div>
<div class="line"><a id="l02357" name="l02357"></a><span class="lineno"> 2357</span> periodicRate,</div>
<div class="line"><a id="l02358" name="l02358"></a><span class="lineno"> 2358</span> state.paymentRemaining - 1,</div>
<div class="line"><a id="l02359" name="l02359"></a><span class="lineno"> 2359</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">managementFeeRate</a>);</div>
<div class="line"><a id="l02360" name="l02360"></a><span class="lineno"> 2360</span> detail::LoanStateDeltas <span class="keyword">const</span> deltas = currentTrueState - nextTrueState;</div>
<div class="line"><a id="l02361" name="l02361"></a><span class="lineno"> 2361</span> </div>
<div class="line"><a id="l02362" name="l02362"></a><span class="lineno"> 2362</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a> &lt;&lt; currencyLabel &lt;&lt; <span class="stringliteral">&quot; Payment components: &quot;</span> &lt;&lt; state.paymentRemaining &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l02363" name="l02363"></a><span class="lineno"> 2363</span> &lt;&lt; deltas.interest &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; deltas.principal &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; deltas.managementFee &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l02364" name="l02364"></a><span class="lineno"> 2364</span> &lt;&lt; paymentComponents.trackedValueDelta &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; paymentComponents.trackedPrincipalDelta</div>
<div class="line"><a id="l02365" name="l02365"></a><span class="lineno"> 2365</span> &lt;&lt; <span class="stringliteral">&quot;, &quot;</span> &lt;&lt; paymentComponents.trackedInterestPart() &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l02366" name="l02366"></a><span class="lineno"> 2366</span> &lt;&lt; paymentComponents.trackedManagementFeeDelta &lt;&lt; <span class="stringliteral">&quot;, &quot;</span></div>
<div class="line"><a id="l02367" name="l02367"></a><span class="lineno"> 2367</span> &lt;&lt; (paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> ? <span class="stringliteral">&quot;final&quot;</span></div>
<div class="line"><a id="l02368" name="l02368"></a><span class="lineno"> 2368</span> : paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0aea9f91b2cda019730f2891bd12a7a4d6">detail::PaymentSpecialCase::extra</a> ? <span class="stringliteral">&quot;extra&quot;</span></div>
<div class="line"><a id="l02369" name="l02369"></a><span class="lineno"> 2369</span> : <span class="stringliteral">&quot;none&quot;</span>);</div>
<div class="line"><a id="l02370" name="l02370"></a><span class="lineno"> 2370</span> </div>
<div class="line"><a id="l02371" name="l02371"></a><span class="lineno"> 2371</span> <span class="keyword">auto</span> <span class="keyword">const</span> totalDueAmount =</div>
<div class="line"><a id="l02372" name="l02372"></a><span class="lineno"> 2372</span> STAmount{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, paymentComponents.trackedValueDelta + serviceFee.number()};</div>
<div class="line"><a id="l02373" name="l02373"></a><span class="lineno"> 2373</span> </div>
<div class="line"><a id="l02374" name="l02374"></a><span class="lineno"> 2374</span> <span class="comment">// Due to the rounding algorithms to keep the interest and</span></div>
<div class="line"><a id="l02375" name="l02375"></a><span class="lineno"> 2375</span> <span class="comment">// principal in sync with &quot;true&quot; values, the computed amount</span></div>
<div class="line"><a id="l02376" name="l02376"></a><span class="lineno"> 2376</span> <span class="comment">// may be a little less than the rounded fixed payment</span></div>
<div class="line"><a id="l02377" name="l02377"></a><span class="lineno"> 2377</span> <span class="comment">// amount. For integral types, the difference should be &lt; 3</span></div>
<div class="line"><a id="l02378" name="l02378"></a><span class="lineno"> 2378</span> <span class="comment">// (1 unit for each of the interest and management fee). For</span></div>
<div class="line"><a id="l02379" name="l02379"></a><span class="lineno"> 2379</span> <span class="comment">// IOUs, the difference should be after the 8th digit.</span></div>
<div class="line"><a id="l02380" name="l02380"></a><span class="lineno"> 2380</span> Number <span class="keyword">const</span> diff = totalDue - totalDueAmount;</div>
<div class="line"><a id="l02381" name="l02381"></a><span class="lineno"> 2381</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02382" name="l02382"></a><span class="lineno"> 2382</span> paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> || diff == beast::zero ||</div>
<div class="line"><a id="l02383" name="l02383"></a><span class="lineno"> 2383</span> (diff &gt; beast::zero &amp;&amp;</div>
<div class="line"><a id="l02384" name="l02384"></a><span class="lineno"> 2384</span> ((broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a4d74996b3b3f23322e00b032c8c35baa">integral</a>() &amp;&amp; (<span class="keyword">static_cast&lt;</span>Number<span class="keyword">&gt;</span>(diff) &lt; 3)) ||</div>
<div class="line"><a id="l02385" name="l02385"></a><span class="lineno"> 2385</span> (state.loanScale - diff.exponent() &gt; 13))));</div>
<div class="line"><a id="l02386" name="l02386"></a><span class="lineno"> 2386</span> </div>
<div class="line"><a id="l02387" name="l02387"></a><span class="lineno"> 2387</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02388" name="l02388"></a><span class="lineno"> 2388</span> paymentComponents.trackedValueDelta ==</div>
<div class="line"><a id="l02389" name="l02389"></a><span class="lineno"> 2389</span> paymentComponents.trackedPrincipalDelta + paymentComponents.trackedInterestPart() +</div>
<div class="line"><a id="l02390" name="l02390"></a><span class="lineno"> 2390</span> paymentComponents.trackedManagementFeeDelta);</div>
<div class="line"><a id="l02391" name="l02391"></a><span class="lineno"> 2391</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02392" name="l02392"></a><span class="lineno"> 2392</span> paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> ||</div>
<div class="line"><a id="l02393" name="l02393"></a><span class="lineno"> 2393</span> paymentComponents.trackedValueDelta &lt;= roundedPeriodicPayment);</div>
<div class="line"><a id="l02394" name="l02394"></a><span class="lineno"> 2394</span> </div>
<div class="line"><a id="l02395" name="l02395"></a><span class="lineno"> 2395</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02396" name="l02396"></a><span class="lineno"> 2396</span> state.paymentRemaining &lt; 12 ||</div>
<div class="line"><a id="l02397" name="l02397"></a><span class="lineno"> 2397</span> <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, deltas.principal, state.loanScale, <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>) ==</div>
<div class="line"><a id="l02398" name="l02398"></a><span class="lineno"> 2398</span> <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(</div>
<div class="line"><a id="l02399" name="l02399"></a><span class="lineno"> 2399</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(Number(8333228691531218890, -17), <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>),</div>
<div class="line"><a id="l02400" name="l02400"></a><span class="lineno"> 2400</span> state.loanScale,</div>
<div class="line"><a id="l02401" name="l02401"></a><span class="lineno"> 2401</span> <a class="code hl_enumvalue" href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">Number::upward</a>));</div>
<div class="line"><a id="l02402" name="l02402"></a><span class="lineno"> 2402</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02403" name="l02403"></a><span class="lineno"> 2403</span> paymentComponents.trackedPrincipalDelta &gt;= beast::zero &amp;&amp;</div>
<div class="line"><a id="l02404" name="l02404"></a><span class="lineno"> 2404</span> paymentComponents.trackedPrincipalDelta &lt;= state.principalOutstanding);</div>
<div class="line"><a id="l02405" name="l02405"></a><span class="lineno"> 2405</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02406" name="l02406"></a><span class="lineno"> 2406</span> paymentComponents.specialCase != <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> ||</div>
<div class="line"><a id="l02407" name="l02407"></a><span class="lineno"> 2407</span> paymentComponents.trackedPrincipalDelta == state.principalOutstanding);</div>
<div class="line"><a id="l02408" name="l02408"></a><span class="lineno"> 2408</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02409" name="l02409"></a><span class="lineno"> 2409</span> paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a> ||</div>
<div class="line"><a id="l02410" name="l02410"></a><span class="lineno"> 2410</span> (state.periodicPayment.exponent() -</div>
<div class="line"><a id="l02411" name="l02411"></a><span class="lineno"> 2411</span> (deltas.principal + deltas.interest + deltas.managementFee - state.periodicPayment)</div>
<div class="line"><a id="l02412" name="l02412"></a><span class="lineno"> 2412</span> .exponent()) &gt; 14);</div>
<div class="line"><a id="l02413" name="l02413"></a><span class="lineno"> 2413</span> </div>
<div class="line"><a id="l02414" name="l02414"></a><span class="lineno"> 2414</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerBalanceBeforePayment = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>);</div>
<div class="line"><a id="l02415" name="l02415"></a><span class="lineno"> 2415</span> </div>
<div class="line"><a id="l02416" name="l02416"></a><span class="lineno"> 2416</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a50bd51c59a032921500d206140880f1c">canImpairLoan</a>(env, broker, state))</div>
<div class="line"><a id="l02417" name="l02417"></a><span class="lineno"> 2417</span> <span class="comment">// Making a payment will unimpair the loan</span></div>
<div class="line"><a id="l02418" name="l02418"></a><span class="lineno"> 2418</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#abbc7f3d362803a0d1b8206010cca42e8">manage</a>(lender, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>));</div>
<div class="line"><a id="l02419" name="l02419"></a><span class="lineno"> 2419</span> </div>
<div class="line"><a id="l02420" name="l02420"></a><span class="lineno"> 2420</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02421" name="l02421"></a><span class="lineno"> 2421</span> </div>
<div class="line"><a id="l02422" name="l02422"></a><span class="lineno"> 2422</span> <span class="comment">// Make the payment</span></div>
<div class="line"><a id="l02423" name="l02423"></a><span class="lineno"> 2423</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, transactionAmount));</div>
<div class="line"><a id="l02424" name="l02424"></a><span class="lineno"> 2424</span> </div>
<div class="line"><a id="l02425" name="l02425"></a><span class="lineno"> 2425</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02426" name="l02426"></a><span class="lineno"> 2426</span> </div>
<div class="line"><a id="l02427" name="l02427"></a><span class="lineno"> 2427</span> <span class="comment">// Need to account for fees if the loan is in XRP</span></div>
<div class="line"><a id="l02428" name="l02428"></a><span class="lineno"> 2428</span> PrettyAmount adjustment = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(0);</div>
<div class="line"><a id="l02429" name="l02429"></a><span class="lineno"> 2429</span> <span class="keywordflow">if</span> (broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">native</a>())</div>
<div class="line"><a id="l02430" name="l02430"></a><span class="lineno"> 2430</span> {</div>
<div class="line"><a id="l02431" name="l02431"></a><span class="lineno"> 2431</span> adjustment = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l02432" name="l02432"></a><span class="lineno"> 2432</span> }</div>
<div class="line"><a id="l02433" name="l02433"></a><span class="lineno"> 2433</span> </div>
<div class="line"><a id="l02434" name="l02434"></a><span class="lineno"> 2434</span> <span class="comment">// Check the result</span></div>
<div class="line"><a id="l02435" name="l02435"></a><span class="lineno"> 2435</span> verifyLoanStatus.checkPayment(</div>
<div class="line"><a id="l02436" name="l02436"></a><span class="lineno"> 2436</span> state.loanScale, borrower, borrowerBalanceBeforePayment, totalDueAmount, adjustment);</div>
<div class="line"><a id="l02437" name="l02437"></a><span class="lineno"> 2437</span> </div>
<div class="line"><a id="l02438" name="l02438"></a><span class="lineno"> 2438</span> --state.paymentRemaining;</div>
<div class="line"><a id="l02439" name="l02439"></a><span class="lineno"> 2439</span> state.previousPaymentDate = state.nextPaymentDate;</div>
<div class="line"><a id="l02440" name="l02440"></a><span class="lineno"> 2440</span> <span class="keywordflow">if</span> (paymentComponents.specialCase == <a class="code hl_enumvalue" href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">detail::PaymentSpecialCase::final</a>)</div>
<div class="line"><a id="l02441" name="l02441"></a><span class="lineno"> 2441</span> {</div>
<div class="line"><a id="l02442" name="l02442"></a><span class="lineno"> 2442</span> state.paymentRemaining = 0;</div>
<div class="line"><a id="l02443" name="l02443"></a><span class="lineno"> 2443</span> state.nextPaymentDate = 0;</div>
<div class="line"><a id="l02444" name="l02444"></a><span class="lineno"> 2444</span> }</div>
<div class="line"><a id="l02445" name="l02445"></a><span class="lineno"> 2445</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l02446" name="l02446"></a><span class="lineno"> 2446</span> {</div>
<div class="line"><a id="l02447" name="l02447"></a><span class="lineno"> 2447</span> state.nextPaymentDate += state.paymentInterval;</div>
<div class="line"><a id="l02448" name="l02448"></a><span class="lineno"> 2448</span> }</div>
<div class="line"><a id="l02449" name="l02449"></a><span class="lineno"> 2449</span> state.principalOutstanding -= paymentComponents.trackedPrincipalDelta;</div>
<div class="line"><a id="l02450" name="l02450"></a><span class="lineno"> 2450</span> state.managementFeeOutstanding -= paymentComponents.trackedManagementFeeDelta;</div>
<div class="line"><a id="l02451" name="l02451"></a><span class="lineno"> 2451</span> state.totalValue -= paymentComponents.trackedValueDelta;</div>
<div class="line"><a id="l02452" name="l02452"></a><span class="lineno"> 2452</span> </div>
<div class="line"><a id="l02453" name="l02453"></a><span class="lineno"> 2453</span> verifyLoanStatus(state);</div>
<div class="line"><a id="l02454" name="l02454"></a><span class="lineno"> 2454</span> </div>
<div class="line"><a id="l02455" name="l02455"></a><span class="lineno"> 2455</span> totalPaid.trackedValueDelta += paymentComponents.trackedValueDelta;</div>
<div class="line"><a id="l02456" name="l02456"></a><span class="lineno"> 2456</span> totalPaid.trackedPrincipalDelta += paymentComponents.trackedPrincipalDelta;</div>
<div class="line"><a id="l02457" name="l02457"></a><span class="lineno"> 2457</span> totalPaid.trackedManagementFeeDelta += paymentComponents.trackedManagementFeeDelta;</div>
<div class="line"><a id="l02458" name="l02458"></a><span class="lineno"> 2458</span> totalInterestPaid += paymentComponents.trackedInterestPart();</div>
<div class="line"><a id="l02459" name="l02459"></a><span class="lineno"> 2459</span> ++totalPaymentsMade;</div>
<div class="line"><a id="l02460" name="l02460"></a><span class="lineno"> 2460</span> </div>
<div class="line"><a id="l02461" name="l02461"></a><span class="lineno"> 2461</span> currentTrueState = nextTrueState;</div>
<div class="line"><a id="l02462" name="l02462"></a><span class="lineno"> 2462</span> }</div>
<div class="line"><a id="l02463" name="l02463"></a><span class="lineno"> 2463</span> </div>
<div class="line"><a id="l02464" name="l02464"></a><span class="lineno"> 2464</span> <span class="comment">// Loan is paid off</span></div>
<div class="line"><a id="l02465" name="l02465"></a><span class="lineno"> 2465</span> BEAST_EXPECT(state.paymentRemaining == 0);</div>
<div class="line"><a id="l02466" name="l02466"></a><span class="lineno"> 2466</span> BEAST_EXPECT(state.principalOutstanding == 0);</div>
<div class="line"><a id="l02467" name="l02467"></a><span class="lineno"> 2467</span> </div>
<div class="line"><a id="l02468" name="l02468"></a><span class="lineno"> 2468</span> <span class="comment">// Make sure all the payments add up</span></div>
<div class="line"><a id="l02469" name="l02469"></a><span class="lineno"> 2469</span> BEAST_EXPECT(totalPaid.trackedValueDelta == initialState.totalValue);</div>
<div class="line"><a id="l02470" name="l02470"></a><span class="lineno"> 2470</span> BEAST_EXPECT(totalPaid.trackedPrincipalDelta == initialState.principalOutstanding);</div>
<div class="line"><a id="l02471" name="l02471"></a><span class="lineno"> 2471</span> BEAST_EXPECT(totalPaid.trackedManagementFeeDelta == initialState.managementFeeOutstanding);</div>
<div class="line"><a id="l02472" name="l02472"></a><span class="lineno"> 2472</span> <span class="comment">// This is almost a tautology given the previous checks, but</span></div>
<div class="line"><a id="l02473" name="l02473"></a><span class="lineno"> 2473</span> <span class="comment">// check it anyway for completeness.</span></div>
<div class="line"><a id="l02474" name="l02474"></a><span class="lineno"> 2474</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02475" name="l02475"></a><span class="lineno"> 2475</span> totalInterestPaid ==</div>
<div class="line"><a id="l02476" name="l02476"></a><span class="lineno"> 2476</span> initialState.totalValue -</div>
<div class="line"><a id="l02477" name="l02477"></a><span class="lineno"> 2477</span> (initialState.principalOutstanding + initialState.managementFeeOutstanding));</div>
<div class="line"><a id="l02478" name="l02478"></a><span class="lineno"> 2478</span> BEAST_EXPECT(totalPaymentsMade == initialState.paymentRemaining);</div>
<div class="line"><a id="l02479" name="l02479"></a><span class="lineno"> 2479</span> </div>
<div class="line"><a id="l02480" name="l02480"></a><span class="lineno"> 2480</span> <span class="comment">// Can&#39;t impair or default a paid off loan</span></div>
<div class="line"><a id="l02481" name="l02481"></a><span class="lineno"> 2481</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#abbc7f3d362803a0d1b8206010cca42e8">manage</a>(lender, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">tfLoanImpair</a>), ter(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l02482" name="l02482"></a><span class="lineno"> 2482</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#abbc7f3d362803a0d1b8206010cca42e8">manage</a>(lender, loanKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), ter(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l02483" name="l02483"></a><span class="lineno"> 2483</span> });</div>
<div class="line"><a id="l02484" name="l02484"></a><span class="lineno"> 2484</span> </div>
<div class="line"><a id="l02485" name="l02485"></a><span class="lineno"> 2485</span><span class="preprocessor">#if LOANTODO</span></div>
<div class="line"><a id="l02486" name="l02486"></a><span class="lineno"> 2486</span> <span class="comment">// TODO</span></div>
<div class="line"><a id="l02487" name="l02487"></a><span class="lineno"> 2487</span> </div>
<div class="line"><a id="l02488" name="l02488"></a><span class="lineno"> 2488</span> <span class="comment">/*</span></div>
<div class="line"><a id="l02489" name="l02489"></a><span class="lineno"> 2489</span><span class="comment"> LoanPay fails with tecINVARIANT_FAILED error when loan_broker(also</span></div>
<div class="line"><a id="l02490" name="l02490"></a><span class="lineno"> 2490</span><span class="comment"> borrower) tries to do the payment. Here&#39;s the scenario: Create a XRP</span></div>
<div class="line"><a id="l02491" name="l02491"></a><span class="lineno"> 2491</span><span class="comment"> loan with loan broker as borrower, loan origination fee and loan service</span></div>
<div class="line"><a id="l02492" name="l02492"></a><span class="lineno"> 2492</span><span class="comment"> fee. Loan broker makes the first payment with periodic payment and loan</span></div>
<div class="line"><a id="l02493" name="l02493"></a><span class="lineno"> 2493</span><span class="comment"> service fee.</span></div>
<div class="line"><a id="l02494" name="l02494"></a><span class="lineno"> 2494</span><span class="comment"> */</span></div>
<div class="line"><a id="l02495" name="l02495"></a><span class="lineno"> 2495</span> </div>
<div class="line"><a id="l02496" name="l02496"></a><span class="lineno"> 2496</span> <span class="keyword">auto</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/chrono/c/time.html">time</a> = [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> label, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;void()&gt; timed) {</div>
<div class="line"><a id="l02497" name="l02497"></a><span class="lineno"> 2497</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(timed))</div>
<div class="line"><a id="l02498" name="l02498"></a><span class="lineno"> 2498</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l02499" name="l02499"></a><span class="lineno"> 2499</span> </div>
<div class="line"><a id="l02500" name="l02500"></a><span class="lineno"> 2500</span> <span class="keyword">using </span><a class="code hl_typedef" href="namespacexrpl_1_1Resource.html#ab77f0c09f83f4b7b2dc2607bcdf8054c">clock_type</a> = <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/steady_clock.html">std::chrono::steady_clock</a>;</div>
<div class="line"><a id="l02501" name="l02501"></a><span class="lineno"> 2501</span> <span class="keyword">using </span>duration_type = <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a>;</div>
<div class="line"><a id="l02502" name="l02502"></a><span class="lineno"> 2502</span> </div>
<div class="line"><a id="l02503" name="l02503"></a><span class="lineno"> 2503</span> <span class="keyword">auto</span> <span class="keyword">const</span> start = clock_type::now();</div>
<div class="line"><a id="l02504" name="l02504"></a><span class="lineno"> 2504</span> timed();</div>
<div class="line"><a id="l02505" name="l02505"></a><span class="lineno"> 2505</span> <span class="keyword">auto</span> <span class="keyword">const</span> duration = std::chrono::duration_cast&lt;duration_type&gt;(clock_type::now() - start);</div>
<div class="line"><a id="l02506" name="l02506"></a><span class="lineno"> 2506</span> </div>
<div class="line"><a id="l02507" name="l02507"></a><span class="lineno"> 2507</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#a19b8ee0ce850d78834984655ae83b20e">log</a> &lt;&lt; label &lt;&lt; <span class="stringliteral">&quot; took &quot;</span> &lt;&lt; duration.count() &lt;&lt; <span class="stringliteral">&quot;ms&quot;</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l02508" name="l02508"></a><span class="lineno"> 2508</span> </div>
<div class="line"><a id="l02509" name="l02509"></a><span class="lineno"> 2509</span> <span class="keywordflow">return</span> duration;</div>
<div class="line"><a id="l02510" name="l02510"></a><span class="lineno"> 2510</span> };</div>
<div class="line"><a id="l02511" name="l02511"></a><span class="lineno"> 2511</span> </div>
<div class="line"><a id="l02512" name="l02512"></a><span class="lineno"> 2512</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02513" name="l02513"></a><span class="lineno"> 2513</span> caseLabel,</div>
<div class="line"><a id="l02514" name="l02514"></a><span class="lineno"> 2514</span> <span class="stringliteral">&quot;timing&quot;</span>,</div>
<div class="line"><a id="l02515" name="l02515"></a><span class="lineno"> 2515</span> env,</div>
<div class="line"><a id="l02516" name="l02516"></a><span class="lineno"> 2516</span> loanAmount,</div>
<div class="line"><a id="l02517" name="l02517"></a><span class="lineno"> 2517</span> interestExponent,</div>
<div class="line"><a id="l02518" name="l02518"></a><span class="lineno"> 2518</span> lender,</div>
<div class="line"><a id="l02519" name="l02519"></a><span class="lineno"> 2519</span> borrower,</div>
<div class="line"><a id="l02520" name="l02520"></a><span class="lineno"> 2520</span> evan,</div>
<div class="line"><a id="l02521" name="l02521"></a><span class="lineno"> 2521</span> broker,</div>
<div class="line"><a id="l02522" name="l02522"></a><span class="lineno"> 2522</span> pseudoAcct,</div>
<div class="line"><a id="l02523" name="l02523"></a><span class="lineno"> 2523</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l02524" name="l02524"></a><span class="lineno"> 2524</span> [&amp;](Keylet <span class="keyword">const</span>&amp; loanKeylet, VerifyLoanStatus <span class="keyword">const</span>&amp; verifyLoanStatus) {</div>
<div class="line"><a id="l02525" name="l02525"></a><span class="lineno"> 2525</span> <span class="comment">// Estimate optimal values for loanPaymentsPerFeeIncrement and</span></div>
<div class="line"><a id="l02526" name="l02526"></a><span class="lineno"> 2526</span> <span class="comment">// loanMaximumPaymentsPerTransaction.</span></div>
<div class="line"><a id="l02527" name="l02527"></a><span class="lineno"> 2527</span> <span class="keyword">using namespace </span><a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">loan</a>;</div>
<div class="line"><a id="l02528" name="l02528"></a><span class="lineno"> 2528</span> </div>
<div class="line"><a id="l02529" name="l02529"></a><span class="lineno"> 2529</span> <span class="keyword">auto</span> <span class="keyword">const</span> state = <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">getCurrentState</a>(env, broker, verifyLoanStatus.keylet);</div>
<div class="line"><a id="l02530" name="l02530"></a><span class="lineno"> 2530</span> <span class="keyword">auto</span> <span class="keyword">const</span> serviceFee = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(2).value();</div>
<div class="line"><a id="l02531" name="l02531"></a><span class="lineno"> 2531</span> </div>
<div class="line"><a id="l02532" name="l02532"></a><span class="lineno"> 2532</span> STAmount <span class="keyword">const</span> totalDue{</div>
<div class="line"><a id="l02533" name="l02533"></a><span class="lineno"> 2533</span> broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>,</div>
<div class="line"><a id="l02534" name="l02534"></a><span class="lineno"> 2534</span> <a class="code hl_function" href="namespacexrpl.html#ac29d2e6cda0723b2ca1f1cdc06fe3965">roundPeriodicPayment</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, state.periodicPayment + serviceFee, state.loanScale)};</div>
<div class="line"><a id="l02535" name="l02535"></a><span class="lineno"> 2535</span> </div>
<div class="line"><a id="l02536" name="l02536"></a><span class="lineno"> 2536</span> <span class="comment">// Make a single payment</span></div>
<div class="line"><a id="l02537" name="l02537"></a><span class="lineno"> 2537</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/chrono/c/time.html">time</a>(<span class="stringliteral">&quot;single payment&quot;</span>, [&amp;]() { env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, totalDue)); });</div>
<div class="line"><a id="l02538" name="l02538"></a><span class="lineno"> 2538</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02539" name="l02539"></a><span class="lineno"> 2539</span> </div>
<div class="line"><a id="l02540" name="l02540"></a><span class="lineno"> 2540</span> <span class="comment">// Make all but the final payment</span></div>
<div class="line"><a id="l02541" name="l02541"></a><span class="lineno"> 2541</span> <span class="keyword">auto</span> <span class="keyword">const</span> numPayments = (state.paymentRemaining - 2);</div>
<div class="line"><a id="l02542" name="l02542"></a><span class="lineno"> 2542</span> STAmount <span class="keyword">const</span> bigPayment{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, totalDue * numPayments};</div>
<div class="line"><a id="l02543" name="l02543"></a><span class="lineno"> 2543</span> XRPAmount <span class="keyword">const</span> bigFee{baseFee * (numPayments / loanPaymentsPerFeeIncrement + 1)};</div>
<div class="line"><a id="l02544" name="l02544"></a><span class="lineno"> 2544</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/chrono/c/time.html">time</a>(<span class="stringliteral">&quot;ten payments&quot;</span>, [&amp;]() { env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, bigPayment), fee(bigFee)); });</div>
<div class="line"><a id="l02545" name="l02545"></a><span class="lineno"> 2545</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02546" name="l02546"></a><span class="lineno"> 2546</span> </div>
<div class="line"><a id="l02547" name="l02547"></a><span class="lineno"> 2547</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/chrono/c/time.html">time</a>(<span class="stringliteral">&quot;final payment&quot;</span>, [&amp;]() {</div>
<div class="line"><a id="l02548" name="l02548"></a><span class="lineno"> 2548</span> <span class="comment">// Make the final payment</span></div>
<div class="line"><a id="l02549" name="l02549"></a><span class="lineno"> 2549</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, totalDue + STAmount{broker.asset, 1}));</div>
<div class="line"><a id="l02550" name="l02550"></a><span class="lineno"> 2550</span> });</div>
<div class="line"><a id="l02551" name="l02551"></a><span class="lineno"> 2551</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02552" name="l02552"></a><span class="lineno"> 2552</span> });</div>
<div class="line"><a id="l02553" name="l02553"></a><span class="lineno"> 2553</span> </div>
<div class="line"><a id="l02554" name="l02554"></a><span class="lineno"> 2554</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02555" name="l02555"></a><span class="lineno"> 2555</span> caseLabel,</div>
<div class="line"><a id="l02556" name="l02556"></a><span class="lineno"> 2556</span> <span class="stringliteral">&quot;Loan overpayment allowed - Explicit overpayment&quot;</span>,</div>
<div class="line"><a id="l02557" name="l02557"></a><span class="lineno"> 2557</span> env,</div>
<div class="line"><a id="l02558" name="l02558"></a><span class="lineno"> 2558</span> loanAmount,</div>
<div class="line"><a id="l02559" name="l02559"></a><span class="lineno"> 2559</span> interestExponent,</div>
<div class="line"><a id="l02560" name="l02560"></a><span class="lineno"> 2560</span> lender,</div>
<div class="line"><a id="l02561" name="l02561"></a><span class="lineno"> 2561</span> borrower,</div>
<div class="line"><a id="l02562" name="l02562"></a><span class="lineno"> 2562</span> evan,</div>
<div class="line"><a id="l02563" name="l02563"></a><span class="lineno"> 2563</span> broker,</div>
<div class="line"><a id="l02564" name="l02564"></a><span class="lineno"> 2564</span> pseudoAcct,</div>
<div class="line"><a id="l02565" name="l02565"></a><span class="lineno"> 2565</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l02566" name="l02566"></a><span class="lineno"> 2566</span> [&amp;](Keylet <span class="keyword">const</span>&amp; loanKeylet, VerifyLoanStatus <span class="keyword">const</span>&amp; verifyLoanStatus) { <span class="keywordflow">throw</span> 0; });</div>
<div class="line"><a id="l02567" name="l02567"></a><span class="lineno"> 2567</span> </div>
<div class="line"><a id="l02568" name="l02568"></a><span class="lineno"> 2568</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02569" name="l02569"></a><span class="lineno"> 2569</span> caseLabel,</div>
<div class="line"><a id="l02570" name="l02570"></a><span class="lineno"> 2570</span> <span class="stringliteral">&quot;Loan overpayment prohibited - Late payment&quot;</span>,</div>
<div class="line"><a id="l02571" name="l02571"></a><span class="lineno"> 2571</span> env,</div>
<div class="line"><a id="l02572" name="l02572"></a><span class="lineno"> 2572</span> loanAmount,</div>
<div class="line"><a id="l02573" name="l02573"></a><span class="lineno"> 2573</span> interestExponent,</div>
<div class="line"><a id="l02574" name="l02574"></a><span class="lineno"> 2574</span> lender,</div>
<div class="line"><a id="l02575" name="l02575"></a><span class="lineno"> 2575</span> borrower,</div>
<div class="line"><a id="l02576" name="l02576"></a><span class="lineno"> 2576</span> evan,</div>
<div class="line"><a id="l02577" name="l02577"></a><span class="lineno"> 2577</span> broker,</div>
<div class="line"><a id="l02578" name="l02578"></a><span class="lineno"> 2578</span> pseudoAcct,</div>
<div class="line"><a id="l02579" name="l02579"></a><span class="lineno"> 2579</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l02580" name="l02580"></a><span class="lineno"> 2580</span> [&amp;](Keylet <span class="keyword">const</span>&amp; loanKeylet, VerifyLoanStatus <span class="keyword">const</span>&amp; verifyLoanStatus) { <span class="keywordflow">throw</span> 0; });</div>
<div class="line"><a id="l02581" name="l02581"></a><span class="lineno"> 2581</span> </div>
<div class="line"><a id="l02582" name="l02582"></a><span class="lineno"> 2582</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02583" name="l02583"></a><span class="lineno"> 2583</span> caseLabel,</div>
<div class="line"><a id="l02584" name="l02584"></a><span class="lineno"> 2584</span> <span class="stringliteral">&quot;Loan overpayment allowed - Late payment&quot;</span>,</div>
<div class="line"><a id="l02585" name="l02585"></a><span class="lineno"> 2585</span> env,</div>
<div class="line"><a id="l02586" name="l02586"></a><span class="lineno"> 2586</span> loanAmount,</div>
<div class="line"><a id="l02587" name="l02587"></a><span class="lineno"> 2587</span> interestExponent,</div>
<div class="line"><a id="l02588" name="l02588"></a><span class="lineno"> 2588</span> lender,</div>
<div class="line"><a id="l02589" name="l02589"></a><span class="lineno"> 2589</span> borrower,</div>
<div class="line"><a id="l02590" name="l02590"></a><span class="lineno"> 2590</span> evan,</div>
<div class="line"><a id="l02591" name="l02591"></a><span class="lineno"> 2591</span> broker,</div>
<div class="line"><a id="l02592" name="l02592"></a><span class="lineno"> 2592</span> pseudoAcct,</div>
<div class="line"><a id="l02593" name="l02593"></a><span class="lineno"> 2593</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l02594" name="l02594"></a><span class="lineno"> 2594</span> [&amp;](Keylet <span class="keyword">const</span>&amp; loanKeylet, VerifyLoanStatus <span class="keyword">const</span>&amp; verifyLoanStatus) { <span class="keywordflow">throw</span> 0; });</div>
<div class="line"><a id="l02595" name="l02595"></a><span class="lineno"> 2595</span> </div>
<div class="line"><a id="l02596" name="l02596"></a><span class="lineno"> 2596</span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">lifecycle</a>(</div>
<div class="line"><a id="l02597" name="l02597"></a><span class="lineno"> 2597</span> caseLabel,</div>
<div class="line"><a id="l02598" name="l02598"></a><span class="lineno"> 2598</span> <span class="stringliteral">&quot;Loan overpayment allowed - Late payment and overpayment&quot;</span>,</div>
<div class="line"><a id="l02599" name="l02599"></a><span class="lineno"> 2599</span> env,</div>
<div class="line"><a id="l02600" name="l02600"></a><span class="lineno"> 2600</span> loanAmount,</div>
<div class="line"><a id="l02601" name="l02601"></a><span class="lineno"> 2601</span> interestExponent,</div>
<div class="line"><a id="l02602" name="l02602"></a><span class="lineno"> 2602</span> lender,</div>
<div class="line"><a id="l02603" name="l02603"></a><span class="lineno"> 2603</span> borrower,</div>
<div class="line"><a id="l02604" name="l02604"></a><span class="lineno"> 2604</span> evan,</div>
<div class="line"><a id="l02605" name="l02605"></a><span class="lineno"> 2605</span> broker,</div>
<div class="line"><a id="l02606" name="l02606"></a><span class="lineno"> 2606</span> pseudoAcct,</div>
<div class="line"><a id="l02607" name="l02607"></a><span class="lineno"> 2607</span> <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l02608" name="l02608"></a><span class="lineno"> 2608</span> [&amp;](Keylet <span class="keyword">const</span>&amp; loanKeylet, VerifyLoanStatus <span class="keyword">const</span>&amp; verifyLoanStatus) { <span class="keywordflow">throw</span> 0; });</div>
<div class="line"><a id="l02609" name="l02609"></a><span class="lineno"> 2609</span> </div>
<div class="line"><a id="l02610" name="l02610"></a><span class="lineno"> 2610</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l02611" name="l02611"></a><span class="lineno"> 2611</span> }</div>
</div>
<div class="line"><a id="l02612" name="l02612"></a><span class="lineno"> 2612</span> </div>
<div class="line"><a id="l02613" name="l02613"></a><span class="lineno"> 2613</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen02614" data-start="{" data-end="}">
<div class="line"><a id="l02614" name="l02614"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a9fd84df8c86583bfbe1e02f015c60dc7"> 2614</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a9fd84df8c86583bfbe1e02f015c60dc7">testLoanSet</a>()</div>
<div class="line"><a id="l02615" name="l02615"></a><span class="lineno"> 2615</span> {</div>
<div class="line"><a id="l02616" name="l02616"></a><span class="lineno"> 2616</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l02617" name="l02617"></a><span class="lineno"> 2617</span> </div>
<div class="line"><a id="l02618" name="l02618"></a><span class="lineno"> 2618</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l02619" name="l02619"></a><span class="lineno"> 2619</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l02620" name="l02620"></a><span class="lineno"> 2620</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l02621" name="l02621"></a><span class="lineno"> 2621</span> </div>
<div class="line"><a id="l02622" name="l02622"></a><span class="lineno"> 2622</span> <span class="keyword">struct </span>CaseArgs</div>
<div class="line"><a id="l02623" name="l02623"></a><span class="lineno"> 2623</span> {</div>
<div class="line"><a id="l02624" name="l02624"></a><span class="lineno"> 2624</span> <span class="keywordtype">bool</span> <a class="code hl_function" href="namespacexrpl.html#aa0fea82c3b688dc71571c78fe73d657a">requireAuth</a> = <span class="keyword">false</span>;</div>
<div class="line"><a id="l02625" name="l02625"></a><span class="lineno"> 2625</span> <span class="keywordtype">bool</span> authorizeBorrower = <span class="keyword">false</span>;</div>
<div class="line"><a id="l02626" name="l02626"></a><span class="lineno"> 2626</span> <span class="keywordtype">int</span> initialXRP = 1&#39;000&#39;000;</div>
<div class="line"><a id="l02627" name="l02627"></a><span class="lineno"> 2627</span> };</div>
<div class="line"><a id="l02628" name="l02628"></a><span class="lineno"> 2628</span> </div>
<div class="line"><a id="l02629" name="l02629"></a><span class="lineno"> 2629</span> <span class="keyword">auto</span> <span class="keyword">const</span> testCase = [&amp;, <span class="keyword">this</span>](</div>
<div class="line"><a id="l02630" name="l02630"></a><span class="lineno"> 2630</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;void(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp;, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp;, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a>&amp;)&gt; mptTest,</div>
<div class="line"><a id="l02631" name="l02631"></a><span class="lineno"> 2631</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a>&lt;void(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp;, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp;)&gt; iouTest,</div>
<div class="line"><a id="l02632" name="l02632"></a><span class="lineno"> 2632</span> CaseArgs args = {}) {</div>
<div class="line"><a id="l02633" name="l02633"></a><span class="lineno"> 2633</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02634" name="l02634"></a><span class="lineno"> 2634</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(args.initialXRP), issuer, lender, borrower);</div>
<div class="line"><a id="l02635" name="l02635"></a><span class="lineno"> 2635</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02636" name="l02636"></a><span class="lineno"> 2636</span> <span class="keywordflow">if</span> (args.requireAuth)</div>
<div class="line"><a id="l02637" name="l02637"></a><span class="lineno"> 2637</span> {</div>
<div class="line"><a id="l02638" name="l02638"></a><span class="lineno"> 2638</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#ac015d7c2da11cab163c6fd1e2d425ffb">fset</a>(issuer, <a class="code hl_variable" href="namespacexrpl.html#abdca9eb1553420888d7e85a209713841">asfRequireAuth</a>));</div>
<div class="line"><a id="l02639" name="l02639"></a><span class="lineno"> 2639</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02640" name="l02640"></a><span class="lineno"> 2640</span> }</div>
<div class="line"><a id="l02641" name="l02641"></a><span class="lineno"> 2641</span> </div>
<div class="line"><a id="l02642" name="l02642"></a><span class="lineno"> 2642</span> <span class="comment">// We need two different asset types, MPT and IOU. Prepare MPT</span></div>
<div class="line"><a id="l02643" name="l02643"></a><span class="lineno"> 2643</span> <span class="comment">// first</span></div>
<div class="line"><a id="l02644" name="l02644"></a><span class="lineno"> 2644</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptt{env, issuer, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a03b59a84add36087c1a9e344e8dfadf2">mptInitNoFund</a>};</div>
<div class="line"><a id="l02645" name="l02645"></a><span class="lineno"> 2645</span> </div>
<div class="line"><a id="l02646" name="l02646"></a><span class="lineno"> 2646</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a902ebcfb8e9d8d76fe6dc6cb026610f9">none</a> = <a class="code hl_enumeration" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1">LedgerSpecificFlags</a>(0);</div>
<div class="line"><a id="l02647" name="l02647"></a><span class="lineno"> 2647</span> mptt.create({.flags = <a class="code hl_variable" href="namespacexrpl.html#a25a16d1e4a00f49801b8f6fd16da0459">tfMPTCanTransfer</a> | <a class="code hl_variable" href="namespacexrpl.html#a75a6d6ab0752128773a7c28ec32fa5d1">tfMPTCanLock</a> | (args.requireAuth ? <a class="code hl_variable" href="namespacexrpl.html#a3b504b2dedf069a5041193be2504e319">tfMPTRequireAuth</a> : <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a902ebcfb8e9d8d76fe6dc6cb026610f9">none</a>)});</div>
<div class="line"><a id="l02648" name="l02648"></a><span class="lineno"> 2648</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02649" name="l02649"></a><span class="lineno"> 2649</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> mptAsset = mptt.issuanceID();</div>
<div class="line"><a id="l02650" name="l02650"></a><span class="lineno"> 2650</span> mptt.authorize({.account = lender});</div>
<div class="line"><a id="l02651" name="l02651"></a><span class="lineno"> 2651</span> mptt.authorize({.account = borrower});</div>
<div class="line"><a id="l02652" name="l02652"></a><span class="lineno"> 2652</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02653" name="l02653"></a><span class="lineno"> 2653</span> <span class="keywordflow">if</span> (args.requireAuth)</div>
<div class="line"><a id="l02654" name="l02654"></a><span class="lineno"> 2654</span> {</div>
<div class="line"><a id="l02655" name="l02655"></a><span class="lineno"> 2655</span> mptt.authorize({.account = issuer, .holder = lender});</div>
<div class="line"><a id="l02656" name="l02656"></a><span class="lineno"> 2656</span> <span class="keywordflow">if</span> (args.authorizeBorrower)</div>
<div class="line"><a id="l02657" name="l02657"></a><span class="lineno"> 2657</span> mptt.authorize({.account = issuer, .holder = borrower});</div>
<div class="line"><a id="l02658" name="l02658"></a><span class="lineno"> 2658</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02659" name="l02659"></a><span class="lineno"> 2659</span> }</div>
<div class="line"><a id="l02660" name="l02660"></a><span class="lineno"> 2660</span> </div>
<div class="line"><a id="l02661" name="l02661"></a><span class="lineno"> 2661</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, mptAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l02662" name="l02662"></a><span class="lineno"> 2662</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02663" name="l02663"></a><span class="lineno"> 2663</span> </div>
<div class="line"><a id="l02664" name="l02664"></a><span class="lineno"> 2664</span> <span class="comment">// Prepare IOU</span></div>
<div class="line"><a id="l02665" name="l02665"></a><span class="lineno"> 2665</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> iouAsset = issuer[iouCurrency];</div>
<div class="line"><a id="l02666" name="l02666"></a><span class="lineno"> 2666</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(lender, iouAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l02667" name="l02667"></a><span class="lineno"> 2667</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(borrower, iouAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l02668" name="l02668"></a><span class="lineno"> 2668</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02669" name="l02669"></a><span class="lineno"> 2669</span> <span class="keywordflow">if</span> (args.requireAuth)</div>
<div class="line"><a id="l02670" name="l02670"></a><span class="lineno"> 2670</span> {</div>
<div class="line"><a id="l02671" name="l02671"></a><span class="lineno"> 2671</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(issuer, iouAsset(0), lender, <a class="code hl_variable" href="namespacexrpl.html#ab9c28132bb4810e879a13903d8784a33">tfSetfAuth</a>));</div>
<div class="line"><a id="l02672" name="l02672"></a><span class="lineno"> 2672</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, iouAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l02673" name="l02673"></a><span class="lineno"> 2673</span> <span class="keywordflow">if</span> (args.authorizeBorrower)</div>
<div class="line"><a id="l02674" name="l02674"></a><span class="lineno"> 2674</span> {</div>
<div class="line"><a id="l02675" name="l02675"></a><span class="lineno"> 2675</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(issuer, iouAsset(0), borrower, <a class="code hl_variable" href="namespacexrpl.html#ab9c28132bb4810e879a13903d8784a33">tfSetfAuth</a>));</div>
<div class="line"><a id="l02676" name="l02676"></a><span class="lineno"> 2676</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, iouAsset(10&#39;000)));</div>
<div class="line"><a id="l02677" name="l02677"></a><span class="lineno"> 2677</span> }</div>
<div class="line"><a id="l02678" name="l02678"></a><span class="lineno"> 2678</span> }</div>
<div class="line"><a id="l02679" name="l02679"></a><span class="lineno"> 2679</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l02680" name="l02680"></a><span class="lineno"> 2680</span> {</div>
<div class="line"><a id="l02681" name="l02681"></a><span class="lineno"> 2681</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, iouAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l02682" name="l02682"></a><span class="lineno"> 2682</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, iouAsset(10&#39;000)));</div>
<div class="line"><a id="l02683" name="l02683"></a><span class="lineno"> 2683</span> }</div>
<div class="line"><a id="l02684" name="l02684"></a><span class="lineno"> 2684</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02685" name="l02685"></a><span class="lineno"> 2685</span> </div>
<div class="line"><a id="l02686" name="l02686"></a><span class="lineno"> 2686</span> <span class="comment">// Create vaults and loan brokers</span></div>
<div class="line"><a id="l02687" name="l02687"></a><span class="lineno"> 2687</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a> <span class="keyword">const</span> assets{mptAsset, iouAsset};</div>
<div class="line"><a id="l02688" name="l02688"></a><span class="lineno"> 2688</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;BrokerInfo&gt;</a> brokers;</div>
<div class="line"><a id="l02689" name="l02689"></a><span class="lineno"> 2689</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; asset : assets)</div>
<div class="line"><a id="l02690" name="l02690"></a><span class="lineno"> 2690</span> {</div>
<div class="line"><a id="l02691" name="l02691"></a><span class="lineno"> 2691</span> brokers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/emplace_back.html">emplace_back</a>(createVaultAndBroker(env, asset, lender));</div>
<div class="line"><a id="l02692" name="l02692"></a><span class="lineno"> 2692</span> }</div>
<div class="line"><a id="l02693" name="l02693"></a><span class="lineno"> 2693</span> </div>
<div class="line"><a id="l02694" name="l02694"></a><span class="lineno"> 2694</span> <span class="keywordflow">if</span> (mptTest)</div>
<div class="line"><a id="l02695" name="l02695"></a><span class="lineno"> 2695</span> (mptTest)(env, brokers[0], mptt);</div>
<div class="line"><a id="l02696" name="l02696"></a><span class="lineno"> 2696</span> <span class="keywordflow">if</span> (iouTest)</div>
<div class="line"><a id="l02697" name="l02697"></a><span class="lineno"> 2697</span> (iouTest)(env, brokers[1]);</div>
<div class="line"><a id="l02698" name="l02698"></a><span class="lineno"> 2698</span> };</div>
<div class="line"><a id="l02699" name="l02699"></a><span class="lineno"> 2699</span> </div>
<div class="line"><a id="l02700" name="l02700"></a><span class="lineno"> 2700</span> testCase(</div>
<div class="line"><a id="l02701" name="l02701"></a><span class="lineno"> 2701</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <span class="keyword">auto</span>&amp;) {</div>
<div class="line"><a id="l02702" name="l02702"></a><span class="lineno"> 2702</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l02703" name="l02703"></a><span class="lineno"> 2703</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l02704" name="l02704"></a><span class="lineno"> 2704</span> </div>
<div class="line"><a id="l02705" name="l02705"></a><span class="lineno"> 2705</span> testcase(<span class="stringliteral">&quot;MPT issuer is borrower, issuer submits&quot;</span>);</div>
<div class="line"><a id="l02706" name="l02706"></a><span class="lineno"> 2706</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(issuer, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02707" name="l02707"></a><span class="lineno"> 2707</span> counterparty(lender),</div>
<div class="line"><a id="l02708" name="l02708"></a><span class="lineno"> 2708</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02709" name="l02709"></a><span class="lineno"> 2709</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l02710" name="l02710"></a><span class="lineno"> 2710</span> </div>
<div class="line"><a id="l02711" name="l02711"></a><span class="lineno"> 2711</span> testcase(<span class="stringliteral">&quot;MPT issuer is borrower, lender submits&quot;</span>);</div>
<div class="line"><a id="l02712" name="l02712"></a><span class="lineno"> 2712</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02713" name="l02713"></a><span class="lineno"> 2713</span> counterparty(issuer),</div>
<div class="line"><a id="l02714" name="l02714"></a><span class="lineno"> 2714</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, issuer),</div>
<div class="line"><a id="l02715" name="l02715"></a><span class="lineno"> 2715</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l02716" name="l02716"></a><span class="lineno"> 2716</span> },</div>
<div class="line"><a id="l02717" name="l02717"></a><span class="lineno"> 2717</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker) {</div>
<div class="line"><a id="l02718" name="l02718"></a><span class="lineno"> 2718</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l02719" name="l02719"></a><span class="lineno"> 2719</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l02720" name="l02720"></a><span class="lineno"> 2720</span> </div>
<div class="line"><a id="l02721" name="l02721"></a><span class="lineno"> 2721</span> testcase(<span class="stringliteral">&quot;IOU issuer is borrower, issuer submits&quot;</span>);</div>
<div class="line"><a id="l02722" name="l02722"></a><span class="lineno"> 2722</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(issuer, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02723" name="l02723"></a><span class="lineno"> 2723</span> counterparty(lender),</div>
<div class="line"><a id="l02724" name="l02724"></a><span class="lineno"> 2724</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02725" name="l02725"></a><span class="lineno"> 2725</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l02726" name="l02726"></a><span class="lineno"> 2726</span> </div>
<div class="line"><a id="l02727" name="l02727"></a><span class="lineno"> 2727</span> testcase(<span class="stringliteral">&quot;IOU issuer is borrower, lender submits&quot;</span>);</div>
<div class="line"><a id="l02728" name="l02728"></a><span class="lineno"> 2728</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02729" name="l02729"></a><span class="lineno"> 2729</span> counterparty(issuer),</div>
<div class="line"><a id="l02730" name="l02730"></a><span class="lineno"> 2730</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, issuer),</div>
<div class="line"><a id="l02731" name="l02731"></a><span class="lineno"> 2731</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l02732" name="l02732"></a><span class="lineno"> 2732</span> },</div>
<div class="line"><a id="l02733" name="l02733"></a><span class="lineno"> 2733</span> CaseArgs{.requireAuth = <span class="keyword">true</span>});</div>
<div class="line"><a id="l02734" name="l02734"></a><span class="lineno"> 2734</span> </div>
<div class="line"><a id="l02735" name="l02735"></a><span class="lineno"> 2735</span> testCase(</div>
<div class="line"><a id="l02736" name="l02736"></a><span class="lineno"> 2736</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <span class="keyword">auto</span>&amp;) {</div>
<div class="line"><a id="l02737" name="l02737"></a><span class="lineno"> 2737</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l02738" name="l02738"></a><span class="lineno"> 2738</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l02739" name="l02739"></a><span class="lineno"> 2739</span> </div>
<div class="line"><a id="l02740" name="l02740"></a><span class="lineno"> 2740</span> testcase(<span class="stringliteral">&quot;MPT unauthorized borrower, borrower submits&quot;</span>);</div>
<div class="line"><a id="l02741" name="l02741"></a><span class="lineno"> 2741</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02742" name="l02742"></a><span class="lineno"> 2742</span> counterparty(lender),</div>
<div class="line"><a id="l02743" name="l02743"></a><span class="lineno"> 2743</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02744" name="l02744"></a><span class="lineno"> 2744</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l02745" name="l02745"></a><span class="lineno"> 2745</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_AUTH});</div>
<div class="line"><a id="l02746" name="l02746"></a><span class="lineno"> 2746</span> </div>
<div class="line"><a id="l02747" name="l02747"></a><span class="lineno"> 2747</span> testcase(<span class="stringliteral">&quot;MPT unauthorized borrower, lender submits&quot;</span>);</div>
<div class="line"><a id="l02748" name="l02748"></a><span class="lineno"> 2748</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02749" name="l02749"></a><span class="lineno"> 2749</span> counterparty(borrower),</div>
<div class="line"><a id="l02750" name="l02750"></a><span class="lineno"> 2750</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l02751" name="l02751"></a><span class="lineno"> 2751</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l02752" name="l02752"></a><span class="lineno"> 2752</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_AUTH});</div>
<div class="line"><a id="l02753" name="l02753"></a><span class="lineno"> 2753</span> },</div>
<div class="line"><a id="l02754" name="l02754"></a><span class="lineno"> 2754</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker) {</div>
<div class="line"><a id="l02755" name="l02755"></a><span class="lineno"> 2755</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l02756" name="l02756"></a><span class="lineno"> 2756</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l02757" name="l02757"></a><span class="lineno"> 2757</span> </div>
<div class="line"><a id="l02758" name="l02758"></a><span class="lineno"> 2758</span> testcase(<span class="stringliteral">&quot;IOU unauthorized borrower, borrower submits&quot;</span>);</div>
<div class="line"><a id="l02759" name="l02759"></a><span class="lineno"> 2759</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02760" name="l02760"></a><span class="lineno"> 2760</span> counterparty(lender),</div>
<div class="line"><a id="l02761" name="l02761"></a><span class="lineno"> 2761</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02762" name="l02762"></a><span class="lineno"> 2762</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l02763" name="l02763"></a><span class="lineno"> 2763</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_AUTH});</div>
<div class="line"><a id="l02764" name="l02764"></a><span class="lineno"> 2764</span> </div>
<div class="line"><a id="l02765" name="l02765"></a><span class="lineno"> 2765</span> testcase(<span class="stringliteral">&quot;IOU unauthorized borrower, lender submits&quot;</span>);</div>
<div class="line"><a id="l02766" name="l02766"></a><span class="lineno"> 2766</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02767" name="l02767"></a><span class="lineno"> 2767</span> counterparty(borrower),</div>
<div class="line"><a id="l02768" name="l02768"></a><span class="lineno"> 2768</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l02769" name="l02769"></a><span class="lineno"> 2769</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l02770" name="l02770"></a><span class="lineno"> 2770</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_AUTH});</div>
<div class="line"><a id="l02771" name="l02771"></a><span class="lineno"> 2771</span> },</div>
<div class="line"><a id="l02772" name="l02772"></a><span class="lineno"> 2772</span> CaseArgs{.requireAuth = <span class="keyword">true</span>});</div>
<div class="line"><a id="l02773" name="l02773"></a><span class="lineno"> 2773</span> </div>
<div class="line"><a id="l02774" name="l02774"></a><span class="lineno"> 2774</span> <span class="keyword">auto</span> <span class="keyword">const</span> [acctReserve, incReserve] = [<span class="keyword">this</span>]() -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;int, int&gt;</a> {</div>
<div class="line"><a id="l02775" name="l02775"></a><span class="lineno"> 2775</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a948c1d39ac993c7db8cdb69f4dd62c68">testable_amendments</a>()};</div>
<div class="line"><a id="l02776" name="l02776"></a><span class="lineno"> 2776</span> <span class="keywordflow">return</span> {</div>
<div class="line"><a id="l02777" name="l02777"></a><span class="lineno"> 2777</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().accountReserve(0).drops() / <a class="code hl_variable" href="namespacexrpl.html#aab568b67ea83d0cf07657b50bf486fbf">DROPS_PER_XRP</a>.<a class="code hl_function" href="classxrpl_1_1XRPAmount.html#a76fd7d6c10208cac2115f8dd0b2ba95e">drops</a>(),</div>
<div class="line"><a id="l02778" name="l02778"></a><span class="lineno"> 2778</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().increment.drops() / <a class="code hl_variable" href="namespacexrpl.html#aab568b67ea83d0cf07657b50bf486fbf">DROPS_PER_XRP</a>.<a class="code hl_function" href="classxrpl_1_1XRPAmount.html#a76fd7d6c10208cac2115f8dd0b2ba95e">drops</a>()};</div>
<div class="line"><a id="l02779" name="l02779"></a><span class="lineno"> 2779</span> }();</div>
<div class="line"><a id="l02780" name="l02780"></a><span class="lineno"> 2780</span> </div>
<div class="line"><a id="l02781" name="l02781"></a><span class="lineno"> 2781</span> testCase(</div>
<div class="line"><a id="l02782" name="l02782"></a><span class="lineno"> 2782</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a>&amp; mptt) {</div>
<div class="line"><a id="l02783" name="l02783"></a><span class="lineno"> 2783</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l02784" name="l02784"></a><span class="lineno"> 2784</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l02785" name="l02785"></a><span class="lineno"> 2785</span> </div>
<div class="line"><a id="l02786" name="l02786"></a><span class="lineno"> 2786</span> testcase(</div>
<div class="line"><a id="l02787" name="l02787"></a><span class="lineno"> 2787</span> <span class="stringliteral">&quot;MPT authorized borrower, borrower submits, borrower has &quot;</span></div>
<div class="line"><a id="l02788" name="l02788"></a><span class="lineno"> 2788</span> <span class="stringliteral">&quot;no reserve&quot;</span>);</div>
<div class="line"><a id="l02789" name="l02789"></a><span class="lineno"> 2789</span> mptt.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a65c17f9abbed1175a1f3ad608a020494">authorize</a>({.account = borrower, .flags = <a class="code hl_variable" href="namespacexrpl.html#aae07b590d51f8a8c8d93dfb4b05b1032">tfMPTUnauthorize</a>});</div>
<div class="line"><a id="l02790" name="l02790"></a><span class="lineno"> 2790</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02791" name="l02791"></a><span class="lineno"> 2791</span> </div>
<div class="line"><a id="l02792" name="l02792"></a><span class="lineno"> 2792</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptoken = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#ab3ec6c5e531adf3b2fbee3a984c3d453">keylet::mptoken</a>(mptt.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a6fbe6f3d9a87ff807153e65068658eab">issuanceID</a>(), borrower);</div>
<div class="line"><a id="l02793" name="l02793"></a><span class="lineno"> 2793</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleMPT1 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(mptoken);</div>
<div class="line"><a id="l02794" name="l02794"></a><span class="lineno"> 2794</span> BEAST_EXPECT(sleMPT1 == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02795" name="l02795"></a><span class="lineno"> 2795</span> </div>
<div class="line"><a id="l02796" name="l02796"></a><span class="lineno"> 2796</span> <span class="comment">// Burn some XRP</span></div>
<div class="line"><a id="l02797" name="l02797"></a><span class="lineno"> 2797</span> env(<a class="code hl_enumvalue" href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">noop</a>(borrower), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(acctReserve * 2 + incReserve * 2)));</div>
<div class="line"><a id="l02798" name="l02798"></a><span class="lineno"> 2798</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02799" name="l02799"></a><span class="lineno"> 2799</span> </div>
<div class="line"><a id="l02800" name="l02800"></a><span class="lineno"> 2800</span> <span class="comment">// Cannot create loan, not enough reserve to create MPToken</span></div>
<div class="line"><a id="l02801" name="l02801"></a><span class="lineno"> 2801</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02802" name="l02802"></a><span class="lineno"> 2802</span> counterparty(lender),</div>
<div class="line"><a id="l02803" name="l02803"></a><span class="lineno"> 2803</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02804" name="l02804"></a><span class="lineno"> 2804</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l02805" name="l02805"></a><span class="lineno"> 2805</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecINSUFFICIENT_RESERVE});</div>
<div class="line"><a id="l02806" name="l02806"></a><span class="lineno"> 2806</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02807" name="l02807"></a><span class="lineno"> 2807</span> </div>
<div class="line"><a id="l02808" name="l02808"></a><span class="lineno"> 2808</span> <span class="comment">// Can create loan now, will implicitly create MPToken</span></div>
<div class="line"><a id="l02809" name="l02809"></a><span class="lineno"> 2809</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(incReserve)));</div>
<div class="line"><a id="l02810" name="l02810"></a><span class="lineno"> 2810</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02811" name="l02811"></a><span class="lineno"> 2811</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02812" name="l02812"></a><span class="lineno"> 2812</span> counterparty(lender),</div>
<div class="line"><a id="l02813" name="l02813"></a><span class="lineno"> 2813</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02814" name="l02814"></a><span class="lineno"> 2814</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l02815" name="l02815"></a><span class="lineno"> 2815</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02816" name="l02816"></a><span class="lineno"> 2816</span> </div>
<div class="line"><a id="l02817" name="l02817"></a><span class="lineno"> 2817</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleMPT2 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(mptoken);</div>
<div class="line"><a id="l02818" name="l02818"></a><span class="lineno"> 2818</span> BEAST_EXPECT(sleMPT2 != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02819" name="l02819"></a><span class="lineno"> 2819</span> },</div>
<div class="line"><a id="l02820" name="l02820"></a><span class="lineno"> 2820</span> {},</div>
<div class="line"><a id="l02821" name="l02821"></a><span class="lineno"> 2821</span> CaseArgs{.initialXRP = acctReserve * 2 + incReserve * 8 + 1});</div>
<div class="line"><a id="l02822" name="l02822"></a><span class="lineno"> 2822</span> </div>
<div class="line"><a id="l02823" name="l02823"></a><span class="lineno"> 2823</span> testCase(</div>
<div class="line"><a id="l02824" name="l02824"></a><span class="lineno"> 2824</span> {},</div>
<div class="line"><a id="l02825" name="l02825"></a><span class="lineno"> 2825</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker) {</div>
<div class="line"><a id="l02826" name="l02826"></a><span class="lineno"> 2826</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l02827" name="l02827"></a><span class="lineno"> 2827</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l02828" name="l02828"></a><span class="lineno"> 2828</span> </div>
<div class="line"><a id="l02829" name="l02829"></a><span class="lineno"> 2829</span> testcase(</div>
<div class="line"><a id="l02830" name="l02830"></a><span class="lineno"> 2830</span> <span class="stringliteral">&quot;IOU authorized borrower, borrower submits, borrower has &quot;</span></div>
<div class="line"><a id="l02831" name="l02831"></a><span class="lineno"> 2831</span> <span class="stringliteral">&quot;no reserve&quot;</span>);</div>
<div class="line"><a id="l02832" name="l02832"></a><span class="lineno"> 2832</span> <span class="comment">// Remove trust line from borrower to issuer</span></div>
<div class="line"><a id="l02833" name="l02833"></a><span class="lineno"> 2833</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac45f1590dafbd296693c57c285f2874b">trust</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(0), borrower);</div>
<div class="line"><a id="l02834" name="l02834"></a><span class="lineno"> 2834</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02835" name="l02835"></a><span class="lineno"> 2835</span> </div>
<div class="line"><a id="l02836" name="l02836"></a><span class="lineno"> 2836</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, issuer, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(10&#39;000)));</div>
<div class="line"><a id="l02837" name="l02837"></a><span class="lineno"> 2837</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02838" name="l02838"></a><span class="lineno"> 2838</span> <span class="keyword">auto</span> <span class="keyword">const</span> trustline = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#aa21a42ef67381b26994fa7a9960b1306">keylet::line</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac5538be33495f6fdd3cd03177b25decf">raw</a>().<a class="code hl_function" href="classxrpl_1_1Asset.html#a42851afbc54def1c41085612f575ca33">get</a>&lt;<a class="code hl_class" href="classxrpl_1_1Issue.html">Issue</a>&gt;());</div>
<div class="line"><a id="l02839" name="l02839"></a><span class="lineno"> 2839</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleLine1 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(trustline);</div>
<div class="line"><a id="l02840" name="l02840"></a><span class="lineno"> 2840</span> BEAST_EXPECT(sleLine1 == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02841" name="l02841"></a><span class="lineno"> 2841</span> </div>
<div class="line"><a id="l02842" name="l02842"></a><span class="lineno"> 2842</span> <span class="comment">// Burn some XRP</span></div>
<div class="line"><a id="l02843" name="l02843"></a><span class="lineno"> 2843</span> env(<a class="code hl_enumvalue" href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">noop</a>(borrower), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(acctReserve * 2 + incReserve * 2)));</div>
<div class="line"><a id="l02844" name="l02844"></a><span class="lineno"> 2844</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02845" name="l02845"></a><span class="lineno"> 2845</span> </div>
<div class="line"><a id="l02846" name="l02846"></a><span class="lineno"> 2846</span> <span class="comment">// Cannot create loan, not enough reserve to create trust line</span></div>
<div class="line"><a id="l02847" name="l02847"></a><span class="lineno"> 2847</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02848" name="l02848"></a><span class="lineno"> 2848</span> counterparty(lender),</div>
<div class="line"><a id="l02849" name="l02849"></a><span class="lineno"> 2849</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02850" name="l02850"></a><span class="lineno"> 2850</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l02851" name="l02851"></a><span class="lineno"> 2851</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_LINE_INSUF_RESERVE});</div>
<div class="line"><a id="l02852" name="l02852"></a><span class="lineno"> 2852</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02853" name="l02853"></a><span class="lineno"> 2853</span> </div>
<div class="line"><a id="l02854" name="l02854"></a><span class="lineno"> 2854</span> <span class="comment">// Can create loan now, will implicitly create trust line</span></div>
<div class="line"><a id="l02855" name="l02855"></a><span class="lineno"> 2855</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(incReserve)));</div>
<div class="line"><a id="l02856" name="l02856"></a><span class="lineno"> 2856</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02857" name="l02857"></a><span class="lineno"> 2857</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02858" name="l02858"></a><span class="lineno"> 2858</span> counterparty(lender),</div>
<div class="line"><a id="l02859" name="l02859"></a><span class="lineno"> 2859</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02860" name="l02860"></a><span class="lineno"> 2860</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l02861" name="l02861"></a><span class="lineno"> 2861</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02862" name="l02862"></a><span class="lineno"> 2862</span> </div>
<div class="line"><a id="l02863" name="l02863"></a><span class="lineno"> 2863</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleLine2 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(trustline);</div>
<div class="line"><a id="l02864" name="l02864"></a><span class="lineno"> 2864</span> BEAST_EXPECT(sleLine2 != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02865" name="l02865"></a><span class="lineno"> 2865</span> },</div>
<div class="line"><a id="l02866" name="l02866"></a><span class="lineno"> 2866</span> CaseArgs{.initialXRP = acctReserve * 2 + incReserve * 8 + 1});</div>
<div class="line"><a id="l02867" name="l02867"></a><span class="lineno"> 2867</span> </div>
<div class="line"><a id="l02868" name="l02868"></a><span class="lineno"> 2868</span> testCase(</div>
<div class="line"><a id="l02869" name="l02869"></a><span class="lineno"> 2869</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a>&amp; mptt) {</div>
<div class="line"><a id="l02870" name="l02870"></a><span class="lineno"> 2870</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l02871" name="l02871"></a><span class="lineno"> 2871</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l02872" name="l02872"></a><span class="lineno"> 2872</span> </div>
<div class="line"><a id="l02873" name="l02873"></a><span class="lineno"> 2873</span> testcase(</div>
<div class="line"><a id="l02874" name="l02874"></a><span class="lineno"> 2874</span> <span class="stringliteral">&quot;MPT authorized borrower, borrower submits, lender has &quot;</span></div>
<div class="line"><a id="l02875" name="l02875"></a><span class="lineno"> 2875</span> <span class="stringliteral">&quot;no reserve&quot;</span>);</div>
<div class="line"><a id="l02876" name="l02876"></a><span class="lineno"> 2876</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptoken = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#ab3ec6c5e531adf3b2fbee3a984c3d453">keylet::mptoken</a>(mptt.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a6fbe6f3d9a87ff807153e65068658eab">issuanceID</a>(), lender);</div>
<div class="line"><a id="l02877" name="l02877"></a><span class="lineno"> 2877</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleMPT1 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(mptoken);</div>
<div class="line"><a id="l02878" name="l02878"></a><span class="lineno"> 2878</span> BEAST_EXPECT(sleMPT1 != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02879" name="l02879"></a><span class="lineno"> 2879</span> </div>
<div class="line"><a id="l02880" name="l02880"></a><span class="lineno"> 2880</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(lender, issuer, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(sleMPT1-&gt;at(sfMPTAmount))));</div>
<div class="line"><a id="l02881" name="l02881"></a><span class="lineno"> 2881</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02882" name="l02882"></a><span class="lineno"> 2882</span> </div>
<div class="line"><a id="l02883" name="l02883"></a><span class="lineno"> 2883</span> mptt.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a65c17f9abbed1175a1f3ad608a020494">authorize</a>({.account = lender, .flags = <a class="code hl_variable" href="namespacexrpl.html#aae07b590d51f8a8c8d93dfb4b05b1032">tfMPTUnauthorize</a>});</div>
<div class="line"><a id="l02884" name="l02884"></a><span class="lineno"> 2884</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02885" name="l02885"></a><span class="lineno"> 2885</span> </div>
<div class="line"><a id="l02886" name="l02886"></a><span class="lineno"> 2886</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleMPT2 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(mptoken);</div>
<div class="line"><a id="l02887" name="l02887"></a><span class="lineno"> 2887</span> BEAST_EXPECT(sleMPT2 == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02888" name="l02888"></a><span class="lineno"> 2888</span> </div>
<div class="line"><a id="l02889" name="l02889"></a><span class="lineno"> 2889</span> <span class="comment">// Burn some XRP</span></div>
<div class="line"><a id="l02890" name="l02890"></a><span class="lineno"> 2890</span> env(<a class="code hl_enumvalue" href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">noop</a>(lender), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(incReserve)));</div>
<div class="line"><a id="l02891" name="l02891"></a><span class="lineno"> 2891</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02892" name="l02892"></a><span class="lineno"> 2892</span> </div>
<div class="line"><a id="l02893" name="l02893"></a><span class="lineno"> 2893</span> <span class="comment">// Cannot create loan, not enough reserve to create MPToken</span></div>
<div class="line"><a id="l02894" name="l02894"></a><span class="lineno"> 2894</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02895" name="l02895"></a><span class="lineno"> 2895</span> loanOriginationFee(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1).value()),</div>
<div class="line"><a id="l02896" name="l02896"></a><span class="lineno"> 2896</span> counterparty(lender),</div>
<div class="line"><a id="l02897" name="l02897"></a><span class="lineno"> 2897</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02898" name="l02898"></a><span class="lineno"> 2898</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l02899" name="l02899"></a><span class="lineno"> 2899</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecINSUFFICIENT_RESERVE});</div>
<div class="line"><a id="l02900" name="l02900"></a><span class="lineno"> 2900</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02901" name="l02901"></a><span class="lineno"> 2901</span> </div>
<div class="line"><a id="l02902" name="l02902"></a><span class="lineno"> 2902</span> <span class="comment">// Can create loan now, will implicitly create MPToken</span></div>
<div class="line"><a id="l02903" name="l02903"></a><span class="lineno"> 2903</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(incReserve)));</div>
<div class="line"><a id="l02904" name="l02904"></a><span class="lineno"> 2904</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02905" name="l02905"></a><span class="lineno"> 2905</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02906" name="l02906"></a><span class="lineno"> 2906</span> loanOriginationFee(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1).value()),</div>
<div class="line"><a id="l02907" name="l02907"></a><span class="lineno"> 2907</span> counterparty(lender),</div>
<div class="line"><a id="l02908" name="l02908"></a><span class="lineno"> 2908</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02909" name="l02909"></a><span class="lineno"> 2909</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l02910" name="l02910"></a><span class="lineno"> 2910</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02911" name="l02911"></a><span class="lineno"> 2911</span> </div>
<div class="line"><a id="l02912" name="l02912"></a><span class="lineno"> 2912</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleMPT3 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(mptoken);</div>
<div class="line"><a id="l02913" name="l02913"></a><span class="lineno"> 2913</span> BEAST_EXPECT(sleMPT3 != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02914" name="l02914"></a><span class="lineno"> 2914</span> },</div>
<div class="line"><a id="l02915" name="l02915"></a><span class="lineno"> 2915</span> {},</div>
<div class="line"><a id="l02916" name="l02916"></a><span class="lineno"> 2916</span> CaseArgs{.initialXRP = acctReserve * 2 + incReserve * 8 + 1});</div>
<div class="line"><a id="l02917" name="l02917"></a><span class="lineno"> 2917</span> </div>
<div class="line"><a id="l02918" name="l02918"></a><span class="lineno"> 2918</span> testCase(</div>
<div class="line"><a id="l02919" name="l02919"></a><span class="lineno"> 2919</span> {},</div>
<div class="line"><a id="l02920" name="l02920"></a><span class="lineno"> 2920</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker) {</div>
<div class="line"><a id="l02921" name="l02921"></a><span class="lineno"> 2921</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l02922" name="l02922"></a><span class="lineno"> 2922</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l02923" name="l02923"></a><span class="lineno"> 2923</span> </div>
<div class="line"><a id="l02924" name="l02924"></a><span class="lineno"> 2924</span> testcase(</div>
<div class="line"><a id="l02925" name="l02925"></a><span class="lineno"> 2925</span> <span class="stringliteral">&quot;IOU authorized borrower, borrower submits, lender has no &quot;</span></div>
<div class="line"><a id="l02926" name="l02926"></a><span class="lineno"> 2926</span> <span class="stringliteral">&quot;reserve&quot;</span>);</div>
<div class="line"><a id="l02927" name="l02927"></a><span class="lineno"> 2927</span> <span class="comment">// Remove trust line from lender to issuer</span></div>
<div class="line"><a id="l02928" name="l02928"></a><span class="lineno"> 2928</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac45f1590dafbd296693c57c285f2874b">trust</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(0), lender);</div>
<div class="line"><a id="l02929" name="l02929"></a><span class="lineno"> 2929</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02930" name="l02930"></a><span class="lineno"> 2930</span> </div>
<div class="line"><a id="l02931" name="l02931"></a><span class="lineno"> 2931</span> <span class="keyword">auto</span> <span class="keyword">const</span> trustline = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#aa21a42ef67381b26994fa7a9960b1306">keylet::line</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac5538be33495f6fdd3cd03177b25decf">raw</a>().<a class="code hl_function" href="classxrpl_1_1Asset.html#a42851afbc54def1c41085612f575ca33">get</a>&lt;<a class="code hl_class" href="classxrpl_1_1Issue.html">Issue</a>&gt;());</div>
<div class="line"><a id="l02932" name="l02932"></a><span class="lineno"> 2932</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleLine1 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(trustline);</div>
<div class="line"><a id="l02933" name="l02933"></a><span class="lineno"> 2933</span> BEAST_EXPECT(sleLine1 != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02934" name="l02934"></a><span class="lineno"> 2934</span> </div>
<div class="line"><a id="l02935" name="l02935"></a><span class="lineno"> 2935</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(lender, issuer, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(<a class="code hl_function" href="namespacexrpl.html#ab8c3ab80a860de11f3803c7da500418a">abs</a>(sleLine1-&gt;at(sfBalance).value()))));</div>
<div class="line"><a id="l02936" name="l02936"></a><span class="lineno"> 2936</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02937" name="l02937"></a><span class="lineno"> 2937</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleLine2 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(trustline);</div>
<div class="line"><a id="l02938" name="l02938"></a><span class="lineno"> 2938</span> BEAST_EXPECT(sleLine2 == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02939" name="l02939"></a><span class="lineno"> 2939</span> </div>
<div class="line"><a id="l02940" name="l02940"></a><span class="lineno"> 2940</span> <span class="comment">// Burn some XRP</span></div>
<div class="line"><a id="l02941" name="l02941"></a><span class="lineno"> 2941</span> env(<a class="code hl_enumvalue" href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">noop</a>(lender), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(incReserve)));</div>
<div class="line"><a id="l02942" name="l02942"></a><span class="lineno"> 2942</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02943" name="l02943"></a><span class="lineno"> 2943</span> </div>
<div class="line"><a id="l02944" name="l02944"></a><span class="lineno"> 2944</span> <span class="comment">// Cannot create loan, not enough reserve to create trust line</span></div>
<div class="line"><a id="l02945" name="l02945"></a><span class="lineno"> 2945</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02946" name="l02946"></a><span class="lineno"> 2946</span> loanOriginationFee(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1).value()),</div>
<div class="line"><a id="l02947" name="l02947"></a><span class="lineno"> 2947</span> counterparty(lender),</div>
<div class="line"><a id="l02948" name="l02948"></a><span class="lineno"> 2948</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02949" name="l02949"></a><span class="lineno"> 2949</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l02950" name="l02950"></a><span class="lineno"> 2950</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_LINE_INSUF_RESERVE});</div>
<div class="line"><a id="l02951" name="l02951"></a><span class="lineno"> 2951</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02952" name="l02952"></a><span class="lineno"> 2952</span> </div>
<div class="line"><a id="l02953" name="l02953"></a><span class="lineno"> 2953</span> <span class="comment">// Can create loan now, will implicitly create trust line</span></div>
<div class="line"><a id="l02954" name="l02954"></a><span class="lineno"> 2954</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(incReserve)));</div>
<div class="line"><a id="l02955" name="l02955"></a><span class="lineno"> 2955</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02956" name="l02956"></a><span class="lineno"> 2956</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02957" name="l02957"></a><span class="lineno"> 2957</span> loanOriginationFee(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1).value()),</div>
<div class="line"><a id="l02958" name="l02958"></a><span class="lineno"> 2958</span> counterparty(lender),</div>
<div class="line"><a id="l02959" name="l02959"></a><span class="lineno"> 2959</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02960" name="l02960"></a><span class="lineno"> 2960</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l02961" name="l02961"></a><span class="lineno"> 2961</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02962" name="l02962"></a><span class="lineno"> 2962</span> </div>
<div class="line"><a id="l02963" name="l02963"></a><span class="lineno"> 2963</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleLine3 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(trustline);</div>
<div class="line"><a id="l02964" name="l02964"></a><span class="lineno"> 2964</span> BEAST_EXPECT(sleLine3 != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02965" name="l02965"></a><span class="lineno"> 2965</span> },</div>
<div class="line"><a id="l02966" name="l02966"></a><span class="lineno"> 2966</span> CaseArgs{.initialXRP = acctReserve * 2 + incReserve * 8 + 1});</div>
<div class="line"><a id="l02967" name="l02967"></a><span class="lineno"> 2967</span> </div>
<div class="line"><a id="l02968" name="l02968"></a><span class="lineno"> 2968</span> testCase(</div>
<div class="line"><a id="l02969" name="l02969"></a><span class="lineno"> 2969</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a>&amp; mptt) {</div>
<div class="line"><a id="l02970" name="l02970"></a><span class="lineno"> 2970</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l02971" name="l02971"></a><span class="lineno"> 2971</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l02972" name="l02972"></a><span class="lineno"> 2972</span> </div>
<div class="line"><a id="l02973" name="l02973"></a><span class="lineno"> 2973</span> testcase(<span class="stringliteral">&quot;MPT authorized borrower, unauthorized lender&quot;</span>);</div>
<div class="line"><a id="l02974" name="l02974"></a><span class="lineno"> 2974</span> <span class="keyword">auto</span> <span class="keyword">const</span> mptoken = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#ab3ec6c5e531adf3b2fbee3a984c3d453">keylet::mptoken</a>(mptt.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a6fbe6f3d9a87ff807153e65068658eab">issuanceID</a>(), lender);</div>
<div class="line"><a id="l02975" name="l02975"></a><span class="lineno"> 2975</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleMPT1 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(mptoken);</div>
<div class="line"><a id="l02976" name="l02976"></a><span class="lineno"> 2976</span> BEAST_EXPECT(sleMPT1 != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02977" name="l02977"></a><span class="lineno"> 2977</span> </div>
<div class="line"><a id="l02978" name="l02978"></a><span class="lineno"> 2978</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(lender, issuer, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(sleMPT1-&gt;at(sfMPTAmount))));</div>
<div class="line"><a id="l02979" name="l02979"></a><span class="lineno"> 2979</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02980" name="l02980"></a><span class="lineno"> 2980</span> </div>
<div class="line"><a id="l02981" name="l02981"></a><span class="lineno"> 2981</span> mptt.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a65c17f9abbed1175a1f3ad608a020494">authorize</a>({.account = lender, .flags = <a class="code hl_variable" href="namespacexrpl.html#aae07b590d51f8a8c8d93dfb4b05b1032">tfMPTUnauthorize</a>});</div>
<div class="line"><a id="l02982" name="l02982"></a><span class="lineno"> 2982</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02983" name="l02983"></a><span class="lineno"> 2983</span> </div>
<div class="line"><a id="l02984" name="l02984"></a><span class="lineno"> 2984</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleMPT2 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(mptoken);</div>
<div class="line"><a id="l02985" name="l02985"></a><span class="lineno"> 2985</span> BEAST_EXPECT(sleMPT2 == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l02986" name="l02986"></a><span class="lineno"> 2986</span> </div>
<div class="line"><a id="l02987" name="l02987"></a><span class="lineno"> 2987</span> <span class="comment">// Cannot create loan, lender not authorized to receive fee</span></div>
<div class="line"><a id="l02988" name="l02988"></a><span class="lineno"> 2988</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02989" name="l02989"></a><span class="lineno"> 2989</span> loanOriginationFee(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1).value()),</div>
<div class="line"><a id="l02990" name="l02990"></a><span class="lineno"> 2990</span> counterparty(lender),</div>
<div class="line"><a id="l02991" name="l02991"></a><span class="lineno"> 2991</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l02992" name="l02992"></a><span class="lineno"> 2992</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l02993" name="l02993"></a><span class="lineno"> 2993</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_AUTH});</div>
<div class="line"><a id="l02994" name="l02994"></a><span class="lineno"> 2994</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l02995" name="l02995"></a><span class="lineno"> 2995</span> </div>
<div class="line"><a id="l02996" name="l02996"></a><span class="lineno"> 2996</span> <span class="comment">// Cannot create loan, even without an origination fee</span></div>
<div class="line"><a id="l02997" name="l02997"></a><span class="lineno"> 2997</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l02998" name="l02998"></a><span class="lineno"> 2998</span> counterparty(lender),</div>
<div class="line"><a id="l02999" name="l02999"></a><span class="lineno"> 2999</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l03000" name="l03000"></a><span class="lineno"> 3000</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l03001" name="l03001"></a><span class="lineno"> 3001</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_AUTH});</div>
<div class="line"><a id="l03002" name="l03002"></a><span class="lineno"> 3002</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03003" name="l03003"></a><span class="lineno"> 3003</span> </div>
<div class="line"><a id="l03004" name="l03004"></a><span class="lineno"> 3004</span> <span class="comment">// No MPToken for lender - no authorization and no payment</span></div>
<div class="line"><a id="l03005" name="l03005"></a><span class="lineno"> 3005</span> <span class="keyword">auto</span> <span class="keyword">const</span> sleMPT3 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(mptoken);</div>
<div class="line"><a id="l03006" name="l03006"></a><span class="lineno"> 3006</span> BEAST_EXPECT(sleMPT3 == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l03007" name="l03007"></a><span class="lineno"> 3007</span> },</div>
<div class="line"><a id="l03008" name="l03008"></a><span class="lineno"> 3008</span> {},</div>
<div class="line"><a id="l03009" name="l03009"></a><span class="lineno"> 3009</span> CaseArgs{.requireAuth = <span class="keyword">true</span>, .authorizeBorrower = <span class="keyword">true</span>});</div>
<div class="line"><a id="l03010" name="l03010"></a><span class="lineno"> 3010</span> </div>
<div class="line"><a id="l03011" name="l03011"></a><span class="lineno"> 3011</span> testCase(</div>
<div class="line"><a id="l03012" name="l03012"></a><span class="lineno"> 3012</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <span class="keyword">auto</span>&amp;) {</div>
<div class="line"><a id="l03013" name="l03013"></a><span class="lineno"> 3013</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03014" name="l03014"></a><span class="lineno"> 3014</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03015" name="l03015"></a><span class="lineno"> 3015</span> </div>
<div class="line"><a id="l03016" name="l03016"></a><span class="lineno"> 3016</span> testcase(<span class="stringliteral">&quot;MPT authorized borrower, borrower submits&quot;</span>);</div>
<div class="line"><a id="l03017" name="l03017"></a><span class="lineno"> 3017</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03018" name="l03018"></a><span class="lineno"> 3018</span> counterparty(lender),</div>
<div class="line"><a id="l03019" name="l03019"></a><span class="lineno"> 3019</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l03020" name="l03020"></a><span class="lineno"> 3020</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l03021" name="l03021"></a><span class="lineno"> 3021</span> },</div>
<div class="line"><a id="l03022" name="l03022"></a><span class="lineno"> 3022</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker) {</div>
<div class="line"><a id="l03023" name="l03023"></a><span class="lineno"> 3023</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03024" name="l03024"></a><span class="lineno"> 3024</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03025" name="l03025"></a><span class="lineno"> 3025</span> </div>
<div class="line"><a id="l03026" name="l03026"></a><span class="lineno"> 3026</span> testcase(<span class="stringliteral">&quot;IOU authorized borrower, borrower submits&quot;</span>);</div>
<div class="line"><a id="l03027" name="l03027"></a><span class="lineno"> 3027</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03028" name="l03028"></a><span class="lineno"> 3028</span> counterparty(lender),</div>
<div class="line"><a id="l03029" name="l03029"></a><span class="lineno"> 3029</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l03030" name="l03030"></a><span class="lineno"> 3030</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l03031" name="l03031"></a><span class="lineno"> 3031</span> },</div>
<div class="line"><a id="l03032" name="l03032"></a><span class="lineno"> 3032</span> CaseArgs{.requireAuth = <span class="keyword">true</span>, .authorizeBorrower = <span class="keyword">true</span>});</div>
<div class="line"><a id="l03033" name="l03033"></a><span class="lineno"> 3033</span> </div>
<div class="line"><a id="l03034" name="l03034"></a><span class="lineno"> 3034</span> testCase(</div>
<div class="line"><a id="l03035" name="l03035"></a><span class="lineno"> 3035</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <span class="keyword">auto</span>&amp;) {</div>
<div class="line"><a id="l03036" name="l03036"></a><span class="lineno"> 3036</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03037" name="l03037"></a><span class="lineno"> 3037</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03038" name="l03038"></a><span class="lineno"> 3038</span> </div>
<div class="line"><a id="l03039" name="l03039"></a><span class="lineno"> 3039</span> testcase(<span class="stringliteral">&quot;MPT authorized borrower, lender submits&quot;</span>);</div>
<div class="line"><a id="l03040" name="l03040"></a><span class="lineno"> 3040</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03041" name="l03041"></a><span class="lineno"> 3041</span> counterparty(borrower),</div>
<div class="line"><a id="l03042" name="l03042"></a><span class="lineno"> 3042</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l03043" name="l03043"></a><span class="lineno"> 3043</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l03044" name="l03044"></a><span class="lineno"> 3044</span> },</div>
<div class="line"><a id="l03045" name="l03045"></a><span class="lineno"> 3045</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker) {</div>
<div class="line"><a id="l03046" name="l03046"></a><span class="lineno"> 3046</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03047" name="l03047"></a><span class="lineno"> 3047</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03048" name="l03048"></a><span class="lineno"> 3048</span> </div>
<div class="line"><a id="l03049" name="l03049"></a><span class="lineno"> 3049</span> testcase(<span class="stringliteral">&quot;IOU authorized borrower, lender submits&quot;</span>);</div>
<div class="line"><a id="l03050" name="l03050"></a><span class="lineno"> 3050</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03051" name="l03051"></a><span class="lineno"> 3051</span> counterparty(borrower),</div>
<div class="line"><a id="l03052" name="l03052"></a><span class="lineno"> 3052</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l03053" name="l03053"></a><span class="lineno"> 3053</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l03054" name="l03054"></a><span class="lineno"> 3054</span> },</div>
<div class="line"><a id="l03055" name="l03055"></a><span class="lineno"> 3055</span> CaseArgs{.requireAuth = <span class="keyword">true</span>, .authorizeBorrower = <span class="keyword">true</span>});</div>
<div class="line"><a id="l03056" name="l03056"></a><span class="lineno"> 3056</span> </div>
<div class="line"><a id="l03057" name="l03057"></a><span class="lineno"> 3057</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a id="l03058" name="l03058"></a><span class="lineno"> 3058</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span> bella{<span class="stringliteral">&quot;bella&quot;</span>};</div>
<div class="line"><a id="l03059" name="l03059"></a><span class="lineno"> 3059</span> <span class="keyword">auto</span> <span class="keyword">const</span> msigSetup = [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; account) {</div>
<div class="line"><a id="l03060" name="l03060"></a><span class="lineno"> 3060</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> tx1 = <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3e1f4901e4bbcfed8fc80c31c2deda92">signers</a>(account, 2, {{alice, 1}, {bella, 1}});</div>
<div class="line"><a id="l03061" name="l03061"></a><span class="lineno"> 3061</span> env(tx1);</div>
<div class="line"><a id="l03062" name="l03062"></a><span class="lineno"> 3062</span> env.close();</div>
<div class="line"><a id="l03063" name="l03063"></a><span class="lineno"> 3063</span> };</div>
<div class="line"><a id="l03064" name="l03064"></a><span class="lineno"> 3064</span> </div>
<div class="line"><a id="l03065" name="l03065"></a><span class="lineno"> 3065</span> testCase(</div>
<div class="line"><a id="l03066" name="l03066"></a><span class="lineno"> 3066</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <span class="keyword">auto</span>&amp;) {</div>
<div class="line"><a id="l03067" name="l03067"></a><span class="lineno"> 3067</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03068" name="l03068"></a><span class="lineno"> 3068</span> msigSetup(env, lender);</div>
<div class="line"><a id="l03069" name="l03069"></a><span class="lineno"> 3069</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03070" name="l03070"></a><span class="lineno"> 3070</span> </div>
<div class="line"><a id="l03071" name="l03071"></a><span class="lineno"> 3071</span> testcase(</div>
<div class="line"><a id="l03072" name="l03072"></a><span class="lineno"> 3072</span> <span class="stringliteral">&quot;MPT authorized borrower, borrower submits, lender &quot;</span></div>
<div class="line"><a id="l03073" name="l03073"></a><span class="lineno"> 3073</span> <span class="stringliteral">&quot;multisign&quot;</span>);</div>
<div class="line"><a id="l03074" name="l03074"></a><span class="lineno"> 3074</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03075" name="l03075"></a><span class="lineno"> 3075</span> counterparty(lender),</div>
<div class="line"><a id="l03076" name="l03076"></a><span class="lineno"> 3076</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(sfCounterpartySignature, alice, bella),</div>
<div class="line"><a id="l03077" name="l03077"></a><span class="lineno"> 3077</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l03078" name="l03078"></a><span class="lineno"> 3078</span> },</div>
<div class="line"><a id="l03079" name="l03079"></a><span class="lineno"> 3079</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker) {</div>
<div class="line"><a id="l03080" name="l03080"></a><span class="lineno"> 3080</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03081" name="l03081"></a><span class="lineno"> 3081</span> msigSetup(env, lender);</div>
<div class="line"><a id="l03082" name="l03082"></a><span class="lineno"> 3082</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03083" name="l03083"></a><span class="lineno"> 3083</span> </div>
<div class="line"><a id="l03084" name="l03084"></a><span class="lineno"> 3084</span> testcase(</div>
<div class="line"><a id="l03085" name="l03085"></a><span class="lineno"> 3085</span> <span class="stringliteral">&quot;IOU authorized borrower, borrower submits, lender &quot;</span></div>
<div class="line"><a id="l03086" name="l03086"></a><span class="lineno"> 3086</span> <span class="stringliteral">&quot;multisign&quot;</span>);</div>
<div class="line"><a id="l03087" name="l03087"></a><span class="lineno"> 3087</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03088" name="l03088"></a><span class="lineno"> 3088</span> counterparty(lender),</div>
<div class="line"><a id="l03089" name="l03089"></a><span class="lineno"> 3089</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(sfCounterpartySignature, alice, bella),</div>
<div class="line"><a id="l03090" name="l03090"></a><span class="lineno"> 3090</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l03091" name="l03091"></a><span class="lineno"> 3091</span> },</div>
<div class="line"><a id="l03092" name="l03092"></a><span class="lineno"> 3092</span> CaseArgs{.requireAuth = <span class="keyword">true</span>, .authorizeBorrower = <span class="keyword">true</span>});</div>
<div class="line"><a id="l03093" name="l03093"></a><span class="lineno"> 3093</span> </div>
<div class="line"><a id="l03094" name="l03094"></a><span class="lineno"> 3094</span> testCase(</div>
<div class="line"><a id="l03095" name="l03095"></a><span class="lineno"> 3095</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <span class="keyword">auto</span>&amp;) {</div>
<div class="line"><a id="l03096" name="l03096"></a><span class="lineno"> 3096</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03097" name="l03097"></a><span class="lineno"> 3097</span> msigSetup(env, borrower);</div>
<div class="line"><a id="l03098" name="l03098"></a><span class="lineno"> 3098</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03099" name="l03099"></a><span class="lineno"> 3099</span> </div>
<div class="line"><a id="l03100" name="l03100"></a><span class="lineno"> 3100</span> testcase(</div>
<div class="line"><a id="l03101" name="l03101"></a><span class="lineno"> 3101</span> <span class="stringliteral">&quot;MPT authorized borrower, lender submits, borrower &quot;</span></div>
<div class="line"><a id="l03102" name="l03102"></a><span class="lineno"> 3102</span> <span class="stringliteral">&quot;multisign&quot;</span>);</div>
<div class="line"><a id="l03103" name="l03103"></a><span class="lineno"> 3103</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03104" name="l03104"></a><span class="lineno"> 3104</span> counterparty(borrower),</div>
<div class="line"><a id="l03105" name="l03105"></a><span class="lineno"> 3105</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(sfCounterpartySignature, alice, bella),</div>
<div class="line"><a id="l03106" name="l03106"></a><span class="lineno"> 3106</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l03107" name="l03107"></a><span class="lineno"> 3107</span> },</div>
<div class="line"><a id="l03108" name="l03108"></a><span class="lineno"> 3108</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker) {</div>
<div class="line"><a id="l03109" name="l03109"></a><span class="lineno"> 3109</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03110" name="l03110"></a><span class="lineno"> 3110</span> msigSetup(env, borrower);</div>
<div class="line"><a id="l03111" name="l03111"></a><span class="lineno"> 3111</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03112" name="l03112"></a><span class="lineno"> 3112</span> </div>
<div class="line"><a id="l03113" name="l03113"></a><span class="lineno"> 3113</span> testcase(</div>
<div class="line"><a id="l03114" name="l03114"></a><span class="lineno"> 3114</span> <span class="stringliteral">&quot;IOU authorized borrower, lender submits, borrower &quot;</span></div>
<div class="line"><a id="l03115" name="l03115"></a><span class="lineno"> 3115</span> <span class="stringliteral">&quot;multisign&quot;</span>);</div>
<div class="line"><a id="l03116" name="l03116"></a><span class="lineno"> 3116</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03117" name="l03117"></a><span class="lineno"> 3117</span> counterparty(borrower),</div>
<div class="line"><a id="l03118" name="l03118"></a><span class="lineno"> 3118</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1msig.html">msig</a>(sfCounterpartySignature, alice, bella),</div>
<div class="line"><a id="l03119" name="l03119"></a><span class="lineno"> 3119</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5));</div>
<div class="line"><a id="l03120" name="l03120"></a><span class="lineno"> 3120</span> },</div>
<div class="line"><a id="l03121" name="l03121"></a><span class="lineno"> 3121</span> CaseArgs{.requireAuth = <span class="keyword">true</span>, .authorizeBorrower = <span class="keyword">true</span>});</div>
<div class="line"><a id="l03122" name="l03122"></a><span class="lineno"> 3122</span> </div>
<div class="line"><a id="l03123" name="l03123"></a><span class="lineno"> 3123</span> testCase(</div>
<div class="line"><a id="l03124" name="l03124"></a><span class="lineno"> 3124</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <span class="keyword">auto</span>&amp;) {</div>
<div class="line"><a id="l03125" name="l03125"></a><span class="lineno"> 3125</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03126" name="l03126"></a><span class="lineno"> 3126</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03127" name="l03127"></a><span class="lineno"> 3127</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1Vault.html">Vault</a> vault{env};</div>
<div class="line"><a id="l03128" name="l03128"></a><span class="lineno"> 3128</span> <span class="keyword">auto</span> tx = vault.set({.owner = lender, .<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#aefcff537de98b56ea2f59a9b618cd246">id</a> = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#a8c0c0c0e8fb2481108157ce6539f5cff">vaultID</a>});</div>
<div class="line"><a id="l03129" name="l03129"></a><span class="lineno"> 3129</span> tx[sfAssetsMaximum] = BrokerParameters::defaults().vaultDeposit;</div>
<div class="line"><a id="l03130" name="l03130"></a><span class="lineno"> 3130</span> env(tx);</div>
<div class="line"><a id="l03131" name="l03131"></a><span class="lineno"> 3131</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03132" name="l03132"></a><span class="lineno"> 3132</span> </div>
<div class="line"><a id="l03133" name="l03133"></a><span class="lineno"> 3133</span> testcase(<span class="stringliteral">&quot;Vault at maximum value&quot;</span>);</div>
<div class="line"><a id="l03134" name="l03134"></a><span class="lineno"> 3134</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(issuer, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03135" name="l03135"></a><span class="lineno"> 3135</span> counterparty(lender),</div>
<div class="line"><a id="l03136" name="l03136"></a><span class="lineno"> 3136</span> interestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(10&#39;000)),</div>
<div class="line"><a id="l03137" name="l03137"></a><span class="lineno"> 3137</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l03138" name="l03138"></a><span class="lineno"> 3138</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l03139" name="l03139"></a><span class="lineno"> 3139</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae42e73dd030a94b926594ff177bb6c90">tecLIMIT_EXCEEDED</a>),</div>
<div class="line"><a id="l03140" name="l03140"></a><span class="lineno"> 3140</span> THISLINE);</div>
<div class="line"><a id="l03141" name="l03141"></a><span class="lineno"> 3141</span> },</div>
<div class="line"><a id="l03142" name="l03142"></a><span class="lineno"> 3142</span> <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l03143" name="l03143"></a><span class="lineno"> 3143</span> </div>
<div class="line"><a id="l03144" name="l03144"></a><span class="lineno"> 3144</span> testCase(</div>
<div class="line"><a id="l03145" name="l03145"></a><span class="lineno"> 3145</span> [&amp;, <span class="keyword">this</span>](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; broker, <span class="keyword">auto</span>&amp;) {</div>
<div class="line"><a id="l03146" name="l03146"></a><span class="lineno"> 3146</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03147" name="l03147"></a><span class="lineno"> 3147</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1&#39;000).value();</div>
<div class="line"><a id="l03148" name="l03148"></a><span class="lineno"> 3148</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1Vault.html">Vault</a> vault{env};</div>
<div class="line"><a id="l03149" name="l03149"></a><span class="lineno"> 3149</span> <span class="keyword">auto</span> tx = vault.set({.owner = lender, .<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#aefcff537de98b56ea2f59a9b618cd246">id</a> = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#a8c0c0c0e8fb2481108157ce6539f5cff">vaultID</a>});</div>
<div class="line"><a id="l03150" name="l03150"></a><span class="lineno"> 3150</span> tx[sfAssetsMaximum] = BrokerParameters::defaults().vaultDeposit + broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1).number();</div>
<div class="line"><a id="l03151" name="l03151"></a><span class="lineno"> 3151</span> env(tx);</div>
<div class="line"><a id="l03152" name="l03152"></a><span class="lineno"> 3152</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03153" name="l03153"></a><span class="lineno"> 3153</span> </div>
<div class="line"><a id="l03154" name="l03154"></a><span class="lineno"> 3154</span> testcase(<span class="stringliteral">&quot;Vault maximum value exceeded&quot;</span>);</div>
<div class="line"><a id="l03155" name="l03155"></a><span class="lineno"> 3155</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(issuer, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03156" name="l03156"></a><span class="lineno"> 3156</span> counterparty(lender),</div>
<div class="line"><a id="l03157" name="l03157"></a><span class="lineno"> 3157</span> interestRate(<a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>(100&#39;000)),</div>
<div class="line"><a id="l03158" name="l03158"></a><span class="lineno"> 3158</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l03159" name="l03159"></a><span class="lineno"> 3159</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 5),</div>
<div class="line"><a id="l03160" name="l03160"></a><span class="lineno"> 3160</span> paymentTotal(2),</div>
<div class="line"><a id="l03161" name="l03161"></a><span class="lineno"> 3161</span> paymentInterval(3600 * 24),</div>
<div class="line"><a id="l03162" name="l03162"></a><span class="lineno"> 3162</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae42e73dd030a94b926594ff177bb6c90">tecLIMIT_EXCEEDED</a>),</div>
<div class="line"><a id="l03163" name="l03163"></a><span class="lineno"> 3163</span> THISLINE);</div>
<div class="line"><a id="l03164" name="l03164"></a><span class="lineno"> 3164</span> },</div>
<div class="line"><a id="l03165" name="l03165"></a><span class="lineno"> 3165</span> <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l03166" name="l03166"></a><span class="lineno"> 3166</span> }</div>
</div>
<div class="line"><a id="l03167" name="l03167"></a><span class="lineno"> 3167</span> </div>
<div class="line"><a id="l03168" name="l03168"></a><span class="lineno"> 3168</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen03169" data-start="{" data-end="}">
<div class="line"><a id="l03169" name="l03169"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a528a59a9d585bd417f9b0cd20a9068cb"> 3169</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a528a59a9d585bd417f9b0cd20a9068cb">testLifecycle</a>()</div>
<div class="line"><a id="l03170" name="l03170"></a><span class="lineno"> 3170</span> {</div>
<div class="line"><a id="l03171" name="l03171"></a><span class="lineno"> 3171</span> testcase(<span class="stringliteral">&quot;Lifecycle&quot;</span>);</div>
<div class="line"><a id="l03172" name="l03172"></a><span class="lineno"> 3172</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l03173" name="l03173"></a><span class="lineno"> 3173</span> </div>
<div class="line"><a id="l03174" name="l03174"></a><span class="lineno"> 3174</span> <span class="comment">// Create 3 loan brokers: one for XRP, one for an IOU, and one for</span></div>
<div class="line"><a id="l03175" name="l03175"></a><span class="lineno"> 3175</span> <span class="comment">// an MPT. That&#39;ll require three corresponding SAVs.</span></div>
<div class="line"><a id="l03176" name="l03176"></a><span class="lineno"> 3176</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l03177" name="l03177"></a><span class="lineno"> 3177</span> </div>
<div class="line"><a id="l03178" name="l03178"></a><span class="lineno"> 3178</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l03179" name="l03179"></a><span class="lineno"> 3179</span> <span class="comment">// For simplicity, lender will be the sole actor for the vault &amp;</span></div>
<div class="line"><a id="l03180" name="l03180"></a><span class="lineno"> 3180</span> <span class="comment">// brokers.</span></div>
<div class="line"><a id="l03181" name="l03181"></a><span class="lineno"> 3181</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l03182" name="l03182"></a><span class="lineno"> 3182</span> <span class="comment">// Borrower only wants to borrow</span></div>
<div class="line"><a id="l03183" name="l03183"></a><span class="lineno"> 3183</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l03184" name="l03184"></a><span class="lineno"> 3184</span> <span class="comment">// Evan will attempt to be naughty</span></div>
<div class="line"><a id="l03185" name="l03185"></a><span class="lineno"> 3185</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> evan{<span class="stringliteral">&quot;evan&quot;</span>};</div>
<div class="line"><a id="l03186" name="l03186"></a><span class="lineno"> 3186</span> <span class="comment">// Do not fund alice</span></div>
<div class="line"><a id="l03187" name="l03187"></a><span class="lineno"> 3187</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a id="l03188" name="l03188"></a><span class="lineno"> 3188</span> </div>
<div class="line"><a id="l03189" name="l03189"></a><span class="lineno"> 3189</span> <span class="comment">// Fund the accounts and trust lines with the same amount so that</span></div>
<div class="line"><a id="l03190" name="l03190"></a><span class="lineno"> 3190</span> <span class="comment">// tests can use the same values regardless of the asset.</span></div>
<div class="line"><a id="l03191" name="l03191"></a><span class="lineno"> 3191</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100&#39;000&#39;000), issuer, <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367af34d3a138958b0d338875bb910a39cf6">noripple</a>(lender, borrower, evan));</div>
<div class="line"><a id="l03192" name="l03192"></a><span class="lineno"> 3192</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03193" name="l03193"></a><span class="lineno"> 3193</span> </div>
<div class="line"><a id="l03194" name="l03194"></a><span class="lineno"> 3194</span> <span class="comment">// Create assets</span></div>
<div class="line"><a id="l03195" name="l03195"></a><span class="lineno"> 3195</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> xrpAsset{<a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>(), 1&#39;000&#39;000};</div>
<div class="line"><a id="l03196" name="l03196"></a><span class="lineno"> 3196</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> iouAsset = issuer[iouCurrency];</div>
<div class="line"><a id="l03197" name="l03197"></a><span class="lineno"> 3197</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(lender, iouAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l03198" name="l03198"></a><span class="lineno"> 3198</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(borrower, iouAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l03199" name="l03199"></a><span class="lineno"> 3199</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(evan, iouAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l03200" name="l03200"></a><span class="lineno"> 3200</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, evan, iouAsset(1&#39;000&#39;000)));</div>
<div class="line"><a id="l03201" name="l03201"></a><span class="lineno"> 3201</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, iouAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l03202" name="l03202"></a><span class="lineno"> 3202</span> <span class="comment">// Fund the borrower with enough to cover interest and fees</span></div>
<div class="line"><a id="l03203" name="l03203"></a><span class="lineno"> 3203</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, iouAsset(10&#39;000)));</div>
<div class="line"><a id="l03204" name="l03204"></a><span class="lineno"> 3204</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03205" name="l03205"></a><span class="lineno"> 3205</span> </div>
<div class="line"><a id="l03206" name="l03206"></a><span class="lineno"> 3206</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptt{env, issuer, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a03b59a84add36087c1a9e344e8dfadf2">mptInitNoFund</a>};</div>
<div class="line"><a id="l03207" name="l03207"></a><span class="lineno"> 3207</span> mptt.<a class="code hl_variable" href="structxrpl_1_1test_1_1jtx_1_1MPTInit.html#a08696ed27a22a208272f4bd1883752e5">create</a>({.flags = <a class="code hl_variable" href="namespacexrpl.html#a843e5f9ce3b55788961db32fffb753d1">tfMPTCanClawback</a> | <a class="code hl_variable" href="namespacexrpl.html#a25a16d1e4a00f49801b8f6fd16da0459">tfMPTCanTransfer</a> | <a class="code hl_variable" href="namespacexrpl.html#a75a6d6ab0752128773a7c28ec32fa5d1">tfMPTCanLock</a>});</div>
<div class="line"><a id="l03208" name="l03208"></a><span class="lineno"> 3208</span> <span class="comment">// Scale the MPT asset a little bit so we can get some interest</span></div>
<div class="line"><a id="l03209" name="l03209"></a><span class="lineno"> 3209</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> mptAsset{mptt.issuanceID(), 100};</div>
<div class="line"><a id="l03210" name="l03210"></a><span class="lineno"> 3210</span> mptt.authorize({.account = lender});</div>
<div class="line"><a id="l03211" name="l03211"></a><span class="lineno"> 3211</span> mptt.authorize({.account = borrower});</div>
<div class="line"><a id="l03212" name="l03212"></a><span class="lineno"> 3212</span> mptt.authorize({.account = evan});</div>
<div class="line"><a id="l03213" name="l03213"></a><span class="lineno"> 3213</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, mptAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l03214" name="l03214"></a><span class="lineno"> 3214</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, evan, mptAsset(1&#39;000&#39;000)));</div>
<div class="line"><a id="l03215" name="l03215"></a><span class="lineno"> 3215</span> <span class="comment">// Fund the borrower with enough to cover interest and fees</span></div>
<div class="line"><a id="l03216" name="l03216"></a><span class="lineno"> 3216</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, mptAsset(10&#39;000)));</div>
<div class="line"><a id="l03217" name="l03217"></a><span class="lineno"> 3217</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03218" name="l03218"></a><span class="lineno"> 3218</span> </div>
<div class="line"><a id="l03219" name="l03219"></a><span class="lineno"> 3219</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a> <span class="keyword">const</span> assets{iouAsset, xrpAsset, mptAsset};</div>
<div class="line"><a id="l03220" name="l03220"></a><span class="lineno"> 3220</span> </div>
<div class="line"><a id="l03221" name="l03221"></a><span class="lineno"> 3221</span> <span class="comment">// Create vaults and loan brokers</span></div>
<div class="line"><a id="l03222" name="l03222"></a><span class="lineno"> 3222</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;BrokerInfo&gt;</a> brokers;</div>
<div class="line"><a id="l03223" name="l03223"></a><span class="lineno"> 3223</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; asset : assets)</div>
<div class="line"><a id="l03224" name="l03224"></a><span class="lineno"> 3224</span> {</div>
<div class="line"><a id="l03225" name="l03225"></a><span class="lineno"> 3225</span> brokers.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/emplace_back.html">emplace_back</a>(</div>
<div class="line"><a id="l03226" name="l03226"></a><span class="lineno"> 3226</span> createVaultAndBroker(env, asset, lender, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a>{.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a13b6cc2777f0ca3d71642f68e5baa3ee">data</a> = <span class="stringliteral">&quot;spam spam spam spam&quot;</span>}));</div>
<div class="line"><a id="l03227" name="l03227"></a><span class="lineno"> 3227</span> }</div>
<div class="line"><a id="l03228" name="l03228"></a><span class="lineno"> 3228</span> </div>
<div class="line"><a id="l03229" name="l03229"></a><span class="lineno"> 3229</span> <span class="comment">// Create and update Loans</span></div>
<div class="line"><a id="l03230" name="l03230"></a><span class="lineno"> 3230</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; broker : brokers)</div>
<div class="line"><a id="l03231" name="l03231"></a><span class="lineno"> 3231</span> {</div>
<div class="line"><a id="l03232" name="l03232"></a><span class="lineno"> 3232</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> amountExponent = 3; amountExponent &gt;= 3; --amountExponent)</div>
<div class="line"><a id="l03233" name="l03233"></a><span class="lineno"> 3233</span> {</div>
<div class="line"><a id="l03234" name="l03234"></a><span class="lineno"> 3234</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> loanAmount{1, amountExponent};</div>
<div class="line"><a id="l03235" name="l03235"></a><span class="lineno"> 3235</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> interestExponent = 0; interestExponent &gt;= 0; --interestExponent)</div>
<div class="line"><a id="l03236" name="l03236"></a><span class="lineno"> 3236</span> {</div>
<div class="line"><a id="l03237" name="l03237"></a><span class="lineno"> 3237</span> testCaseWrapper(env, mptt, assets, broker, loanAmount, interestExponent);</div>
<div class="line"><a id="l03238" name="l03238"></a><span class="lineno"> 3238</span> }</div>
<div class="line"><a id="l03239" name="l03239"></a><span class="lineno"> 3239</span> }</div>
<div class="line"><a id="l03240" name="l03240"></a><span class="lineno"> 3240</span> </div>
<div class="line"><a id="l03241" name="l03241"></a><span class="lineno"> 3241</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l03242" name="l03242"></a><span class="lineno"> 3242</span> {</div>
<div class="line"><a id="l03243" name="l03243"></a><span class="lineno"> 3243</span> BEAST_EXPECT(brokerSle-&gt;at(sfOwnerCount) == 0);</div>
<div class="line"><a id="l03244" name="l03244"></a><span class="lineno"> 3244</span> BEAST_EXPECT(brokerSle-&gt;at(sfDebtTotal) == 0);</div>
<div class="line"><a id="l03245" name="l03245"></a><span class="lineno"> 3245</span> </div>
<div class="line"><a id="l03246" name="l03246"></a><span class="lineno"> 3246</span> <span class="keyword">auto</span> <span class="keyword">const</span> coverAvailable = brokerSle-&gt;at(sfCoverAvailable);</div>
<div class="line"><a id="l03247" name="l03247"></a><span class="lineno"> 3247</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a308f75c4b54a6dfaa98789c892183eb8">loanBroker::coverWithdraw</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, coverAvailable)));</div>
<div class="line"><a id="l03248" name="l03248"></a><span class="lineno"> 3248</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03249" name="l03249"></a><span class="lineno"> 3249</span> </div>
<div class="line"><a id="l03250" name="l03250"></a><span class="lineno"> 3250</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l03251" name="l03251"></a><span class="lineno"> 3251</span> BEAST_EXPECT(brokerSle &amp;&amp; brokerSle-&gt;at(sfCoverAvailable) == 0);</div>
<div class="line"><a id="l03252" name="l03252"></a><span class="lineno"> 3252</span> }</div>
<div class="line"><a id="l03253" name="l03253"></a><span class="lineno"> 3253</span> <span class="comment">// Verify we can delete the loan broker</span></div>
<div class="line"><a id="l03254" name="l03254"></a><span class="lineno"> 3254</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a356a504c7d6a431398e71e9b121fb087">loanBroker::del</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l03255" name="l03255"></a><span class="lineno"> 3255</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03256" name="l03256"></a><span class="lineno"> 3256</span> }</div>
<div class="line"><a id="l03257" name="l03257"></a><span class="lineno"> 3257</span> }</div>
</div>
<div class="line"><a id="l03258" name="l03258"></a><span class="lineno"> 3258</span> </div>
<div class="line"><a id="l03259" name="l03259"></a><span class="lineno"> 3259</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen03260" data-start="{" data-end="}">
<div class="line"><a id="l03260" name="l03260"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a9faf01273184bf4a1a5741e1e44e6eb2"> 3260</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a9faf01273184bf4a1a5741e1e44e6eb2">testSelfLoan</a>()</div>
<div class="line"><a id="l03261" name="l03261"></a><span class="lineno"> 3261</span> {</div>
<div class="line"><a id="l03262" name="l03262"></a><span class="lineno"> 3262</span> testcase &lt;&lt; <span class="stringliteral">&quot;Self Loan&quot;</span>;</div>
<div class="line"><a id="l03263" name="l03263"></a><span class="lineno"> 3263</span> </div>
<div class="line"><a id="l03264" name="l03264"></a><span class="lineno"> 3264</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l03265" name="l03265"></a><span class="lineno"> 3265</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l03266" name="l03266"></a><span class="lineno"> 3266</span> <span class="comment">// Create 3 loan brokers: one for XRP, one for an IOU, and one for</span></div>
<div class="line"><a id="l03267" name="l03267"></a><span class="lineno"> 3267</span> <span class="comment">// an MPT. That&#39;ll require three corresponding SAVs.</span></div>
<div class="line"><a id="l03268" name="l03268"></a><span class="lineno"> 3268</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l03269" name="l03269"></a><span class="lineno"> 3269</span> </div>
<div class="line"><a id="l03270" name="l03270"></a><span class="lineno"> 3270</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l03271" name="l03271"></a><span class="lineno"> 3271</span> <span class="comment">// For simplicity, lender will be the sole actor for the vault &amp;</span></div>
<div class="line"><a id="l03272" name="l03272"></a><span class="lineno"> 3272</span> <span class="comment">// brokers.</span></div>
<div class="line"><a id="l03273" name="l03273"></a><span class="lineno"> 3273</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l03274" name="l03274"></a><span class="lineno"> 3274</span> </div>
<div class="line"><a id="l03275" name="l03275"></a><span class="lineno"> 3275</span> <span class="comment">// Fund the accounts and trust lines with the same amount so that</span></div>
<div class="line"><a id="l03276" name="l03276"></a><span class="lineno"> 3276</span> <span class="comment">// tests can use the same values regardless of the asset.</span></div>
<div class="line"><a id="l03277" name="l03277"></a><span class="lineno"> 3277</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100&#39;000&#39;000), issuer, <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367af34d3a138958b0d338875bb910a39cf6">noripple</a>(lender));</div>
<div class="line"><a id="l03278" name="l03278"></a><span class="lineno"> 3278</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03279" name="l03279"></a><span class="lineno"> 3279</span> </div>
<div class="line"><a id="l03280" name="l03280"></a><span class="lineno"> 3280</span> <span class="comment">// Use an XRP asset for simplicity</span></div>
<div class="line"><a id="l03281" name="l03281"></a><span class="lineno"> 3281</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> xrpAsset{<a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>(), 1&#39;000&#39;000};</div>
<div class="line"><a id="l03282" name="l03282"></a><span class="lineno"> 3282</span> </div>
<div class="line"><a id="l03283" name="l03283"></a><span class="lineno"> 3283</span> <span class="comment">// Create vaults and loan brokers</span></div>
<div class="line"><a id="l03284" name="l03284"></a><span class="lineno"> 3284</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, xrpAsset, lender)};</div>
<div class="line"><a id="l03285" name="l03285"></a><span class="lineno"> 3285</span> </div>
<div class="line"><a id="l03286" name="l03286"></a><span class="lineno"> 3286</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03287" name="l03287"></a><span class="lineno"> 3287</span> </div>
<div class="line"><a id="l03288" name="l03288"></a><span class="lineno"> 3288</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l03289" name="l03289"></a><span class="lineno"> 3289</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{1, 3};</div>
<div class="line"><a id="l03290" name="l03290"></a><span class="lineno"> 3290</span> </div>
<div class="line"><a id="l03291" name="l03291"></a><span class="lineno"> 3291</span> <span class="comment">// The LoanSet json can be created without a counterparty signature,</span></div>
<div class="line"><a id="l03292" name="l03292"></a><span class="lineno"> 3292</span> <span class="comment">// but it will not pass preflight</span></div>
<div class="line"><a id="l03293" name="l03293"></a><span class="lineno"> 3293</span> <span class="keyword">auto</span> createJson =</div>
<div class="line"><a id="l03294" name="l03294"></a><span class="lineno"> 3294</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(principalRequest).value()), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee));</div>
<div class="line"><a id="l03295" name="l03295"></a><span class="lineno"> 3295</span> env(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6ae6a0e0bf6dadc6ffbf80026872cc5a8e">temBAD_SIGNER</a>));</div>
<div class="line"><a id="l03296" name="l03296"></a><span class="lineno"> 3296</span> </div>
<div class="line"><a id="l03297" name="l03297"></a><span class="lineno"> 3297</span> <span class="comment">// Adding an empty counterparty signature object also fails, but</span></div>
<div class="line"><a id="l03298" name="l03298"></a><span class="lineno"> 3298</span> <span class="comment">// at the RPC level.</span></div>
<div class="line"><a id="l03299" name="l03299"></a><span class="lineno"> 3299</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l03300" name="l03300"></a><span class="lineno"> 3300</span> env(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a09be2aabc0ac5f377a30d0e35dab0aeea5e860f0b1cf95c1a5e1b88ea9aae8d52">telENV_RPC_FAILED</a>));</div>
<div class="line"><a id="l03301" name="l03301"></a><span class="lineno"> 3301</span> </div>
<div class="line"><a id="l03302" name="l03302"></a><span class="lineno"> 3302</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> jt = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(createJson); BEAST_EXPECT(jt.stx))</div>
<div class="line"><a id="l03303" name="l03303"></a><span class="lineno"> 3303</span> {</div>
<div class="line"><a id="l03304" name="l03304"></a><span class="lineno"> 3304</span> <a class="code hl_class" href="classxrpl_1_1Serializer.html">Serializer</a> s;</div>
<div class="line"><a id="l03305" name="l03305"></a><span class="lineno"> 3305</span> jt.stx-&gt;add(s);</div>
<div class="line"><a id="l03306" name="l03306"></a><span class="lineno"> 3306</span> <span class="keyword">auto</span> <span class="keyword">const</span> jr = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;submit&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a36b95700599f590017b5912e220baf5b">strHex</a>(s.<a class="code hl_function" href="classxrpl_1_1Serializer.html#a9fdb78b3d7b575806292496989bd138a">slice</a>()));</div>
<div class="line"><a id="l03307" name="l03307"></a><span class="lineno"> 3307</span> </div>
<div class="line"><a id="l03308" name="l03308"></a><span class="lineno"> 3308</span> BEAST_EXPECT(jr.isMember(jss::result));</div>
<div class="line"><a id="l03309" name="l03309"></a><span class="lineno"> 3309</span> <span class="keyword">auto</span> <span class="keyword">const</span> jResult = jr[jss::result];</div>
<div class="line"><a id="l03310" name="l03310"></a><span class="lineno"> 3310</span> BEAST_EXPECT(jResult[jss::error] == <span class="stringliteral">&quot;invalidTransaction&quot;</span>);</div>
<div class="line"><a id="l03311" name="l03311"></a><span class="lineno"> 3311</span> BEAST_EXPECT(jResult[jss::error_exception] == <span class="stringliteral">&quot;fails local checks: Transaction has bad signature.&quot;</span>);</div>
<div class="line"><a id="l03312" name="l03312"></a><span class="lineno"> 3312</span> }</div>
<div class="line"><a id="l03313" name="l03313"></a><span class="lineno"> 3313</span> </div>
<div class="line"><a id="l03314" name="l03314"></a><span class="lineno"> 3314</span> <span class="comment">// Copy the transaction signature into the counterparty signature.</span></div>
<div class="line"><a id="l03315" name="l03315"></a><span class="lineno"> 3315</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> counterpartyJson{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03316" name="l03316"></a><span class="lineno"> 3316</span> counterpartyJson[sfTxnSignature] = createJson[sfTxnSignature];</div>
<div class="line"><a id="l03317" name="l03317"></a><span class="lineno"> 3317</span> counterpartyJson[sfSigningPubKey] = createJson[sfSigningPubKey];</div>
<div class="line"><a id="l03318" name="l03318"></a><span class="lineno"> 3318</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(!createJson.isMember(jss::Signers)))</div>
<div class="line"><a id="l03319" name="l03319"></a><span class="lineno"> 3319</span> counterpartyJson[sfSigners] = createJson[sfSigners];</div>
<div class="line"><a id="l03320" name="l03320"></a><span class="lineno"> 3320</span> </div>
<div class="line"><a id="l03321" name="l03321"></a><span class="lineno"> 3321</span> <span class="comment">// The duplicated signature works</span></div>
<div class="line"><a id="l03322" name="l03322"></a><span class="lineno"> 3322</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, counterpartyJson));</div>
<div class="line"><a id="l03323" name="l03323"></a><span class="lineno"> 3323</span> env(createJson);</div>
<div class="line"><a id="l03324" name="l03324"></a><span class="lineno"> 3324</span> </div>
<div class="line"><a id="l03325" name="l03325"></a><span class="lineno"> 3325</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03326" name="l03326"></a><span class="lineno"> 3326</span> </div>
<div class="line"><a id="l03327" name="l03327"></a><span class="lineno"> 3327</span> <span class="keyword">auto</span> <span class="keyword">const</span> startDate = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;header().parentCloseTime;</div>
<div class="line"><a id="l03328" name="l03328"></a><span class="lineno"> 3328</span> </div>
<div class="line"><a id="l03329" name="l03329"></a><span class="lineno"> 3329</span> <span class="comment">// Loan is successfully created</span></div>
<div class="line"><a id="l03330" name="l03330"></a><span class="lineno"> 3330</span> {</div>
<div class="line"><a id="l03331" name="l03331"></a><span class="lineno"> 3331</span> <span class="keyword">auto</span> <span class="keyword">const</span> res = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;account_objects&quot;</span>, lender.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a26a750f85953905d4d29b1477a38ea37">human</a>());</div>
<div class="line"><a id="l03332" name="l03332"></a><span class="lineno"> 3332</span> <span class="keyword">auto</span> <span class="keyword">const</span> objects = res[jss::result][jss::account_objects];</div>
<div class="line"><a id="l03333" name="l03333"></a><span class="lineno"> 3333</span> </div>
<div class="line"><a id="l03334" name="l03334"></a><span class="lineno"> 3334</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/map.html">std::map&lt;std::string, std::size_t&gt;</a> types;</div>
<div class="line"><a id="l03335" name="l03335"></a><span class="lineno"> 3335</span> BEAST_EXPECT(objects.size() == 4);</div>
<div class="line"><a id="l03336" name="l03336"></a><span class="lineno"> 3336</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; <span class="keywordtype">object</span> : objects)</div>
<div class="line"><a id="l03337" name="l03337"></a><span class="lineno"> 3337</span> {</div>
<div class="line"><a id="l03338" name="l03338"></a><span class="lineno"> 3338</span> ++types[<span class="keywordtype">object</span>[sfLedgerEntryType].asString()];</div>
<div class="line"><a id="l03339" name="l03339"></a><span class="lineno"> 3339</span> }</div>
<div class="line"><a id="l03340" name="l03340"></a><span class="lineno"> 3340</span> BEAST_EXPECT(types.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/map/size.html">size</a>() == 4);</div>
<div class="line"><a id="l03341" name="l03341"></a><span class="lineno"> 3341</span> <span class="keywordflow">for</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span> type : {<span class="stringliteral">&quot;MPToken&quot;</span>, <span class="stringliteral">&quot;Vault&quot;</span>, <span class="stringliteral">&quot;LoanBroker&quot;</span>, <span class="stringliteral">&quot;Loan&quot;</span>})</div>
<div class="line"><a id="l03342" name="l03342"></a><span class="lineno"> 3342</span> {</div>
<div class="line"><a id="l03343" name="l03343"></a><span class="lineno"> 3343</span> BEAST_EXPECT(types[type] == 1);</div>
<div class="line"><a id="l03344" name="l03344"></a><span class="lineno"> 3344</span> }</div>
<div class="line"><a id="l03345" name="l03345"></a><span class="lineno"> 3345</span> }</div>
<div class="line"><a id="l03346" name="l03346"></a><span class="lineno"> 3346</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanID = [&amp;]() {</div>
<div class="line"><a id="l03347" name="l03347"></a><span class="lineno"> 3347</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> params(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>);</div>
<div class="line"><a id="l03348" name="l03348"></a><span class="lineno"> 3348</span> params[jss::account] = lender.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a26a750f85953905d4d29b1477a38ea37">human</a>();</div>
<div class="line"><a id="l03349" name="l03349"></a><span class="lineno"> 3349</span> params[jss::type] = <span class="stringliteral">&quot;Loan&quot;</span>;</div>
<div class="line"><a id="l03350" name="l03350"></a><span class="lineno"> 3350</span> <span class="keyword">auto</span> <span class="keyword">const</span> res = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;account_objects&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(params));</div>
<div class="line"><a id="l03351" name="l03351"></a><span class="lineno"> 3351</span> <span class="keyword">auto</span> <span class="keyword">const</span> objects = res[jss::result][jss::account_objects];</div>
<div class="line"><a id="l03352" name="l03352"></a><span class="lineno"> 3352</span> </div>
<div class="line"><a id="l03353" name="l03353"></a><span class="lineno"> 3353</span> BEAST_EXPECT(objects.size() == 1);</div>
<div class="line"><a id="l03354" name="l03354"></a><span class="lineno"> 3354</span> </div>
<div class="line"><a id="l03355" name="l03355"></a><span class="lineno"> 3355</span> <span class="keyword">auto</span> <span class="keyword">const</span> loan = objects[0u];</div>
<div class="line"><a id="l03356" name="l03356"></a><span class="lineno"> 3356</span> BEAST_EXPECT(loan[sfBorrower] == lender.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a26a750f85953905d4d29b1477a38ea37">human</a>());</div>
<div class="line"><a id="l03357" name="l03357"></a><span class="lineno"> 3357</span> <span class="comment">// soeDEFAULT fields are not returned if they&#39;re in the default</span></div>
<div class="line"><a id="l03358" name="l03358"></a><span class="lineno"> 3358</span> <span class="comment">// state</span></div>
<div class="line"><a id="l03359" name="l03359"></a><span class="lineno"> 3359</span> BEAST_EXPECT(!loan.isMember(sfCloseInterestRate));</div>
<div class="line"><a id="l03360" name="l03360"></a><span class="lineno"> 3360</span> BEAST_EXPECT(!loan.isMember(sfClosePaymentFee));</div>
<div class="line"><a id="l03361" name="l03361"></a><span class="lineno"> 3361</span> BEAST_EXPECT(loan[sfFlags] == 0);</div>
<div class="line"><a id="l03362" name="l03362"></a><span class="lineno"> 3362</span> BEAST_EXPECT(loan[sfGracePeriod] == 60);</div>
<div class="line"><a id="l03363" name="l03363"></a><span class="lineno"> 3363</span> BEAST_EXPECT(!loan.isMember(sfInterestRate));</div>
<div class="line"><a id="l03364" name="l03364"></a><span class="lineno"> 3364</span> BEAST_EXPECT(!loan.isMember(sfLateInterestRate));</div>
<div class="line"><a id="l03365" name="l03365"></a><span class="lineno"> 3365</span> BEAST_EXPECT(!loan.isMember(sfLatePaymentFee));</div>
<div class="line"><a id="l03366" name="l03366"></a><span class="lineno"> 3366</span> BEAST_EXPECT(loan[sfLoanBrokerID] == <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l03367" name="l03367"></a><span class="lineno"> 3367</span> BEAST_EXPECT(!loan.isMember(sfLoanOriginationFee));</div>
<div class="line"><a id="l03368" name="l03368"></a><span class="lineno"> 3368</span> BEAST_EXPECT(loan[sfLoanSequence] == 1);</div>
<div class="line"><a id="l03369" name="l03369"></a><span class="lineno"> 3369</span> BEAST_EXPECT(!loan.isMember(sfLoanServiceFee));</div>
<div class="line"><a id="l03370" name="l03370"></a><span class="lineno"> 3370</span> BEAST_EXPECT(loan[sfNextPaymentDueDate] == loan[sfStartDate].asUInt() + 60);</div>
<div class="line"><a id="l03371" name="l03371"></a><span class="lineno"> 3371</span> BEAST_EXPECT(!loan.isMember(sfOverpaymentFee));</div>
<div class="line"><a id="l03372" name="l03372"></a><span class="lineno"> 3372</span> BEAST_EXPECT(!loan.isMember(sfOverpaymentInterestRate));</div>
<div class="line"><a id="l03373" name="l03373"></a><span class="lineno"> 3373</span> BEAST_EXPECT(loan[sfPaymentInterval] == 60);</div>
<div class="line"><a id="l03374" name="l03374"></a><span class="lineno"> 3374</span> BEAST_EXPECT(loan[sfPeriodicPayment] == <span class="stringliteral">&quot;1000000000&quot;</span>);</div>
<div class="line"><a id="l03375" name="l03375"></a><span class="lineno"> 3375</span> BEAST_EXPECT(loan[sfPaymentRemaining] == 1);</div>
<div class="line"><a id="l03376" name="l03376"></a><span class="lineno"> 3376</span> BEAST_EXPECT(!loan.isMember(sfPreviousPaymentDueDate));</div>
<div class="line"><a id="l03377" name="l03377"></a><span class="lineno"> 3377</span> BEAST_EXPECT(loan[sfPrincipalOutstanding] == <span class="stringliteral">&quot;1000000000&quot;</span>);</div>
<div class="line"><a id="l03378" name="l03378"></a><span class="lineno"> 3378</span> BEAST_EXPECT(loan[sfTotalValueOutstanding] == <span class="stringliteral">&quot;1000000000&quot;</span>);</div>
<div class="line"><a id="l03379" name="l03379"></a><span class="lineno"> 3379</span> BEAST_EXPECT(!loan.isMember(sfLoanScale));</div>
<div class="line"><a id="l03380" name="l03380"></a><span class="lineno"> 3380</span> BEAST_EXPECT(loan[sfStartDate].asUInt() == startDate.time_since_epoch().count());</div>
<div class="line"><a id="l03381" name="l03381"></a><span class="lineno"> 3381</span> </div>
<div class="line"><a id="l03382" name="l03382"></a><span class="lineno"> 3382</span> <span class="keywordflow">return</span> loan[<span class="stringliteral">&quot;index&quot;</span>].asString();</div>
<div class="line"><a id="l03383" name="l03383"></a><span class="lineno"> 3383</span> }();</div>
<div class="line"><a id="l03384" name="l03384"></a><span class="lineno"> 3384</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet{<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(<a class="code hl_class" href="classxrpl_1_1base__uint.html">uint256</a>{<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string_view.html">std::string_view</a>(loanID)})};</div>
<div class="line"><a id="l03385" name="l03385"></a><span class="lineno"> 3385</span> </div>
<div class="line"><a id="l03386" name="l03386"></a><span class="lineno"> 3386</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>(startDate);</div>
<div class="line"><a id="l03387" name="l03387"></a><span class="lineno"> 3387</span> </div>
<div class="line"><a id="l03388" name="l03388"></a><span class="lineno"> 3388</span> <span class="comment">// Make a payment</span></div>
<div class="line"><a id="l03389" name="l03389"></a><span class="lineno"> 3389</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(lender, loanKeylet.key, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(1000)));</div>
<div class="line"><a id="l03390" name="l03390"></a><span class="lineno"> 3390</span> }</div>
</div>
<div class="line"><a id="l03391" name="l03391"></a><span class="lineno"> 3391</span> </div>
<div class="line"><a id="l03392" name="l03392"></a><span class="lineno"> 3392</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen03393" data-start="{" data-end="}">
<div class="line"><a id="l03393" name="l03393"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#af42912e3403ffd4aef47d1661d0b90c9"> 3393</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#af42912e3403ffd4aef47d1661d0b90c9">testBatchBypassCounterparty</a>()</div>
<div class="line"><a id="l03394" name="l03394"></a><span class="lineno"> 3394</span> {</div>
<div class="line"><a id="l03395" name="l03395"></a><span class="lineno"> 3395</span> <span class="comment">// From FIND-001</span></div>
<div class="line"><a id="l03396" name="l03396"></a><span class="lineno"> 3396</span> testcase &lt;&lt; <span class="stringliteral">&quot;Batch Bypass Counterparty&quot;</span>;</div>
<div class="line"><a id="l03397" name="l03397"></a><span class="lineno"> 3397</span> </div>
<div class="line"><a id="l03398" name="l03398"></a><span class="lineno"> 3398</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> lendingBatchEnabled =</div>
<div class="line"><a id="l03399" name="l03399"></a><span class="lineno"> 3399</span> !<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/all_any_none_of.html">std::any_of</a>(<a class="code hl_variable" href="classxrpl_1_1Batch.html#a48142874a4f7fadc1a5a0026d289f4c8">Batch::disabledTxTypes</a>.begin(), <a class="code hl_variable" href="classxrpl_1_1Batch.html#a48142874a4f7fadc1a5a0026d289f4c8">Batch::disabledTxTypes</a>.end(), [](<span class="keyword">auto</span> <span class="keyword">const</span>&amp; <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#af96efdcb2ef7a3a2bda1c6b1ac3330c4">disabled</a>) {</div>
<div class="line"><a id="l03400" name="l03400"></a><span class="lineno"> 3400</span> <span class="keywordflow">return</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#af96efdcb2ef7a3a2bda1c6b1ac3330c4">disabled</a> == ttLOAN_BROKER_SET;</div>
<div class="line"><a id="l03401" name="l03401"></a><span class="lineno"> 3401</span> });</div>
<div class="line"><a id="l03402" name="l03402"></a><span class="lineno"> 3402</span> </div>
<div class="line"><a id="l03403" name="l03403"></a><span class="lineno"> 3403</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l03404" name="l03404"></a><span class="lineno"> 3404</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l03405" name="l03405"></a><span class="lineno"> 3405</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l03406" name="l03406"></a><span class="lineno"> 3406</span> </div>
<div class="line"><a id="l03407" name="l03407"></a><span class="lineno"> 3407</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l03408" name="l03408"></a><span class="lineno"> 3408</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l03409" name="l03409"></a><span class="lineno"> 3409</span> </div>
<div class="line"><a id="l03410" name="l03410"></a><span class="lineno"> 3410</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> brokerParams;</div>
<div class="line"><a id="l03411" name="l03411"></a><span class="lineno"> 3411</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(brokerParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> * 100), lender, borrower);</div>
<div class="line"><a id="l03412" name="l03412"></a><span class="lineno"> 3412</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03413" name="l03413"></a><span class="lineno"> 3413</span> </div>
<div class="line"><a id="l03414" name="l03414"></a><span class="lineno"> 3414</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> xrpAsset{<a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>(), 1&#39;000&#39;000};</div>
<div class="line"><a id="l03415" name="l03415"></a><span class="lineno"> 3415</span> </div>
<div class="line"><a id="l03416" name="l03416"></a><span class="lineno"> 3416</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, xrpAsset, lender, brokerParams)};</div>
<div class="line"><a id="l03417" name="l03417"></a><span class="lineno"> 3417</span> </div>
<div class="line"><a id="l03418" name="l03418"></a><span class="lineno"> 3418</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03419" name="l03419"></a><span class="lineno"> 3419</span> </div>
<div class="line"><a id="l03420" name="l03420"></a><span class="lineno"> 3420</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l03421" name="l03421"></a><span class="lineno"> 3421</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{1, 3};</div>
<div class="line"><a id="l03422" name="l03422"></a><span class="lineno"> 3422</span> </div>
<div class="line"><a id="l03423" name="l03423"></a><span class="lineno"> 3423</span> <span class="keyword">auto</span> forgedLoanSet = <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest, 0);</div>
<div class="line"><a id="l03424" name="l03424"></a><span class="lineno"> 3424</span> </div>
<div class="line"><a id="l03425" name="l03425"></a><span class="lineno"> 3425</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> randomData{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03426" name="l03426"></a><span class="lineno"> 3426</span> randomData[jss::SigningPubKey] = <a class="code hl_class" href="classJson_1_1StaticString.html">Json::StaticString</a>{<span class="stringliteral">&quot;2600&quot;</span>};</div>
<div class="line"><a id="l03427" name="l03427"></a><span class="lineno"> 3427</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> sigObject{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03428" name="l03428"></a><span class="lineno"> 3428</span> sigObject[jss::SigningPubKey] = <a class="code hl_function" href="namespacexrpl.html#a36b95700599f590017b5912e220baf5b">strHex</a>(lender.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a91c4171be792f96813671a493a4e10b5">pk</a>().<a class="code hl_function" href="classxrpl_1_1PublicKey.html#ad46f4b490287a7d6df68780c82509d68">slice</a>());</div>
<div class="line"><a id="l03429" name="l03429"></a><span class="lineno"> 3429</span> <a class="code hl_class" href="classxrpl_1_1Serializer.html">Serializer</a> ss;</div>
<div class="line"><a id="l03430" name="l03430"></a><span class="lineno"> 3430</span> ss.<a class="code hl_function" href="classxrpl_1_1Serializer.html#ab3962ec202d2878a540affd44febda14">add32</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac599741e6d4066bada11df4c7e8ad30aa2e941487d3c2b2204488c5cf3a9d7a28">HashPrefix::txSign</a>);</div>
<div class="line"><a id="l03431" name="l03431"></a><span class="lineno"> 3431</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/chrono/parse.html">parse</a>(randomData).addWithoutSigningFields(ss);</div>
<div class="line"><a id="l03432" name="l03432"></a><span class="lineno"> 3432</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a> = <a class="code hl_function" href="namespacexrpl.html#aca8d3524fa9df703978f872ca8bf8c5a">xrpl::sign</a>(borrower.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a91c4171be792f96813671a493a4e10b5">pk</a>(), borrower.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a1030616ab26f1509edd6eafe42349655">sk</a>(), ss.<a class="code hl_function" href="classxrpl_1_1Serializer.html#a9fdb78b3d7b575806292496989bd138a">slice</a>());</div>
<div class="line"><a id="l03433" name="l03433"></a><span class="lineno"> 3433</span> sigObject[jss::TxnSignature] = <a class="code hl_function" href="namespacexrpl.html#a36b95700599f590017b5912e220baf5b">strHex</a>(<a class="code hl_class" href="classxrpl_1_1Slice.html">Slice</a>{<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>.data(), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>.size()});</div>
<div class="line"><a id="l03434" name="l03434"></a><span class="lineno"> 3434</span> </div>
<div class="line"><a id="l03435" name="l03435"></a><span class="lineno"> 3435</span> forgedLoanSet[<a class="code hl_class" href="classJson_1_1StaticString.html">Json::StaticString</a>{<span class="stringliteral">&quot;CounterpartySignature&quot;</span>}] = sigObject;</div>
<div class="line"><a id="l03436" name="l03436"></a><span class="lineno"> 3436</span> </div>
<div class="line"><a id="l03437" name="l03437"></a><span class="lineno"> 3437</span> <span class="comment">// ? Fails because the lender hasn&#39;t signed the tx</span></div>
<div class="line"><a id="l03438" name="l03438"></a><span class="lineno"> 3438</span> env(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(forgedLoanSet, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a09be2aabc0ac5f377a30d0e35dab0aeea5e860f0b1cf95c1a5e1b88ea9aae8d52">telENV_RPC_FAILED</a>));</div>
<div class="line"><a id="l03439" name="l03439"></a><span class="lineno"> 3439</span> </div>
<div class="line"><a id="l03440" name="l03440"></a><span class="lineno"> 3440</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1seq.html">seq</a> = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a7e2bf847bf817405a5d8db448d8b4f6f">seq</a>(borrower);</div>
<div class="line"><a id="l03441" name="l03441"></a><span class="lineno"> 3441</span> <span class="keyword">auto</span> <span class="keyword">const</span> batchFee = <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1batch.html#ad0864e770e42d7ca0c82aa7cc3c4d2af">batch::calcBatchFee</a>(env, 1, 2);</div>
<div class="line"><a id="l03442" name="l03442"></a><span class="lineno"> 3442</span> <span class="comment">// ! Should fail because the lender hasn&#39;t signed the tx</span></div>
<div class="line"><a id="l03443" name="l03443"></a><span class="lineno"> 3443</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1batch.html#a6b275a73061974d679756897fb84c887">batch::outer</a>(borrower, <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1seq.html">seq</a>, batchFee, <a class="code hl_variable" href="namespacexrpl.html#a6a1704da191868bdc393d84684a6c004">tfAllOrNothing</a>),</div>
<div class="line"><a id="l03444" name="l03444"></a><span class="lineno"> 3444</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1batch_1_1inner.html">batch::inner</a>(forgedLoanSet, <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1seq.html">seq</a> + 1),</div>
<div class="line"><a id="l03445" name="l03445"></a><span class="lineno"> 3445</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1batch_1_1inner.html">batch::inner</a>(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, lender, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1)), <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1seq.html">seq</a> + 2),</div>
<div class="line"><a id="l03446" name="l03446"></a><span class="lineno"> 3446</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(lendingBatchEnabled ? <a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6aad64890ef451b36c07e55751fff805d5">temBAD_SIGNATURE</a> : <a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6acd12cbd108e996c3a050fe4fdc3e133b">temINVALID_INNER_BATCH</a>));</div>
<div class="line"><a id="l03447" name="l03447"></a><span class="lineno"> 3447</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03448" name="l03448"></a><span class="lineno"> 3448</span> </div>
<div class="line"><a id="l03449" name="l03449"></a><span class="lineno"> 3449</span> <span class="comment">// ? Check that the loan was NOT created</span></div>
<div class="line"><a id="l03450" name="l03450"></a><span class="lineno"> 3450</span> {</div>
<div class="line"><a id="l03451" name="l03451"></a><span class="lineno"> 3451</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> params(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>);</div>
<div class="line"><a id="l03452" name="l03452"></a><span class="lineno"> 3452</span> params[jss::account] = borrower.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a26a750f85953905d4d29b1477a38ea37">human</a>();</div>
<div class="line"><a id="l03453" name="l03453"></a><span class="lineno"> 3453</span> params[jss::type] = <span class="stringliteral">&quot;Loan&quot;</span>;</div>
<div class="line"><a id="l03454" name="l03454"></a><span class="lineno"> 3454</span> <span class="keyword">auto</span> <span class="keyword">const</span> res = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;account_objects&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(params));</div>
<div class="line"><a id="l03455" name="l03455"></a><span class="lineno"> 3455</span> <span class="keyword">auto</span> <span class="keyword">const</span> objects = res[jss::result][jss::account_objects];</div>
<div class="line"><a id="l03456" name="l03456"></a><span class="lineno"> 3456</span> BEAST_EXPECT(objects.size() == 0);</div>
<div class="line"><a id="l03457" name="l03457"></a><span class="lineno"> 3457</span> }</div>
<div class="line"><a id="l03458" name="l03458"></a><span class="lineno"> 3458</span> }</div>
</div>
<div class="line"><a id="l03459" name="l03459"></a><span class="lineno"> 3459</span> </div>
<div class="line"><a id="l03460" name="l03460"></a><span class="lineno"> 3460</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen03461" data-start="{" data-end="}">
<div class="line"><a id="l03461" name="l03461"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a1abdf68a119ed28949354cd2a339e4f1"> 3461</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a1abdf68a119ed28949354cd2a339e4f1">testWrongMaxDebtBehavior</a>()</div>
<div class="line"><a id="l03462" name="l03462"></a><span class="lineno"> 3462</span> {</div>
<div class="line"><a id="l03463" name="l03463"></a><span class="lineno"> 3463</span> <span class="comment">// From FIND-003</span></div>
<div class="line"><a id="l03464" name="l03464"></a><span class="lineno"> 3464</span> testcase &lt;&lt; <span class="stringliteral">&quot;Wrong Max Debt Behavior&quot;</span>;</div>
<div class="line"><a id="l03465" name="l03465"></a><span class="lineno"> 3465</span> </div>
<div class="line"><a id="l03466" name="l03466"></a><span class="lineno"> 3466</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l03467" name="l03467"></a><span class="lineno"> 3467</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l03468" name="l03468"></a><span class="lineno"> 3468</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l03469" name="l03469"></a><span class="lineno"> 3469</span> </div>
<div class="line"><a id="l03470" name="l03470"></a><span class="lineno"> 3470</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l03471" name="l03471"></a><span class="lineno"> 3471</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l03472" name="l03472"></a><span class="lineno"> 3472</span> </div>
<div class="line"><a id="l03473" name="l03473"></a><span class="lineno"> 3473</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> brokerParams{.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a25badc9387457857607edbadf6fac63e">debtMax</a> = 0};</div>
<div class="line"><a id="l03474" name="l03474"></a><span class="lineno"> 3474</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(brokerParams.vaultDeposit * 100), issuer, <a class="code hl_enumvalue" href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367af34d3a138958b0d338875bb910a39cf6">noripple</a>(lender));</div>
<div class="line"><a id="l03475" name="l03475"></a><span class="lineno"> 3475</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03476" name="l03476"></a><span class="lineno"> 3476</span> </div>
<div class="line"><a id="l03477" name="l03477"></a><span class="lineno"> 3477</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> xrpAsset{<a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>(), 1&#39;000&#39;000};</div>
<div class="line"><a id="l03478" name="l03478"></a><span class="lineno"> 3478</span> </div>
<div class="line"><a id="l03479" name="l03479"></a><span class="lineno"> 3479</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, xrpAsset, lender, brokerParams)};</div>
<div class="line"><a id="l03480" name="l03480"></a><span class="lineno"> 3480</span> </div>
<div class="line"><a id="l03481" name="l03481"></a><span class="lineno"> 3481</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l03482" name="l03482"></a><span class="lineno"> 3482</span> {</div>
<div class="line"><a id="l03483" name="l03483"></a><span class="lineno"> 3483</span> BEAST_EXPECT(brokerSle-&gt;at(sfDebtMaximum) == 0);</div>
<div class="line"><a id="l03484" name="l03484"></a><span class="lineno"> 3484</span> }</div>
<div class="line"><a id="l03485" name="l03485"></a><span class="lineno"> 3485</span> </div>
<div class="line"><a id="l03486" name="l03486"></a><span class="lineno"> 3486</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03487" name="l03487"></a><span class="lineno"> 3487</span> </div>
<div class="line"><a id="l03488" name="l03488"></a><span class="lineno"> 3488</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l03489" name="l03489"></a><span class="lineno"> 3489</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{1, 3};</div>
<div class="line"><a id="l03490" name="l03490"></a><span class="lineno"> 3490</span> </div>
<div class="line"><a id="l03491" name="l03491"></a><span class="lineno"> 3491</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee));</div>
<div class="line"><a id="l03492" name="l03492"></a><span class="lineno"> 3492</span> </div>
<div class="line"><a id="l03493" name="l03493"></a><span class="lineno"> 3493</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> counterpartyJson{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03494" name="l03494"></a><span class="lineno"> 3494</span> counterpartyJson[sfTxnSignature] = createJson[sfTxnSignature];</div>
<div class="line"><a id="l03495" name="l03495"></a><span class="lineno"> 3495</span> counterpartyJson[sfSigningPubKey] = createJson[sfSigningPubKey];</div>
<div class="line"><a id="l03496" name="l03496"></a><span class="lineno"> 3496</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(!createJson.isMember(jss::Signers)))</div>
<div class="line"><a id="l03497" name="l03497"></a><span class="lineno"> 3497</span> counterpartyJson[sfSigners] = createJson[sfSigners];</div>
<div class="line"><a id="l03498" name="l03498"></a><span class="lineno"> 3498</span> </div>
<div class="line"><a id="l03499" name="l03499"></a><span class="lineno"> 3499</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, counterpartyJson));</div>
<div class="line"><a id="l03500" name="l03500"></a><span class="lineno"> 3500</span> env(createJson);</div>
<div class="line"><a id="l03501" name="l03501"></a><span class="lineno"> 3501</span> </div>
<div class="line"><a id="l03502" name="l03502"></a><span class="lineno"> 3502</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03503" name="l03503"></a><span class="lineno"> 3503</span> }</div>
</div>
<div class="line"><a id="l03504" name="l03504"></a><span class="lineno"> 3504</span> </div>
<div class="line"><a id="l03505" name="l03505"></a><span class="lineno"> 3505</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen03506" data-start="{" data-end="}">
<div class="line"><a id="l03506" name="l03506"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a8ca95877560a427aba3f4946eb1f6846"> 3506</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a8ca95877560a427aba3f4946eb1f6846">testLoanPayComputePeriodicPaymentValidRateInvariant</a>()</div>
<div class="line"><a id="l03507" name="l03507"></a><span class="lineno"> 3507</span> {</div>
<div class="line"><a id="l03508" name="l03508"></a><span class="lineno"> 3508</span> <span class="comment">// From FIND-012</span></div>
<div class="line"><a id="l03509" name="l03509"></a><span class="lineno"> 3509</span> testcase &lt;&lt; <span class="stringliteral">&quot;LoanPay xrpl::detail::computePeriodicPayment : &quot;</span></div>
<div class="line"><a id="l03510" name="l03510"></a><span class="lineno"> 3510</span> <span class="stringliteral">&quot;valid rate&quot;</span>;</div>
<div class="line"><a id="l03511" name="l03511"></a><span class="lineno"> 3511</span> </div>
<div class="line"><a id="l03512" name="l03512"></a><span class="lineno"> 3512</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l03513" name="l03513"></a><span class="lineno"> 3513</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l03514" name="l03514"></a><span class="lineno"> 3514</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l03515" name="l03515"></a><span class="lineno"> 3515</span> </div>
<div class="line"><a id="l03516" name="l03516"></a><span class="lineno"> 3516</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l03517" name="l03517"></a><span class="lineno"> 3517</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l03518" name="l03518"></a><span class="lineno"> 3518</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l03519" name="l03519"></a><span class="lineno"> 3519</span> </div>
<div class="line"><a id="l03520" name="l03520"></a><span class="lineno"> 3520</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> brokerParams;</div>
<div class="line"><a id="l03521" name="l03521"></a><span class="lineno"> 3521</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(brokerParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> * 100), issuer, lender, borrower);</div>
<div class="line"><a id="l03522" name="l03522"></a><span class="lineno"> 3522</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03523" name="l03523"></a><span class="lineno"> 3523</span> </div>
<div class="line"><a id="l03524" name="l03524"></a><span class="lineno"> 3524</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> xrpAsset{<a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>(), 1&#39;000&#39;000};</div>
<div class="line"><a id="l03525" name="l03525"></a><span class="lineno"> 3525</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, xrpAsset, lender, brokerParams)};</div>
<div class="line"><a id="l03526" name="l03526"></a><span class="lineno"> 3526</span> </div>
<div class="line"><a id="l03527" name="l03527"></a><span class="lineno"> 3527</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03528" name="l03528"></a><span class="lineno"> 3528</span> </div>
<div class="line"><a id="l03529" name="l03529"></a><span class="lineno"> 3529</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l03530" name="l03530"></a><span class="lineno"> 3530</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{640562, -5};</div>
<div class="line"><a id="l03531" name="l03531"></a><span class="lineno"> 3531</span> </div>
<div class="line"><a id="l03532" name="l03532"></a><span class="lineno"> 3532</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> serviceFee{2462611968};</div>
<div class="line"><a id="l03533" name="l03533"></a><span class="lineno"> 3533</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <span class="keyword">const</span> numPayments{4294967295 / 800};</div>
<div class="line"><a id="l03534" name="l03534"></a><span class="lineno"> 3534</span> </div>
<div class="line"><a id="l03535" name="l03535"></a><span class="lineno"> 3535</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(</div>
<div class="line"><a id="l03536" name="l03536"></a><span class="lineno"> 3536</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l03537" name="l03537"></a><span class="lineno"> 3537</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee),</div>
<div class="line"><a id="l03538" name="l03538"></a><span class="lineno"> 3538</span> loanServiceFee(serviceFee),</div>
<div class="line"><a id="l03539" name="l03539"></a><span class="lineno"> 3539</span> paymentTotal(numPayments),</div>
<div class="line"><a id="l03540" name="l03540"></a><span class="lineno"> 3540</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l03541" name="l03541"></a><span class="lineno"> 3541</span> </div>
<div class="line"><a id="l03542" name="l03542"></a><span class="lineno"> 3542</span> createJson[<span class="stringliteral">&quot;CloseInterestRate&quot;</span>] = 55374;</div>
<div class="line"><a id="l03543" name="l03543"></a><span class="lineno"> 3543</span> createJson[<span class="stringliteral">&quot;ClosePaymentFee&quot;</span>] = <span class="stringliteral">&quot;3825205248&quot;</span>;</div>
<div class="line"><a id="l03544" name="l03544"></a><span class="lineno"> 3544</span> createJson[<span class="stringliteral">&quot;LatePaymentFee&quot;</span>] = <span class="stringliteral">&quot;237&quot;</span>;</div>
<div class="line"><a id="l03545" name="l03545"></a><span class="lineno"> 3545</span> createJson[<span class="stringliteral">&quot;LoanOriginationFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l03546" name="l03546"></a><span class="lineno"> 3546</span> createJson[<span class="stringliteral">&quot;OverpaymentFee&quot;</span>] = 35167;</div>
<div class="line"><a id="l03547" name="l03547"></a><span class="lineno"> 3547</span> createJson[<span class="stringliteral">&quot;OverpaymentInterestRate&quot;</span>] = 1360;</div>
<div class="line"><a id="l03548" name="l03548"></a><span class="lineno"> 3548</span> createJson[<span class="stringliteral">&quot;PaymentInterval&quot;</span>] = 727;</div>
<div class="line"><a id="l03549" name="l03549"></a><span class="lineno"> 3549</span> </div>
<div class="line"><a id="l03550" name="l03550"></a><span class="lineno"> 3550</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerStateBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l03551" name="l03551"></a><span class="lineno"> 3551</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerStateBefore-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l03552" name="l03552"></a><span class="lineno"> 3552</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l03553" name="l03553"></a><span class="lineno"> 3553</span> </div>
<div class="line"><a id="l03554" name="l03554"></a><span class="lineno"> 3554</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender));</div>
<div class="line"><a id="l03555" name="l03555"></a><span class="lineno"> 3555</span> <span class="comment">// Fails in preclaim because principal requested can&#39;t be</span></div>
<div class="line"><a id="l03556" name="l03556"></a><span class="lineno"> 3556</span> <span class="comment">// represented as XRP</span></div>
<div class="line"><a id="l03557" name="l03557"></a><span class="lineno"> 3557</span> env(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bac9a52c5d52a9c9501a3c8c37746fb509">tecPRECISION_LOSS</a>), THISLINE);</div>
<div class="line"><a id="l03558" name="l03558"></a><span class="lineno"> 3558</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03559" name="l03559"></a><span class="lineno"> 3559</span> </div>
<div class="line"><a id="l03560" name="l03560"></a><span class="lineno"> 3560</span> BEAST_EXPECT(!env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet));</div>
<div class="line"><a id="l03561" name="l03561"></a><span class="lineno"> 3561</span> </div>
<div class="line"><a id="l03562" name="l03562"></a><span class="lineno"> 3562</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> actualPrincipal{6};</div>
<div class="line"><a id="l03563" name="l03563"></a><span class="lineno"> 3563</span> </div>
<div class="line"><a id="l03564" name="l03564"></a><span class="lineno"> 3564</span> createJson[sfPrincipalRequested] = actualPrincipal;</div>
<div class="line"><a id="l03565" name="l03565"></a><span class="lineno"> 3565</span> createJson.removeMember(sfSequence.jsonName);</div>
<div class="line"><a id="l03566" name="l03566"></a><span class="lineno"> 3566</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender));</div>
<div class="line"><a id="l03567" name="l03567"></a><span class="lineno"> 3567</span> <span class="comment">// Fails in doApply because the payment is too small to be</span></div>
<div class="line"><a id="l03568" name="l03568"></a><span class="lineno"> 3568</span> <span class="comment">// represented as XRP.</span></div>
<div class="line"><a id="l03569" name="l03569"></a><span class="lineno"> 3569</span> env(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bac9a52c5d52a9c9501a3c8c37746fb509">tecPRECISION_LOSS</a>), THISLINE);</div>
<div class="line"><a id="l03570" name="l03570"></a><span class="lineno"> 3570</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03571" name="l03571"></a><span class="lineno"> 3571</span> }</div>
</div>
<div class="line"><a id="l03572" name="l03572"></a><span class="lineno"> 3572</span> </div>
<div class="line"><a id="l03573" name="l03573"></a><span class="lineno"> 3573</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen03574" data-start="{" data-end="}">
<div class="line"><a id="l03574" name="l03574"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ad8d9812a828f362b7565bfb38dbdc1a8"> 3574</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ad8d9812a828f362b7565bfb38dbdc1a8">testRPC</a>()</div>
<div class="line"><a id="l03575" name="l03575"></a><span class="lineno"> 3575</span> {</div>
<div class="line"><a id="l03576" name="l03576"></a><span class="lineno"> 3576</span> <span class="comment">// This will expand as more test cases are added. Some functionality</span></div>
<div class="line"><a id="l03577" name="l03577"></a><span class="lineno"> 3577</span> <span class="comment">// is tested in other test functions.</span></div>
<div class="line"><a id="l03578" name="l03578"></a><span class="lineno"> 3578</span> testcase(<span class="stringliteral">&quot;RPC&quot;</span>);</div>
<div class="line"><a id="l03579" name="l03579"></a><span class="lineno"> 3579</span> </div>
<div class="line"><a id="l03580" name="l03580"></a><span class="lineno"> 3580</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l03581" name="l03581"></a><span class="lineno"> 3581</span> </div>
<div class="line"><a id="l03582" name="l03582"></a><span class="lineno"> 3582</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l03583" name="l03583"></a><span class="lineno"> 3583</span> </div>
<div class="line"><a id="l03584" name="l03584"></a><span class="lineno"> 3584</span> <span class="keyword">auto</span> lowerFee = [&amp;]() {</div>
<div class="line"><a id="l03585" name="l03585"></a><span class="lineno"> 3585</span> <span class="comment">// Run the local fee back down.</span></div>
<div class="line"><a id="l03586" name="l03586"></a><span class="lineno"> 3586</span> <span class="keywordflow">while</span> (env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a00e2950377b152b92bbf93e4b3c8c474">app</a>().<a class="code hl_function" href="classxrpl_1_1ServiceRegistry.html#a4fba8128486dfaaca347f7ddc25aa9d5">getFeeTrack</a>().<a class="code hl_function" href="classxrpl_1_1LoadFeeTrack.html#a81842a661232df0190a3cb55d42ff8c3">lowerLocalFee</a>())</div>
<div class="line"><a id="l03587" name="l03587"></a><span class="lineno"> 3587</span> ;</div>
<div class="line"><a id="l03588" name="l03588"></a><span class="lineno"> 3588</span> };</div>
<div class="line"><a id="l03589" name="l03589"></a><span class="lineno"> 3589</span> </div>
<div class="line"><a id="l03590" name="l03590"></a><span class="lineno"> 3590</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l03591" name="l03591"></a><span class="lineno"> 3591</span> </div>
<div class="line"><a id="l03592" name="l03592"></a><span class="lineno"> 3592</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a id="l03593" name="l03593"></a><span class="lineno"> 3593</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span> borrowerPass = <span class="stringliteral">&quot;borrower&quot;</span>;</div>
<div class="line"><a id="l03594" name="l03594"></a><span class="lineno"> 3594</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span> borrowerSeed = <span class="stringliteral">&quot;ssBRAsLpH4778sLNYC4ik1JBJsBVf&quot;</span>;</div>
<div class="line"><a id="l03595" name="l03595"></a><span class="lineno"> 3595</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> borrower{borrowerPass, <a class="code hl_enumvalue" href="namespacexrpl.html#a0b0d50fcc4520f33b4417f1b74eee591a8183aa2c95dc1385c8f58bf1917fcb0b">KeyType::ed25519</a>};</div>
<div class="line"><a id="l03596" name="l03596"></a><span class="lineno"> 3596</span> <span class="keyword">auto</span> <span class="keyword">const</span> lenderPass = <span class="stringliteral">&quot;lender&quot;</span>;</div>
<div class="line"><a id="l03597" name="l03597"></a><span class="lineno"> 3597</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span> lenderSeed = <span class="stringliteral">&quot;shPTCZGwTEhJrYT8NbcNkeaa8pzPM&quot;</span>;</div>
<div class="line"><a id="l03598" name="l03598"></a><span class="lineno"> 3598</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> lender{lenderPass, <a class="code hl_enumvalue" href="namespacexrpl.html#a0b0d50fcc4520f33b4417f1b74eee591a8183aa2c95dc1385c8f58bf1917fcb0b">KeyType::ed25519</a>};</div>
<div class="line"><a id="l03599" name="l03599"></a><span class="lineno"> 3599</span> </div>
<div class="line"><a id="l03600" name="l03600"></a><span class="lineno"> 3600</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), alice, lender, borrower);</div>
<div class="line"><a id="l03601" name="l03601"></a><span class="lineno"> 3601</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03602" name="l03602"></a><span class="lineno"> 3602</span> env(<a class="code hl_enumvalue" href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">noop</a>(lender));</div>
<div class="line"><a id="l03603" name="l03603"></a><span class="lineno"> 3603</span> env(<a class="code hl_enumvalue" href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">noop</a>(lender));</div>
<div class="line"><a id="l03604" name="l03604"></a><span class="lineno"> 3604</span> env(<a class="code hl_enumvalue" href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">noop</a>(lender));</div>
<div class="line"><a id="l03605" name="l03605"></a><span class="lineno"> 3605</span> env(<a class="code hl_enumvalue" href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">noop</a>(lender));</div>
<div class="line"><a id="l03606" name="l03606"></a><span class="lineno"> 3606</span> env(<a class="code hl_enumvalue" href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">noop</a>(lender));</div>
<div class="line"><a id="l03607" name="l03607"></a><span class="lineno"> 3607</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03608" name="l03608"></a><span class="lineno"> 3608</span> </div>
<div class="line"><a id="l03609" name="l03609"></a><span class="lineno"> 3609</span> {</div>
<div class="line"><a id="l03610" name="l03610"></a><span class="lineno"> 3610</span> testcase(<span class="stringliteral">&quot;RPC AccountSet&quot;</span>);</div>
<div class="line"><a id="l03611" name="l03611"></a><span class="lineno"> 3611</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> txJson{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03612" name="l03612"></a><span class="lineno"> 3612</span> txJson[sfTransactionType] = <span class="stringliteral">&quot;AccountSet&quot;</span>;</div>
<div class="line"><a id="l03613" name="l03613"></a><span class="lineno"> 3613</span> txJson[sfAccount] = borrower.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a26a750f85953905d4d29b1477a38ea37">human</a>();</div>
<div class="line"><a id="l03614" name="l03614"></a><span class="lineno"> 3614</span> </div>
<div class="line"><a id="l03615" name="l03615"></a><span class="lineno"> 3615</span> <span class="keyword">auto</span> <span class="keyword">const</span> signParams = [&amp;]() {</div>
<div class="line"><a id="l03616" name="l03616"></a><span class="lineno"> 3616</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> signParams{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03617" name="l03617"></a><span class="lineno"> 3617</span> signParams[jss::passphrase] = borrowerPass;</div>
<div class="line"><a id="l03618" name="l03618"></a><span class="lineno"> 3618</span> signParams[jss::key_type] = <span class="stringliteral">&quot;ed25519&quot;</span>;</div>
<div class="line"><a id="l03619" name="l03619"></a><span class="lineno"> 3619</span> signParams[jss::tx_json] = txJson;</div>
<div class="line"><a id="l03620" name="l03620"></a><span class="lineno"> 3620</span> <span class="keywordflow">return</span> signParams;</div>
<div class="line"><a id="l03621" name="l03621"></a><span class="lineno"> 3621</span> }();</div>
<div class="line"><a id="l03622" name="l03622"></a><span class="lineno"> 3622</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSign = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;sign&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(signParams));</div>
<div class="line"><a id="l03623" name="l03623"></a><span class="lineno"> 3623</span> BEAST_EXPECT(jSign.isMember(jss::result) &amp;&amp; jSign[jss::result].isMember(jss::tx_json));</div>
<div class="line"><a id="l03624" name="l03624"></a><span class="lineno"> 3624</span> <span class="keyword">auto</span> txSignResult = jSign[jss::result][jss::tx_json];</div>
<div class="line"><a id="l03625" name="l03625"></a><span class="lineno"> 3625</span> <span class="keyword">auto</span> txSignBlob = jSign[jss::result][jss::tx_blob].asString();</div>
<div class="line"><a id="l03626" name="l03626"></a><span class="lineno"> 3626</span> txSignResult.removeMember(jss::hash);</div>
<div class="line"><a id="l03627" name="l03627"></a><span class="lineno"> 3627</span> </div>
<div class="line"><a id="l03628" name="l03628"></a><span class="lineno"> 3628</span> <span class="keyword">auto</span> <span class="keyword">const</span> jtx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(txJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(borrower));</div>
<div class="line"><a id="l03629" name="l03629"></a><span class="lineno"> 3629</span> BEAST_EXPECT(txSignResult == jtx.jv);</div>
<div class="line"><a id="l03630" name="l03630"></a><span class="lineno"> 3630</span> </div>
<div class="line"><a id="l03631" name="l03631"></a><span class="lineno"> 3631</span> lowerFee();</div>
<div class="line"><a id="l03632" name="l03632"></a><span class="lineno"> 3632</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmit = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;submit&quot;</span>, txSignBlob);</div>
<div class="line"><a id="l03633" name="l03633"></a><span class="lineno"> 3633</span> BEAST_EXPECT(</div>
<div class="line"><a id="l03634" name="l03634"></a><span class="lineno"> 3634</span> jSubmit.isMember(jss::result) &amp;&amp; jSubmit[jss::result].isMember(jss::engine_result) &amp;&amp;</div>
<div class="line"><a id="l03635" name="l03635"></a><span class="lineno"> 3635</span> jSubmit[jss::result][jss::engine_result].asString() == <span class="stringliteral">&quot;tesSUCCESS&quot;</span>);</div>
<div class="line"><a id="l03636" name="l03636"></a><span class="lineno"> 3636</span> </div>
<div class="line"><a id="l03637" name="l03637"></a><span class="lineno"> 3637</span> lowerFee();</div>
<div class="line"><a id="l03638" name="l03638"></a><span class="lineno"> 3638</span> env(jtx.jv, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a902ebcfb8e9d8d76fe6dc6cb026610f9">none</a>), <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1seq.html">seq</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a902ebcfb8e9d8d76fe6dc6cb026610f9">none</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a902ebcfb8e9d8d76fe6dc6cb026610f9">none</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1aeb93e4feaa048c9d133fdb81c6a5c66e">tefPAST_SEQ</a>));</div>
<div class="line"><a id="l03639" name="l03639"></a><span class="lineno"> 3639</span> }</div>
<div class="line"><a id="l03640" name="l03640"></a><span class="lineno"> 3640</span> </div>
<div class="line"><a id="l03641" name="l03641"></a><span class="lineno"> 3641</span> {</div>
<div class="line"><a id="l03642" name="l03642"></a><span class="lineno"> 3642</span> testcase(<span class="stringliteral">&quot;RPC LoanSet - illegal signature_target&quot;</span>);</div>
<div class="line"><a id="l03643" name="l03643"></a><span class="lineno"> 3643</span> </div>
<div class="line"><a id="l03644" name="l03644"></a><span class="lineno"> 3644</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> txJson{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03645" name="l03645"></a><span class="lineno"> 3645</span> txJson[sfTransactionType] = <span class="stringliteral">&quot;AccountSet&quot;</span>;</div>
<div class="line"><a id="l03646" name="l03646"></a><span class="lineno"> 3646</span> txJson[sfAccount] = borrower.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a26a750f85953905d4d29b1477a38ea37">human</a>();</div>
<div class="line"><a id="l03647" name="l03647"></a><span class="lineno"> 3647</span> </div>
<div class="line"><a id="l03648" name="l03648"></a><span class="lineno"> 3648</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerSignParams = [&amp;]() {</div>
<div class="line"><a id="l03649" name="l03649"></a><span class="lineno"> 3649</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> params{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03650" name="l03650"></a><span class="lineno"> 3650</span> params[jss::passphrase] = borrowerPass;</div>
<div class="line"><a id="l03651" name="l03651"></a><span class="lineno"> 3651</span> params[jss::key_type] = <span class="stringliteral">&quot;ed25519&quot;</span>;</div>
<div class="line"><a id="l03652" name="l03652"></a><span class="lineno"> 3652</span> params[jss::signature_target] = <span class="stringliteral">&quot;Destination&quot;</span>;</div>
<div class="line"><a id="l03653" name="l03653"></a><span class="lineno"> 3653</span> params[jss::tx_json] = txJson;</div>
<div class="line"><a id="l03654" name="l03654"></a><span class="lineno"> 3654</span> <span class="keywordflow">return</span> params;</div>
<div class="line"><a id="l03655" name="l03655"></a><span class="lineno"> 3655</span> }();</div>
<div class="line"><a id="l03656" name="l03656"></a><span class="lineno"> 3656</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSignBorrower = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;sign&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(borrowerSignParams));</div>
<div class="line"><a id="l03657" name="l03657"></a><span class="lineno"> 3657</span> BEAST_EXPECT(</div>
<div class="line"><a id="l03658" name="l03658"></a><span class="lineno"> 3658</span> jSignBorrower.isMember(jss::result) &amp;&amp; jSignBorrower[jss::result].isMember(jss::error) &amp;&amp;</div>
<div class="line"><a id="l03659" name="l03659"></a><span class="lineno"> 3659</span> jSignBorrower[jss::result][jss::error] == <span class="stringliteral">&quot;invalidParams&quot;</span> &amp;&amp;</div>
<div class="line"><a id="l03660" name="l03660"></a><span class="lineno"> 3660</span> jSignBorrower[jss::result].isMember(jss::error_message) &amp;&amp;</div>
<div class="line"><a id="l03661" name="l03661"></a><span class="lineno"> 3661</span> jSignBorrower[jss::result][jss::error_message] == <span class="stringliteral">&quot;Destination&quot;</span>);</div>
<div class="line"><a id="l03662" name="l03662"></a><span class="lineno"> 3662</span> }</div>
<div class="line"><a id="l03663" name="l03663"></a><span class="lineno"> 3663</span> {</div>
<div class="line"><a id="l03664" name="l03664"></a><span class="lineno"> 3664</span> testcase(<span class="stringliteral">&quot;RPC LoanSet - sign and submit borrower initiated&quot;</span>);</div>
<div class="line"><a id="l03665" name="l03665"></a><span class="lineno"> 3665</span> <span class="comment">// 1. Borrower creates the transaction</span></div>
<div class="line"><a id="l03666" name="l03666"></a><span class="lineno"> 3666</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> txJson{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03667" name="l03667"></a><span class="lineno"> 3667</span> txJson[sfTransactionType] = <span class="stringliteral">&quot;LoanSet&quot;</span>;</div>
<div class="line"><a id="l03668" name="l03668"></a><span class="lineno"> 3668</span> txJson[sfAccount] = borrower.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a26a750f85953905d4d29b1477a38ea37">human</a>();</div>
<div class="line"><a id="l03669" name="l03669"></a><span class="lineno"> 3669</span> txJson[sfCounterparty] = lender.human();</div>
<div class="line"><a id="l03670" name="l03670"></a><span class="lineno"> 3670</span> txJson[sfLoanBrokerID] =</div>
<div class="line"><a id="l03671" name="l03671"></a><span class="lineno"> 3671</span> <span class="stringliteral">&quot;FF924CD18A236C2B49CF8E80A351CEAC6A10171DC9F110025646894FEC&quot;</span></div>
<div class="line"><a id="l03672" name="l03672"></a><span class="lineno"> 3672</span> <span class="stringliteral">&quot;F83F&quot;</span></div>
<div class="line"><a id="l03673" name="l03673"></a><span class="lineno"> 3673</span> <span class="stringliteral">&quot;5C&quot;</span>;</div>
<div class="line"><a id="l03674" name="l03674"></a><span class="lineno"> 3674</span> txJson[sfPrincipalRequested] = <span class="stringliteral">&quot;100000000&quot;</span>;</div>
<div class="line"><a id="l03675" name="l03675"></a><span class="lineno"> 3675</span> txJson[sfPaymentTotal] = 10000;</div>
<div class="line"><a id="l03676" name="l03676"></a><span class="lineno"> 3676</span> txJson[sfPaymentInterval] = 3600;</div>
<div class="line"><a id="l03677" name="l03677"></a><span class="lineno"> 3677</span> txJson[sfGracePeriod] = 300;</div>
<div class="line"><a id="l03678" name="l03678"></a><span class="lineno"> 3678</span> txJson[sfFlags] = 65536; <span class="comment">// tfLoanOverpayment</span></div>
<div class="line"><a id="l03679" name="l03679"></a><span class="lineno"> 3679</span> txJson[sfFee] = <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(24 * baseFee / 10);</div>
<div class="line"><a id="l03680" name="l03680"></a><span class="lineno"> 3680</span> </div>
<div class="line"><a id="l03681" name="l03681"></a><span class="lineno"> 3681</span> <span class="comment">// 2. Borrower signs the transaction</span></div>
<div class="line"><a id="l03682" name="l03682"></a><span class="lineno"> 3682</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerSignParams = [&amp;]() {</div>
<div class="line"><a id="l03683" name="l03683"></a><span class="lineno"> 3683</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> params{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03684" name="l03684"></a><span class="lineno"> 3684</span> params[jss::passphrase] = borrowerPass;</div>
<div class="line"><a id="l03685" name="l03685"></a><span class="lineno"> 3685</span> params[jss::key_type] = <span class="stringliteral">&quot;ed25519&quot;</span>;</div>
<div class="line"><a id="l03686" name="l03686"></a><span class="lineno"> 3686</span> params[jss::tx_json] = txJson;</div>
<div class="line"><a id="l03687" name="l03687"></a><span class="lineno"> 3687</span> <span class="keywordflow">return</span> params;</div>
<div class="line"><a id="l03688" name="l03688"></a><span class="lineno"> 3688</span> }();</div>
<div class="line"><a id="l03689" name="l03689"></a><span class="lineno"> 3689</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSignBorrower = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;sign&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(borrowerSignParams));</div>
<div class="line"><a id="l03690" name="l03690"></a><span class="lineno"> 3690</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l03691" name="l03691"></a><span class="lineno"> 3691</span> jSignBorrower.isMember(jss::result) &amp;&amp; jSignBorrower[jss::result].isMember(jss::tx_json),</div>
<div class="line"><a id="l03692" name="l03692"></a><span class="lineno"> 3692</span> <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(jSignBorrower));</div>
<div class="line"><a id="l03693" name="l03693"></a><span class="lineno"> 3693</span> <span class="keyword">auto</span> <span class="keyword">const</span> txBorrowerSignResult = jSignBorrower[jss::result][jss::tx_json];</div>
<div class="line"><a id="l03694" name="l03694"></a><span class="lineno"> 3694</span> <span class="keyword">auto</span> <span class="keyword">const</span> txBorrowerSignBlob = jSignBorrower[jss::result][jss::tx_blob].asString();</div>
<div class="line"><a id="l03695" name="l03695"></a><span class="lineno"> 3695</span> </div>
<div class="line"><a id="l03696" name="l03696"></a><span class="lineno"> 3696</span> <span class="comment">// 2a. Borrower attempts to submit the transaction. It doesn&#39;t</span></div>
<div class="line"><a id="l03697" name="l03697"></a><span class="lineno"> 3697</span> <span class="comment">// work</span></div>
<div class="line"><a id="l03698" name="l03698"></a><span class="lineno"> 3698</span> {</div>
<div class="line"><a id="l03699" name="l03699"></a><span class="lineno"> 3699</span> lowerFee();</div>
<div class="line"><a id="l03700" name="l03700"></a><span class="lineno"> 3700</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlob = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;submit&quot;</span>, txBorrowerSignBlob);</div>
<div class="line"><a id="l03701" name="l03701"></a><span class="lineno"> 3701</span> BEAST_EXPECT(jSubmitBlob.isMember(jss::result));</div>
<div class="line"><a id="l03702" name="l03702"></a><span class="lineno"> 3702</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlobResult = jSubmitBlob[jss::result];</div>
<div class="line"><a id="l03703" name="l03703"></a><span class="lineno"> 3703</span> BEAST_EXPECT(jSubmitBlobResult.isMember(jss::tx_json));</div>
<div class="line"><a id="l03704" name="l03704"></a><span class="lineno"> 3704</span> <span class="comment">// Transaction fails because the CounterpartySignature is</span></div>
<div class="line"><a id="l03705" name="l03705"></a><span class="lineno"> 3705</span> <span class="comment">// missing</span></div>
<div class="line"><a id="l03706" name="l03706"></a><span class="lineno"> 3706</span> BEAST_EXPECT(</div>
<div class="line"><a id="l03707" name="l03707"></a><span class="lineno"> 3707</span> jSubmitBlobResult.isMember(jss::engine_result) &amp;&amp;</div>
<div class="line"><a id="l03708" name="l03708"></a><span class="lineno"> 3708</span> jSubmitBlobResult[jss::engine_result].asString() == <span class="stringliteral">&quot;temBAD_SIGNER&quot;</span>);</div>
<div class="line"><a id="l03709" name="l03709"></a><span class="lineno"> 3709</span> }</div>
<div class="line"><a id="l03710" name="l03710"></a><span class="lineno"> 3710</span> </div>
<div class="line"><a id="l03711" name="l03711"></a><span class="lineno"> 3711</span> <span class="comment">// 3. Borrower sends the signed transaction to the lender</span></div>
<div class="line"><a id="l03712" name="l03712"></a><span class="lineno"> 3712</span> <span class="comment">// 4. Lender signs the transaction</span></div>
<div class="line"><a id="l03713" name="l03713"></a><span class="lineno"> 3713</span> <span class="keyword">auto</span> <span class="keyword">const</span> lenderSignParams = [&amp;]() {</div>
<div class="line"><a id="l03714" name="l03714"></a><span class="lineno"> 3714</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> params{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03715" name="l03715"></a><span class="lineno"> 3715</span> params[jss::passphrase] = lenderPass;</div>
<div class="line"><a id="l03716" name="l03716"></a><span class="lineno"> 3716</span> params[jss::key_type] = <span class="stringliteral">&quot;ed25519&quot;</span>;</div>
<div class="line"><a id="l03717" name="l03717"></a><span class="lineno"> 3717</span> params[jss::signature_target] = <span class="stringliteral">&quot;CounterpartySignature&quot;</span>;</div>
<div class="line"><a id="l03718" name="l03718"></a><span class="lineno"> 3718</span> params[jss::tx_json] = txBorrowerSignResult;</div>
<div class="line"><a id="l03719" name="l03719"></a><span class="lineno"> 3719</span> <span class="keywordflow">return</span> params;</div>
<div class="line"><a id="l03720" name="l03720"></a><span class="lineno"> 3720</span> }();</div>
<div class="line"><a id="l03721" name="l03721"></a><span class="lineno"> 3721</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSignLender = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;sign&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(lenderSignParams));</div>
<div class="line"><a id="l03722" name="l03722"></a><span class="lineno"> 3722</span> BEAST_EXPECT(jSignLender.isMember(jss::result) &amp;&amp; jSignLender[jss::result].isMember(jss::tx_json));</div>
<div class="line"><a id="l03723" name="l03723"></a><span class="lineno"> 3723</span> <span class="keyword">auto</span> <span class="keyword">const</span> txLenderSignResult = jSignLender[jss::result][jss::tx_json];</div>
<div class="line"><a id="l03724" name="l03724"></a><span class="lineno"> 3724</span> <span class="keyword">auto</span> <span class="keyword">const</span> txLenderSignBlob = jSignLender[jss::result][jss::tx_blob].asString();</div>
<div class="line"><a id="l03725" name="l03725"></a><span class="lineno"> 3725</span> </div>
<div class="line"><a id="l03726" name="l03726"></a><span class="lineno"> 3726</span> <span class="comment">// 5. Lender submits the signed transaction blob</span></div>
<div class="line"><a id="l03727" name="l03727"></a><span class="lineno"> 3727</span> lowerFee();</div>
<div class="line"><a id="l03728" name="l03728"></a><span class="lineno"> 3728</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlob = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;submit&quot;</span>, txLenderSignBlob);</div>
<div class="line"><a id="l03729" name="l03729"></a><span class="lineno"> 3729</span> BEAST_EXPECT(jSubmitBlob.isMember(jss::result));</div>
<div class="line"><a id="l03730" name="l03730"></a><span class="lineno"> 3730</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlobResult = jSubmitBlob[jss::result];</div>
<div class="line"><a id="l03731" name="l03731"></a><span class="lineno"> 3731</span> BEAST_EXPECT(jSubmitBlobResult.isMember(jss::tx_json));</div>
<div class="line"><a id="l03732" name="l03732"></a><span class="lineno"> 3732</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlobTx = jSubmitBlobResult[jss::tx_json];</div>
<div class="line"><a id="l03733" name="l03733"></a><span class="lineno"> 3733</span> <span class="comment">// To get far enough to return tecNO_ENTRY means that the</span></div>
<div class="line"><a id="l03734" name="l03734"></a><span class="lineno"> 3734</span> <span class="comment">// signatures all validated. Of course the transaction won&#39;t</span></div>
<div class="line"><a id="l03735" name="l03735"></a><span class="lineno"> 3735</span> <span class="comment">// succeed because no Vault or Broker were created.</span></div>
<div class="line"><a id="l03736" name="l03736"></a><span class="lineno"> 3736</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l03737" name="l03737"></a><span class="lineno"> 3737</span> jSubmitBlobResult.isMember(jss::engine_result) &amp;&amp;</div>
<div class="line"><a id="l03738" name="l03738"></a><span class="lineno"> 3738</span> jSubmitBlobResult[jss::engine_result].asString() == <span class="stringliteral">&quot;tecNO_ENTRY&quot;</span>,</div>
<div class="line"><a id="l03739" name="l03739"></a><span class="lineno"> 3739</span> <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(jSubmitBlobResult));</div>
<div class="line"><a id="l03740" name="l03740"></a><span class="lineno"> 3740</span> </div>
<div class="line"><a id="l03741" name="l03741"></a><span class="lineno"> 3741</span> BEAST_EXPECT(!jSubmitBlob.isMember(jss::error) &amp;&amp; !jSubmitBlobResult.isMember(jss::error));</div>
<div class="line"><a id="l03742" name="l03742"></a><span class="lineno"> 3742</span> </div>
<div class="line"><a id="l03743" name="l03743"></a><span class="lineno"> 3743</span> <span class="comment">// 4-alt. Lender submits the transaction json originally</span></div>
<div class="line"><a id="l03744" name="l03744"></a><span class="lineno"> 3744</span> <span class="comment">// received from the Borrower. It gets signed, but is now a</span></div>
<div class="line"><a id="l03745" name="l03745"></a><span class="lineno"> 3745</span> <span class="comment">// duplicate, so fails. Borrower could done this instead of</span></div>
<div class="line"><a id="l03746" name="l03746"></a><span class="lineno"> 3746</span> <span class="comment">// steps 4 and 5.</span></div>
<div class="line"><a id="l03747" name="l03747"></a><span class="lineno"> 3747</span> lowerFee();</div>
<div class="line"><a id="l03748" name="l03748"></a><span class="lineno"> 3748</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;submit&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(lenderSignParams));</div>
<div class="line"><a id="l03749" name="l03749"></a><span class="lineno"> 3749</span> BEAST_EXPECT(jSubmitJson.isMember(jss::result));</div>
<div class="line"><a id="l03750" name="l03750"></a><span class="lineno"> 3750</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitJsonResult = jSubmitJson[jss::result];</div>
<div class="line"><a id="l03751" name="l03751"></a><span class="lineno"> 3751</span> BEAST_EXPECT(jSubmitJsonResult.isMember(jss::tx_json));</div>
<div class="line"><a id="l03752" name="l03752"></a><span class="lineno"> 3752</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitJsonTx = jSubmitJsonResult[jss::tx_json];</div>
<div class="line"><a id="l03753" name="l03753"></a><span class="lineno"> 3753</span> <span class="comment">// Since the previous tx claimed a fee, this duplicate is not</span></div>
<div class="line"><a id="l03754" name="l03754"></a><span class="lineno"> 3754</span> <span class="comment">// going anywhere</span></div>
<div class="line"><a id="l03755" name="l03755"></a><span class="lineno"> 3755</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l03756" name="l03756"></a><span class="lineno"> 3756</span> jSubmitJsonResult.isMember(jss::engine_result) &amp;&amp;</div>
<div class="line"><a id="l03757" name="l03757"></a><span class="lineno"> 3757</span> jSubmitJsonResult[jss::engine_result].asString() == <span class="stringliteral">&quot;tefPAST_SEQ&quot;</span>,</div>
<div class="line"><a id="l03758" name="l03758"></a><span class="lineno"> 3758</span> <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(jSubmitJsonResult));</div>
<div class="line"><a id="l03759" name="l03759"></a><span class="lineno"> 3759</span> </div>
<div class="line"><a id="l03760" name="l03760"></a><span class="lineno"> 3760</span> BEAST_EXPECT(!jSubmitJson.isMember(jss::error) &amp;&amp; !jSubmitJsonResult.isMember(jss::error));</div>
<div class="line"><a id="l03761" name="l03761"></a><span class="lineno"> 3761</span> </div>
<div class="line"><a id="l03762" name="l03762"></a><span class="lineno"> 3762</span> BEAST_EXPECT(jSubmitBlobTx == jSubmitJsonTx);</div>
<div class="line"><a id="l03763" name="l03763"></a><span class="lineno"> 3763</span> }</div>
<div class="line"><a id="l03764" name="l03764"></a><span class="lineno"> 3764</span> </div>
<div class="line"><a id="l03765" name="l03765"></a><span class="lineno"> 3765</span> {</div>
<div class="line"><a id="l03766" name="l03766"></a><span class="lineno"> 3766</span> testcase(<span class="stringliteral">&quot;RPC LoanSet - sign and submit lender initiated&quot;</span>);</div>
<div class="line"><a id="l03767" name="l03767"></a><span class="lineno"> 3767</span> <span class="comment">// 1. Lender creates the transaction</span></div>
<div class="line"><a id="l03768" name="l03768"></a><span class="lineno"> 3768</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> txJson{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03769" name="l03769"></a><span class="lineno"> 3769</span> txJson[sfTransactionType] = <span class="stringliteral">&quot;LoanSet&quot;</span>;</div>
<div class="line"><a id="l03770" name="l03770"></a><span class="lineno"> 3770</span> txJson[sfAccount] = lender.human();</div>
<div class="line"><a id="l03771" name="l03771"></a><span class="lineno"> 3771</span> txJson[sfCounterparty] = borrower.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a26a750f85953905d4d29b1477a38ea37">human</a>();</div>
<div class="line"><a id="l03772" name="l03772"></a><span class="lineno"> 3772</span> txJson[sfLoanBrokerID] =</div>
<div class="line"><a id="l03773" name="l03773"></a><span class="lineno"> 3773</span> <span class="stringliteral">&quot;FF924CD18A236C2B49CF8E80A351CEAC6A10171DC9F110025646894FEC&quot;</span></div>
<div class="line"><a id="l03774" name="l03774"></a><span class="lineno"> 3774</span> <span class="stringliteral">&quot;F83F&quot;</span></div>
<div class="line"><a id="l03775" name="l03775"></a><span class="lineno"> 3775</span> <span class="stringliteral">&quot;5C&quot;</span>;</div>
<div class="line"><a id="l03776" name="l03776"></a><span class="lineno"> 3776</span> txJson[sfPrincipalRequested] = <span class="stringliteral">&quot;100000000&quot;</span>;</div>
<div class="line"><a id="l03777" name="l03777"></a><span class="lineno"> 3777</span> txJson[sfPaymentTotal] = 10000;</div>
<div class="line"><a id="l03778" name="l03778"></a><span class="lineno"> 3778</span> txJson[sfPaymentInterval] = 3600;</div>
<div class="line"><a id="l03779" name="l03779"></a><span class="lineno"> 3779</span> txJson[sfGracePeriod] = 300;</div>
<div class="line"><a id="l03780" name="l03780"></a><span class="lineno"> 3780</span> txJson[sfFlags] = 65536; <span class="comment">// tfLoanOverpayment</span></div>
<div class="line"><a id="l03781" name="l03781"></a><span class="lineno"> 3781</span> txJson[sfFee] = <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(24 * baseFee / 10);</div>
<div class="line"><a id="l03782" name="l03782"></a><span class="lineno"> 3782</span> </div>
<div class="line"><a id="l03783" name="l03783"></a><span class="lineno"> 3783</span> <span class="comment">// 2. Lender signs the transaction</span></div>
<div class="line"><a id="l03784" name="l03784"></a><span class="lineno"> 3784</span> <span class="keyword">auto</span> <span class="keyword">const</span> lenderSignParams = [&amp;]() {</div>
<div class="line"><a id="l03785" name="l03785"></a><span class="lineno"> 3785</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> params{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03786" name="l03786"></a><span class="lineno"> 3786</span> params[jss::passphrase] = lenderPass;</div>
<div class="line"><a id="l03787" name="l03787"></a><span class="lineno"> 3787</span> params[jss::key_type] = <span class="stringliteral">&quot;ed25519&quot;</span>;</div>
<div class="line"><a id="l03788" name="l03788"></a><span class="lineno"> 3788</span> params[jss::tx_json] = txJson;</div>
<div class="line"><a id="l03789" name="l03789"></a><span class="lineno"> 3789</span> <span class="keywordflow">return</span> params;</div>
<div class="line"><a id="l03790" name="l03790"></a><span class="lineno"> 3790</span> }();</div>
<div class="line"><a id="l03791" name="l03791"></a><span class="lineno"> 3791</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSignLender = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;sign&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(lenderSignParams));</div>
<div class="line"><a id="l03792" name="l03792"></a><span class="lineno"> 3792</span> BEAST_EXPECT(jSignLender.isMember(jss::result) &amp;&amp; jSignLender[jss::result].isMember(jss::tx_json));</div>
<div class="line"><a id="l03793" name="l03793"></a><span class="lineno"> 3793</span> <span class="keyword">auto</span> <span class="keyword">const</span> txLenderSignResult = jSignLender[jss::result][jss::tx_json];</div>
<div class="line"><a id="l03794" name="l03794"></a><span class="lineno"> 3794</span> <span class="keyword">auto</span> <span class="keyword">const</span> txLenderSignBlob = jSignLender[jss::result][jss::tx_blob].asString();</div>
<div class="line"><a id="l03795" name="l03795"></a><span class="lineno"> 3795</span> </div>
<div class="line"><a id="l03796" name="l03796"></a><span class="lineno"> 3796</span> <span class="comment">// 2a. Lender attempts to submit the transaction. It doesn&#39;t</span></div>
<div class="line"><a id="l03797" name="l03797"></a><span class="lineno"> 3797</span> <span class="comment">// work</span></div>
<div class="line"><a id="l03798" name="l03798"></a><span class="lineno"> 3798</span> {</div>
<div class="line"><a id="l03799" name="l03799"></a><span class="lineno"> 3799</span> lowerFee();</div>
<div class="line"><a id="l03800" name="l03800"></a><span class="lineno"> 3800</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlob = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;submit&quot;</span>, txLenderSignBlob);</div>
<div class="line"><a id="l03801" name="l03801"></a><span class="lineno"> 3801</span> BEAST_EXPECT(jSubmitBlob.isMember(jss::result));</div>
<div class="line"><a id="l03802" name="l03802"></a><span class="lineno"> 3802</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlobResult = jSubmitBlob[jss::result];</div>
<div class="line"><a id="l03803" name="l03803"></a><span class="lineno"> 3803</span> BEAST_EXPECT(jSubmitBlobResult.isMember(jss::tx_json));</div>
<div class="line"><a id="l03804" name="l03804"></a><span class="lineno"> 3804</span> <span class="comment">// Transaction fails because the CounterpartySignature is</span></div>
<div class="line"><a id="l03805" name="l03805"></a><span class="lineno"> 3805</span> <span class="comment">// missing</span></div>
<div class="line"><a id="l03806" name="l03806"></a><span class="lineno"> 3806</span> BEAST_EXPECT(</div>
<div class="line"><a id="l03807" name="l03807"></a><span class="lineno"> 3807</span> jSubmitBlobResult.isMember(jss::engine_result) &amp;&amp;</div>
<div class="line"><a id="l03808" name="l03808"></a><span class="lineno"> 3808</span> jSubmitBlobResult[jss::engine_result].asString() == <span class="stringliteral">&quot;temBAD_SIGNER&quot;</span>);</div>
<div class="line"><a id="l03809" name="l03809"></a><span class="lineno"> 3809</span> }</div>
<div class="line"><a id="l03810" name="l03810"></a><span class="lineno"> 3810</span> </div>
<div class="line"><a id="l03811" name="l03811"></a><span class="lineno"> 3811</span> <span class="comment">// 3. Lender sends the signed transaction to the Borrower</span></div>
<div class="line"><a id="l03812" name="l03812"></a><span class="lineno"> 3812</span> <span class="comment">// 4. Borrower signs the transaction</span></div>
<div class="line"><a id="l03813" name="l03813"></a><span class="lineno"> 3813</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerSignParams = [&amp;]() {</div>
<div class="line"><a id="l03814" name="l03814"></a><span class="lineno"> 3814</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> params{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l03815" name="l03815"></a><span class="lineno"> 3815</span> params[jss::passphrase] = borrowerPass;</div>
<div class="line"><a id="l03816" name="l03816"></a><span class="lineno"> 3816</span> params[jss::key_type] = <span class="stringliteral">&quot;ed25519&quot;</span>;</div>
<div class="line"><a id="l03817" name="l03817"></a><span class="lineno"> 3817</span> params[jss::signature_target] = <span class="stringliteral">&quot;CounterpartySignature&quot;</span>;</div>
<div class="line"><a id="l03818" name="l03818"></a><span class="lineno"> 3818</span> params[jss::tx_json] = txLenderSignResult;</div>
<div class="line"><a id="l03819" name="l03819"></a><span class="lineno"> 3819</span> <span class="keywordflow">return</span> params;</div>
<div class="line"><a id="l03820" name="l03820"></a><span class="lineno"> 3820</span> }();</div>
<div class="line"><a id="l03821" name="l03821"></a><span class="lineno"> 3821</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSignBorrower = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;sign&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(borrowerSignParams));</div>
<div class="line"><a id="l03822" name="l03822"></a><span class="lineno"> 3822</span> BEAST_EXPECT(jSignBorrower.isMember(jss::result) &amp;&amp; jSignBorrower[jss::result].isMember(jss::tx_json));</div>
<div class="line"><a id="l03823" name="l03823"></a><span class="lineno"> 3823</span> <span class="keyword">auto</span> <span class="keyword">const</span> txBorrowerSignResult = jSignBorrower[jss::result][jss::tx_json];</div>
<div class="line"><a id="l03824" name="l03824"></a><span class="lineno"> 3824</span> <span class="keyword">auto</span> <span class="keyword">const</span> txBorrowerSignBlob = jSignBorrower[jss::result][jss::tx_blob].asString();</div>
<div class="line"><a id="l03825" name="l03825"></a><span class="lineno"> 3825</span> </div>
<div class="line"><a id="l03826" name="l03826"></a><span class="lineno"> 3826</span> <span class="comment">// 5. Borrower submits the signed transaction blob</span></div>
<div class="line"><a id="l03827" name="l03827"></a><span class="lineno"> 3827</span> lowerFee();</div>
<div class="line"><a id="l03828" name="l03828"></a><span class="lineno"> 3828</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlob = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;submit&quot;</span>, txBorrowerSignBlob);</div>
<div class="line"><a id="l03829" name="l03829"></a><span class="lineno"> 3829</span> BEAST_EXPECT(jSubmitBlob.isMember(jss::result));</div>
<div class="line"><a id="l03830" name="l03830"></a><span class="lineno"> 3830</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlobResult = jSubmitBlob[jss::result];</div>
<div class="line"><a id="l03831" name="l03831"></a><span class="lineno"> 3831</span> BEAST_EXPECT(jSubmitBlobResult.isMember(jss::tx_json));</div>
<div class="line"><a id="l03832" name="l03832"></a><span class="lineno"> 3832</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitBlobTx = jSubmitBlobResult[jss::tx_json];</div>
<div class="line"><a id="l03833" name="l03833"></a><span class="lineno"> 3833</span> <span class="comment">// To get far enough to return tecNO_ENTRY means that the</span></div>
<div class="line"><a id="l03834" name="l03834"></a><span class="lineno"> 3834</span> <span class="comment">// signatures all validated. Of course the transaction won&#39;t</span></div>
<div class="line"><a id="l03835" name="l03835"></a><span class="lineno"> 3835</span> <span class="comment">// succeed because no Vault or Broker were created.</span></div>
<div class="line"><a id="l03836" name="l03836"></a><span class="lineno"> 3836</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l03837" name="l03837"></a><span class="lineno"> 3837</span> jSubmitBlobResult.isMember(jss::engine_result) &amp;&amp;</div>
<div class="line"><a id="l03838" name="l03838"></a><span class="lineno"> 3838</span> jSubmitBlobResult[jss::engine_result].asString() == <span class="stringliteral">&quot;tecNO_ENTRY&quot;</span>,</div>
<div class="line"><a id="l03839" name="l03839"></a><span class="lineno"> 3839</span> <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(jSubmitBlobResult));</div>
<div class="line"><a id="l03840" name="l03840"></a><span class="lineno"> 3840</span> </div>
<div class="line"><a id="l03841" name="l03841"></a><span class="lineno"> 3841</span> BEAST_EXPECT(!jSubmitBlob.isMember(jss::error) &amp;&amp; !jSubmitBlobResult.isMember(jss::error));</div>
<div class="line"><a id="l03842" name="l03842"></a><span class="lineno"> 3842</span> </div>
<div class="line"><a id="l03843" name="l03843"></a><span class="lineno"> 3843</span> <span class="comment">// 4-alt. Borrower submits the transaction json originally</span></div>
<div class="line"><a id="l03844" name="l03844"></a><span class="lineno"> 3844</span> <span class="comment">// received from the Lender. It gets signed, but is now a</span></div>
<div class="line"><a id="l03845" name="l03845"></a><span class="lineno"> 3845</span> <span class="comment">// duplicate, so fails. Lender could done this instead of steps</span></div>
<div class="line"><a id="l03846" name="l03846"></a><span class="lineno"> 3846</span> <span class="comment">// 4 and 5.</span></div>
<div class="line"><a id="l03847" name="l03847"></a><span class="lineno"> 3847</span> lowerFee();</div>
<div class="line"><a id="l03848" name="l03848"></a><span class="lineno"> 3848</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;submit&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(borrowerSignParams));</div>
<div class="line"><a id="l03849" name="l03849"></a><span class="lineno"> 3849</span> BEAST_EXPECT(jSubmitJson.isMember(jss::result));</div>
<div class="line"><a id="l03850" name="l03850"></a><span class="lineno"> 3850</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitJsonResult = jSubmitJson[jss::result];</div>
<div class="line"><a id="l03851" name="l03851"></a><span class="lineno"> 3851</span> BEAST_EXPECT(jSubmitJsonResult.isMember(jss::tx_json));</div>
<div class="line"><a id="l03852" name="l03852"></a><span class="lineno"> 3852</span> <span class="keyword">auto</span> <span class="keyword">const</span> jSubmitJsonTx = jSubmitJsonResult[jss::tx_json];</div>
<div class="line"><a id="l03853" name="l03853"></a><span class="lineno"> 3853</span> <span class="comment">// Since the previous tx claimed a fee, this duplicate is not</span></div>
<div class="line"><a id="l03854" name="l03854"></a><span class="lineno"> 3854</span> <span class="comment">// going anywhere</span></div>
<div class="line"><a id="l03855" name="l03855"></a><span class="lineno"> 3855</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l03856" name="l03856"></a><span class="lineno"> 3856</span> jSubmitJsonResult.isMember(jss::engine_result) &amp;&amp;</div>
<div class="line"><a id="l03857" name="l03857"></a><span class="lineno"> 3857</span> jSubmitJsonResult[jss::engine_result].asString() == <span class="stringliteral">&quot;tefPAST_SEQ&quot;</span>,</div>
<div class="line"><a id="l03858" name="l03858"></a><span class="lineno"> 3858</span> <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(jSubmitJsonResult));</div>
<div class="line"><a id="l03859" name="l03859"></a><span class="lineno"> 3859</span> </div>
<div class="line"><a id="l03860" name="l03860"></a><span class="lineno"> 3860</span> BEAST_EXPECT(!jSubmitJson.isMember(jss::error) &amp;&amp; !jSubmitJsonResult.isMember(jss::error));</div>
<div class="line"><a id="l03861" name="l03861"></a><span class="lineno"> 3861</span> </div>
<div class="line"><a id="l03862" name="l03862"></a><span class="lineno"> 3862</span> BEAST_EXPECT(jSubmitBlobTx == jSubmitJsonTx);</div>
<div class="line"><a id="l03863" name="l03863"></a><span class="lineno"> 3863</span> }</div>
<div class="line"><a id="l03864" name="l03864"></a><span class="lineno"> 3864</span> }</div>
</div>
<div class="line"><a id="l03865" name="l03865"></a><span class="lineno"> 3865</span> </div>
<div class="line"><a id="l03866" name="l03866"></a><span class="lineno"> 3866</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen03867" data-start="{" data-end="}">
<div class="line"><a id="l03867" name="l03867"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#aff3364828cb27e915a7086be2e436a1c"> 3867</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aff3364828cb27e915a7086be2e436a1c">testServiceFeeOnBrokerDeepFreeze</a>()</div>
<div class="line"><a id="l03868" name="l03868"></a><span class="lineno"> 3868</span> {</div>
<div class="line"><a id="l03869" name="l03869"></a><span class="lineno"> 3869</span> testcase &lt;&lt; <span class="stringliteral">&quot;Service Fee On Broker Deep Freeze&quot;</span>;</div>
<div class="line"><a id="l03870" name="l03870"></a><span class="lineno"> 3870</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l03871" name="l03871"></a><span class="lineno"> 3871</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03872" name="l03872"></a><span class="lineno"> 3872</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l03873" name="l03873"></a><span class="lineno"> 3873</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l03874" name="l03874"></a><span class="lineno"> 3874</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> broker(<span class="stringliteral">&quot;broker&quot;</span>);</div>
<div class="line"><a id="l03875" name="l03875"></a><span class="lineno"> 3875</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a> = issuer[<span class="stringliteral">&quot;IOU&quot;</span>];</div>
<div class="line"><a id="l03876" name="l03876"></a><span class="lineno"> 3876</span> </div>
<div class="line"><a id="l03877" name="l03877"></a><span class="lineno"> 3877</span> <span class="keywordflow">for</span> (<span class="keywordtype">bool</span> <span class="keyword">const</span> deepFreeze : {<span class="keyword">true</span>, <span class="keyword">false</span>})</div>
<div class="line"><a id="l03878" name="l03878"></a><span class="lineno"> 3878</span> {</div>
<div class="line"><a id="l03879" name="l03879"></a><span class="lineno"> 3879</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a id="l03880" name="l03880"></a><span class="lineno"> 3880</span> </div>
<div class="line"><a id="l03881" name="l03881"></a><span class="lineno"> 3881</span> <span class="keyword">auto</span> getCoverBalance = [&amp;](<a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; brokerInfo, <span class="keyword">auto</span> <span class="keyword">const</span>&amp; accountField) {</div>
<div class="line"><a id="l03882" name="l03882"></a><span class="lineno"> 3882</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> le = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>)); BEAST_EXPECT(le))</div>
<div class="line"><a id="l03883" name="l03883"></a><span class="lineno"> 3883</span> {</div>
<div class="line"><a id="l03884" name="l03884"></a><span class="lineno"> 3884</span> <span class="keyword">auto</span> <span class="keyword">const</span> account = le-&gt;at(accountField);</div>
<div class="line"><a id="l03885" name="l03885"></a><span class="lineno"> 3885</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> sleLine = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#aa21a42ef67381b26994fa7a9960b1306">keylet::line</a>(account, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>)); BEAST_EXPECT(sleLine))</div>
<div class="line"><a id="l03886" name="l03886"></a><span class="lineno"> 3886</span> {</div>
<div class="line"><a id="l03887" name="l03887"></a><span class="lineno"> 3887</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a> = sleLine-&gt;at(sfBalance);</div>
<div class="line"><a id="l03888" name="l03888"></a><span class="lineno"> 3888</span> <span class="keywordflow">if</span> (account &gt; issuer.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#aefcff537de98b56ea2f59a9b618cd246">id</a>())</div>
<div class="line"><a id="l03889" name="l03889"></a><span class="lineno"> 3889</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a>.negate();</div>
<div class="line"><a id="l03890" name="l03890"></a><span class="lineno"> 3890</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a>;</div>
<div class="line"><a id="l03891" name="l03891"></a><span class="lineno"> 3891</span> }</div>
<div class="line"><a id="l03892" name="l03892"></a><span class="lineno"> 3892</span> }</div>
<div class="line"><a id="l03893" name="l03893"></a><span class="lineno"> 3893</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>};</div>
<div class="line"><a id="l03894" name="l03894"></a><span class="lineno"> 3894</span> };</div>
<div class="line"><a id="l03895" name="l03895"></a><span class="lineno"> 3895</span> </div>
<div class="line"><a id="l03896" name="l03896"></a><span class="lineno"> 3896</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(20&#39;000), issuer, broker, borrower);</div>
<div class="line"><a id="l03897" name="l03897"></a><span class="lineno"> 3897</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03898" name="l03898"></a><span class="lineno"> 3898</span> </div>
<div class="line"><a id="l03899" name="l03899"></a><span class="lineno"> 3899</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(20&#39;000&#39;000)));</div>
<div class="line"><a id="l03900" name="l03900"></a><span class="lineno"> 3900</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(10&#39;000&#39;000)));</div>
<div class="line"><a id="l03901" name="l03901"></a><span class="lineno"> 3901</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03902" name="l03902"></a><span class="lineno"> 3902</span> </div>
<div class="line"><a id="l03903" name="l03903"></a><span class="lineno"> 3903</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerInfo = createVaultAndBroker(env, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>, broker);</div>
<div class="line"><a id="l03904" name="l03904"></a><span class="lineno"> 3904</span> </div>
<div class="line"><a id="l03905" name="l03905"></a><span class="lineno"> 3905</span> BEAST_EXPECT(getCoverBalance(brokerInfo, sfAccount) == <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(1&#39;000));</div>
<div class="line"><a id="l03906" name="l03906"></a><span class="lineno"> 3906</span> </div>
<div class="line"><a id="l03907" name="l03907"></a><span class="lineno"> 3907</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, 1);</div>
<div class="line"><a id="l03908" name="l03908"></a><span class="lineno"> 3908</span> </div>
<div class="line"><a id="l03909" name="l03909"></a><span class="lineno"> 3909</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, 10&#39;000),</div>
<div class="line"><a id="l03910" name="l03910"></a><span class="lineno"> 3910</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, broker),</div>
<div class="line"><a id="l03911" name="l03911"></a><span class="lineno"> 3911</span> loanServiceFee(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(100).value()),</div>
<div class="line"><a id="l03912" name="l03912"></a><span class="lineno"> 3912</span> paymentInterval(100),</div>
<div class="line"><a id="l03913" name="l03913"></a><span class="lineno"> 3913</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100)));</div>
<div class="line"><a id="l03914" name="l03914"></a><span class="lineno"> 3914</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03915" name="l03915"></a><span class="lineno"> 3915</span> </div>
<div class="line"><a id="l03916" name="l03916"></a><span class="lineno"> 3916</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(borrower, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(20&#39;000&#39;000)));</div>
<div class="line"><a id="l03917" name="l03917"></a><span class="lineno"> 3917</span> <span class="comment">// The borrower increases their limit and acquires some IOU so</span></div>
<div class="line"><a id="l03918" name="l03918"></a><span class="lineno"> 3918</span> <span class="comment">// they can pay interest</span></div>
<div class="line"><a id="l03919" name="l03919"></a><span class="lineno"> 3919</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(500)));</div>
<div class="line"><a id="l03920" name="l03920"></a><span class="lineno"> 3920</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03921" name="l03921"></a><span class="lineno"> 3921</span> </div>
<div class="line"><a id="l03922" name="l03922"></a><span class="lineno"> 3922</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> le = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>)); BEAST_EXPECT(le))</div>
<div class="line"><a id="l03923" name="l03923"></a><span class="lineno"> 3923</span> {</div>
<div class="line"><a id="l03924" name="l03924"></a><span class="lineno"> 3924</span> <span class="keywordflow">if</span> (deepFreeze)</div>
<div class="line"><a id="l03925" name="l03925"></a><span class="lineno"> 3925</span> {</div>
<div class="line"><a id="l03926" name="l03926"></a><span class="lineno"> 3926</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(issuer, broker[<span class="stringliteral">&quot;IOU&quot;</span>](0), <a class="code hl_variable" href="namespacexrpl.html#ae974e82cf9dee1293007ca183f0e1ae2">tfSetFreeze</a> | <a class="code hl_variable" href="namespacexrpl.html#a9f9ee3523ab53fb96dbb6e80d6ca2992">tfSetDeepFreeze</a>));</div>
<div class="line"><a id="l03927" name="l03927"></a><span class="lineno"> 3927</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03928" name="l03928"></a><span class="lineno"> 3928</span> }</div>
<div class="line"><a id="l03929" name="l03929"></a><span class="lineno"> 3929</span> </div>
<div class="line"><a id="l03930" name="l03930"></a><span class="lineno"> 3930</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(10&#39;100)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100)));</div>
<div class="line"><a id="l03931" name="l03931"></a><span class="lineno"> 3931</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03932" name="l03932"></a><span class="lineno"> 3932</span> </div>
<div class="line"><a id="l03933" name="l03933"></a><span class="lineno"> 3933</span> <span class="keywordflow">if</span> (deepFreeze)</div>
<div class="line"><a id="l03934" name="l03934"></a><span class="lineno"> 3934</span> {</div>
<div class="line"><a id="l03935" name="l03935"></a><span class="lineno"> 3935</span> <span class="comment">// The fee goes to the broker pseudo-account</span></div>
<div class="line"><a id="l03936" name="l03936"></a><span class="lineno"> 3936</span> BEAST_EXPECT(getCoverBalance(brokerInfo, sfAccount) == <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(1&#39;100));</div>
<div class="line"><a id="l03937" name="l03937"></a><span class="lineno"> 3937</span> BEAST_EXPECT(getCoverBalance(brokerInfo, sfOwner) == <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(8&#39;999&#39;000));</div>
<div class="line"><a id="l03938" name="l03938"></a><span class="lineno"> 3938</span> }</div>
<div class="line"><a id="l03939" name="l03939"></a><span class="lineno"> 3939</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l03940" name="l03940"></a><span class="lineno"> 3940</span> {</div>
<div class="line"><a id="l03941" name="l03941"></a><span class="lineno"> 3941</span> <span class="comment">// The fee goes to the broker account</span></div>
<div class="line"><a id="l03942" name="l03942"></a><span class="lineno"> 3942</span> BEAST_EXPECT(getCoverBalance(brokerInfo, sfOwner) == <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(8&#39;999&#39;100));</div>
<div class="line"><a id="l03943" name="l03943"></a><span class="lineno"> 3943</span> BEAST_EXPECT(getCoverBalance(brokerInfo, sfAccount) == <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(1&#39;000));</div>
<div class="line"><a id="l03944" name="l03944"></a><span class="lineno"> 3944</span> }</div>
<div class="line"><a id="l03945" name="l03945"></a><span class="lineno"> 3945</span> }</div>
<div class="line"><a id="l03946" name="l03946"></a><span class="lineno"> 3946</span> };</div>
<div class="line"><a id="l03947" name="l03947"></a><span class="lineno"> 3947</span> }</div>
</div>
<div class="line"><a id="l03948" name="l03948"></a><span class="lineno"> 3948</span> </div>
<div class="line"><a id="l03949" name="l03949"></a><span class="lineno"> 3949</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen03950" data-start="{" data-end="}">
<div class="line"><a id="l03950" name="l03950"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a6342c21a806d24708eb43912904c0b6a"> 3950</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a6342c21a806d24708eb43912904c0b6a">testIssuerLoan</a>()</div>
<div class="line"><a id="l03951" name="l03951"></a><span class="lineno"> 3951</span> {</div>
<div class="line"><a id="l03952" name="l03952"></a><span class="lineno"> 3952</span> testcase &lt;&lt; <span class="stringliteral">&quot;Issuer Loan&quot;</span>;</div>
<div class="line"><a id="l03953" name="l03953"></a><span class="lineno"> 3953</span> </div>
<div class="line"><a id="l03954" name="l03954"></a><span class="lineno"> 3954</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l03955" name="l03955"></a><span class="lineno"> 3955</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03956" name="l03956"></a><span class="lineno"> 3956</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l03957" name="l03957"></a><span class="lineno"> 3957</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower = issuer;</div>
<div class="line"><a id="l03958" name="l03958"></a><span class="lineno"> 3958</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender(<span class="stringliteral">&quot;lender&quot;</span>);</div>
<div class="line"><a id="l03959" name="l03959"></a><span class="lineno"> 3959</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a id="l03960" name="l03960"></a><span class="lineno"> 3960</span> </div>
<div class="line"><a id="l03961" name="l03961"></a><span class="lineno"> 3961</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000), issuer, lender);</div>
<div class="line"><a id="l03962" name="l03962"></a><span class="lineno"> 3962</span> </div>
<div class="line"><a id="l03963" name="l03963"></a><span class="lineno"> 3963</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a> <span class="keyword">constexpr</span> issuerBalance = 10&#39;000&#39;000;</div>
<div class="line"><a id="l03964" name="l03964"></a><span class="lineno"> 3964</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> asset({.env = env, .issuer = issuer, .holders = {lender}, .pay = issuerBalance});</div>
<div class="line"><a id="l03965" name="l03965"></a><span class="lineno"> 3965</span> </div>
<div class="line"><a id="l03966" name="l03966"></a><span class="lineno"> 3966</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> brokerParams{</div>
<div class="line"><a id="l03967" name="l03967"></a><span class="lineno"> 3967</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a25badc9387457857607edbadf6fac63e">debtMax</a> = 200,</div>
<div class="line"><a id="l03968" name="l03968"></a><span class="lineno"> 3968</span> };</div>
<div class="line"><a id="l03969" name="l03969"></a><span class="lineno"> 3969</span> <span class="keyword">auto</span> <span class="keyword">const</span> broker = createVaultAndBroker(env, asset, lender, brokerParams);</div>
<div class="line"><a id="l03970" name="l03970"></a><span class="lineno"> 3970</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l03971" name="l03971"></a><span class="lineno"> 3971</span> <span class="comment">// Create Loan</span></div>
<div class="line"><a id="l03972" name="l03972"></a><span class="lineno"> 3972</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, 200), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender), loanSetFee);</div>
<div class="line"><a id="l03973" name="l03973"></a><span class="lineno"> 3973</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03974" name="l03974"></a><span class="lineno"> 3974</span> <span class="comment">// Issuer should not create MPToken</span></div>
<div class="line"><a id="l03975" name="l03975"></a><span class="lineno"> 3975</span> BEAST_EXPECT(!env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#ab3ec6c5e531adf3b2fbee3a984c3d453">keylet::mptoken</a>(asset.issuanceID(), issuer)));</div>
<div class="line"><a id="l03976" name="l03976"></a><span class="lineno"> 3976</span> <span class="comment">// Issuer &quot;borrowed&quot; 200, OutstandingAmount decreased by 200</span></div>
<div class="line"><a id="l03977" name="l03977"></a><span class="lineno"> 3977</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(issuer, asset) == asset(-issuerBalance + 200));</div>
<div class="line"><a id="l03978" name="l03978"></a><span class="lineno"> 3978</span> <span class="comment">// Pay Loan</span></div>
<div class="line"><a id="l03979" name="l03979"></a><span class="lineno"> 3979</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, 1);</div>
<div class="line"><a id="l03980" name="l03980"></a><span class="lineno"> 3980</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, asset(200)));</div>
<div class="line"><a id="l03981" name="l03981"></a><span class="lineno"> 3981</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03982" name="l03982"></a><span class="lineno"> 3982</span> <span class="comment">// Issuer &quot;re-payed&quot; 200, OutstandingAmount increased by 200</span></div>
<div class="line"><a id="l03983" name="l03983"></a><span class="lineno"> 3983</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(issuer, asset) == asset(-issuerBalance));</div>
<div class="line"><a id="l03984" name="l03984"></a><span class="lineno"> 3984</span> }</div>
</div>
<div class="line"><a id="l03985" name="l03985"></a><span class="lineno"> 3985</span> </div>
<div class="line"><a id="l03986" name="l03986"></a><span class="lineno"> 3986</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen03987" data-start="{" data-end="}">
<div class="line"><a id="l03987" name="l03987"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a76e4b8e68d7ee34160bb33c8ccd84b9b"> 3987</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a76e4b8e68d7ee34160bb33c8ccd84b9b">testInvalidLoanDelete</a>()</div>
<div class="line"><a id="l03988" name="l03988"></a><span class="lineno"> 3988</span> {</div>
<div class="line"><a id="l03989" name="l03989"></a><span class="lineno"> 3989</span> testcase(<span class="stringliteral">&quot;Invalid LoanDelete&quot;</span>);</div>
<div class="line"><a id="l03990" name="l03990"></a><span class="lineno"> 3990</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l03991" name="l03991"></a><span class="lineno"> 3991</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l03992" name="l03992"></a><span class="lineno"> 3992</span> </div>
<div class="line"><a id="l03993" name="l03993"></a><span class="lineno"> 3993</span> <span class="comment">// preflight: temINVALID, LoanID == zero</span></div>
<div class="line"><a id="l03994" name="l03994"></a><span class="lineno"> 3994</span> {</div>
<div class="line"><a id="l03995" name="l03995"></a><span class="lineno"> 3995</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a id="l03996" name="l03996"></a><span class="lineno"> 3996</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a id="l03997" name="l03997"></a><span class="lineno"> 3997</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000), alice);</div>
<div class="line"><a id="l03998" name="l03998"></a><span class="lineno"> 3998</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l03999" name="l03999"></a><span class="lineno"> 3999</span> env(del(alice, beast::zero), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l04000" name="l04000"></a><span class="lineno"> 4000</span> }</div>
<div class="line"><a id="l04001" name="l04001"></a><span class="lineno"> 4001</span> }</div>
</div>
<div class="line"><a id="l04002" name="l04002"></a><span class="lineno"> 4002</span> </div>
<div class="line"><a id="l04003" name="l04003"></a><span class="lineno"> 4003</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04004" data-start="{" data-end="}">
<div class="line"><a id="l04004" name="l04004"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ab26a56e895cd9d642b6d2801fd594eb9"> 4004</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ab26a56e895cd9d642b6d2801fd594eb9">testInvalidLoanManage</a>()</div>
<div class="line"><a id="l04005" name="l04005"></a><span class="lineno"> 4005</span> {</div>
<div class="line"><a id="l04006" name="l04006"></a><span class="lineno"> 4006</span> testcase(<span class="stringliteral">&quot;Invalid LoanManage&quot;</span>);</div>
<div class="line"><a id="l04007" name="l04007"></a><span class="lineno"> 4007</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04008" name="l04008"></a><span class="lineno"> 4008</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04009" name="l04009"></a><span class="lineno"> 4009</span> </div>
<div class="line"><a id="l04010" name="l04010"></a><span class="lineno"> 4010</span> <span class="comment">// preflight: temINVALID, LoanID == zero</span></div>
<div class="line"><a id="l04011" name="l04011"></a><span class="lineno"> 4011</span> {</div>
<div class="line"><a id="l04012" name="l04012"></a><span class="lineno"> 4012</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a id="l04013" name="l04013"></a><span class="lineno"> 4013</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a id="l04014" name="l04014"></a><span class="lineno"> 4014</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000), alice);</div>
<div class="line"><a id="l04015" name="l04015"></a><span class="lineno"> 4015</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04016" name="l04016"></a><span class="lineno"> 4016</span> env(manage(alice, beast::zero, <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l04017" name="l04017"></a><span class="lineno"> 4017</span> }</div>
<div class="line"><a id="l04018" name="l04018"></a><span class="lineno"> 4018</span> }</div>
</div>
<div class="line"><a id="l04019" name="l04019"></a><span class="lineno"> 4019</span> </div>
<div class="line"><a id="l04020" name="l04020"></a><span class="lineno"> 4020</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04021" data-start="{" data-end="}">
<div class="line"><a id="l04021" name="l04021"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a53c8baf0baea42d165e9d9f4b4235650"> 4021</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a53c8baf0baea42d165e9d9f4b4235650">testInvalidLoanPay</a>()</div>
<div class="line"><a id="l04022" name="l04022"></a><span class="lineno"> 4022</span> {</div>
<div class="line"><a id="l04023" name="l04023"></a><span class="lineno"> 4023</span> testcase(<span class="stringliteral">&quot;Invalid LoanPay&quot;</span>);</div>
<div class="line"><a id="l04024" name="l04024"></a><span class="lineno"> 4024</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04025" name="l04025"></a><span class="lineno"> 4025</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04026" name="l04026"></a><span class="lineno"> 4026</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04027" name="l04027"></a><span class="lineno"> 4027</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04028" name="l04028"></a><span class="lineno"> 4028</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04029" name="l04029"></a><span class="lineno"> 4029</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a> = issuer[<span class="stringliteral">&quot;IOU&quot;</span>];</div>
<div class="line"><a id="l04030" name="l04030"></a><span class="lineno"> 4030</span> </div>
<div class="line"><a id="l04031" name="l04031"></a><span class="lineno"> 4031</span> <span class="comment">// preclaim</span></div>
<div class="line"><a id="l04032" name="l04032"></a><span class="lineno"> 4032</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a id="l04033" name="l04033"></a><span class="lineno"> 4033</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000), lender, issuer, borrower);</div>
<div class="line"><a id="l04034" name="l04034"></a><span class="lineno"> 4034</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(lender, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(10&#39;000&#39;000)), THISLINE);</div>
<div class="line"><a id="l04035" name="l04035"></a><span class="lineno"> 4035</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(5&#39;000&#39;000)), THISLINE);</div>
<div class="line"><a id="l04036" name="l04036"></a><span class="lineno"> 4036</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> brokerInfo{createVaultAndBroker(env, issuer[<span class="stringliteral">&quot;IOU&quot;</span>], lender)};</div>
<div class="line"><a id="l04037" name="l04037"></a><span class="lineno"> 4037</span> </div>
<div class="line"><a id="l04038" name="l04038"></a><span class="lineno"> 4038</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l04039" name="l04039"></a><span class="lineno"> 4039</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> debtMaximumRequest = brokerInfo.<a class="code hl_function" href="classxrpl_1_1STAmount.html#abbc5a024839981076ce9c16fa19d3657">asset</a>(1&#39;000).<a class="code hl_function" href="classxrpl_1_1Asset.html#afe02ca072854d69e5195378b8dfdfde2">value</a>();</div>
<div class="line"><a id="l04040" name="l04040"></a><span class="lineno"> 4040</span> </div>
<div class="line"><a id="l04041" name="l04041"></a><span class="lineno"> 4041</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.brokerID, debtMaximumRequest),</div>
<div class="line"><a id="l04042" name="l04042"></a><span class="lineno"> 4042</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l04043" name="l04043"></a><span class="lineno"> 4043</span> loanSetFee,</div>
<div class="line"><a id="l04044" name="l04044"></a><span class="lineno"> 4044</span> THISLINE);</div>
<div class="line"><a id="l04045" name="l04045"></a><span class="lineno"> 4045</span> </div>
<div class="line"><a id="l04046" name="l04046"></a><span class="lineno"> 4046</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04047" name="l04047"></a><span class="lineno"> 4047</span> </div>
<div class="line"><a id="l04048" name="l04048"></a><span class="lineno"> 4048</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <span class="keyword">const</span> loanSequence = 1;</div>
<div class="line"><a id="l04049" name="l04049"></a><span class="lineno"> 4049</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(brokerInfo.brokerID, loanSequence);</div>
<div class="line"><a id="l04050" name="l04050"></a><span class="lineno"> 4050</span> </div>
<div class="line"><a id="l04051" name="l04051"></a><span class="lineno"> 4051</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#ac015d7c2da11cab163c6fd1e2d425ffb">fset</a>(issuer, <a class="code hl_variable" href="namespacexrpl.html#a0bc1a7410caa969ec72e858fd372f9a7">asfGlobalFreeze</a>), THISLINE);</div>
<div class="line"><a id="l04052" name="l04052"></a><span class="lineno"> 4052</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04053" name="l04053"></a><span class="lineno"> 4053</span> </div>
<div class="line"><a id="l04054" name="l04054"></a><span class="lineno"> 4054</span> <span class="comment">// preclaim: tecFROZEN</span></div>
<div class="line"><a id="l04055" name="l04055"></a><span class="lineno"> 4055</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, debtMaximumRequest), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8045adcdb81ee941eb2f36fe5f1e4c8c">tecFROZEN</a>), THISLINE);</div>
<div class="line"><a id="l04056" name="l04056"></a><span class="lineno"> 4056</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04057" name="l04057"></a><span class="lineno"> 4057</span> </div>
<div class="line"><a id="l04058" name="l04058"></a><span class="lineno"> 4058</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a7b668aa8c543e60fd3e428c4f60fd6b6">fclear</a>(issuer, <a class="code hl_variable" href="namespacexrpl.html#a0bc1a7410caa969ec72e858fd372f9a7">asfGlobalFreeze</a>), THISLINE);</div>
<div class="line"><a id="l04059" name="l04059"></a><span class="lineno"> 4059</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04060" name="l04060"></a><span class="lineno"> 4060</span> </div>
<div class="line"><a id="l04061" name="l04061"></a><span class="lineno"> 4061</span> <span class="keyword">auto</span> <span class="keyword">const</span> pseudoBroker = [&amp;]() -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Account&gt;</a> {</div>
<div class="line"><a id="l04062" name="l04062"></a><span class="lineno"> 4062</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(brokerInfo.brokerID)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l04063" name="l04063"></a><span class="lineno"> 4063</span> {</div>
<div class="line"><a id="l04064" name="l04064"></a><span class="lineno"> 4064</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a>{<span class="stringliteral">&quot;pseudo&quot;</span>, brokerSle-&gt;at(sfAccount)};</div>
<div class="line"><a id="l04065" name="l04065"></a><span class="lineno"> 4065</span> }</div>
<div class="line"><a id="l04066" name="l04066"></a><span class="lineno"> 4066</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l04067" name="l04067"></a><span class="lineno"> 4067</span> {</div>
<div class="line"><a id="l04068" name="l04068"></a><span class="lineno"> 4068</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>;</div>
<div class="line"><a id="l04069" name="l04069"></a><span class="lineno"> 4069</span> }</div>
<div class="line"><a id="l04070" name="l04070"></a><span class="lineno"> 4070</span> }();</div>
<div class="line"><a id="l04071" name="l04071"></a><span class="lineno"> 4071</span> <span class="keywordflow">if</span> (!pseudoBroker)</div>
<div class="line"><a id="l04072" name="l04072"></a><span class="lineno"> 4072</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l04073" name="l04073"></a><span class="lineno"> 4073</span> </div>
<div class="line"><a id="l04074" name="l04074"></a><span class="lineno"> 4074</span> <span class="comment">// Lender and pseudoaccount must both be frozen</span></div>
<div class="line"><a id="l04075" name="l04075"></a><span class="lineno"> 4075</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(issuer, lender[<span class="stringliteral">&quot;IOU&quot;</span>](1&#39;000), lender, <a class="code hl_variable" href="namespacexrpl.html#ae974e82cf9dee1293007ca183f0e1ae2">tfSetFreeze</a> | <a class="code hl_variable" href="namespacexrpl.html#a9f9ee3523ab53fb96dbb6e80d6ca2992">tfSetDeepFreeze</a>), THISLINE);</div>
<div class="line"><a id="l04076" name="l04076"></a><span class="lineno"> 4076</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(issuer, (*pseudoBroker)[<span class="stringliteral">&quot;IOU&quot;</span>](1&#39;000), *pseudoBroker, <a class="code hl_variable" href="namespacexrpl.html#ae974e82cf9dee1293007ca183f0e1ae2">tfSetFreeze</a> | <a class="code hl_variable" href="namespacexrpl.html#a9f9ee3523ab53fb96dbb6e80d6ca2992">tfSetDeepFreeze</a>), THISLINE);</div>
<div class="line"><a id="l04077" name="l04077"></a><span class="lineno"> 4077</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04078" name="l04078"></a><span class="lineno"> 4078</span> </div>
<div class="line"><a id="l04079" name="l04079"></a><span class="lineno"> 4079</span> <span class="comment">// preclaim: tecFROZEN due to deep frozen</span></div>
<div class="line"><a id="l04080" name="l04080"></a><span class="lineno"> 4080</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, debtMaximumRequest), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8045adcdb81ee941eb2f36fe5f1e4c8c">tecFROZEN</a>), THISLINE);</div>
<div class="line"><a id="l04081" name="l04081"></a><span class="lineno"> 4081</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04082" name="l04082"></a><span class="lineno"> 4082</span> </div>
<div class="line"><a id="l04083" name="l04083"></a><span class="lineno"> 4083</span> <span class="comment">// Only one needs to be unfrozen</span></div>
<div class="line"><a id="l04084" name="l04084"></a><span class="lineno"> 4084</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(issuer, lender[<span class="stringliteral">&quot;IOU&quot;</span>](1&#39;000), <a class="code hl_variable" href="namespacexrpl.html#a84537bb967d8021b730576d249e1a321">tfClearFreeze</a> | <a class="code hl_variable" href="namespacexrpl.html#a93d915cc3f2d1c8d8c014f1402ce1645">tfClearDeepFreeze</a>), THISLINE);</div>
<div class="line"><a id="l04085" name="l04085"></a><span class="lineno"> 4085</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04086" name="l04086"></a><span class="lineno"> 4086</span> </div>
<div class="line"><a id="l04087" name="l04087"></a><span class="lineno"> 4087</span> <span class="comment">// The payment is late by this point</span></div>
<div class="line"><a id="l04088" name="l04088"></a><span class="lineno"> 4088</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, debtMaximumRequest), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba918da89b83f3c6bee3153574bd6e718a">tecEXPIRED</a>), THISLINE);</div>
<div class="line"><a id="l04089" name="l04089"></a><span class="lineno"> 4089</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04090" name="l04090"></a><span class="lineno"> 4090</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, debtMaximumRequest, <a class="code hl_variable" href="namespacexrpl.html#ac4c8f81ffaeaede92aec26c81003c8e5">tfLoanLatePayment</a>), THISLINE);</div>
<div class="line"><a id="l04091" name="l04091"></a><span class="lineno"> 4091</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04092" name="l04092"></a><span class="lineno"> 4092</span> </div>
<div class="line"><a id="l04093" name="l04093"></a><span class="lineno"> 4093</span> <span class="comment">// preclaim: tecKILLED</span></div>
<div class="line"><a id="l04094" name="l04094"></a><span class="lineno"> 4094</span> <span class="comment">// note that tecKILLED in loanMakePayment()</span></div>
<div class="line"><a id="l04095" name="l04095"></a><span class="lineno"> 4095</span> <span class="comment">// doesn&#39;t happen because of the preclaim check.</span></div>
<div class="line"><a id="l04096" name="l04096"></a><span class="lineno"> 4096</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, loanKeylet.key, debtMaximumRequest), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bad7d421519cd6967c3f800367554f8391">tecKILLED</a>), THISLINE);</div>
<div class="line"><a id="l04097" name="l04097"></a><span class="lineno"> 4097</span> }</div>
</div>
<div class="line"><a id="l04098" name="l04098"></a><span class="lineno"> 4098</span> </div>
<div class="line"><a id="l04099" name="l04099"></a><span class="lineno"> 4099</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04100" data-start="{" data-end="}">
<div class="line"><a id="l04100" name="l04100"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a9bfaea39ae6963b5ef0ada399148cbaa"> 4100</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a9bfaea39ae6963b5ef0ada399148cbaa">testInvalidLoanSet</a>()</div>
<div class="line"><a id="l04101" name="l04101"></a><span class="lineno"> 4101</span> {</div>
<div class="line"><a id="l04102" name="l04102"></a><span class="lineno"> 4102</span> testcase(<span class="stringliteral">&quot;Invalid LoanSet&quot;</span>);</div>
<div class="line"><a id="l04103" name="l04103"></a><span class="lineno"> 4103</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04104" name="l04104"></a><span class="lineno"> 4104</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04105" name="l04105"></a><span class="lineno"> 4105</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04106" name="l04106"></a><span class="lineno"> 4106</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04107" name="l04107"></a><span class="lineno"> 4107</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04108" name="l04108"></a><span class="lineno"> 4108</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a> = issuer[<span class="stringliteral">&quot;IOU&quot;</span>];</div>
<div class="line"><a id="l04109" name="l04109"></a><span class="lineno"> 4109</span> </div>
<div class="line"><a id="l04110" name="l04110"></a><span class="lineno"> 4110</span> <span class="keyword">auto</span> testWrapper = [&amp;](<span class="keyword">auto</span>&amp;&amp; test) {</div>
<div class="line"><a id="l04111" name="l04111"></a><span class="lineno"> 4111</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a id="l04112" name="l04112"></a><span class="lineno"> 4112</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000), lender, issuer, borrower);</div>
<div class="line"><a id="l04113" name="l04113"></a><span class="lineno"> 4113</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(lender, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(10&#39;000&#39;000)));</div>
<div class="line"><a id="l04114" name="l04114"></a><span class="lineno"> 4114</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(5&#39;000&#39;000)));</div>
<div class="line"><a id="l04115" name="l04115"></a><span class="lineno"> 4115</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> brokerInfo{createVaultAndBroker(env, issuer[<span class="stringliteral">&quot;IOU&quot;</span>], lender)};</div>
<div class="line"><a id="l04116" name="l04116"></a><span class="lineno"> 4116</span> </div>
<div class="line"><a id="l04117" name="l04117"></a><span class="lineno"> 4117</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l04118" name="l04118"></a><span class="lineno"> 4118</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> debtMaximumRequest = brokerInfo.asset(1&#39;000).value();</div>
<div class="line"><a id="l04119" name="l04119"></a><span class="lineno"> 4119</span> test(env, brokerInfo, loanSetFee, debtMaximumRequest);</div>
<div class="line"><a id="l04120" name="l04120"></a><span class="lineno"> 4120</span> };</div>
<div class="line"><a id="l04121" name="l04121"></a><span class="lineno"> 4121</span> </div>
<div class="line"><a id="l04122" name="l04122"></a><span class="lineno"> 4122</span> <span class="comment">// preflight:</span></div>
<div class="line"><a id="l04123" name="l04123"></a><span class="lineno"> 4123</span> testWrapper(</div>
<div class="line"><a id="l04124" name="l04124"></a><span class="lineno"> 4124</span> [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; brokerInfo, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">jtx::fee</a> <span class="keyword">const</span>&amp; loanSetFee, <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; debtMaximumRequest) {</div>
<div class="line"><a id="l04125" name="l04125"></a><span class="lineno"> 4125</span> <span class="comment">// first temBAD_SIGNER: TODO</span></div>
<div class="line"><a id="l04126" name="l04126"></a><span class="lineno"> 4126</span> <span class="comment">// invalid grace period</span></div>
<div class="line"><a id="l04127" name="l04127"></a><span class="lineno"> 4127</span> {</div>
<div class="line"><a id="l04128" name="l04128"></a><span class="lineno"> 4128</span> <span class="comment">// zero grace period</span></div>
<div class="line"><a id="l04129" name="l04129"></a><span class="lineno"> 4129</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest),</div>
<div class="line"><a id="l04130" name="l04130"></a><span class="lineno"> 4130</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l04131" name="l04131"></a><span class="lineno"> 4131</span> gracePeriod(0),</div>
<div class="line"><a id="l04132" name="l04132"></a><span class="lineno"> 4132</span> loanSetFee,</div>
<div class="line"><a id="l04133" name="l04133"></a><span class="lineno"> 4133</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l04134" name="l04134"></a><span class="lineno"> 4134</span> </div>
<div class="line"><a id="l04135" name="l04135"></a><span class="lineno"> 4135</span> <span class="comment">// grace period less than default minimum</span></div>
<div class="line"><a id="l04136" name="l04136"></a><span class="lineno"> 4136</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest),</div>
<div class="line"><a id="l04137" name="l04137"></a><span class="lineno"> 4137</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l04138" name="l04138"></a><span class="lineno"> 4138</span> gracePeriod(<a class="code hl_variable" href="classxrpl_1_1LoanSet.html#adb17f2b6a5c242a3b56dd9363185c974">LoanSet::defaultGracePeriod</a> - 1),</div>
<div class="line"><a id="l04139" name="l04139"></a><span class="lineno"> 4139</span> loanSetFee,</div>
<div class="line"><a id="l04140" name="l04140"></a><span class="lineno"> 4140</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l04141" name="l04141"></a><span class="lineno"> 4141</span> </div>
<div class="line"><a id="l04142" name="l04142"></a><span class="lineno"> 4142</span> <span class="comment">// grace period greater than payment interval</span></div>
<div class="line"><a id="l04143" name="l04143"></a><span class="lineno"> 4143</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest),</div>
<div class="line"><a id="l04144" name="l04144"></a><span class="lineno"> 4144</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l04145" name="l04145"></a><span class="lineno"> 4145</span> paymentInterval(120),</div>
<div class="line"><a id="l04146" name="l04146"></a><span class="lineno"> 4146</span> gracePeriod(121),</div>
<div class="line"><a id="l04147" name="l04147"></a><span class="lineno"> 4147</span> loanSetFee,</div>
<div class="line"><a id="l04148" name="l04148"></a><span class="lineno"> 4148</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l04149" name="l04149"></a><span class="lineno"> 4149</span> }</div>
<div class="line"><a id="l04150" name="l04150"></a><span class="lineno"> 4150</span> <span class="comment">// empty/zero broker ID</span></div>
<div class="line"><a id="l04151" name="l04151"></a><span class="lineno"> 4151</span> {</div>
<div class="line"><a id="l04152" name="l04152"></a><span class="lineno"> 4152</span> <span class="keyword">auto</span> jv = <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, <a class="code hl_class" href="classxrpl_1_1base__uint.html">uint256</a>{}, debtMaximumRequest);</div>
<div class="line"><a id="l04153" name="l04153"></a><span class="lineno"> 4153</span> </div>
<div class="line"><a id="l04154" name="l04154"></a><span class="lineno"> 4154</span> <span class="keyword">auto</span> testZeroBrokerID = [&amp;](<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span>&amp; id, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a> = 0) {</div>
<div class="line"><a id="l04155" name="l04155"></a><span class="lineno"> 4155</span> <span class="comment">// empty broker ID</span></div>
<div class="line"><a id="l04156" name="l04156"></a><span class="lineno"> 4156</span> jv[sfLoanBrokerID] = id;</div>
<div class="line"><a id="l04157" name="l04157"></a><span class="lineno"> 4157</span> env(jv, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender), loanSetFee, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1flags.html">flags</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l04158" name="l04158"></a><span class="lineno"> 4158</span> };</div>
<div class="line"><a id="l04159" name="l04159"></a><span class="lineno"> 4159</span> <span class="comment">// empty broker ID</span></div>
<div class="line"><a id="l04160" name="l04160"></a><span class="lineno"> 4160</span> testZeroBrokerID(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a>(<span class="stringliteral">&quot;&quot;</span>));</div>
<div class="line"><a id="l04161" name="l04161"></a><span class="lineno"> 4161</span> <span class="comment">// zero broker ID</span></div>
<div class="line"><a id="l04162" name="l04162"></a><span class="lineno"> 4162</span> <span class="comment">// needs a flag to distinguish the parsed STTx from the prior</span></div>
<div class="line"><a id="l04163" name="l04163"></a><span class="lineno"> 4163</span> <span class="comment">// test</span></div>
<div class="line"><a id="l04164" name="l04164"></a><span class="lineno"> 4164</span> testZeroBrokerID(<a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(<a class="code hl_class" href="classxrpl_1_1base__uint.html">uint256</a>{}), <a class="code hl_variable" href="namespacexrpl.html#a9370d7dde26c231399f9eac32fdfdc32">tfFullyCanonicalSig</a>);</div>
<div class="line"><a id="l04165" name="l04165"></a><span class="lineno"> 4165</span> }</div>
<div class="line"><a id="l04166" name="l04166"></a><span class="lineno"> 4166</span> </div>
<div class="line"><a id="l04167" name="l04167"></a><span class="lineno"> 4167</span> <span class="comment">// preflightCheckSigningKey() failure:</span></div>
<div class="line"><a id="l04168" name="l04168"></a><span class="lineno"> 4168</span> <span class="comment">// can it happen? the signature is checked before transactor</span></div>
<div class="line"><a id="l04169" name="l04169"></a><span class="lineno"> 4169</span> <span class="comment">// executes</span></div>
<div class="line"><a id="l04170" name="l04170"></a><span class="lineno"> 4170</span> </div>
<div class="line"><a id="l04171" name="l04171"></a><span class="lineno"> 4171</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1JTx.html">JTx</a> tx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(</div>
<div class="line"><a id="l04172" name="l04172"></a><span class="lineno"> 4172</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest),</div>
<div class="line"><a id="l04173" name="l04173"></a><span class="lineno"> 4173</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l04174" name="l04174"></a><span class="lineno"> 4174</span> loanSetFee);</div>
<div class="line"><a id="l04175" name="l04175"></a><span class="lineno"> 4175</span> <a class="code hl_class" href="classxrpl_1_1STTx.html">STTx</a> local = *(tx.<a class="code hl_variable" href="structxrpl_1_1test_1_1jtx_1_1JTx.html#a942329955b249b1d4df75e92247f221c">stx</a>);</div>
<div class="line"><a id="l04176" name="l04176"></a><span class="lineno"> 4176</span> <span class="keyword">auto</span> counterpartySig = local.<a class="code hl_function" href="classxrpl_1_1STObject.html#aba0a57e267e426dee3a706b9660c31c0">getFieldObject</a>(sfCounterpartySignature);</div>
<div class="line"><a id="l04177" name="l04177"></a><span class="lineno"> 4177</span> <span class="keyword">auto</span> badPubKey = counterpartySig.<a class="code hl_function" href="classxrpl_1_1STObject.html#a21d39460447a8fb1924b280226a36cdb">getFieldVL</a>(sfSigningPubKey);</div>
<div class="line"><a id="l04178" name="l04178"></a><span class="lineno"> 4178</span> badPubKey[20] ^= 0xAA;</div>
<div class="line"><a id="l04179" name="l04179"></a><span class="lineno"> 4179</span> counterpartySig.setFieldVL(sfSigningPubKey, badPubKey);</div>
<div class="line"><a id="l04180" name="l04180"></a><span class="lineno"> 4180</span> local.<a class="code hl_function" href="classxrpl_1_1STObject.html#aac3f63cc407624395417f332ad7c1e27">setFieldObject</a>(sfCounterpartySignature, counterpartySig);</div>
<div class="line"><a id="l04181" name="l04181"></a><span class="lineno"> 4181</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jvResult;</div>
<div class="line"><a id="l04182" name="l04182"></a><span class="lineno"> 4182</span> jvResult[jss::tx_blob] = <a class="code hl_function" href="namespacexrpl.html#a36b95700599f590017b5912e220baf5b">strHex</a>(local.<a class="code hl_function" href="classxrpl_1_1STObject.html#a7bdbcf0876b32435747f97897c466c21">getSerializer</a>().<a class="code hl_function" href="classxrpl_1_1Serializer.html#a9fdb78b3d7b575806292496989bd138a">slice</a>());</div>
<div class="line"><a id="l04183" name="l04183"></a><span class="lineno"> 4183</span> <span class="keyword">auto</span> res = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;submit&quot;</span>, <a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(jvResult))[<span class="stringliteral">&quot;result&quot;</span>];</div>
<div class="line"><a id="l04184" name="l04184"></a><span class="lineno"> 4184</span> BEAST_EXPECT(</div>
<div class="line"><a id="l04185" name="l04185"></a><span class="lineno"> 4185</span> res[jss::error] == <span class="stringliteral">&quot;invalidTransaction&quot;</span> &amp;&amp;</div>
<div class="line"><a id="l04186" name="l04186"></a><span class="lineno"> 4186</span> res[jss::error_exception] == <span class="stringliteral">&quot;fails local checks: Counterparty: Invalid signature.&quot;</span>);</div>
<div class="line"><a id="l04187" name="l04187"></a><span class="lineno"> 4187</span> });</div>
<div class="line"><a id="l04188" name="l04188"></a><span class="lineno"> 4188</span> </div>
<div class="line"><a id="l04189" name="l04189"></a><span class="lineno"> 4189</span> <span class="comment">// preclaim:</span></div>
<div class="line"><a id="l04190" name="l04190"></a><span class="lineno"> 4190</span> testWrapper(</div>
<div class="line"><a id="l04191" name="l04191"></a><span class="lineno"> 4191</span> [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; brokerInfo, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">jtx::fee</a> <span class="keyword">const</span>&amp; loanSetFee, <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; debtMaximumRequest) {</div>
<div class="line"><a id="l04192" name="l04192"></a><span class="lineno"> 4192</span> <span class="comment">// canAddHoldingFailure (IOU only, if MPT doesn&#39;t have</span></div>
<div class="line"><a id="l04193" name="l04193"></a><span class="lineno"> 4193</span> <span class="comment">// MPTCanTransfer set, then can&#39;t create Vault/LoanBroker,</span></div>
<div class="line"><a id="l04194" name="l04194"></a><span class="lineno"> 4194</span> <span class="comment">// and LoanSet will fail with different error</span></div>
<div class="line"><a id="l04195" name="l04195"></a><span class="lineno"> 4195</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a7b668aa8c543e60fd3e428c4f60fd6b6">fclear</a>(issuer, <a class="code hl_variable" href="namespacexrpl.html#a7b40d0c44bdb8a14755935bbd7b96eb6">asfDefaultRipple</a>));</div>
<div class="line"><a id="l04196" name="l04196"></a><span class="lineno"> 4196</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04197" name="l04197"></a><span class="lineno"> 4197</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest),</div>
<div class="line"><a id="l04198" name="l04198"></a><span class="lineno"> 4198</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l04199" name="l04199"></a><span class="lineno"> 4199</span> loanSetFee,</div>
<div class="line"><a id="l04200" name="l04200"></a><span class="lineno"> 4200</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#a0a6c86e55d58f0dfb3d535c11e414c72ab73d1fba31ff4030e0b64464fdfc7e89">terNO_RIPPLE</a>));</div>
<div class="line"><a id="l04201" name="l04201"></a><span class="lineno"> 4201</span> });</div>
<div class="line"><a id="l04202" name="l04202"></a><span class="lineno"> 4202</span> </div>
<div class="line"><a id="l04203" name="l04203"></a><span class="lineno"> 4203</span> <span class="comment">// doApply:</span></div>
<div class="line"><a id="l04204" name="l04204"></a><span class="lineno"> 4204</span> testWrapper(</div>
<div class="line"><a id="l04205" name="l04205"></a><span class="lineno"> 4205</span> [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env, <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> <span class="keyword">const</span>&amp; brokerInfo, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">jtx::fee</a> <span class="keyword">const</span>&amp; loanSetFee, <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span>&amp; debtMaximumRequest) {</div>
<div class="line"><a id="l04206" name="l04206"></a><span class="lineno"> 4206</span> <span class="keyword">auto</span> <span class="keyword">const</span> amt = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower) - env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().accountReserve(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a4865ffdfc2b35ef2e94990ac89f7fd3b">ownerCount</a>(borrower));</div>
<div class="line"><a id="l04207" name="l04207"></a><span class="lineno"> 4207</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, issuer, amt));</div>
<div class="line"><a id="l04208" name="l04208"></a><span class="lineno"> 4208</span> </div>
<div class="line"><a id="l04209" name="l04209"></a><span class="lineno"> 4209</span> <span class="comment">// tecINSUFFICIENT_RESERVE</span></div>
<div class="line"><a id="l04210" name="l04210"></a><span class="lineno"> 4210</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest),</div>
<div class="line"><a id="l04211" name="l04211"></a><span class="lineno"> 4211</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l04212" name="l04212"></a><span class="lineno"> 4212</span> loanSetFee,</div>
<div class="line"><a id="l04213" name="l04213"></a><span class="lineno"> 4213</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bace2617c1c99c48dc6fbcd8114a8438cd">tecINSUFFICIENT_RESERVE</a>));</div>
<div class="line"><a id="l04214" name="l04214"></a><span class="lineno"> 4214</span> </div>
<div class="line"><a id="l04215" name="l04215"></a><span class="lineno"> 4215</span> <span class="comment">// addEmptyHolding failure</span></div>
<div class="line"><a id="l04216" name="l04216"></a><span class="lineno"> 4216</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, amt));</div>
<div class="line"><a id="l04217" name="l04217"></a><span class="lineno"> 4217</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#ac015d7c2da11cab163c6fd1e2d425ffb">fset</a>(issuer, <a class="code hl_variable" href="namespacexrpl.html#a0bc1a7410caa969ec72e858fd372f9a7">asfGlobalFreeze</a>));</div>
<div class="line"><a id="l04218" name="l04218"></a><span class="lineno"> 4218</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04219" name="l04219"></a><span class="lineno"> 4219</span> </div>
<div class="line"><a id="l04220" name="l04220"></a><span class="lineno"> 4220</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, debtMaximumRequest),</div>
<div class="line"><a id="l04221" name="l04221"></a><span class="lineno"> 4221</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l04222" name="l04222"></a><span class="lineno"> 4222</span> loanSetFee,</div>
<div class="line"><a id="l04223" name="l04223"></a><span class="lineno"> 4223</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8045adcdb81ee941eb2f36fe5f1e4c8c">tecFROZEN</a>));</div>
<div class="line"><a id="l04224" name="l04224"></a><span class="lineno"> 4224</span> });</div>
<div class="line"><a id="l04225" name="l04225"></a><span class="lineno"> 4225</span> }</div>
</div>
<div class="line"><a id="l04226" name="l04226"></a><span class="lineno"> 4226</span> </div>
<div class="line"><a id="l04227" name="l04227"></a><span class="lineno"> 4227</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04228" data-start="{" data-end="}">
<div class="line"><a id="l04228" name="l04228"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a4ad5cb9e4c0b0b39fa3536b24885c650"> 4228</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a4ad5cb9e4c0b0b39fa3536b24885c650">testAccountSendMptMinAmountInvariant</a>()</div>
<div class="line"><a id="l04229" name="l04229"></a><span class="lineno"> 4229</span> {</div>
<div class="line"><a id="l04230" name="l04230"></a><span class="lineno"> 4230</span> <span class="comment">// (From FIND-006)</span></div>
<div class="line"><a id="l04231" name="l04231"></a><span class="lineno"> 4231</span> testcase &lt;&lt; <span class="stringliteral">&quot;LoanSet trigger xrpl::accountSendMPT : minimum amount &quot;</span></div>
<div class="line"><a id="l04232" name="l04232"></a><span class="lineno"> 4232</span> <span class="stringliteral">&quot;and MPT&quot;</span>;</div>
<div class="line"><a id="l04233" name="l04233"></a><span class="lineno"> 4233</span> </div>
<div class="line"><a id="l04234" name="l04234"></a><span class="lineno"> 4234</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04235" name="l04235"></a><span class="lineno"> 4235</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l04236" name="l04236"></a><span class="lineno"> 4236</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l04237" name="l04237"></a><span class="lineno"> 4237</span> </div>
<div class="line"><a id="l04238" name="l04238"></a><span class="lineno"> 4238</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04239" name="l04239"></a><span class="lineno"> 4239</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04240" name="l04240"></a><span class="lineno"> 4240</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04241" name="l04241"></a><span class="lineno"> 4241</span> </div>
<div class="line"><a id="l04242" name="l04242"></a><span class="lineno"> 4242</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l04243" name="l04243"></a><span class="lineno"> 4243</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04244" name="l04244"></a><span class="lineno"> 4244</span> </div>
<div class="line"><a id="l04245" name="l04245"></a><span class="lineno"> 4245</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptt{env, issuer, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a03b59a84add36087c1a9e344e8dfadf2">mptInitNoFund</a>};</div>
<div class="line"><a id="l04246" name="l04246"></a><span class="lineno"> 4246</span> mptt.<a class="code hl_variable" href="structxrpl_1_1test_1_1jtx_1_1MPTInit.html#a08696ed27a22a208272f4bd1883752e5">create</a>({.flags = <a class="code hl_variable" href="namespacexrpl.html#a843e5f9ce3b55788961db32fffb753d1">tfMPTCanClawback</a> | <a class="code hl_variable" href="namespacexrpl.html#a25a16d1e4a00f49801b8f6fd16da0459">tfMPTCanTransfer</a> | <a class="code hl_variable" href="namespacexrpl.html#a75a6d6ab0752128773a7c28ec32fa5d1">tfMPTCanLock</a>});</div>
<div class="line"><a id="l04247" name="l04247"></a><span class="lineno"> 4247</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> mptAsset = mptt.issuanceID();</div>
<div class="line"><a id="l04248" name="l04248"></a><span class="lineno"> 4248</span> mptt.authorize({.account = lender});</div>
<div class="line"><a id="l04249" name="l04249"></a><span class="lineno"> 4249</span> mptt.authorize({.account = borrower});</div>
<div class="line"><a id="l04250" name="l04250"></a><span class="lineno"> 4250</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, mptAsset(2&#39;000&#39;000)));</div>
<div class="line"><a id="l04251" name="l04251"></a><span class="lineno"> 4251</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, mptAsset(1&#39;000)));</div>
<div class="line"><a id="l04252" name="l04252"></a><span class="lineno"> 4252</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04253" name="l04253"></a><span class="lineno"> 4253</span> </div>
<div class="line"><a id="l04254" name="l04254"></a><span class="lineno"> 4254</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, mptAsset, lender)};</div>
<div class="line"><a id="l04255" name="l04255"></a><span class="lineno"> 4255</span> </div>
<div class="line"><a id="l04256" name="l04256"></a><span class="lineno"> 4256</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04257" name="l04257"></a><span class="lineno"> 4257</span> </div>
<div class="line"><a id="l04258" name="l04258"></a><span class="lineno"> 4258</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l04259" name="l04259"></a><span class="lineno"> 4259</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{1, 3};</div>
<div class="line"><a id="l04260" name="l04260"></a><span class="lineno"> 4260</span> </div>
<div class="line"><a id="l04261" name="l04261"></a><span class="lineno"> 4261</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(</div>
<div class="line"><a id="l04262" name="l04262"></a><span class="lineno"> 4262</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l04263" name="l04263"></a><span class="lineno"> 4263</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee),</div>
<div class="line"><a id="l04264" name="l04264"></a><span class="lineno"> 4264</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l04265" name="l04265"></a><span class="lineno"> 4265</span> </div>
<div class="line"><a id="l04266" name="l04266"></a><span class="lineno"> 4266</span> createJson[<span class="stringliteral">&quot;CloseInterestRate&quot;</span>] = 76671;</div>
<div class="line"><a id="l04267" name="l04267"></a><span class="lineno"> 4267</span> createJson[<span class="stringliteral">&quot;ClosePaymentFee&quot;</span>] = <span class="stringliteral">&quot;2061925410&quot;</span>;</div>
<div class="line"><a id="l04268" name="l04268"></a><span class="lineno"> 4268</span> createJson[<span class="stringliteral">&quot;GracePeriod&quot;</span>] = 434;</div>
<div class="line"><a id="l04269" name="l04269"></a><span class="lineno"> 4269</span> createJson[<span class="stringliteral">&quot;InterestRate&quot;</span>] = 50302;</div>
<div class="line"><a id="l04270" name="l04270"></a><span class="lineno"> 4270</span> createJson[<span class="stringliteral">&quot;LateInterestRate&quot;</span>] = 30322;</div>
<div class="line"><a id="l04271" name="l04271"></a><span class="lineno"> 4271</span> createJson[<span class="stringliteral">&quot;LatePaymentFee&quot;</span>] = <span class="stringliteral">&quot;294427911&quot;</span>;</div>
<div class="line"><a id="l04272" name="l04272"></a><span class="lineno"> 4272</span> createJson[<span class="stringliteral">&quot;LoanOriginationFee&quot;</span>] = <span class="stringliteral">&quot;3250635102&quot;</span>;</div>
<div class="line"><a id="l04273" name="l04273"></a><span class="lineno"> 4273</span> createJson[<span class="stringliteral">&quot;LoanServiceFee&quot;</span>] = <span class="stringliteral">&quot;9557386&quot;</span>;</div>
<div class="line"><a id="l04274" name="l04274"></a><span class="lineno"> 4274</span> createJson[<span class="stringliteral">&quot;OverpaymentFee&quot;</span>] = 51249;</div>
<div class="line"><a id="l04275" name="l04275"></a><span class="lineno"> 4275</span> createJson[<span class="stringliteral">&quot;OverpaymentInterestRate&quot;</span>] = 14304;</div>
<div class="line"><a id="l04276" name="l04276"></a><span class="lineno"> 4276</span> createJson[<span class="stringliteral">&quot;PaymentInterval&quot;</span>] = 434;</div>
<div class="line"><a id="l04277" name="l04277"></a><span class="lineno"> 4277</span> createJson[<span class="stringliteral">&quot;PaymentTotal&quot;</span>] = <span class="stringliteral">&quot;2891743748&quot;</span>;</div>
<div class="line"><a id="l04278" name="l04278"></a><span class="lineno"> 4278</span> createJson[<span class="stringliteral">&quot;PrincipalRequested&quot;</span>] = <span class="stringliteral">&quot;8516.98&quot;</span>;</div>
<div class="line"><a id="l04279" name="l04279"></a><span class="lineno"> 4279</span> </div>
<div class="line"><a id="l04280" name="l04280"></a><span class="lineno"> 4280</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerStateBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04281" name="l04281"></a><span class="lineno"> 4281</span> </div>
<div class="line"><a id="l04282" name="l04282"></a><span class="lineno"> 4282</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender));</div>
<div class="line"><a id="l04283" name="l04283"></a><span class="lineno"> 4283</span> env(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">temINVALID</a>));</div>
<div class="line"><a id="l04284" name="l04284"></a><span class="lineno"> 4284</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04285" name="l04285"></a><span class="lineno"> 4285</span> }</div>
</div>
<div class="line"><a id="l04286" name="l04286"></a><span class="lineno"> 4286</span> </div>
<div class="line"><a id="l04287" name="l04287"></a><span class="lineno"> 4287</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04288" data-start="{" data-end="}">
<div class="line"><a id="l04288" name="l04288"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a19655845410c48cd1d22a16f6a9988c6"> 4288</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a19655845410c48cd1d22a16f6a9988c6">testLoanPayDebtDecreaseInvariant</a>()</div>
<div class="line"><a id="l04289" name="l04289"></a><span class="lineno"> 4289</span> {</div>
<div class="line"><a id="l04290" name="l04290"></a><span class="lineno"> 4290</span> <span class="comment">// From FIND-007</span></div>
<div class="line"><a id="l04291" name="l04291"></a><span class="lineno"> 4291</span> testcase &lt;&lt; <span class="stringliteral">&quot;LoanPay xrpl::LoanPay::doApply : debtDecrease &quot;</span></div>
<div class="line"><a id="l04292" name="l04292"></a><span class="lineno"> 4292</span> <span class="stringliteral">&quot;rounding good&quot;</span>;</div>
<div class="line"><a id="l04293" name="l04293"></a><span class="lineno"> 4293</span> </div>
<div class="line"><a id="l04294" name="l04294"></a><span class="lineno"> 4294</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04295" name="l04295"></a><span class="lineno"> 4295</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l04296" name="l04296"></a><span class="lineno"> 4296</span> <span class="keyword">using namespace </span>Lending;</div>
<div class="line"><a id="l04297" name="l04297"></a><span class="lineno"> 4297</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l04298" name="l04298"></a><span class="lineno"> 4298</span> </div>
<div class="line"><a id="l04299" name="l04299"></a><span class="lineno"> 4299</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04300" name="l04300"></a><span class="lineno"> 4300</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04301" name="l04301"></a><span class="lineno"> 4301</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04302" name="l04302"></a><span class="lineno"> 4302</span> </div>
<div class="line"><a id="l04303" name="l04303"></a><span class="lineno"> 4303</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l04304" name="l04304"></a><span class="lineno"> 4304</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04305" name="l04305"></a><span class="lineno"> 4305</span> </div>
<div class="line"><a id="l04306" name="l04306"></a><span class="lineno"> 4306</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> iouAsset = issuer[iouCurrency];</div>
<div class="line"><a id="l04307" name="l04307"></a><span class="lineno"> 4307</span> <span class="keyword">auto</span> trustLenderTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(lender, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04308" name="l04308"></a><span class="lineno"> 4308</span> env(trustLenderTx);</div>
<div class="line"><a id="l04309" name="l04309"></a><span class="lineno"> 4309</span> <span class="keyword">auto</span> trustBorrowerTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">trust</a>(borrower, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04310" name="l04310"></a><span class="lineno"> 4310</span> env(trustBorrowerTx);</div>
<div class="line"><a id="l04311" name="l04311"></a><span class="lineno"> 4311</span> <span class="keyword">auto</span> payLenderTx = <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, lender, iouAsset(100&#39;000&#39;000));</div>
<div class="line"><a id="l04312" name="l04312"></a><span class="lineno"> 4312</span> env(payLenderTx);</div>
<div class="line"><a id="l04313" name="l04313"></a><span class="lineno"> 4313</span> <span class="keyword">auto</span> payIssuerTx = <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(issuer, borrower, iouAsset(1&#39;000&#39;000));</div>
<div class="line"><a id="l04314" name="l04314"></a><span class="lineno"> 4314</span> env(payIssuerTx);</div>
<div class="line"><a id="l04315" name="l04315"></a><span class="lineno"> 4315</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04316" name="l04316"></a><span class="lineno"> 4316</span> </div>
<div class="line"><a id="l04317" name="l04317"></a><span class="lineno"> 4317</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, iouAsset, lender)};</div>
<div class="line"><a id="l04318" name="l04318"></a><span class="lineno"> 4318</span> </div>
<div class="line"><a id="l04319" name="l04319"></a><span class="lineno"> 4319</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04320" name="l04320"></a><span class="lineno"> 4320</span> </div>
<div class="line"><a id="l04321" name="l04321"></a><span class="lineno"> 4321</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l04322" name="l04322"></a><span class="lineno"> 4322</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(baseFee * 2);</div>
<div class="line"><a id="l04323" name="l04323"></a><span class="lineno"> 4323</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{1, 3};</div>
<div class="line"><a id="l04324" name="l04324"></a><span class="lineno"> 4324</span> </div>
<div class="line"><a id="l04325" name="l04325"></a><span class="lineno"> 4325</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(</div>
<div class="line"><a id="l04326" name="l04326"></a><span class="lineno"> 4326</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l04327" name="l04327"></a><span class="lineno"> 4327</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee),</div>
<div class="line"><a id="l04328" name="l04328"></a><span class="lineno"> 4328</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l04329" name="l04329"></a><span class="lineno"> 4329</span> </div>
<div class="line"><a id="l04330" name="l04330"></a><span class="lineno"> 4330</span> createJson[<span class="stringliteral">&quot;ClosePaymentFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04331" name="l04331"></a><span class="lineno"> 4331</span> createJson[<span class="stringliteral">&quot;GracePeriod&quot;</span>] = 60;</div>
<div class="line"><a id="l04332" name="l04332"></a><span class="lineno"> 4332</span> createJson[<span class="stringliteral">&quot;InterestRate&quot;</span>] = 24346;</div>
<div class="line"><a id="l04333" name="l04333"></a><span class="lineno"> 4333</span> createJson[<span class="stringliteral">&quot;LateInterestRate&quot;</span>] = 65535;</div>
<div class="line"><a id="l04334" name="l04334"></a><span class="lineno"> 4334</span> createJson[<span class="stringliteral">&quot;LatePaymentFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04335" name="l04335"></a><span class="lineno"> 4335</span> createJson[<span class="stringliteral">&quot;LoanOriginationFee&quot;</span>] = <span class="stringliteral">&quot;218&quot;</span>;</div>
<div class="line"><a id="l04336" name="l04336"></a><span class="lineno"> 4336</span> createJson[<span class="stringliteral">&quot;LoanServiceFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04337" name="l04337"></a><span class="lineno"> 4337</span> createJson[<span class="stringliteral">&quot;PaymentInterval&quot;</span>] = 60;</div>
<div class="line"><a id="l04338" name="l04338"></a><span class="lineno"> 4338</span> createJson[<span class="stringliteral">&quot;PaymentTotal&quot;</span>] = 5678;</div>
<div class="line"><a id="l04339" name="l04339"></a><span class="lineno"> 4339</span> createJson[<span class="stringliteral">&quot;PrincipalRequested&quot;</span>] = <span class="stringliteral">&quot;9924.81&quot;</span>;</div>
<div class="line"><a id="l04340" name="l04340"></a><span class="lineno"> 4340</span> </div>
<div class="line"><a id="l04341" name="l04341"></a><span class="lineno"> 4341</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerStateBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04342" name="l04342"></a><span class="lineno"> 4342</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerStateBefore-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l04343" name="l04343"></a><span class="lineno"> 4343</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l04344" name="l04344"></a><span class="lineno"> 4344</span> </div>
<div class="line"><a id="l04345" name="l04345"></a><span class="lineno"> 4345</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender));</div>
<div class="line"><a id="l04346" name="l04346"></a><span class="lineno"> 4346</span> env(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l04347" name="l04347"></a><span class="lineno"> 4347</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04348" name="l04348"></a><span class="lineno"> 4348</span> </div>
<div class="line"><a id="l04349" name="l04349"></a><span class="lineno"> 4349</span> <span class="keyword">auto</span> <span class="keyword">const</span> pseudoAcct = [&amp;]() {</div>
<div class="line"><a id="l04350" name="l04350"></a><span class="lineno"> 4350</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04351" name="l04351"></a><span class="lineno"> 4351</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l04352" name="l04352"></a><span class="lineno"> 4352</span> <span class="keywordflow">return</span> lender;</div>
<div class="line"><a id="l04353" name="l04353"></a><span class="lineno"> 4353</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerPseudo = brokerSle-&gt;at(sfAccount);</div>
<div class="line"><a id="l04354" name="l04354"></a><span class="lineno"> 4354</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;Broker pseudo-account&quot;</span>, brokerPseudo);</div>
<div class="line"><a id="l04355" name="l04355"></a><span class="lineno"> 4355</span> }();</div>
<div class="line"><a id="l04356" name="l04356"></a><span class="lineno"> 4356</span> </div>
<div class="line"><a id="l04357" name="l04357"></a><span class="lineno"> 4357</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> verifyLoanStatus(env, broker, pseudoAcct, keylet);</div>
<div class="line"><a id="l04358" name="l04358"></a><span class="lineno"> 4358</span> <span class="keyword">auto</span> <span class="keyword">const</span> originalState = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04359" name="l04359"></a><span class="lineno"> 4359</span> verifyLoanStatus(originalState);</div>
<div class="line"><a id="l04360" name="l04360"></a><span class="lineno"> 4360</span> </div>
<div class="line"><a id="l04361" name="l04361"></a><span class="lineno"> 4361</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> payment{3&#39;269&#39;349&#39;176&#39;470&#39;588, -12};</div>
<div class="line"><a id="l04362" name="l04362"></a><span class="lineno"> 4362</span> <a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a> <span class="keyword">const</span> payFee{baseFee * ((payment / originalState.periodicPayment) / loanPaymentsPerFeeIncrement + 1)};</div>
<div class="line"><a id="l04363" name="l04363"></a><span class="lineno"> 4363</span> <span class="keyword">auto</span> loanPayTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">pay</a>(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, payment}), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(payFee));</div>
<div class="line"><a id="l04364" name="l04364"></a><span class="lineno"> 4364</span> BEAST_EXPECT(<a class="code hl_function" href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">to_string</a>(payment) == <span class="stringliteral">&quot;3269.349176470588&quot;</span>);</div>
<div class="line"><a id="l04365" name="l04365"></a><span class="lineno"> 4365</span> env(loanPayTx, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l04366" name="l04366"></a><span class="lineno"> 4366</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04367" name="l04367"></a><span class="lineno"> 4367</span> </div>
<div class="line"><a id="l04368" name="l04368"></a><span class="lineno"> 4368</span> <span class="keyword">auto</span> <span class="keyword">const</span> newState = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04369" name="l04369"></a><span class="lineno"> 4369</span> BEAST_EXPECT(<a class="code hl_function" href="namespacexrpl.html#affa56ad2d5b3ae1fe81c8f090a778915">isRounded</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, newState.managementFeeOutstanding, originalState.loanScale));</div>
<div class="line"><a id="l04370" name="l04370"></a><span class="lineno"> 4370</span> BEAST_EXPECT(newState.managementFeeOutstanding &lt; originalState.managementFeeOutstanding);</div>
<div class="line"><a id="l04371" name="l04371"></a><span class="lineno"> 4371</span> BEAST_EXPECT(<a class="code hl_function" href="namespacexrpl.html#affa56ad2d5b3ae1fe81c8f090a778915">isRounded</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, newState.totalValue, originalState.loanScale));</div>
<div class="line"><a id="l04372" name="l04372"></a><span class="lineno"> 4372</span> BEAST_EXPECT(<a class="code hl_function" href="namespacexrpl.html#affa56ad2d5b3ae1fe81c8f090a778915">isRounded</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, newState.principalOutstanding, originalState.loanScale));</div>
<div class="line"><a id="l04373" name="l04373"></a><span class="lineno"> 4373</span> }</div>
</div>
<div class="line"><a id="l04374" name="l04374"></a><span class="lineno"> 4374</span> </div>
<div class="line"><a id="l04375" name="l04375"></a><span class="lineno"> 4375</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04376" data-start="{" data-end="}">
<div class="line"><a id="l04376" name="l04376"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a61c6158c0ef99b4a475a8ce763f470eb"> 4376</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a61c6158c0ef99b4a475a8ce763f470eb">testLoanPayComputePeriodicPaymentValidTotalInterestInvariant</a>()</div>
<div class="line"><a id="l04377" name="l04377"></a><span class="lineno"> 4377</span> {</div>
<div class="line"><a id="l04378" name="l04378"></a><span class="lineno"> 4378</span> <span class="comment">// From FIND-010</span></div>
<div class="line"><a id="l04379" name="l04379"></a><span class="lineno"> 4379</span> testcase &lt;&lt; <span class="stringliteral">&quot;xrpl::loanComputePaymentParts : valid total interest&quot;</span>;</div>
<div class="line"><a id="l04380" name="l04380"></a><span class="lineno"> 4380</span> </div>
<div class="line"><a id="l04381" name="l04381"></a><span class="lineno"> 4381</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04382" name="l04382"></a><span class="lineno"> 4382</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l04383" name="l04383"></a><span class="lineno"> 4383</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_enumvalue" href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l04384" name="l04384"></a><span class="lineno"> 4384</span> </div>
<div class="line"><a id="l04385" name="l04385"></a><span class="lineno"> 4385</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04386" name="l04386"></a><span class="lineno"> 4386</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04387" name="l04387"></a><span class="lineno"> 4387</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04388" name="l04388"></a><span class="lineno"> 4388</span> </div>
<div class="line"><a id="l04389" name="l04389"></a><span class="lineno"> 4389</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l04390" name="l04390"></a><span class="lineno"> 4390</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04391" name="l04391"></a><span class="lineno"> 4391</span> </div>
<div class="line"><a id="l04392" name="l04392"></a><span class="lineno"> 4392</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> iouAsset = issuer[iouCurrency];</div>
<div class="line"><a id="l04393" name="l04393"></a><span class="lineno"> 4393</span> <span class="keyword">auto</span> trustLenderTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(trust(lender, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04394" name="l04394"></a><span class="lineno"> 4394</span> env(trustLenderTx);</div>
<div class="line"><a id="l04395" name="l04395"></a><span class="lineno"> 4395</span> <span class="keyword">auto</span> trustBorrowerTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(trust(borrower, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04396" name="l04396"></a><span class="lineno"> 4396</span> env(trustBorrowerTx);</div>
<div class="line"><a id="l04397" name="l04397"></a><span class="lineno"> 4397</span> <span class="keyword">auto</span> payLenderTx = pay(issuer, lender, iouAsset(100&#39;000&#39;000));</div>
<div class="line"><a id="l04398" name="l04398"></a><span class="lineno"> 4398</span> env(payLenderTx);</div>
<div class="line"><a id="l04399" name="l04399"></a><span class="lineno"> 4399</span> <span class="keyword">auto</span> payIssuerTx = pay(issuer, borrower, iouAsset(1&#39;000&#39;000));</div>
<div class="line"><a id="l04400" name="l04400"></a><span class="lineno"> 4400</span> env(payIssuerTx);</div>
<div class="line"><a id="l04401" name="l04401"></a><span class="lineno"> 4401</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04402" name="l04402"></a><span class="lineno"> 4402</span> </div>
<div class="line"><a id="l04403" name="l04403"></a><span class="lineno"> 4403</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, iouAsset, lender)};</div>
<div class="line"><a id="l04404" name="l04404"></a><span class="lineno"> 4404</span> </div>
<div class="line"><a id="l04405" name="l04405"></a><span class="lineno"> 4405</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04406" name="l04406"></a><span class="lineno"> 4406</span> </div>
<div class="line"><a id="l04407" name="l04407"></a><span class="lineno"> 4407</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l04408" name="l04408"></a><span class="lineno"> 4408</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{1, 3};</div>
<div class="line"><a id="l04409" name="l04409"></a><span class="lineno"> 4409</span> </div>
<div class="line"><a id="l04410" name="l04410"></a><span class="lineno"> 4410</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(</div>
<div class="line"><a id="l04411" name="l04411"></a><span class="lineno"> 4411</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l04412" name="l04412"></a><span class="lineno"> 4412</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee),</div>
<div class="line"><a id="l04413" name="l04413"></a><span class="lineno"> 4413</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l04414" name="l04414"></a><span class="lineno"> 4414</span> </div>
<div class="line"><a id="l04415" name="l04415"></a><span class="lineno"> 4415</span> createJson[<span class="stringliteral">&quot;CloseInterestRate&quot;</span>] = 47299;</div>
<div class="line"><a id="l04416" name="l04416"></a><span class="lineno"> 4416</span> createJson[<span class="stringliteral">&quot;ClosePaymentFee&quot;</span>] = <span class="stringliteral">&quot;3985819770&quot;</span>;</div>
<div class="line"><a id="l04417" name="l04417"></a><span class="lineno"> 4417</span> createJson[<span class="stringliteral">&quot;InterestRate&quot;</span>] = 92;</div>
<div class="line"><a id="l04418" name="l04418"></a><span class="lineno"> 4418</span> createJson[<span class="stringliteral">&quot;LatePaymentFee&quot;</span>] = <span class="stringliteral">&quot;3866894865&quot;</span>;</div>
<div class="line"><a id="l04419" name="l04419"></a><span class="lineno"> 4419</span> createJson[<span class="stringliteral">&quot;LoanOriginationFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04420" name="l04420"></a><span class="lineno"> 4420</span> createJson[<span class="stringliteral">&quot;LoanServiceFee&quot;</span>] = <span class="stringliteral">&quot;2348810240&quot;</span>;</div>
<div class="line"><a id="l04421" name="l04421"></a><span class="lineno"> 4421</span> createJson[<span class="stringliteral">&quot;OverpaymentFee&quot;</span>] = 58545;</div>
<div class="line"><a id="l04422" name="l04422"></a><span class="lineno"> 4422</span> createJson[<span class="stringliteral">&quot;PaymentInterval&quot;</span>] = 60;</div>
<div class="line"><a id="l04423" name="l04423"></a><span class="lineno"> 4423</span> createJson[<span class="stringliteral">&quot;PaymentTotal&quot;</span>] = 1;</div>
<div class="line"><a id="l04424" name="l04424"></a><span class="lineno"> 4424</span> createJson[<span class="stringliteral">&quot;PrincipalRequested&quot;</span>] = <span class="stringliteral">&quot;0.000763058&quot;</span>;</div>
<div class="line"><a id="l04425" name="l04425"></a><span class="lineno"> 4425</span> </div>
<div class="line"><a id="l04426" name="l04426"></a><span class="lineno"> 4426</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerStateBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(<a class="code hl_function" href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">keylet::loanbroker</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04427" name="l04427"></a><span class="lineno"> 4427</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerStateBefore-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l04428" name="l04428"></a><span class="lineno"> 4428</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = <a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">keylet::loan</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l04429" name="l04429"></a><span class="lineno"> 4429</span> </div>
<div class="line"><a id="l04430" name="l04430"></a><span class="lineno"> 4430</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender));</div>
<div class="line"><a id="l04431" name="l04431"></a><span class="lineno"> 4431</span> env(createJson, THISLINE);</div>
<div class="line"><a id="l04432" name="l04432"></a><span class="lineno"> 4432</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04433" name="l04433"></a><span class="lineno"> 4433</span> </div>
<div class="line"><a id="l04434" name="l04434"></a><span class="lineno"> 4434</span> <span class="keyword">auto</span> loanPayTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(pay(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, Number{}}));</div>
<div class="line"><a id="l04435" name="l04435"></a><span class="lineno"> 4435</span> loanPayTx[<span class="stringliteral">&quot;Amount&quot;</span>][<span class="stringliteral">&quot;value&quot;</span>] = <span class="stringliteral">&quot;0.000281284125490196&quot;</span>;</div>
<div class="line"><a id="l04436" name="l04436"></a><span class="lineno"> 4436</span> env(loanPayTx, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556baffcaa48f78bf349ec4434b2351577362">tecINSUFFICIENT_PAYMENT</a>), THISLINE);</div>
<div class="line"><a id="l04437" name="l04437"></a><span class="lineno"> 4437</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04438" name="l04438"></a><span class="lineno"> 4438</span> }</div>
</div>
<div class="line"><a id="l04439" name="l04439"></a><span class="lineno"> 4439</span> </div>
<div class="line"><a id="l04440" name="l04440"></a><span class="lineno"> 4440</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04441" data-start="{" data-end="}">
<div class="line"><a id="l04441" name="l04441"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#aab7908c8476aee2d1d0135ac4a177dc9"> 4441</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aab7908c8476aee2d1d0135ac4a177dc9">testDosLoanPay</a>()</div>
<div class="line"><a id="l04442" name="l04442"></a><span class="lineno"> 4442</span> {</div>
<div class="line"><a id="l04443" name="l04443"></a><span class="lineno"> 4443</span> <span class="comment">// From FIND-005</span></div>
<div class="line"><a id="l04444" name="l04444"></a><span class="lineno"> 4444</span> testcase &lt;&lt; <span class="stringliteral">&quot;DoS LoanPay&quot;</span>;</div>
<div class="line"><a id="l04445" name="l04445"></a><span class="lineno"> 4445</span> </div>
<div class="line"><a id="l04446" name="l04446"></a><span class="lineno"> 4446</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04447" name="l04447"></a><span class="lineno"> 4447</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l04448" name="l04448"></a><span class="lineno"> 4448</span> <span class="keyword">using namespace </span>Lending;</div>
<div class="line"><a id="l04449" name="l04449"></a><span class="lineno"> 4449</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l04450" name="l04450"></a><span class="lineno"> 4450</span> </div>
<div class="line"><a id="l04451" name="l04451"></a><span class="lineno"> 4451</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04452" name="l04452"></a><span class="lineno"> 4452</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04453" name="l04453"></a><span class="lineno"> 4453</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04454" name="l04454"></a><span class="lineno"> 4454</span> </div>
<div class="line"><a id="l04455" name="l04455"></a><span class="lineno"> 4455</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l04456" name="l04456"></a><span class="lineno"> 4456</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04457" name="l04457"></a><span class="lineno"> 4457</span> </div>
<div class="line"><a id="l04458" name="l04458"></a><span class="lineno"> 4458</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> iouAsset = issuer[iouCurrency];</div>
<div class="line"><a id="l04459" name="l04459"></a><span class="lineno"> 4459</span> env(trust(lender, iouAsset(100&#39;000&#39;000)));</div>
<div class="line"><a id="l04460" name="l04460"></a><span class="lineno"> 4460</span> env(trust(borrower, iouAsset(100&#39;000&#39;000)));</div>
<div class="line"><a id="l04461" name="l04461"></a><span class="lineno"> 4461</span> env(pay(issuer, lender, iouAsset(10&#39;000&#39;000)));</div>
<div class="line"><a id="l04462" name="l04462"></a><span class="lineno"> 4462</span> env(pay(issuer, borrower, iouAsset(1&#39;000)));</div>
<div class="line"><a id="l04463" name="l04463"></a><span class="lineno"> 4463</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04464" name="l04464"></a><span class="lineno"> 4464</span> </div>
<div class="line"><a id="l04465" name="l04465"></a><span class="lineno"> 4465</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, iouAsset, lender)};</div>
<div class="line"><a id="l04466" name="l04466"></a><span class="lineno"> 4466</span> </div>
<div class="line"><a id="l04467" name="l04467"></a><span class="lineno"> 4467</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04468" name="l04468"></a><span class="lineno"> 4468</span> </div>
<div class="line"><a id="l04469" name="l04469"></a><span class="lineno"> 4469</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l04470" name="l04470"></a><span class="lineno"> 4470</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{1, 3};</div>
<div class="line"><a id="l04471" name="l04471"></a><span class="lineno"> 4471</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l04472" name="l04472"></a><span class="lineno"> 4472</span> </div>
<div class="line"><a id="l04473" name="l04473"></a><span class="lineno"> 4473</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(</div>
<div class="line"><a id="l04474" name="l04474"></a><span class="lineno"> 4474</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l04475" name="l04475"></a><span class="lineno"> 4475</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee),</div>
<div class="line"><a id="l04476" name="l04476"></a><span class="lineno"> 4476</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l04477" name="l04477"></a><span class="lineno"> 4477</span> </div>
<div class="line"><a id="l04478" name="l04478"></a><span class="lineno"> 4478</span> createJson[<span class="stringliteral">&quot;ClosePaymentFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04479" name="l04479"></a><span class="lineno"> 4479</span> createJson[<span class="stringliteral">&quot;GracePeriod&quot;</span>] = 60;</div>
<div class="line"><a id="l04480" name="l04480"></a><span class="lineno"> 4480</span> createJson[<span class="stringliteral">&quot;InterestRate&quot;</span>] = 20930;</div>
<div class="line"><a id="l04481" name="l04481"></a><span class="lineno"> 4481</span> createJson[<span class="stringliteral">&quot;LateInterestRate&quot;</span>] = 77049;</div>
<div class="line"><a id="l04482" name="l04482"></a><span class="lineno"> 4482</span> createJson[<span class="stringliteral">&quot;LatePaymentFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04483" name="l04483"></a><span class="lineno"> 4483</span> createJson[<span class="stringliteral">&quot;LoanServiceFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04484" name="l04484"></a><span class="lineno"> 4484</span> createJson[<span class="stringliteral">&quot;OverpaymentFee&quot;</span>] = 7;</div>
<div class="line"><a id="l04485" name="l04485"></a><span class="lineno"> 4485</span> createJson[<span class="stringliteral">&quot;OverpaymentInterestRate&quot;</span>] = 66653;</div>
<div class="line"><a id="l04486" name="l04486"></a><span class="lineno"> 4486</span> createJson[<span class="stringliteral">&quot;PaymentInterval&quot;</span>] = 60;</div>
<div class="line"><a id="l04487" name="l04487"></a><span class="lineno"> 4487</span> createJson[<span class="stringliteral">&quot;PaymentTotal&quot;</span>] = 3239184;</div>
<div class="line"><a id="l04488" name="l04488"></a><span class="lineno"> 4488</span> createJson[<span class="stringliteral">&quot;PrincipalRequested&quot;</span>] = <span class="stringliteral">&quot;3959.37&quot;</span>;</div>
<div class="line"><a id="l04489" name="l04489"></a><span class="lineno"> 4489</span> </div>
<div class="line"><a id="l04490" name="l04490"></a><span class="lineno"> 4490</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerStateBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04491" name="l04491"></a><span class="lineno"> 4491</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerStateBefore-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l04492" name="l04492"></a><span class="lineno"> 4492</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = keylet::loan(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l04493" name="l04493"></a><span class="lineno"> 4493</span> </div>
<div class="line"><a id="l04494" name="l04494"></a><span class="lineno"> 4494</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender));</div>
<div class="line"><a id="l04495" name="l04495"></a><span class="lineno"> 4495</span> env(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l04496" name="l04496"></a><span class="lineno"> 4496</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04497" name="l04497"></a><span class="lineno"> 4497</span> </div>
<div class="line"><a id="l04498" name="l04498"></a><span class="lineno"> 4498</span> <span class="keyword">auto</span> <span class="keyword">const</span> stateBefore = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04499" name="l04499"></a><span class="lineno"> 4499</span> BEAST_EXPECT(stateBefore.paymentRemaining == 3239184);</div>
<div class="line"><a id="l04500" name="l04500"></a><span class="lineno"> 4500</span> BEAST_EXPECT(stateBefore.paymentRemaining &gt; loanMaximumPaymentsPerTransaction);</div>
<div class="line"><a id="l04501" name="l04501"></a><span class="lineno"> 4501</span> </div>
<div class="line"><a id="l04502" name="l04502"></a><span class="lineno"> 4502</span> <span class="keyword">auto</span> loanPayTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(pay(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, Number{}}));</div>
<div class="line"><a id="l04503" name="l04503"></a><span class="lineno"> 4503</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#aa2d8284d8eff3443e0f8ada927a97858">amount</a>{395937, -2};</div>
<div class="line"><a id="l04504" name="l04504"></a><span class="lineno"> 4504</span> loanPayTx[<span class="stringliteral">&quot;Amount&quot;</span>][<span class="stringliteral">&quot;value&quot;</span>] = to_string(amount);</div>
<div class="line"><a id="l04505" name="l04505"></a><span class="lineno"> 4505</span> <a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a> <span class="keyword">const</span> payFee{</div>
<div class="line"><a id="l04506" name="l04506"></a><span class="lineno"> 4506</span> baseFee * <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a>(amount / stateBefore.periodicPayment / loanPaymentsPerFeeIncrement + 1)};</div>
<div class="line"><a id="l04507" name="l04507"></a><span class="lineno"> 4507</span> env(loanPayTx, ter(tesSUCCESS), fee(payFee));</div>
<div class="line"><a id="l04508" name="l04508"></a><span class="lineno"> 4508</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04509" name="l04509"></a><span class="lineno"> 4509</span> </div>
<div class="line"><a id="l04510" name="l04510"></a><span class="lineno"> 4510</span> <span class="keyword">auto</span> <span class="keyword">const</span> stateAfter = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04511" name="l04511"></a><span class="lineno"> 4511</span> BEAST_EXPECT(stateAfter.paymentRemaining == stateBefore.paymentRemaining - loanMaximumPaymentsPerTransaction);</div>
<div class="line"><a id="l04512" name="l04512"></a><span class="lineno"> 4512</span> }</div>
</div>
<div class="line"><a id="l04513" name="l04513"></a><span class="lineno"> 4513</span> </div>
<div class="line"><a id="l04514" name="l04514"></a><span class="lineno"> 4514</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04515" data-start="{" data-end="}">
<div class="line"><a id="l04515" name="l04515"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ac2998c4caf26ba683b616861c057805c"> 4515</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ac2998c4caf26ba683b616861c057805c">testLoanPayComputePeriodicPaymentValidTotalPrincipalPaidInvariant</a>()</div>
<div class="line"><a id="l04516" name="l04516"></a><span class="lineno"> 4516</span> {</div>
<div class="line"><a id="l04517" name="l04517"></a><span class="lineno"> 4517</span> <span class="comment">// From FIND-009</span></div>
<div class="line"><a id="l04518" name="l04518"></a><span class="lineno"> 4518</span> testcase &lt;&lt; <span class="stringliteral">&quot;xrpl::loanComputePaymentParts : totalPrincipalPaid &quot;</span></div>
<div class="line"><a id="l04519" name="l04519"></a><span class="lineno"> 4519</span> <span class="stringliteral">&quot;rounded&quot;</span>;</div>
<div class="line"><a id="l04520" name="l04520"></a><span class="lineno"> 4520</span> </div>
<div class="line"><a id="l04521" name="l04521"></a><span class="lineno"> 4521</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04522" name="l04522"></a><span class="lineno"> 4522</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l04523" name="l04523"></a><span class="lineno"> 4523</span> <span class="keyword">using namespace </span>Lending;</div>
<div class="line"><a id="l04524" name="l04524"></a><span class="lineno"> 4524</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l04525" name="l04525"></a><span class="lineno"> 4525</span> </div>
<div class="line"><a id="l04526" name="l04526"></a><span class="lineno"> 4526</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04527" name="l04527"></a><span class="lineno"> 4527</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04528" name="l04528"></a><span class="lineno"> 4528</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04529" name="l04529"></a><span class="lineno"> 4529</span> </div>
<div class="line"><a id="l04530" name="l04530"></a><span class="lineno"> 4530</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l04531" name="l04531"></a><span class="lineno"> 4531</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04532" name="l04532"></a><span class="lineno"> 4532</span> </div>
<div class="line"><a id="l04533" name="l04533"></a><span class="lineno"> 4533</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> iouAsset = issuer[iouCurrency];</div>
<div class="line"><a id="l04534" name="l04534"></a><span class="lineno"> 4534</span> <span class="keyword">auto</span> trustLenderTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(trust(lender, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04535" name="l04535"></a><span class="lineno"> 4535</span> env(trustLenderTx);</div>
<div class="line"><a id="l04536" name="l04536"></a><span class="lineno"> 4536</span> <span class="keyword">auto</span> trustBorrowerTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(trust(borrower, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04537" name="l04537"></a><span class="lineno"> 4537</span> env(trustBorrowerTx);</div>
<div class="line"><a id="l04538" name="l04538"></a><span class="lineno"> 4538</span> <span class="keyword">auto</span> payLenderTx = pay(issuer, lender, iouAsset(100&#39;000&#39;000));</div>
<div class="line"><a id="l04539" name="l04539"></a><span class="lineno"> 4539</span> env(payLenderTx);</div>
<div class="line"><a id="l04540" name="l04540"></a><span class="lineno"> 4540</span> <span class="keyword">auto</span> payIssuerTx = pay(issuer, borrower, iouAsset(1&#39;000&#39;000));</div>
<div class="line"><a id="l04541" name="l04541"></a><span class="lineno"> 4541</span> env(payIssuerTx);</div>
<div class="line"><a id="l04542" name="l04542"></a><span class="lineno"> 4542</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04543" name="l04543"></a><span class="lineno"> 4543</span> </div>
<div class="line"><a id="l04544" name="l04544"></a><span class="lineno"> 4544</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, iouAsset, lender)};</div>
<div class="line"><a id="l04545" name="l04545"></a><span class="lineno"> 4545</span> </div>
<div class="line"><a id="l04546" name="l04546"></a><span class="lineno"> 4546</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04547" name="l04547"></a><span class="lineno"> 4547</span> </div>
<div class="line"><a id="l04548" name="l04548"></a><span class="lineno"> 4548</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l04549" name="l04549"></a><span class="lineno"> 4549</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{1, 3};</div>
<div class="line"><a id="l04550" name="l04550"></a><span class="lineno"> 4550</span> </div>
<div class="line"><a id="l04551" name="l04551"></a><span class="lineno"> 4551</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(</div>
<div class="line"><a id="l04552" name="l04552"></a><span class="lineno"> 4552</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l04553" name="l04553"></a><span class="lineno"> 4553</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee),</div>
<div class="line"><a id="l04554" name="l04554"></a><span class="lineno"> 4554</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l04555" name="l04555"></a><span class="lineno"> 4555</span> </div>
<div class="line"><a id="l04556" name="l04556"></a><span class="lineno"> 4556</span> createJson[<span class="stringliteral">&quot;ClosePaymentFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04557" name="l04557"></a><span class="lineno"> 4557</span> createJson[<span class="stringliteral">&quot;InterestRate&quot;</span>] = 24346;</div>
<div class="line"><a id="l04558" name="l04558"></a><span class="lineno"> 4558</span> createJson[<span class="stringliteral">&quot;LateInterestRate&quot;</span>] = 65535;</div>
<div class="line"><a id="l04559" name="l04559"></a><span class="lineno"> 4559</span> createJson[<span class="stringliteral">&quot;LatePaymentFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04560" name="l04560"></a><span class="lineno"> 4560</span> createJson[<span class="stringliteral">&quot;LoanOriginationFee&quot;</span>] = <span class="stringliteral">&quot;218&quot;</span>;</div>
<div class="line"><a id="l04561" name="l04561"></a><span class="lineno"> 4561</span> createJson[<span class="stringliteral">&quot;LoanServiceFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04562" name="l04562"></a><span class="lineno"> 4562</span> createJson[<span class="stringliteral">&quot;PaymentInterval&quot;</span>] = 60;</div>
<div class="line"><a id="l04563" name="l04563"></a><span class="lineno"> 4563</span> createJson[<span class="stringliteral">&quot;PaymentTotal&quot;</span>] = 5678;</div>
<div class="line"><a id="l04564" name="l04564"></a><span class="lineno"> 4564</span> createJson[<span class="stringliteral">&quot;PrincipalRequested&quot;</span>] = <span class="stringliteral">&quot;9924.81&quot;</span>;</div>
<div class="line"><a id="l04565" name="l04565"></a><span class="lineno"> 4565</span> </div>
<div class="line"><a id="l04566" name="l04566"></a><span class="lineno"> 4566</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerStateBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04567" name="l04567"></a><span class="lineno"> 4567</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerStateBefore-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l04568" name="l04568"></a><span class="lineno"> 4568</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = keylet::loan(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l04569" name="l04569"></a><span class="lineno"> 4569</span> </div>
<div class="line"><a id="l04570" name="l04570"></a><span class="lineno"> 4570</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender));</div>
<div class="line"><a id="l04571" name="l04571"></a><span class="lineno"> 4571</span> env(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l04572" name="l04572"></a><span class="lineno"> 4572</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04573" name="l04573"></a><span class="lineno"> 4573</span> </div>
<div class="line"><a id="l04574" name="l04574"></a><span class="lineno"> 4574</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l04575" name="l04575"></a><span class="lineno"> 4575</span> </div>
<div class="line"><a id="l04576" name="l04576"></a><span class="lineno"> 4576</span> <span class="keyword">auto</span> <span class="keyword">const</span> stateBefore = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04577" name="l04577"></a><span class="lineno"> 4577</span> </div>
<div class="line"><a id="l04578" name="l04578"></a><span class="lineno"> 4578</span> {</div>
<div class="line"><a id="l04579" name="l04579"></a><span class="lineno"> 4579</span> <span class="keyword">auto</span> loanPayTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(pay(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, Number{}}));</div>
<div class="line"><a id="l04580" name="l04580"></a><span class="lineno"> 4580</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#aa2d8284d8eff3443e0f8ada927a97858">amount</a>{3074&#39;745&#39;058&#39;823&#39;529, -12};</div>
<div class="line"><a id="l04581" name="l04581"></a><span class="lineno"> 4581</span> BEAST_EXPECT(to_string(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#aa2d8284d8eff3443e0f8ada927a97858">amount</a>) == <span class="stringliteral">&quot;3074.745058823529&quot;</span>);</div>
<div class="line"><a id="l04582" name="l04582"></a><span class="lineno"> 4582</span> <a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a> <span class="keyword">const</span> payFee{baseFee * (<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#aa2d8284d8eff3443e0f8ada927a97858">amount</a> / stateBefore.periodicPayment / loanPaymentsPerFeeIncrement + 1)};</div>
<div class="line"><a id="l04583" name="l04583"></a><span class="lineno"> 4583</span> loanPayTx[<span class="stringliteral">&quot;Amount&quot;</span>][<span class="stringliteral">&quot;value&quot;</span>] = to_string(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#aa2d8284d8eff3443e0f8ada927a97858">amount</a>);</div>
<div class="line"><a id="l04584" name="l04584"></a><span class="lineno"> 4584</span> env(loanPayTx, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(payFee), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l04585" name="l04585"></a><span class="lineno"> 4585</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04586" name="l04586"></a><span class="lineno"> 4586</span> }</div>
<div class="line"><a id="l04587" name="l04587"></a><span class="lineno"> 4587</span> </div>
<div class="line"><a id="l04588" name="l04588"></a><span class="lineno"> 4588</span> {</div>
<div class="line"><a id="l04589" name="l04589"></a><span class="lineno"> 4589</span> <span class="keyword">auto</span> loanPayTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(pay(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, Number{}}));</div>
<div class="line"><a id="l04590" name="l04590"></a><span class="lineno"> 4590</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> amount{6732&#39;118&#39;170&#39;944&#39;051, -12};</div>
<div class="line"><a id="l04591" name="l04591"></a><span class="lineno"> 4591</span> BEAST_EXPECT(to_string(amount) == <span class="stringliteral">&quot;6732.118170944051&quot;</span>);</div>
<div class="line"><a id="l04592" name="l04592"></a><span class="lineno"> 4592</span> XRPAmount <span class="keyword">const</span> payFee{baseFee * (amount / stateBefore.periodicPayment / loanPaymentsPerFeeIncrement + 1)};</div>
<div class="line"><a id="l04593" name="l04593"></a><span class="lineno"> 4593</span> loanPayTx[<span class="stringliteral">&quot;Amount&quot;</span>][<span class="stringliteral">&quot;value&quot;</span>] = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">to_string</a>(amount);</div>
<div class="line"><a id="l04594" name="l04594"></a><span class="lineno"> 4594</span> env(loanPayTx, fee(payFee), ter(tesSUCCESS));</div>
<div class="line"><a id="l04595" name="l04595"></a><span class="lineno"> 4595</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04596" name="l04596"></a><span class="lineno"> 4596</span> }</div>
<div class="line"><a id="l04597" name="l04597"></a><span class="lineno"> 4597</span> </div>
<div class="line"><a id="l04598" name="l04598"></a><span class="lineno"> 4598</span> <span class="keyword">auto</span> <span class="keyword">const</span> stateAfter = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04599" name="l04599"></a><span class="lineno"> 4599</span> <span class="comment">// Total interest outstanding is non-negative</span></div>
<div class="line"><a id="l04600" name="l04600"></a><span class="lineno"> 4600</span> BEAST_EXPECT(stateAfter.totalValue &gt;= stateAfter.principalOutstanding);</div>
<div class="line"><a id="l04601" name="l04601"></a><span class="lineno"> 4601</span> <span class="comment">// Principal paid is non-negative</span></div>
<div class="line"><a id="l04602" name="l04602"></a><span class="lineno"> 4602</span> BEAST_EXPECT(stateBefore.principalOutstanding &gt;= stateAfter.principalOutstanding);</div>
<div class="line"><a id="l04603" name="l04603"></a><span class="lineno"> 4603</span> <span class="comment">// Total value change is non-negative</span></div>
<div class="line"><a id="l04604" name="l04604"></a><span class="lineno"> 4604</span> BEAST_EXPECT(stateBefore.totalValue &gt;= stateAfter.totalValue);</div>
<div class="line"><a id="l04605" name="l04605"></a><span class="lineno"> 4605</span> <span class="comment">// Value delta is larger or same as principal delta (meaning</span></div>
<div class="line"><a id="l04606" name="l04606"></a><span class="lineno"> 4606</span> <span class="comment">// non-negative interest paid)</span></div>
<div class="line"><a id="l04607" name="l04607"></a><span class="lineno"> 4607</span> BEAST_EXPECT(</div>
<div class="line"><a id="l04608" name="l04608"></a><span class="lineno"> 4608</span> (stateBefore.totalValue - stateAfter.totalValue) &gt;=</div>
<div class="line"><a id="l04609" name="l04609"></a><span class="lineno"> 4609</span> (stateBefore.principalOutstanding - stateAfter.principalOutstanding));</div>
<div class="line"><a id="l04610" name="l04610"></a><span class="lineno"> 4610</span> }</div>
</div>
<div class="line"><a id="l04611" name="l04611"></a><span class="lineno"> 4611</span> </div>
<div class="line"><a id="l04612" name="l04612"></a><span class="lineno"> 4612</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04613" data-start="{" data-end="}">
<div class="line"><a id="l04613" name="l04613"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a1da6915aa15b143a7418ba41f101901c"> 4613</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a1da6915aa15b143a7418ba41f101901c">testLoanPayComputePeriodicPaymentValidTotalInterestPaidInvariant</a>()</div>
<div class="line"><a id="l04614" name="l04614"></a><span class="lineno"> 4614</span> {</div>
<div class="line"><a id="l04615" name="l04615"></a><span class="lineno"> 4615</span> <span class="comment">// From FIND-008</span></div>
<div class="line"><a id="l04616" name="l04616"></a><span class="lineno"> 4616</span> testcase &lt;&lt; <span class="stringliteral">&quot;xrpl::loanComputePaymentParts : loanValueChange rounded&quot;</span>;</div>
<div class="line"><a id="l04617" name="l04617"></a><span class="lineno"> 4617</span> </div>
<div class="line"><a id="l04618" name="l04618"></a><span class="lineno"> 4618</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04619" name="l04619"></a><span class="lineno"> 4619</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l04620" name="l04620"></a><span class="lineno"> 4620</span> <span class="keyword">using namespace </span>Lending;</div>
<div class="line"><a id="l04621" name="l04621"></a><span class="lineno"> 4621</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l04622" name="l04622"></a><span class="lineno"> 4622</span> </div>
<div class="line"><a id="l04623" name="l04623"></a><span class="lineno"> 4623</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04624" name="l04624"></a><span class="lineno"> 4624</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04625" name="l04625"></a><span class="lineno"> 4625</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04626" name="l04626"></a><span class="lineno"> 4626</span> </div>
<div class="line"><a id="l04627" name="l04627"></a><span class="lineno"> 4627</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l04628" name="l04628"></a><span class="lineno"> 4628</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04629" name="l04629"></a><span class="lineno"> 4629</span> </div>
<div class="line"><a id="l04630" name="l04630"></a><span class="lineno"> 4630</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> iouAsset = issuer[iouCurrency];</div>
<div class="line"><a id="l04631" name="l04631"></a><span class="lineno"> 4631</span> <span class="keyword">auto</span> trustLenderTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(trust(lender, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04632" name="l04632"></a><span class="lineno"> 4632</span> env(trustLenderTx);</div>
<div class="line"><a id="l04633" name="l04633"></a><span class="lineno"> 4633</span> <span class="keyword">auto</span> trustBorrowerTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(trust(borrower, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04634" name="l04634"></a><span class="lineno"> 4634</span> env(trustBorrowerTx);</div>
<div class="line"><a id="l04635" name="l04635"></a><span class="lineno"> 4635</span> <span class="keyword">auto</span> payLenderTx = pay(issuer, lender, iouAsset(100&#39;000&#39;000));</div>
<div class="line"><a id="l04636" name="l04636"></a><span class="lineno"> 4636</span> env(payLenderTx);</div>
<div class="line"><a id="l04637" name="l04637"></a><span class="lineno"> 4637</span> <span class="keyword">auto</span> payIssuerTx = pay(issuer, borrower, iouAsset(10&#39;000&#39;000));</div>
<div class="line"><a id="l04638" name="l04638"></a><span class="lineno"> 4638</span> env(payIssuerTx);</div>
<div class="line"><a id="l04639" name="l04639"></a><span class="lineno"> 4639</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04640" name="l04640"></a><span class="lineno"> 4640</span> </div>
<div class="line"><a id="l04641" name="l04641"></a><span class="lineno"> 4641</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, iouAsset, lender)};</div>
<div class="line"><a id="l04642" name="l04642"></a><span class="lineno"> 4642</span> {</div>
<div class="line"><a id="l04643" name="l04643"></a><span class="lineno"> 4643</span> <span class="keyword">auto</span> <span class="keyword">const</span> coverDepositValue = broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">params</a>.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a329bf5a8059bcca800bdca04ca187f6c">coverDeposit</a> * 10).value();</div>
<div class="line"><a id="l04644" name="l04644"></a><span class="lineno"> 4644</span> env(loanBroker::coverDeposit(lender, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, coverDepositValue));</div>
<div class="line"><a id="l04645" name="l04645"></a><span class="lineno"> 4645</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04646" name="l04646"></a><span class="lineno"> 4646</span> }</div>
<div class="line"><a id="l04647" name="l04647"></a><span class="lineno"> 4647</span> </div>
<div class="line"><a id="l04648" name="l04648"></a><span class="lineno"> 4648</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04649" name="l04649"></a><span class="lineno"> 4649</span> </div>
<div class="line"><a id="l04650" name="l04650"></a><span class="lineno"> 4650</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l04651" name="l04651"></a><span class="lineno"> 4651</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest{1, 3};</div>
<div class="line"><a id="l04652" name="l04652"></a><span class="lineno"> 4652</span> </div>
<div class="line"><a id="l04653" name="l04653"></a><span class="lineno"> 4653</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(</div>
<div class="line"><a id="l04654" name="l04654"></a><span class="lineno"> 4654</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l04655" name="l04655"></a><span class="lineno"> 4655</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee),</div>
<div class="line"><a id="l04656" name="l04656"></a><span class="lineno"> 4656</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l04657" name="l04657"></a><span class="lineno"> 4657</span> </div>
<div class="line"><a id="l04658" name="l04658"></a><span class="lineno"> 4658</span> createJson[<span class="stringliteral">&quot;ClosePaymentFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04659" name="l04659"></a><span class="lineno"> 4659</span> createJson[<span class="stringliteral">&quot;InterestRate&quot;</span>] = 12833;</div>
<div class="line"><a id="l04660" name="l04660"></a><span class="lineno"> 4660</span> createJson[<span class="stringliteral">&quot;LateInterestRate&quot;</span>] = 77048;</div>
<div class="line"><a id="l04661" name="l04661"></a><span class="lineno"> 4661</span> createJson[<span class="stringliteral">&quot;LatePaymentFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04662" name="l04662"></a><span class="lineno"> 4662</span> createJson[<span class="stringliteral">&quot;LoanOriginationFee&quot;</span>] = <span class="stringliteral">&quot;218&quot;</span>;</div>
<div class="line"><a id="l04663" name="l04663"></a><span class="lineno"> 4663</span> createJson[<span class="stringliteral">&quot;LoanServiceFee&quot;</span>] = <span class="stringliteral">&quot;0&quot;</span>;</div>
<div class="line"><a id="l04664" name="l04664"></a><span class="lineno"> 4664</span> createJson[<span class="stringliteral">&quot;PaymentInterval&quot;</span>] = 752;</div>
<div class="line"><a id="l04665" name="l04665"></a><span class="lineno"> 4665</span> createJson[<span class="stringliteral">&quot;PaymentTotal&quot;</span>] = 5678;</div>
<div class="line"><a id="l04666" name="l04666"></a><span class="lineno"> 4666</span> createJson[<span class="stringliteral">&quot;PrincipalRequested&quot;</span>] = <span class="stringliteral">&quot;9924.81&quot;</span>;</div>
<div class="line"><a id="l04667" name="l04667"></a><span class="lineno"> 4667</span> </div>
<div class="line"><a id="l04668" name="l04668"></a><span class="lineno"> 4668</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerStateBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04669" name="l04669"></a><span class="lineno"> 4669</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerStateBefore-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l04670" name="l04670"></a><span class="lineno"> 4670</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = keylet::loan(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l04671" name="l04671"></a><span class="lineno"> 4671</span> </div>
<div class="line"><a id="l04672" name="l04672"></a><span class="lineno"> 4672</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender));</div>
<div class="line"><a id="l04673" name="l04673"></a><span class="lineno"> 4673</span> env(createJson, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l04674" name="l04674"></a><span class="lineno"> 4674</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04675" name="l04675"></a><span class="lineno"> 4675</span> </div>
<div class="line"><a id="l04676" name="l04676"></a><span class="lineno"> 4676</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l04677" name="l04677"></a><span class="lineno"> 4677</span> </div>
<div class="line"><a id="l04678" name="l04678"></a><span class="lineno"> 4678</span> <span class="keyword">auto</span> <span class="keyword">const</span> stateBefore = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04679" name="l04679"></a><span class="lineno"> 4679</span> BEAST_EXPECT(stateBefore.paymentRemaining == 5678);</div>
<div class="line"><a id="l04680" name="l04680"></a><span class="lineno"> 4680</span> BEAST_EXPECT(stateBefore.paymentRemaining &gt; loanMaximumPaymentsPerTransaction);</div>
<div class="line"><a id="l04681" name="l04681"></a><span class="lineno"> 4681</span> </div>
<div class="line"><a id="l04682" name="l04682"></a><span class="lineno"> 4682</span> <span class="keyword">auto</span> loanPayTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(pay(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, Number{}}));</div>
<div class="line"><a id="l04683" name="l04683"></a><span class="lineno"> 4683</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#aa2d8284d8eff3443e0f8ada927a97858">amount</a>{9924&#39;81, -2};</div>
<div class="line"><a id="l04684" name="l04684"></a><span class="lineno"> 4684</span> BEAST_EXPECT(to_string(amount) == <span class="stringliteral">&quot;9924.81&quot;</span>);</div>
<div class="line"><a id="l04685" name="l04685"></a><span class="lineno"> 4685</span> <a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a> <span class="keyword">const</span> payFee{baseFee * (amount / stateBefore.periodicPayment / loanPaymentsPerFeeIncrement + 1)};</div>
<div class="line"><a id="l04686" name="l04686"></a><span class="lineno"> 4686</span> loanPayTx[<span class="stringliteral">&quot;Amount&quot;</span>][<span class="stringliteral">&quot;value&quot;</span>] = to_string(amount);</div>
<div class="line"><a id="l04687" name="l04687"></a><span class="lineno"> 4687</span> env(loanPayTx, fee(payFee), ter(tesSUCCESS));</div>
<div class="line"><a id="l04688" name="l04688"></a><span class="lineno"> 4688</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04689" name="l04689"></a><span class="lineno"> 4689</span> </div>
<div class="line"><a id="l04690" name="l04690"></a><span class="lineno"> 4690</span> <span class="keyword">auto</span> <span class="keyword">const</span> stateAfter = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04691" name="l04691"></a><span class="lineno"> 4691</span> BEAST_EXPECT(stateAfter.paymentRemaining == stateBefore.paymentRemaining - loanMaximumPaymentsPerTransaction);</div>
<div class="line"><a id="l04692" name="l04692"></a><span class="lineno"> 4692</span> }</div>
</div>
<div class="line"><a id="l04693" name="l04693"></a><span class="lineno"> 4693</span> </div>
<div class="line"><a id="l04694" name="l04694"></a><span class="lineno"> 4694</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04695" data-start="{" data-end="}">
<div class="line"><a id="l04695" name="l04695"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ab6f47ef38b13022ef4010f0bfe0cc281"> 4695</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ab6f47ef38b13022ef4010f0bfe0cc281">testLoanNextPaymentDueDateOverflow</a>()</div>
<div class="line"><a id="l04696" name="l04696"></a><span class="lineno"> 4696</span> {</div>
<div class="line"><a id="l04697" name="l04697"></a><span class="lineno"> 4697</span> <span class="comment">// For FIND-013</span></div>
<div class="line"><a id="l04698" name="l04698"></a><span class="lineno"> 4698</span> testcase &lt;&lt; <span class="stringliteral">&quot;Prevent nextPaymentDueDate overflow&quot;</span>;</div>
<div class="line"><a id="l04699" name="l04699"></a><span class="lineno"> 4699</span> </div>
<div class="line"><a id="l04700" name="l04700"></a><span class="lineno"> 4700</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04701" name="l04701"></a><span class="lineno"> 4701</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l04702" name="l04702"></a><span class="lineno"> 4702</span> <span class="keyword">using namespace </span>Lending;</div>
<div class="line"><a id="l04703" name="l04703"></a><span class="lineno"> 4703</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l04704" name="l04704"></a><span class="lineno"> 4704</span> </div>
<div class="line"><a id="l04705" name="l04705"></a><span class="lineno"> 4705</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04706" name="l04706"></a><span class="lineno"> 4706</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04707" name="l04707"></a><span class="lineno"> 4707</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04708" name="l04708"></a><span class="lineno"> 4708</span> </div>
<div class="line"><a id="l04709" name="l04709"></a><span class="lineno"> 4709</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l04710" name="l04710"></a><span class="lineno"> 4710</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04711" name="l04711"></a><span class="lineno"> 4711</span> </div>
<div class="line"><a id="l04712" name="l04712"></a><span class="lineno"> 4712</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> iouAsset = issuer[iouCurrency];</div>
<div class="line"><a id="l04713" name="l04713"></a><span class="lineno"> 4713</span> <span class="keyword">auto</span> trustLenderTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(trust(lender, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04714" name="l04714"></a><span class="lineno"> 4714</span> env(trustLenderTx);</div>
<div class="line"><a id="l04715" name="l04715"></a><span class="lineno"> 4715</span> <span class="keyword">auto</span> trustBorrowerTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(trust(borrower, iouAsset(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l04716" name="l04716"></a><span class="lineno"> 4716</span> env(trustBorrowerTx);</div>
<div class="line"><a id="l04717" name="l04717"></a><span class="lineno"> 4717</span> <span class="keyword">auto</span> payLenderTx = pay(issuer, lender, iouAsset(100&#39;000&#39;000));</div>
<div class="line"><a id="l04718" name="l04718"></a><span class="lineno"> 4718</span> env(payLenderTx);</div>
<div class="line"><a id="l04719" name="l04719"></a><span class="lineno"> 4719</span> <span class="keyword">auto</span> payIssuerTx = pay(issuer, borrower, iouAsset(10&#39;000&#39;000));</div>
<div class="line"><a id="l04720" name="l04720"></a><span class="lineno"> 4720</span> env(payIssuerTx);</div>
<div class="line"><a id="l04721" name="l04721"></a><span class="lineno"> 4721</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04722" name="l04722"></a><span class="lineno"> 4722</span> </div>
<div class="line"><a id="l04723" name="l04723"></a><span class="lineno"> 4723</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> brokerParams{.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a25badc9387457857607edbadf6fac63e">debtMax</a> = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{0}, .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{1}};</div>
<div class="line"><a id="l04724" name="l04724"></a><span class="lineno"> 4724</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> broker{createVaultAndBroker(env, iouAsset, lender, brokerParams)};</div>
<div class="line"><a id="l04725" name="l04725"></a><span class="lineno"> 4725</span> </div>
<div class="line"><a id="l04726" name="l04726"></a><span class="lineno"> 4726</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04727" name="l04727"></a><span class="lineno"> 4727</span> </div>
<div class="line"><a id="l04728" name="l04728"></a><span class="lineno"> 4728</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l04729" name="l04729"></a><span class="lineno"> 4729</span> </div>
<div class="line"><a id="l04730" name="l04730"></a><span class="lineno"> 4730</span> <span class="keyword">using </span>timeType = <span class="keyword">decltype</span>(sfNextPaymentDueDate)::type::value_type;</div>
<div class="line"><a id="l04731" name="l04731"></a><span class="lineno"> 4731</span> <span class="keyword">static_assert</span>(<a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::is_same_v&lt;timeType, std::uint32_t&gt;</a>);</div>
<div class="line"><a id="l04732" name="l04732"></a><span class="lineno"> 4732</span> timeType <span class="keyword">constexpr</span> maxTime = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/types/numeric_limits/max.html">std::numeric_limits&lt;timeType&gt;::max</a>();</div>
<div class="line"><a id="l04733" name="l04733"></a><span class="lineno"> 4733</span> <span class="keyword">static_assert</span>(maxTime == 4&#39;294&#39;967&#39;295);</div>
<div class="line"><a id="l04734" name="l04734"></a><span class="lineno"> 4734</span> </div>
<div class="line"><a id="l04735" name="l04735"></a><span class="lineno"> 4735</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseJson = [&amp;]() {</div>
<div class="line"><a id="l04736" name="l04736"></a><span class="lineno"> 4736</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(</div>
<div class="line"><a id="l04737" name="l04737"></a><span class="lineno"> 4737</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{55524&#39;81, -2}),</div>
<div class="line"><a id="l04738" name="l04738"></a><span class="lineno"> 4738</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee),</div>
<div class="line"><a id="l04739" name="l04739"></a><span class="lineno"> 4739</span> closePaymentFee(0),</div>
<div class="line"><a id="l04740" name="l04740"></a><span class="lineno"> 4740</span> gracePeriod(LoanSet::defaultGracePeriod),</div>
<div class="line"><a id="l04741" name="l04741"></a><span class="lineno"> 4741</span> interestRate(<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(12833)),</div>
<div class="line"><a id="l04742" name="l04742"></a><span class="lineno"> 4742</span> lateInterestRate(<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(77048)),</div>
<div class="line"><a id="l04743" name="l04743"></a><span class="lineno"> 4743</span> latePaymentFee(0),</div>
<div class="line"><a id="l04744" name="l04744"></a><span class="lineno"> 4744</span> loanOriginationFee(218),</div>
<div class="line"><a id="l04745" name="l04745"></a><span class="lineno"> 4745</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1json.html">json</a>(sfCounterpartySignature, <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l04746" name="l04746"></a><span class="lineno"> 4746</span> </div>
<div class="line"><a id="l04747" name="l04747"></a><span class="lineno"> 4747</span> createJson.<a class="code hl_function" href="classJson_1_1Value.html#a9c9ee172f3387d37d5382d991c591219">removeMember</a>(sfSequence.getJsonName());</div>
<div class="line"><a id="l04748" name="l04748"></a><span class="lineno"> 4748</span> </div>
<div class="line"><a id="l04749" name="l04749"></a><span class="lineno"> 4749</span> <span class="keywordflow">return</span> createJson;</div>
<div class="line"><a id="l04750" name="l04750"></a><span class="lineno"> 4750</span> }();</div>
<div class="line"><a id="l04751" name="l04751"></a><span class="lineno"> 4751</span> </div>
<div class="line"><a id="l04752" name="l04752"></a><span class="lineno"> 4752</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l04753" name="l04753"></a><span class="lineno"> 4753</span> </div>
<div class="line"><a id="l04754" name="l04754"></a><span class="lineno"> 4754</span> <span class="keyword">auto</span> parentCloseTime = [&amp;]() { <span class="keywordflow">return</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;parentCloseTime().time_since_epoch().count(); };</div>
<div class="line"><a id="l04755" name="l04755"></a><span class="lineno"> 4755</span> <span class="keyword">auto</span> maxLoanTime = [&amp;]() {</div>
<div class="line"><a id="l04756" name="l04756"></a><span class="lineno"> 4756</span> <span class="keyword">auto</span> <span class="keyword">const</span> startDate = parentCloseTime();</div>
<div class="line"><a id="l04757" name="l04757"></a><span class="lineno"> 4757</span> </div>
<div class="line"><a id="l04758" name="l04758"></a><span class="lineno"> 4758</span> BEAST_EXPECT(startDate &gt;= 50);</div>
<div class="line"><a id="l04759" name="l04759"></a><span class="lineno"> 4759</span> </div>
<div class="line"><a id="l04760" name="l04760"></a><span class="lineno"> 4760</span> <span class="keywordflow">return</span> maxTime - startDate;</div>
<div class="line"><a id="l04761" name="l04761"></a><span class="lineno"> 4761</span> };</div>
<div class="line"><a id="l04762" name="l04762"></a><span class="lineno"> 4762</span> </div>
<div class="line"><a id="l04763" name="l04763"></a><span class="lineno"> 4763</span> {</div>
<div class="line"><a id="l04764" name="l04764"></a><span class="lineno"> 4764</span> <span class="comment">// straight-up overflow: interval</span></div>
<div class="line"><a id="l04765" name="l04765"></a><span class="lineno"> 4765</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = maxLoanTime() + 1;</div>
<div class="line"><a id="l04766" name="l04766"></a><span class="lineno"> 4766</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = 1;</div>
<div class="line"><a id="l04767" name="l04767"></a><span class="lineno"> 4767</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(baseJson, paymentInterval(interval), paymentTotal(total));</div>
<div class="line"><a id="l04768" name="l04768"></a><span class="lineno"> 4768</span> </div>
<div class="line"><a id="l04769" name="l04769"></a><span class="lineno"> 4769</span> env(createJson, sig(sfCounterpartySignature, lender), ter(tecKILLED));</div>
<div class="line"><a id="l04770" name="l04770"></a><span class="lineno"> 4770</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04771" name="l04771"></a><span class="lineno"> 4771</span> }</div>
<div class="line"><a id="l04772" name="l04772"></a><span class="lineno"> 4772</span> {</div>
<div class="line"><a id="l04773" name="l04773"></a><span class="lineno"> 4773</span> <span class="comment">// straight-up overflow: total</span></div>
<div class="line"><a id="l04774" name="l04774"></a><span class="lineno"> 4774</span> <span class="comment">// min interval is 60</span></div>
<div class="line"><a id="l04775" name="l04775"></a><span class="lineno"> 4775</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = 60;</div>
<div class="line"><a id="l04776" name="l04776"></a><span class="lineno"> 4776</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = maxLoanTime() + 1;</div>
<div class="line"><a id="l04777" name="l04777"></a><span class="lineno"> 4777</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(baseJson, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(interval), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(total));</div>
<div class="line"><a id="l04778" name="l04778"></a><span class="lineno"> 4778</span> </div>
<div class="line"><a id="l04779" name="l04779"></a><span class="lineno"> 4779</span> env(createJson, sig(sfCounterpartySignature, lender), ter(tecKILLED));</div>
<div class="line"><a id="l04780" name="l04780"></a><span class="lineno"> 4780</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04781" name="l04781"></a><span class="lineno"> 4781</span> }</div>
<div class="line"><a id="l04782" name="l04782"></a><span class="lineno"> 4782</span> {</div>
<div class="line"><a id="l04783" name="l04783"></a><span class="lineno"> 4783</span> <span class="comment">// straight-up overflow: grace period</span></div>
<div class="line"><a id="l04784" name="l04784"></a><span class="lineno"> 4784</span> <span class="comment">// min interval is 60</span></div>
<div class="line"><a id="l04785" name="l04785"></a><span class="lineno"> 4785</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = maxLoanTime() + 1;</div>
<div class="line"><a id="l04786" name="l04786"></a><span class="lineno"> 4786</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = 1;</div>
<div class="line"><a id="l04787" name="l04787"></a><span class="lineno"> 4787</span> <span class="keyword">auto</span> <span class="keyword">const</span> grace = interval;</div>
<div class="line"><a id="l04788" name="l04788"></a><span class="lineno"> 4788</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(baseJson, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(interval), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(total), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ad31aeb9a4bdba1a78e42aa470d3855e8">gracePeriod</a>(grace));</div>
<div class="line"><a id="l04789" name="l04789"></a><span class="lineno"> 4789</span> </div>
<div class="line"><a id="l04790" name="l04790"></a><span class="lineno"> 4790</span> <span class="comment">// The grace period can&#39;t be larger than the interval.</span></div>
<div class="line"><a id="l04791" name="l04791"></a><span class="lineno"> 4791</span> env(createJson, sig(sfCounterpartySignature, lender), ter(tecKILLED));</div>
<div class="line"><a id="l04792" name="l04792"></a><span class="lineno"> 4792</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04793" name="l04793"></a><span class="lineno"> 4793</span> }</div>
<div class="line"><a id="l04794" name="l04794"></a><span class="lineno"> 4794</span> {</div>
<div class="line"><a id="l04795" name="l04795"></a><span class="lineno"> 4795</span> <span class="comment">// Overflow with multiplication of a few large intervals</span></div>
<div class="line"><a id="l04796" name="l04796"></a><span class="lineno"> 4796</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = 1&#39;000&#39;000&#39;000;</div>
<div class="line"><a id="l04797" name="l04797"></a><span class="lineno"> 4797</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = 10;</div>
<div class="line"><a id="l04798" name="l04798"></a><span class="lineno"> 4798</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(baseJson, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(interval), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(total));</div>
<div class="line"><a id="l04799" name="l04799"></a><span class="lineno"> 4799</span> </div>
<div class="line"><a id="l04800" name="l04800"></a><span class="lineno"> 4800</span> env(createJson, sig(sfCounterpartySignature, lender), ter(tecKILLED));</div>
<div class="line"><a id="l04801" name="l04801"></a><span class="lineno"> 4801</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04802" name="l04802"></a><span class="lineno"> 4802</span> }</div>
<div class="line"><a id="l04803" name="l04803"></a><span class="lineno"> 4803</span> {</div>
<div class="line"><a id="l04804" name="l04804"></a><span class="lineno"> 4804</span> <span class="comment">// Overflow with multiplication of many small payments</span></div>
<div class="line"><a id="l04805" name="l04805"></a><span class="lineno"> 4805</span> <span class="comment">// min interval is 60</span></div>
<div class="line"><a id="l04806" name="l04806"></a><span class="lineno"> 4806</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = 60;</div>
<div class="line"><a id="l04807" name="l04807"></a><span class="lineno"> 4807</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = 1&#39;000&#39;000&#39;000;</div>
<div class="line"><a id="l04808" name="l04808"></a><span class="lineno"> 4808</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(baseJson, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(interval), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(total));</div>
<div class="line"><a id="l04809" name="l04809"></a><span class="lineno"> 4809</span> </div>
<div class="line"><a id="l04810" name="l04810"></a><span class="lineno"> 4810</span> env(createJson, sig(sfCounterpartySignature, lender), ter(tecKILLED));</div>
<div class="line"><a id="l04811" name="l04811"></a><span class="lineno"> 4811</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04812" name="l04812"></a><span class="lineno"> 4812</span> }</div>
<div class="line"><a id="l04813" name="l04813"></a><span class="lineno"> 4813</span> {</div>
<div class="line"><a id="l04814" name="l04814"></a><span class="lineno"> 4814</span> <span class="comment">// Overflow with an absurdly large grace period</span></div>
<div class="line"><a id="l04815" name="l04815"></a><span class="lineno"> 4815</span> <span class="comment">// min interval is 60</span></div>
<div class="line"><a id="l04816" name="l04816"></a><span class="lineno"> 4816</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = 60;</div>
<div class="line"><a id="l04817" name="l04817"></a><span class="lineno"> 4817</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = (maxLoanTime() - total) / total;</div>
<div class="line"><a id="l04818" name="l04818"></a><span class="lineno"> 4818</span> <span class="keyword">auto</span> <span class="keyword">const</span> grace = interval;</div>
<div class="line"><a id="l04819" name="l04819"></a><span class="lineno"> 4819</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(baseJson, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(interval), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(total), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ad31aeb9a4bdba1a78e42aa470d3855e8">gracePeriod</a>(grace));</div>
<div class="line"><a id="l04820" name="l04820"></a><span class="lineno"> 4820</span> </div>
<div class="line"><a id="l04821" name="l04821"></a><span class="lineno"> 4821</span> env(createJson, sig(sfCounterpartySignature, lender), ter(tecKILLED));</div>
<div class="line"><a id="l04822" name="l04822"></a><span class="lineno"> 4822</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04823" name="l04823"></a><span class="lineno"> 4823</span> }</div>
<div class="line"><a id="l04824" name="l04824"></a><span class="lineno"> 4824</span> {</div>
<div class="line"><a id="l04825" name="l04825"></a><span class="lineno"> 4825</span> <span class="comment">// Start date when the ledger is closed will be larger</span></div>
<div class="line"><a id="l04826" name="l04826"></a><span class="lineno"> 4826</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerStateBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04827" name="l04827"></a><span class="lineno"> 4827</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerStateBefore-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l04828" name="l04828"></a><span class="lineno"> 4828</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1credentials.html#af1ccb12c9d3bdc8524217f3d6eca130c">keylet</a> = keylet::loan(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l04829" name="l04829"></a><span class="lineno"> 4829</span> </div>
<div class="line"><a id="l04830" name="l04830"></a><span class="lineno"> 4830</span> <span class="keyword">auto</span> <span class="keyword">const</span> grace = 100;</div>
<div class="line"><a id="l04831" name="l04831"></a><span class="lineno"> 4831</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = maxLoanTime() - grace;</div>
<div class="line"><a id="l04832" name="l04832"></a><span class="lineno"> 4832</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = 1;</div>
<div class="line"><a id="l04833" name="l04833"></a><span class="lineno"> 4833</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(baseJson, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(interval), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(total), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ad31aeb9a4bdba1a78e42aa470d3855e8">gracePeriod</a>(grace));</div>
<div class="line"><a id="l04834" name="l04834"></a><span class="lineno"> 4834</span> </div>
<div class="line"><a id="l04835" name="l04835"></a><span class="lineno"> 4835</span> env(createJson, sig(sfCounterpartySignature, lender), ter(tesSUCCESS));</div>
<div class="line"><a id="l04836" name="l04836"></a><span class="lineno"> 4836</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04837" name="l04837"></a><span class="lineno"> 4837</span> </div>
<div class="line"><a id="l04838" name="l04838"></a><span class="lineno"> 4838</span> <span class="comment">// The transaction is killed in the closed ledger</span></div>
<div class="line"><a id="l04839" name="l04839"></a><span class="lineno"> 4839</span> <span class="keyword">auto</span> <span class="keyword">const</span> meta = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ad0dadd1b0b0ef450a705dccc06d02646">meta</a>();</div>
<div class="line"><a id="l04840" name="l04840"></a><span class="lineno"> 4840</span> <span class="keywordflow">if</span> (BEAST_EXPECT(meta))</div>
<div class="line"><a id="l04841" name="l04841"></a><span class="lineno"> 4841</span> {</div>
<div class="line"><a id="l04842" name="l04842"></a><span class="lineno"> 4842</span> BEAST_EXPECT(meta-&gt;at(sfTransactionResult) == tecKILLED);</div>
<div class="line"><a id="l04843" name="l04843"></a><span class="lineno"> 4843</span> }</div>
<div class="line"><a id="l04844" name="l04844"></a><span class="lineno"> 4844</span> </div>
<div class="line"><a id="l04845" name="l04845"></a><span class="lineno"> 4845</span> <span class="comment">// If the transaction had succeeded, the loan would exist</span></div>
<div class="line"><a id="l04846" name="l04846"></a><span class="lineno"> 4846</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet);</div>
<div class="line"><a id="l04847" name="l04847"></a><span class="lineno"> 4847</span> <span class="comment">// but it doesn&#39;t</span></div>
<div class="line"><a id="l04848" name="l04848"></a><span class="lineno"> 4848</span> BEAST_EXPECT(!loanSle);</div>
<div class="line"><a id="l04849" name="l04849"></a><span class="lineno"> 4849</span> }</div>
<div class="line"><a id="l04850" name="l04850"></a><span class="lineno"> 4850</span> {</div>
<div class="line"><a id="l04851" name="l04851"></a><span class="lineno"> 4851</span> <span class="comment">// Start date when the ledger is closed will be larger</span></div>
<div class="line"><a id="l04852" name="l04852"></a><span class="lineno"> 4852</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerStateBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04853" name="l04853"></a><span class="lineno"> 4853</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerStateBefore-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l04854" name="l04854"></a><span class="lineno"> 4854</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1credentials.html#af1ccb12c9d3bdc8524217f3d6eca130c">keylet</a> = keylet::loan(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l04855" name="l04855"></a><span class="lineno"> 4855</span> </div>
<div class="line"><a id="l04856" name="l04856"></a><span class="lineno"> 4856</span> <span class="keyword">auto</span> <span class="keyword">const</span> closeStartDate = (parentCloseTime() / 10 + 1) * 10;</div>
<div class="line"><a id="l04857" name="l04857"></a><span class="lineno"> 4857</span> <span class="keyword">auto</span> <span class="keyword">const</span> grace = 5&#39;000;</div>
<div class="line"><a id="l04858" name="l04858"></a><span class="lineno"> 4858</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = maxTime - closeStartDate - grace;</div>
<div class="line"><a id="l04859" name="l04859"></a><span class="lineno"> 4859</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = 1;</div>
<div class="line"><a id="l04860" name="l04860"></a><span class="lineno"> 4860</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(baseJson, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(interval), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(total), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ad31aeb9a4bdba1a78e42aa470d3855e8">gracePeriod</a>(grace));</div>
<div class="line"><a id="l04861" name="l04861"></a><span class="lineno"> 4861</span> </div>
<div class="line"><a id="l04862" name="l04862"></a><span class="lineno"> 4862</span> env(createJson, sig(sfCounterpartySignature, lender), ter(tesSUCCESS));</div>
<div class="line"><a id="l04863" name="l04863"></a><span class="lineno"> 4863</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04864" name="l04864"></a><span class="lineno"> 4864</span> </div>
<div class="line"><a id="l04865" name="l04865"></a><span class="lineno"> 4865</span> <span class="comment">// The transaction succeeds in the closed ledger</span></div>
<div class="line"><a id="l04866" name="l04866"></a><span class="lineno"> 4866</span> <span class="keyword">auto</span> <span class="keyword">const</span> meta = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ad0dadd1b0b0ef450a705dccc06d02646">meta</a>();</div>
<div class="line"><a id="l04867" name="l04867"></a><span class="lineno"> 4867</span> <span class="keywordflow">if</span> (BEAST_EXPECT(meta))</div>
<div class="line"><a id="l04868" name="l04868"></a><span class="lineno"> 4868</span> {</div>
<div class="line"><a id="l04869" name="l04869"></a><span class="lineno"> 4869</span> BEAST_EXPECT(meta-&gt;at(sfTransactionResult) == tesSUCCESS);</div>
<div class="line"><a id="l04870" name="l04870"></a><span class="lineno"> 4870</span> }</div>
<div class="line"><a id="l04871" name="l04871"></a><span class="lineno"> 4871</span> </div>
<div class="line"><a id="l04872" name="l04872"></a><span class="lineno"> 4872</span> <span class="comment">// This loan exists</span></div>
<div class="line"><a id="l04873" name="l04873"></a><span class="lineno"> 4873</span> <span class="keyword">auto</span> <span class="keyword">const</span> afterState = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04874" name="l04874"></a><span class="lineno"> 4874</span> BEAST_EXPECT(afterState.nextPaymentDate == maxTime - grace);</div>
<div class="line"><a id="l04875" name="l04875"></a><span class="lineno"> 4875</span> BEAST_EXPECT(afterState.previousPaymentDate == 0);</div>
<div class="line"><a id="l04876" name="l04876"></a><span class="lineno"> 4876</span> BEAST_EXPECT(afterState.paymentRemaining == 1);</div>
<div class="line"><a id="l04877" name="l04877"></a><span class="lineno"> 4877</span> }</div>
<div class="line"><a id="l04878" name="l04878"></a><span class="lineno"> 4878</span> </div>
<div class="line"><a id="l04879" name="l04879"></a><span class="lineno"> 4879</span> {</div>
<div class="line"><a id="l04880" name="l04880"></a><span class="lineno"> 4880</span> <span class="comment">// Ensure the borrower has funds to pay back the loan</span></div>
<div class="line"><a id="l04881" name="l04881"></a><span class="lineno"> 4881</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a98161f69c0b208ca3c1530a95907b729">pay</a>(issuer, borrower, iouAsset(Number{1&#39;055&#39;524&#39;81, -2})));</div>
<div class="line"><a id="l04882" name="l04882"></a><span class="lineno"> 4882</span> </div>
<div class="line"><a id="l04883" name="l04883"></a><span class="lineno"> 4883</span> <span class="comment">// Start date when the ledger is closed will be larger</span></div>
<div class="line"><a id="l04884" name="l04884"></a><span class="lineno"> 4884</span> <span class="keyword">auto</span> <span class="keyword">const</span> closeStartDate = (parentCloseTime() / 10 + 1) * 10;</div>
<div class="line"><a id="l04885" name="l04885"></a><span class="lineno"> 4885</span> <span class="keyword">auto</span> <span class="keyword">const</span> grace = 5&#39;000;</div>
<div class="line"><a id="l04886" name="l04886"></a><span class="lineno"> 4886</span> <span class="keyword">auto</span> <span class="keyword">const</span> maxLoanTime = maxTime - closeStartDate - grace;</div>
<div class="line"><a id="l04887" name="l04887"></a><span class="lineno"> 4887</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = [&amp;]() {</div>
<div class="line"><a id="l04888" name="l04888"></a><span class="lineno"> 4888</span> <span class="keywordflow">if</span> (maxLoanTime % 5 == 0)</div>
<div class="line"><a id="l04889" name="l04889"></a><span class="lineno"> 4889</span> <span class="keywordflow">return</span> 5;</div>
<div class="line"><a id="l04890" name="l04890"></a><span class="lineno"> 4890</span> <span class="keywordflow">if</span> (maxLoanTime % 3 == 0)</div>
<div class="line"><a id="l04891" name="l04891"></a><span class="lineno"> 4891</span> <span class="keywordflow">return</span> 3;</div>
<div class="line"><a id="l04892" name="l04892"></a><span class="lineno"> 4892</span> <span class="keywordflow">if</span> (maxLoanTime % 2 == 0)</div>
<div class="line"><a id="l04893" name="l04893"></a><span class="lineno"> 4893</span> <span class="keywordflow">return</span> 2;</div>
<div class="line"><a id="l04894" name="l04894"></a><span class="lineno"> 4894</span> <span class="keywordflow">return</span> 0;</div>
<div class="line"><a id="l04895" name="l04895"></a><span class="lineno"> 4895</span> }();</div>
<div class="line"><a id="l04896" name="l04896"></a><span class="lineno"> 4896</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(total != 0))</div>
<div class="line"><a id="l04897" name="l04897"></a><span class="lineno"> 4897</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l04898" name="l04898"></a><span class="lineno"> 4898</span> </div>
<div class="line"><a id="l04899" name="l04899"></a><span class="lineno"> 4899</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerState = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l04900" name="l04900"></a><span class="lineno"> 4900</span> <span class="comment">// Intentionally shadow the outer values</span></div>
<div class="line"><a id="l04901" name="l04901"></a><span class="lineno"> 4901</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerState-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l04902" name="l04902"></a><span class="lineno"> 4902</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1credentials.html#af1ccb12c9d3bdc8524217f3d6eca130c">keylet</a> = keylet::loan(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l04903" name="l04903"></a><span class="lineno"> 4903</span> </div>
<div class="line"><a id="l04904" name="l04904"></a><span class="lineno"> 4904</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = maxLoanTime / total;</div>
<div class="line"><a id="l04905" name="l04905"></a><span class="lineno"> 4905</span> <span class="keyword">auto</span> createJson = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(baseJson, <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(interval), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(total), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ad31aeb9a4bdba1a78e42aa470d3855e8">gracePeriod</a>(grace));</div>
<div class="line"><a id="l04906" name="l04906"></a><span class="lineno"> 4906</span> </div>
<div class="line"><a id="l04907" name="l04907"></a><span class="lineno"> 4907</span> env(createJson, sig(sfCounterpartySignature, lender), ter(tesSUCCESS));</div>
<div class="line"><a id="l04908" name="l04908"></a><span class="lineno"> 4908</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04909" name="l04909"></a><span class="lineno"> 4909</span> </div>
<div class="line"><a id="l04910" name="l04910"></a><span class="lineno"> 4910</span> <span class="comment">// This loan exists</span></div>
<div class="line"><a id="l04911" name="l04911"></a><span class="lineno"> 4911</span> <span class="keyword">auto</span> <span class="keyword">const</span> beforeState = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04912" name="l04912"></a><span class="lineno"> 4912</span> BEAST_EXPECT(beforeState.nextPaymentDate == closeStartDate + interval);</div>
<div class="line"><a id="l04913" name="l04913"></a><span class="lineno"> 4913</span> BEAST_EXPECT(beforeState.previousPaymentDate == 0);</div>
<div class="line"><a id="l04914" name="l04914"></a><span class="lineno"> 4914</span> BEAST_EXPECT(beforeState.paymentRemaining == total);</div>
<div class="line"><a id="l04915" name="l04915"></a><span class="lineno"> 4915</span> BEAST_EXPECT(beforeState.periodicPayment &gt; 0);</div>
<div class="line"><a id="l04916" name="l04916"></a><span class="lineno"> 4916</span> </div>
<div class="line"><a id="l04917" name="l04917"></a><span class="lineno"> 4917</span> <span class="comment">// pay all but the last payment</span></div>
<div class="line"><a id="l04918" name="l04918"></a><span class="lineno"> 4918</span> {</div>
<div class="line"><a id="l04919" name="l04919"></a><span class="lineno"> 4919</span> NumberRoundModeGuard mg{Number::upward};</div>
<div class="line"><a id="l04920" name="l04920"></a><span class="lineno"> 4920</span> Number <span class="keyword">const</span> payment = beforeState.periodicPayment * (total - 1);</div>
<div class="line"><a id="l04921" name="l04921"></a><span class="lineno"> 4921</span> XRPAmount <span class="keyword">const</span> payFee{baseFee * ((total - 1) / loanPaymentsPerFeeIncrement + 1)};</div>
<div class="line"><a id="l04922" name="l04922"></a><span class="lineno"> 4922</span> STAmount <span class="keyword">const</span> paymentAmount = <a class="code hl_function" href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">roundToScale</a>(STAmount{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, payment}, beforeState.loanScale);</div>
<div class="line"><a id="l04923" name="l04923"></a><span class="lineno"> 4923</span> <span class="keyword">auto</span> loanPayTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">json</a>(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a98161f69c0b208ca3c1530a95907b729">pay</a>(borrower, <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1credentials.html#af1ccb12c9d3bdc8524217f3d6eca130c">keylet</a>.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, paymentAmount), fee(payFee));</div>
<div class="line"><a id="l04924" name="l04924"></a><span class="lineno"> 4924</span> env(loanPayTx, ter(tesSUCCESS));</div>
<div class="line"><a id="l04925" name="l04925"></a><span class="lineno"> 4925</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04926" name="l04926"></a><span class="lineno"> 4926</span> }</div>
<div class="line"><a id="l04927" name="l04927"></a><span class="lineno"> 4927</span> </div>
<div class="line"><a id="l04928" name="l04928"></a><span class="lineno"> 4928</span> <span class="comment">// The loan is on the last payment</span></div>
<div class="line"><a id="l04929" name="l04929"></a><span class="lineno"> 4929</span> <span class="keyword">auto</span> <span class="keyword">const</span> afterState = getCurrentState(env, broker, keylet);</div>
<div class="line"><a id="l04930" name="l04930"></a><span class="lineno"> 4930</span> BEAST_EXPECT(afterState.paymentRemaining == 1);</div>
<div class="line"><a id="l04931" name="l04931"></a><span class="lineno"> 4931</span> BEAST_EXPECT(afterState.nextPaymentDate == maxTime - grace);</div>
<div class="line"><a id="l04932" name="l04932"></a><span class="lineno"> 4932</span> BEAST_EXPECT(afterState.previousPaymentDate == maxTime - grace - interval);</div>
<div class="line"><a id="l04933" name="l04933"></a><span class="lineno"> 4933</span> }</div>
<div class="line"><a id="l04934" name="l04934"></a><span class="lineno"> 4934</span> }</div>
</div>
<div class="line"><a id="l04935" name="l04935"></a><span class="lineno"> 4935</span> </div>
<div class="line"><a id="l04936" name="l04936"></a><span class="lineno"> 4936</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04937" data-start="{" data-end="}">
<div class="line"><a id="l04937" name="l04937"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a8c15cc287e11639b169b1aeaf9e07060"> 4937</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a8c15cc287e11639b169b1aeaf9e07060">testRequireAuth</a>()</div>
<div class="line"><a id="l04938" name="l04938"></a><span class="lineno"> 4938</span> {</div>
<div class="line"><a id="l04939" name="l04939"></a><span class="lineno"> 4939</span> testcase(<span class="stringliteral">&quot;Require Auth - Implicit Pseudo-account authorization&quot;</span>);</div>
<div class="line"><a id="l04940" name="l04940"></a><span class="lineno"> 4940</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04941" name="l04941"></a><span class="lineno"> 4941</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l04942" name="l04942"></a><span class="lineno"> 4942</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l04943" name="l04943"></a><span class="lineno"> 4943</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l04944" name="l04944"></a><span class="lineno"> 4944</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l04945" name="l04945"></a><span class="lineno"> 4945</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a id="l04946" name="l04946"></a><span class="lineno"> 4946</span> </div>
<div class="line"><a id="l04947" name="l04947"></a><span class="lineno"> 4947</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l04948" name="l04948"></a><span class="lineno"> 4948</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04949" name="l04949"></a><span class="lineno"> 4949</span> </div>
<div class="line"><a id="l04950" name="l04950"></a><span class="lineno"> 4950</span> <span class="keyword">auto</span> asset = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a>({</div>
<div class="line"><a id="l04951" name="l04951"></a><span class="lineno"> 4951</span> .env = env,</div>
<div class="line"><a id="l04952" name="l04952"></a><span class="lineno"> 4952</span> .issuer = issuer,</div>
<div class="line"><a id="l04953" name="l04953"></a><span class="lineno"> 4953</span> .holders = {lender, borrower},</div>
<div class="line"><a id="l04954" name="l04954"></a><span class="lineno"> 4954</span> .flags = <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#aa3d8cfce19876873a4cf2d007dece062">MPTDEXFlags</a> | <a class="code hl_variable" href="namespacexrpl.html#a3b504b2dedf069a5041193be2504e319">tfMPTRequireAuth</a> | <a class="code hl_variable" href="namespacexrpl.html#a843e5f9ce3b55788961db32fffb753d1">tfMPTCanClawback</a> | <a class="code hl_variable" href="namespacexrpl.html#a75a6d6ab0752128773a7c28ec32fa5d1">tfMPTCanLock</a>,</div>
<div class="line"><a id="l04955" name="l04955"></a><span class="lineno"> 4955</span> .authHolder = <span class="keyword">true</span>,</div>
<div class="line"><a id="l04956" name="l04956"></a><span class="lineno"> 4956</span> });</div>
<div class="line"><a id="l04957" name="l04957"></a><span class="lineno"> 4957</span> </div>
<div class="line"><a id="l04958" name="l04958"></a><span class="lineno"> 4958</span> env(pay(issuer, lender, asset(5&#39;000&#39;000)));</div>
<div class="line"><a id="l04959" name="l04959"></a><span class="lineno"> 4959</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">BrokerInfo</a> brokerInfo{createVaultAndBroker(env, asset, lender)};</div>
<div class="line"><a id="l04960" name="l04960"></a><span class="lineno"> 4960</span> </div>
<div class="line"><a id="l04961" name="l04961"></a><span class="lineno"> 4961</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l04962" name="l04962"></a><span class="lineno"> 4962</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> debtMaximumRequest = brokerInfo.<a class="code hl_function" href="classxrpl_1_1STAmount.html#abbc5a024839981076ce9c16fa19d3657">asset</a>(1&#39;000).<a class="code hl_function" href="classxrpl_1_1Asset.html#afe02ca072854d69e5195378b8dfdfde2">value</a>();</div>
<div class="line"><a id="l04963" name="l04963"></a><span class="lineno"> 4963</span> </div>
<div class="line"><a id="l04964" name="l04964"></a><span class="lineno"> 4964</span> <span class="keyword">auto</span> forUnauthAuth = [&amp;](<span class="keyword">auto</span>&amp;&amp; doTx) {</div>
<div class="line"><a id="l04965" name="l04965"></a><span class="lineno"> 4965</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span> flag : {<a class="code hl_variable" href="namespacexrpl.html#aae07b590d51f8a8c8d93dfb4b05b1032">tfMPTUnauthorize</a>, 0u})</div>
<div class="line"><a id="l04966" name="l04966"></a><span class="lineno"> 4966</span> {</div>
<div class="line"><a id="l04967" name="l04967"></a><span class="lineno"> 4967</span> asset.authorize({.account = issuer, .holder = borrower, .flags = flag});</div>
<div class="line"><a id="l04968" name="l04968"></a><span class="lineno"> 4968</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04969" name="l04969"></a><span class="lineno"> 4969</span> doTx(flag == 0);</div>
<div class="line"><a id="l04970" name="l04970"></a><span class="lineno"> 4970</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l04971" name="l04971"></a><span class="lineno"> 4971</span> }</div>
<div class="line"><a id="l04972" name="l04972"></a><span class="lineno"> 4972</span> };</div>
<div class="line"><a id="l04973" name="l04973"></a><span class="lineno"> 4973</span> </div>
<div class="line"><a id="l04974" name="l04974"></a><span class="lineno"> 4974</span> <span class="comment">// Can&#39;t create a loan if the borrower is not authorized</span></div>
<div class="line"><a id="l04975" name="l04975"></a><span class="lineno"> 4975</span> forUnauthAuth([&amp;](<span class="keywordtype">bool</span> authorized) {</div>
<div class="line"><a id="l04976" name="l04976"></a><span class="lineno"> 4976</span> <span class="keyword">auto</span> <span class="keyword">const</span> err = !authorized ? <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba569f106a7939f40810643264335e9786">tecNO_AUTH</a>) : <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>);</div>
<div class="line"><a id="l04977" name="l04977"></a><span class="lineno"> 4977</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.brokerID, debtMaximumRequest),</div>
<div class="line"><a id="l04978" name="l04978"></a><span class="lineno"> 4978</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l04979" name="l04979"></a><span class="lineno"> 4979</span> loanSetFee,</div>
<div class="line"><a id="l04980" name="l04980"></a><span class="lineno"> 4980</span> err);</div>
<div class="line"><a id="l04981" name="l04981"></a><span class="lineno"> 4981</span> });</div>
<div class="line"><a id="l04982" name="l04982"></a><span class="lineno"> 4982</span> </div>
<div class="line"><a id="l04983" name="l04983"></a><span class="lineno"> 4983</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <span class="keyword">constexpr</span> loanSequence = 1;</div>
<div class="line"><a id="l04984" name="l04984"></a><span class="lineno"> 4984</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet = keylet::loan(brokerInfo.brokerID, loanSequence);</div>
<div class="line"><a id="l04985" name="l04985"></a><span class="lineno"> 4985</span> </div>
<div class="line"><a id="l04986" name="l04986"></a><span class="lineno"> 4986</span> <span class="comment">// Can&#39;t loan pay if the borrower is not authorized</span></div>
<div class="line"><a id="l04987" name="l04987"></a><span class="lineno"> 4987</span> forUnauthAuth([&amp;](<span class="keywordtype">bool</span> authorized) {</div>
<div class="line"><a id="l04988" name="l04988"></a><span class="lineno"> 4988</span> <span class="keyword">auto</span> <span class="keyword">const</span> err = !authorized ? <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba569f106a7939f40810643264335e9786">tecNO_AUTH</a>) : <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>);</div>
<div class="line"><a id="l04989" name="l04989"></a><span class="lineno"> 4989</span> env(pay(borrower, loanKeylet.key, debtMaximumRequest), err);</div>
<div class="line"><a id="l04990" name="l04990"></a><span class="lineno"> 4990</span> });</div>
<div class="line"><a id="l04991" name="l04991"></a><span class="lineno"> 4991</span> }</div>
</div>
<div class="line"><a id="l04992" name="l04992"></a><span class="lineno"> 4992</span> </div>
<div class="line"><a id="l04993" name="l04993"></a><span class="lineno"> 4993</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen04994" data-start="{" data-end="}">
<div class="line"><a id="l04994" name="l04994"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a6efc1ea6a25bdb0a06aec6a66079c866"> 4994</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a6efc1ea6a25bdb0a06aec6a66079c866">testCoverDepositWithdrawNonTransferableMPT</a>()</div>
<div class="line"><a id="l04995" name="l04995"></a><span class="lineno"> 4995</span> {</div>
<div class="line"><a id="l04996" name="l04996"></a><span class="lineno"> 4996</span> testcase(<span class="stringliteral">&quot;CoverDeposit and CoverWithdraw reject MPT without CanTransfer&quot;</span>);</div>
<div class="line"><a id="l04997" name="l04997"></a><span class="lineno"> 4997</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l04998" name="l04998"></a><span class="lineno"> 4998</span> <span class="keyword">using namespace </span>loanBroker;</div>
<div class="line"><a id="l04999" name="l04999"></a><span class="lineno"> 4999</span> </div>
<div class="line"><a id="l05000" name="l05000"></a><span class="lineno"> 5000</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l05001" name="l05001"></a><span class="lineno"> 5001</span> </div>
<div class="line"><a id="l05002" name="l05002"></a><span class="lineno"> 5002</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l05003" name="l05003"></a><span class="lineno"> 5003</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a id="l05004" name="l05004"></a><span class="lineno"> 5004</span> </div>
<div class="line"><a id="l05005" name="l05005"></a><span class="lineno"> 5005</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100&#39;000), issuer, alice);</div>
<div class="line"><a id="l05006" name="l05006"></a><span class="lineno"> 5006</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05007" name="l05007"></a><span class="lineno"> 5007</span> </div>
<div class="line"><a id="l05008" name="l05008"></a><span class="lineno"> 5008</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mpt{env, issuer, mptInitNoFund};</div>
<div class="line"><a id="l05009" name="l05009"></a><span class="lineno"> 5009</span> </div>
<div class="line"><a id="l05010" name="l05010"></a><span class="lineno"> 5010</span> mpt.create({.flags = <a class="code hl_variable" href="namespacexrpl.html#a25a16d1e4a00f49801b8f6fd16da0459">tfMPTCanTransfer</a>, .mutableFlags = <a class="code hl_variable" href="namespacexrpl.html#a329ff7185f820c4462f67e30784ea8bf">tmfMPTCanMutateCanTransfer</a>});</div>
<div class="line"><a id="l05011" name="l05011"></a><span class="lineno"> 5011</span> </div>
<div class="line"><a id="l05012" name="l05012"></a><span class="lineno"> 5012</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05013" name="l05013"></a><span class="lineno"> 5013</span> </div>
<div class="line"><a id="l05014" name="l05014"></a><span class="lineno"> 5014</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> asset = mpt[<span class="stringliteral">&quot;MPT&quot;</span>];</div>
<div class="line"><a id="l05015" name="l05015"></a><span class="lineno"> 5015</span> mpt.authorize({.account = alice});</div>
<div class="line"><a id="l05016" name="l05016"></a><span class="lineno"> 5016</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05017" name="l05017"></a><span class="lineno"> 5017</span> </div>
<div class="line"><a id="l05018" name="l05018"></a><span class="lineno"> 5018</span> <span class="comment">// Issuer can fund the holder even if CanTransfer is not set.</span></div>
<div class="line"><a id="l05019" name="l05019"></a><span class="lineno"> 5019</span> env(pay(issuer, alice, asset(100)));</div>
<div class="line"><a id="l05020" name="l05020"></a><span class="lineno"> 5020</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05021" name="l05021"></a><span class="lineno"> 5021</span> </div>
<div class="line"><a id="l05022" name="l05022"></a><span class="lineno"> 5022</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1Vault.html">Vault</a> vault{env};</div>
<div class="line"><a id="l05023" name="l05023"></a><span class="lineno"> 5023</span> <span class="keyword">auto</span> <span class="keyword">const</span> [<a class="code hl_function" href="namespacexrpl_1_1test.html#aa307723a406781ef379822c33cb75d86">createTx</a>, vaultKeylet] = vault.create({.owner = alice, .asset = asset});</div>
<div class="line"><a id="l05024" name="l05024"></a><span class="lineno"> 5024</span> env(<a class="code hl_function" href="namespacexrpl_1_1test.html#aa307723a406781ef379822c33cb75d86">createTx</a>);</div>
<div class="line"><a id="l05025" name="l05025"></a><span class="lineno"> 5025</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05026" name="l05026"></a><span class="lineno"> 5026</span> </div>
<div class="line"><a id="l05027" name="l05027"></a><span class="lineno"> 5027</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerKeylet = keylet::loanbroker(alice.id(), env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a7e2bf847bf817405a5d8db448d8b4f6f">seq</a>(alice));</div>
<div class="line"><a id="l05028" name="l05028"></a><span class="lineno"> 5028</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(alice, vaultKeylet.key));</div>
<div class="line"><a id="l05029" name="l05029"></a><span class="lineno"> 5029</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05030" name="l05030"></a><span class="lineno"> 5030</span> </div>
<div class="line"><a id="l05031" name="l05031"></a><span class="lineno"> 5031</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerKeylet);</div>
<div class="line"><a id="l05032" name="l05032"></a><span class="lineno"> 5032</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l05033" name="l05033"></a><span class="lineno"> 5033</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05034" name="l05034"></a><span class="lineno"> 5034</span> </div>
<div class="line"><a id="l05035" name="l05035"></a><span class="lineno"> 5035</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> pseudoAccount{<span class="stringliteral">&quot;Loan Broker pseudo-account&quot;</span>, brokerSle-&gt;at(sfAccount)};</div>
<div class="line"><a id="l05036" name="l05036"></a><span class="lineno"> 5036</span> </div>
<div class="line"><a id="l05037" name="l05037"></a><span class="lineno"> 5037</span> <span class="comment">// Remove CanTransfer after the broker is set up.</span></div>
<div class="line"><a id="l05038" name="l05038"></a><span class="lineno"> 5038</span> mpt.set({.mutableFlags = <a class="code hl_variable" href="namespacexrpl.html#a1586a7fcfd09c87d710754fa3b7ea8bd">tmfMPTClearCanTransfer</a>});</div>
<div class="line"><a id="l05039" name="l05039"></a><span class="lineno"> 5039</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05040" name="l05040"></a><span class="lineno"> 5040</span> </div>
<div class="line"><a id="l05041" name="l05041"></a><span class="lineno"> 5041</span> <span class="comment">// Standard Payment path should forbid third-party transfers.</span></div>
<div class="line"><a id="l05042" name="l05042"></a><span class="lineno"> 5042</span> env(pay(alice, pseudoAccount, asset(1)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba569f106a7939f40810643264335e9786">tecNO_AUTH</a>));</div>
<div class="line"><a id="l05043" name="l05043"></a><span class="lineno"> 5043</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05044" name="l05044"></a><span class="lineno"> 5044</span> </div>
<div class="line"><a id="l05045" name="l05045"></a><span class="lineno"> 5045</span> <span class="comment">// Cover cannot be transferred to broker account</span></div>
<div class="line"><a id="l05046" name="l05046"></a><span class="lineno"> 5046</span> <span class="keyword">auto</span> <span class="keyword">const</span> depositAmount = asset(1);</div>
<div class="line"><a id="l05047" name="l05047"></a><span class="lineno"> 5047</span> env(coverDeposit(alice, brokerKeylet.key, depositAmount), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_AUTH});</div>
<div class="line"><a id="l05048" name="l05048"></a><span class="lineno"> 5048</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05049" name="l05049"></a><span class="lineno"> 5049</span> </div>
<div class="line"><a id="l05050" name="l05050"></a><span class="lineno"> 5050</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> refreshed = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerKeylet); BEAST_EXPECT(refreshed))</div>
<div class="line"><a id="l05051" name="l05051"></a><span class="lineno"> 5051</span> {</div>
<div class="line"><a id="l05052" name="l05052"></a><span class="lineno"> 5052</span> BEAST_EXPECT(refreshed-&gt;at(sfCoverAvailable) == 0);</div>
<div class="line"><a id="l05053" name="l05053"></a><span class="lineno"> 5053</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7d9ac71b3ca193f66ca3703595d7e40">require</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a>(pseudoAccount, asset(0)));</div>
<div class="line"><a id="l05054" name="l05054"></a><span class="lineno"> 5054</span> }</div>
<div class="line"><a id="l05055" name="l05055"></a><span class="lineno"> 5055</span> </div>
<div class="line"><a id="l05056" name="l05056"></a><span class="lineno"> 5056</span> <span class="comment">// Set CanTransfer again and transfer some deposit</span></div>
<div class="line"><a id="l05057" name="l05057"></a><span class="lineno"> 5057</span> mpt.set({.mutableFlags = <a class="code hl_variable" href="namespacexrpl.html#af80d39e55d81f756bf5af6a960c6a120">tmfMPTSetCanTransfer</a>});</div>
<div class="line"><a id="l05058" name="l05058"></a><span class="lineno"> 5058</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05059" name="l05059"></a><span class="lineno"> 5059</span> </div>
<div class="line"><a id="l05060" name="l05060"></a><span class="lineno"> 5060</span> env(coverDeposit(alice, brokerKeylet.key, depositAmount));</div>
<div class="line"><a id="l05061" name="l05061"></a><span class="lineno"> 5061</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05062" name="l05062"></a><span class="lineno"> 5062</span> </div>
<div class="line"><a id="l05063" name="l05063"></a><span class="lineno"> 5063</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> refreshed = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerKeylet); BEAST_EXPECT(refreshed))</div>
<div class="line"><a id="l05064" name="l05064"></a><span class="lineno"> 5064</span> {</div>
<div class="line"><a id="l05065" name="l05065"></a><span class="lineno"> 5065</span> BEAST_EXPECT(refreshed-&gt;at(sfCoverAvailable) == 1);</div>
<div class="line"><a id="l05066" name="l05066"></a><span class="lineno"> 5066</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7d9ac71b3ca193f66ca3703595d7e40">require</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a>(pseudoAccount, depositAmount));</div>
<div class="line"><a id="l05067" name="l05067"></a><span class="lineno"> 5067</span> }</div>
<div class="line"><a id="l05068" name="l05068"></a><span class="lineno"> 5068</span> </div>
<div class="line"><a id="l05069" name="l05069"></a><span class="lineno"> 5069</span> <span class="comment">// Remove CanTransfer after the deposit</span></div>
<div class="line"><a id="l05070" name="l05070"></a><span class="lineno"> 5070</span> mpt.set({.mutableFlags = <a class="code hl_variable" href="namespacexrpl.html#a1586a7fcfd09c87d710754fa3b7ea8bd">tmfMPTClearCanTransfer</a>});</div>
<div class="line"><a id="l05071" name="l05071"></a><span class="lineno"> 5071</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05072" name="l05072"></a><span class="lineno"> 5072</span> </div>
<div class="line"><a id="l05073" name="l05073"></a><span class="lineno"> 5073</span> <span class="comment">// Cover cannot be transferred from broker account</span></div>
<div class="line"><a id="l05074" name="l05074"></a><span class="lineno"> 5074</span> env(coverWithdraw(alice, brokerKeylet.key, depositAmount), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>{tecNO_AUTH});</div>
<div class="line"><a id="l05075" name="l05075"></a><span class="lineno"> 5075</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05076" name="l05076"></a><span class="lineno"> 5076</span> </div>
<div class="line"><a id="l05077" name="l05077"></a><span class="lineno"> 5077</span> <span class="comment">// Set CanTransfer again and withdraw</span></div>
<div class="line"><a id="l05078" name="l05078"></a><span class="lineno"> 5078</span> mpt.set({.mutableFlags = <a class="code hl_variable" href="namespacexrpl.html#af80d39e55d81f756bf5af6a960c6a120">tmfMPTSetCanTransfer</a>});</div>
<div class="line"><a id="l05079" name="l05079"></a><span class="lineno"> 5079</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05080" name="l05080"></a><span class="lineno"> 5080</span> </div>
<div class="line"><a id="l05081" name="l05081"></a><span class="lineno"> 5081</span> env(coverWithdraw(alice, brokerKeylet.key, depositAmount));</div>
<div class="line"><a id="l05082" name="l05082"></a><span class="lineno"> 5082</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05083" name="l05083"></a><span class="lineno"> 5083</span> </div>
<div class="line"><a id="l05084" name="l05084"></a><span class="lineno"> 5084</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> refreshed = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerKeylet); BEAST_EXPECT(refreshed))</div>
<div class="line"><a id="l05085" name="l05085"></a><span class="lineno"> 5085</span> {</div>
<div class="line"><a id="l05086" name="l05086"></a><span class="lineno"> 5086</span> BEAST_EXPECT(refreshed-&gt;at(sfCoverAvailable) == 0);</div>
<div class="line"><a id="l05087" name="l05087"></a><span class="lineno"> 5087</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7d9ac71b3ca193f66ca3703595d7e40">require</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a>(pseudoAccount, asset(0)));</div>
<div class="line"><a id="l05088" name="l05088"></a><span class="lineno"> 5088</span> }</div>
<div class="line"><a id="l05089" name="l05089"></a><span class="lineno"> 5089</span> }</div>
</div>
<div class="line"><a id="l05090" name="l05090"></a><span class="lineno"> 5090</span> </div>
<div class="line"><a id="l05091" name="l05091"></a><span class="lineno"> 5091</span><span class="preprocessor">#if LOANTODO</span></div>
<div class="line"><a id="l05092" name="l05092"></a><span class="lineno"> 5092</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l05093" name="l05093"></a><span class="lineno"> 5093</span> testLoanPayLateFullPaymentBypassesPenalties()</div>
<div class="line"><a id="l05094" name="l05094"></a><span class="lineno"> 5094</span> {</div>
<div class="line"><a id="l05095" name="l05095"></a><span class="lineno"> 5095</span> testcase(<span class="stringliteral">&quot;LoanPay full payment skips late penalties&quot;</span>);</div>
<div class="line"><a id="l05096" name="l05096"></a><span class="lineno"> 5096</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05097" name="l05097"></a><span class="lineno"> 5097</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l05098" name="l05098"></a><span class="lineno"> 5098</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l05099" name="l05099"></a><span class="lineno"> 5099</span> </div>
<div class="line"><a id="l05100" name="l05100"></a><span class="lineno"> 5100</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l05101" name="l05101"></a><span class="lineno"> 5101</span> </div>
<div class="line"><a id="l05102" name="l05102"></a><span class="lineno"> 5102</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l05103" name="l05103"></a><span class="lineno"> 5103</span> Account <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l05104" name="l05104"></a><span class="lineno"> 5104</span> Account <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l05105" name="l05105"></a><span class="lineno"> 5105</span> </div>
<div class="line"><a id="l05106" name="l05106"></a><span class="lineno"> 5106</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l05107" name="l05107"></a><span class="lineno"> 5107</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05108" name="l05108"></a><span class="lineno"> 5108</span> </div>
<div class="line"><a id="l05109" name="l05109"></a><span class="lineno"> 5109</span> PrettyAsset <span class="keyword">const</span> asset = issuer[iouCurrency];</div>
<div class="line"><a id="l05110" name="l05110"></a><span class="lineno"> 5110</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a3d11c7306297164e4b14eb26e50efc68">trust</a>(lender, asset(100&#39;000&#39;000)));</div>
<div class="line"><a id="l05111" name="l05111"></a><span class="lineno"> 5111</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a3d11c7306297164e4b14eb26e50efc68">trust</a>(borrower, asset(100&#39;000&#39;000)));</div>
<div class="line"><a id="l05112" name="l05112"></a><span class="lineno"> 5112</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a98161f69c0b208ca3c1530a95907b729">pay</a>(issuer, lender, asset(50&#39;000&#39;000)));</div>
<div class="line"><a id="l05113" name="l05113"></a><span class="lineno"> 5113</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a98161f69c0b208ca3c1530a95907b729">pay</a>(issuer, borrower, asset(5&#39;000&#39;000)));</div>
<div class="line"><a id="l05114" name="l05114"></a><span class="lineno"> 5114</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05115" name="l05115"></a><span class="lineno"> 5115</span> </div>
<div class="line"><a id="l05116" name="l05116"></a><span class="lineno"> 5116</span> BrokerInfo broker{createVaultAndBroker(env, asset, lender)};</div>
<div class="line"><a id="l05117" name="l05117"></a><span class="lineno"> 5117</span> </div>
<div class="line"><a id="l05118" name="l05118"></a><span class="lineno"> 5118</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = fee(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l05119" name="l05119"></a><span class="lineno"> 5119</span> </div>
<div class="line"><a id="l05120" name="l05120"></a><span class="lineno"> 5120</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerPreLoan = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l05121" name="l05121"></a><span class="lineno"> 5121</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerPreLoan))</div>
<div class="line"><a id="l05122" name="l05122"></a><span class="lineno"> 5122</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05123" name="l05123"></a><span class="lineno"> 5123</span> </div>
<div class="line"><a id="l05124" name="l05124"></a><span class="lineno"> 5124</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerPreLoan-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l05125" name="l05125"></a><span class="lineno"> 5125</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet = keylet::loan(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l05126" name="l05126"></a><span class="lineno"> 5126</span> </div>
<div class="line"><a id="l05127" name="l05127"></a><span class="lineno"> 5127</span> Number <span class="keyword">const</span> principal = asset(1&#39;000).value();</div>
<div class="line"><a id="l05128" name="l05128"></a><span class="lineno"> 5128</span> Number <span class="keyword">const</span> serviceFee = asset(2).value();</div>
<div class="line"><a id="l05129" name="l05129"></a><span class="lineno"> 5129</span> Number <span class="keyword">const</span> lateFee = asset(5).value();</div>
<div class="line"><a id="l05130" name="l05130"></a><span class="lineno"> 5130</span> Number <span class="keyword">const</span> closeFee = asset(4).value();</div>
<div class="line"><a id="l05131" name="l05131"></a><span class="lineno"> 5131</span> </div>
<div class="line"><a id="l05132" name="l05132"></a><span class="lineno"> 5132</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principal),</div>
<div class="line"><a id="l05133" name="l05133"></a><span class="lineno"> 5133</span> sig(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l05134" name="l05134"></a><span class="lineno"> 5134</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a208f2885c356ca80e32b01154d789fc9">loanServiceFee</a>(serviceFee),</div>
<div class="line"><a id="l05135" name="l05135"></a><span class="lineno"> 5135</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a883226ec89519e59a4e934cd584868ac">latePaymentFee</a>(lateFee),</div>
<div class="line"><a id="l05136" name="l05136"></a><span class="lineno"> 5136</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#aaf4a3d6848cb7ccce6a91e48ba420d87">closePaymentFee</a>(closeFee),</div>
<div class="line"><a id="l05137" name="l05137"></a><span class="lineno"> 5137</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#aff1d4b68944934076dad6fecd79f5de7">interestRate</a>(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(12)),</div>
<div class="line"><a id="l05138" name="l05138"></a><span class="lineno"> 5138</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a47da9dc8ca59bbea7699977db4aea15f">lateInterestRate</a>(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(24) / 10),</div>
<div class="line"><a id="l05139" name="l05139"></a><span class="lineno"> 5139</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ae7ec99a72a755d95dc56cf5e6d5c5593">closeInterestRate</a>(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(5)),</div>
<div class="line"><a id="l05140" name="l05140"></a><span class="lineno"> 5140</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(12),</div>
<div class="line"><a id="l05141" name="l05141"></a><span class="lineno"> 5141</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(600),</div>
<div class="line"><a id="l05142" name="l05142"></a><span class="lineno"> 5142</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ad31aeb9a4bdba1a78e42aa470d3855e8">gracePeriod</a>(0),</div>
<div class="line"><a id="l05143" name="l05143"></a><span class="lineno"> 5143</span> fee(loanSetFee));</div>
<div class="line"><a id="l05144" name="l05144"></a><span class="lineno"> 5144</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05145" name="l05145"></a><span class="lineno"> 5145</span> </div>
<div class="line"><a id="l05146" name="l05146"></a><span class="lineno"> 5146</span> <span class="keyword">auto</span> state1 = getCurrentState(env, broker, loanKeylet);</div>
<div class="line"><a id="l05147" name="l05147"></a><span class="lineno"> 5147</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(state1.paymentRemaining &gt; 1))</div>
<div class="line"><a id="l05148" name="l05148"></a><span class="lineno"> 5148</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05149" name="l05149"></a><span class="lineno"> 5149</span> </div>
<div class="line"><a id="l05150" name="l05150"></a><span class="lineno"> 5150</span> <span class="keyword">using </span>d = NetClock::duration;</div>
<div class="line"><a id="l05151" name="l05151"></a><span class="lineno"> 5151</span> <span class="keyword">using </span>tp = NetClock::time_point;</div>
<div class="line"><a id="l05152" name="l05152"></a><span class="lineno"> 5152</span> <span class="keyword">auto</span> <span class="keyword">const</span> overdueClose = tp{d{state1.nextPaymentDate + state1.paymentInterval}};</div>
<div class="line"><a id="l05153" name="l05153"></a><span class="lineno"> 5153</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>(overdueClose);</div>
<div class="line"><a id="l05154" name="l05154"></a><span class="lineno"> 5154</span> </div>
<div class="line"><a id="l05155" name="l05155"></a><span class="lineno"> 5155</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l05156" name="l05156"></a><span class="lineno"> 5156</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet);</div>
<div class="line"><a id="l05157" name="l05157"></a><span class="lineno"> 5157</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle &amp;&amp; loanSle))</div>
<div class="line"><a id="l05158" name="l05158"></a><span class="lineno"> 5158</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05159" name="l05159"></a><span class="lineno"> 5159</span> </div>
<div class="line"><a id="l05160" name="l05160"></a><span class="lineno"> 5160</span> <span class="keyword">auto</span> state = getCurrentState(env, broker, loanKeylet);</div>
<div class="line"><a id="l05161" name="l05161"></a><span class="lineno"> 5161</span> </div>
<div class="line"><a id="l05162" name="l05162"></a><span class="lineno"> 5162</span> <a class="code hl_typedef" href="namespacexrpl.html#abd6a0d13118fcad34069500c471c3ec6">TenthBips16</a> <span class="keyword">const</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a8d86fa894081f45945e58f12b1b908bc">managementFeeRate</a>{brokerSle-&gt;at(sfManagementFeeRate)};</div>
<div class="line"><a id="l05163" name="l05163"></a><span class="lineno"> 5163</span> <a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a> <span class="keyword">const</span> interestRateValue{loanSle-&gt;at(sfInterestRate)};</div>
<div class="line"><a id="l05164" name="l05164"></a><span class="lineno"> 5164</span> <a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a> <span class="keyword">const</span> lateInterestRateValue{loanSle-&gt;at(sfLateInterestRate)};</div>
<div class="line"><a id="l05165" name="l05165"></a><span class="lineno"> 5165</span> <a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a> <span class="keyword">const</span> closeInterestRateValue{loanSle-&gt;at(sfCloseInterestRate)};</div>
<div class="line"><a id="l05166" name="l05166"></a><span class="lineno"> 5166</span> </div>
<div class="line"><a id="l05167" name="l05167"></a><span class="lineno"> 5167</span> Number <span class="keyword">const</span> closePaymentFeeRounded =</div>
<div class="line"><a id="l05168" name="l05168"></a><span class="lineno"> 5168</span> <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, loanSle-&gt;at(sfClosePaymentFee), state.loanScale);</div>
<div class="line"><a id="l05169" name="l05169"></a><span class="lineno"> 5169</span> Number <span class="keyword">const</span> latePaymentFeeRounded = <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, loanSle-&gt;at(sfLatePaymentFee), state.loanScale);</div>
<div class="line"><a id="l05170" name="l05170"></a><span class="lineno"> 5170</span> </div>
<div class="line"><a id="l05171" name="l05171"></a><span class="lineno"> 5171</span> <span class="keyword">auto</span> <span class="keyword">const</span> roundedLoanState =</div>
<div class="line"><a id="l05172" name="l05172"></a><span class="lineno"> 5172</span> <a class="code hl_function" href="namespacexrpl.html#aeb5f98fcbd289260f4848cbf266400a4">constructLoanState</a>(state.totalValue, state.principalOutstanding, state.managementFeeOutstanding);</div>
<div class="line"><a id="l05173" name="l05173"></a><span class="lineno"> 5173</span> Number <span class="keyword">const</span> totalInterestOutstanding = roundedLoanState.interestDue;</div>
<div class="line"><a id="l05174" name="l05174"></a><span class="lineno"> 5174</span> </div>
<div class="line"><a id="l05175" name="l05175"></a><span class="lineno"> 5175</span> <span class="keyword">auto</span> <span class="keyword">const</span> periodicRate = <a class="code hl_function" href="namespacexrpl.html#a0ff65dbec299f5ffe3cc3e46822b54b1">loanPeriodicRate</a>(interestRateValue, state.paymentInterval);</div>
<div class="line"><a id="l05176" name="l05176"></a><span class="lineno"> 5176</span> <span class="keyword">auto</span> <span class="keyword">const</span> rawLoanState =</div>
<div class="line"><a id="l05177" name="l05177"></a><span class="lineno"> 5177</span> <a class="code hl_function" href="namespacexrpl.html#a5405a03459935d24ab27d4a0b9c5afc6">computeTheoreticalLoanState</a>(state.periodicPayment, periodicRate, state.paymentRemaining, managementFeeRate);</div>
<div class="line"><a id="l05178" name="l05178"></a><span class="lineno"> 5178</span> </div>
<div class="line"><a id="l05179" name="l05179"></a><span class="lineno"> 5179</span> <span class="keyword">auto</span> <span class="keyword">const</span> parentCloseTime = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;parentCloseTime();</div>
<div class="line"><a id="l05180" name="l05180"></a><span class="lineno"> 5180</span> <span class="keyword">auto</span> <span class="keyword">const</span> startDateSeconds = <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a><span class="keyword">&gt;</span>(state.startDate.time_since_epoch().count());</div>
<div class="line"><a id="l05181" name="l05181"></a><span class="lineno"> 5181</span> </div>
<div class="line"><a id="l05182" name="l05182"></a><span class="lineno"> 5182</span> Number <span class="keyword">const</span> fullPaymentInterest = <a class="code hl_function" href="namespacexrpl.html#af74cf647690ab5cdb695b5edf8c75a91">computeFullPaymentInterest</a>(</div>
<div class="line"><a id="l05183" name="l05183"></a><span class="lineno"> 5183</span> rawLoanState.principalOutstanding,</div>
<div class="line"><a id="l05184" name="l05184"></a><span class="lineno"> 5184</span> periodicRate,</div>
<div class="line"><a id="l05185" name="l05185"></a><span class="lineno"> 5185</span> parentCloseTime,</div>
<div class="line"><a id="l05186" name="l05186"></a><span class="lineno"> 5186</span> state.paymentInterval,</div>
<div class="line"><a id="l05187" name="l05187"></a><span class="lineno"> 5187</span> state.previousPaymentDate,</div>
<div class="line"><a id="l05188" name="l05188"></a><span class="lineno"> 5188</span> startDateSeconds,</div>
<div class="line"><a id="l05189" name="l05189"></a><span class="lineno"> 5189</span> closeInterestRateValue);</div>
<div class="line"><a id="l05190" name="l05190"></a><span class="lineno"> 5190</span> </div>
<div class="line"><a id="l05191" name="l05191"></a><span class="lineno"> 5191</span> Number <span class="keyword">const</span> roundedFullInterestAmount = <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, fullPaymentInterest, state.loanScale);</div>
<div class="line"><a id="l05192" name="l05192"></a><span class="lineno"> 5192</span> Number <span class="keyword">const</span> roundedFullManagementFee =</div>
<div class="line"><a id="l05193" name="l05193"></a><span class="lineno"> 5193</span> <a class="code hl_function" href="namespacexrpl.html#a214a68fa4b462cf05138d87a9806bd06">computeManagementFee</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, roundedFullInterestAmount, managementFeeRate, state.loanScale);</div>
<div class="line"><a id="l05194" name="l05194"></a><span class="lineno"> 5194</span> Number <span class="keyword">const</span> roundedFullInterest = roundedFullInterestAmount - roundedFullManagementFee;</div>
<div class="line"><a id="l05195" name="l05195"></a><span class="lineno"> 5195</span> </div>
<div class="line"><a id="l05196" name="l05196"></a><span class="lineno"> 5196</span> Number <span class="keyword">const</span> trackedValueDelta =</div>
<div class="line"><a id="l05197" name="l05197"></a><span class="lineno"> 5197</span> state.principalOutstanding + totalInterestOutstanding + state.managementFeeOutstanding;</div>
<div class="line"><a id="l05198" name="l05198"></a><span class="lineno"> 5198</span> Number <span class="keyword">const</span> untrackedManagementFee =</div>
<div class="line"><a id="l05199" name="l05199"></a><span class="lineno"> 5199</span> closePaymentFeeRounded + roundedFullManagementFee - state.managementFeeOutstanding;</div>
<div class="line"><a id="l05200" name="l05200"></a><span class="lineno"> 5200</span> Number <span class="keyword">const</span> untrackedInterest = roundedFullInterest - totalInterestOutstanding;</div>
<div class="line"><a id="l05201" name="l05201"></a><span class="lineno"> 5201</span> </div>
<div class="line"><a id="l05202" name="l05202"></a><span class="lineno"> 5202</span> Number <span class="keyword">const</span> baseFullDue = trackedValueDelta + untrackedInterest + untrackedManagementFee;</div>
<div class="line"><a id="l05203" name="l05203"></a><span class="lineno"> 5203</span> BEAST_EXPECT(baseFullDue == <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, baseFullDue, state.loanScale));</div>
<div class="line"><a id="l05204" name="l05204"></a><span class="lineno"> 5204</span> </div>
<div class="line"><a id="l05205" name="l05205"></a><span class="lineno"> 5205</span> <span class="keyword">auto</span> <span class="keyword">const</span> overdueSeconds = parentCloseTime.time_since_epoch().count() - state.nextPaymentDate;</div>
<div class="line"><a id="l05206" name="l05206"></a><span class="lineno"> 5206</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(overdueSeconds &gt; 0))</div>
<div class="line"><a id="l05207" name="l05207"></a><span class="lineno"> 5207</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05208" name="l05208"></a><span class="lineno"> 5208</span> </div>
<div class="line"><a id="l05209" name="l05209"></a><span class="lineno"> 5209</span> Number <span class="keyword">const</span> overdueRate = <a class="code hl_function" href="namespacexrpl.html#a0ff65dbec299f5ffe3cc3e46822b54b1">loanPeriodicRate</a>(lateInterestRateValue, overdueSeconds);</div>
<div class="line"><a id="l05210" name="l05210"></a><span class="lineno"> 5210</span> Number <span class="keyword">const</span> lateInterestRaw = state.principalOutstanding * overdueRate;</div>
<div class="line"><a id="l05211" name="l05211"></a><span class="lineno"> 5211</span> Number <span class="keyword">const</span> lateInterestRounded = <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, lateInterestRaw, state.loanScale);</div>
<div class="line"><a id="l05212" name="l05212"></a><span class="lineno"> 5212</span> Number <span class="keyword">const</span> lateManagementFeeRounded =</div>
<div class="line"><a id="l05213" name="l05213"></a><span class="lineno"> 5213</span> <a class="code hl_function" href="namespacexrpl.html#a214a68fa4b462cf05138d87a9806bd06">computeManagementFee</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>, lateInterestRounded, managementFeeRate, state.loanScale);</div>
<div class="line"><a id="l05214" name="l05214"></a><span class="lineno"> 5214</span> Number <span class="keyword">const</span> penaltyDue = lateInterestRounded + lateManagementFeeRounded + latePaymentFeeRounded;</div>
<div class="line"><a id="l05215" name="l05215"></a><span class="lineno"> 5215</span> BEAST_EXPECT(penaltyDue &gt; Number{});</div>
<div class="line"><a id="l05216" name="l05216"></a><span class="lineno"> 5216</span> </div>
<div class="line"><a id="l05217" name="l05217"></a><span class="lineno"> 5217</span> <span class="keyword">auto</span> <span class="keyword">const</span> balanceBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>).<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a844148a5010081aacd11657cddd4b028">number</a>();</div>
<div class="line"><a id="l05218" name="l05218"></a><span class="lineno"> 5218</span> </div>
<div class="line"><a id="l05219" name="l05219"></a><span class="lineno"> 5219</span> STAmount <span class="keyword">const</span> paymentAmount{broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>.<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac5538be33495f6fdd3cd03177b25decf">raw</a>(), baseFullDue};</div>
<div class="line"><a id="l05220" name="l05220"></a><span class="lineno"> 5220</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a98161f69c0b208ca3c1530a95907b729">pay</a>(borrower, loanKeylet.key, paymentAmount, tfLoanFullPayment));</div>
<div class="line"><a id="l05221" name="l05221"></a><span class="lineno"> 5221</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05222" name="l05222"></a><span class="lineno"> 5222</span> </div>
<div class="line"><a id="l05223" name="l05223"></a><span class="lineno"> 5223</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> meta = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ad0dadd1b0b0ef450a705dccc06d02646">meta</a>(); BEAST_EXPECT(meta))</div>
<div class="line"><a id="l05224" name="l05224"></a><span class="lineno"> 5224</span> BEAST_EXPECT(meta-&gt;at(sfTransactionResult) == <a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>);</div>
<div class="line"><a id="l05225" name="l05225"></a><span class="lineno"> 5225</span> </div>
<div class="line"><a id="l05226" name="l05226"></a><span class="lineno"> 5226</span> <span class="keyword">auto</span> <span class="keyword">const</span> balanceAfter = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>).<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a844148a5010081aacd11657cddd4b028">number</a>();</div>
<div class="line"><a id="l05227" name="l05227"></a><span class="lineno"> 5227</span> Number <span class="keyword">const</span> actualPaid = balanceBefore - balanceAfter;</div>
<div class="line"><a id="l05228" name="l05228"></a><span class="lineno"> 5228</span> BEAST_EXPECT(actualPaid == baseFullDue);</div>
<div class="line"><a id="l05229" name="l05229"></a><span class="lineno"> 5229</span> </div>
<div class="line"><a id="l05230" name="l05230"></a><span class="lineno"> 5230</span> Number <span class="keyword">const</span> expectedWithPenalty = baseFullDue + penaltyDue;</div>
<div class="line"><a id="l05231" name="l05231"></a><span class="lineno"> 5231</span> BEAST_EXPECT(expectedWithPenalty &gt; actualPaid);</div>
<div class="line"><a id="l05232" name="l05232"></a><span class="lineno"> 5232</span> BEAST_EXPECT(expectedWithPenalty - actualPaid == penaltyDue);</div>
<div class="line"><a id="l05233" name="l05233"></a><span class="lineno"> 5233</span> }</div>
<div class="line"><a id="l05234" name="l05234"></a><span class="lineno"> 5234</span> </div>
<div class="line"><a id="l05235" name="l05235"></a><span class="lineno"> 5235</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l05236" name="l05236"></a><span class="lineno"> 5236</span> testLoanCoverMinimumRoundingExploit()</div>
<div class="line"><a id="l05237" name="l05237"></a><span class="lineno"> 5237</span> {</div>
<div class="line"><a id="l05238" name="l05238"></a><span class="lineno"> 5238</span> <span class="keyword">auto</span> testLoanCoverMinimumRoundingExploit = [&amp;, <span class="keyword">this</span>](Number <span class="keyword">const</span>&amp; principalRequest) {</div>
<div class="line"><a id="l05239" name="l05239"></a><span class="lineno"> 5239</span> testcase &lt;&lt; <span class="stringliteral">&quot;LoanBrokerCoverClawback drains cover via rounding&quot;</span></div>
<div class="line"><a id="l05240" name="l05240"></a><span class="lineno"> 5240</span> &lt;&lt; <span class="stringliteral">&quot; principalRequested=&quot;</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">to_string</a>(principalRequest);</div>
<div class="line"><a id="l05241" name="l05241"></a><span class="lineno"> 5241</span> </div>
<div class="line"><a id="l05242" name="l05242"></a><span class="lineno"> 5242</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05243" name="l05243"></a><span class="lineno"> 5243</span> <span class="keyword">using namespace </span><a class="code hl_function" href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">loan</a>;</div>
<div class="line"><a id="l05244" name="l05244"></a><span class="lineno"> 5244</span> <span class="keyword">using namespace </span>loanBroker;</div>
<div class="line"><a id="l05245" name="l05245"></a><span class="lineno"> 5245</span> </div>
<div class="line"><a id="l05246" name="l05246"></a><span class="lineno"> 5246</span> Env env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l05247" name="l05247"></a><span class="lineno"> 5247</span> </div>
<div class="line"><a id="l05248" name="l05248"></a><span class="lineno"> 5248</span> Account <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l05249" name="l05249"></a><span class="lineno"> 5249</span> Account <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l05250" name="l05250"></a><span class="lineno"> 5250</span> Account <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l05251" name="l05251"></a><span class="lineno"> 5251</span> </div>
<div class="line"><a id="l05252" name="l05252"></a><span class="lineno"> 5252</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000&#39;000), issuer, lender, borrower);</div>
<div class="line"><a id="l05253" name="l05253"></a><span class="lineno"> 5253</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05254" name="l05254"></a><span class="lineno"> 5254</span> </div>
<div class="line"><a id="l05255" name="l05255"></a><span class="lineno"> 5255</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#ac015d7c2da11cab163c6fd1e2d425ffb">fset</a>(issuer, asfAllowTrustLineClawback));</div>
<div class="line"><a id="l05256" name="l05256"></a><span class="lineno"> 5256</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05257" name="l05257"></a><span class="lineno"> 5257</span> </div>
<div class="line"><a id="l05258" name="l05258"></a><span class="lineno"> 5258</span> PrettyAsset <span class="keyword">const</span> asset = issuer[iouCurrency];</div>
<div class="line"><a id="l05259" name="l05259"></a><span class="lineno"> 5259</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a3d11c7306297164e4b14eb26e50efc68">trust</a>(lender, asset(2&#39;000&#39;0000)));</div>
<div class="line"><a id="l05260" name="l05260"></a><span class="lineno"> 5260</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a3d11c7306297164e4b14eb26e50efc68">trust</a>(borrower, asset(2&#39;000&#39;0000)));</div>
<div class="line"><a id="l05261" name="l05261"></a><span class="lineno"> 5261</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05262" name="l05262"></a><span class="lineno"> 5262</span> </div>
<div class="line"><a id="l05263" name="l05263"></a><span class="lineno"> 5263</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a98161f69c0b208ca3c1530a95907b729">pay</a>(issuer, lender, asset(2&#39;000&#39;0000)));</div>
<div class="line"><a id="l05264" name="l05264"></a><span class="lineno"> 5264</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05265" name="l05265"></a><span class="lineno"> 5265</span> </div>
<div class="line"><a id="l05266" name="l05266"></a><span class="lineno"> 5266</span> BrokerParameters brokerParams{.debtMax = 0, .coverRateMin = <a class="code hl_typedef" href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">TenthBips32</a>{10&#39;000}};</div>
<div class="line"><a id="l05267" name="l05267"></a><span class="lineno"> 5267</span> BrokerInfo broker{createVaultAndBroker(env, asset, lender, brokerParams)};</div>
<div class="line"><a id="l05268" name="l05268"></a><span class="lineno"> 5268</span> </div>
<div class="line"><a id="l05269" name="l05269"></a><span class="lineno"> 5269</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = fee(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l05270" name="l05270"></a><span class="lineno"> 5270</span> <span class="keyword">auto</span> <a class="code hl_function" href="namespacexrpl_1_1test.html#aa307723a406781ef379822c33cb75d86">createTx</a> = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(</div>
<div class="line"><a id="l05271" name="l05271"></a><span class="lineno"> 5271</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest),</div>
<div class="line"><a id="l05272" name="l05272"></a><span class="lineno"> 5272</span> sig(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l05273" name="l05273"></a><span class="lineno"> 5273</span> loanSetFee,</div>
<div class="line"><a id="l05274" name="l05274"></a><span class="lineno"> 5274</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">paymentInterval</a>(600),</div>
<div class="line"><a id="l05275" name="l05275"></a><span class="lineno"> 5275</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">paymentTotal</a>(1),</div>
<div class="line"><a id="l05276" name="l05276"></a><span class="lineno"> 5276</span> <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ad31aeb9a4bdba1a78e42aa470d3855e8">gracePeriod</a>(60));</div>
<div class="line"><a id="l05277" name="l05277"></a><span class="lineno"> 5277</span> env(createTx);</div>
<div class="line"><a id="l05278" name="l05278"></a><span class="lineno"> 5278</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05279" name="l05279"></a><span class="lineno"> 5279</span> </div>
<div class="line"><a id="l05280" name="l05280"></a><span class="lineno"> 5280</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l05281" name="l05281"></a><span class="lineno"> 5281</span> BEAST_EXPECT(brokerBefore);</div>
<div class="line"><a id="l05282" name="l05282"></a><span class="lineno"> 5282</span> <span class="keywordflow">if</span> (!brokerBefore)</div>
<div class="line"><a id="l05283" name="l05283"></a><span class="lineno"> 5283</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05284" name="l05284"></a><span class="lineno"> 5284</span> </div>
<div class="line"><a id="l05285" name="l05285"></a><span class="lineno"> 5285</span> Number <span class="keyword">const</span> debtOutstanding = brokerBefore-&gt;at(sfDebtTotal);</div>
<div class="line"><a id="l05286" name="l05286"></a><span class="lineno"> 5286</span> Number <span class="keyword">const</span> coverAvailableBefore = brokerBefore-&gt;at(sfCoverAvailable);</div>
<div class="line"><a id="l05287" name="l05287"></a><span class="lineno"> 5287</span> </div>
<div class="line"><a id="l05288" name="l05288"></a><span class="lineno"> 5288</span> BEAST_EXPECT(debtOutstanding &gt; Number{});</div>
<div class="line"><a id="l05289" name="l05289"></a><span class="lineno"> 5289</span> BEAST_EXPECT(coverAvailableBefore &gt; Number{});</div>
<div class="line"><a id="l05290" name="l05290"></a><span class="lineno"> 5290</span> </div>
<div class="line"><a id="l05291" name="l05291"></a><span class="lineno"> 5291</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/numeric/math/log.html">log</a> &lt;&lt; <span class="stringliteral">&quot;debt=&quot;</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">to_string</a>(debtOutstanding) &lt;&lt; <span class="stringliteral">&quot; cover_available=&quot;</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">to_string</a>(coverAvailableBefore);</div>
<div class="line"><a id="l05292" name="l05292"></a><span class="lineno"> 5292</span> </div>
<div class="line"><a id="l05293" name="l05293"></a><span class="lineno"> 5293</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a54a1c903d8e032fb47d67dec00b62402">coverClawback</a>(issuer, 0), <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a4f7611e9fc090d73c33566d8492cd14a">loanBrokerID</a>(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l05294" name="l05294"></a><span class="lineno"> 5294</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05295" name="l05295"></a><span class="lineno"> 5295</span> </div>
<div class="line"><a id="l05296" name="l05296"></a><span class="lineno"> 5296</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerAfter = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l05297" name="l05297"></a><span class="lineno"> 5297</span> BEAST_EXPECT(brokerAfter);</div>
<div class="line"><a id="l05298" name="l05298"></a><span class="lineno"> 5298</span> <span class="keywordflow">if</span> (!brokerAfter)</div>
<div class="line"><a id="l05299" name="l05299"></a><span class="lineno"> 5299</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05300" name="l05300"></a><span class="lineno"> 5300</span> </div>
<div class="line"><a id="l05301" name="l05301"></a><span class="lineno"> 5301</span> Number <span class="keyword">const</span> debtAfter = brokerAfter-&gt;at(sfDebtTotal);</div>
<div class="line"><a id="l05302" name="l05302"></a><span class="lineno"> 5302</span> <span class="comment">// the debt has not changed</span></div>
<div class="line"><a id="l05303" name="l05303"></a><span class="lineno"> 5303</span> BEAST_EXPECT(debtAfter == debtOutstanding);</div>
<div class="line"><a id="l05304" name="l05304"></a><span class="lineno"> 5304</span> </div>
<div class="line"><a id="l05305" name="l05305"></a><span class="lineno"> 5305</span> Number <span class="keyword">const</span> coverAvailableAfter = brokerAfter-&gt;at(sfCoverAvailable);</div>
<div class="line"><a id="l05306" name="l05306"></a><span class="lineno"> 5306</span> </div>
<div class="line"><a id="l05307" name="l05307"></a><span class="lineno"> 5307</span> <span class="comment">// since the cover rate min != 0, the cover available should not</span></div>
<div class="line"><a id="l05308" name="l05308"></a><span class="lineno"> 5308</span> <span class="comment">// be zero</span></div>
<div class="line"><a id="l05309" name="l05309"></a><span class="lineno"> 5309</span> BEAST_EXPECT(coverAvailableAfter != Number{});</div>
<div class="line"><a id="l05310" name="l05310"></a><span class="lineno"> 5310</span> };</div>
<div class="line"><a id="l05311" name="l05311"></a><span class="lineno"> 5311</span> </div>
<div class="line"><a id="l05312" name="l05312"></a><span class="lineno"> 5312</span> <span class="comment">// Call the lambda with different principal values</span></div>
<div class="line"><a id="l05313" name="l05313"></a><span class="lineno"> 5313</span> testLoanCoverMinimumRoundingExploit(Number{1, -30}); <span class="comment">// 1e-30 units</span></div>
<div class="line"><a id="l05314" name="l05314"></a><span class="lineno"> 5314</span> testLoanCoverMinimumRoundingExploit(Number{1, -20}); <span class="comment">// 1e-20 units</span></div>
<div class="line"><a id="l05315" name="l05315"></a><span class="lineno"> 5315</span> testLoanCoverMinimumRoundingExploit(Number{1, -10}); <span class="comment">// 1e-10 units</span></div>
<div class="line"><a id="l05316" name="l05316"></a><span class="lineno"> 5316</span> testLoanCoverMinimumRoundingExploit(Number{1, 1}); <span class="comment">// 1e-10 units</span></div>
<div class="line"><a id="l05317" name="l05317"></a><span class="lineno"> 5317</span> }</div>
<div class="line"><a id="l05318" name="l05318"></a><span class="lineno"> 5318</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l05319" name="l05319"></a><span class="lineno"> 5319</span> </div>
<div class="line"><a id="l05320" name="l05320"></a><span class="lineno"> 5320</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen05321" data-start="{" data-end="}">
<div class="line"><a id="l05321" name="l05321"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a7b2e964c03ec067aae70db787045f120"> 5321</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a7b2e964c03ec067aae70db787045f120">testPoC_UnsignedUnderflowOnFullPayAfterEarlyPeriodic</a>()</div>
<div class="line"><a id="l05322" name="l05322"></a><span class="lineno"> 5322</span> {</div>
<div class="line"><a id="l05323" name="l05323"></a><span class="lineno"> 5323</span> <span class="comment">// --- PoC Summary ----------------------------------------------------</span></div>
<div class="line"><a id="l05324" name="l05324"></a><span class="lineno"> 5324</span> <span class="comment">// Scenario: Borrower makes one periodic payment early (before next due)</span></div>
<div class="line"><a id="l05325" name="l05325"></a><span class="lineno"> 5325</span> <span class="comment">// so doPayment sets sfPreviousPaymentDueDate to the (future)</span></div>
<div class="line"><a id="l05326" name="l05326"></a><span class="lineno"> 5326</span> <span class="comment">// sfNextPaymentDueDate and advances sfNextPaymentDueDate by one</span></div>
<div class="line"><a id="l05327" name="l05327"></a><span class="lineno"> 5327</span> <span class="comment">// interval. Borrower then immediately performs a full-payment</span></div>
<div class="line"><a id="l05328" name="l05328"></a><span class="lineno"> 5328</span> <span class="comment">// (tfLoanFullPayment). Why it matters: Full-payment interest accrual</span></div>
<div class="line"><a id="l05329" name="l05329"></a><span class="lineno"> 5329</span> <span class="comment">// uses</span></div>
<div class="line"><a id="l05330" name="l05330"></a><span class="lineno"> 5330</span> <span class="comment">// delta = now - max(prevPaymentDate, startDate)</span></div>
<div class="line"><a id="l05331" name="l05331"></a><span class="lineno"> 5331</span> <span class="comment">// with an unsigned clock representation (uint32). If prevPaymentDate is</span></div>
<div class="line"><a id="l05332" name="l05332"></a><span class="lineno"> 5332</span> <span class="comment">// in the future, the subtraction underflows to a very large positive</span></div>
<div class="line"><a id="l05333" name="l05333"></a><span class="lineno"> 5333</span> <span class="comment">// number. This inflates roundedFullInterest and total full-close due,</span></div>
<div class="line"><a id="l05334" name="l05334"></a><span class="lineno"> 5334</span> <span class="comment">// and LoanPay applies the inflated valueChange to the vault</span></div>
<div class="line"><a id="l05335" name="l05335"></a><span class="lineno"> 5335</span> <span class="comment">// (sfAssetsTotal), increasing NAV.</span></div>
<div class="line"><a id="l05336" name="l05336"></a><span class="lineno"> 5336</span> <span class="comment">// --------------------------------------------------------------------</span></div>
<div class="line"><a id="l05337" name="l05337"></a><span class="lineno"> 5337</span> testcase(<span class="stringliteral">&quot;PoC: Unsigned-underflow full-pay accrual after early periodic&quot;</span>);</div>
<div class="line"><a id="l05338" name="l05338"></a><span class="lineno"> 5338</span> </div>
<div class="line"><a id="l05339" name="l05339"></a><span class="lineno"> 5339</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05340" name="l05340"></a><span class="lineno"> 5340</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l05341" name="l05341"></a><span class="lineno"> 5341</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l05342" name="l05342"></a><span class="lineno"> 5342</span> </div>
<div class="line"><a id="l05343" name="l05343"></a><span class="lineno"> 5343</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l05344" name="l05344"></a><span class="lineno"> 5344</span> </div>
<div class="line"><a id="l05345" name="l05345"></a><span class="lineno"> 5345</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;poc_lender4&quot;</span>};</div>
<div class="line"><a id="l05346" name="l05346"></a><span class="lineno"> 5346</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;poc_borrower4&quot;</span>};</div>
<div class="line"><a id="l05347" name="l05347"></a><span class="lineno"> 5347</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(3&#39;000&#39;000), lender, borrower);</div>
<div class="line"><a id="l05348" name="l05348"></a><span class="lineno"> 5348</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05349" name="l05349"></a><span class="lineno"> 5349</span> </div>
<div class="line"><a id="l05350" name="l05350"></a><span class="lineno"> 5350</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> asset{<a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>(), 1&#39;000&#39;000};</div>
<div class="line"><a id="l05351" name="l05351"></a><span class="lineno"> 5351</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> brokerParams{};</div>
<div class="line"><a id="l05352" name="l05352"></a><span class="lineno"> 5352</span> <span class="keyword">auto</span> <span class="keyword">const</span> broker = createVaultAndBroker(env, asset, lender, brokerParams);</div>
<div class="line"><a id="l05353" name="l05353"></a><span class="lineno"> 5353</span> </div>
<div class="line"><a id="l05354" name="l05354"></a><span class="lineno"> 5354</span> <span class="comment">// Create a 3-payment loan so full-payment path is enabled after 1</span></div>
<div class="line"><a id="l05355" name="l05355"></a><span class="lineno"> 5355</span> <span class="comment">// periodic payment.</span></div>
<div class="line"><a id="l05356" name="l05356"></a><span class="lineno"> 5356</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l05357" name="l05357"></a><span class="lineno"> 5357</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> principalRequest = asset(1000).value();</div>
<div class="line"><a id="l05358" name="l05358"></a><span class="lineno"> 5358</span> <span class="keyword">auto</span> <span class="keyword">const</span> originationFee = asset(0).value();</div>
<div class="line"><a id="l05359" name="l05359"></a><span class="lineno"> 5359</span> <span class="keyword">auto</span> <span class="keyword">const</span> serviceFee = asset(1).value();</div>
<div class="line"><a id="l05360" name="l05360"></a><span class="lineno"> 5360</span> <span class="keyword">auto</span> <span class="keyword">const</span> serviceFeePA = asset(1);</div>
<div class="line"><a id="l05361" name="l05361"></a><span class="lineno"> 5361</span> <span class="keyword">auto</span> <span class="keyword">const</span> lateFee = asset(0).value();</div>
<div class="line"><a id="l05362" name="l05362"></a><span class="lineno"> 5362</span> <span class="keyword">auto</span> <span class="keyword">const</span> closeFee = asset(0).value();</div>
<div class="line"><a id="l05363" name="l05363"></a><span class="lineno"> 5363</span> <span class="keyword">auto</span> <span class="keyword">const</span> interest = <a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(12);</div>
<div class="line"><a id="l05364" name="l05364"></a><span class="lineno"> 5364</span> <span class="keyword">auto</span> <span class="keyword">const</span> lateInterest = <a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(12) / 10;</div>
<div class="line"><a id="l05365" name="l05365"></a><span class="lineno"> 5365</span> <span class="keyword">auto</span> <span class="keyword">const</span> closeInterest = <a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(12) / 10;</div>
<div class="line"><a id="l05366" name="l05366"></a><span class="lineno"> 5366</span> <span class="keyword">auto</span> <span class="keyword">const</span> overpaymentInterest = <a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(12) / 10;</div>
<div class="line"><a id="l05367" name="l05367"></a><span class="lineno"> 5367</span> <span class="keyword">auto</span> <span class="keyword">const</span> total = 3u;</div>
<div class="line"><a id="l05368" name="l05368"></a><span class="lineno"> 5368</span> <span class="keyword">auto</span> <span class="keyword">const</span> interval = 600u;</div>
<div class="line"><a id="l05369" name="l05369"></a><span class="lineno"> 5369</span> <span class="keyword">auto</span> <span class="keyword">const</span> grace = 60u;</div>
<div class="line"><a id="l05370" name="l05370"></a><span class="lineno"> 5370</span> </div>
<div class="line"><a id="l05371" name="l05371"></a><span class="lineno"> 5371</span> <span class="keyword">auto</span> createJtx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(</div>
<div class="line"><a id="l05372" name="l05372"></a><span class="lineno"> 5372</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, principalRequest, 0),</div>
<div class="line"><a id="l05373" name="l05373"></a><span class="lineno"> 5373</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l05374" name="l05374"></a><span class="lineno"> 5374</span> loanOriginationFee(originationFee),</div>
<div class="line"><a id="l05375" name="l05375"></a><span class="lineno"> 5375</span> loanServiceFee(serviceFee),</div>
<div class="line"><a id="l05376" name="l05376"></a><span class="lineno"> 5376</span> latePaymentFee(lateFee),</div>
<div class="line"><a id="l05377" name="l05377"></a><span class="lineno"> 5377</span> closePaymentFee(closeFee),</div>
<div class="line"><a id="l05378" name="l05378"></a><span class="lineno"> 5378</span> overpaymentFee(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(5) / 10),</div>
<div class="line"><a id="l05379" name="l05379"></a><span class="lineno"> 5379</span> interestRate(interest),</div>
<div class="line"><a id="l05380" name="l05380"></a><span class="lineno"> 5380</span> lateInterestRate(lateInterest),</div>
<div class="line"><a id="l05381" name="l05381"></a><span class="lineno"> 5381</span> closeInterestRate(closeInterest),</div>
<div class="line"><a id="l05382" name="l05382"></a><span class="lineno"> 5382</span> overpaymentInterestRate(overpaymentInterest),</div>
<div class="line"><a id="l05383" name="l05383"></a><span class="lineno"> 5383</span> paymentTotal(total),</div>
<div class="line"><a id="l05384" name="l05384"></a><span class="lineno"> 5384</span> paymentInterval(interval),</div>
<div class="line"><a id="l05385" name="l05385"></a><span class="lineno"> 5385</span> gracePeriod(grace),</div>
<div class="line"><a id="l05386" name="l05386"></a><span class="lineno"> 5386</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(loanSetFee));</div>
<div class="line"><a id="l05387" name="l05387"></a><span class="lineno"> 5387</span> </div>
<div class="line"><a id="l05388" name="l05388"></a><span class="lineno"> 5388</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l05389" name="l05389"></a><span class="lineno"> 5389</span> BEAST_EXPECT(brokerSle);</div>
<div class="line"><a id="l05390" name="l05390"></a><span class="lineno"> 5390</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerSle ? brokerSle-&gt;at(sfLoanSequence) : 0;</div>
<div class="line"><a id="l05391" name="l05391"></a><span class="lineno"> 5391</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet = keylet::loan(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l05392" name="l05392"></a><span class="lineno"> 5392</span> </div>
<div class="line"><a id="l05393" name="l05393"></a><span class="lineno"> 5393</span> env(createJtx);</div>
<div class="line"><a id="l05394" name="l05394"></a><span class="lineno"> 5394</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05395" name="l05395"></a><span class="lineno"> 5395</span> </div>
<div class="line"><a id="l05396" name="l05396"></a><span class="lineno"> 5396</span> <span class="comment">// Compute a regular periodic due and pay it early (before next due).</span></div>
<div class="line"><a id="l05397" name="l05397"></a><span class="lineno"> 5397</span> <span class="keyword">auto</span> state = getCurrentState(env, broker, loanKeylet);</div>
<div class="line"><a id="l05398" name="l05398"></a><span class="lineno"> 5398</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> periodicRate = <a class="code hl_function" href="namespacexrpl.html#a0ff65dbec299f5ffe3cc3e46822b54b1">loanPeriodicRate</a>(state.interestRate, state.paymentInterval);</div>
<div class="line"><a id="l05399" name="l05399"></a><span class="lineno"> 5399</span> <span class="keyword">auto</span> <span class="keyword">const</span> components = detail::computePaymentComponents(</div>
<div class="line"><a id="l05400" name="l05400"></a><span class="lineno"> 5400</span> asset.raw(),</div>
<div class="line"><a id="l05401" name="l05401"></a><span class="lineno"> 5401</span> state.loanScale,</div>
<div class="line"><a id="l05402" name="l05402"></a><span class="lineno"> 5402</span> state.totalValue,</div>
<div class="line"><a id="l05403" name="l05403"></a><span class="lineno"> 5403</span> state.principalOutstanding,</div>
<div class="line"><a id="l05404" name="l05404"></a><span class="lineno"> 5404</span> state.managementFeeOutstanding,</div>
<div class="line"><a id="l05405" name="l05405"></a><span class="lineno"> 5405</span> state.periodicPayment,</div>
<div class="line"><a id="l05406" name="l05406"></a><span class="lineno"> 5406</span> periodicRate,</div>
<div class="line"><a id="l05407" name="l05407"></a><span class="lineno"> 5407</span> state.paymentRemaining,</div>
<div class="line"><a id="l05408" name="l05408"></a><span class="lineno"> 5408</span> brokerParams.managementFeeRate);</div>
<div class="line"><a id="l05409" name="l05409"></a><span class="lineno"> 5409</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> regularDue{asset, components.trackedValueDelta + serviceFeePA.number()};</div>
<div class="line"><a id="l05410" name="l05410"></a><span class="lineno"> 5410</span> <span class="comment">// now &lt; nextDue immediately after creation, so this is an early pay.</span></div>
<div class="line"><a id="l05411" name="l05411"></a><span class="lineno"> 5411</span> env(pay(borrower, loanKeylet.key, regularDue));</div>
<div class="line"><a id="l05412" name="l05412"></a><span class="lineno"> 5412</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05413" name="l05413"></a><span class="lineno"> 5413</span> </div>
<div class="line"><a id="l05414" name="l05414"></a><span class="lineno"> 5414</span> <span class="comment">// Immediately attempt a full payoff. Compute the exact full-payment</span></div>
<div class="line"><a id="l05415" name="l05415"></a><span class="lineno"> 5415</span> <span class="comment">// due to ensure the tx applies.</span></div>
<div class="line"><a id="l05416" name="l05416"></a><span class="lineno"> 5416</span> <span class="keyword">auto</span> <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a> = getCurrentState(env, broker, loanKeylet);</div>
<div class="line"><a id="l05417" name="l05417"></a><span class="lineno"> 5417</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet);</div>
<div class="line"><a id="l05418" name="l05418"></a><span class="lineno"> 5418</span> BEAST_EXPECT(loanSle);</div>
<div class="line"><a id="l05419" name="l05419"></a><span class="lineno"> 5419</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle2 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l05420" name="l05420"></a><span class="lineno"> 5420</span> BEAST_EXPECT(brokerSle2);</div>
<div class="line"><a id="l05421" name="l05421"></a><span class="lineno"> 5421</span> </div>
<div class="line"><a id="l05422" name="l05422"></a><span class="lineno"> 5422</span> <span class="keyword">auto</span> <span class="keyword">const</span> closePaymentFee = loanSle ? loanSle-&gt;at(sfClosePaymentFee) : <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{};</div>
<div class="line"><a id="l05423" name="l05423"></a><span class="lineno"> 5423</span> <span class="keyword">auto</span> <span class="keyword">const</span> closeInterestRate = loanSle ? <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{loanSle-&gt;at(sfCloseInterestRate)} : <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{};</div>
<div class="line"><a id="l05424" name="l05424"></a><span class="lineno"> 5424</span> <span class="keyword">auto</span> <span class="keyword">const</span> managementFeeRate = brokerSle2 ? <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a>{brokerSle2-&gt;at(sfManagementFeeRate)} : <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a>{};</div>
<div class="line"><a id="l05425" name="l05425"></a><span class="lineno"> 5425</span> </div>
<div class="line"><a id="l05426" name="l05426"></a><span class="lineno"> 5426</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> periodicRate2 = <a class="code hl_function" href="namespacexrpl.html#a0ff65dbec299f5ffe3cc3e46822b54b1">loanPeriodicRate</a>(<a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.interestRate, <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.paymentInterval);</div>
<div class="line"><a id="l05427" name="l05427"></a><span class="lineno"> 5427</span> <span class="comment">// Accrued + prepayment-penalty interest based on current periodic</span></div>
<div class="line"><a id="l05428" name="l05428"></a><span class="lineno"> 5428</span> <span class="comment">// schedule</span></div>
<div class="line"><a id="l05429" name="l05429"></a><span class="lineno"> 5429</span> <span class="keyword">auto</span> <span class="keyword">const</span> fullPaymentInterest = <a class="code hl_function" href="namespacexrpl.html#af74cf647690ab5cdb695b5edf8c75a91">computeFullPaymentInterest</a>(</div>
<div class="line"><a id="l05430" name="l05430"></a><span class="lineno"> 5430</span> detail::loanPrincipalFromPeriodicPayment(<a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.periodicPayment, periodicRate2, <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.paymentRemaining),</div>
<div class="line"><a id="l05431" name="l05431"></a><span class="lineno"> 5431</span> periodicRate2,</div>
<div class="line"><a id="l05432" name="l05432"></a><span class="lineno"> 5432</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;parentCloseTime(),</div>
<div class="line"><a id="l05433" name="l05433"></a><span class="lineno"> 5433</span> <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.paymentInterval,</div>
<div class="line"><a id="l05434" name="l05434"></a><span class="lineno"> 5434</span> <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.previousPaymentDate,</div>
<div class="line"><a id="l05435" name="l05435"></a><span class="lineno"> 5435</span> <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a><span class="keyword">&gt;</span>(<a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.startDate.time_since_epoch().count()),</div>
<div class="line"><a id="l05436" name="l05436"></a><span class="lineno"> 5436</span> closeInterestRate);</div>
<div class="line"><a id="l05437" name="l05437"></a><span class="lineno"> 5437</span> </div>
<div class="line"><a id="l05438" name="l05438"></a><span class="lineno"> 5438</span> <span class="comment">// Round to asset scale and split interest/fee parts</span></div>
<div class="line"><a id="l05439" name="l05439"></a><span class="lineno"> 5439</span> <span class="keyword">auto</span> <span class="keyword">const</span> roundedInterest = <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(asset.raw(), fullPaymentInterest, <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.loanScale);</div>
<div class="line"><a id="l05440" name="l05440"></a><span class="lineno"> 5440</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> roundedFullMgmtFee =</div>
<div class="line"><a id="l05441" name="l05441"></a><span class="lineno"> 5441</span> <a class="code hl_function" href="namespacexrpl.html#a214a68fa4b462cf05138d87a9806bd06">computeManagementFee</a>(asset.raw(), roundedInterest, managementFeeRate, <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.loanScale);</div>
<div class="line"><a id="l05442" name="l05442"></a><span class="lineno"> 5442</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> roundedFullInterest = roundedInterest - roundedFullMgmtFee;</div>
<div class="line"><a id="l05443" name="l05443"></a><span class="lineno"> 5443</span> </div>
<div class="line"><a id="l05444" name="l05444"></a><span class="lineno"> 5444</span> <span class="comment">// Show both signed and unsigned deltas to highlight the underflow.</span></div>
<div class="line"><a id="l05445" name="l05445"></a><span class="lineno"> 5445</span> <span class="keyword">auto</span> <span class="keyword">const</span> nowSecs = <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a><span class="keyword">&gt;</span>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;parentCloseTime().time_since_epoch().count());</div>
<div class="line"><a id="l05446" name="l05446"></a><span class="lineno"> 5446</span> <span class="keyword">auto</span> <span class="keyword">const</span> startSecs = <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a><span class="keyword">&gt;</span>(<a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.startDate.time_since_epoch().count());</div>
<div class="line"><a id="l05447" name="l05447"></a><span class="lineno"> 5447</span> <span class="keyword">auto</span> <span class="keyword">const</span> lastPaymentDate = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a>(<a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.previousPaymentDate, startSecs);</div>
<div class="line"><a id="l05448" name="l05448"></a><span class="lineno"> 5448</span> <span class="keyword">auto</span> <span class="keyword">const</span> signedDelta = <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a><span class="keyword">&gt;</span>(nowSecs) - <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::int64_t</a><span class="keyword">&gt;</span>(lastPaymentDate);</div>
<div class="line"><a id="l05449" name="l05449"></a><span class="lineno"> 5449</span> <span class="keyword">auto</span> <span class="keyword">const</span> unsignedDelta = <span class="keyword">static_cast&lt;</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a><span class="keyword">&gt;</span>(nowSecs - lastPaymentDate);</div>
<div class="line"><a id="l05450" name="l05450"></a><span class="lineno"> 5450</span> log &lt;&lt; <span class="stringliteral">&quot;PoC window: prev=&quot;</span> &lt;&lt; <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.previousPaymentDate &lt;&lt; <span class="stringliteral">&quot; start=&quot;</span> &lt;&lt; startSecs &lt;&lt; <span class="stringliteral">&quot; now=&quot;</span> &lt;&lt; nowSecs</div>
<div class="line"><a id="l05451" name="l05451"></a><span class="lineno"> 5451</span> &lt;&lt; <span class="stringliteral">&quot; signedDelta=&quot;</span> &lt;&lt; signedDelta &lt;&lt; <span class="stringliteral">&quot; unsignedDelta=&quot;</span> &lt;&lt; unsignedDelta &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05452" name="l05452"></a><span class="lineno"> 5452</span> </div>
<div class="line"><a id="l05453" name="l05453"></a><span class="lineno"> 5453</span> <span class="comment">// Reference (clamped) computation: emulate a non-negative accrual</span></div>
<div class="line"><a id="l05454" name="l05454"></a><span class="lineno"> 5454</span> <span class="comment">// window by clamping prevPaymentDate to &#39;now&#39; for the full-pay path.</span></div>
<div class="line"><a id="l05455" name="l05455"></a><span class="lineno"> 5455</span> <span class="keyword">auto</span> <span class="keyword">const</span> prevClamped = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(<a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.previousPaymentDate, nowSecs);</div>
<div class="line"><a id="l05456" name="l05456"></a><span class="lineno"> 5456</span> <span class="keyword">auto</span> <span class="keyword">const</span> fullPaymentInterestClamped = <a class="code hl_function" href="namespacexrpl.html#af74cf647690ab5cdb695b5edf8c75a91">computeFullPaymentInterest</a>(</div>
<div class="line"><a id="l05457" name="l05457"></a><span class="lineno"> 5457</span> detail::loanPrincipalFromPeriodicPayment(<a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.periodicPayment, periodicRate2, <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.paymentRemaining),</div>
<div class="line"><a id="l05458" name="l05458"></a><span class="lineno"> 5458</span> periodicRate2,</div>
<div class="line"><a id="l05459" name="l05459"></a><span class="lineno"> 5459</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;parentCloseTime(),</div>
<div class="line"><a id="l05460" name="l05460"></a><span class="lineno"> 5460</span> <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.paymentInterval,</div>
<div class="line"><a id="l05461" name="l05461"></a><span class="lineno"> 5461</span> prevClamped,</div>
<div class="line"><a id="l05462" name="l05462"></a><span class="lineno"> 5462</span> startSecs,</div>
<div class="line"><a id="l05463" name="l05463"></a><span class="lineno"> 5463</span> closeInterestRate);</div>
<div class="line"><a id="l05464" name="l05464"></a><span class="lineno"> 5464</span> <span class="keyword">auto</span> <span class="keyword">const</span> roundedInterestClamped = <a class="code hl_function" href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">roundToAsset</a>(asset.raw(), fullPaymentInterestClamped, <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.loanScale);</div>
<div class="line"><a id="l05465" name="l05465"></a><span class="lineno"> 5465</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> roundedFullMgmtFeeClamped =</div>
<div class="line"><a id="l05466" name="l05466"></a><span class="lineno"> 5466</span> <a class="code hl_function" href="namespacexrpl.html#a214a68fa4b462cf05138d87a9806bd06">computeManagementFee</a>(asset.raw(), roundedInterestClamped, managementFeeRate, <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.loanScale);</div>
<div class="line"><a id="l05467" name="l05467"></a><span class="lineno"> 5467</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> roundedFullInterestClamped = roundedInterestClamped - roundedFullMgmtFeeClamped;</div>
<div class="line"><a id="l05468" name="l05468"></a><span class="lineno"> 5468</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> fullDueClamped{</div>
<div class="line"><a id="l05469" name="l05469"></a><span class="lineno"> 5469</span> asset,</div>
<div class="line"><a id="l05470" name="l05470"></a><span class="lineno"> 5470</span> <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.principalOutstanding + roundedFullInterestClamped + roundedFullMgmtFeeClamped + closePaymentFee};</div>
<div class="line"><a id="l05471" name="l05471"></a><span class="lineno"> 5471</span> </div>
<div class="line"><a id="l05472" name="l05472"></a><span class="lineno"> 5472</span> <span class="comment">// Collect vault NAV before closing payment</span></div>
<div class="line"><a id="l05473" name="l05473"></a><span class="lineno"> 5473</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultId2 = brokerSle2 ? brokerSle2-&gt;at(sfVaultID) : <a class="code hl_class" href="classxrpl_1_1base__uint.html">uint256</a>{};</div>
<div class="line"><a id="l05474" name="l05474"></a><span class="lineno"> 5474</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultKey2 = keylet::vault(vaultId2);</div>
<div class="line"><a id="l05475" name="l05475"></a><span class="lineno"> 5475</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(vaultKey2);</div>
<div class="line"><a id="l05476" name="l05476"></a><span class="lineno"> 5476</span> BEAST_EXPECT(vaultBefore);</div>
<div class="line"><a id="l05477" name="l05477"></a><span class="lineno"> 5477</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> <span class="keyword">const</span> assetsTotalBefore = vaultBefore ? vaultBefore-&gt;at(sfAssetsTotal) : <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{};</div>
<div class="line"><a id="l05478" name="l05478"></a><span class="lineno"> 5478</span> </div>
<div class="line"><a id="l05479" name="l05479"></a><span class="lineno"> 5479</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> fullDue{</div>
<div class="line"><a id="l05480" name="l05480"></a><span class="lineno"> 5480</span> asset, <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.principalOutstanding + roundedFullInterest + roundedFullMgmtFee + closePaymentFee};</div>
<div class="line"><a id="l05481" name="l05481"></a><span class="lineno"> 5481</span> </div>
<div class="line"><a id="l05482" name="l05482"></a><span class="lineno"> 5482</span> log &lt;&lt; <span class="stringliteral">&quot;PoC payoff: principalOutstanding=&quot;</span> &lt;&lt; <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.principalOutstanding</div>
<div class="line"><a id="l05483" name="l05483"></a><span class="lineno"> 5483</span> &lt;&lt; <span class="stringliteral">&quot; roundedFullInterest=&quot;</span> &lt;&lt; roundedFullInterest &lt;&lt; <span class="stringliteral">&quot; roundedFullMgmtFee=&quot;</span> &lt;&lt; roundedFullMgmtFee</div>
<div class="line"><a id="l05484" name="l05484"></a><span class="lineno"> 5484</span> &lt;&lt; <span class="stringliteral">&quot; closeFee=&quot;</span> &lt;&lt; closePaymentFee &lt;&lt; <span class="stringliteral">&quot; fullDue=&quot;</span> &lt;&lt; to_string(fullDue.getJson()) &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05485" name="l05485"></a><span class="lineno"> 5485</span> log &lt;&lt; <span class="stringliteral">&quot;PoC reference (clamped): roundedFullInterestClamped=&quot;</span> &lt;&lt; roundedFullInterestClamped</div>
<div class="line"><a id="l05486" name="l05486"></a><span class="lineno"> 5486</span> &lt;&lt; <span class="stringliteral">&quot; roundedFullMgmtFeeClamped=&quot;</span> &lt;&lt; roundedFullMgmtFeeClamped</div>
<div class="line"><a id="l05487" name="l05487"></a><span class="lineno"> 5487</span> &lt;&lt; <span class="stringliteral">&quot; fullDueClamped=&quot;</span> &lt;&lt; to_string(fullDueClamped.getJson()) &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05488" name="l05488"></a><span class="lineno"> 5488</span> </div>
<div class="line"><a id="l05489" name="l05489"></a><span class="lineno"> 5489</span> env(pay(borrower, loanKeylet.key, fullDue), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespacexrpl.html#a502d13801f614009c077389a8809a70a">tfLoanFullPayment</a>));</div>
<div class="line"><a id="l05490" name="l05490"></a><span class="lineno"> 5490</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05491" name="l05491"></a><span class="lineno"> 5491</span> </div>
<div class="line"><a id="l05492" name="l05492"></a><span class="lineno"> 5492</span> <span class="comment">// Sanity: underflow present (unsigned delta very large relative to</span></div>
<div class="line"><a id="l05493" name="l05493"></a><span class="lineno"> 5493</span> <span class="comment">// interval)</span></div>
<div class="line"><a id="l05494" name="l05494"></a><span class="lineno"> 5494</span> BEAST_EXPECT(unsignedDelta &gt; <a class="code hl_function" href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">after</a>.paymentInterval);</div>
<div class="line"><a id="l05495" name="l05495"></a><span class="lineno"> 5495</span> </div>
<div class="line"><a id="l05496" name="l05496"></a><span class="lineno"> 5496</span> <span class="comment">// Compare vault NAV before/after the full close</span></div>
<div class="line"><a id="l05497" name="l05497"></a><span class="lineno"> 5497</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultAfter = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(vaultKey2);</div>
<div class="line"><a id="l05498" name="l05498"></a><span class="lineno"> 5498</span> BEAST_EXPECT(vaultAfter);</div>
<div class="line"><a id="l05499" name="l05499"></a><span class="lineno"> 5499</span> <span class="keywordflow">if</span> (vaultAfter)</div>
<div class="line"><a id="l05500" name="l05500"></a><span class="lineno"> 5500</span> {</div>
<div class="line"><a id="l05501" name="l05501"></a><span class="lineno"> 5501</span> <span class="keyword">auto</span> <span class="keyword">const</span> assetsTotalAfter = vaultAfter-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l05502" name="l05502"></a><span class="lineno"> 5502</span> log &lt;&lt; <span class="stringliteral">&quot;PoC NAV: assetsTotalBefore=&quot;</span> &lt;&lt; assetsTotalBefore &lt;&lt; <span class="stringliteral">&quot; assetsTotalAfter=&quot;</span> &lt;&lt; assetsTotalAfter</div>
<div class="line"><a id="l05503" name="l05503"></a><span class="lineno"> 5503</span> &lt;&lt; <span class="stringliteral">&quot; delta=&quot;</span> &lt;&lt; (assetsTotalAfter - assetsTotalBefore) &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05504" name="l05504"></a><span class="lineno"> 5504</span> </div>
<div class="line"><a id="l05505" name="l05505"></a><span class="lineno"> 5505</span> <span class="comment">// Value-based proof: underflowed window yields a payoff larger than</span></div>
<div class="line"><a id="l05506" name="l05506"></a><span class="lineno"> 5506</span> <span class="comment">// the clamped (non-underflow) reference.</span></div>
<div class="line"><a id="l05507" name="l05507"></a><span class="lineno"> 5507</span> BEAST_EXPECT(fullDue == fullDueClamped);</div>
<div class="line"><a id="l05508" name="l05508"></a><span class="lineno"> 5508</span> <span class="keywordflow">if</span> (fullDue &gt; fullDueClamped)</div>
<div class="line"><a id="l05509" name="l05509"></a><span class="lineno"> 5509</span> log &lt;&lt; <span class="stringliteral">&quot;PoC delta: overcharge (fullDue &gt; clamped)&quot;</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05510" name="l05510"></a><span class="lineno"> 5510</span> }</div>
<div class="line"><a id="l05511" name="l05511"></a><span class="lineno"> 5511</span> </div>
<div class="line"><a id="l05512" name="l05512"></a><span class="lineno"> 5512</span> <span class="comment">// Loan should be paid off</span></div>
<div class="line"><a id="l05513" name="l05513"></a><span class="lineno"> 5513</span> <span class="keyword">auto</span> <span class="keyword">const</span> finalLoan = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet);</div>
<div class="line"><a id="l05514" name="l05514"></a><span class="lineno"> 5514</span> BEAST_EXPECT(finalLoan);</div>
<div class="line"><a id="l05515" name="l05515"></a><span class="lineno"> 5515</span> <span class="keywordflow">if</span> (finalLoan)</div>
<div class="line"><a id="l05516" name="l05516"></a><span class="lineno"> 5516</span> {</div>
<div class="line"><a id="l05517" name="l05517"></a><span class="lineno"> 5517</span> BEAST_EXPECT(finalLoan-&gt;at(sfPaymentRemaining) == 0);</div>
<div class="line"><a id="l05518" name="l05518"></a><span class="lineno"> 5518</span> BEAST_EXPECT(finalLoan-&gt;at(sfPrincipalOutstanding) == 0);</div>
<div class="line"><a id="l05519" name="l05519"></a><span class="lineno"> 5519</span> }</div>
<div class="line"><a id="l05520" name="l05520"></a><span class="lineno"> 5520</span> }</div>
</div>
<div class="line"><a id="l05521" name="l05521"></a><span class="lineno"> 5521</span> </div>
<div class="line"><a id="l05522" name="l05522"></a><span class="lineno"> 5522</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen05523" data-start="{" data-end="}">
<div class="line"><a id="l05523" name="l05523"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ab897521670089434de84309142f8c916"> 5523</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ab897521670089434de84309142f8c916">testDustManipulation</a>()</div>
<div class="line"><a id="l05524" name="l05524"></a><span class="lineno"> 5524</span> {</div>
<div class="line"><a id="l05525" name="l05525"></a><span class="lineno"> 5525</span> testcase(<span class="stringliteral">&quot;Dust manipulation&quot;</span>);</div>
<div class="line"><a id="l05526" name="l05526"></a><span class="lineno"> 5526</span> </div>
<div class="line"><a id="l05527" name="l05527"></a><span class="lineno"> 5527</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05528" name="l05528"></a><span class="lineno"> 5528</span> <span class="keyword">using namespace </span>std::chrono_literals;</div>
<div class="line"><a id="l05529" name="l05529"></a><span class="lineno"> 5529</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l05530" name="l05530"></a><span class="lineno"> 5530</span> </div>
<div class="line"><a id="l05531" name="l05531"></a><span class="lineno"> 5531</span> <span class="comment">// Setup: Create accounts</span></div>
<div class="line"><a id="l05532" name="l05532"></a><span class="lineno"> 5532</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l05533" name="l05533"></a><span class="lineno"> 5533</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l05534" name="l05534"></a><span class="lineno"> 5534</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l05535" name="l05535"></a><span class="lineno"> 5535</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> victim{<span class="stringliteral">&quot;victim&quot;</span>};</div>
<div class="line"><a id="l05536" name="l05536"></a><span class="lineno"> 5536</span> </div>
<div class="line"><a id="l05537" name="l05537"></a><span class="lineno"> 5537</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000&#39;00), issuer, lender, borrower, victim);</div>
<div class="line"><a id="l05538" name="l05538"></a><span class="lineno"> 5538</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05539" name="l05539"></a><span class="lineno"> 5539</span> </div>
<div class="line"><a id="l05540" name="l05540"></a><span class="lineno"> 5540</span> <span class="comment">// Step 1: Create vault with IOU asset</span></div>
<div class="line"><a id="l05541" name="l05541"></a><span class="lineno"> 5541</span> <span class="keyword">auto</span> asset = issuer[<span class="stringliteral">&quot;USD&quot;</span>];</div>
<div class="line"><a id="l05542" name="l05542"></a><span class="lineno"> 5542</span> env(trust(lender, asset(100000)));</div>
<div class="line"><a id="l05543" name="l05543"></a><span class="lineno"> 5543</span> env(trust(borrower, asset(100000)));</div>
<div class="line"><a id="l05544" name="l05544"></a><span class="lineno"> 5544</span> env(trust(victim, asset(100000)));</div>
<div class="line"><a id="l05545" name="l05545"></a><span class="lineno"> 5545</span> env(pay(issuer, lender, asset(50000)));</div>
<div class="line"><a id="l05546" name="l05546"></a><span class="lineno"> 5546</span> env(pay(issuer, borrower, asset(50000)));</div>
<div class="line"><a id="l05547" name="l05547"></a><span class="lineno"> 5547</span> env(pay(issuer, victim, asset(50000)));</div>
<div class="line"><a id="l05548" name="l05548"></a><span class="lineno"> 5548</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05549" name="l05549"></a><span class="lineno"> 5549</span> </div>
<div class="line"><a id="l05550" name="l05550"></a><span class="lineno"> 5550</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> brokerParams{</div>
<div class="line"><a id="l05551" name="l05551"></a><span class="lineno"> 5551</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = 10000,</div>
<div class="line"><a id="l05552" name="l05552"></a><span class="lineno"> 5552</span> .debtMax = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{0},</div>
<div class="line"><a id="l05553" name="l05553"></a><span class="lineno"> 5553</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{1000},</div>
<div class="line"><a id="l05554" name="l05554"></a><span class="lineno"> 5554</span> .coverRateLiquidation = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{2500}};</div>
<div class="line"><a id="l05555" name="l05555"></a><span class="lineno"> 5555</span> </div>
<div class="line"><a id="l05556" name="l05556"></a><span class="lineno"> 5556</span> <span class="keyword">auto</span> broker = createVaultAndBroker(env, asset, lender, brokerParams);</div>
<div class="line"><a id="l05557" name="l05557"></a><span class="lineno"> 5557</span> </div>
<div class="line"><a id="l05558" name="l05558"></a><span class="lineno"> 5558</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeyletOpt = [&amp;]() -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;Keylet&gt;</a> {</div>
<div class="line"><a id="l05559" name="l05559"></a><span class="lineno"> 5559</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>));</div>
<div class="line"><a id="l05560" name="l05560"></a><span class="lineno"> 5560</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l05561" name="l05561"></a><span class="lineno"> 5561</span> <span class="keywordflow">return</span> <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>;</div>
<div class="line"><a id="l05562" name="l05562"></a><span class="lineno"> 5562</span> </div>
<div class="line"><a id="l05563" name="l05563"></a><span class="lineno"> 5563</span> <span class="comment">// Broker has no loans</span></div>
<div class="line"><a id="l05564" name="l05564"></a><span class="lineno"> 5564</span> BEAST_EXPECT(brokerSle-&gt;at(sfOwnerCount) == 0);</div>
<div class="line"><a id="l05565" name="l05565"></a><span class="lineno"> 5565</span> </div>
<div class="line"><a id="l05566" name="l05566"></a><span class="lineno"> 5566</span> <span class="comment">// The loan keylet is based on the LoanSequence of the</span></div>
<div class="line"><a id="l05567" name="l05567"></a><span class="lineno"> 5567</span> <span class="comment">// _LOAN_BROKER_ object.</span></div>
<div class="line"><a id="l05568" name="l05568"></a><span class="lineno"> 5568</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSequence = brokerSle-&gt;at(sfLoanSequence);</div>
<div class="line"><a id="l05569" name="l05569"></a><span class="lineno"> 5569</span> <span class="keywordflow">return</span> keylet::loan(broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">brokerID</a>, loanSequence);</div>
<div class="line"><a id="l05570" name="l05570"></a><span class="lineno"> 5570</span> }();</div>
<div class="line"><a id="l05571" name="l05571"></a><span class="lineno"> 5571</span> <span class="keywordflow">if</span> (!loanKeyletOpt)</div>
<div class="line"><a id="l05572" name="l05572"></a><span class="lineno"> 5572</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05573" name="l05573"></a><span class="lineno"> 5573</span> </div>
<div class="line"><a id="l05574" name="l05574"></a><span class="lineno"> 5574</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; vaultKeylet = broker.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac1399de1790b8d248a2f03fac1d4bbfc">vaultKeylet</a>();</div>
<div class="line"><a id="l05575" name="l05575"></a><span class="lineno"> 5575</span> </div>
<div class="line"><a id="l05576" name="l05576"></a><span class="lineno"> 5576</span> {</div>
<div class="line"><a id="l05577" name="l05577"></a><span class="lineno"> 5577</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(vaultKeylet);</div>
<div class="line"><a id="l05578" name="l05578"></a><span class="lineno"> 5578</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> assetsTotal = vaultSle-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l05579" name="l05579"></a><span class="lineno"> 5579</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> assetsAvail = vaultSle-&gt;at(sfAssetsAvailable);</div>
<div class="line"><a id="l05580" name="l05580"></a><span class="lineno"> 5580</span> </div>
<div class="line"><a id="l05581" name="l05581"></a><span class="lineno"> 5581</span> log &lt;&lt; <span class="stringliteral">&quot;Before loan creation:&quot;</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05582" name="l05582"></a><span class="lineno"> 5582</span> log &lt;&lt; <span class="stringliteral">&quot; AssetsTotal: &quot;</span> &lt;&lt; assetsTotal &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05583" name="l05583"></a><span class="lineno"> 5583</span> log &lt;&lt; <span class="stringliteral">&quot; AssetsAvailable: &quot;</span> &lt;&lt; assetsAvail &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05584" name="l05584"></a><span class="lineno"> 5584</span> log &lt;&lt; <span class="stringliteral">&quot; Difference: &quot;</span> &lt;&lt; (assetsTotal - assetsAvail) &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05585" name="l05585"></a><span class="lineno"> 5585</span> </div>
<div class="line"><a id="l05586" name="l05586"></a><span class="lineno"> 5586</span> <span class="comment">// before the loan the assets total and available should be equal</span></div>
<div class="line"><a id="l05587" name="l05587"></a><span class="lineno"> 5587</span> BEAST_EXPECT(assetsAvail == assetsTotal);</div>
<div class="line"><a id="l05588" name="l05588"></a><span class="lineno"> 5588</span> BEAST_EXPECT(assetsAvail == broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(brokerParams.vaultDeposit).number());</div>
<div class="line"><a id="l05589" name="l05589"></a><span class="lineno"> 5589</span> }</div>
<div class="line"><a id="l05590" name="l05590"></a><span class="lineno"> 5590</span> </div>
<div class="line"><a id="l05591" name="l05591"></a><span class="lineno"> 5591</span> <a class="code hl_struct" href="structxrpl_1_1Keylet.html">Keylet</a> <span class="keyword">const</span>&amp; loanKeylet = *loanKeyletOpt;</div>
<div class="line"><a id="l05592" name="l05592"></a><span class="lineno"> 5592</span> </div>
<div class="line"><a id="l05593" name="l05593"></a><span class="lineno"> 5593</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span> loanParams{</div>
<div class="line"><a id="l05594" name="l05594"></a><span class="lineno"> 5594</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a> = lender,</div>
<div class="line"><a id="l05595" name="l05595"></a><span class="lineno"> 5595</span> .counter = borrower,</div>
<div class="line"><a id="l05596" name="l05596"></a><span class="lineno"> 5596</span> .principalRequest = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{100},</div>
<div class="line"><a id="l05597" name="l05597"></a><span class="lineno"> 5597</span> .interest = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{1922},</div>
<div class="line"><a id="l05598" name="l05598"></a><span class="lineno"> 5598</span> .payTotal = 5816,</div>
<div class="line"><a id="l05599" name="l05599"></a><span class="lineno"> 5599</span> .payInterval = 86400 * 6,</div>
<div class="line"><a id="l05600" name="l05600"></a><span class="lineno"> 5600</span> .gracePd = 86400 * 5,</div>
<div class="line"><a id="l05601" name="l05601"></a><span class="lineno"> 5601</span> };</div>
<div class="line"><a id="l05602" name="l05602"></a><span class="lineno"> 5602</span> </div>
<div class="line"><a id="l05603" name="l05603"></a><span class="lineno"> 5603</span> env(loanParams(env, broker));</div>
<div class="line"><a id="l05604" name="l05604"></a><span class="lineno"> 5604</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05605" name="l05605"></a><span class="lineno"> 5605</span> </div>
<div class="line"><a id="l05606" name="l05606"></a><span class="lineno"> 5606</span> <span class="comment">// Wait for loan to be late enough to default</span></div>
<div class="line"><a id="l05607" name="l05607"></a><span class="lineno"> 5607</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::seconds</a>(86400 * 40)); <span class="comment">// 40 days</span></div>
<div class="line"><a id="l05608" name="l05608"></a><span class="lineno"> 5608</span> </div>
<div class="line"><a id="l05609" name="l05609"></a><span class="lineno"> 5609</span> {</div>
<div class="line"><a id="l05610" name="l05610"></a><span class="lineno"> 5610</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(vaultKeylet);</div>
<div class="line"><a id="l05611" name="l05611"></a><span class="lineno"> 5611</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> assetsTotal = vaultSle-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l05612" name="l05612"></a><span class="lineno"> 5612</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> assetsAvail = vaultSle-&gt;at(sfAssetsAvailable);</div>
<div class="line"><a id="l05613" name="l05613"></a><span class="lineno"> 5613</span> </div>
<div class="line"><a id="l05614" name="l05614"></a><span class="lineno"> 5614</span> log &lt;&lt; <span class="stringliteral">&quot;After loan creation:&quot;</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05615" name="l05615"></a><span class="lineno"> 5615</span> log &lt;&lt; <span class="stringliteral">&quot; AssetsTotal: &quot;</span> &lt;&lt; assetsTotal &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05616" name="l05616"></a><span class="lineno"> 5616</span> log &lt;&lt; <span class="stringliteral">&quot; AssetsAvailable: &quot;</span> &lt;&lt; assetsAvail &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05617" name="l05617"></a><span class="lineno"> 5617</span> log &lt;&lt; <span class="stringliteral">&quot; Difference: &quot;</span> &lt;&lt; (assetsTotal - assetsAvail) &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05618" name="l05618"></a><span class="lineno"> 5618</span> </div>
<div class="line"><a id="l05619" name="l05619"></a><span class="lineno"> 5619</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet);</div>
<div class="line"><a id="l05620" name="l05620"></a><span class="lineno"> 5620</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanSle))</div>
<div class="line"><a id="l05621" name="l05621"></a><span class="lineno"> 5621</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05622" name="l05622"></a><span class="lineno"> 5622</span> <span class="keyword">auto</span> <span class="keyword">const</span> state = <a class="code hl_function" href="namespacexrpl.html#ac8b129bcfda287e4cf8286e544af7242">constructRoundedLoanState</a>(loanSle);</div>
<div class="line"><a id="l05623" name="l05623"></a><span class="lineno"> 5623</span> </div>
<div class="line"><a id="l05624" name="l05624"></a><span class="lineno"> 5624</span> log &lt;&lt; <span class="stringliteral">&quot;Loan state:&quot;</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05625" name="l05625"></a><span class="lineno"> 5625</span> log &lt;&lt; <span class="stringliteral">&quot; ValueOutstanding: &quot;</span> &lt;&lt; state.valueOutstanding &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05626" name="l05626"></a><span class="lineno"> 5626</span> log &lt;&lt; <span class="stringliteral">&quot; PrincipalOutstanding: &quot;</span> &lt;&lt; state.principalOutstanding &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05627" name="l05627"></a><span class="lineno"> 5627</span> log &lt;&lt; <span class="stringliteral">&quot; InterestOutstanding: &quot;</span> &lt;&lt; state.interestOutstanding() &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05628" name="l05628"></a><span class="lineno"> 5628</span> log &lt;&lt; <span class="stringliteral">&quot; InterestDue: &quot;</span> &lt;&lt; state.interestDue &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05629" name="l05629"></a><span class="lineno"> 5629</span> log &lt;&lt; <span class="stringliteral">&quot; FeeDue: &quot;</span> &lt;&lt; state.managementFeeDue &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05630" name="l05630"></a><span class="lineno"> 5630</span> </div>
<div class="line"><a id="l05631" name="l05631"></a><span class="lineno"> 5631</span> <span class="comment">// after loan creation the assets total and available should</span></div>
<div class="line"><a id="l05632" name="l05632"></a><span class="lineno"> 5632</span> <span class="comment">// reflect the value of the loan</span></div>
<div class="line"><a id="l05633" name="l05633"></a><span class="lineno"> 5633</span> BEAST_EXPECT(assetsAvail &lt; assetsTotal);</div>
<div class="line"><a id="l05634" name="l05634"></a><span class="lineno"> 5634</span> BEAST_EXPECT(assetsAvail == broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(brokerParams.vaultDeposit - loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ab3d313a175cbd23b95d943878222b0a6">principalRequest</a>).number());</div>
<div class="line"><a id="l05635" name="l05635"></a><span class="lineno"> 5635</span> BEAST_EXPECT(assetsTotal == broker.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a>(brokerParams.vaultDeposit + state.interestDue).number());</div>
<div class="line"><a id="l05636" name="l05636"></a><span class="lineno"> 5636</span> }</div>
<div class="line"><a id="l05637" name="l05637"></a><span class="lineno"> 5637</span> </div>
<div class="line"><a id="l05638" name="l05638"></a><span class="lineno"> 5638</span> <span class="comment">// Step 7: Trigger default (dust adjustment will occur)</span></div>
<div class="line"><a id="l05639" name="l05639"></a><span class="lineno"> 5639</span> env(jtx::loan::manage(lender, loanKeylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>));</div>
<div class="line"><a id="l05640" name="l05640"></a><span class="lineno"> 5640</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05641" name="l05641"></a><span class="lineno"> 5641</span> </div>
<div class="line"><a id="l05642" name="l05642"></a><span class="lineno"> 5642</span> <span class="comment">// Step 8: Verify phantom assets created</span></div>
<div class="line"><a id="l05643" name="l05643"></a><span class="lineno"> 5643</span> {</div>
<div class="line"><a id="l05644" name="l05644"></a><span class="lineno"> 5644</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultSle2 = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(vaultKeylet);</div>
<div class="line"><a id="l05645" name="l05645"></a><span class="lineno"> 5645</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> assetsTotal2 = vaultSle2-&gt;at(sfAssetsTotal);</div>
<div class="line"><a id="l05646" name="l05646"></a><span class="lineno"> 5646</span> <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a> assetsAvail2 = vaultSle2-&gt;at(sfAssetsAvailable);</div>
<div class="line"><a id="l05647" name="l05647"></a><span class="lineno"> 5647</span> </div>
<div class="line"><a id="l05648" name="l05648"></a><span class="lineno"> 5648</span> log &lt;&lt; <span class="stringliteral">&quot;After default:&quot;</span> &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05649" name="l05649"></a><span class="lineno"> 5649</span> log &lt;&lt; <span class="stringliteral">&quot; AssetsTotal: &quot;</span> &lt;&lt; assetsTotal2 &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05650" name="l05650"></a><span class="lineno"> 5650</span> log &lt;&lt; <span class="stringliteral">&quot; AssetsAvailable: &quot;</span> &lt;&lt; assetsAvail2 &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05651" name="l05651"></a><span class="lineno"> 5651</span> log &lt;&lt; <span class="stringliteral">&quot; Difference: &quot;</span> &lt;&lt; (assetsTotal2 - assetsAvail2) &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05652" name="l05652"></a><span class="lineno"> 5652</span> </div>
<div class="line"><a id="l05653" name="l05653"></a><span class="lineno"> 5653</span> <span class="comment">// after a default the assets total and available should be equal</span></div>
<div class="line"><a id="l05654" name="l05654"></a><span class="lineno"> 5654</span> BEAST_EXPECT(assetsAvail2 == assetsTotal2);</div>
<div class="line"><a id="l05655" name="l05655"></a><span class="lineno"> 5655</span> }</div>
<div class="line"><a id="l05656" name="l05656"></a><span class="lineno"> 5656</span> }</div>
</div>
<div class="line"><a id="l05657" name="l05657"></a><span class="lineno"> 5657</span> </div>
<div class="line"><a id="l05658" name="l05658"></a><span class="lineno"> 5658</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen05659" data-start="{" data-end="}">
<div class="line"><a id="l05659" name="l05659"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#aaf854aae9551469f2610a2246805475a"> 5659</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aaf854aae9551469f2610a2246805475a">testRIPD3831</a>()</div>
<div class="line"><a id="l05660" name="l05660"></a><span class="lineno"> 5660</span> {</div>
<div class="line"><a id="l05661" name="l05661"></a><span class="lineno"> 5661</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05662" name="l05662"></a><span class="lineno"> 5662</span> </div>
<div class="line"><a id="l05663" name="l05663"></a><span class="lineno"> 5663</span> testcase(<span class="stringliteral">&quot;RIPD-3831&quot;</span>);</div>
<div class="line"><a id="l05664" name="l05664"></a><span class="lineno"> 5664</span> </div>
<div class="line"><a id="l05665" name="l05665"></a><span class="lineno"> 5665</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l05666" name="l05666"></a><span class="lineno"> 5666</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender(<span class="stringliteral">&quot;lender&quot;</span>);</div>
<div class="line"><a id="l05667" name="l05667"></a><span class="lineno"> 5667</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l05668" name="l05668"></a><span class="lineno"> 5668</span> </div>
<div class="line"><a id="l05669" name="l05669"></a><span class="lineno"> 5669</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> brokerParams{</div>
<div class="line"><a id="l05670" name="l05670"></a><span class="lineno"> 5670</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = 100000,</div>
<div class="line"><a id="l05671" name="l05671"></a><span class="lineno"> 5671</span> .debtMax = 0,</div>
<div class="line"><a id="l05672" name="l05672"></a><span class="lineno"> 5672</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0},</div>
<div class="line"><a id="l05673" name="l05673"></a><span class="lineno"> 5673</span> <span class="comment">// .managementFeeRate = TenthBips16{5919},</span></div>
<div class="line"><a id="l05674" name="l05674"></a><span class="lineno"> 5674</span> .coverRateLiquidation = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0}};</div>
<div class="line"><a id="l05675" name="l05675"></a><span class="lineno"> 5675</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span> loanParams{</div>
<div class="line"><a id="l05676" name="l05676"></a><span class="lineno"> 5676</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a> = lender,</div>
<div class="line"><a id="l05677" name="l05677"></a><span class="lineno"> 5677</span> .counter = borrower,</div>
<div class="line"><a id="l05678" name="l05678"></a><span class="lineno"> 5678</span> .principalRequest = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{200&#39;000, -6},</div>
<div class="line"><a id="l05679" name="l05679"></a><span class="lineno"> 5679</span> .lateFee = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{200, -6},</div>
<div class="line"><a id="l05680" name="l05680"></a><span class="lineno"> 5680</span> .interest = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{50&#39;000},</div>
<div class="line"><a id="l05681" name="l05681"></a><span class="lineno"> 5681</span> .payTotal = 10,</div>
<div class="line"><a id="l05682" name="l05682"></a><span class="lineno"> 5682</span> .payInterval = 150};</div>
<div class="line"><a id="l05683" name="l05683"></a><span class="lineno"> 5683</span> </div>
<div class="line"><a id="l05684" name="l05684"></a><span class="lineno"> 5684</span> <span class="keyword">auto</span> <span class="keyword">const</span> assetType = AssetType::XRP;</div>
<div class="line"><a id="l05685" name="l05685"></a><span class="lineno"> 5685</span> </div>
<div class="line"><a id="l05686" name="l05686"></a><span class="lineno"> 5686</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l05687" name="l05687"></a><span class="lineno"> 5687</span> </div>
<div class="line"><a id="l05688" name="l05688"></a><span class="lineno"> 5688</span> <span class="keyword">auto</span> loanResult = createLoan(env, assetType, brokerParams, loanParams, issuer, lender, borrower);</div>
<div class="line"><a id="l05689" name="l05689"></a><span class="lineno"> 5689</span> </div>
<div class="line"><a id="l05690" name="l05690"></a><span class="lineno"> 5690</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanResult))</div>
<div class="line"><a id="l05691" name="l05691"></a><span class="lineno"> 5691</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05692" name="l05692"></a><span class="lineno"> 5692</span> </div>
<div class="line"><a id="l05693" name="l05693"></a><span class="lineno"> 5693</span> <span class="keyword">auto</span> broker = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;BrokerInfo&gt;</a>(*loanResult);</div>
<div class="line"><a id="l05694" name="l05694"></a><span class="lineno"> 5694</span> <span class="keyword">auto</span> loanKeylet = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Keylet&gt;</a>(*loanResult);</div>
<div class="line"><a id="l05695" name="l05695"></a><span class="lineno"> 5695</span> </div>
<div class="line"><a id="l05696" name="l05696"></a><span class="lineno"> 5696</span> <span class="keyword">using </span>tp = <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a>;</div>
<div class="line"><a id="l05697" name="l05697"></a><span class="lineno"> 5697</span> <span class="keyword">using </span>d = <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">NetClock::duration</a>;</div>
<div class="line"><a id="l05698" name="l05698"></a><span class="lineno"> 5698</span> </div>
<div class="line"><a id="l05699" name="l05699"></a><span class="lineno"> 5699</span> <span class="keyword">auto</span> state = getCurrentState(env, broker, loanKeylet);</div>
<div class="line"><a id="l05700" name="l05700"></a><span class="lineno"> 5700</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> loan = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet); BEAST_EXPECT(loan))</div>
<div class="line"><a id="l05701" name="l05701"></a><span class="lineno"> 5701</span> {</div>
<div class="line"><a id="l05702" name="l05702"></a><span class="lineno"> 5702</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>(tp{d{loan-&gt;at(sfNextPaymentDueDate) + loan-&gt;at(sfGracePeriod) + 1}});</div>
<div class="line"><a id="l05703" name="l05703"></a><span class="lineno"> 5703</span> }</div>
<div class="line"><a id="l05704" name="l05704"></a><span class="lineno"> 5704</span> </div>
<div class="line"><a id="l05705" name="l05705"></a><span class="lineno"> 5705</span> topUpBorrower(env, broker, issuer, borrower, state, loanParams.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7ef3032e22b6dbb9de64f6358a7877cf">serviceFee</a>);</div>
<div class="line"><a id="l05706" name="l05706"></a><span class="lineno"> 5706</span> </div>
<div class="line"><a id="l05707" name="l05707"></a><span class="lineno"> 5707</span> <span class="keyword">using namespace </span>jtx::loan;</div>
<div class="line"><a id="l05708" name="l05708"></a><span class="lineno"> 5708</span> </div>
<div class="line"><a id="l05709" name="l05709"></a><span class="lineno"> 5709</span> <span class="keyword">auto</span> jv = pay(borrower, loanKeylet.key, <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#ad8d6d2badc431ad0216396cc73bc1410">drops</a>(<a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a>(state.totalValue)));</div>
<div class="line"><a id="l05710" name="l05710"></a><span class="lineno"> 5710</span> </div>
<div class="line"><a id="l05711" name="l05711"></a><span class="lineno"> 5711</span> {</div>
<div class="line"><a id="l05712" name="l05712"></a><span class="lineno"> 5712</span> <span class="keyword">auto</span> <span class="keyword">const</span> submitParam = to_string(jv);</div>
<div class="line"><a id="l05713" name="l05713"></a><span class="lineno"> 5713</span> <span class="keyword">auto</span> <span class="keyword">const</span> jr = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">rpc</a>(<span class="stringliteral">&quot;submit&quot;</span>, borrower.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#a8345e525bfee1c86bfa44a3eefdcfb0a">name</a>(), submitParam);</div>
<div class="line"><a id="l05714" name="l05714"></a><span class="lineno"> 5714</span> </div>
<div class="line"><a id="l05715" name="l05715"></a><span class="lineno"> 5715</span> BEAST_EXPECT(jr.isMember(jss::result));</div>
<div class="line"><a id="l05716" name="l05716"></a><span class="lineno"> 5716</span> <span class="keyword">auto</span> <span class="keyword">const</span> jResult = jr[jss::result];</div>
<div class="line"><a id="l05717" name="l05717"></a><span class="lineno"> 5717</span> }</div>
<div class="line"><a id="l05718" name="l05718"></a><span class="lineno"> 5718</span> </div>
<div class="line"><a id="l05719" name="l05719"></a><span class="lineno"> 5719</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05720" name="l05720"></a><span class="lineno"> 5720</span> </div>
<div class="line"><a id="l05721" name="l05721"></a><span class="lineno"> 5721</span> <span class="comment">// Make sure the system keeps responding</span></div>
<div class="line"><a id="l05722" name="l05722"></a><span class="lineno"> 5722</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a2ec6331faf47b13b181f880e771b444a">noop</a>(borrower));</div>
<div class="line"><a id="l05723" name="l05723"></a><span class="lineno"> 5723</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05724" name="l05724"></a><span class="lineno"> 5724</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a2ec6331faf47b13b181f880e771b444a">noop</a>(issuer));</div>
<div class="line"><a id="l05725" name="l05725"></a><span class="lineno"> 5725</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05726" name="l05726"></a><span class="lineno"> 5726</span> env(<a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a2ec6331faf47b13b181f880e771b444a">noop</a>(lender));</div>
<div class="line"><a id="l05727" name="l05727"></a><span class="lineno"> 5727</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05728" name="l05728"></a><span class="lineno"> 5728</span> }</div>
</div>
<div class="line"><a id="l05729" name="l05729"></a><span class="lineno"> 5729</span> </div>
<div class="line"><a id="l05730" name="l05730"></a><span class="lineno"> 5730</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen05731" data-start="{" data-end="}">
<div class="line"><a id="l05731" name="l05731"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#afc5b2c173917c6d7cd9bf7dc145bc5c0"> 5731</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#afc5b2c173917c6d7cd9bf7dc145bc5c0">testRIPD3459</a>()</div>
<div class="line"><a id="l05732" name="l05732"></a><span class="lineno"> 5732</span> {</div>
<div class="line"><a id="l05733" name="l05733"></a><span class="lineno"> 5733</span> testcase(<span class="stringliteral">&quot;RIPD-3459 - LoanBroker incorrect debt total&quot;</span>);</div>
<div class="line"><a id="l05734" name="l05734"></a><span class="lineno"> 5734</span> </div>
<div class="line"><a id="l05735" name="l05735"></a><span class="lineno"> 5735</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05736" name="l05736"></a><span class="lineno"> 5736</span> </div>
<div class="line"><a id="l05737" name="l05737"></a><span class="lineno"> 5737</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l05738" name="l05738"></a><span class="lineno"> 5738</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender(<span class="stringliteral">&quot;lender&quot;</span>);</div>
<div class="line"><a id="l05739" name="l05739"></a><span class="lineno"> 5739</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l05740" name="l05740"></a><span class="lineno"> 5740</span> </div>
<div class="line"><a id="l05741" name="l05741"></a><span class="lineno"> 5741</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> brokerParams{</div>
<div class="line"><a id="l05742" name="l05742"></a><span class="lineno"> 5742</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = 200&#39;000,</div>
<div class="line"><a id="l05743" name="l05743"></a><span class="lineno"> 5743</span> .debtMax = 0,</div>
<div class="line"><a id="l05744" name="l05744"></a><span class="lineno"> 5744</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0},</div>
<div class="line"><a id="l05745" name="l05745"></a><span class="lineno"> 5745</span> .managementFeeRate = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a>{500},</div>
<div class="line"><a id="l05746" name="l05746"></a><span class="lineno"> 5746</span> .coverRateLiquidation = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0}};</div>
<div class="line"><a id="l05747" name="l05747"></a><span class="lineno"> 5747</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span> loanParams{</div>
<div class="line"><a id="l05748" name="l05748"></a><span class="lineno"> 5748</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a> = lender,</div>
<div class="line"><a id="l05749" name="l05749"></a><span class="lineno"> 5749</span> .counter = borrower,</div>
<div class="line"><a id="l05750" name="l05750"></a><span class="lineno"> 5750</span> .principalRequest = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{100&#39;000, -4},</div>
<div class="line"><a id="l05751" name="l05751"></a><span class="lineno"> 5751</span> .interest = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{100&#39;000},</div>
<div class="line"><a id="l05752" name="l05752"></a><span class="lineno"> 5752</span> .payTotal = 10};</div>
<div class="line"><a id="l05753" name="l05753"></a><span class="lineno"> 5753</span> </div>
<div class="line"><a id="l05754" name="l05754"></a><span class="lineno"> 5754</span> <span class="keyword">auto</span> <span class="keyword">const</span> assetType = AssetType::MPT;</div>
<div class="line"><a id="l05755" name="l05755"></a><span class="lineno"> 5755</span> </div>
<div class="line"><a id="l05756" name="l05756"></a><span class="lineno"> 5756</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l05757" name="l05757"></a><span class="lineno"> 5757</span> </div>
<div class="line"><a id="l05758" name="l05758"></a><span class="lineno"> 5758</span> <span class="keyword">auto</span> loanResult = createLoan(env, assetType, brokerParams, loanParams, issuer, lender, borrower);</div>
<div class="line"><a id="l05759" name="l05759"></a><span class="lineno"> 5759</span> </div>
<div class="line"><a id="l05760" name="l05760"></a><span class="lineno"> 5760</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanResult))</div>
<div class="line"><a id="l05761" name="l05761"></a><span class="lineno"> 5761</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05762" name="l05762"></a><span class="lineno"> 5762</span> </div>
<div class="line"><a id="l05763" name="l05763"></a><span class="lineno"> 5763</span> <span class="keyword">auto</span> broker = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;BrokerInfo&gt;</a>(*loanResult);</div>
<div class="line"><a id="l05764" name="l05764"></a><span class="lineno"> 5764</span> <span class="keyword">auto</span> loanKeylet = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Keylet&gt;</a>(*loanResult);</div>
<div class="line"><a id="l05765" name="l05765"></a><span class="lineno"> 5765</span> <span class="keyword">auto</span> pseudoAcct = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Account&gt;</a>(*loanResult);</div>
<div class="line"><a id="l05766" name="l05766"></a><span class="lineno"> 5766</span> </div>
<div class="line"><a id="l05767" name="l05767"></a><span class="lineno"> 5767</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> verifyLoanStatus(env, broker, pseudoAcct, loanKeylet);</div>
<div class="line"><a id="l05768" name="l05768"></a><span class="lineno"> 5768</span> </div>
<div class="line"><a id="l05769" name="l05769"></a><span class="lineno"> 5769</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(broker.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ae0a30bbbd93c503dda354456673fb205">brokerKeylet</a>()); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l05770" name="l05770"></a><span class="lineno"> 5770</span> {</div>
<div class="line"><a id="l05771" name="l05771"></a><span class="lineno"> 5771</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> loanSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet); BEAST_EXPECT(loanSle))</div>
<div class="line"><a id="l05772" name="l05772"></a><span class="lineno"> 5772</span> {</div>
<div class="line"><a id="l05773" name="l05773"></a><span class="lineno"> 5773</span> BEAST_EXPECT(brokerSle-&gt;at(sfDebtTotal) == loanSle-&gt;at(sfTotalValueOutstanding));</div>
<div class="line"><a id="l05774" name="l05774"></a><span class="lineno"> 5774</span> }</div>
<div class="line"><a id="l05775" name="l05775"></a><span class="lineno"> 5775</span> }</div>
<div class="line"><a id="l05776" name="l05776"></a><span class="lineno"> 5776</span> </div>
<div class="line"><a id="l05777" name="l05777"></a><span class="lineno"> 5777</span> makeLoanPayments(</div>
<div class="line"><a id="l05778" name="l05778"></a><span class="lineno"> 5778</span> env,</div>
<div class="line"><a id="l05779" name="l05779"></a><span class="lineno"> 5779</span> broker,</div>
<div class="line"><a id="l05780" name="l05780"></a><span class="lineno"> 5780</span> loanParams,</div>
<div class="line"><a id="l05781" name="l05781"></a><span class="lineno"> 5781</span> loanKeylet,</div>
<div class="line"><a id="l05782" name="l05782"></a><span class="lineno"> 5782</span> verifyLoanStatus,</div>
<div class="line"><a id="l05783" name="l05783"></a><span class="lineno"> 5783</span> issuer,</div>
<div class="line"><a id="l05784" name="l05784"></a><span class="lineno"> 5784</span> lender,</div>
<div class="line"><a id="l05785" name="l05785"></a><span class="lineno"> 5785</span> borrower,</div>
<div class="line"><a id="l05786" name="l05786"></a><span class="lineno"> 5786</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">PaymentParameters</a>{.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ab14ea2a642db7b3ebbf93c1b49caebb4">showStepBalances</a> = <span class="keyword">true</span>});</div>
<div class="line"><a id="l05787" name="l05787"></a><span class="lineno"> 5787</span> </div>
<div class="line"><a id="l05788" name="l05788"></a><span class="lineno"> 5788</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(broker.<a class="code hl_function" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ae0a30bbbd93c503dda354456673fb205">brokerKeylet</a>()); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l05789" name="l05789"></a><span class="lineno"> 5789</span> {</div>
<div class="line"><a id="l05790" name="l05790"></a><span class="lineno"> 5790</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> loanSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet); BEAST_EXPECT(loanSle))</div>
<div class="line"><a id="l05791" name="l05791"></a><span class="lineno"> 5791</span> {</div>
<div class="line"><a id="l05792" name="l05792"></a><span class="lineno"> 5792</span> BEAST_EXPECT(brokerSle-&gt;at(sfDebtTotal) == loanSle-&gt;at(sfTotalValueOutstanding));</div>
<div class="line"><a id="l05793" name="l05793"></a><span class="lineno"> 5793</span> BEAST_EXPECT(brokerSle-&gt;at(sfDebtTotal) == beast::zero);</div>
<div class="line"><a id="l05794" name="l05794"></a><span class="lineno"> 5794</span> }</div>
<div class="line"><a id="l05795" name="l05795"></a><span class="lineno"> 5795</span> }</div>
<div class="line"><a id="l05796" name="l05796"></a><span class="lineno"> 5796</span> }</div>
</div>
<div class="line"><a id="l05797" name="l05797"></a><span class="lineno"> 5797</span> </div>
<div class="line"><a id="l05798" name="l05798"></a><span class="lineno"> 5798</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen05799" data-start="{" data-end="}">
<div class="line"><a id="l05799" name="l05799"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#ae0068feed72b54b82f8413e09a0ea830"> 5799</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#ae0068feed72b54b82f8413e09a0ea830">testRIPD3901</a>()</div>
<div class="line"><a id="l05800" name="l05800"></a><span class="lineno"> 5800</span> {</div>
<div class="line"><a id="l05801" name="l05801"></a><span class="lineno"> 5801</span> testcase(<span class="stringliteral">&quot;Crash with tfLoanOverpayment&quot;</span>);</div>
<div class="line"><a id="l05802" name="l05802"></a><span class="lineno"> 5802</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05803" name="l05803"></a><span class="lineno"> 5803</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l05804" name="l05804"></a><span class="lineno"> 5804</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l05805" name="l05805"></a><span class="lineno"> 5805</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l05806" name="l05806"></a><span class="lineno"> 5806</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l05807" name="l05807"></a><span class="lineno"> 5807</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> depositor{<span class="stringliteral">&quot;depositor&quot;</span>};</div>
<div class="line"><a id="l05808" name="l05808"></a><span class="lineno"> 5808</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a568efdba6a5908a8d64d4badc3f08f1a">txfee</a> = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100));</div>
<div class="line"><a id="l05809" name="l05809"></a><span class="lineno"> 5809</span> </div>
<div class="line"><a id="l05810" name="l05810"></a><span class="lineno"> 5810</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a id="l05811" name="l05811"></a><span class="lineno"> 5811</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1Vault.html">Vault</a> vault(env);</div>
<div class="line"><a id="l05812" name="l05812"></a><span class="lineno"> 5812</span> </div>
<div class="line"><a id="l05813" name="l05813"></a><span class="lineno"> 5813</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(10&#39;000), lender, issuer, borrower, depositor);</div>
<div class="line"><a id="l05814" name="l05814"></a><span class="lineno"> 5814</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05815" name="l05815"></a><span class="lineno"> 5815</span> </div>
<div class="line"><a id="l05816" name="l05816"></a><span class="lineno"> 5816</span> <span class="keyword">auto</span> [tx, vaultKeyLet] = vault.create({.owner = lender, .asset = <a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>()});</div>
<div class="line"><a id="l05817" name="l05817"></a><span class="lineno"> 5817</span> env(tx, <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a568efdba6a5908a8d64d4badc3f08f1a">txfee</a>);</div>
<div class="line"><a id="l05818" name="l05818"></a><span class="lineno"> 5818</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05819" name="l05819"></a><span class="lineno"> 5819</span> </div>
<div class="line"><a id="l05820" name="l05820"></a><span class="lineno"> 5820</span> env(vault.deposit({.depositor = depositor, .id = vaultKeyLet.key, .amount = XRP(1&#39;000)}), <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a568efdba6a5908a8d64d4badc3f08f1a">txfee</a>);</div>
<div class="line"><a id="l05821" name="l05821"></a><span class="lineno"> 5821</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05822" name="l05822"></a><span class="lineno"> 5822</span> </div>
<div class="line"><a id="l05823" name="l05823"></a><span class="lineno"> 5823</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerKeyLet = keylet::loanbroker(lender.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Account.html#aefcff537de98b56ea2f59a9b618cd246">id</a>(), env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a7e2bf847bf817405a5d8db448d8b4f6f">seq</a>(lender));</div>
<div class="line"><a id="l05824" name="l05824"></a><span class="lineno"> 5824</span> </div>
<div class="line"><a id="l05825" name="l05825"></a><span class="lineno"> 5825</span> env(loanBroker::set(lender, vaultKeyLet.key), <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a568efdba6a5908a8d64d4badc3f08f1a">txfee</a>);</div>
<div class="line"><a id="l05826" name="l05826"></a><span class="lineno"> 5826</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05827" name="l05827"></a><span class="lineno"> 5827</span> </div>
<div class="line"><a id="l05828" name="l05828"></a><span class="lineno"> 5828</span> <span class="comment">// BrokerInfo brokerInfo{xrpIssue(), keylet, vaultKeyLet, {}};</span></div>
<div class="line"><a id="l05829" name="l05829"></a><span class="lineno"> 5829</span> </div>
<div class="line"><a id="l05830" name="l05830"></a><span class="lineno"> 5830</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> debtMaximumRequest = <a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a>(200&#39;000);</div>
<div class="line"><a id="l05831" name="l05831"></a><span class="lineno"> 5831</span> </div>
<div class="line"><a id="l05832" name="l05832"></a><span class="lineno"> 5832</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerKeyLet.key, debtMaximumRequest),</div>
<div class="line"><a id="l05833" name="l05833"></a><span class="lineno"> 5833</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l05834" name="l05834"></a><span class="lineno"> 5834</span> interestRate(<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(50&#39;000)),</div>
<div class="line"><a id="l05835" name="l05835"></a><span class="lineno"> 5835</span> paymentTotal(2),</div>
<div class="line"><a id="l05836" name="l05836"></a><span class="lineno"> 5836</span> paymentInterval(150),</div>
<div class="line"><a id="l05837" name="l05837"></a><span class="lineno"> 5837</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>),</div>
<div class="line"><a id="l05838" name="l05838"></a><span class="lineno"> 5838</span> <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a568efdba6a5908a8d64d4badc3f08f1a">txfee</a>);</div>
<div class="line"><a id="l05839" name="l05839"></a><span class="lineno"> 5839</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05840" name="l05840"></a><span class="lineno"> 5840</span> </div>
<div class="line"><a id="l05841" name="l05841"></a><span class="lineno"> 5841</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <span class="keyword">const</span> loanSequence = 1;</div>
<div class="line"><a id="l05842" name="l05842"></a><span class="lineno"> 5842</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet = keylet::loan(brokerKeyLet.key, loanSequence);</div>
<div class="line"><a id="l05843" name="l05843"></a><span class="lineno"> 5843</span> </div>
<div class="line"><a id="l05844" name="l05844"></a><span class="lineno"> 5844</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> loan = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet); env.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loan))</div>
<div class="line"><a id="l05845" name="l05845"></a><span class="lineno"> 5845</span> {</div>
<div class="line"><a id="l05846" name="l05846"></a><span class="lineno"> 5846</span> env(loan::pay(borrower, loanKeylet.key, <a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a>(150&#39;001)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>), <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a568efdba6a5908a8d64d4badc3f08f1a">txfee</a>);</div>
<div class="line"><a id="l05847" name="l05847"></a><span class="lineno"> 5847</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05848" name="l05848"></a><span class="lineno"> 5848</span> }</div>
<div class="line"><a id="l05849" name="l05849"></a><span class="lineno"> 5849</span> }</div>
</div>
<div class="line"><a id="l05850" name="l05850"></a><span class="lineno"> 5850</span> </div>
<div class="line"><a id="l05851" name="l05851"></a><span class="lineno"> 5851</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen05852" data-start="{" data-end="}">
<div class="line"><a id="l05852" name="l05852"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a5ed806a4e5003ece4d142ea90543f27c"> 5852</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a5ed806a4e5003ece4d142ea90543f27c">testRoundingAllowsUndercoverage</a>()</div>
<div class="line"><a id="l05853" name="l05853"></a><span class="lineno"> 5853</span> {</div>
<div class="line"><a id="l05854" name="l05854"></a><span class="lineno"> 5854</span> testcase(<span class="stringliteral">&quot;Minimum cover rounding allows undercoverage (XRP)&quot;</span>);</div>
<div class="line"><a id="l05855" name="l05855"></a><span class="lineno"> 5855</span> </div>
<div class="line"><a id="l05856" name="l05856"></a><span class="lineno"> 5856</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05857" name="l05857"></a><span class="lineno"> 5857</span> <span class="keyword">using namespace </span>loanBroker;</div>
<div class="line"><a id="l05858" name="l05858"></a><span class="lineno"> 5858</span> </div>
<div class="line"><a id="l05859" name="l05859"></a><span class="lineno"> 5859</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l05860" name="l05860"></a><span class="lineno"> 5860</span> </div>
<div class="line"><a id="l05861" name="l05861"></a><span class="lineno"> 5861</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l05862" name="l05862"></a><span class="lineno"> 5862</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l05863" name="l05863"></a><span class="lineno"> 5863</span> </div>
<div class="line"><a id="l05864" name="l05864"></a><span class="lineno"> 5864</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(200&#39;000), lender, borrower);</div>
<div class="line"><a id="l05865" name="l05865"></a><span class="lineno"> 5865</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05866" name="l05866"></a><span class="lineno"> 5866</span> </div>
<div class="line"><a id="l05867" name="l05867"></a><span class="lineno"> 5867</span> <span class="comment">// Vault with XRP asset</span></div>
<div class="line"><a id="l05868" name="l05868"></a><span class="lineno"> 5868</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1Vault.html">Vault</a> vault{env};</div>
<div class="line"><a id="l05869" name="l05869"></a><span class="lineno"> 5869</span> <span class="keyword">auto</span> [vaultCreate, vaultKeylet] = vault.create({.owner = lender, .asset = <a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>()});</div>
<div class="line"><a id="l05870" name="l05870"></a><span class="lineno"> 5870</span> env(vaultCreate);</div>
<div class="line"><a id="l05871" name="l05871"></a><span class="lineno"> 5871</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05872" name="l05872"></a><span class="lineno"> 5872</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(vaultKeylet));</div>
<div class="line"><a id="l05873" name="l05873"></a><span class="lineno"> 5873</span> </div>
<div class="line"><a id="l05874" name="l05874"></a><span class="lineno"> 5874</span> <span class="comment">// Seed the vault with XRP so it can fund the loan principal</span></div>
<div class="line"><a id="l05875" name="l05875"></a><span class="lineno"> 5875</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> xrpAsset{<a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>(), 1};</div>
<div class="line"><a id="l05876" name="l05876"></a><span class="lineno"> 5876</span> </div>
<div class="line"><a id="l05877" name="l05877"></a><span class="lineno"> 5877</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> brokerParams{</div>
<div class="line"><a id="l05878" name="l05878"></a><span class="lineno"> 5878</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = 1&#39;000,</div>
<div class="line"><a id="l05879" name="l05879"></a><span class="lineno"> 5879</span> .debtMax = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{0},</div>
<div class="line"><a id="l05880" name="l05880"></a><span class="lineno"> 5880</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{10&#39;000},</div>
<div class="line"><a id="l05881" name="l05881"></a><span class="lineno"> 5881</span> .coverDeposit = 82,</div>
<div class="line"><a id="l05882" name="l05882"></a><span class="lineno"> 5882</span> };</div>
<div class="line"><a id="l05883" name="l05883"></a><span class="lineno"> 5883</span> </div>
<div class="line"><a id="l05884" name="l05884"></a><span class="lineno"> 5884</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerInfo = createVaultAndBroker(env, xrpAsset, lender, brokerParams);</div>
<div class="line"><a id="l05885" name="l05885"></a><span class="lineno"> 5885</span> <span class="comment">// Create a loan with principal 804 XRP and 0% interest (so</span></div>
<div class="line"><a id="l05886" name="l05886"></a><span class="lineno"> 5886</span> <span class="comment">// DebtTotal increases by exactly 804)</span></div>
<div class="line"><a id="l05887" name="l05887"></a><span class="lineno"> 5887</span> env(loan::set(borrower, brokerInfo.brokerID, xrpAsset(804).value()),</div>
<div class="line"><a id="l05888" name="l05888"></a><span class="lineno"> 5888</span> loan::interestRate(<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(0)),</div>
<div class="line"><a id="l05889" name="l05889"></a><span class="lineno"> 5889</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l05890" name="l05890"></a><span class="lineno"> 5890</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2));</div>
<div class="line"><a id="l05891" name="l05891"></a><span class="lineno"> 5891</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a13e30a79b03fb9f0f43b6bc0a41c25b8">ter</a>() == <a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>);</div>
<div class="line"><a id="l05892" name="l05892"></a><span class="lineno"> 5892</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05893" name="l05893"></a><span class="lineno"> 5893</span> </div>
<div class="line"><a id="l05894" name="l05894"></a><span class="lineno"> 5894</span> <span class="comment">// Verify DebtTotal is exactly 804</span></div>
<div class="line"><a id="l05895" name="l05895"></a><span class="lineno"> 5895</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(brokerInfo.brokerID)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l05896" name="l05896"></a><span class="lineno"> 5896</span> {</div>
<div class="line"><a id="l05897" name="l05897"></a><span class="lineno"> 5897</span> log &lt;&lt; *brokerSle &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05898" name="l05898"></a><span class="lineno"> 5898</span> BEAST_EXPECT(brokerSle-&gt;at(sfDebtTotal) == <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(804));</div>
<div class="line"><a id="l05899" name="l05899"></a><span class="lineno"> 5899</span> }</div>
<div class="line"><a id="l05900" name="l05900"></a><span class="lineno"> 5900</span> </div>
<div class="line"><a id="l05901" name="l05901"></a><span class="lineno"> 5901</span> <span class="comment">// Attempt to withdraw 2 XRP to self, leaving 80 XRP CoverAvailable.</span></div>
<div class="line"><a id="l05902" name="l05902"></a><span class="lineno"> 5902</span> <span class="comment">// The minimum is 80.4 XRP, which rounds up to 81 XRP, so this fails.</span></div>
<div class="line"><a id="l05903" name="l05903"></a><span class="lineno"> 5903</span> env(coverWithdraw(lender, brokerInfo.brokerID, xrpAsset(2).value()), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8479260fa4500bef887fa8e8c9f3c624">tecINSUFFICIENT_FUNDS</a>));</div>
<div class="line"><a id="l05904" name="l05904"></a><span class="lineno"> 5904</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a13e30a79b03fb9f0f43b6bc0a41c25b8">ter</a>() == <a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8479260fa4500bef887fa8e8c9f3c624">tecINSUFFICIENT_FUNDS</a>);</div>
<div class="line"><a id="l05905" name="l05905"></a><span class="lineno"> 5905</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05906" name="l05906"></a><span class="lineno"> 5906</span> </div>
<div class="line"><a id="l05907" name="l05907"></a><span class="lineno"> 5907</span> <span class="comment">// Attempt to withdraw 1 XRP to self, leaving 81 XRP CoverAvailable.</span></div>
<div class="line"><a id="l05908" name="l05908"></a><span class="lineno"> 5908</span> <span class="comment">// because that leaves sufficient cover, this succeeds</span></div>
<div class="line"><a id="l05909" name="l05909"></a><span class="lineno"> 5909</span> env(coverWithdraw(lender, brokerInfo.brokerID, xrpAsset(1).value()));</div>
<div class="line"><a id="l05910" name="l05910"></a><span class="lineno"> 5910</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a13e30a79b03fb9f0f43b6bc0a41c25b8">ter</a>() == <a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>);</div>
<div class="line"><a id="l05911" name="l05911"></a><span class="lineno"> 5911</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l05912" name="l05912"></a><span class="lineno"> 5912</span> </div>
<div class="line"><a id="l05913" name="l05913"></a><span class="lineno"> 5913</span> <span class="comment">// Validate CoverAvailable == 80 XRP and DebtTotal remains 804</span></div>
<div class="line"><a id="l05914" name="l05914"></a><span class="lineno"> 5914</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(brokerInfo.brokerID)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l05915" name="l05915"></a><span class="lineno"> 5915</span> {</div>
<div class="line"><a id="l05916" name="l05916"></a><span class="lineno"> 5916</span> log &lt;&lt; *brokerSle &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05917" name="l05917"></a><span class="lineno"> 5917</span> BEAST_EXPECT(brokerSle-&gt;at(sfCoverAvailable) == xrpAsset(81).value());</div>
<div class="line"><a id="l05918" name="l05918"></a><span class="lineno"> 5918</span> BEAST_EXPECT(brokerSle-&gt;at(sfDebtTotal) == <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(804));</div>
<div class="line"><a id="l05919" name="l05919"></a><span class="lineno"> 5919</span> </div>
<div class="line"><a id="l05920" name="l05920"></a><span class="lineno"> 5920</span> <span class="comment">// Also demonstrate that the true minimum (804 * 10%) exceeds 80</span></div>
<div class="line"><a id="l05921" name="l05921"></a><span class="lineno"> 5921</span> <span class="keyword">auto</span> <span class="keyword">const</span> theoreticalMin = <a class="code hl_function" href="namespacexrpl.html#a3f56d997a36633a10ca0f17c86113f56">tenthBipsOfValue</a>(<a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(804), <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(10&#39;000));</div>
<div class="line"><a id="l05922" name="l05922"></a><span class="lineno"> 5922</span> log &lt;&lt; <span class="stringliteral">&quot;Theoretical min cover: &quot;</span> &lt;&lt; theoreticalMin &lt;&lt; <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a>;</div>
<div class="line"><a id="l05923" name="l05923"></a><span class="lineno"> 5923</span> BEAST_EXPECT(<a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(804, -1) == theoreticalMin);</div>
<div class="line"><a id="l05924" name="l05924"></a><span class="lineno"> 5924</span> }</div>
<div class="line"><a id="l05925" name="l05925"></a><span class="lineno"> 5925</span> }</div>
</div>
<div class="line"><a id="l05926" name="l05926"></a><span class="lineno"> 5926</span> </div>
<div class="line"><a id="l05927" name="l05927"></a><span class="lineno"> 5927</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen05928" data-start="{" data-end="}">
<div class="line"><a id="l05928" name="l05928"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#afc840814ae2aab06c94541c6e5ce9c1c"> 5928</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#afc840814ae2aab06c94541c6e5ce9c1c">testRIPD3902</a>()</div>
<div class="line"><a id="l05929" name="l05929"></a><span class="lineno"> 5929</span> {</div>
<div class="line"><a id="l05930" name="l05930"></a><span class="lineno"> 5930</span> testcase(<span class="stringliteral">&quot;RIPD-3902 - 1 IOU loan payments&quot;</span>);</div>
<div class="line"><a id="l05931" name="l05931"></a><span class="lineno"> 5931</span> </div>
<div class="line"><a id="l05932" name="l05932"></a><span class="lineno"> 5932</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05933" name="l05933"></a><span class="lineno"> 5933</span> </div>
<div class="line"><a id="l05934" name="l05934"></a><span class="lineno"> 5934</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l05935" name="l05935"></a><span class="lineno"> 5935</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender(<span class="stringliteral">&quot;lender&quot;</span>);</div>
<div class="line"><a id="l05936" name="l05936"></a><span class="lineno"> 5936</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l05937" name="l05937"></a><span class="lineno"> 5937</span> </div>
<div class="line"><a id="l05938" name="l05938"></a><span class="lineno"> 5938</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> brokerParams{</div>
<div class="line"><a id="l05939" name="l05939"></a><span class="lineno"> 5939</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = 10,</div>
<div class="line"><a id="l05940" name="l05940"></a><span class="lineno"> 5940</span> .debtMax = 0,</div>
<div class="line"><a id="l05941" name="l05941"></a><span class="lineno"> 5941</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0},</div>
<div class="line"><a id="l05942" name="l05942"></a><span class="lineno"> 5942</span> .managementFeeRate = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a>{0},</div>
<div class="line"><a id="l05943" name="l05943"></a><span class="lineno"> 5943</span> .coverRateLiquidation = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0}};</div>
<div class="line"><a id="l05944" name="l05944"></a><span class="lineno"> 5944</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span> loanParams{</div>
<div class="line"><a id="l05945" name="l05945"></a><span class="lineno"> 5945</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a> = lender,</div>
<div class="line"><a id="l05946" name="l05946"></a><span class="lineno"> 5946</span> .counter = borrower,</div>
<div class="line"><a id="l05947" name="l05947"></a><span class="lineno"> 5947</span> .principalRequest = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{1, 0},</div>
<div class="line"><a id="l05948" name="l05948"></a><span class="lineno"> 5948</span> .interest = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{100&#39;000},</div>
<div class="line"><a id="l05949" name="l05949"></a><span class="lineno"> 5949</span> .payTotal = 5,</div>
<div class="line"><a id="l05950" name="l05950"></a><span class="lineno"> 5950</span> .payInterval = 150,</div>
<div class="line"><a id="l05951" name="l05951"></a><span class="lineno"> 5951</span> .gracePd = 60};</div>
<div class="line"><a id="l05952" name="l05952"></a><span class="lineno"> 5952</span> </div>
<div class="line"><a id="l05953" name="l05953"></a><span class="lineno"> 5953</span> <span class="keyword">auto</span> <span class="keyword">const</span> assetType = AssetType::IOU;</div>
<div class="line"><a id="l05954" name="l05954"></a><span class="lineno"> 5954</span> </div>
<div class="line"><a id="l05955" name="l05955"></a><span class="lineno"> 5955</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l05956" name="l05956"></a><span class="lineno"> 5956</span> </div>
<div class="line"><a id="l05957" name="l05957"></a><span class="lineno"> 5957</span> <span class="keyword">auto</span> loanResult = createLoan(env, assetType, brokerParams, loanParams, issuer, lender, borrower);</div>
<div class="line"><a id="l05958" name="l05958"></a><span class="lineno"> 5958</span> </div>
<div class="line"><a id="l05959" name="l05959"></a><span class="lineno"> 5959</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanResult))</div>
<div class="line"><a id="l05960" name="l05960"></a><span class="lineno"> 5960</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l05961" name="l05961"></a><span class="lineno"> 5961</span> </div>
<div class="line"><a id="l05962" name="l05962"></a><span class="lineno"> 5962</span> <span class="keyword">auto</span> broker = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;BrokerInfo&gt;</a>(*loanResult);</div>
<div class="line"><a id="l05963" name="l05963"></a><span class="lineno"> 5963</span> <span class="keyword">auto</span> loanKeylet = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Keylet&gt;</a>(*loanResult);</div>
<div class="line"><a id="l05964" name="l05964"></a><span class="lineno"> 5964</span> <span class="keyword">auto</span> pseudoAcct = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Account&gt;</a>(*loanResult);</div>
<div class="line"><a id="l05965" name="l05965"></a><span class="lineno"> 5965</span> </div>
<div class="line"><a id="l05966" name="l05966"></a><span class="lineno"> 5966</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> verifyLoanStatus(env, broker, pseudoAcct, loanKeylet);</div>
<div class="line"><a id="l05967" name="l05967"></a><span class="lineno"> 5967</span> </div>
<div class="line"><a id="l05968" name="l05968"></a><span class="lineno"> 5968</span> makeLoanPayments(</div>
<div class="line"><a id="l05969" name="l05969"></a><span class="lineno"> 5969</span> env,</div>
<div class="line"><a id="l05970" name="l05970"></a><span class="lineno"> 5970</span> broker,</div>
<div class="line"><a id="l05971" name="l05971"></a><span class="lineno"> 5971</span> loanParams,</div>
<div class="line"><a id="l05972" name="l05972"></a><span class="lineno"> 5972</span> loanKeylet,</div>
<div class="line"><a id="l05973" name="l05973"></a><span class="lineno"> 5973</span> verifyLoanStatus,</div>
<div class="line"><a id="l05974" name="l05974"></a><span class="lineno"> 5974</span> issuer,</div>
<div class="line"><a id="l05975" name="l05975"></a><span class="lineno"> 5975</span> lender,</div>
<div class="line"><a id="l05976" name="l05976"></a><span class="lineno"> 5976</span> borrower,</div>
<div class="line"><a id="l05977" name="l05977"></a><span class="lineno"> 5977</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">PaymentParameters</a>{.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ab14ea2a642db7b3ebbf93c1b49caebb4">showStepBalances</a> = <span class="keyword">true</span>});</div>
<div class="line"><a id="l05978" name="l05978"></a><span class="lineno"> 5978</span> }</div>
</div>
<div class="line"><a id="l05979" name="l05979"></a><span class="lineno"> 5979</span> </div>
<div class="line"><a id="l05980" name="l05980"></a><span class="lineno"> 5980</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen05981" data-start="{" data-end="}">
<div class="line"><a id="l05981" name="l05981"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a184e6709c054be88398d1285f6e8488b"> 5981</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a184e6709c054be88398d1285f6e8488b">testBorrowerIsBroker</a>()</div>
<div class="line"><a id="l05982" name="l05982"></a><span class="lineno"> 5982</span> {</div>
<div class="line"><a id="l05983" name="l05983"></a><span class="lineno"> 5983</span> testcase(<span class="stringliteral">&quot;Test Borrower is Broker&quot;</span>);</div>
<div class="line"><a id="l05984" name="l05984"></a><span class="lineno"> 5984</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l05985" name="l05985"></a><span class="lineno"> 5985</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l05986" name="l05986"></a><span class="lineno"> 5986</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> broker{<span class="stringliteral">&quot;broker&quot;</span>};</div>
<div class="line"><a id="l05987" name="l05987"></a><span class="lineno"> 5987</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l05988" name="l05988"></a><span class="lineno"> 5988</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower_{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l05989" name="l05989"></a><span class="lineno"> 5989</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> depositor{<span class="stringliteral">&quot;depositor&quot;</span>};</div>
<div class="line"><a id="l05990" name="l05990"></a><span class="lineno"> 5990</span> </div>
<div class="line"><a id="l05991" name="l05991"></a><span class="lineno"> 5991</span> <span class="keyword">auto</span> testLoanAsset = [&amp;](<span class="keyword">auto</span>&amp;&amp; getMaxDebt, <span class="keyword">auto</span> <span class="keyword">const</span>&amp; borrower) {</div>
<div class="line"><a id="l05992" name="l05992"></a><span class="lineno"> 5992</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>);</div>
<div class="line"><a id="l05993" name="l05993"></a><span class="lineno"> 5993</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1Vault.html">Vault</a> vault(env);</div>
<div class="line"><a id="l05994" name="l05994"></a><span class="lineno"> 5994</span> </div>
<div class="line"><a id="l05995" name="l05995"></a><span class="lineno"> 5995</span> <span class="keywordflow">if</span> (borrower == broker)</div>
<div class="line"><a id="l05996" name="l05996"></a><span class="lineno"> 5996</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(10&#39;000), broker, issuer, depositor);</div>
<div class="line"><a id="l05997" name="l05997"></a><span class="lineno"> 5997</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l05998" name="l05998"></a><span class="lineno"> 5998</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(10&#39;000), broker, borrower, issuer, depositor);</div>
<div class="line"><a id="l05999" name="l05999"></a><span class="lineno"> 5999</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06000" name="l06000"></a><span class="lineno"> 6000</span> </div>
<div class="line"><a id="l06001" name="l06001"></a><span class="lineno"> 6001</span> <span class="keyword">auto</span> <span class="keyword">const</span> xrpFee = <a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100);</div>
<div class="line"><a id="l06002" name="l06002"></a><span class="lineno"> 6002</span> <span class="keyword">auto</span> <span class="keyword">const</span> txFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(xrpFee);</div>
<div class="line"><a id="l06003" name="l06003"></a><span class="lineno"> 6003</span> </div>
<div class="line"><a id="l06004" name="l06004"></a><span class="lineno"> 6004</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> debtMaximumRequest = getMaxDebt(env);</div>
<div class="line"><a id="l06005" name="l06005"></a><span class="lineno"> 6005</span> </div>
<div class="line"><a id="l06006" name="l06006"></a><span class="lineno"> 6006</span> <span class="keyword">auto</span> <span class="keyword">const</span>&amp; asset = debtMaximumRequest.<a class="code hl_function" href="classxrpl_1_1STAmount.html#abbc5a024839981076ce9c16fa19d3657">asset</a>();</div>
<div class="line"><a id="l06007" name="l06007"></a><span class="lineno"> 6007</span> <span class="keyword">auto</span> <span class="keyword">const</span> initialVault = asset(debtMaximumRequest * 100);</div>
<div class="line"><a id="l06008" name="l06008"></a><span class="lineno"> 6008</span> </div>
<div class="line"><a id="l06009" name="l06009"></a><span class="lineno"> 6009</span> <span class="keyword">auto</span> [tx, vaultKeylet] = vault.create({.owner = broker, .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">asset</a> = asset});</div>
<div class="line"><a id="l06010" name="l06010"></a><span class="lineno"> 6010</span> env(tx, txFee);</div>
<div class="line"><a id="l06011" name="l06011"></a><span class="lineno"> 6011</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06012" name="l06012"></a><span class="lineno"> 6012</span> </div>
<div class="line"><a id="l06013" name="l06013"></a><span class="lineno"> 6013</span> env(vault.deposit({.depositor = depositor, .id = vaultKeylet.key, .amount = initialVault}), txFee);</div>
<div class="line"><a id="l06014" name="l06014"></a><span class="lineno"> 6014</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06015" name="l06015"></a><span class="lineno"> 6015</span> </div>
<div class="line"><a id="l06016" name="l06016"></a><span class="lineno"> 6016</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerKeylet = keylet::loanbroker(broker.id(), env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a7e2bf847bf817405a5d8db448d8b4f6f">seq</a>(broker));</div>
<div class="line"><a id="l06017" name="l06017"></a><span class="lineno"> 6017</span> </div>
<div class="line"><a id="l06018" name="l06018"></a><span class="lineno"> 6018</span> env(loanBroker::set(broker, vaultKeylet.key), txFee);</div>
<div class="line"><a id="l06019" name="l06019"></a><span class="lineno"> 6019</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06020" name="l06020"></a><span class="lineno"> 6020</span> </div>
<div class="line"><a id="l06021" name="l06021"></a><span class="lineno"> 6021</span> <span class="keyword">auto</span> <span class="keyword">const</span> serviceFee = 101;</div>
<div class="line"><a id="l06022" name="l06022"></a><span class="lineno"> 6022</span> </div>
<div class="line"><a id="l06023" name="l06023"></a><span class="lineno"> 6023</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(broker, brokerKeylet.key, debtMaximumRequest),</div>
<div class="line"><a id="l06024" name="l06024"></a><span class="lineno"> 6024</span> counterparty(borrower),</div>
<div class="line"><a id="l06025" name="l06025"></a><span class="lineno"> 6025</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, borrower),</div>
<div class="line"><a id="l06026" name="l06026"></a><span class="lineno"> 6026</span> loanServiceFee(serviceFee),</div>
<div class="line"><a id="l06027" name="l06027"></a><span class="lineno"> 6027</span> paymentTotal(10),</div>
<div class="line"><a id="l06028" name="l06028"></a><span class="lineno"> 6028</span> txFee);</div>
<div class="line"><a id="l06029" name="l06029"></a><span class="lineno"> 6029</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06030" name="l06030"></a><span class="lineno"> 6030</span> </div>
<div class="line"><a id="l06031" name="l06031"></a><span class="lineno"> 6031</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> <span class="keyword">const</span> loanSequence = 1;</div>
<div class="line"><a id="l06032" name="l06032"></a><span class="lineno"> 6032</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet = keylet::loan(brokerKeylet.key, loanSequence);</div>
<div class="line"><a id="l06033" name="l06033"></a><span class="lineno"> 6033</span> </div>
<div class="line"><a id="l06034" name="l06034"></a><span class="lineno"> 6034</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerBalanceBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(broker, asset);</div>
<div class="line"><a id="l06035" name="l06035"></a><span class="lineno"> 6035</span> </div>
<div class="line"><a id="l06036" name="l06036"></a><span class="lineno"> 6036</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> loanSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanKeylet); env.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">test</a>.BEAST_EXPECT(loanSle))</div>
<div class="line"><a id="l06037" name="l06037"></a><span class="lineno"> 6037</span> {</div>
<div class="line"><a id="l06038" name="l06038"></a><span class="lineno"> 6038</span> <span class="keyword">auto</span> <span class="keyword">const</span> payment = loanSle-&gt;at(sfPeriodicPayment);</div>
<div class="line"><a id="l06039" name="l06039"></a><span class="lineno"> 6039</span> <span class="keyword">auto</span> <span class="keyword">const</span> totalPayment = payment + serviceFee;</div>
<div class="line"><a id="l06040" name="l06040"></a><span class="lineno"> 6040</span> env(loan::pay(borrower, loanKeylet.key, asset(totalPayment)), txFee);</div>
<div class="line"><a id="l06041" name="l06041"></a><span class="lineno"> 6041</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06042" name="l06042"></a><span class="lineno"> 6042</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> vaultSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(vaultKeylet); BEAST_EXPECT(vaultSle))</div>
<div class="line"><a id="l06043" name="l06043"></a><span class="lineno"> 6043</span> {</div>
<div class="line"><a id="l06044" name="l06044"></a><span class="lineno"> 6044</span> <span class="keyword">auto</span> <span class="keyword">const</span> expected = [&amp;]() {</div>
<div class="line"><a id="l06045" name="l06045"></a><span class="lineno"> 6045</span> <span class="comment">// The service fee is transferred to the broker if</span></div>
<div class="line"><a id="l06046" name="l06046"></a><span class="lineno"> 6046</span> <span class="comment">// a borrower is not the broker</span></div>
<div class="line"><a id="l06047" name="l06047"></a><span class="lineno"> 6047</span> <span class="keywordflow">if</span> (borrower != broker)</div>
<div class="line"><a id="l06048" name="l06048"></a><span class="lineno"> 6048</span> <span class="keywordflow">return</span> brokerBalanceBefore.number() + serviceFee;</div>
<div class="line"><a id="l06049" name="l06049"></a><span class="lineno"> 6049</span> <span class="comment">// Since a borrower is the broker, the payment is</span></div>
<div class="line"><a id="l06050" name="l06050"></a><span class="lineno"> 6050</span> <span class="comment">// transferred to the Vault from the broker but not</span></div>
<div class="line"><a id="l06051" name="l06051"></a><span class="lineno"> 6051</span> <span class="comment">// the service fee.</span></div>
<div class="line"><a id="l06052" name="l06052"></a><span class="lineno"> 6052</span> <span class="comment">// If the asset is XRP then the broker pays the txfee.</span></div>
<div class="line"><a id="l06053" name="l06053"></a><span class="lineno"> 6053</span> <span class="keywordflow">if</span> (asset.native())</div>
<div class="line"><a id="l06054" name="l06054"></a><span class="lineno"> 6054</span> <span class="keywordflow">return</span> brokerBalanceBefore.number() - payment - xrpFee.number();</div>
<div class="line"><a id="l06055" name="l06055"></a><span class="lineno"> 6055</span> <span class="keywordflow">return</span> brokerBalanceBefore.number() - payment;</div>
<div class="line"><a id="l06056" name="l06056"></a><span class="lineno"> 6056</span> }();</div>
<div class="line"><a id="l06057" name="l06057"></a><span class="lineno"> 6057</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(broker, asset).<a class="code hl_function" href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a742750c3ad4996faa68c66664d3921db">value</a>() == asset(expected).value());</div>
<div class="line"><a id="l06058" name="l06058"></a><span class="lineno"> 6058</span> }</div>
<div class="line"><a id="l06059" name="l06059"></a><span class="lineno"> 6059</span> }</div>
<div class="line"><a id="l06060" name="l06060"></a><span class="lineno"> 6060</span> };</div>
<div class="line"><a id="l06061" name="l06061"></a><span class="lineno"> 6061</span> <span class="comment">// Test when a borrower is the broker and is not to verify correct</span></div>
<div class="line"><a id="l06062" name="l06062"></a><span class="lineno"> 6062</span> <span class="comment">// service fee transfer in both cases.</span></div>
<div class="line"><a id="l06063" name="l06063"></a><span class="lineno"> 6063</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; borrowerAcct : {broker, borrower_})</div>
<div class="line"><a id="l06064" name="l06064"></a><span class="lineno"> 6064</span> {</div>
<div class="line"><a id="l06065" name="l06065"></a><span class="lineno"> 6065</span> testLoanAsset([&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp;) -&gt; <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> { <span class="keywordflow">return</span> <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{<a class="code hl_class" href="classxrpl_1_1XRPAmount.html">XRPAmount</a>{200&#39;000}}; }, borrowerAcct);</div>
<div class="line"><a id="l06066" name="l06066"></a><span class="lineno"> 6066</span> testLoanAsset(</div>
<div class="line"><a id="l06067" name="l06067"></a><span class="lineno"> 6067</span> [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env) -&gt; <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> {</div>
<div class="line"><a id="l06068" name="l06068"></a><span class="lineno"> 6068</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a> = issuer[<span class="stringliteral">&quot;USD&quot;</span>];</div>
<div class="line"><a id="l06069" name="l06069"></a><span class="lineno"> 6069</span> env(trust(broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l06070" name="l06070"></a><span class="lineno"> 6070</span> env(trust(depositor, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(1&#39;000&#39;000&#39;000)));</div>
<div class="line"><a id="l06071" name="l06071"></a><span class="lineno"> 6071</span> env(pay(issuer, broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(100&#39;000&#39;000)));</div>
<div class="line"><a id="l06072" name="l06072"></a><span class="lineno"> 6072</span> env(pay(issuer, depositor, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(100&#39;000&#39;000)));</div>
<div class="line"><a id="l06073" name="l06073"></a><span class="lineno"> 6073</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06074" name="l06074"></a><span class="lineno"> 6074</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(200&#39;000);</div>
<div class="line"><a id="l06075" name="l06075"></a><span class="lineno"> 6075</span> },</div>
<div class="line"><a id="l06076" name="l06076"></a><span class="lineno"> 6076</span> borrowerAcct);</div>
<div class="line"><a id="l06077" name="l06077"></a><span class="lineno"> 6077</span> testLoanAsset(</div>
<div class="line"><a id="l06078" name="l06078"></a><span class="lineno"> 6078</span> [&amp;](<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env) -&gt; <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a> {</div>
<div class="line"><a id="l06079" name="l06079"></a><span class="lineno"> 6079</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mpt({.env = env, .issuer = issuer, .holders = {broker, depositor}, .pay = 100&#39;000&#39;000});</div>
<div class="line"><a id="l06080" name="l06080"></a><span class="lineno"> 6080</span> <span class="keywordflow">return</span> mpt(200&#39;000);</div>
<div class="line"><a id="l06081" name="l06081"></a><span class="lineno"> 6081</span> },</div>
<div class="line"><a id="l06082" name="l06082"></a><span class="lineno"> 6082</span> borrowerAcct);</div>
<div class="line"><a id="l06083" name="l06083"></a><span class="lineno"> 6083</span> }</div>
<div class="line"><a id="l06084" name="l06084"></a><span class="lineno"> 6084</span> }</div>
</div>
<div class="line"><a id="l06085" name="l06085"></a><span class="lineno"> 6085</span> </div>
<div class="line"><a id="l06086" name="l06086"></a><span class="lineno"> 6086</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen06087" data-start="{" data-end="}">
<div class="line"><a id="l06087" name="l06087"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#aa276ccf3658b5a876c2d440554a1e500"> 6087</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aa276ccf3658b5a876c2d440554a1e500">testIssuerIsBorrower</a>()</div>
<div class="line"><a id="l06088" name="l06088"></a><span class="lineno"> 6088</span> {</div>
<div class="line"><a id="l06089" name="l06089"></a><span class="lineno"> 6089</span> testcase(<span class="stringliteral">&quot;RIPD-4096 - Issuer as borrower&quot;</span>);</div>
<div class="line"><a id="l06090" name="l06090"></a><span class="lineno"> 6090</span> </div>
<div class="line"><a id="l06091" name="l06091"></a><span class="lineno"> 6091</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06092" name="l06092"></a><span class="lineno"> 6092</span> </div>
<div class="line"><a id="l06093" name="l06093"></a><span class="lineno"> 6093</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l06094" name="l06094"></a><span class="lineno"> 6094</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender(<span class="stringliteral">&quot;lender&quot;</span>);</div>
<div class="line"><a id="l06095" name="l06095"></a><span class="lineno"> 6095</span> </div>
<div class="line"><a id="l06096" name="l06096"></a><span class="lineno"> 6096</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> brokerParams{</div>
<div class="line"><a id="l06097" name="l06097"></a><span class="lineno"> 6097</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = 100&#39;000,</div>
<div class="line"><a id="l06098" name="l06098"></a><span class="lineno"> 6098</span> .debtMax = 0,</div>
<div class="line"><a id="l06099" name="l06099"></a><span class="lineno"> 6099</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0},</div>
<div class="line"><a id="l06100" name="l06100"></a><span class="lineno"> 6100</span> .managementFeeRate = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a>{0},</div>
<div class="line"><a id="l06101" name="l06101"></a><span class="lineno"> 6101</span> .coverRateLiquidation = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0}};</div>
<div class="line"><a id="l06102" name="l06102"></a><span class="lineno"> 6102</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span> loanParams{.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a> = lender, .counter = issuer, .principalRequest = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{10000}};</div>
<div class="line"><a id="l06103" name="l06103"></a><span class="lineno"> 6103</span> </div>
<div class="line"><a id="l06104" name="l06104"></a><span class="lineno"> 6104</span> <span class="keyword">auto</span> <span class="keyword">const</span> assetType = AssetType::IOU;</div>
<div class="line"><a id="l06105" name="l06105"></a><span class="lineno"> 6105</span> </div>
<div class="line"><a id="l06106" name="l06106"></a><span class="lineno"> 6106</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l06107" name="l06107"></a><span class="lineno"> 6107</span> </div>
<div class="line"><a id="l06108" name="l06108"></a><span class="lineno"> 6108</span> <span class="keyword">auto</span> loanResult = createLoan(env, assetType, brokerParams, loanParams, issuer, lender, issuer);</div>
<div class="line"><a id="l06109" name="l06109"></a><span class="lineno"> 6109</span> </div>
<div class="line"><a id="l06110" name="l06110"></a><span class="lineno"> 6110</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanResult))</div>
<div class="line"><a id="l06111" name="l06111"></a><span class="lineno"> 6111</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l06112" name="l06112"></a><span class="lineno"> 6112</span> </div>
<div class="line"><a id="l06113" name="l06113"></a><span class="lineno"> 6113</span> <span class="keyword">auto</span> broker = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;BrokerInfo&gt;</a>(*loanResult);</div>
<div class="line"><a id="l06114" name="l06114"></a><span class="lineno"> 6114</span> <span class="keyword">auto</span> loanKeylet = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Keylet&gt;</a>(*loanResult);</div>
<div class="line"><a id="l06115" name="l06115"></a><span class="lineno"> 6115</span> <span class="keyword">auto</span> pseudoAcct = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Account&gt;</a>(*loanResult);</div>
<div class="line"><a id="l06116" name="l06116"></a><span class="lineno"> 6116</span> </div>
<div class="line"><a id="l06117" name="l06117"></a><span class="lineno"> 6117</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> verifyLoanStatus(env, broker, pseudoAcct, loanKeylet);</div>
<div class="line"><a id="l06118" name="l06118"></a><span class="lineno"> 6118</span> </div>
<div class="line"><a id="l06119" name="l06119"></a><span class="lineno"> 6119</span> makeLoanPayments(</div>
<div class="line"><a id="l06120" name="l06120"></a><span class="lineno"> 6120</span> env,</div>
<div class="line"><a id="l06121" name="l06121"></a><span class="lineno"> 6121</span> broker,</div>
<div class="line"><a id="l06122" name="l06122"></a><span class="lineno"> 6122</span> loanParams,</div>
<div class="line"><a id="l06123" name="l06123"></a><span class="lineno"> 6123</span> loanKeylet,</div>
<div class="line"><a id="l06124" name="l06124"></a><span class="lineno"> 6124</span> verifyLoanStatus,</div>
<div class="line"><a id="l06125" name="l06125"></a><span class="lineno"> 6125</span> issuer,</div>
<div class="line"><a id="l06126" name="l06126"></a><span class="lineno"> 6126</span> lender,</div>
<div class="line"><a id="l06127" name="l06127"></a><span class="lineno"> 6127</span> issuer,</div>
<div class="line"><a id="l06128" name="l06128"></a><span class="lineno"> 6128</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">PaymentParameters</a>{.<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ab14ea2a642db7b3ebbf93c1b49caebb4">showStepBalances</a> = <span class="keyword">true</span>});</div>
<div class="line"><a id="l06129" name="l06129"></a><span class="lineno"> 6129</span> }</div>
</div>
<div class="line"><a id="l06130" name="l06130"></a><span class="lineno"> 6130</span> </div>
<div class="line"><a id="l06131" name="l06131"></a><span class="lineno"> 6131</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen06132" data-start="{" data-end="}">
<div class="line"><a id="l06132" name="l06132"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#aecf08c8aed881083fc259c0edebd8294"> 6132</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aecf08c8aed881083fc259c0edebd8294">testLimitExceeded</a>()</div>
<div class="line"><a id="l06133" name="l06133"></a><span class="lineno"> 6133</span> {</div>
<div class="line"><a id="l06134" name="l06134"></a><span class="lineno"> 6134</span> testcase(<span class="stringliteral">&quot;RIPD-4125 - overpayment&quot;</span>);</div>
<div class="line"><a id="l06135" name="l06135"></a><span class="lineno"> 6135</span> </div>
<div class="line"><a id="l06136" name="l06136"></a><span class="lineno"> 6136</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06137" name="l06137"></a><span class="lineno"> 6137</span> </div>
<div class="line"><a id="l06138" name="l06138"></a><span class="lineno"> 6138</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l06139" name="l06139"></a><span class="lineno"> 6139</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender(<span class="stringliteral">&quot;lender&quot;</span>);</div>
<div class="line"><a id="l06140" name="l06140"></a><span class="lineno"> 6140</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l06141" name="l06141"></a><span class="lineno"> 6141</span> </div>
<div class="line"><a id="l06142" name="l06142"></a><span class="lineno"> 6142</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> brokerParams{</div>
<div class="line"><a id="l06143" name="l06143"></a><span class="lineno"> 6143</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = 100&#39;000,</div>
<div class="line"><a id="l06144" name="l06144"></a><span class="lineno"> 6144</span> .debtMax = 0,</div>
<div class="line"><a id="l06145" name="l06145"></a><span class="lineno"> 6145</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0},</div>
<div class="line"><a id="l06146" name="l06146"></a><span class="lineno"> 6146</span> .managementFeeRate = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a>{0},</div>
<div class="line"><a id="l06147" name="l06147"></a><span class="lineno"> 6147</span> .coverRateLiquidation = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0}};</div>
<div class="line"><a id="l06148" name="l06148"></a><span class="lineno"> 6148</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span> loanParams{</div>
<div class="line"><a id="l06149" name="l06149"></a><span class="lineno"> 6149</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a> = lender,</div>
<div class="line"><a id="l06150" name="l06150"></a><span class="lineno"> 6150</span> .counter = borrower,</div>
<div class="line"><a id="l06151" name="l06151"></a><span class="lineno"> 6151</span> .principalRequest = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{200000, -6},</div>
<div class="line"><a id="l06152" name="l06152"></a><span class="lineno"> 6152</span> .interest = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{50000},</div>
<div class="line"><a id="l06153" name="l06153"></a><span class="lineno"> 6153</span> .payTotal = 3,</div>
<div class="line"><a id="l06154" name="l06154"></a><span class="lineno"> 6154</span> .payInterval = 200,</div>
<div class="line"><a id="l06155" name="l06155"></a><span class="lineno"> 6155</span> .gracePd = 60,</div>
<div class="line"><a id="l06156" name="l06156"></a><span class="lineno"> 6156</span> .flags = <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>,</div>
<div class="line"><a id="l06157" name="l06157"></a><span class="lineno"> 6157</span> };</div>
<div class="line"><a id="l06158" name="l06158"></a><span class="lineno"> 6158</span> </div>
<div class="line"><a id="l06159" name="l06159"></a><span class="lineno"> 6159</span> <span class="keyword">auto</span> <span class="keyword">const</span> assetType = AssetType::XRP;</div>
<div class="line"><a id="l06160" name="l06160"></a><span class="lineno"> 6160</span> </div>
<div class="line"><a id="l06161" name="l06161"></a><span class="lineno"> 6161</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_function" href="namespacexrpl_1_1test_1_1jtx.html#a59413b683073e7f993b3d22ccd0a91f9">makeConfig</a>(), all, <span class="keyword">nullptr</span>, <a class="code hl_enumvalue" href="namespacebeast_1_1severities.html#a069a8a312b9123b77f6aa31733ca73beab6ef7006e42e82dcc97478e4e362f883">beast::severities::Severity::kWarning</a>);</div>
<div class="line"><a id="l06162" name="l06162"></a><span class="lineno"> 6162</span> </div>
<div class="line"><a id="l06163" name="l06163"></a><span class="lineno"> 6163</span> <span class="keyword">auto</span> loanResult = createLoan(env, assetType, brokerParams, loanParams, issuer, lender, borrower);</div>
<div class="line"><a id="l06164" name="l06164"></a><span class="lineno"> 6164</span> </div>
<div class="line"><a id="l06165" name="l06165"></a><span class="lineno"> 6165</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanResult))</div>
<div class="line"><a id="l06166" name="l06166"></a><span class="lineno"> 6166</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l06167" name="l06167"></a><span class="lineno"> 6167</span> </div>
<div class="line"><a id="l06168" name="l06168"></a><span class="lineno"> 6168</span> <span class="keyword">auto</span> broker = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;BrokerInfo&gt;</a>(*loanResult);</div>
<div class="line"><a id="l06169" name="l06169"></a><span class="lineno"> 6169</span> <span class="keyword">auto</span> loanKeylet = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Keylet&gt;</a>(*loanResult);</div>
<div class="line"><a id="l06170" name="l06170"></a><span class="lineno"> 6170</span> <span class="keyword">auto</span> pseudoAcct = <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::get&lt;Account&gt;</a>(*loanResult);</div>
<div class="line"><a id="l06171" name="l06171"></a><span class="lineno"> 6171</span> </div>
<div class="line"><a id="l06172" name="l06172"></a><span class="lineno"> 6172</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">VerifyLoanStatus</a> verifyLoanStatus(env, broker, pseudoAcct, loanKeylet);</div>
<div class="line"><a id="l06173" name="l06173"></a><span class="lineno"> 6173</span> </div>
<div class="line"><a id="l06174" name="l06174"></a><span class="lineno"> 6174</span> <span class="keyword">auto</span> <span class="keyword">const</span> state = getCurrentState(env, broker, loanKeylet);</div>
<div class="line"><a id="l06175" name="l06175"></a><span class="lineno"> 6175</span> </div>
<div class="line"><a id="l06176" name="l06176"></a><span class="lineno"> 6176</span> env(loan::pay(</div>
<div class="line"><a id="l06177" name="l06177"></a><span class="lineno"> 6177</span> borrower, loanKeylet.key, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{broker.asset, state.periodicPayment * 3 / 2 + 1}, <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>));</div>
<div class="line"><a id="l06178" name="l06178"></a><span class="lineno"> 6178</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06179" name="l06179"></a><span class="lineno"> 6179</span> </div>
<div class="line"><a id="l06180" name="l06180"></a><span class="lineno"> 6180</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">PaymentParameters</a> paymentParams{</div>
<div class="line"><a id="l06181" name="l06181"></a><span class="lineno"> 6181</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ab14ea2a642db7b3ebbf93c1b49caebb4">showStepBalances</a> = <span class="keyword">false</span>,</div>
<div class="line"><a id="l06182" name="l06182"></a><span class="lineno"> 6182</span> .validateBalances = <span class="keyword">true</span>,</div>
<div class="line"><a id="l06183" name="l06183"></a><span class="lineno"> 6183</span> };</div>
<div class="line"><a id="l06184" name="l06184"></a><span class="lineno"> 6184</span> </div>
<div class="line"><a id="l06185" name="l06185"></a><span class="lineno"> 6185</span> makeLoanPayments(</div>
<div class="line"><a id="l06186" name="l06186"></a><span class="lineno"> 6186</span> env, broker, loanParams, loanKeylet, verifyLoanStatus, issuer, lender, borrower, paymentParams);</div>
<div class="line"><a id="l06187" name="l06187"></a><span class="lineno"> 6187</span> }</div>
</div>
<div class="line"><a id="l06188" name="l06188"></a><span class="lineno"> 6188</span> </div>
<div class="line"><a id="l06189" name="l06189"></a><span class="lineno"> 6189</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen06190" data-start="{" data-end="}">
<div class="line"><a id="l06190" name="l06190"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#af4acd4d2f41e815fbed08ba3ecc6084a"> 6190</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#af4acd4d2f41e815fbed08ba3ecc6084a">testOverpaymentManagementFee</a>()</div>
<div class="line"><a id="l06191" name="l06191"></a><span class="lineno"> 6191</span> {</div>
<div class="line"><a id="l06192" name="l06192"></a><span class="lineno"> 6192</span> testcase(<span class="stringliteral">&quot;testOverpaymentManagementFee&quot;</span>);</div>
<div class="line"><a id="l06193" name="l06193"></a><span class="lineno"> 6193</span> </div>
<div class="line"><a id="l06194" name="l06194"></a><span class="lineno"> 6194</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06195" name="l06195"></a><span class="lineno"> 6195</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l06196" name="l06196"></a><span class="lineno"> 6196</span> </div>
<div class="line"><a id="l06197" name="l06197"></a><span class="lineno"> 6197</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l06198" name="l06198"></a><span class="lineno"> 6198</span> </div>
<div class="line"><a id="l06199" name="l06199"></a><span class="lineno"> 6199</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>}, borrower{<span class="stringliteral">&quot;borrower&quot;</span>};</div>
<div class="line"><a id="l06200" name="l06200"></a><span class="lineno"> 6200</span> </div>
<div class="line"><a id="l06201" name="l06201"></a><span class="lineno"> 6201</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(10&#39;000&#39;000), lender, borrower);</div>
<div class="line"><a id="l06202" name="l06202"></a><span class="lineno"> 6202</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06203" name="l06203"></a><span class="lineno"> 6203</span> </div>
<div class="line"><a id="l06204" name="l06204"></a><span class="lineno"> 6204</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> asset{<a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>(), 1000};</div>
<div class="line"><a id="l06205" name="l06205"></a><span class="lineno"> 6205</span> </div>
<div class="line"><a id="l06206" name="l06206"></a><span class="lineno"> 6206</span> <span class="keyword">auto</span> <span class="keyword">const</span> result = createVaultAndBroker(</div>
<div class="line"><a id="l06207" name="l06207"></a><span class="lineno"> 6207</span> env,</div>
<div class="line"><a id="l06208" name="l06208"></a><span class="lineno"> 6208</span> asset,</div>
<div class="line"><a id="l06209" name="l06209"></a><span class="lineno"> 6209</span> lender,</div>
<div class="line"><a id="l06210" name="l06210"></a><span class="lineno"> 6210</span> {</div>
<div class="line"><a id="l06211" name="l06211"></a><span class="lineno"> 6211</span> .vaultDeposit = asset(100&#39;000).value(),</div>
<div class="line"><a id="l06212" name="l06212"></a><span class="lineno"> 6212</span> .managementFeeRate = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a>(10&#39;000),</div>
<div class="line"><a id="l06213" name="l06213"></a><span class="lineno"> 6213</span> });</div>
<div class="line"><a id="l06214" name="l06214"></a><span class="lineno"> 6214</span> </div>
<div class="line"><a id="l06215" name="l06215"></a><span class="lineno"> 6215</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanSetFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l06216" name="l06216"></a><span class="lineno"> 6216</span> </div>
<div class="line"><a id="l06217" name="l06217"></a><span class="lineno"> 6217</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanKeylet =</div>
<div class="line"><a id="l06218" name="l06218"></a><span class="lineno"> 6218</span> keylet::loan(result.brokerKeylet().key, (env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(result.brokerKeylet()))-&gt;at(sfLoanSequence));</div>
<div class="line"><a id="l06219" name="l06219"></a><span class="lineno"> 6219</span> env(loan::set(borrower, result.brokerKeylet().key, asset(10&#39;000).value(), <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>),</div>
<div class="line"><a id="l06220" name="l06220"></a><span class="lineno"> 6220</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l06221" name="l06221"></a><span class="lineno"> 6221</span> loan::paymentInterval(86400 * 30),</div>
<div class="line"><a id="l06222" name="l06222"></a><span class="lineno"> 6222</span> loan::paymentTotal(3),</div>
<div class="line"><a id="l06223" name="l06223"></a><span class="lineno"> 6223</span> loan::overpaymentInterestRate(<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(<a class="code hl_function" href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">percentageToTenthBips</a>(20))),</div>
<div class="line"><a id="l06224" name="l06224"></a><span class="lineno"> 6224</span> loanSetFee);</div>
<div class="line"><a id="l06225" name="l06225"></a><span class="lineno"> 6225</span> </div>
<div class="line"><a id="l06226" name="l06226"></a><span class="lineno"> 6226</span> <span class="comment">// From calculator</span></div>
<div class="line"><a id="l06227" name="l06227"></a><span class="lineno"> 6227</span> <span class="keyword">auto</span> <span class="keyword">const</span> expectedOverpaymentManagementFee = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{33333, 0};</div>
<div class="line"><a id="l06228" name="l06228"></a><span class="lineno"> 6228</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanBrokerBalanceBefore = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(lender);</div>
<div class="line"><a id="l06229" name="l06229"></a><span class="lineno"> 6229</span> </div>
<div class="line"><a id="l06230" name="l06230"></a><span class="lineno"> 6230</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanPayFee = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">current</a>()-&gt;fees().base * 2);</div>
<div class="line"><a id="l06231" name="l06231"></a><span class="lineno"> 6231</span> env(pay(borrower, loanKeylet.key, asset(5&#39;000).value(), <a class="code hl_variable" href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">tfLoanOverpayment</a>), loanPayFee);</div>
<div class="line"><a id="l06232" name="l06232"></a><span class="lineno"> 6232</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06233" name="l06233"></a><span class="lineno"> 6233</span> </div>
<div class="line"><a id="l06234" name="l06234"></a><span class="lineno"> 6234</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l06235" name="l06235"></a><span class="lineno"> 6235</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(lender) - loanBrokerBalanceBefore == expectedOverpaymentManagementFee,</div>
<div class="line"><a id="l06236" name="l06236"></a><span class="lineno"> 6236</span> <span class="stringliteral">&quot;overpayment management fee missmatch; expected:&quot;</span> + to_string(expectedOverpaymentManagementFee) +</div>
<div class="line"><a id="l06237" name="l06237"></a><span class="lineno"> 6237</span> <span class="stringliteral">&quot; got: &quot;</span> + to_string(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(lender) - loanBrokerBalanceBefore));</div>
<div class="line"><a id="l06238" name="l06238"></a><span class="lineno"> 6238</span> }</div>
</div>
<div class="line"><a id="l06239" name="l06239"></a><span class="lineno"> 6239</span> </div>
<div class="line"><a id="l06240" name="l06240"></a><span class="lineno"> 6240</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen06241" data-start="{" data-end="}">
<div class="line"><a id="l06241" name="l06241"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#abf91eb91f62850329db2babe3be4fa2b"> 6241</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#abf91eb91f62850329db2babe3be4fa2b">testLoanPayBrokerOwnerMissingTrustline</a>()</div>
<div class="line"><a id="l06242" name="l06242"></a><span class="lineno"> 6242</span> {</div>
<div class="line"><a id="l06243" name="l06243"></a><span class="lineno"> 6243</span> testcase &lt;&lt; <span class="stringliteral">&quot;LoanPay Broker Owner Missing Trustline (PoC)&quot;</span>;</div>
<div class="line"><a id="l06244" name="l06244"></a><span class="lineno"> 6244</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06245" name="l06245"></a><span class="lineno"> 6245</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l06246" name="l06246"></a><span class="lineno"> 6246</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l06247" name="l06247"></a><span class="lineno"> 6247</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l06248" name="l06248"></a><span class="lineno"> 6248</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> broker(<span class="stringliteral">&quot;broker&quot;</span>);</div>
<div class="line"><a id="l06249" name="l06249"></a><span class="lineno"> 6249</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a> = issuer[<span class="stringliteral">&quot;IOU&quot;</span>];</div>
<div class="line"><a id="l06250" name="l06250"></a><span class="lineno"> 6250</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l06251" name="l06251"></a><span class="lineno"> 6251</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(20&#39;000), issuer, broker, borrower);</div>
<div class="line"><a id="l06252" name="l06252"></a><span class="lineno"> 6252</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06253" name="l06253"></a><span class="lineno"> 6253</span> <span class="comment">// Set up trustlines and fund accounts</span></div>
<div class="line"><a id="l06254" name="l06254"></a><span class="lineno"> 6254</span> env(trust(broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(20&#39;000&#39;000)));</div>
<div class="line"><a id="l06255" name="l06255"></a><span class="lineno"> 6255</span> env(trust(borrower, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(20&#39;000&#39;000)));</div>
<div class="line"><a id="l06256" name="l06256"></a><span class="lineno"> 6256</span> env(pay(issuer, broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(10&#39;000&#39;000)));</div>
<div class="line"><a id="l06257" name="l06257"></a><span class="lineno"> 6257</span> env(pay(issuer, borrower, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(1&#39;000)));</div>
<div class="line"><a id="l06258" name="l06258"></a><span class="lineno"> 6258</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06259" name="l06259"></a><span class="lineno"> 6259</span> <span class="comment">// Create vault and broker</span></div>
<div class="line"><a id="l06260" name="l06260"></a><span class="lineno"> 6260</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerInfo = createVaultAndBroker(env, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>, broker);</div>
<div class="line"><a id="l06261" name="l06261"></a><span class="lineno"> 6261</span> <span class="comment">// Create a loan first (this creates debt)</span></div>
<div class="line"><a id="l06262" name="l06262"></a><span class="lineno"> 6262</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = keylet::loan(brokerInfo.brokerID, 1);</div>
<div class="line"><a id="l06263" name="l06263"></a><span class="lineno"> 6263</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.brokerID, 10&#39;000),</div>
<div class="line"><a id="l06264" name="l06264"></a><span class="lineno"> 6264</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, broker),</div>
<div class="line"><a id="l06265" name="l06265"></a><span class="lineno"> 6265</span> loanServiceFee(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(100).value()),</div>
<div class="line"><a id="l06266" name="l06266"></a><span class="lineno"> 6266</span> paymentInterval(100),</div>
<div class="line"><a id="l06267" name="l06267"></a><span class="lineno"> 6267</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100)));</div>
<div class="line"><a id="l06268" name="l06268"></a><span class="lineno"> 6268</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06269" name="l06269"></a><span class="lineno"> 6269</span> <span class="comment">// Ensure broker has sufficient cover so brokerPayee == brokerOwner</span></div>
<div class="line"><a id="l06270" name="l06270"></a><span class="lineno"> 6270</span> <span class="comment">// We need coverAvailable &gt;= (debtTotal * coverRateMinimum)</span></div>
<div class="line"><a id="l06271" name="l06271"></a><span class="lineno"> 6271</span> <span class="comment">// Deposit enough cover to ensure the fee goes to broker owner</span></div>
<div class="line"><a id="l06272" name="l06272"></a><span class="lineno"> 6272</span> <span class="comment">// The default coverRateMinimum is 10%, so for a 10,000 loan we need</span></div>
<div class="line"><a id="l06273" name="l06273"></a><span class="lineno"> 6273</span> <span class="comment">// at least 1,000 cover. Default cover is 1,000, so we add more to be</span></div>
<div class="line"><a id="l06274" name="l06274"></a><span class="lineno"> 6274</span> <span class="comment">// safe.</span></div>
<div class="line"><a id="l06275" name="l06275"></a><span class="lineno"> 6275</span> <span class="keyword">auto</span> <span class="keyword">const</span> additionalCover = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(50&#39;000).value();</div>
<div class="line"><a id="l06276" name="l06276"></a><span class="lineno"> 6276</span> env(loanBroker::coverDeposit(broker, brokerInfo.brokerID, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{IOU, additionalCover}));</div>
<div class="line"><a id="l06277" name="l06277"></a><span class="lineno"> 6277</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06278" name="l06278"></a><span class="lineno"> 6278</span> <span class="comment">// Verify broker owner has a trustline</span></div>
<div class="line"><a id="l06279" name="l06279"></a><span class="lineno"> 6279</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerTrustline = keylet::line(broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>);</div>
<div class="line"><a id="l06280" name="l06280"></a><span class="lineno"> 6280</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerTrustline) != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l06281" name="l06281"></a><span class="lineno"> 6281</span> <span class="comment">// Broker owner deletes their trustline</span></div>
<div class="line"><a id="l06282" name="l06282"></a><span class="lineno"> 6282</span> <span class="comment">// First, pay any positive balance to issuer to zero it out</span></div>
<div class="line"><a id="l06283" name="l06283"></a><span class="lineno"> 6283</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerBalance = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>);</div>
<div class="line"><a id="l06284" name="l06284"></a><span class="lineno"> 6284</span> env(pay(broker, issuer, brokerBalance));</div>
<div class="line"><a id="l06285" name="l06285"></a><span class="lineno"> 6285</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06286" name="l06286"></a><span class="lineno"> 6286</span> <span class="comment">// Remove the trustline by setting limit to 0</span></div>
<div class="line"><a id="l06287" name="l06287"></a><span class="lineno"> 6287</span> env(trust(broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(0)));</div>
<div class="line"><a id="l06288" name="l06288"></a><span class="lineno"> 6288</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06289" name="l06289"></a><span class="lineno"> 6289</span> <span class="comment">// Verify trustline is deleted</span></div>
<div class="line"><a id="l06290" name="l06290"></a><span class="lineno"> 6290</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerTrustline) == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l06291" name="l06291"></a><span class="lineno"> 6291</span> <span class="comment">// Now borrower tries to make a payment</span></div>
<div class="line"><a id="l06292" name="l06292"></a><span class="lineno"> 6292</span> <span class="comment">// We should get a tesSUCCESS instead of a tecNO_LINE.</span></div>
<div class="line"><a id="l06293" name="l06293"></a><span class="lineno"> 6293</span> env(pay(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(10&#39;100)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l06294" name="l06294"></a><span class="lineno"> 6294</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06295" name="l06295"></a><span class="lineno"> 6295</span> <span class="comment">// Verify trustline is still deleted</span></div>
<div class="line"><a id="l06296" name="l06296"></a><span class="lineno"> 6296</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerTrustline) == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l06297" name="l06297"></a><span class="lineno"> 6297</span> <span class="comment">// Verify the service fee went to the broker pseudo-account</span></div>
<div class="line"><a id="l06298" name="l06298"></a><span class="lineno"> 6298</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(brokerInfo.brokerID)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l06299" name="l06299"></a><span class="lineno"> 6299</span> {</div>
<div class="line"><a id="l06300" name="l06300"></a><span class="lineno"> 6300</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> pseudo(<span class="stringliteral">&quot;pseudo-account&quot;</span>, brokerSle-&gt;at(sfAccount));</div>
<div class="line"><a id="l06301" name="l06301"></a><span class="lineno"> 6301</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a> = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(pseudo, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>);</div>
<div class="line"><a id="l06302" name="l06302"></a><span class="lineno"> 6302</span> <span class="comment">// 1,000 default + 50,000 extra + 100 service fee from LoanPay</span></div>
<div class="line"><a id="l06303" name="l06303"></a><span class="lineno"> 6303</span> BEAST_EXPECTS(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a> == <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1IOU.html">IOU</a>(51&#39;100), to_string(<a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a>)));</div>
<div class="line"><a id="l06304" name="l06304"></a><span class="lineno"> 6304</span> }</div>
<div class="line"><a id="l06305" name="l06305"></a><span class="lineno"> 6305</span> }</div>
</div>
<div class="line"><a id="l06306" name="l06306"></a><span class="lineno"> 6306</span> </div>
<div class="line"><a id="l06307" name="l06307"></a><span class="lineno"> 6307</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen06308" data-start="{" data-end="}">
<div class="line"><a id="l06308" name="l06308"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a6aff6818be67620fa3f456fb57590e4c"> 6308</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a6aff6818be67620fa3f456fb57590e4c">testLoanPayBrokerOwnerUnauthorizedMPT</a>()</div>
<div class="line"><a id="l06309" name="l06309"></a><span class="lineno"> 6309</span> {</div>
<div class="line"><a id="l06310" name="l06310"></a><span class="lineno"> 6310</span> testcase &lt;&lt; <span class="stringliteral">&quot;LoanPay Broker Owner MPT unauthorized&quot;</span>;</div>
<div class="line"><a id="l06311" name="l06311"></a><span class="lineno"> 6311</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06312" name="l06312"></a><span class="lineno"> 6312</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l06313" name="l06313"></a><span class="lineno"> 6313</span> </div>
<div class="line"><a id="l06314" name="l06314"></a><span class="lineno"> 6314</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l06315" name="l06315"></a><span class="lineno"> 6315</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l06316" name="l06316"></a><span class="lineno"> 6316</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> broker(<span class="stringliteral">&quot;broker&quot;</span>);</div>
<div class="line"><a id="l06317" name="l06317"></a><span class="lineno"> 6317</span> </div>
<div class="line"><a id="l06318" name="l06318"></a><span class="lineno"> 6318</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l06319" name="l06319"></a><span class="lineno"> 6319</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(20&#39;000), issuer, broker, borrower);</div>
<div class="line"><a id="l06320" name="l06320"></a><span class="lineno"> 6320</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06321" name="l06321"></a><span class="lineno"> 6321</span> </div>
<div class="line"><a id="l06322" name="l06322"></a><span class="lineno"> 6322</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptt{env, issuer, mptInitNoFund};</div>
<div class="line"><a id="l06323" name="l06323"></a><span class="lineno"> 6323</span> mptt.create({.flags = <a class="code hl_variable" href="namespacexrpl.html#a843e5f9ce3b55788961db32fffb753d1">tfMPTCanClawback</a> | <a class="code hl_variable" href="namespacexrpl.html#a25a16d1e4a00f49801b8f6fd16da0459">tfMPTCanTransfer</a> | <a class="code hl_variable" href="namespacexrpl.html#a75a6d6ab0752128773a7c28ec32fa5d1">tfMPTCanLock</a>});</div>
<div class="line"><a id="l06324" name="l06324"></a><span class="lineno"> 6324</span> </div>
<div class="line"><a id="l06325" name="l06325"></a><span class="lineno"> 6325</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>{mptt.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1MPT.html#a1d9c328d681c9f90eb52ae5c5163af7a">issuanceID</a>()};</div>
<div class="line"><a id="l06326" name="l06326"></a><span class="lineno"> 6326</span> </div>
<div class="line"><a id="l06327" name="l06327"></a><span class="lineno"> 6327</span> <span class="comment">// Authorize broker and borrower</span></div>
<div class="line"><a id="l06328" name="l06328"></a><span class="lineno"> 6328</span> mptt.authorize({.account = broker});</div>
<div class="line"><a id="l06329" name="l06329"></a><span class="lineno"> 6329</span> mptt.authorize({.account = borrower});</div>
<div class="line"><a id="l06330" name="l06330"></a><span class="lineno"> 6330</span> </div>
<div class="line"><a id="l06331" name="l06331"></a><span class="lineno"> 6331</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06332" name="l06332"></a><span class="lineno"> 6332</span> </div>
<div class="line"><a id="l06333" name="l06333"></a><span class="lineno"> 6333</span> <span class="comment">// Fund accounts</span></div>
<div class="line"><a id="l06334" name="l06334"></a><span class="lineno"> 6334</span> env(pay(issuer, broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(10&#39;000&#39;000)));</div>
<div class="line"><a id="l06335" name="l06335"></a><span class="lineno"> 6335</span> env(pay(issuer, borrower, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(1&#39;000)));</div>
<div class="line"><a id="l06336" name="l06336"></a><span class="lineno"> 6336</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06337" name="l06337"></a><span class="lineno"> 6337</span> </div>
<div class="line"><a id="l06338" name="l06338"></a><span class="lineno"> 6338</span> <span class="comment">// Create vault and broker</span></div>
<div class="line"><a id="l06339" name="l06339"></a><span class="lineno"> 6339</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerInfo = createVaultAndBroker(env, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>, broker);</div>
<div class="line"><a id="l06340" name="l06340"></a><span class="lineno"> 6340</span> <span class="comment">// Create a loan first (this creates debt)</span></div>
<div class="line"><a id="l06341" name="l06341"></a><span class="lineno"> 6341</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = keylet::loan(brokerInfo.brokerID, 1);</div>
<div class="line"><a id="l06342" name="l06342"></a><span class="lineno"> 6342</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.brokerID, 10&#39;000),</div>
<div class="line"><a id="l06343" name="l06343"></a><span class="lineno"> 6343</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, broker),</div>
<div class="line"><a id="l06344" name="l06344"></a><span class="lineno"> 6344</span> loanServiceFee(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(100).value()),</div>
<div class="line"><a id="l06345" name="l06345"></a><span class="lineno"> 6345</span> paymentInterval(100),</div>
<div class="line"><a id="l06346" name="l06346"></a><span class="lineno"> 6346</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100)));</div>
<div class="line"><a id="l06347" name="l06347"></a><span class="lineno"> 6347</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06348" name="l06348"></a><span class="lineno"> 6348</span> <span class="comment">// Ensure broker has sufficient cover so brokerPayee == brokerOwner</span></div>
<div class="line"><a id="l06349" name="l06349"></a><span class="lineno"> 6349</span> <span class="comment">// We need coverAvailable &gt;= (debtTotal * coverRateMinimum)</span></div>
<div class="line"><a id="l06350" name="l06350"></a><span class="lineno"> 6350</span> <span class="comment">// Deposit enough cover to ensure the fee goes to broker owner</span></div>
<div class="line"><a id="l06351" name="l06351"></a><span class="lineno"> 6351</span> <span class="comment">// The default coverRateMinimum is 10%, so for a 10,000 loan we need</span></div>
<div class="line"><a id="l06352" name="l06352"></a><span class="lineno"> 6352</span> <span class="comment">// at least 1,000 cover. Default cover is 1,000, so we add more to be</span></div>
<div class="line"><a id="l06353" name="l06353"></a><span class="lineno"> 6353</span> <span class="comment">// safe.</span></div>
<div class="line"><a id="l06354" name="l06354"></a><span class="lineno"> 6354</span> <span class="keyword">auto</span> <span class="keyword">const</span> additionalCover = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(50&#39;000).value();</div>
<div class="line"><a id="l06355" name="l06355"></a><span class="lineno"> 6355</span> env(loanBroker::coverDeposit(broker, brokerInfo.brokerID, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{MPT, additionalCover}));</div>
<div class="line"><a id="l06356" name="l06356"></a><span class="lineno"> 6356</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06357" name="l06357"></a><span class="lineno"> 6357</span> <span class="comment">// Verify broker owner is authorized</span></div>
<div class="line"><a id="l06358" name="l06358"></a><span class="lineno"> 6358</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerMpt = keylet::mptoken(mptt.issuanceID(), broker);</div>
<div class="line"><a id="l06359" name="l06359"></a><span class="lineno"> 6359</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerMpt) != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l06360" name="l06360"></a><span class="lineno"> 6360</span> <span class="comment">// Broker owner unauthorizes.</span></div>
<div class="line"><a id="l06361" name="l06361"></a><span class="lineno"> 6361</span> <span class="comment">// First, pay any positive balance to issuer to zero it out</span></div>
<div class="line"><a id="l06362" name="l06362"></a><span class="lineno"> 6362</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerBalance = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>);</div>
<div class="line"><a id="l06363" name="l06363"></a><span class="lineno"> 6363</span> env(pay(broker, issuer, brokerBalance));</div>
<div class="line"><a id="l06364" name="l06364"></a><span class="lineno"> 6364</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06365" name="l06365"></a><span class="lineno"> 6365</span> <span class="comment">// Then, unauthorize the MPT.</span></div>
<div class="line"><a id="l06366" name="l06366"></a><span class="lineno"> 6366</span> mptt.authorize({.account = broker, .flags = <a class="code hl_variable" href="namespacexrpl.html#aae07b590d51f8a8c8d93dfb4b05b1032">tfMPTUnauthorize</a>});</div>
<div class="line"><a id="l06367" name="l06367"></a><span class="lineno"> 6367</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06368" name="l06368"></a><span class="lineno"> 6368</span> <span class="comment">// Verify the MPT is unauthorized.</span></div>
<div class="line"><a id="l06369" name="l06369"></a><span class="lineno"> 6369</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerMpt) == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l06370" name="l06370"></a><span class="lineno"> 6370</span> <span class="comment">// Now borrower tries to make a payment</span></div>
<div class="line"><a id="l06371" name="l06371"></a><span class="lineno"> 6371</span> <span class="comment">// We should get a tesSUCCESS instead of a tecNO_AUTH.</span></div>
<div class="line"><a id="l06372" name="l06372"></a><span class="lineno"> 6372</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerBalance = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>);</div>
<div class="line"><a id="l06373" name="l06373"></a><span class="lineno"> 6373</span> env(pay(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(10&#39;100)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l06374" name="l06374"></a><span class="lineno"> 6374</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06375" name="l06375"></a><span class="lineno"> 6375</span> <span class="comment">// Verify the MPT is still unauthorized.</span></div>
<div class="line"><a id="l06376" name="l06376"></a><span class="lineno"> 6376</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerMpt) == <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l06377" name="l06377"></a><span class="lineno"> 6377</span> <span class="comment">// Verify the service fee went to the broker pseudo-account</span></div>
<div class="line"><a id="l06378" name="l06378"></a><span class="lineno"> 6378</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(brokerInfo.brokerID)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l06379" name="l06379"></a><span class="lineno"> 6379</span> {</div>
<div class="line"><a id="l06380" name="l06380"></a><span class="lineno"> 6380</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> pseudo(<span class="stringliteral">&quot;pseudo-account&quot;</span>, brokerSle-&gt;at(sfAccount));</div>
<div class="line"><a id="l06381" name="l06381"></a><span class="lineno"> 6381</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a> = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(pseudo, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>);</div>
<div class="line"><a id="l06382" name="l06382"></a><span class="lineno"> 6382</span> <span class="comment">// 1,000 default + 50,000 extra + 100 service fee from LoanPay</span></div>
<div class="line"><a id="l06383" name="l06383"></a><span class="lineno"> 6383</span> BEAST_EXPECTS(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a> == <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(51&#39;100), to_string(<a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a>)));</div>
<div class="line"><a id="l06384" name="l06384"></a><span class="lineno"> 6384</span> }</div>
<div class="line"><a id="l06385" name="l06385"></a><span class="lineno"> 6385</span> }</div>
</div>
<div class="line"><a id="l06386" name="l06386"></a><span class="lineno"> 6386</span> </div>
<div class="line"><a id="l06387" name="l06387"></a><span class="lineno"> 6387</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen06388" data-start="{" data-end="}">
<div class="line"><a id="l06388" name="l06388"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a16e7ed053e28fb64edbc031843eff1a6"> 6388</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a16e7ed053e28fb64edbc031843eff1a6">testLoanPayBrokerOwnerNoPermissionedDomainMPT</a>()</div>
<div class="line"><a id="l06389" name="l06389"></a><span class="lineno"> 6389</span> {</div>
<div class="line"><a id="l06390" name="l06390"></a><span class="lineno"> 6390</span> testcase &lt;&lt; <span class="stringliteral">&quot;LoanPay Broker Owner without permissioned domain of the MPT&quot;</span>;</div>
<div class="line"><a id="l06391" name="l06391"></a><span class="lineno"> 6391</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06392" name="l06392"></a><span class="lineno"> 6392</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l06393" name="l06393"></a><span class="lineno"> 6393</span> </div>
<div class="line"><a id="l06394" name="l06394"></a><span class="lineno"> 6394</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l06395" name="l06395"></a><span class="lineno"> 6395</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l06396" name="l06396"></a><span class="lineno"> 6396</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> broker(<span class="stringliteral">&quot;broker&quot;</span>);</div>
<div class="line"><a id="l06397" name="l06397"></a><span class="lineno"> 6397</span> </div>
<div class="line"><a id="l06398" name="l06398"></a><span class="lineno"> 6398</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l06399" name="l06399"></a><span class="lineno"> 6399</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(20&#39;000), issuer, broker, borrower);</div>
<div class="line"><a id="l06400" name="l06400"></a><span class="lineno"> 6400</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06401" name="l06401"></a><span class="lineno"> 6401</span> </div>
<div class="line"><a id="l06402" name="l06402"></a><span class="lineno"> 6402</span> <span class="keyword">auto</span> credType = <span class="stringliteral">&quot;credential1&quot;</span>;</div>
<div class="line"><a id="l06403" name="l06403"></a><span class="lineno"> 6403</span> </div>
<div class="line"><a id="l06404" name="l06404"></a><span class="lineno"> 6404</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">pdomain::Credentials</a> <span class="keyword">const</span> credentials1{{issuer, credType}};</div>
<div class="line"><a id="l06405" name="l06405"></a><span class="lineno"> 6405</span> env(pdomain::setTx(issuer, credentials1));</div>
<div class="line"><a id="l06406" name="l06406"></a><span class="lineno"> 6406</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06407" name="l06407"></a><span class="lineno"> 6407</span> </div>
<div class="line"><a id="l06408" name="l06408"></a><span class="lineno"> 6408</span> <span class="keyword">auto</span> domainID = pdomain::getNewDomain(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ad0dadd1b0b0ef450a705dccc06d02646">meta</a>());</div>
<div class="line"><a id="l06409" name="l06409"></a><span class="lineno"> 6409</span> </div>
<div class="line"><a id="l06410" name="l06410"></a><span class="lineno"> 6410</span> env(credentials::create(broker, issuer, credType));</div>
<div class="line"><a id="l06411" name="l06411"></a><span class="lineno"> 6411</span> env(credentials::accept(broker, issuer, credType));</div>
<div class="line"><a id="l06412" name="l06412"></a><span class="lineno"> 6412</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06413" name="l06413"></a><span class="lineno"> 6413</span> </div>
<div class="line"><a id="l06414" name="l06414"></a><span class="lineno"> 6414</span> env(credentials::create(borrower, issuer, credType));</div>
<div class="line"><a id="l06415" name="l06415"></a><span class="lineno"> 6415</span> env(credentials::accept(borrower, issuer, credType));</div>
<div class="line"><a id="l06416" name="l06416"></a><span class="lineno"> 6416</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06417" name="l06417"></a><span class="lineno"> 6417</span> </div>
<div class="line"><a id="l06418" name="l06418"></a><span class="lineno"> 6418</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptt{env, issuer, mptInitNoFund};</div>
<div class="line"><a id="l06419" name="l06419"></a><span class="lineno"> 6419</span> mptt.create({</div>
<div class="line"><a id="l06420" name="l06420"></a><span class="lineno"> 6420</span> .flags = <a class="code hl_variable" href="namespacexrpl.html#a843e5f9ce3b55788961db32fffb753d1">tfMPTCanClawback</a> | <a class="code hl_variable" href="namespacexrpl.html#a3b504b2dedf069a5041193be2504e319">tfMPTRequireAuth</a> | <a class="code hl_variable" href="namespacexrpl.html#a25a16d1e4a00f49801b8f6fd16da0459">tfMPTCanTransfer</a> | <a class="code hl_variable" href="namespacexrpl.html#a75a6d6ab0752128773a7c28ec32fa5d1">tfMPTCanLock</a>,</div>
<div class="line"><a id="l06421" name="l06421"></a><span class="lineno"> 6421</span> .domainID = domainID,</div>
<div class="line"><a id="l06422" name="l06422"></a><span class="lineno"> 6422</span> });</div>
<div class="line"><a id="l06423" name="l06423"></a><span class="lineno"> 6423</span> </div>
<div class="line"><a id="l06424" name="l06424"></a><span class="lineno"> 6424</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>{mptt.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1MPT.html#a1d9c328d681c9f90eb52ae5c5163af7a">issuanceID</a>()};</div>
<div class="line"><a id="l06425" name="l06425"></a><span class="lineno"> 6425</span> </div>
<div class="line"><a id="l06426" name="l06426"></a><span class="lineno"> 6426</span> <span class="comment">// Authorize broker and borrower</span></div>
<div class="line"><a id="l06427" name="l06427"></a><span class="lineno"> 6427</span> mptt.authorize({.account = broker});</div>
<div class="line"><a id="l06428" name="l06428"></a><span class="lineno"> 6428</span> mptt.authorize({.account = borrower});</div>
<div class="line"><a id="l06429" name="l06429"></a><span class="lineno"> 6429</span> </div>
<div class="line"><a id="l06430" name="l06430"></a><span class="lineno"> 6430</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06431" name="l06431"></a><span class="lineno"> 6431</span> </div>
<div class="line"><a id="l06432" name="l06432"></a><span class="lineno"> 6432</span> <span class="comment">// Fund accounts</span></div>
<div class="line"><a id="l06433" name="l06433"></a><span class="lineno"> 6433</span> env(pay(issuer, broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(10&#39;000&#39;000)));</div>
<div class="line"><a id="l06434" name="l06434"></a><span class="lineno"> 6434</span> env(pay(issuer, borrower, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(1&#39;000)));</div>
<div class="line"><a id="l06435" name="l06435"></a><span class="lineno"> 6435</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06436" name="l06436"></a><span class="lineno"> 6436</span> </div>
<div class="line"><a id="l06437" name="l06437"></a><span class="lineno"> 6437</span> <span class="comment">// Create vault and broker</span></div>
<div class="line"><a id="l06438" name="l06438"></a><span class="lineno"> 6438</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerInfo = createVaultAndBroker(env, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>, broker);</div>
<div class="line"><a id="l06439" name="l06439"></a><span class="lineno"> 6439</span> <span class="comment">// Create a loan first (this creates debt)</span></div>
<div class="line"><a id="l06440" name="l06440"></a><span class="lineno"> 6440</span> <span class="keyword">auto</span> <span class="keyword">const</span> keylet = keylet::loan(brokerInfo.brokerID, 1);</div>
<div class="line"><a id="l06441" name="l06441"></a><span class="lineno"> 6441</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.brokerID, 10&#39;000),</div>
<div class="line"><a id="l06442" name="l06442"></a><span class="lineno"> 6442</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, broker),</div>
<div class="line"><a id="l06443" name="l06443"></a><span class="lineno"> 6443</span> loanServiceFee(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(100).value()),</div>
<div class="line"><a id="l06444" name="l06444"></a><span class="lineno"> 6444</span> paymentInterval(100),</div>
<div class="line"><a id="l06445" name="l06445"></a><span class="lineno"> 6445</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100)));</div>
<div class="line"><a id="l06446" name="l06446"></a><span class="lineno"> 6446</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06447" name="l06447"></a><span class="lineno"> 6447</span> <span class="comment">// Ensure broker has sufficient cover so brokerPayee == brokerOwner</span></div>
<div class="line"><a id="l06448" name="l06448"></a><span class="lineno"> 6448</span> <span class="comment">// We need coverAvailable &gt;= (debtTotal * coverRateMinimum)</span></div>
<div class="line"><a id="l06449" name="l06449"></a><span class="lineno"> 6449</span> <span class="comment">// Deposit enough cover to ensure the fee goes to broker owner</span></div>
<div class="line"><a id="l06450" name="l06450"></a><span class="lineno"> 6450</span> <span class="comment">// The default coverRateMinimum is 10%, so for a 10,000 loan we need</span></div>
<div class="line"><a id="l06451" name="l06451"></a><span class="lineno"> 6451</span> <span class="comment">// at least 1,000 cover. Default cover is 1,000, so we add more to be</span></div>
<div class="line"><a id="l06452" name="l06452"></a><span class="lineno"> 6452</span> <span class="comment">// safe.</span></div>
<div class="line"><a id="l06453" name="l06453"></a><span class="lineno"> 6453</span> <span class="keyword">auto</span> <span class="keyword">const</span> additionalCover = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(50&#39;000).value();</div>
<div class="line"><a id="l06454" name="l06454"></a><span class="lineno"> 6454</span> env(loanBroker::coverDeposit(broker, brokerInfo.brokerID, <a class="code hl_class" href="classxrpl_1_1STAmount.html">STAmount</a>{MPT, additionalCover}));</div>
<div class="line"><a id="l06455" name="l06455"></a><span class="lineno"> 6455</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06456" name="l06456"></a><span class="lineno"> 6456</span> <span class="comment">// Verify broker owner is authorized</span></div>
<div class="line"><a id="l06457" name="l06457"></a><span class="lineno"> 6457</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerMpt = keylet::mptoken(mptt.issuanceID(), broker);</div>
<div class="line"><a id="l06458" name="l06458"></a><span class="lineno"> 6458</span> BEAST_EXPECT(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerMpt) != <span class="keyword">nullptr</span>);</div>
<div class="line"><a id="l06459" name="l06459"></a><span class="lineno"> 6459</span> <span class="comment">// Remove the credentials for the Broker owner.</span></div>
<div class="line"><a id="l06460" name="l06460"></a><span class="lineno"> 6460</span> <span class="comment">// First, pay any positive balance to issuer to zero it out</span></div>
<div class="line"><a id="l06461" name="l06461"></a><span class="lineno"> 6461</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerBalance = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>);</div>
<div class="line"><a id="l06462" name="l06462"></a><span class="lineno"> 6462</span> env(pay(broker, issuer, brokerBalance));</div>
<div class="line"><a id="l06463" name="l06463"></a><span class="lineno"> 6463</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06464" name="l06464"></a><span class="lineno"> 6464</span> </div>
<div class="line"><a id="l06465" name="l06465"></a><span class="lineno"> 6465</span> env(credentials::deleteCred(broker, broker, issuer, credType));</div>
<div class="line"><a id="l06466" name="l06466"></a><span class="lineno"> 6466</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06467" name="l06467"></a><span class="lineno"> 6467</span> </div>
<div class="line"><a id="l06468" name="l06468"></a><span class="lineno"> 6468</span> <span class="comment">// Make sure the broker is not authorized to hold the MPT after we</span></div>
<div class="line"><a id="l06469" name="l06469"></a><span class="lineno"> 6469</span> <span class="comment">// deleted the credentials</span></div>
<div class="line"><a id="l06470" name="l06470"></a><span class="lineno"> 6470</span> env(pay(issuer, broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(1&#39;000)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba569f106a7939f40810643264335e9786">tecNO_AUTH</a>));</div>
<div class="line"><a id="l06471" name="l06471"></a><span class="lineno"> 6471</span> </div>
<div class="line"><a id="l06472" name="l06472"></a><span class="lineno"> 6472</span> <span class="comment">// Now borrower tries to make a payment</span></div>
<div class="line"><a id="l06473" name="l06473"></a><span class="lineno"> 6473</span> <span class="comment">// We should get a tesSUCCESS instead of a tecNO_AUTH.</span></div>
<div class="line"><a id="l06474" name="l06474"></a><span class="lineno"> 6474</span> <span class="keyword">auto</span> <span class="keyword">const</span> borrowerBalance = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(borrower, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>);</div>
<div class="line"><a id="l06475" name="l06475"></a><span class="lineno"> 6475</span> env(pay(borrower, keylet.<a class="code hl_variable" href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">key</a>, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(10&#39;100)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l06476" name="l06476"></a><span class="lineno"> 6476</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06477" name="l06477"></a><span class="lineno"> 6477</span> <span class="comment">// Verify broker is still not authorized</span></div>
<div class="line"><a id="l06478" name="l06478"></a><span class="lineno"> 6478</span> env(pay(issuer, broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(1&#39;000)), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba569f106a7939f40810643264335e9786">tecNO_AUTH</a>));</div>
<div class="line"><a id="l06479" name="l06479"></a><span class="lineno"> 6479</span> <span class="comment">// Verify the service fee went to the broker pseudo-account</span></div>
<div class="line"><a id="l06480" name="l06480"></a><span class="lineno"> 6480</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(keylet::loanbroker(brokerInfo.brokerID)); BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l06481" name="l06481"></a><span class="lineno"> 6481</span> {</div>
<div class="line"><a id="l06482" name="l06482"></a><span class="lineno"> 6482</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> pseudo(<span class="stringliteral">&quot;pseudo-account&quot;</span>, brokerSle-&gt;at(sfAccount));</div>
<div class="line"><a id="l06483" name="l06483"></a><span class="lineno"> 6483</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a> = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(pseudo, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>);</div>
<div class="line"><a id="l06484" name="l06484"></a><span class="lineno"> 6484</span> <span class="comment">// 1,000 default + 50,000 extra + 100 service fee from LoanPay</span></div>
<div class="line"><a id="l06485" name="l06485"></a><span class="lineno"> 6485</span> BEAST_EXPECTS(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a> == <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(51&#39;100), to_string(<a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1balance.html">balance</a>)));</div>
<div class="line"><a id="l06486" name="l06486"></a><span class="lineno"> 6486</span> }</div>
<div class="line"><a id="l06487" name="l06487"></a><span class="lineno"> 6487</span> }</div>
</div>
<div class="line"><a id="l06488" name="l06488"></a><span class="lineno"> 6488</span> </div>
<div class="line"><a id="l06489" name="l06489"></a><span class="lineno"> 6489</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen06490" data-start="{" data-end="}">
<div class="line"><a id="l06490" name="l06490"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a26fce516afdd88ce328eb365eae1c226"> 6490</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a26fce516afdd88ce328eb365eae1c226">testLoanSetBrokerOwnerNoPermissionedDomainMPT</a>()</div>
<div class="line"><a id="l06491" name="l06491"></a><span class="lineno"> 6491</span> {</div>
<div class="line"><a id="l06492" name="l06492"></a><span class="lineno"> 6492</span> testcase &lt;&lt; <span class="stringliteral">&quot;LoanSet Broker Owner without permissioned domain of the MPT&quot;</span>;</div>
<div class="line"><a id="l06493" name="l06493"></a><span class="lineno"> 6493</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06494" name="l06494"></a><span class="lineno"> 6494</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l06495" name="l06495"></a><span class="lineno"> 6495</span> </div>
<div class="line"><a id="l06496" name="l06496"></a><span class="lineno"> 6496</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l06497" name="l06497"></a><span class="lineno"> 6497</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l06498" name="l06498"></a><span class="lineno"> 6498</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> broker(<span class="stringliteral">&quot;broker&quot;</span>);</div>
<div class="line"><a id="l06499" name="l06499"></a><span class="lineno"> 6499</span> </div>
<div class="line"><a id="l06500" name="l06500"></a><span class="lineno"> 6500</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l06501" name="l06501"></a><span class="lineno"> 6501</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(20&#39;000), issuer, broker, borrower);</div>
<div class="line"><a id="l06502" name="l06502"></a><span class="lineno"> 6502</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06503" name="l06503"></a><span class="lineno"> 6503</span> </div>
<div class="line"><a id="l06504" name="l06504"></a><span class="lineno"> 6504</span> <span class="keyword">auto</span> credType = <span class="stringliteral">&quot;credential1&quot;</span>;</div>
<div class="line"><a id="l06505" name="l06505"></a><span class="lineno"> 6505</span> </div>
<div class="line"><a id="l06506" name="l06506"></a><span class="lineno"> 6506</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">pdomain::Credentials</a> <span class="keyword">const</span> credentials1{{issuer, credType}};</div>
<div class="line"><a id="l06507" name="l06507"></a><span class="lineno"> 6507</span> env(pdomain::setTx(issuer, credentials1));</div>
<div class="line"><a id="l06508" name="l06508"></a><span class="lineno"> 6508</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06509" name="l06509"></a><span class="lineno"> 6509</span> </div>
<div class="line"><a id="l06510" name="l06510"></a><span class="lineno"> 6510</span> <span class="keyword">auto</span> domainID = pdomain::getNewDomain(env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#ad0dadd1b0b0ef450a705dccc06d02646">meta</a>());</div>
<div class="line"><a id="l06511" name="l06511"></a><span class="lineno"> 6511</span> </div>
<div class="line"><a id="l06512" name="l06512"></a><span class="lineno"> 6512</span> <span class="comment">// Add credentials for the broker and borrower</span></div>
<div class="line"><a id="l06513" name="l06513"></a><span class="lineno"> 6513</span> env(credentials::create(broker, issuer, credType));</div>
<div class="line"><a id="l06514" name="l06514"></a><span class="lineno"> 6514</span> env(credentials::accept(broker, issuer, credType));</div>
<div class="line"><a id="l06515" name="l06515"></a><span class="lineno"> 6515</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06516" name="l06516"></a><span class="lineno"> 6516</span> </div>
<div class="line"><a id="l06517" name="l06517"></a><span class="lineno"> 6517</span> env(credentials::create(borrower, issuer, credType));</div>
<div class="line"><a id="l06518" name="l06518"></a><span class="lineno"> 6518</span> env(credentials::accept(borrower, issuer, credType));</div>
<div class="line"><a id="l06519" name="l06519"></a><span class="lineno"> 6519</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06520" name="l06520"></a><span class="lineno"> 6520</span> </div>
<div class="line"><a id="l06521" name="l06521"></a><span class="lineno"> 6521</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptt{env, issuer, mptInitNoFund};</div>
<div class="line"><a id="l06522" name="l06522"></a><span class="lineno"> 6522</span> mptt.create({</div>
<div class="line"><a id="l06523" name="l06523"></a><span class="lineno"> 6523</span> .flags = <a class="code hl_variable" href="namespacexrpl.html#a843e5f9ce3b55788961db32fffb753d1">tfMPTCanClawback</a> | <a class="code hl_variable" href="namespacexrpl.html#a3b504b2dedf069a5041193be2504e319">tfMPTRequireAuth</a> | <a class="code hl_variable" href="namespacexrpl.html#a25a16d1e4a00f49801b8f6fd16da0459">tfMPTCanTransfer</a> | <a class="code hl_variable" href="namespacexrpl.html#a75a6d6ab0752128773a7c28ec32fa5d1">tfMPTCanLock</a>,</div>
<div class="line"><a id="l06524" name="l06524"></a><span class="lineno"> 6524</span> .domainID = domainID,</div>
<div class="line"><a id="l06525" name="l06525"></a><span class="lineno"> 6525</span> });</div>
<div class="line"><a id="l06526" name="l06526"></a><span class="lineno"> 6526</span> </div>
<div class="line"><a id="l06527" name="l06527"></a><span class="lineno"> 6527</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>{mptt.<a class="code hl_variable" href="classxrpl_1_1test_1_1jtx_1_1MPT.html#a1d9c328d681c9f90eb52ae5c5163af7a">issuanceID</a>()};</div>
<div class="line"><a id="l06528" name="l06528"></a><span class="lineno"> 6528</span> </div>
<div class="line"><a id="l06529" name="l06529"></a><span class="lineno"> 6529</span> <span class="comment">// Authorize broker and borrower</span></div>
<div class="line"><a id="l06530" name="l06530"></a><span class="lineno"> 6530</span> mptt.authorize({.account = broker});</div>
<div class="line"><a id="l06531" name="l06531"></a><span class="lineno"> 6531</span> mptt.authorize({.account = borrower});</div>
<div class="line"><a id="l06532" name="l06532"></a><span class="lineno"> 6532</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06533" name="l06533"></a><span class="lineno"> 6533</span> </div>
<div class="line"><a id="l06534" name="l06534"></a><span class="lineno"> 6534</span> <span class="comment">// Fund accounts</span></div>
<div class="line"><a id="l06535" name="l06535"></a><span class="lineno"> 6535</span> env(pay(issuer, broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(10&#39;000&#39;000)));</div>
<div class="line"><a id="l06536" name="l06536"></a><span class="lineno"> 6536</span> env(pay(issuer, borrower, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(1&#39;000)));</div>
<div class="line"><a id="l06537" name="l06537"></a><span class="lineno"> 6537</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06538" name="l06538"></a><span class="lineno"> 6538</span> </div>
<div class="line"><a id="l06539" name="l06539"></a><span class="lineno"> 6539</span> <span class="comment">// Create vault and broker</span></div>
<div class="line"><a id="l06540" name="l06540"></a><span class="lineno"> 6540</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerInfo = createVaultAndBroker(env, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>, broker);</div>
<div class="line"><a id="l06541" name="l06541"></a><span class="lineno"> 6541</span> </div>
<div class="line"><a id="l06542" name="l06542"></a><span class="lineno"> 6542</span> <span class="comment">// Remove the credentials for the Broker owner.</span></div>
<div class="line"><a id="l06543" name="l06543"></a><span class="lineno"> 6543</span> <span class="comment">// Clear the balance first.</span></div>
<div class="line"><a id="l06544" name="l06544"></a><span class="lineno"> 6544</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerBalance = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">balance</a>(broker, <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>);</div>
<div class="line"><a id="l06545" name="l06545"></a><span class="lineno"> 6545</span> env(pay(broker, issuer, brokerBalance));</div>
<div class="line"><a id="l06546" name="l06546"></a><span class="lineno"> 6546</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06547" name="l06547"></a><span class="lineno"> 6547</span> <span class="comment">// Delete the credentials</span></div>
<div class="line"><a id="l06548" name="l06548"></a><span class="lineno"> 6548</span> env(credentials::deleteCred(broker, broker, issuer, credType));</div>
<div class="line"><a id="l06549" name="l06549"></a><span class="lineno"> 6549</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06550" name="l06550"></a><span class="lineno"> 6550</span> </div>
<div class="line"><a id="l06551" name="l06551"></a><span class="lineno"> 6551</span> <span class="comment">// Create a loan, this should fail for tecNO_AUTH</span></div>
<div class="line"><a id="l06552" name="l06552"></a><span class="lineno"> 6552</span> env(<a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrower, brokerInfo.brokerID, 10&#39;000),</div>
<div class="line"><a id="l06553" name="l06553"></a><span class="lineno"> 6553</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, broker),</div>
<div class="line"><a id="l06554" name="l06554"></a><span class="lineno"> 6554</span> loanServiceFee(<a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1MPT.html">MPT</a>(100).value()),</div>
<div class="line"><a id="l06555" name="l06555"></a><span class="lineno"> 6555</span> paymentInterval(100),</div>
<div class="line"><a id="l06556" name="l06556"></a><span class="lineno"> 6556</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(100)),</div>
<div class="line"><a id="l06557" name="l06557"></a><span class="lineno"> 6557</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba569f106a7939f40810643264335e9786">tecNO_AUTH</a>));</div>
<div class="line"><a id="l06558" name="l06558"></a><span class="lineno"> 6558</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06559" name="l06559"></a><span class="lineno"> 6559</span> }</div>
</div>
<div class="line"><a id="l06560" name="l06560"></a><span class="lineno"> 6560</span> </div>
<div class="line"><a id="l06561" name="l06561"></a><span class="lineno"> 6561</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen06562" data-start="{" data-end="}">
<div class="line"><a id="l06562" name="l06562"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#aff3008756f774ed1b2381e1b97cdd87d"> 6562</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#aff3008756f774ed1b2381e1b97cdd87d">testSequentialFLCDepletion</a>()</div>
<div class="line"><a id="l06563" name="l06563"></a><span class="lineno"> 6563</span> {</div>
<div class="line"><a id="l06564" name="l06564"></a><span class="lineno"> 6564</span> testcase &lt;&lt; <span class="stringliteral">&quot;First-Loss Capital Depletion on Sequential Defaults&quot;</span>;</div>
<div class="line"><a id="l06565" name="l06565"></a><span class="lineno"> 6565</span> </div>
<div class="line"><a id="l06566" name="l06566"></a><span class="lineno"> 6566</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06567" name="l06567"></a><span class="lineno"> 6567</span> <span class="keyword">using namespace </span>loan;</div>
<div class="line"><a id="l06568" name="l06568"></a><span class="lineno"> 6568</span> <span class="keyword">using namespace </span>loanBroker;</div>
<div class="line"><a id="l06569" name="l06569"></a><span class="lineno"> 6569</span> </div>
<div class="line"><a id="l06570" name="l06570"></a><span class="lineno"> 6570</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, all);</div>
<div class="line"><a id="l06571" name="l06571"></a><span class="lineno"> 6571</span> </div>
<div class="line"><a id="l06572" name="l06572"></a><span class="lineno"> 6572</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer{<span class="stringliteral">&quot;issuer&quot;</span>};</div>
<div class="line"><a id="l06573" name="l06573"></a><span class="lineno"> 6573</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender{<span class="stringliteral">&quot;lender&quot;</span>};</div>
<div class="line"><a id="l06574" name="l06574"></a><span class="lineno"> 6574</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrowerA{<span class="stringliteral">&quot;borrowerA&quot;</span>};</div>
<div class="line"><a id="l06575" name="l06575"></a><span class="lineno"> 6575</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrowerB{<span class="stringliteral">&quot;borrowerB&quot;</span>};</div>
<div class="line"><a id="l06576" name="l06576"></a><span class="lineno"> 6576</span> </div>
<div class="line"><a id="l06577" name="l06577"></a><span class="lineno"> 6577</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">fund</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(1&#39;000&#39;000), issuer, lender, borrowerA, borrowerB);</div>
<div class="line"><a id="l06578" name="l06578"></a><span class="lineno"> 6578</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06579" name="l06579"></a><span class="lineno"> 6579</span> </div>
<div class="line"><a id="l06580" name="l06580"></a><span class="lineno"> 6580</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">PrettyAsset</a> <span class="keyword">const</span> asset = <a class="code hl_function" href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpIssue</a>();</div>
<div class="line"><a id="l06581" name="l06581"></a><span class="lineno"> 6581</span> <span class="keyword">auto</span> <span class="keyword">const</span> vaultDepositAmount = asset(200&#39;000); <span class="comment">// Enough for 2 x 50k loans plus interest/fees</span></div>
<div class="line"><a id="l06582" name="l06582"></a><span class="lineno"> 6582</span> </div>
<div class="line"><a id="l06583" name="l06583"></a><span class="lineno"> 6583</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerInfo = createVaultAndBroker(</div>
<div class="line"><a id="l06584" name="l06584"></a><span class="lineno"> 6584</span> env,</div>
<div class="line"><a id="l06585" name="l06585"></a><span class="lineno"> 6585</span> asset,</div>
<div class="line"><a id="l06586" name="l06586"></a><span class="lineno"> 6586</span> lender,</div>
<div class="line"><a id="l06587" name="l06587"></a><span class="lineno"> 6587</span> {</div>
<div class="line"><a id="l06588" name="l06588"></a><span class="lineno"> 6588</span> .vaultDeposit = vaultDepositAmount.value(),</div>
<div class="line"><a id="l06589" name="l06589"></a><span class="lineno"> 6589</span> .debtMax = 0,</div>
<div class="line"><a id="l06590" name="l06590"></a><span class="lineno"> 6590</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(20000), <span class="comment">// 20%</span></div>
<div class="line"><a id="l06591" name="l06591"></a><span class="lineno"> 6591</span> .coverDeposit = 21&#39;000,</div>
<div class="line"><a id="l06592" name="l06592"></a><span class="lineno"> 6592</span> .managementFeeRate = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a>(100), <span class="comment">// 0.1%</span></div>
<div class="line"><a id="l06593" name="l06593"></a><span class="lineno"> 6593</span> .coverRateLiquidation = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(100000),</div>
<div class="line"><a id="l06594" name="l06594"></a><span class="lineno"> 6594</span> });</div>
<div class="line"><a id="l06595" name="l06595"></a><span class="lineno"> 6595</span> <span class="keyword">auto</span> <span class="keyword">const</span> brokerKeylet = brokerInfo.brokerKeylet();</div>
<div class="line"><a id="l06596" name="l06596"></a><span class="lineno"> 6596</span> </div>
<div class="line"><a id="l06597" name="l06597"></a><span class="lineno"> 6597</span> <span class="comment">// Create two identical loans: each 50,000 XRP principal (scaled down to</span></div>
<div class="line"><a id="l06598" name="l06598"></a><span class="lineno"> 6598</span> <span class="comment">// avoid funding issues) Total DebtTotal will be ~100,000 XRP (principal</span></div>
<div class="line"><a id="l06599" name="l06599"></a><span class="lineno"> 6599</span> <span class="comment">// + interest) Formula will calculate cover as: 100% × (20% × 100,000) =</span></div>
<div class="line"><a id="l06600" name="l06600"></a><span class="lineno"> 6600</span> <span class="comment">// 20,000 XRP So we need FLC = 20,000 XRP to be fully consumed by first</span></div>
<div class="line"><a id="l06601" name="l06601"></a><span class="lineno"> 6601</span> <span class="comment">// default</span></div>
<div class="line"><a id="l06602" name="l06602"></a><span class="lineno"> 6602</span> <span class="keyword">auto</span> <span class="keyword">const</span> principalAmount = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>(50&#39;000);</div>
<div class="line"><a id="l06603" name="l06603"></a><span class="lineno"> 6603</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanPaymentInterval = 2592000; <span class="comment">// 30 days</span></div>
<div class="line"><a id="l06604" name="l06604"></a><span class="lineno"> 6604</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanGracePeriod = 604800; <span class="comment">// 7 days</span></div>
<div class="line"><a id="l06605" name="l06605"></a><span class="lineno"> 6605</span> </div>
<div class="line"><a id="l06606" name="l06606"></a><span class="lineno"> 6606</span> <span class="comment">// Create Loan A</span></div>
<div class="line"><a id="l06607" name="l06607"></a><span class="lineno"> 6607</span> <span class="keyword">auto</span> loanATx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(</div>
<div class="line"><a id="l06608" name="l06608"></a><span class="lineno"> 6608</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrowerA, brokerKeylet.key, principalAmount),</div>
<div class="line"><a id="l06609" name="l06609"></a><span class="lineno"> 6609</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l06610" name="l06610"></a><span class="lineno"> 6610</span> interestRate(<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(500)), <span class="comment">// 5%</span></div>
<div class="line"><a id="l06611" name="l06611"></a><span class="lineno"> 6611</span> paymentTotal(12),</div>
<div class="line"><a id="l06612" name="l06612"></a><span class="lineno"> 6612</span> loan::paymentInterval(loanPaymentInterval),</div>
<div class="line"><a id="l06613" name="l06613"></a><span class="lineno"> 6613</span> loan::gracePeriod(loanGracePeriod),</div>
<div class="line"><a id="l06614" name="l06614"></a><span class="lineno"> 6614</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(10))); <span class="comment">// Sufficient fee for multi-sig transaction</span></div>
<div class="line"><a id="l06615" name="l06615"></a><span class="lineno"> 6615</span> env(loanATx);</div>
<div class="line"><a id="l06616" name="l06616"></a><span class="lineno"> 6616</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06617" name="l06617"></a><span class="lineno"> 6617</span> </div>
<div class="line"><a id="l06618" name="l06618"></a><span class="lineno"> 6618</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanAKeylet = keylet::loan(brokerKeylet.key, 1);</div>
<div class="line"><a id="l06619" name="l06619"></a><span class="lineno"> 6619</span> </div>
<div class="line"><a id="l06620" name="l06620"></a><span class="lineno"> 6620</span> <span class="comment">// Create Loan B</span></div>
<div class="line"><a id="l06621" name="l06621"></a><span class="lineno"> 6621</span> <span class="keyword">auto</span> loanBTx = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">jt</a>(</div>
<div class="line"><a id="l06622" name="l06622"></a><span class="lineno"> 6622</span> <a class="code hl_function" href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">set</a>(borrowerB, brokerKeylet.key, principalAmount),</div>
<div class="line"><a id="l06623" name="l06623"></a><span class="lineno"> 6623</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1sig.html">sig</a>(sfCounterpartySignature, lender),</div>
<div class="line"><a id="l06624" name="l06624"></a><span class="lineno"> 6624</span> interestRate(<a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>(500)), <span class="comment">// 5%</span></div>
<div class="line"><a id="l06625" name="l06625"></a><span class="lineno"> 6625</span> paymentTotal(12),</div>
<div class="line"><a id="l06626" name="l06626"></a><span class="lineno"> 6626</span> loan::paymentInterval(loanPaymentInterval),</div>
<div class="line"><a id="l06627" name="l06627"></a><span class="lineno"> 6627</span> loan::gracePeriod(loanGracePeriod),</div>
<div class="line"><a id="l06628" name="l06628"></a><span class="lineno"> 6628</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_variable" href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">XRP</a>(10))); <span class="comment">// Sufficient fee for multi-sig transaction</span></div>
<div class="line"><a id="l06629" name="l06629"></a><span class="lineno"> 6629</span> env(loanBTx);</div>
<div class="line"><a id="l06630" name="l06630"></a><span class="lineno"> 6630</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06631" name="l06631"></a><span class="lineno"> 6631</span> </div>
<div class="line"><a id="l06632" name="l06632"></a><span class="lineno"> 6632</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanBKeylet = keylet::loan(brokerKeylet.key, 2);</div>
<div class="line"><a id="l06633" name="l06633"></a><span class="lineno"> 6633</span> </div>
<div class="line"><a id="l06634" name="l06634"></a><span class="lineno"> 6634</span> <span class="keyword">auto</span> loanASle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanAKeylet);</div>
<div class="line"><a id="l06635" name="l06635"></a><span class="lineno"> 6635</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanASle))</div>
<div class="line"><a id="l06636" name="l06636"></a><span class="lineno"> 6636</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l06637" name="l06637"></a><span class="lineno"> 6637</span> </div>
<div class="line"><a id="l06638" name="l06638"></a><span class="lineno"> 6638</span> <span class="comment">// Advance time past grace period for both loans to be defaultable</span></div>
<div class="line"><a id="l06639" name="l06639"></a><span class="lineno"> 6639</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanANextDue = loanASle-&gt;at(sfNextPaymentDueDate);</div>
<div class="line"><a id="l06640" name="l06640"></a><span class="lineno"> 6640</span> <span class="keyword">auto</span> <span class="keyword">const</span> loanAGrace = loanASle-&gt;at(sfGracePeriod);</div>
<div class="line"><a id="l06641" name="l06641"></a><span class="lineno"> 6641</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>(<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::seconds</a>{loanANextDue + loanAGrace + 60});</div>
<div class="line"><a id="l06642" name="l06642"></a><span class="lineno"> 6642</span> </div>
<div class="line"><a id="l06643" name="l06643"></a><span class="lineno"> 6643</span> env(manage(lender, loanAKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l06644" name="l06644"></a><span class="lineno"> 6644</span> env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">close</a>();</div>
<div class="line"><a id="l06645" name="l06645"></a><span class="lineno"> 6645</span> </div>
<div class="line"><a id="l06646" name="l06646"></a><span class="lineno"> 6646</span> <span class="comment">// Verify Loan A is defaulted</span></div>
<div class="line"><a id="l06647" name="l06647"></a><span class="lineno"> 6647</span> loanASle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(loanAKeylet);</div>
<div class="line"><a id="l06648" name="l06648"></a><span class="lineno"> 6648</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(loanASle))</div>
<div class="line"><a id="l06649" name="l06649"></a><span class="lineno"> 6649</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l06650" name="l06650"></a><span class="lineno"> 6650</span> BEAST_EXPECT(loanASle-&gt;isFlag(<a class="code hl_enumvalue" href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1aa2c224929c4bf367cc269b52221cd778">lsfLoanDefault</a>));</div>
<div class="line"><a id="l06651" name="l06651"></a><span class="lineno"> 6651</span> BEAST_EXPECT(loanASle-&gt;at(sfPaymentRemaining) == 0);</div>
<div class="line"><a id="l06652" name="l06652"></a><span class="lineno"> 6652</span> </div>
<div class="line"><a id="l06653" name="l06653"></a><span class="lineno"> 6653</span> <span class="comment">// Check broker state after first default (from committed ledger)</span></div>
<div class="line"><a id="l06654" name="l06654"></a><span class="lineno"> 6654</span> <span class="keyword">auto</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerKeylet);</div>
<div class="line"><a id="l06655" name="l06655"></a><span class="lineno"> 6655</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l06656" name="l06656"></a><span class="lineno"> 6656</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l06657" name="l06657"></a><span class="lineno"> 6657</span> <span class="keyword">auto</span> <span class="keyword">const</span> afterFirstDebtTotal = brokerSle-&gt;at(sfDebtTotal);</div>
<div class="line"><a id="l06658" name="l06658"></a><span class="lineno"> 6658</span> <span class="keyword">auto</span> <span class="keyword">const</span> afterFirstCoverAvailable = brokerSle-&gt;at(sfCoverAvailable);</div>
<div class="line"><a id="l06659" name="l06659"></a><span class="lineno"> 6659</span> </div>
<div class="line"><a id="l06660" name="l06660"></a><span class="lineno"> 6660</span> <span class="comment">// DebtTotal should have decreased by Loan A&#39;s debt</span></div>
<div class="line"><a id="l06661" name="l06661"></a><span class="lineno"> 6661</span> BEAST_EXPECT(afterFirstDebtTotal == 50&#39;134);</div>
<div class="line"><a id="l06662" name="l06662"></a><span class="lineno"> 6662</span> </div>
<div class="line"><a id="l06663" name="l06663"></a><span class="lineno"> 6663</span> <span class="comment">// CoverAvailable should have decreased significantly</span></div>
<div class="line"><a id="l06664" name="l06664"></a><span class="lineno"> 6664</span> BEAST_EXPECT(afterFirstCoverAvailable == 946);</div>
<div class="line"><a id="l06665" name="l06665"></a><span class="lineno"> 6665</span> </div>
<div class="line"><a id="l06666" name="l06666"></a><span class="lineno"> 6666</span> env(manage(lender, loanBKeylet.key, <a class="code hl_variable" href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">tfLoanDefault</a>), <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">tesSUCCESS</a>));</div>
<div class="line"><a id="l06667" name="l06667"></a><span class="lineno"> 6667</span> </div>
<div class="line"><a id="l06668" name="l06668"></a><span class="lineno"> 6668</span> brokerSle = env.<a class="code hl_function" href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">le</a>(brokerKeylet);</div>
<div class="line"><a id="l06669" name="l06669"></a><span class="lineno"> 6669</span> <span class="keywordflow">if</span> (!BEAST_EXPECT(brokerSle))</div>
<div class="line"><a id="l06670" name="l06670"></a><span class="lineno"> 6670</span> <span class="keywordflow">return</span>;</div>
<div class="line"><a id="l06671" name="l06671"></a><span class="lineno"> 6671</span> <span class="keyword">auto</span> <span class="keyword">const</span> afterSecondDebtTotal = brokerSle-&gt;at(sfDebtTotal);</div>
<div class="line"><a id="l06672" name="l06672"></a><span class="lineno"> 6672</span> <span class="keyword">auto</span> <span class="keyword">const</span> afterSecondCoverAvailable = brokerSle-&gt;at(sfCoverAvailable);</div>
<div class="line"><a id="l06673" name="l06673"></a><span class="lineno"> 6673</span> </div>
<div class="line"><a id="l06674" name="l06674"></a><span class="lineno"> 6674</span> BEAST_EXPECT(afterSecondDebtTotal == 0);</div>
<div class="line"><a id="l06675" name="l06675"></a><span class="lineno"> 6675</span> </div>
<div class="line"><a id="l06676" name="l06676"></a><span class="lineno"> 6676</span> BEAST_EXPECT(afterSecondCoverAvailable == 0);</div>
<div class="line"><a id="l06677" name="l06677"></a><span class="lineno"> 6677</span> }</div>
</div>
<div class="line"><a id="l06678" name="l06678"></a><span class="lineno"> 6678</span> </div>
<div class="line"><a id="l06679" name="l06679"></a><span class="lineno"> 6679</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l06680" name="l06680"></a><span class="lineno"> 6680</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen06681" data-start="{" data-end="}">
<div class="line"><a id="l06681" name="l06681"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1Loan__test.html#a39ac6df17c8b1d25022124125bca437b"> 6681</a></span> <a class="code hl_function" href="classxrpl_1_1test_1_1Loan__test.html#a39ac6df17c8b1d25022124125bca437b">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a id="l06682" name="l06682"></a><span class="lineno"> 6682</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l06683" name="l06683"></a><span class="lineno"> 6683</span><span class="preprocessor">#if LOANTODO</span></div>
<div class="line"><a id="l06684" name="l06684"></a><span class="lineno"> 6684</span> testLoanPayLateFullPaymentBypassesPenalties();</div>
<div class="line"><a id="l06685" name="l06685"></a><span class="lineno"> 6685</span> testLoanCoverMinimumRoundingExploit();</div>
<div class="line"><a id="l06686" name="l06686"></a><span class="lineno"> 6686</span><span class="preprocessor">#endif</span></div>
<div class="line"><a id="l06687" name="l06687"></a><span class="lineno"> 6687</span> testInvalidLoanSet();</div>
<div class="line"><a id="l06688" name="l06688"></a><span class="lineno"> 6688</span> </div>
<div class="line"><a id="l06689" name="l06689"></a><span class="lineno"> 6689</span> testCoverDepositWithdrawNonTransferableMPT();</div>
<div class="line"><a id="l06690" name="l06690"></a><span class="lineno"> 6690</span> testPoC_UnsignedUnderflowOnFullPayAfterEarlyPeriodic();</div>
<div class="line"><a id="l06691" name="l06691"></a><span class="lineno"> 6691</span> </div>
<div class="line"><a id="l06692" name="l06692"></a><span class="lineno"> 6692</span> testDisabled();</div>
<div class="line"><a id="l06693" name="l06693"></a><span class="lineno"> 6693</span> testSelfLoan();</div>
<div class="line"><a id="l06694" name="l06694"></a><span class="lineno"> 6694</span> testIssuerLoan();</div>
<div class="line"><a id="l06695" name="l06695"></a><span class="lineno"> 6695</span> testLoanSet();</div>
<div class="line"><a id="l06696" name="l06696"></a><span class="lineno"> 6696</span> testLifecycle();</div>
<div class="line"><a id="l06697" name="l06697"></a><span class="lineno"> 6697</span> testServiceFeeOnBrokerDeepFreeze();</div>
<div class="line"><a id="l06698" name="l06698"></a><span class="lineno"> 6698</span> </div>
<div class="line"><a id="l06699" name="l06699"></a><span class="lineno"> 6699</span> testRPC();</div>
<div class="line"><a id="l06700" name="l06700"></a><span class="lineno"> 6700</span> testInvalidLoanDelete();</div>
<div class="line"><a id="l06701" name="l06701"></a><span class="lineno"> 6701</span> testInvalidLoanManage();</div>
<div class="line"><a id="l06702" name="l06702"></a><span class="lineno"> 6702</span> testInvalidLoanPay();</div>
<div class="line"><a id="l06703" name="l06703"></a><span class="lineno"> 6703</span> </div>
<div class="line"><a id="l06704" name="l06704"></a><span class="lineno"> 6704</span> testBatchBypassCounterparty();</div>
<div class="line"><a id="l06705" name="l06705"></a><span class="lineno"> 6705</span> testLoanPayComputePeriodicPaymentValidRateInvariant();</div>
<div class="line"><a id="l06706" name="l06706"></a><span class="lineno"> 6706</span> testAccountSendMptMinAmountInvariant();</div>
<div class="line"><a id="l06707" name="l06707"></a><span class="lineno"> 6707</span> testLoanPayDebtDecreaseInvariant();</div>
<div class="line"><a id="l06708" name="l06708"></a><span class="lineno"> 6708</span> testWrongMaxDebtBehavior();</div>
<div class="line"><a id="l06709" name="l06709"></a><span class="lineno"> 6709</span> testLoanPayComputePeriodicPaymentValidTotalInterestInvariant();</div>
<div class="line"><a id="l06710" name="l06710"></a><span class="lineno"> 6710</span> testDosLoanPay();</div>
<div class="line"><a id="l06711" name="l06711"></a><span class="lineno"> 6711</span> testLoanPayComputePeriodicPaymentValidTotalPrincipalPaidInvariant();</div>
<div class="line"><a id="l06712" name="l06712"></a><span class="lineno"> 6712</span> testLoanPayComputePeriodicPaymentValidTotalInterestPaidInvariant();</div>
<div class="line"><a id="l06713" name="l06713"></a><span class="lineno"> 6713</span> testLoanNextPaymentDueDateOverflow();</div>
<div class="line"><a id="l06714" name="l06714"></a><span class="lineno"> 6714</span> </div>
<div class="line"><a id="l06715" name="l06715"></a><span class="lineno"> 6715</span> testRequireAuth();</div>
<div class="line"><a id="l06716" name="l06716"></a><span class="lineno"> 6716</span> testDustManipulation();</div>
<div class="line"><a id="l06717" name="l06717"></a><span class="lineno"> 6717</span> </div>
<div class="line"><a id="l06718" name="l06718"></a><span class="lineno"> 6718</span> testRIPD3831();</div>
<div class="line"><a id="l06719" name="l06719"></a><span class="lineno"> 6719</span> testRIPD3459();</div>
<div class="line"><a id="l06720" name="l06720"></a><span class="lineno"> 6720</span> testRIPD3901();</div>
<div class="line"><a id="l06721" name="l06721"></a><span class="lineno"> 6721</span> testRIPD3902();</div>
<div class="line"><a id="l06722" name="l06722"></a><span class="lineno"> 6722</span> testRoundingAllowsUndercoverage();</div>
<div class="line"><a id="l06723" name="l06723"></a><span class="lineno"> 6723</span> testBorrowerIsBroker();</div>
<div class="line"><a id="l06724" name="l06724"></a><span class="lineno"> 6724</span> testIssuerIsBorrower();</div>
<div class="line"><a id="l06725" name="l06725"></a><span class="lineno"> 6725</span> testLimitExceeded();</div>
<div class="line"><a id="l06726" name="l06726"></a><span class="lineno"> 6726</span> testOverpaymentManagementFee();</div>
<div class="line"><a id="l06727" name="l06727"></a><span class="lineno"> 6727</span> testLoanPayBrokerOwnerMissingTrustline();</div>
<div class="line"><a id="l06728" name="l06728"></a><span class="lineno"> 6728</span> testLoanPayBrokerOwnerUnauthorizedMPT();</div>
<div class="line"><a id="l06729" name="l06729"></a><span class="lineno"> 6729</span> testLoanPayBrokerOwnerNoPermissionedDomainMPT();</div>
<div class="line"><a id="l06730" name="l06730"></a><span class="lineno"> 6730</span> testLoanSetBrokerOwnerNoPermissionedDomainMPT();</div>
<div class="line"><a id="l06731" name="l06731"></a><span class="lineno"> 6731</span> testSequentialFLCDepletion();</div>
<div class="line"><a id="l06732" name="l06732"></a><span class="lineno"> 6732</span> }</div>
</div>
<div class="line"><a id="l06733" name="l06733"></a><span class="lineno"> 6733</span>};</div>
</div>
<div class="line"><a id="l06734" name="l06734"></a><span class="lineno"> 6734</span> </div>
<div class="foldopen" id="foldopen06735" data-start="{" data-end="};">
<div class="line"><a id="l06735" name="l06735"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html"> 6735</a></span><span class="keyword">class </span><a class="code hl_class" href="classxrpl_1_1test_1_1LoanBatch__test.html">LoanBatch_test</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxrpl_1_1test_1_1Loan__test.html">Loan_test</a></div>
<div class="line"><a id="l06736" name="l06736"></a><span class="lineno"> 6736</span>{</div>
<div class="line"><a id="l06737" name="l06737"></a><span class="lineno"> 6737</span><span class="keyword">protected</span>:</div>
<div class="line"><a id="l06738" name="l06738"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#a00b5a1dc54941c12acd26661afd13f25"> 6738</a></span> <a class="code hl_class" href="classbeast_1_1detail_1_1xor__shift__engine.html">beast::xor_shift_engine</a> <a class="code hl_variable" href="classxrpl_1_1test_1_1LoanBatch__test.html#a00b5a1dc54941c12acd26661afd13f25">engine_</a>;</div>
<div class="line"><a id="l06739" name="l06739"></a><span class="lineno"> 6739</span> </div>
<div class="line"><a id="l06740" name="l06740"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#abd9353da10e4094b2fad9f77bc066ebe"> 6740</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution.html">std::uniform_int_distribution&lt;&gt;</a> assetDist{0, 2};</div>
<div class="line"><a id="l06741" name="l06741"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#a47d2632a9fd00a10010c84640921d1a5"> 6741</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution.html">std::uniform_int_distribution&lt;std::int64_t&gt;</a> principalDist{100&#39;000, 1&#39;000&#39;000&#39;000};</div>
<div class="line"><a id="l06742" name="l06742"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#ab8e6c41af8b18c2b24b452ee4f07001d"> 6742</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution.html">std::uniform_int_distribution&lt;std::uint32_t&gt;</a> interestRateDist{0, 10000};</div>
<div class="line"><a id="l06743" name="l06743"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#a92dc3875d55133876820a49d1a0830df"> 6743</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution.html">std::uniform_int_distribution&lt;&gt;</a> paymentTotalDist{12, 10000};</div>
<div class="line"><a id="l06744" name="l06744"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#a8c72ac6f184229b5d0775007b4040513"> 6744</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution.html">std::uniform_int_distribution&lt;&gt;</a> paymentIntervalDist{60, 3600 * 24 * 30};</div>
<div class="line"><a id="l06745" name="l06745"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#ac281f5051d80ffff9962f0c42bbc746f"> 6745</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution.html">std::uniform_int_distribution&lt;std::uint16_t&gt;</a> managementFeeRateDist{0, 10&#39;000};</div>
<div class="line"><a id="l06746" name="l06746"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#aca07cf5bd052573016735fb325bf46dd"> 6746</a></span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution.html">std::uniform_int_distribution&lt;&gt;</a> serviceFeeDist{0, 20};</div>
<div class="line"><a id="l06747" name="l06747"></a><span class="lineno"> 6747</span> <span class="comment">/*</span></div>
<div class="line"><a id="l06748" name="l06748"></a><span class="lineno"> 6748</span><span class="comment"> # Generate parameters that are more likely to be valid</span></div>
<div class="line"><a id="l06749" name="l06749"></a><span class="lineno"> 6749</span><span class="comment"> principal = Decimal(str(rand.randint(100000,</span></div>
<div class="line"><a id="l06750" name="l06750"></a><span class="lineno"> 6750</span><span class="comment"> 100&#39;000&#39;000))).quantize(ROUND_TARGET)</span></div>
<div class="line"><a id="l06751" name="l06751"></a><span class="lineno"> 6751</span><span class="comment"></span> </div>
<div class="line"><a id="l06752" name="l06752"></a><span class="lineno"> 6752</span><span class="comment"> interest_rate = Decimal(rand.randint(1, 10000)) /</span></div>
<div class="line"><a id="l06753" name="l06753"></a><span class="lineno"> 6753</span><span class="comment"> Decimal(100000)</span></div>
<div class="line"><a id="l06754" name="l06754"></a><span class="lineno"> 6754</span><span class="comment"></span> </div>
<div class="line"><a id="l06755" name="l06755"></a><span class="lineno"> 6755</span><span class="comment"> payment_total = rand.randint(12, 10000)</span></div>
<div class="line"><a id="l06756" name="l06756"></a><span class="lineno"> 6756</span><span class="comment"></span> </div>
<div class="line"><a id="l06757" name="l06757"></a><span class="lineno"> 6757</span><span class="comment"> payment_interval = Decimal(str(rand.randint(60, 2629746)))</span></div>
<div class="line"><a id="l06758" name="l06758"></a><span class="lineno"> 6758</span><span class="comment"></span> </div>
<div class="line"><a id="l06759" name="l06759"></a><span class="lineno"> 6759</span><span class="comment"> interest_fee = Decimal(rand.randint(0, 100000)) /</span></div>
<div class="line"><a id="l06760" name="l06760"></a><span class="lineno"> 6760</span><span class="comment"> Decimal(100000)</span></div>
<div class="line"><a id="l06761" name="l06761"></a><span class="lineno"> 6761</span><span class="comment">*/</span></div>
<div class="line"><a id="l06762" name="l06762"></a><span class="lineno"> 6762</span> </div>
<div class="foldopen" id="foldopen06763" data-start="{" data-end="}">
<div class="line"><a id="l06763" name="l06763"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#abfaa68386f2bb2d149c5ca44f3b1be39"> 6763</a></span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l06764" name="l06764"></a><span class="lineno"> 6764</span> testRandomLoan()</div>
<div class="line"><a id="l06765" name="l06765"></a><span class="lineno"> 6765</span> {</div>
<div class="line"><a id="l06766" name="l06766"></a><span class="lineno"> 6766</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06767" name="l06767"></a><span class="lineno"> 6767</span> </div>
<div class="line"><a id="l06768" name="l06768"></a><span class="lineno"> 6768</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> issuer(<span class="stringliteral">&quot;issuer&quot;</span>);</div>
<div class="line"><a id="l06769" name="l06769"></a><span class="lineno"> 6769</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> lender(<span class="stringliteral">&quot;lender&quot;</span>);</div>
<div class="line"><a id="l06770" name="l06770"></a><span class="lineno"> 6770</span> <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> borrower(<span class="stringliteral">&quot;borrower&quot;</span>);</div>
<div class="line"><a id="l06771" name="l06771"></a><span class="lineno"> 6771</span> </div>
<div class="line"><a id="l06772" name="l06772"></a><span class="lineno"> 6772</span> <span class="comment">// Determine all the random parameters at once</span></div>
<div class="line"><a id="l06773" name="l06773"></a><span class="lineno"> 6773</span> <a class="code hl_concept" href="conceptxrpl_1_1AssetType.html">AssetType</a> assetType = <span class="keyword">static_cast&lt;</span><a class="code hl_concept" href="conceptxrpl_1_1AssetType.html">AssetType</a><span class="keyword">&gt;</span>(assetDist(engine_));</div>
<div class="line"><a id="l06774" name="l06774"></a><span class="lineno"> 6774</span> <span class="keyword">auto</span> <span class="keyword">const</span> principalRequest = principalDist(engine_);</div>
<div class="line"><a id="l06775" name="l06775"></a><span class="lineno"> 6775</span> <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a> managementFeeRate{managementFeeRateDist(engine_)};</div>
<div class="line"><a id="l06776" name="l06776"></a><span class="lineno"> 6776</span> <span class="keyword">auto</span> <span class="keyword">const</span> serviceFee = serviceFeeDist(engine_);</div>
<div class="line"><a id="l06777" name="l06777"></a><span class="lineno"> 6777</span> <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a> interest{interestRateDist(engine_)};</div>
<div class="line"><a id="l06778" name="l06778"></a><span class="lineno"> 6778</span> <span class="keyword">auto</span> <span class="keyword">const</span> payTotal = paymentTotalDist(engine_);</div>
<div class="line"><a id="l06779" name="l06779"></a><span class="lineno"> 6779</span> <span class="keyword">auto</span> <span class="keyword">const</span> payInterval = paymentIntervalDist(engine_);</div>
<div class="line"><a id="l06780" name="l06780"></a><span class="lineno"> 6780</span> </div>
<div class="line"><a id="l06781" name="l06781"></a><span class="lineno"> 6781</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> brokerParams{</div>
<div class="line"><a id="l06782" name="l06782"></a><span class="lineno"> 6782</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = principalRequest * 10,</div>
<div class="line"><a id="l06783" name="l06783"></a><span class="lineno"> 6783</span> .debtMax = 0,</div>
<div class="line"><a id="l06784" name="l06784"></a><span class="lineno"> 6784</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0},</div>
<div class="line"><a id="l06785" name="l06785"></a><span class="lineno"> 6785</span> .managementFeeRate = managementFeeRate};</div>
<div class="line"><a id="l06786" name="l06786"></a><span class="lineno"> 6786</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> loanParams{</div>
<div class="line"><a id="l06787" name="l06787"></a><span class="lineno"> 6787</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a> = lender,</div>
<div class="line"><a id="l06788" name="l06788"></a><span class="lineno"> 6788</span> .counter = borrower,</div>
<div class="line"><a id="l06789" name="l06789"></a><span class="lineno"> 6789</span> .principalRequest = principalRequest,</div>
<div class="line"><a id="l06790" name="l06790"></a><span class="lineno"> 6790</span> .serviceFee = serviceFee,</div>
<div class="line"><a id="l06791" name="l06791"></a><span class="lineno"> 6791</span> .interest = interest,</div>
<div class="line"><a id="l06792" name="l06792"></a><span class="lineno"> 6792</span> .payTotal = payTotal,</div>
<div class="line"><a id="l06793" name="l06793"></a><span class="lineno"> 6793</span> .payInterval = payInterval,</div>
<div class="line"><a id="l06794" name="l06794"></a><span class="lineno"> 6794</span> };</div>
<div class="line"><a id="l06795" name="l06795"></a><span class="lineno"> 6795</span> </div>
<div class="line"><a id="l06796" name="l06796"></a><span class="lineno"> 6796</span> runLoan(assetType, brokerParams, loanParams);</div>
</div>
<div class="line"><a id="l06797" name="l06797"></a><span class="lineno"> 6797</span> }</div>
<div class="line"><a id="l06798" name="l06798"></a><span class="lineno"> 6798</span> </div>
<div class="line"><a id="l06799" name="l06799"></a><span class="lineno"> 6799</span><span class="keyword">public</span>:</div>
<div class="foldopen" id="foldopen06800" data-start="{" data-end="}">
<div class="line"><a id="l06800" name="l06800"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanBatch__test.html#a7056937c2923fd0bf94176f6558b368a"> 6800</a></span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l06801" name="l06801"></a><span class="lineno"> 6801</span> <a class="code hl_function" href="namespacexrpl.html#a22770e6d489de332ba5eec92b696d7ce">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a id="l06802" name="l06802"></a><span class="lineno"> 6802</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l06803" name="l06803"></a><span class="lineno"> 6803</span> <span class="keyword">auto</span> <span class="keyword">const</span> argument = arg();</div>
<div class="line"><a id="l06804" name="l06804"></a><span class="lineno"> 6804</span> <span class="keyword">auto</span> <span class="keyword">const</span> numIterations = [s = arg()]() -&gt; <span class="keywordtype">int</span> {</div>
<div class="line"><a id="l06805" name="l06805"></a><span class="lineno"> 6805</span> <span class="keywordtype">int</span> defaultNum = 5;</div>
<div class="line"><a id="l06806" name="l06806"></a><span class="lineno"> 6806</span> <span class="keywordflow">if</span> (s.empty())</div>
<div class="line"><a id="l06807" name="l06807"></a><span class="lineno"> 6807</span> <span class="keywordflow">return</span> defaultNum;</div>
<div class="line"><a id="l06808" name="l06808"></a><span class="lineno"> 6808</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l06809" name="l06809"></a><span class="lineno"> 6809</span> {</div>
<div class="line"><a id="l06810" name="l06810"></a><span class="lineno"> 6810</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> pos;</div>
<div class="line"><a id="l06811" name="l06811"></a><span class="lineno"> 6811</span> <span class="keyword">auto</span> <span class="keyword">const</span> r = stoi(s, &amp;pos);</div>
<div class="line"><a id="l06812" name="l06812"></a><span class="lineno"> 6812</span> <span class="keywordflow">if</span> (pos != s.size())</div>
<div class="line"><a id="l06813" name="l06813"></a><span class="lineno"> 6813</span> <span class="keywordflow">return</span> defaultNum;</div>
<div class="line"><a id="l06814" name="l06814"></a><span class="lineno"> 6814</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l06815" name="l06815"></a><span class="lineno"> 6815</span> }</div>
<div class="line"><a id="l06816" name="l06816"></a><span class="lineno"> 6816</span> <span class="keywordflow">catch</span> (...)</div>
<div class="line"><a id="l06817" name="l06817"></a><span class="lineno"> 6817</span> {</div>
<div class="line"><a id="l06818" name="l06818"></a><span class="lineno"> 6818</span> <span class="keywordflow">return</span> defaultNum;</div>
<div class="line"><a id="l06819" name="l06819"></a><span class="lineno"> 6819</span> }</div>
<div class="line"><a id="l06820" name="l06820"></a><span class="lineno"> 6820</span> }();</div>
<div class="line"><a id="l06821" name="l06821"></a><span class="lineno"> 6821</span> </div>
<div class="line"><a id="l06822" name="l06822"></a><span class="lineno"> 6822</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06823" name="l06823"></a><span class="lineno"> 6823</span> </div>
<div class="line"><a id="l06824" name="l06824"></a><span class="lineno"> 6824</span> <span class="keyword">auto</span> <span class="keyword">const</span> updateInterval = <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a>(numIterations / 5, 100);</div>
<div class="line"><a id="l06825" name="l06825"></a><span class="lineno"> 6825</span> </div>
<div class="line"><a id="l06826" name="l06826"></a><span class="lineno"> 6826</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; numIterations; ++i)</div>
<div class="line"><a id="l06827" name="l06827"></a><span class="lineno"> 6827</span> {</div>
<div class="line"><a id="l06828" name="l06828"></a><span class="lineno"> 6828</span> <span class="keywordflow">if</span> (i % updateInterval == 0)</div>
<div class="line"><a id="l06829" name="l06829"></a><span class="lineno"> 6829</span> testcase &lt;&lt; <span class="stringliteral">&quot;Random Loan Test iteration &quot;</span> &lt;&lt; (i + 1) &lt;&lt; <span class="stringliteral">&quot;/&quot;</span> &lt;&lt; numIterations;</div>
<div class="line"><a id="l06830" name="l06830"></a><span class="lineno"> 6830</span> testRandomLoan();</div>
<div class="line"><a id="l06831" name="l06831"></a><span class="lineno"> 6831</span> }</div>
</div>
<div class="line"><a id="l06832" name="l06832"></a><span class="lineno"> 6832</span> }</div>
</div>
<div class="line"><a id="l06833" name="l06833"></a><span class="lineno"> 6833</span>};</div>
<div class="foldopen" id="foldopen06834" data-start="{" data-end="};">
<div class="line"><a id="l06834" name="l06834"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanArbitrary__test.html"> 6834</a></span> </div>
<div class="line"><a id="l06835" name="l06835"></a><span class="lineno"> 6835</span><span class="keyword">class </span><a class="code hl_class" href="classxrpl_1_1test_1_1LoanArbitrary__test.html">LoanArbitrary_test</a> : <span class="keyword">public</span> <a class="code hl_class" href="classxrpl_1_1test_1_1LoanBatch__test.html">LoanBatch_test</a></div>
<div class="line"><a id="l06836" name="l06836"></a><span class="lineno"> 6836</span>{</div>
<div class="foldopen" id="foldopen06837" data-start="{" data-end="}">
<div class="line"><a id="l06837" name="l06837"></a><span class="lineno"><a class="line" href="classxrpl_1_1test_1_1LoanArbitrary__test.html#a41da406189f3164af99fb80d638da85d"> 6837</a></span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l06838" name="l06838"></a><span class="lineno"> 6838</span> <a class="code hl_function" href="namespacexrpl.html#a22770e6d489de332ba5eec92b696d7ce">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a id="l06839" name="l06839"></a><span class="lineno"> 6839</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l06840" name="l06840"></a><span class="lineno"> 6840</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l06841" name="l06841"></a><span class="lineno"> 6841</span> </div>
<div class="line"><a id="l06842" name="l06842"></a><span class="lineno"> 6842</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">BrokerParameters</a> <span class="keyword">const</span> brokerParams{</div>
<div class="line"><a id="l06843" name="l06843"></a><span class="lineno"> 6843</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">vaultDeposit</a> = 10000,</div>
<div class="line"><a id="l06844" name="l06844"></a><span class="lineno"> 6844</span> .debtMax = 0,</div>
<div class="line"><a id="l06845" name="l06845"></a><span class="lineno"> 6845</span> .coverRateMin = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0},</div>
<div class="line"><a id="l06846" name="l06846"></a><span class="lineno"> 6846</span> .managementFeeRate = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips16</a>{0},</div>
<div class="line"><a id="l06847" name="l06847"></a><span class="lineno"> 6847</span> .coverRateLiquidation = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{0}};</div>
<div class="line"><a id="l06848" name="l06848"></a><span class="lineno"> 6848</span> <a class="code hl_struct" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">LoanParameters</a> <span class="keyword">const</span> loanParams{</div>
<div class="line"><a id="l06849" name="l06849"></a><span class="lineno"> 6849</span> .<a class="code hl_variable" href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">account</a> = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;lender&quot;</span>),</div>
<div class="line"><a id="l06850" name="l06850"></a><span class="lineno"> 6850</span> .counter = <a class="code hl_class" href="classxrpl_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;borrower&quot;</span>),</div>
<div class="line"><a id="l06851" name="l06851"></a><span class="lineno"> 6851</span> .principalRequest = <a class="code hl_class" href="classxrpl_1_1Number.html">Number</a>{200000, -6},</div>
<div class="line"><a id="l06852" name="l06852"></a><span class="lineno"> 6852</span> .interest = <a class="code hl_class" href="classxrpl_1_1unit_1_1ValueUnit.html">TenthBips32</a>{50000},</div>
<div class="line"><a id="l06853" name="l06853"></a><span class="lineno"> 6853</span> .payTotal = 2,</div>
<div class="line"><a id="l06854" name="l06854"></a><span class="lineno"> 6854</span> .payInterval = 200};</div>
<div class="line"><a id="l06855" name="l06855"></a><span class="lineno"> 6855</span> </div>
<div class="line"><a id="l06856" name="l06856"></a><span class="lineno"> 6856</span> runLoan(AssetType::XRP, brokerParams, loanParams);</div>
</div>
<div class="line"><a id="l06857" name="l06857"></a><span class="lineno"> 6857</span> }</div>
</div>
<div class="line"><a id="l06858" name="l06858"></a><span class="lineno"> 6858</span>};</div>
<div class="line"><a id="l06859" name="l06859"></a><span class="lineno"><a class="line" href="namespacexrpl_1_1test.html#aeb21070c6ccdcb3149543bd19c34250f"> 6859</a></span> </div>
<div class="line"><a id="l06860" name="l06860"></a><span class="lineno"><a class="line" href="namespacexrpl_1_1test.html#a33305dc21ad0a63aaa82c92b369153d2"> 6860</a></span>BEAST_DEFINE_TESTSUITE(Loan, tx, <a class="code hl_namespace" href="namespacexrpl.html">xrpl</a>);</div>
<div class="line"><a id="l06861" name="l06861"></a><span class="lineno"><a class="line" href="namespacexrpl_1_1test.html#ab068fdd2d79b105db4564b18427fa140"> 6861</a></span>BEAST_DEFINE_TESTSUITE_MANUAL(LoanBatch, tx, <a class="code hl_namespace" href="namespacexrpl.html">xrpl</a>);</div>
<div class="line"><a id="l06862" name="l06862"></a><span class="lineno"> 6862</span>BEAST_DEFINE_TESTSUITE_MANUAL(LoanArbitrary, tx, <a class="code hl_namespace" href="namespacexrpl.html">xrpl</a>);</div>
<div class="line"><a id="l06863" name="l06863"></a><span class="lineno"> 6863</span> </div>
<div class="line"><a id="l06864" name="l06864"></a><span class="lineno"> 6864</span>} <span class="comment">// namespace test</span></div>
<div class="line"><a id="l06865" name="l06865"></a><span class="lineno"> 6865</span>} <span class="comment">// namespace xrpl</span></div>
<div class="ttc" id="aall_any_none_of_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/all_any_none_of.html">std::any_of</a></div><div class="ttdeci">T any_of(T... args)</div></div>
<div class="ttc" id="aarray_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/array.html">std::array</a></div></div>
<div class="ttc" id="aat_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/at.html">std::string::at</a></div><div class="ttdeci">T at(T... args)</div></div>
<div class="ttc" id="abasic_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a></div></div>
<div class="ttc" id="abasic_string_view_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string_view.html">std::string_view</a></div></div>
<div class="ttc" id="abasic_stringstream_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_stringstream.html">std::stringstream</a></div></div>
<div class="ttc" id="achrono_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/header/chrono.html">chrono</a></div></div>
<div class="ttc" id="aclassJson_1_1StaticString_html"><div class="ttname"><a href="classJson_1_1StaticString.html">Json::StaticString</a></div><div class="ttdoc">Lightweight wrapper to tag static string.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00044">json_value.h:45</a></div></div>
<div class="ttc" id="aclassJson_1_1Value_html"><div class="ttname"><a href="classJson_1_1Value.html">Json::Value</a></div><div class="ttdoc">Represents a JSON value.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00130">json_value.h:131</a></div></div>
<div class="ttc" id="aclassJson_1_1Value_html_a9c9ee172f3387d37d5382d991c591219"><div class="ttname"><a href="classJson_1_1Value.html#a9c9ee172f3387d37d5382d991c591219">Json::Value::removeMember</a></div><div class="ttdeci">Value removeMember(char const *key)</div><div class="ttdoc">Remove and return the named member.</div><div class="ttdef"><b>Definition</b> <a href="json__value_8cpp_source.html#l00953">json_value.cpp:953</a></div></div>
<div class="ttc" id="aclassbeast_1_1detail_1_1xor__shift__engine_html"><div class="ttname"><a href="classbeast_1_1detail_1_1xor__shift__engine.html">beast::detail::xor_shift_engine</a></div><div class="ttdef"><b>Definition</b> <a href="xor__shift__engine_8h_source.html#l00013">xor_shift_engine.h:14</a></div></div>
<div class="ttc" id="aclassbeast_1_1unit__test_1_1suite_html"><div class="ttname"><a href="classbeast_1_1unit__test_1_1suite.html">beast::unit_test::suite</a></div><div class="ttdoc">A testsuite class.</div><div class="ttdef"><b>Definition</b> <a href="suite_8h_source.html#l00051">suite.h:52</a></div></div>
<div class="ttc" id="aclassbeast_1_1unit__test_1_1suite_html_a19b8ee0ce850d78834984655ae83b20e"><div class="ttname"><a href="classbeast_1_1unit__test_1_1suite.html#a19b8ee0ce850d78834984655ae83b20e">beast::unit_test::suite::log</a></div><div class="ttdeci">log_os&lt; char &gt; log</div><div class="ttdoc">Logging output stream.</div><div class="ttdef"><b>Definition</b> <a href="suite_8h_source.html#l00145">suite.h:145</a></div></div>
<div class="ttc" id="aclassbeast_1_1unit__test_1_1suite_html_aaa1237d9b85c69d35fe86645cee094b5"><div class="ttname"><a href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">beast::unit_test::suite::testcase</a></div><div class="ttdeci">testcase_t testcase</div><div class="ttdoc">Memberspace for declaring test cases.</div><div class="ttdef"><b>Definition</b> <a href="suite_8h_source.html#l00148">suite.h:148</a></div></div>
<div class="ttc" id="aclassbeast_1_1unit__test_1_1suite_html_ac6fc161c3c00cfbbc9590afe9e4559aa"><div class="ttname"><a href="classbeast_1_1unit__test_1_1suite.html#ac6fc161c3c00cfbbc9590afe9e4559aa">beast::unit_test::suite::expect</a></div><div class="ttdeci">bool expect(Condition const &amp;shouldBeTrue)</div><div class="ttdoc">Evaluate a test condition.</div><div class="ttdef"><b>Definition</b> <a href="suite_8h_source.html#l00222">suite.h:222</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Asset_html"><div class="ttname"><a href="classxrpl_1_1Asset.html">xrpl::Asset</a></div><div class="ttdef"><b>Definition</b> <a href="Asset_8h_source.html#l00026">Asset.h:27</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Asset_html_a42851afbc54def1c41085612f575ca33"><div class="ttname"><a href="classxrpl_1_1Asset.html#a42851afbc54def1c41085612f575ca33">xrpl::Asset::get</a></div><div class="ttdeci">constexpr TIss const &amp; get() const</div></div>
<div class="ttc" id="aclassxrpl_1_1Asset_html_acd176ab2416dd3d190cbd4e1283d95b3"><div class="ttname"><a href="classxrpl_1_1Asset.html#acd176ab2416dd3d190cbd4e1283d95b3">xrpl::Asset::native</a></div><div class="ttdeci">bool native() const</div><div class="ttdef"><b>Definition</b> <a href="Asset_8h_source.html#l00080">Asset.h:80</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Asset_html_ae7764d785dce46113d1d2be6eabc3c17"><div class="ttname"><a href="classxrpl_1_1Asset.html#ae7764d785dce46113d1d2be6eabc3c17">xrpl::Asset::holds</a></div><div class="ttdeci">constexpr bool holds() const</div><div class="ttdef"><b>Definition</b> <a href="Asset_8h_source.html#l00131">Asset.h:131</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Asset_html_afe02ca072854d69e5195378b8dfdfde2"><div class="ttname"><a href="classxrpl_1_1Asset.html#afe02ca072854d69e5195378b8dfdfde2">xrpl::Asset::value</a></div><div class="ttdeci">constexpr value_type const &amp; value() const</div><div class="ttdef"><b>Definition</b> <a href="Asset_8h_source.html#l00155">Asset.h:155</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Batch_html_a48142874a4f7fadc1a5a0026d289f4c8"><div class="ttname"><a href="classxrpl_1_1Batch.html#a48142874a4f7fadc1a5a0026d289f4c8">xrpl::Batch::disabledTxTypes</a></div><div class="ttdeci">static constexpr auto disabledTxTypes</div><div class="ttdef"><b>Definition</b> <a href="src_2xrpld_2app_2tx_2detail_2Batch_8h_source.html#l00039">src/xrpld/app/tx/detail/Batch.h:39</a></div></div>
<div class="ttc" id="aclassxrpl_1_1FeatureBitset_html"><div class="ttname"><a href="classxrpl_1_1FeatureBitset.html">xrpl::FeatureBitset</a></div><div class="ttdef"><b>Definition</b> <a href="Feature_8h_source.html#l00143">Feature.h:144</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Issue_html"><div class="ttname"><a href="classxrpl_1_1Issue.html">xrpl::Issue</a></div><div class="ttdoc">A currency issued by an account.</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00013">Issue.h:14</a></div></div>
<div class="ttc" id="aclassxrpl_1_1LoadFeeTrack_html_a81842a661232df0190a3cb55d42ff8c3"><div class="ttname"><a href="classxrpl_1_1LoadFeeTrack.html#a81842a661232df0190a3cb55d42ff8c3">xrpl::LoadFeeTrack::lowerLocalFee</a></div><div class="ttdeci">bool lowerLocalFee()</div><div class="ttdef"><b>Definition</b> <a href="LoadFeeTrack_8cpp_source.html#l00040">LoadFeeTrack.cpp:40</a></div></div>
<div class="ttc" id="aclassxrpl_1_1LoanSet_html_a473051cf91fbec0e50f2f32ca9c71e87"><div class="ttname"><a href="classxrpl_1_1LoanSet.html#a473051cf91fbec0e50f2f32ca9c71e87">xrpl::LoanSet::minPaymentInterval</a></div><div class="ttdeci">static std::uint32_t constexpr minPaymentInterval</div><div class="ttdef"><b>Definition</b> <a href="LoanSet_8h_source.html#l00047">LoanSet.h:47</a></div></div>
<div class="ttc" id="aclassxrpl_1_1LoanSet_html_a56b9593dc7407600b0a89600532b5603"><div class="ttname"><a href="classxrpl_1_1LoanSet.html#a56b9593dc7407600b0a89600532b5603">xrpl::LoanSet::minPaymentTotal</a></div><div class="ttdeci">static std::uint32_t constexpr minPaymentTotal</div><div class="ttdef"><b>Definition</b> <a href="LoanSet_8h_source.html#l00043">LoanSet.h:43</a></div></div>
<div class="ttc" id="aclassxrpl_1_1LoanSet_html_a8b9cdc20003443cb594ba9a55af4cdb5"><div class="ttname"><a href="classxrpl_1_1LoanSet.html#a8b9cdc20003443cb594ba9a55af4cdb5">xrpl::LoanSet::defaultPaymentInterval</a></div><div class="ttdeci">static std::uint32_t constexpr defaultPaymentInterval</div><div class="ttdef"><b>Definition</b> <a href="LoanSet_8h_source.html#l00048">LoanSet.h:48</a></div></div>
<div class="ttc" id="aclassxrpl_1_1LoanSet_html_abdd170e766ccea928b8520f9efe3a0ee"><div class="ttname"><a href="classxrpl_1_1LoanSet.html#abdd170e766ccea928b8520f9efe3a0ee">xrpl::LoanSet::defaultPaymentTotal</a></div><div class="ttdeci">static std::uint32_t constexpr defaultPaymentTotal</div><div class="ttdef"><b>Definition</b> <a href="LoanSet_8h_source.html#l00044">LoanSet.h:44</a></div></div>
<div class="ttc" id="aclassxrpl_1_1LoanSet_html_adb17f2b6a5c242a3b56dd9363185c974"><div class="ttname"><a href="classxrpl_1_1LoanSet.html#adb17f2b6a5c242a3b56dd9363185c974">xrpl::LoanSet::defaultGracePeriod</a></div><div class="ttdeci">static std::uint32_t constexpr defaultGracePeriod</div><div class="ttdef"><b>Definition</b> <a href="LoanSet_8h_source.html#l00051">LoanSet.h:51</a></div></div>
<div class="ttc" id="aclassxrpl_1_1MPTIssue_html"><div class="ttname"><a href="classxrpl_1_1MPTIssue.html">xrpl::MPTIssue</a></div><div class="ttdef"><b>Definition</b> <a href="MPTIssue_8h_source.html#l00013">MPTIssue.h:14</a></div></div>
<div class="ttc" id="aclassxrpl_1_1NetClock_html_a6fdfbe103d809c714f11b914b391f8df"><div class="ttname"><a href="classxrpl_1_1NetClock.html#a6fdfbe103d809c714f11b914b391f8df">xrpl::NetClock::time_point</a></div><div class="ttdeci">std::chrono::time_point&lt; NetClock &gt; time_point</div><div class="ttdef"><b>Definition</b> <a href="chrono_8h_source.html#l00046">chrono.h:46</a></div></div>
<div class="ttc" id="aclassxrpl_1_1NetClock_html_a8db39de3345bf89d6be8885338a624e5"><div class="ttname"><a href="classxrpl_1_1NetClock.html#a8db39de3345bf89d6be8885338a624e5">xrpl::NetClock::duration</a></div><div class="ttdeci">std::chrono::duration&lt; rep, period &gt; duration</div><div class="ttdef"><b>Definition</b> <a href="chrono_8h_source.html#l00045">chrono.h:45</a></div></div>
<div class="ttc" id="aclassxrpl_1_1NumberRoundModeGuard_html"><div class="ttname"><a href="classxrpl_1_1NumberRoundModeGuard.html">xrpl::NumberRoundModeGuard</a></div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00780">Number.h:781</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Number_html"><div class="ttname"><a href="classxrpl_1_1Number.html">xrpl::Number</a></div><div class="ttdoc">Number is a floating point type that can represent a wide range of values.</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00207">Number.h:208</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Number_html_a3d6e8e71ee3641f8d21041d3ade5aed0"><div class="ttname"><a href="classxrpl_1_1Number.html#a3d6e8e71ee3641f8d21041d3ade5aed0">xrpl::Number::truncate</a></div><div class="ttdeci">Number truncate() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8cpp_source.html#l00805">Number.cpp:805</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Number_html_a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17"><div class="ttname"><a href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aaf71effcd4dcf7bc7c89bb51e27e8b17">xrpl::Number::upward</a></div><div class="ttdeci">@ upward</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00381">Number.h:381</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Number_html_a40e08f75077897215c66d102b5b75f95aefac6c5bd63a85dcee4fc69baf788d40"><div class="ttname"><a href="classxrpl_1_1Number.html#a40e08f75077897215c66d102b5b75f95aefac6c5bd63a85dcee4fc69baf788d40">xrpl::Number::downward</a></div><div class="ttdeci">@ downward</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00381">Number.h:381</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Number_html_aa4058fefe18f86063240cfd2ba985358"><div class="ttname"><a href="classxrpl_1_1Number.html#aa4058fefe18f86063240cfd2ba985358">xrpl::Number::exponent</a></div><div class="ttdeci">constexpr int exponent() const noexcept</div><div class="ttdoc">Returns the exponent of the external view of the Number.</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00564">Number.h:564</a></div></div>
<div class="ttc" id="aclassxrpl_1_1PublicKey_html_ad46f4b490287a7d6df68780c82509d68"><div class="ttname"><a href="classxrpl_1_1PublicKey.html#ad46f4b490287a7d6df68780c82509d68">xrpl::PublicKey::slice</a></div><div class="ttdeci">Slice slice() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="PublicKey_8h_source.html#l00104">PublicKey.h:104</a></div></div>
<div class="ttc" id="aclassxrpl_1_1STAmount_html"><div class="ttname"><a href="classxrpl_1_1STAmount.html">xrpl::STAmount</a></div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00030">STAmount.h:31</a></div></div>
<div class="ttc" id="aclassxrpl_1_1STAmount_html_abbc5a024839981076ce9c16fa19d3657"><div class="ttname"><a href="classxrpl_1_1STAmount.html#abbc5a024839981076ce9c16fa19d3657">xrpl::STAmount::asset</a></div><div class="ttdeci">Asset const &amp; asset() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00442">STAmount.h:442</a></div></div>
<div class="ttc" id="aclassxrpl_1_1STAmount_html_aeef88e3d2dec1d53caba7820a9366b45"><div class="ttname"><a href="classxrpl_1_1STAmount.html#aeef88e3d2dec1d53caba7820a9366b45">xrpl::STAmount::value</a></div><div class="ttdeci">STAmount const &amp; value() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00561">STAmount.h:561</a></div></div>
<div class="ttc" id="aclassxrpl_1_1STObject_html_a21d39460447a8fb1924b280226a36cdb"><div class="ttname"><a href="classxrpl_1_1STObject.html#a21d39460447a8fb1924b280226a36cdb">xrpl::STObject::getFieldVL</a></div><div class="ttdeci">Blob getFieldVL(SField const &amp;field) const</div><div class="ttdef"><b>Definition</b> <a href="STObject_8cpp_source.html#l00624">STObject.cpp:624</a></div></div>
<div class="ttc" id="aclassxrpl_1_1STObject_html_a7bdbcf0876b32435747f97897c466c21"><div class="ttname"><a href="classxrpl_1_1STObject.html#a7bdbcf0876b32435747f97897c466c21">xrpl::STObject::getSerializer</a></div><div class="ttdeci">Serializer getSerializer() const</div><div class="ttdef"><b>Definition</b> <a href="STObject_8h_source.html#l00967">STObject.h:967</a></div></div>
<div class="ttc" id="aclassxrpl_1_1STObject_html_aac3f63cc407624395417f332ad7c1e27"><div class="ttname"><a href="classxrpl_1_1STObject.html#aac3f63cc407624395417f332ad7c1e27">xrpl::STObject::setFieldObject</a></div><div class="ttdeci">void setFieldObject(SField const &amp;field, STObject const &amp;v)</div><div class="ttdef"><b>Definition</b> <a href="STObject_8cpp_source.html#l00808">STObject.cpp:808</a></div></div>
<div class="ttc" id="aclassxrpl_1_1STObject_html_aba0a57e267e426dee3a706b9660c31c0"><div class="ttname"><a href="classxrpl_1_1STObject.html#aba0a57e267e426dee3a706b9660c31c0">xrpl::STObject::getFieldObject</a></div><div class="ttdeci">STObject getFieldObject(SField const &amp;field) const</div><div class="ttdef"><b>Definition</b> <a href="STObject_8cpp_source.html#l00653">STObject.cpp:653</a></div></div>
<div class="ttc" id="aclassxrpl_1_1STTx_html"><div class="ttname"><a href="classxrpl_1_1STTx.html">xrpl::STTx</a></div><div class="ttdef"><b>Definition</b> <a href="STTx_8h_source.html#l00028">STTx.h:29</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Serializer_html"><div class="ttname"><a href="classxrpl_1_1Serializer.html">xrpl::Serializer</a></div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00021">Serializer.h:22</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Serializer_html_a9fdb78b3d7b575806292496989bd138a"><div class="ttname"><a href="classxrpl_1_1Serializer.html#a9fdb78b3d7b575806292496989bd138a">xrpl::Serializer::slice</a></div><div class="ttdeci">Slice slice() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00045">Serializer.h:45</a></div></div>
<div class="ttc" id="aclassxrpl_1_1Serializer_html_ab3962ec202d2878a540affd44febda14"><div class="ttname"><a href="classxrpl_1_1Serializer.html#ab3962ec202d2878a540affd44febda14">xrpl::Serializer::add32</a></div><div class="ttdeci">int add32(T i)</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00071">Serializer.h:71</a></div></div>
<div class="ttc" id="aclassxrpl_1_1ServiceRegistry_html_a4fba8128486dfaaca347f7ddc25aa9d5"><div class="ttname"><a href="classxrpl_1_1ServiceRegistry.html#a4fba8128486dfaaca347f7ddc25aa9d5">xrpl::ServiceRegistry::getFeeTrack</a></div><div class="ttdeci">virtual LoadFeeTrack &amp; getFeeTrack()=0</div></div>
<div class="ttc" id="aclassxrpl_1_1Slice_html"><div class="ttname"><a href="classxrpl_1_1Slice.html">xrpl::Slice</a></div><div class="ttdoc">An immutable linear range of bytes.</div><div class="ttdef"><b>Definition</b> <a href="Slice_8h_source.html#l00026">Slice.h:27</a></div></div>
<div class="ttc" id="aclassxrpl_1_1TERSubset_html"><div class="ttname"><a href="classxrpl_1_1TERSubset.html">xrpl::TERSubset&lt; CanCvtToTER &gt;</a></div></div>
<div class="ttc" id="aclassxrpl_1_1XRPAmount_html"><div class="ttname"><a href="classxrpl_1_1XRPAmount.html">xrpl::XRPAmount</a></div><div class="ttdef"><b>Definition</b> <a href="XRPAmount_8h_source.html#l00020">XRPAmount.h:24</a></div></div>
<div class="ttc" id="aclassxrpl_1_1XRPAmount_html_a76fd7d6c10208cac2115f8dd0b2ba95e"><div class="ttname"><a href="classxrpl_1_1XRPAmount.html#a76fd7d6c10208cac2115f8dd0b2ba95e">xrpl::XRPAmount::drops</a></div><div class="ttdeci">constexpr value_type drops() const</div><div class="ttdoc">Returns the number of drops.</div><div class="ttdef"><b>Definition</b> <a href="XRPAmount_8h_source.html#l00158">XRPAmount.h:158</a></div></div>
<div class="ttc" id="aclassxrpl_1_1base__uint_html"><div class="ttname"><a href="classxrpl_1_1base__uint.html">xrpl::base_uint&lt; 256 &gt;</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1LoanArbitrary__test_html"><div class="ttname"><a href="classxrpl_1_1test_1_1LoanArbitrary__test.html">xrpl::test::LoanArbitrary_test</a></div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06834">Loan_test.cpp:6835</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1LoanBatch__test_html"><div class="ttname"><a href="classxrpl_1_1test_1_1LoanBatch__test.html">xrpl::test::LoanBatch_test</a></div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06735">Loan_test.cpp:6736</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1LoanBatch__test_html_a00b5a1dc54941c12acd26661afd13f25"><div class="ttname"><a href="classxrpl_1_1test_1_1LoanBatch__test.html#a00b5a1dc54941c12acd26661afd13f25">xrpl::test::LoanBatch_test::engine_</a></div><div class="ttdeci">beast::xor_shift_engine engine_</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06738">Loan_test.cpp:6738</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html">xrpl::test::Loan_test</a></div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00019">Loan_test.cpp:20</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a09cd21d5faddbc05bcd238bbf602db9c"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a09cd21d5faddbc05bcd238bbf602db9c">xrpl::test::Loan_test::testCaseWrapper</a></div><div class="ttdeci">void testCaseWrapper(jtx::Env &amp;env, jtx::MPTTester &amp;mptt, std::array&lt; TAsset, NAsset &gt; const &amp;assets, BrokerInfo const &amp;broker, Number const &amp;loanAmount, int interestExponent)</div><div class="ttdoc">Wrapper to run a series of lifecycle tests for a given asset and loan amount.</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l01387">Loan_test.cpp:1387</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a0b4b28704db8a49421e9644031ae89f1"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a0b4b28704db8a49421e9644031ae89f1">xrpl::test::Loan_test::describeLoan</a></div><div class="ttdeci">void describeLoan(jtx::Env &amp;env, BrokerParameters const &amp;brokerParams, LoanParameters const &amp;loanParams, AssetType assetType, jtx::Account const &amp;issuer, jtx::Account const &amp;lender, jtx::Account const &amp;borrower)</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00602">Loan_test.cpp:602</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a0e7045b5ac0a07c23a631dd911475b6b"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a0e7045b5ac0a07c23a631dd911475b6b">xrpl::test::Loan_test::iouCurrency</a></div><div class="ttdeci">std::string const iouCurrency</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00027">Loan_test.cpp:27</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a16e7ed053e28fb64edbc031843eff1a6"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a16e7ed053e28fb64edbc031843eff1a6">xrpl::test::Loan_test::testLoanPayBrokerOwnerNoPermissionedDomainMPT</a></div><div class="ttdeci">void testLoanPayBrokerOwnerNoPermissionedDomainMPT()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06388">Loan_test.cpp:6388</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a184e6709c054be88398d1285f6e8488b"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a184e6709c054be88398d1285f6e8488b">xrpl::test::Loan_test::testBorrowerIsBroker</a></div><div class="ttdeci">void testBorrowerIsBroker()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l05981">Loan_test.cpp:5981</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a19655845410c48cd1d22a16f6a9988c6"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a19655845410c48cd1d22a16f6a9988c6">xrpl::test::Loan_test::testLoanPayDebtDecreaseInvariant</a></div><div class="ttdeci">void testLoanPayDebtDecreaseInvariant()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04288">Loan_test.cpp:4288</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a1abdf68a119ed28949354cd2a339e4f1"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a1abdf68a119ed28949354cd2a339e4f1">xrpl::test::Loan_test::testWrongMaxDebtBehavior</a></div><div class="ttdeci">void testWrongMaxDebtBehavior()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l03461">Loan_test.cpp:3461</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a1da6915aa15b143a7418ba41f101901c"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a1da6915aa15b143a7418ba41f101901c">xrpl::test::Loan_test::testLoanPayComputePeriodicPaymentValidTotalInterestPaidInvariant</a></div><div class="ttdeci">void testLoanPayComputePeriodicPaymentValidTotalInterestPaidInvariant()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04613">Loan_test.cpp:4613</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a2319fbdfa7d469531a7f2b8833e283b3"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a2319fbdfa7d469531a7f2b8833e283b3">xrpl::test::Loan_test::all</a></div><div class="ttdeci">FeatureBitset const all</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00024">Loan_test.cpp:24</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a26fce516afdd88ce328eb365eae1c226"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a26fce516afdd88ce328eb365eae1c226">xrpl::test::Loan_test::testLoanSetBrokerOwnerNoPermissionedDomainMPT</a></div><div class="ttdeci">void testLoanSetBrokerOwnerNoPermissionedDomainMPT()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06490">Loan_test.cpp:6490</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a39ac6df17c8b1d25022124125bca437b"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a39ac6df17c8b1d25022124125bca437b">xrpl::test::Loan_test::run</a></div><div class="ttdeci">void run() override</div><div class="ttdoc">Runs the suite.</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06681">Loan_test.cpp:6681</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a414bc4af8cad4452814565fcd80a3b5dab963e1952393b6f6899c6978de03a6f6"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5dab963e1952393b6f6899c6978de03a6f6">xrpl::test::Loan_test::AssetType::XRP</a></div><div class="ttdeci">@ XRP</div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a414bc4af8cad4452814565fcd80a3b5dabb4f8bb682e49b9452aa1cc2d348bbfe"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5dabb4f8bb682e49b9452aa1cc2d348bbfe">xrpl::test::Loan_test::AssetType::MPT</a></div><div class="ttdeci">@ MPT</div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a414bc4af8cad4452814565fcd80a3b5daf73c709124099e497ad22ae14efb498b"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a414bc4af8cad4452814565fcd80a3b5daf73c709124099e497ad22ae14efb498b">xrpl::test::Loan_test::AssetType::IOU</a></div><div class="ttdeci">@ IOU</div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a48f0c2407a9bb51665073c1e1f81abaa"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a48f0c2407a9bb51665073c1e1f81abaa">xrpl::test::Loan_test::topUpBorrower</a></div><div class="ttdeci">void topUpBorrower(jtx::Env &amp;env, BrokerInfo const &amp;broker, jtx::Account const &amp;issuer, jtx::Account const &amp;borrower, LoanState const &amp;state, std::optional&lt; Number &gt; const &amp;servFee)</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00714">Loan_test.cpp:714</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a4ad5cb9e4c0b0b39fa3536b24885c650"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a4ad5cb9e4c0b0b39fa3536b24885c650">xrpl::test::Loan_test::testAccountSendMptMinAmountInvariant</a></div><div class="ttdeci">void testAccountSendMptMinAmountInvariant()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04228">Loan_test.cpp:4228</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a50bd51c59a032921500d206140880f1c"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a50bd51c59a032921500d206140880f1c">xrpl::test::Loan_test::canImpairLoan</a></div><div class="ttdeci">bool canImpairLoan(jtx::Env const &amp;env, BrokerInfo const &amp;broker, LoanState const &amp;state)</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00519">Loan_test.cpp:519</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a51e6a908991aefa9c08d877ce724e8c1"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a51e6a908991aefa9c08d877ce724e8c1">xrpl::test::Loan_test::lifecycle</a></div><div class="ttdeci">void lifecycle(std::string const &amp;caseLabel, char const *label, jtx::Env &amp;env, Number const &amp;loanAmount, int interestExponent, jtx::Account const &amp;lender, jtx::Account const &amp;borrower, jtx::Account const &amp;evan, BrokerInfo const &amp;broker, jtx::Account const &amp;pseudoAcct, std::uint32_t flags, std::function&lt; void(Keylet const &amp;loanKeylet, VerifyLoanStatus const &amp;verifyLoanStatus)&gt; toEndOfLife)</div><div class="ttdoc">Runs through the complete lifecycle of a loan.</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l01092">Loan_test.cpp:1092</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a528a59a9d585bd417f9b0cd20a9068cb"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a528a59a9d585bd417f9b0cd20a9068cb">xrpl::test::Loan_test::testLifecycle</a></div><div class="ttdeci">void testLifecycle()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l03169">Loan_test.cpp:3169</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a53c8baf0baea42d165e9d9f4b4235650"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a53c8baf0baea42d165e9d9f4b4235650">xrpl::test::Loan_test::testInvalidLoanPay</a></div><div class="ttdeci">void testInvalidLoanPay()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04021">Loan_test.cpp:4021</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a5ed806a4e5003ece4d142ea90543f27c"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a5ed806a4e5003ece4d142ea90543f27c">xrpl::test::Loan_test::testRoundingAllowsUndercoverage</a></div><div class="ttdeci">void testRoundingAllowsUndercoverage()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l05852">Loan_test.cpp:5852</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a61c6158c0ef99b4a475a8ce763f470eb"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a61c6158c0ef99b4a475a8ce763f470eb">xrpl::test::Loan_test::testLoanPayComputePeriodicPaymentValidTotalInterestInvariant</a></div><div class="ttdeci">void testLoanPayComputePeriodicPaymentValidTotalInterestInvariant()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04376">Loan_test.cpp:4376</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a6342c21a806d24708eb43912904c0b6a"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a6342c21a806d24708eb43912904c0b6a">xrpl::test::Loan_test::testIssuerLoan</a></div><div class="ttdeci">void testIssuerLoan()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l03950">Loan_test.cpp:3950</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a6aff6818be67620fa3f456fb57590e4c"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a6aff6818be67620fa3f456fb57590e4c">xrpl::test::Loan_test::testLoanPayBrokerOwnerUnauthorizedMPT</a></div><div class="ttdeci">void testLoanPayBrokerOwnerUnauthorizedMPT()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06308">Loan_test.cpp:6308</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a6efc1ea6a25bdb0a06aec6a66079c866"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a6efc1ea6a25bdb0a06aec6a66079c866">xrpl::test::Loan_test::testCoverDepositWithdrawNonTransferableMPT</a></div><div class="ttdeci">void testCoverDepositWithdrawNonTransferableMPT()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04994">Loan_test.cpp:4994</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a76e4b8e68d7ee34160bb33c8ccd84b9b"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a76e4b8e68d7ee34160bb33c8ccd84b9b">xrpl::test::Loan_test::testInvalidLoanDelete</a></div><div class="ttdeci">void testInvalidLoanDelete()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l03987">Loan_test.cpp:3987</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a7b2e964c03ec067aae70db787045f120"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a7b2e964c03ec067aae70db787045f120">xrpl::test::Loan_test::testPoC_UnsignedUnderflowOnFullPayAfterEarlyPeriodic</a></div><div class="ttdeci">void testPoC_UnsignedUnderflowOnFullPayAfterEarlyPeriodic()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l05321">Loan_test.cpp:5321</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a8c15cc287e11639b169b1aeaf9e07060"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a8c15cc287e11639b169b1aeaf9e07060">xrpl::test::Loan_test::testRequireAuth</a></div><div class="ttdeci">void testRequireAuth()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04937">Loan_test.cpp:4937</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a8ca95877560a427aba3f4946eb1f6846"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a8ca95877560a427aba3f4946eb1f6846">xrpl::test::Loan_test::testLoanPayComputePeriodicPaymentValidRateInvariant</a></div><div class="ttdeci">void testLoanPayComputePeriodicPaymentValidRateInvariant()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l03506">Loan_test.cpp:3506</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a9900c15511e2509ba55a9709f59fbea9"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a9900c15511e2509ba55a9709f59fbea9">xrpl::test::Loan_test::runLoan</a></div><div class="ttdeci">void runLoan(AssetType assetType, BrokerParameters const &amp;brokerParams, LoanParameters const &amp;loanParams)</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l01049">Loan_test.cpp:1049</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a9bfaea39ae6963b5ef0ada399148cbaa"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a9bfaea39ae6963b5ef0ada399148cbaa">xrpl::test::Loan_test::testInvalidLoanSet</a></div><div class="ttdeci">void testInvalidLoanSet()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04100">Loan_test.cpp:4100</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a9faf01273184bf4a1a5741e1e44e6eb2"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a9faf01273184bf4a1a5741e1e44e6eb2">xrpl::test::Loan_test::testSelfLoan</a></div><div class="ttdeci">void testSelfLoan()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l03260">Loan_test.cpp:3260</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_a9fd84df8c86583bfbe1e02f015c60dc7"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#a9fd84df8c86583bfbe1e02f015c60dc7">xrpl::test::Loan_test::testLoanSet</a></div><div class="ttdeci">void testLoanSet()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l02614">Loan_test.cpp:2614</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_aa276ccf3658b5a876c2d440554a1e500"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#aa276ccf3658b5a876c2d440554a1e500">xrpl::test::Loan_test::testIssuerIsBorrower</a></div><div class="ttdeci">void testIssuerIsBorrower()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06087">Loan_test.cpp:6087</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_aa5f024cff13bac04480e38a4e5e35ae1"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#aa5f024cff13bac04480e38a4e5e35ae1">xrpl::test::Loan_test::testDisabled</a></div><div class="ttdeci">void testDisabled()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00030">Loan_test.cpp:30</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_aa95f5b301dbbdc784f4c6ec74a9dd64c"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#aa95f5b301dbbdc784f4c6ec74a9dd64c">xrpl::test::Loan_test::getCurrentState</a></div><div class="ttdeci">LoanState getCurrentState(jtx::Env const &amp;env, BrokerInfo const &amp;broker, Keylet const &amp;loanKeylet)</div><div class="ttdoc">Get the state without checking anything.</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00451">Loan_test.cpp:451</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_aaadcdbed8098b9084079b519ef9502b5"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#aaadcdbed8098b9084079b519ef9502b5">xrpl::test::Loan_test::makeLoanPayments</a></div><div class="ttdeci">void makeLoanPayments(jtx::Env &amp;env, BrokerInfo const &amp;broker, LoanParameters const &amp;loanParams, Keylet const &amp;loanKeylet, VerifyLoanStatus const &amp;verifyLoanStatus, jtx::Account const &amp;issuer, jtx::Account const &amp;lender, jtx::Account const &amp;borrower, PaymentParameters const &amp;paymentParams=PaymentParameters::defaults())</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00747">Loan_test.cpp:747</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_aab7908c8476aee2d1d0135ac4a177dc9"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#aab7908c8476aee2d1d0135ac4a177dc9">xrpl::test::Loan_test::testDosLoanPay</a></div><div class="ttdeci">void testDosLoanPay()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04441">Loan_test.cpp:4441</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_aaf854aae9551469f2610a2246805475a"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#aaf854aae9551469f2610a2246805475a">xrpl::test::Loan_test::testRIPD3831</a></div><div class="ttdeci">void testRIPD3831()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l05659">Loan_test.cpp:5659</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ab26a56e895cd9d642b6d2801fd594eb9"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ab26a56e895cd9d642b6d2801fd594eb9">xrpl::test::Loan_test::testInvalidLoanManage</a></div><div class="ttdeci">void testInvalidLoanManage()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04004">Loan_test.cpp:4004</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ab6f47ef38b13022ef4010f0bfe0cc281"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ab6f47ef38b13022ef4010f0bfe0cc281">xrpl::test::Loan_test::testLoanNextPaymentDueDateOverflow</a></div><div class="ttdeci">void testLoanNextPaymentDueDateOverflow()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04695">Loan_test.cpp:4695</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ab897521670089434de84309142f8c916"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ab897521670089434de84309142f8c916">xrpl::test::Loan_test::testDustManipulation</a></div><div class="ttdeci">void testDustManipulation()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l05523">Loan_test.cpp:5523</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_abf91eb91f62850329db2babe3be4fa2b"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#abf91eb91f62850329db2babe3be4fa2b">xrpl::test::Loan_test::testLoanPayBrokerOwnerMissingTrustline</a></div><div class="ttdeci">void testLoanPayBrokerOwnerMissingTrustline()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06241">Loan_test.cpp:6241</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ac2998c4caf26ba683b616861c057805c"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ac2998c4caf26ba683b616861c057805c">xrpl::test::Loan_test::testLoanPayComputePeriodicPaymentValidTotalPrincipalPaidInvariant</a></div><div class="ttdeci">void testLoanPayComputePeriodicPaymentValidTotalPrincipalPaidInvariant()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l04515">Loan_test.cpp:4515</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ac4c95bc58d306de8de546ac48a22de66"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ac4c95bc58d306de8de546ac48a22de66">xrpl::test::Loan_test::createVaultAndBroker</a></div><div class="ttdeci">BrokerInfo createVaultAndBroker(jtx::Env &amp;env, jtx::PrettyAsset const &amp;asset, jtx::Account const &amp;lender, BrokerParameters const &amp;params=BrokerParameters::defaults())</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00403">Loan_test.cpp:403</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ace0d2b7dbf91db8eb260184d9bf5ab58"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ace0d2b7dbf91db8eb260184d9bf5ab58">xrpl::test::Loan_test::getCurrencyLabel</a></div><div class="ttdeci">std::string getCurrencyLabel(Asset const &amp;asset)</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l01372">Loan_test.cpp:1372</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_acfc2a0b85ac94faf3b2cd28198f789be"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#acfc2a0b85ac94faf3b2cd28198f789be">xrpl::test::Loan_test::getCurrentState</a></div><div class="ttdeci">LoanState getCurrentState(jtx::Env const &amp;env, BrokerInfo const &amp;broker, Keylet const &amp;loanKeylet, VerifyLoanStatus const &amp;verifyLoanStatus)</div><div class="ttdoc">Get the state and check the values against the parameters used in lifecycle</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00480">Loan_test.cpp:480</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ad04c266c4e78414ea43306304e69b142"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ad04c266c4e78414ea43306304e69b142">xrpl::test::Loan_test::createAsset</a></div><div class="ttdeci">jtx::PrettyAsset createAsset(jtx::Env &amp;env, AssetType assetType, BrokerParameters const &amp;brokerParams, jtx::Account const &amp;issuer, jtx::Account const &amp;lender, jtx::Account const &amp;borrower)</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00543">Loan_test.cpp:543</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ad8d9812a828f362b7565bfb38dbdc1a8"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ad8d9812a828f362b7565bfb38dbdc1a8">xrpl::test::Loan_test::testRPC</a></div><div class="ttdeci">void testRPC()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l03574">Loan_test.cpp:3574</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ae0068feed72b54b82f8413e09a0ea830"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ae0068feed72b54b82f8413e09a0ea830">xrpl::test::Loan_test::testRIPD3901</a></div><div class="ttdeci">void testRIPD3901()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l05799">Loan_test.cpp:5799</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_ae30b1026332f38925b8e75291418804d"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#ae30b1026332f38925b8e75291418804d">xrpl::test::Loan_test::createLoan</a></div><div class="ttdeci">std::optional&lt; std::tuple&lt; BrokerInfo, Keylet, jtx::Account &gt; &gt; createLoan(jtx::Env &amp;env, AssetType assetType, BrokerParameters const &amp;brokerParams, LoanParameters const &amp;loanParams, jtx::Account const &amp;issuer, jtx::Account const &amp;lender, jtx::Account const &amp;borrower)</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00644">Loan_test.cpp:644</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_aecf08c8aed881083fc259c0edebd8294"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#aecf08c8aed881083fc259c0edebd8294">xrpl::test::Loan_test::testLimitExceeded</a></div><div class="ttdeci">void testLimitExceeded()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06132">Loan_test.cpp:6132</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_af42912e3403ffd4aef47d1661d0b90c9"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#af42912e3403ffd4aef47d1661d0b90c9">xrpl::test::Loan_test::testBatchBypassCounterparty</a></div><div class="ttdeci">void testBatchBypassCounterparty()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l03393">Loan_test.cpp:3393</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_af4acd4d2f41e815fbed08ba3ecc6084a"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#af4acd4d2f41e815fbed08ba3ecc6084a">xrpl::test::Loan_test::testOverpaymentManagementFee</a></div><div class="ttdeci">void testOverpaymentManagementFee()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06190">Loan_test.cpp:6190</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_afc5b2c173917c6d7cd9bf7dc145bc5c0"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#afc5b2c173917c6d7cd9bf7dc145bc5c0">xrpl::test::Loan_test::testRIPD3459</a></div><div class="ttdeci">void testRIPD3459()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l05731">Loan_test.cpp:5731</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_afc840814ae2aab06c94541c6e5ce9c1c"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#afc840814ae2aab06c94541c6e5ce9c1c">xrpl::test::Loan_test::testRIPD3902</a></div><div class="ttdeci">void testRIPD3902()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l05928">Loan_test.cpp:5928</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_aff3008756f774ed1b2381e1b97cdd87d"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#aff3008756f774ed1b2381e1b97cdd87d">xrpl::test::Loan_test::testSequentialFLCDepletion</a></div><div class="ttdeci">void testSequentialFLCDepletion()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l06562">Loan_test.cpp:6562</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1Loan__test_html_aff3364828cb27e915a7086be2e436a1c"><div class="ttname"><a href="classxrpl_1_1test_1_1Loan__test.html#aff3364828cb27e915a7086be2e436a1c">xrpl::test::Loan_test::testServiceFeeOnBrokerDeepFreeze</a></div><div class="ttdeci">void testServiceFeeOnBrokerDeepFreeze()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l03867">Loan_test.cpp:3867</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Account_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Account.html">xrpl::test::jtx::Account</a></div><div class="ttdoc">Immutable cryptographic account descriptor.</div><div class="ttdef"><b>Definition</b> <a href="Account_8h_source.html#l00019">Account.h:20</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Account_html_a1030616ab26f1509edd6eafe42349655"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Account.html#a1030616ab26f1509edd6eafe42349655">xrpl::test::jtx::Account::sk</a></div><div class="ttdeci">SecretKey const &amp; sk() const</div><div class="ttdoc">Return the secret key.</div><div class="ttdef"><b>Definition</b> <a href="Account_8h_source.html#l00078">Account.h:78</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Account_html_a26a750f85953905d4d29b1477a38ea37"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Account.html#a26a750f85953905d4d29b1477a38ea37">xrpl::test::jtx::Account::human</a></div><div class="ttdeci">std::string const &amp; human() const</div><div class="ttdoc">Returns the human readable public key.</div><div class="ttdef"><b>Definition</b> <a href="Account_8h_source.html#l00095">Account.h:95</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Account_html_a8345e525bfee1c86bfa44a3eefdcfb0a"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Account.html#a8345e525bfee1c86bfa44a3eefdcfb0a">xrpl::test::jtx::Account::name</a></div><div class="ttdeci">std::string const &amp; name() const</div><div class="ttdoc">Return the name.</div><div class="ttdef"><b>Definition</b> <a href="Account_8h_source.html#l00064">Account.h:64</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Account_html_a91c4171be792f96813671a493a4e10b5"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Account.html#a91c4171be792f96813671a493a4e10b5">xrpl::test::jtx::Account::pk</a></div><div class="ttdeci">PublicKey const &amp; pk() const</div><div class="ttdoc">Return the public key.</div><div class="ttdef"><b>Definition</b> <a href="Account_8h_source.html#l00071">Account.h:71</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Account_html_aefcff537de98b56ea2f59a9b618cd246"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Account.html#aefcff537de98b56ea2f59a9b618cd246">xrpl::test::jtx::Account::id</a></div><div class="ttdeci">AccountID id() const</div><div class="ttdoc">Returns the Account ID.</div><div class="ttdef"><b>Definition</b> <a href="Account_8h_source.html#l00088">Account.h:88</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html">xrpl::test::jtx::Env</a></div><div class="ttdoc">A transaction testing environment.</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00097">Env.h:98</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_a00e2950377b152b92bbf93e4b3c8c474"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#a00e2950377b152b92bbf93e4b3c8c474">xrpl::test::jtx::Env::app</a></div><div class="ttdeci">Application &amp; app()</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00230">Env.h:230</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_a0e3c16e11ba7ddebd9d9eb1112f59dce"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#a0e3c16e11ba7ddebd9d9eb1112f59dce">xrpl::test::jtx::Env::close</a></div><div class="ttdeci">bool close(NetClock::time_point closeTime, std::optional&lt; std::chrono::milliseconds &gt; consensusDelay=std::nullopt)</div><div class="ttdoc">Close and advance the ledger.</div><div class="ttdef"><b>Definition</b> <a href="Env_8cpp_source.html#l00097">Env.cpp:97</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_a13e30a79b03fb9f0f43b6bc0a41c25b8"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#a13e30a79b03fb9f0f43b6bc0a41c25b8">xrpl::test::jtx::Env::ter</a></div><div class="ttdeci">TER ter() const</div><div class="ttdoc">Return the TER for the last JTx.</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00560">Env.h:560</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_a4865ffdfc2b35ef2e94990ac89f7fd3b"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#a4865ffdfc2b35ef2e94990ac89f7fd3b">xrpl::test::jtx::Env::ownerCount</a></div><div class="ttdeci">std::uint32_t ownerCount(Account const &amp;account) const</div><div class="ttdoc">Return the number of objects owned by an account.</div><div class="ttdef"><b>Definition</b> <a href="Env_8cpp_source.html#l00230">Env.cpp:230</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_a53bd0932e3b83e13c1233076afb31e79"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#a53bd0932e3b83e13c1233076afb31e79">xrpl::test::jtx::Env::le</a></div><div class="ttdeci">std::shared_ptr&lt; SLE const &gt; le(Account const &amp;account) const</div><div class="ttdoc">Return an account root.</div><div class="ttdef"><b>Definition</b> <a href="Env_8cpp_source.html#l00248">Env.cpp:248</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_a5bb0bdfba5b61e9c7de31524ab04cd5b"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#a5bb0bdfba5b61e9c7de31524ab04cd5b">xrpl::test::jtx::Env::fund</a></div><div class="ttdeci">void fund(bool setDefaultRipple, STAmount const &amp;amount, Account const &amp;account)</div><div class="ttdef"><b>Definition</b> <a href="Env_8cpp_source.html#l00260">Env.cpp:260</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_a7e2bf847bf817405a5d8db448d8b4f6f"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#a7e2bf847bf817405a5d8db448d8b4f6f">xrpl::test::jtx::Env::seq</a></div><div class="ttdeci">std::uint32_t seq(Account const &amp;account) const</div><div class="ttdoc">Returns the next sequence number on account.</div><div class="ttdef"><b>Definition</b> <a href="Env_8cpp_source.html#l00239">Env.cpp:239</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_a916c0ffc7b244ec6267058543a0b5598"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#a916c0ffc7b244ec6267058543a0b5598">xrpl::test::jtx::Env::master</a></div><div class="ttdeci">Account const &amp; master</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00102">Env.h:102</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_aa17b34198293cae7b0af571ae0ad042d"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa17b34198293cae7b0af571ae0ad042d">xrpl::test::jtx::Env::jt</a></div><div class="ttdeci">JTx jt(JsonValue &amp;&amp;jv, FN const &amp;... fN)</div><div class="ttdoc">Create a JTx from parameters.</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00473">Env.h:473</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_aa2ed1008a1255e44a9c7b00ba01fa6ee"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#aa2ed1008a1255e44a9c7b00ba01fa6ee">xrpl::test::jtx::Env::balance</a></div><div class="ttdeci">PrettyAmount balance(Account const &amp;account) const</div><div class="ttdoc">Returns the XRP balance on an account.</div><div class="ttdef"><b>Definition</b> <a href="Env_8cpp_source.html#l00157">Env.cpp:157</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_ac1cc0aa631352a83f9fdb6a29cf3d68f"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac1cc0aa631352a83f9fdb6a29cf3d68f">xrpl::test::jtx::Env::json</a></div><div class="ttdeci">Json::Value json(JsonValue &amp;&amp;jv, FN const &amp;... fN)</div><div class="ttdoc">Create JSON from parameters.</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00499">Env.h:499</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_ac2e59aeca64d95562a97b5c84e902d7b"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac2e59aeca64d95562a97b5c84e902d7b">xrpl::test::jtx::Env::test</a></div><div class="ttdeci">beast::unit_test::suite &amp; test</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00100">Env.h:100</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_ac45f1590dafbd296693c57c285f2874b"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac45f1590dafbd296693c57c285f2874b">xrpl::test::jtx::Env::trust</a></div><div class="ttdeci">void trust(STAmount const &amp;amount, Account const &amp;account)</div><div class="ttdoc">Establish trust lines.</div><div class="ttdef"><b>Definition</b> <a href="Env_8cpp_source.html#l00283">Env.cpp:283</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_ac6543a11afe1cfb9f631cd04c8d45764"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#ac6543a11afe1cfb9f631cd04c8d45764">xrpl::test::jtx::Env::rpc</a></div><div class="ttdeci">Json::Value rpc(unsigned apiVersion, std::unordered_map&lt; std::string, std::string &gt; const &amp;headers, std::string const &amp;cmd, Args &amp;&amp;... args)</div><div class="ttdoc">Execute an RPC command.</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00749">Env.h:749</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_ad0dadd1b0b0ef450a705dccc06d02646"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#ad0dadd1b0b0ef450a705dccc06d02646">xrpl::test::jtx::Env::meta</a></div><div class="ttdeci">std::shared_ptr&lt; STObject const &gt; meta()</div><div class="ttdoc">Return metadata for the last JTx.</div><div class="ttdef"><b>Definition</b> <a href="Env_8cpp_source.html#l00450">Env.cpp:450</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_af5fb4f29ed4ad1594323cd5d11d1cdcb"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#af5fb4f29ed4ad1594323cd5d11d1cdcb">xrpl::test::jtx::Env::journal</a></div><div class="ttdeci">beast::Journal const journal</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00139">Env.h:139</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_af7d9ac71b3ca193f66ca3703595d7e40"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7d9ac71b3ca193f66ca3703595d7e40">xrpl::test::jtx::Env::require</a></div><div class="ttdeci">void require(Args const &amp;... args)</div><div class="ttdoc">Check a set of requirements.</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00512">Env.h:512</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_af7f5213163cfb1264ae49e0b4eff1a1e"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#af7f5213163cfb1264ae49e0b4eff1a1e">xrpl::test::jtx::Env::current</a></div><div class="ttdeci">std::shared_ptr&lt; OpenView const &gt; current() const</div><div class="ttdoc">Returns the current ledger.</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00298">Env.h:298</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1Env_html_afc1be82a2d1572220adef1b06e2fda54"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1Env.html#afc1be82a2d1572220adef1b06e2fda54">xrpl::test::jtx::Env::now</a></div><div class="ttdeci">NetClock::time_point now()</div><div class="ttdoc">Returns the current network time.</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00253">Env.h:253</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1IOU_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1IOU.html">xrpl::test::jtx::IOU</a></div><div class="ttdoc">Converts to IOU Issue or STAmount.</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00376">src/test/jtx/amount.h:377</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1MPTTester_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html">xrpl::test::jtx::MPTTester</a></div><div class="ttdef"><b>Definition</b> <a href="mpt_8h_source.html#l00158">mpt.h:159</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1MPTTester_html_a1991c39ac5c5bd21f7bb3736b811f14f"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a1991c39ac5c5bd21f7bb3736b811f14f">xrpl::test::jtx::MPTTester::set</a></div><div class="ttdeci">void set(MPTSet const &amp;set={})</div><div class="ttdef"><b>Definition</b> <a href="mpt_8cpp_source.html#l00327">mpt.cpp:327</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1MPTTester_html_a65c17f9abbed1175a1f3ad608a020494"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a65c17f9abbed1175a1f3ad608a020494">xrpl::test::jtx::MPTTester::authorize</a></div><div class="ttdeci">void authorize(MPTAuthorize const &amp;arg=MPTAuthorize{})</div><div class="ttdef"><b>Definition</b> <a href="mpt_8cpp_source.html#l00228">mpt.cpp:228</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1MPTTester_html_a6fbe6f3d9a87ff807153e65068658eab"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1MPTTester.html#a6fbe6f3d9a87ff807153e65068658eab">xrpl::test::jtx::MPTTester::issuanceID</a></div><div class="ttdeci">MPTID const &amp; issuanceID() const</div><div class="ttdef"><b>Definition</b> <a href="mpt_8h_source.html#l00250">mpt.h:250</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1MPT_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1MPT.html">xrpl::test::jtx::MPT</a></div><div class="ttdoc">Converts to MPT Issue or STAmount.</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00459">src/test/jtx/amount.h:460</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1MPT_html_a1d9c328d681c9f90eb52ae5c5163af7a"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1MPT.html#a1d9c328d681c9f90eb52ae5c5163af7a">xrpl::test::jtx::MPT::issuanceID</a></div><div class="ttdeci">xrpl::MPTID issuanceID</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00463">src/test/jtx/amount.h:463</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1balance_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1balance.html">xrpl::test::jtx::balance</a></div><div class="ttdoc">A balance matches.</div><div class="ttdef"><b>Definition</b> <a href="balance_8h_source.html#l00019">balance.h:20</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1batch_1_1inner_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1batch_1_1inner.html">xrpl::test::jtx::batch::inner</a></div><div class="ttdoc">Adds a new Batch Txn on a JTx and autofills.</div><div class="ttdef"><b>Definition</b> <a href="batch_8h_source.html#l00034">batch.h:35</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1fee_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1fee.html">xrpl::test::jtx::fee</a></div><div class="ttdoc">Set the fee on a JTx.</div><div class="ttdef"><b>Definition</b> <a href="fee_8h_source.html#l00017">fee.h:18</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1flags_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1flags.html">xrpl::test::jtx::flags</a></div><div class="ttdoc">Match set account flags.</div><div class="ttdef"><b>Definition</b> <a href="flags_8h_source.html#l00108">flags.h:109</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1json_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1json.html">xrpl::test::jtx::json</a></div><div class="ttdoc">Inject raw JSON.</div><div class="ttdef"><b>Definition</b> <a href="jtx__json_8h_source.html#l00013">jtx_json.h:14</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1msig_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1msig.html">xrpl::test::jtx::msig</a></div><div class="ttdoc">Set a multisignature on a JTx.</div><div class="ttdef"><b>Definition</b> <a href="multisign_8h_source.html#l00041">multisign.h:42</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1sig_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1sig.html">xrpl::test::jtx::sig</a></div><div class="ttdoc">Set the regular signature on a JTx.</div><div class="ttdef"><b>Definition</b> <a href="sig_8h_source.html#l00015">sig.h:16</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1ter_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1ter.html">xrpl::test::jtx::ter</a></div><div class="ttdoc">Set the expected result code for a JTx The test will fail if the code doesn't match.</div><div class="ttdef"><b>Definition</b> <a href="ter_8h_source.html#l00015">ter.h:16</a></div></div>
<div class="ttc" id="aclassxrpl_1_1test_1_1jtx_1_1txflags_html"><div class="ttname"><a href="classxrpl_1_1test_1_1jtx_1_1txflags.html">xrpl::test::jtx::txflags</a></div><div class="ttdoc">Set the flags on a JTx.</div><div class="ttdef"><b>Definition</b> <a href="txflags_8h_source.html#l00011">txflags.h:12</a></div></div>
<div class="ttc" id="aclassxrpl_1_1unit_1_1ValueUnit_html"><div class="ttname"><a href="classxrpl_1_1unit_1_1ValueUnit.html">xrpl::unit::ValueUnit</a></div><div class="ttdef"><b>Definition</b> <a href="Units_8h_source.html#l00070">Units.h:76</a></div></div>
<div class="ttc" id="aclassxrpl_1_1unit_1_1ValueUnit_html_a11cab90191ba952710e80df82c3a722c"><div class="ttname"><a href="classxrpl_1_1unit_1_1ValueUnit.html#a11cab90191ba952710e80df82c3a722c">xrpl::unit::ValueUnit::value</a></div><div class="ttdeci">constexpr value_type value() const</div><div class="ttdoc">Returns the underlying value.</div><div class="ttdef"><b>Definition</b> <a href="Units_8h_source.html#l00318">Units.h:318</a></div></div>
<div class="ttc" id="aconceptxrpl_1_1AssetType_html"><div class="ttname"><a href="conceptxrpl_1_1AssetType.html">xrpl::AssetType</a></div><div class="ttdef"><b>Definition</b> <a href="Asset_8h_source.html#l00018">Asset.h:18</a></div></div>
<div class="ttc" id="acount_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/count.html">std::count</a></div><div class="ttdeci">T count(T... args)</div></div>
<div class="ttc" id="aduration_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/duration.html">std::chrono::milliseconds</a></div></div>
<div class="ttc" id="aemplace_back_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/emplace_back.html">std::vector::emplace_back</a></div><div class="ttdeci">T emplace_back(T... args)</div></div>
<div class="ttc" id="aendl_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/manip/endl.html">std::endl</a></div><div class="ttdeci">T endl(T... args)</div></div>
<div class="ttc" id="afunction_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/functional/function.html">std::function</a></div></div>
<div class="ttc" id="ainteger_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a></div></div>
<div class="ttc" id="ais_same_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/is_same.html">std::is_same_v</a></div><div class="ttdeci">T is_same_v</div></div>
<div class="ttc" id="alog_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/math/log.html">std::log</a></div><div class="ttdeci">T log(T... args)</div></div>
<div class="ttc" id="amake_pair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair/make_pair.html">std::make_pair</a></div><div class="ttdeci">T make_pair(T... args)</div></div>
<div class="ttc" id="amake_tuple_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/tuple/make_tuple.html">std::make_tuple</a></div><div class="ttdeci">T make_tuple(T... args)</div></div>
<div class="ttc" id="amap_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/map.html">std::map</a></div></div>
<div class="ttc" id="amax_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/max.html">std::max</a></div><div class="ttdeci">T max(T... args)</div></div>
<div class="ttc" id="amin_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/min.html">std::min</a></div><div class="ttdeci">T min(T... args)</div></div>
<div class="ttc" id="anamespaceJson_html_a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6"><div class="ttname"><a href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a></div><div class="ttdeci">@ objectValue</div><div class="ttdoc">object value (collection of name/value pairs).</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00028">json_value.h:27</a></div></div>
<div class="ttc" id="anamespacebeast_1_1severities_html_a069a8a312b9123b77f6aa31733ca73beab6ef7006e42e82dcc97478e4e362f883"><div class="ttname"><a href="namespacebeast_1_1severities.html#a069a8a312b9123b77f6aa31733ca73beab6ef7006e42e82dcc97478e4e362f883">beast::severities::kWarning</a></div><div class="ttdeci">@ kWarning</div><div class="ttdef"><b>Definition</b> <a href="Journal_8h_source.html#l00019">Journal.h:19</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1Resource_html_ab77f0c09f83f4b7b2dc2607bcdf8054c"><div class="ttname"><a href="namespacexrpl_1_1Resource.html#ab77f0c09f83f4b7b2dc2607bcdf8054c">xrpl::Resource::clock_type</a></div><div class="ttdeci">beast::abstract_clock&lt; std::chrono::steady_clock &gt; clock_type</div><div class="ttdef"><b>Definition</b> <a href="Entry_8h_source.html#l00014">Entry.h:14</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1detail_html_a15d4f3e9643b3ad99537596be2abca8f"><div class="ttname"><a href="namespacexrpl_1_1detail.html#a15d4f3e9643b3ad99537596be2abca8f">xrpl::detail::computePaymentComponents</a></div><div class="ttdeci">PaymentComponents computePaymentComponents(Asset const &amp;asset, std::int32_t scale, Number const &amp;totalValueOutstanding, Number const &amp;principalOutstanding, Number const &amp;managementFeeOutstanding, Number const &amp;periodicPayment, Number const &amp;periodicRate, std::uint32_t paymentRemaining, TenthBips16 managementFeeRate)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l00859">LendingHelpers.cpp:859</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1detail_html_a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5"><div class="ttname"><a href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0a2a1585a864d9e67627c6ae04c807a2c5">xrpl::detail::PaymentSpecialCase::final</a></div><div class="ttdeci">@ final</div></div>
<div class="ttc" id="anamespacexrpl_1_1detail_html_a230ef83732e01df4f26a546cfadcbab0aea9f91b2cda019730f2891bd12a7a4d6"><div class="ttname"><a href="namespacexrpl_1_1detail.html#a230ef83732e01df4f26a546cfadcbab0aea9f91b2cda019730f2891bd12a7a4d6">xrpl::detail::PaymentSpecialCase::extra</a></div><div class="ttdeci">@ extra</div></div>
<div class="ttc" id="anamespacexrpl_1_1keylet_html_a5a4a8623c7e5f6f866110316a6b286d4"><div class="ttname"><a href="namespacexrpl_1_1keylet.html#a5a4a8623c7e5f6f866110316a6b286d4">xrpl::keylet::loanbroker</a></div><div class="ttdeci">Keylet loanbroker(AccountID const &amp;owner, std::uint32_t seq) noexcept</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00498">Indexes.cpp:498</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1keylet_html_a815241502a868c86a9990734bb43c69a"><div class="ttname"><a href="namespacexrpl_1_1keylet.html#a815241502a868c86a9990734bb43c69a">xrpl::keylet::loan</a></div><div class="ttdeci">Keylet loan(uint256 const &amp;loanBrokerID, std::uint32_t loanSeq) noexcept</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00504">Indexes.cpp:504</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1keylet_html_a9a7028770e8d9d38ca198d2096149766"><div class="ttname"><a href="namespacexrpl_1_1keylet.html#a9a7028770e8d9d38ca198d2096149766">xrpl::keylet::vault</a></div><div class="ttdeci">Keylet vault(AccountID const &amp;owner, std::uint32_t seq) noexcept</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00492">Indexes.cpp:492</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1keylet_html_aa21a42ef67381b26994fa7a9960b1306"><div class="ttname"><a href="namespacexrpl_1_1keylet.html#aa21a42ef67381b26994fa7a9960b1306">xrpl::keylet::line</a></div><div class="ttdeci">Keylet line(AccountID const &amp;id0, AccountID const &amp;id1, Currency const &amp;currency) noexcept</div><div class="ttdoc">The index of a trust line for a given currency.</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00214">Indexes.cpp:214</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1keylet_html_ab3ec6c5e531adf3b2fbee3a984c3d453"><div class="ttname"><a href="namespacexrpl_1_1keylet.html#ab3ec6c5e531adf3b2fbee3a984c3d453">xrpl::keylet::mptoken</a></div><div class="ttdeci">Keylet mptoken(MPTID const &amp;issuanceID, AccountID const &amp;holder) noexcept</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00474">Indexes.cpp:474</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1keylet_html_ac5d7a88f7cef6ac1ddf06020da8ded16"><div class="ttname"><a href="namespacexrpl_1_1keylet.html#ac5d7a88f7cef6ac1ddf06020da8ded16">xrpl::keylet::account</a></div><div class="ttdeci">Keylet account(AccountID const &amp;id) noexcept</div><div class="ttdoc">AccountID root.</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00160">Indexes.cpp:160</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1amm_html_a3d11c7306297164e4b14eb26e50efc68"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a3d11c7306297164e4b14eb26e50efc68">xrpl::test::jtx::amm::trust</a></div><div class="ttdeci">Json::Value trust(AccountID const &amp;account, STAmount const &amp;amount, std::uint32_t flags=0)</div><div class="ttdef"><b>Definition</b> <a href="AMM_8cpp_source.html#l00650">AMM.cpp:650</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1amm_html_a98161f69c0b208ca3c1530a95907b729"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1amm.html#a98161f69c0b208ca3c1530a95907b729">xrpl::test::jtx::amm::pay</a></div><div class="ttdeci">Json::Value pay(Account const &amp;account, AccountID const &amp;to, STAmount const &amp;amount)</div><div class="ttdef"><b>Definition</b> <a href="AMM_8cpp_source.html#l00662">AMM.cpp:662</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1batch_html_a6b275a73061974d679756897fb84c887"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1batch.html#a6b275a73061974d679756897fb84c887">xrpl::test::jtx::batch::outer</a></div><div class="ttdeci">Json::Value outer(jtx::Account const &amp;account, uint32_t seq, STAmount const &amp;fee, std::uint32_t flags)</div><div class="ttdoc">Batch.</div><div class="ttdef"><b>Definition</b> <a href="batch_8cpp_source.html#l00027">batch.cpp:27</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1batch_html_ad0864e770e42d7ca0c82aa7cc3c4d2af"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1batch.html#ad0864e770e42d7ca0c82aa7cc3c4d2af">xrpl::test::jtx::batch::calcBatchFee</a></div><div class="ttdeci">XRPAmount calcBatchFee(jtx::Env const &amp;env, uint32_t const &amp;numSigners, uint32_t const &amp;txns=0)</div><div class="ttdoc">Calculate Batch Fee.</div><div class="ttdef"><b>Definition</b> <a href="batch_8cpp_source.html#l00019">batch.cpp:19</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1credentials_html_af1ccb12c9d3bdc8524217f3d6eca130c"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1credentials.html#af1ccb12c9d3bdc8524217f3d6eca130c">xrpl::test::jtx::credentials::keylet</a></div><div class="ttdeci">Keylet keylet(test::jtx::Account const &amp;subject, test::jtx::Account const &amp;issuer, std::string_view credType)</div><div class="ttdef"><b>Definition</b> <a href="credentials_8h_source.html#l00015">credentials.h:15</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loanBroker_html_a18c6e7172f76ece96bfb3797855ed4d3"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a18c6e7172f76ece96bfb3797855ed4d3">xrpl::test::jtx::loanBroker::coverDeposit</a></div><div class="ttdeci">Json::Value coverDeposit(AccountID const &amp;account, uint256 const &amp;brokerID, STAmount const &amp;amount, uint32_t flags)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00344">TestHelpers.cpp:344</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loanBroker_html_a308f75c4b54a6dfaa98789c892183eb8"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a308f75c4b54a6dfaa98789c892183eb8">xrpl::test::jtx::loanBroker::coverWithdraw</a></div><div class="ttdeci">Json::Value coverWithdraw(AccountID const &amp;account, uint256 const &amp;brokerID, STAmount const &amp;amount, uint32_t flags)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00356">TestHelpers.cpp:356</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loanBroker_html_a356a504c7d6a431398e71e9b121fb087"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a356a504c7d6a431398e71e9b121fb087">xrpl::test::jtx::loanBroker::del</a></div><div class="ttdeci">Json::Value del(AccountID const &amp;account, uint256 const &amp;brokerID, uint32_t flags)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00333">TestHelpers.cpp:333</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loanBroker_html_a4f7611e9fc090d73c33566d8492cd14a"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a4f7611e9fc090d73c33566d8492cd14a">xrpl::test::jtx::loanBroker::loanBrokerID</a></div><div class="ttdeci">auto const loanBrokerID</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00675">TestHelpers.h:675</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loanBroker_html_a54a1c903d8e032fb47d67dec00b62402"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a54a1c903d8e032fb47d67dec00b62402">xrpl::test::jtx::loanBroker::coverClawback</a></div><div class="ttdeci">Json::Value coverClawback(AccountID const &amp;account, std::uint32_t flags)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00368">TestHelpers.cpp:368</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loanBroker_html_a8d86fa894081f45945e58f12b1b908bc"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loanBroker.html#a8d86fa894081f45945e58f12b1b908bc">xrpl::test::jtx::loanBroker::managementFeeRate</a></div><div class="ttdeci">auto const managementFeeRate</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00677">TestHelpers.h:677</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_a208f2885c356ca80e32b01154d789fc9"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a208f2885c356ca80e32b01154d789fc9">xrpl::test::jtx::loan::loanServiceFee</a></div><div class="ttdeci">auto const loanServiceFee</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00702">TestHelpers.h:702</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_a37a1d4beea21d127c1ffc8359901f77a"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a37a1d4beea21d127c1ffc8359901f77a">xrpl::test::jtx::loan::paymentTotal</a></div><div class="ttdeci">auto const paymentTotal</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00718">TestHelpers.h:718</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_a3dec58a4faf452260e1293b6269a489b"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a3dec58a4faf452260e1293b6269a489b">xrpl::test::jtx::loan::paymentInterval</a></div><div class="ttdeci">auto const paymentInterval</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00720">TestHelpers.h:720</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_a47da9dc8ca59bbea7699977db4aea15f"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a47da9dc8ca59bbea7699977db4aea15f">xrpl::test::jtx::loan::lateInterestRate</a></div><div class="ttdeci">auto const lateInterestRate</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00712">TestHelpers.h:712</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_a730c01ba24a9428b93c162915ffac2d1"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a730c01ba24a9428b93c162915ffac2d1">xrpl::test::jtx::loan::set</a></div><div class="ttdeci">Json::Value set(AccountID const &amp;account, uint256 const &amp;loanBrokerID, Number principalRequested, std::uint32_t flags)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00384">TestHelpers.cpp:384</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_a883226ec89519e59a4e934cd584868ac"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#a883226ec89519e59a4e934cd584868ac">xrpl::test::jtx::loan::latePaymentFee</a></div><div class="ttdeci">auto const latePaymentFee</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00704">TestHelpers.h:704</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_aaf4a3d6848cb7ccce6a91e48ba420d87"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#aaf4a3d6848cb7ccce6a91e48ba420d87">xrpl::test::jtx::loan::closePaymentFee</a></div><div class="ttdeci">auto const closePaymentFee</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00706">TestHelpers.h:706</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_abbc7f3d362803a0d1b8206010cca42e8"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#abbc7f3d362803a0d1b8206010cca42e8">xrpl::test::jtx::loan::manage</a></div><div class="ttdeci">Json::Value manage(AccountID const &amp;account, uint256 const &amp;loanID, std::uint32_t flags)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00396">TestHelpers.cpp:396</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_ad31aeb9a4bdba1a78e42aa470d3855e8"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ad31aeb9a4bdba1a78e42aa470d3855e8">xrpl::test::jtx::loan::gracePeriod</a></div><div class="ttdeci">auto const gracePeriod</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00722">TestHelpers.h:722</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_ae7ec99a72a755d95dc56cf5e6d5c5593"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#ae7ec99a72a755d95dc56cf5e6d5c5593">xrpl::test::jtx::loan::closeInterestRate</a></div><div class="ttdeci">auto const closeInterestRate</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00714">TestHelpers.h:714</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_1_1loan_html_aff1d4b68944934076dad6fecd79f5de7"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx_1_1loan.html#aff1d4b68944934076dad6fecd79f5de7">xrpl::test::jtx::loan::interestRate</a></div><div class="ttdeci">auto const interestRate</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00710">TestHelpers.h:710</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a03b59a84add36087c1a9e344e8dfadf2"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a03b59a84add36087c1a9e344e8dfadf2">xrpl::test::jtx::mptInitNoFund</a></div><div class="ttdeci">static MPTInit const mptInitNoFund</div><div class="ttdef"><b>Definition</b> <a href="mpt_8h_source.html#l00104">mpt.h:104</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a293e60256c283a66afb95f4e20e1a3e3"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a293e60256c283a66afb95f4e20e1a3e3">xrpl::test::jtx::data</a></div><div class="ttdeci">auto const data</div><div class="ttdoc">General field definitions, or fields used in multiple transaction namespaces.</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00275">TestHelpers.h:275</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a2ec6331faf47b13b181f880e771b444a"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a2ec6331faf47b13b181f880e771b444a">xrpl::test::jtx::noop</a></div><div class="ttdeci">Json::Value noop(Account const &amp;account)</div><div class="ttdoc">The null transaction.</div><div class="ttdef"><b>Definition</b> <a href="noop_8h_source.html#l00012">noop.h:12</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a3bdb47f2467b3299e123b7edc8f9c9ff"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a3bdb47f2467b3299e123b7edc8f9c9ff">xrpl::test::jtx::trust</a></div><div class="ttdeci">Json::Value trust(Account const &amp;account, STAmount const &amp;amount, std::uint32_t flags)</div><div class="ttdoc">Modify a trust line.</div><div class="ttdef"><b>Definition</b> <a href="trust_8cpp_source.html#l00013">trust.cpp:13</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a3e1f4901e4bbcfed8fc80c31c2deda92"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a3e1f4901e4bbcfed8fc80c31c2deda92">xrpl::test::jtx::signers</a></div><div class="ttdeci">Json::Value signers(Account const &amp;account, std::uint32_t quorum, std::vector&lt; signer &gt; const &amp;v)</div><div class="ttdef"><b>Definition</b> <a href="multisign_8cpp_source.html#l00015">multisign.cpp:15</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a4ee345d5e6e5aba2de13526f1113ec4e"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a4ee345d5e6e5aba2de13526f1113ec4e">xrpl::test::jtx::ownerCount</a></div><div class="ttdeci">std::uint32_t ownerCount(Env const &amp;env, Account const &amp;account)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00035">TestHelpers.cpp:35</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a568efdba6a5908a8d64d4badc3f08f1a"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a568efdba6a5908a8d64d4badc3f08f1a">xrpl::test::jtx::txfee</a></div><div class="ttdeci">XRPAmount txfee(Env const &amp;env, std::uint16_t n)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00071">TestHelpers.cpp:71</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a57c217e2bf650f68bb9ee9b56331751b"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a57c217e2bf650f68bb9ee9b56331751b">xrpl::test::jtx::XRP</a></div><div class="ttdeci">XRP_t const XRP</div><div class="ttdoc">Converts to XRP Issue or STAmount.</div><div class="ttdef"><b>Definition</b> <a href="amount_8cpp_source.html#l00090">amount.cpp:90</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a59413b683073e7f993b3d22ccd0a91f9"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a59413b683073e7f993b3d22ccd0a91f9">xrpl::test::jtx::makeConfig</a></div><div class="ttdeci">std::unique_ptr&lt; Config &gt; makeConfig(std::map&lt; std::string, std::string &gt; extraTxQ={}, std::map&lt; std::string, std::string &gt; extraVoting={})</div><div class="ttdef"><b>Definition</b> <a href="envconfig_8cpp_source.html#l00122">envconfig.cpp:122</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a5e9aefba81df96566550cb03ccee33ed"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a5e9aefba81df96566550cb03ccee33ed">xrpl::test::jtx::number</a></div><div class="ttdeci">static Number number(STAmount const &amp;a)</div><div class="ttdef"><b>Definition</b> <a href="AMM_8cpp_source.html#l00017">AMM.cpp:17</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a62f8e22673d7d96178b89211b17ef09d"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a62f8e22673d7d96178b89211b17ef09d">xrpl::test::jtx::pay</a></div><div class="ttdeci">Json::Value pay(AccountID const &amp;account, AccountID const &amp;to, AnyAmount amount)</div><div class="ttdoc">Create a payment.</div><div class="ttdef"><b>Definition</b> <a href="pay_8cpp_source.html#l00011">pay.cpp:11</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a7b668aa8c543e60fd3e428c4f60fd6b6"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a7b668aa8c543e60fd3e428c4f60fd6b6">xrpl::test::jtx::fclear</a></div><div class="ttdeci">Json::Value fclear(Account const &amp;account, std::uint32_t off)</div><div class="ttdoc">Remove account flag.</div><div class="ttdef"><b>Definition</b> <a href="flags_8h_source.html#l00102">flags.h:102</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a902ebcfb8e9d8d76fe6dc6cb026610f9"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a902ebcfb8e9d8d76fe6dc6cb026610f9">xrpl::test::jtx::none</a></div><div class="ttdeci">static none_t const none</div><div class="ttdef"><b>Definition</b> <a href="tags_8h_source.html#l00015">tags.h:15</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_a948c1d39ac993c7db8cdb69f4dd62c68"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#a948c1d39ac993c7db8cdb69f4dd62c68">xrpl::test::jtx::testable_amendments</a></div><div class="ttdeci">FeatureBitset testable_amendments()</div><div class="ttdef"><b>Definition</b> <a href="Env_8h_source.html#l00055">Env.h:55</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_aa2d8284d8eff3443e0f8ada927a97858"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#aa2d8284d8eff3443e0f8ada927a97858">xrpl::test::jtx::amount</a></div><div class="ttdeci">auto const amount</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8h_source.html#l00277">TestHelpers.h:277</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_aa3d8cfce19876873a4cf2d007dece062"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#aa3d8cfce19876873a4cf2d007dece062">xrpl::test::jtx::MPTDEXFlags</a></div><div class="ttdeci">auto const MPTDEXFlags</div><div class="ttdef"><b>Definition</b> <a href="mpt_8h_source.html#l00017">mpt.h:17</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_ac015d7c2da11cab163c6fd1e2d425ffb"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#ac015d7c2da11cab163c6fd1e2d425ffb">xrpl::test::jtx::fset</a></div><div class="ttdeci">Json::Value fset(Account const &amp;account, std::uint32_t on, std::uint32_t off=0)</div><div class="ttdoc">Add and/or remove flag.</div><div class="ttdef"><b>Definition</b> <a href="flags_8cpp_source.html#l00010">flags.cpp:10</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_ad8d6d2badc431ad0216396cc73bc1410"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#ad8d6d2badc431ad0216396cc73bc1410">xrpl::test::jtx::drops</a></div><div class="ttdeci">PrettyAmount drops(Integer i)</div><div class="ttdoc">Returns an XRP PrettyAmount, which is trivially convertible to STAmount.</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00335">src/test/jtx/amount.h:335</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_1_1jtx_html_af96efdcb2ef7a3a2bda1c6b1ac3330c4"><div class="ttname"><a href="namespacexrpl_1_1test_1_1jtx.html#af96efdcb2ef7a3a2bda1c6b1ac3330c4">xrpl::test::jtx::disabled</a></div><div class="ttdeci">static disabled_t const disabled</div><div class="ttdef"><b>Definition</b> <a href="tags_8h_source.html#l00031">tags.h:31</a></div></div>
<div class="ttc" id="anamespacexrpl_1_1test_html_a15d9b530d672dd76291e75fca5bd7367aeb479605271a1f0ffff9d87f2cab0b75"><div class="ttname"><a href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367aeb479605271a1f0ffff9d87f2cab0b75">xrpl::test::TrustFlag::freeze</a></div><div class="ttdeci">@ freeze</div></div>
<div class="ttc" id="anamespacexrpl_1_1test_html_a15d9b530d672dd76291e75fca5bd7367af34d3a138958b0d338875bb910a39cf6"><div class="ttname"><a href="namespacexrpl_1_1test.html#a15d9b530d672dd76291e75fca5bd7367af34d3a138958b0d338875bb910a39cf6">xrpl::test::TrustFlag::noripple</a></div><div class="ttdeci">@ noripple</div></div>
<div class="ttc" id="anamespacexrpl_1_1test_html_aa307723a406781ef379822c33cb75d86"><div class="ttname"><a href="namespacexrpl_1_1test.html#aa307723a406781ef379822c33cb75d86">xrpl::test::createTx</a></div><div class="ttdeci">STTx createTx(bool disabling, LedgerIndex seq, PublicKey const &amp;txKey)</div><div class="ttdoc">Create ttUNL_MODIFY Tx.</div><div class="ttdef"><b>Definition</b> <a href="NegativeUNL__test_8cpp_source.html#l01766">NegativeUNL_test.cpp:1766</a></div></div>
<div class="ttc" id="anamespacexrpl_html"><div class="ttname"><a href="namespacexrpl.html">xrpl</a></div><div class="ttdoc">Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.</div><div class="ttdef"><b>Definition</b> <a href="algorithm_8h_source.html#l00006">algorithm.h:6</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a09be2aabc0ac5f377a30d0e35dab0aeea4bb393751801d6ada6003976dcc1dc69"><div class="ttname"><a href="namespacexrpl.html#a09be2aabc0ac5f377a30d0e35dab0aeea4bb393751801d6ada6003976dcc1dc69">xrpl::telINSUF_FEE_P</a></div><div class="ttdeci">@ telINSUF_FEE_P</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00038">TER.h:38</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a09be2aabc0ac5f377a30d0e35dab0aeea5e860f0b1cf95c1a5e1b88ea9aae8d52"><div class="ttname"><a href="namespacexrpl.html#a09be2aabc0ac5f377a30d0e35dab0aeea5e860f0b1cf95c1a5e1b88ea9aae8d52">xrpl::telENV_RPC_FAILED</a></div><div class="ttdeci">@ telENV_RPC_FAILED</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00050">TER.h:49</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a0a6c86e55d58f0dfb3d535c11e414c72ab73d1fba31ff4030e0b64464fdfc7e89"><div class="ttname"><a href="namespacexrpl.html#a0a6c86e55d58f0dfb3d535c11e414c72ab73d1fba31ff4030e0b64464fdfc7e89">xrpl::terNO_RIPPLE</a></div><div class="ttdeci">@ terNO_RIPPLE</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00205">TER.h:205</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a0a6c86e55d58f0dfb3d535c11e414c72ad71aaf9032f8c48b6fe709fbc44d431e"><div class="ttname"><a href="namespacexrpl.html#a0a6c86e55d58f0dfb3d535c11e414c72ad71aaf9032f8c48b6fe709fbc44d431e">xrpl::terNO_ACCOUNT</a></div><div class="ttdeci">@ terNO_ACCOUNT</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00198">TER.h:198</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a0ad5d92e6f6f18567bbdf6cae19f1fcd"><div class="ttname"><a href="namespacexrpl.html#a0ad5d92e6f6f18567bbdf6cae19f1fcd">xrpl::set</a></div><div class="ttdeci">bool set(T &amp;target, std::string const &amp;name, Section const &amp;section)</div><div class="ttdoc">Set a value from a configuration Section If the named value is not found or doesn't parse as a T,...</div><div class="ttdef"><b>Definition</b> <a href="BasicConfig_8h_source.html#l00289">BasicConfig.h:289</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a0b0d50fcc4520f33b4417f1b74eee591a8183aa2c95dc1385c8f58bf1917fcb0b"><div class="ttname"><a href="namespacexrpl.html#a0b0d50fcc4520f33b4417f1b74eee591a8183aa2c95dc1385c8f58bf1917fcb0b">xrpl::KeyType::ed25519</a></div><div class="ttdeci">@ ed25519</div></div>
<div class="ttc" id="anamespacexrpl_html_a0bc1a7410caa969ec72e858fd372f9a7"><div class="ttname"><a href="namespacexrpl.html#a0bc1a7410caa969ec72e858fd372f9a7">xrpl::asfGlobalFreeze</a></div><div class="ttdeci">constexpr std::uint32_t asfGlobalFreeze</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00064">TxFlags.h:64</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a0c9509cc760511f824f24cdb861f628a"><div class="ttname"><a href="namespacexrpl.html#a0c9509cc760511f824f24cdb861f628a">xrpl::xrpIssue</a></div><div class="ttdeci">Issue const &amp; xrpIssue()</div><div class="ttdoc">Returns an asset specifier that represents XRP.</div><div class="ttdef"><b>Definition</b> <a href="Issue_8h_source.html#l00098">Issue.h:98</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a0ff65dbec299f5ffe3cc3e46822b54b1"><div class="ttname"><a href="namespacexrpl.html#a0ff65dbec299f5ffe3cc3e46822b54b1">xrpl::loanPeriodicRate</a></div><div class="ttdeci">Number loanPeriodicRate(TenthBips32 interestRate, std::uint32_t paymentInterval)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l00050">LendingHelpers.cpp:50</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a1586a7fcfd09c87d710754fa3b7ea8bd"><div class="ttname"><a href="namespacexrpl.html#a1586a7fcfd09c87d710754fa3b7ea8bd">xrpl::tmfMPTClearCanTransfer</a></div><div class="ttdeci">constexpr std::uint32_t const tmfMPTClearCanTransfer</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00173">TxFlags.h:173</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a214a68fa4b462cf05138d87a9806bd06"><div class="ttname"><a href="namespacexrpl.html#a214a68fa4b462cf05138d87a9806bd06">xrpl::computeManagementFee</a></div><div class="ttdeci">Number computeManagementFee(Asset const &amp;asset, Number const &amp;value, TenthBips32 managementFeeRate, std::int32_t scale)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l01365">LendingHelpers.cpp:1365</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a22770e6d489de332ba5eec92b696d7ce"><div class="ttname"><a href="namespacexrpl.html#a22770e6d489de332ba5eec92b696d7ce">xrpl::run</a></div><div class="ttdeci">int run(int argc, char **argv)</div><div class="ttdef"><b>Definition</b> <a href="Main_8cpp_source.html#l00322">Main.cpp:322</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a25a16d1e4a00f49801b8f6fd16da0459"><div class="ttname"><a href="namespacexrpl.html#a25a16d1e4a00f49801b8f6fd16da0459">xrpl::tfMPTCanTransfer</a></div><div class="ttdeci">constexpr std::uint32_t const tfMPTCanTransfer</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00133">TxFlags.h:133</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a329ff7185f820c4462f67e30784ea8bf"><div class="ttname"><a href="namespacexrpl.html#a329ff7185f820c4462f67e30784ea8bf">xrpl::tmfMPTCanMutateCanTransfer</a></div><div class="ttdeci">constexpr std::uint32_t const tmfMPTCanMutateCanTransfer</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00144">TxFlags.h:144</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a35ce7572092b98720a52fa343c6f2fa9"><div class="ttname"><a href="namespacexrpl.html#a35ce7572092b98720a52fa343c6f2fa9">xrpl::to_string</a></div><div class="ttdeci">std::string to_string(base_uint&lt; Bits, Tag &gt; const &amp;a)</div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00598">base_uint.h:598</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a36b95700599f590017b5912e220baf5b"><div class="ttname"><a href="namespacexrpl.html#a36b95700599f590017b5912e220baf5b">xrpl::strHex</a></div><div class="ttdeci">std::string strHex(FwdIt begin, FwdIt end)</div><div class="ttdef"><b>Definition</b> <a href="strHex_8h_source.html#l00011">strHex.h:11</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a37264e625a18dabd56787db7fedd5e75"><div class="ttname"><a href="namespacexrpl.html#a37264e625a18dabd56787db7fedd5e75">xrpl::numZero</a></div><div class="ttdeci">static constexpr Number numZero</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00516">Number.h:516</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a3b183a2a1c9a38d408fc5bc2ff45b2b6"><div class="ttname"><a href="namespacexrpl.html#a3b183a2a1c9a38d408fc5bc2ff45b2b6">xrpl::percentageToTenthBips</a></div><div class="ttdeci">constexpr TenthBips32 percentageToTenthBips(std::uint32_t percentage)</div><div class="ttdef"><b>Definition</b> <a href="Protocol_8h_source.html#l00096">Protocol.h:96</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a3b504b2dedf069a5041193be2504e319"><div class="ttname"><a href="namespacexrpl.html#a3b504b2dedf069a5041193be2504e319">xrpl::tfMPTRequireAuth</a></div><div class="ttdeci">constexpr std::uint32_t const tfMPTRequireAuth</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00130">TxFlags.h:130</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a3c5030fd8bfd9c6c23528ea5444f3594"><div class="ttname"><a href="namespacexrpl.html#a3c5030fd8bfd9c6c23528ea5444f3594">xrpl::tfLoanImpair</a></div><div class="ttdeci">constexpr std::uint32_t const tfLoanImpair</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00291">TxFlags.h:291</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a3f56d997a36633a10ca0f17c86113f56"><div class="ttname"><a href="namespacexrpl.html#a3f56d997a36633a10ca0f17c86113f56">xrpl::tenthBipsOfValue</a></div><div class="ttdeci">constexpr T tenthBipsOfValue(T value, TenthBips&lt; TBips &gt; bips)</div><div class="ttdef"><b>Definition</b> <a href="Protocol_8h_source.html#l00108">Protocol.h:108</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a45a752d036373d0d2e26aacd2ca9bdad"><div class="ttname"><a href="namespacexrpl.html#a45a752d036373d0d2e26aacd2ca9bdad">xrpl::getAssetsTotalScale</a></div><div class="ttdeci">int getAssetsTotalScale(SLE::const_ref vaultSle)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00167">LendingHelpers.h:167</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a48cab8527194fbd1cfdacad90f977cf1a90691815ffc09c4ac3310b80f30975ae"><div class="ttname"><a href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1a90691815ffc09c4ac3310b80f30975ae">xrpl::tefBAD_SIGNATURE</a></div><div class="ttdeci">@ tefBAD_SIGNATURE</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00160">TER.h:160</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b"><div class="ttname"><a href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1ae6fd9b6928902fa0eeb1a900a1bb7b2b">xrpl::tefBAD_AUTH</a></div><div class="ttdeci">@ tefBAD_AUTH</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00150">TER.h:150</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a48cab8527194fbd1cfdacad90f977cf1aeb93e4feaa048c9d133fdb81c6a5c66e"><div class="ttname"><a href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1aeb93e4feaa048c9d133fdb81c6a5c66e">xrpl::tefPAST_SEQ</a></div><div class="ttdeci">@ tefPAST_SEQ</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00156">TER.h:156</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a48cab8527194fbd1cfdacad90f977cf1afe83db457a54098554c8968bf04471d8"><div class="ttname"><a href="namespacexrpl.html#a48cab8527194fbd1cfdacad90f977cf1afe83db457a54098554c8968bf04471d8">xrpl::tefNOT_MULTI_SIGNING</a></div><div class="ttdeci">@ tefNOT_MULTI_SIGNING</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00162">TER.h:162</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a502d13801f614009c077389a8809a70a"><div class="ttname"><a href="namespacexrpl.html#a502d13801f614009c077389a8809a70a">xrpl::tfLoanFullPayment</a></div><div class="ttdeci">constexpr std::uint32_t const tfLoanFullPayment</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00278">TxFlags.h:278</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a51ae455751dbb43d284de10584418214"><div class="ttname"><a href="namespacexrpl.html#a51ae455751dbb43d284de10584418214">xrpl::secondsInYear</a></div><div class="ttdeci">static constexpr std::uint32_t secondsInYear</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00015">LendingHelpers.h:15</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a5405a03459935d24ab27d4a0b9c5afc6"><div class="ttname"><a href="namespacexrpl.html#a5405a03459935d24ab27d4a0b9c5afc6">xrpl::computeTheoreticalLoanState</a></div><div class="ttdeci">LoanState computeTheoreticalLoanState(Number const &amp;periodicPayment, Number const &amp;periodicRate, std::uint32_t const paymentRemaining, TenthBips32 const managementFeeRate)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l01282">LendingHelpers.cpp:1282</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a56bec3e901dd993d062b2a9f58b88043"><div class="ttname"><a href="namespacexrpl.html#a56bec3e901dd993d062b2a9f58b88043">xrpl::tfLoanOverpayment</a></div><div class="ttdeci">constexpr std::uint32_t const tfLoanOverpayment</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00273">TxFlags.h:273</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a5757d2011cf084a64414ded0b2c7ed66"><div class="ttname"><a href="namespacexrpl.html#a5757d2011cf084a64414ded0b2c7ed66">xrpl::maxDataPayloadLength</a></div><div class="ttdeci">std::size_t constexpr maxDataPayloadLength</div><div class="ttdoc">The maximum length of Data payload.</div><div class="ttdef"><b>Definition</b> <a href="Protocol_8h_source.html#l00238">Protocol.h:238</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a64347051276d9ee7646d93623f5039b4"><div class="ttname"><a href="namespacexrpl.html#a64347051276d9ee7646d93623f5039b4">xrpl::TenthBips32</a></div><div class="ttdeci">TenthBips&lt; std::uint32_t &gt; TenthBips32</div><div class="ttdef"><b>Definition</b> <a href="Units_8h_source.html#l00430">Units.h:430</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a65485546d5dd32422663a8d1bcf86c56"><div class="ttname"><a href="namespacexrpl.html#a65485546d5dd32422663a8d1bcf86c56">xrpl::tfMPTUnlock</a></div><div class="ttdeci">constexpr std::uint32_t const tfMPTUnlock</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00158">TxFlags.h:158</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a6807ce1600b7179f4839a11b2e6fe046"><div class="ttname"><a href="namespacexrpl.html#a6807ce1600b7179f4839a11b2e6fe046">xrpl::roundToScale</a></div><div class="ttdeci">STAmount roundToScale(STAmount const &amp;value, std::int32_t scale, Number::rounding_mode rounding=Number::getround())</div><div class="ttdoc">Round an arbitrary precision Amount to the precision of an STAmount that has a given exponent.</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l01395">STAmount.cpp:1395</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a6a1704da191868bdc393d84684a6c004"><div class="ttname"><a href="namespacexrpl.html#a6a1704da191868bdc393d84684a6c004">xrpl::tfAllOrNothing</a></div><div class="ttdeci">constexpr std::uint32_t tfAllOrNothing</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00257">TxFlags.h:257</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a75a6d6ab0752128773a7c28ec32fa5d1"><div class="ttname"><a href="namespacexrpl.html#a75a6d6ab0752128773a7c28ec32fa5d1">xrpl::tfMPTCanLock</a></div><div class="ttdeci">constexpr std::uint32_t const tfMPTCanLock</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00129">TxFlags.h:129</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a75da7d88563def930b866cd64dd96f06a43b5c9175984c071f30b873fdce0a000"><div class="ttname"><a href="namespacexrpl.html#a75da7d88563def930b866cd64dd96f06a43b5c9175984c071f30b873fdce0a000">xrpl::ValStatus::current</a></div><div class="ttdeci">@ current</div><div class="ttdoc">This was a new validation and was added.</div></div>
<div class="ttc" id="anamespacexrpl_html_a76c892803711595bd0d3cf6fbedf028a"><div class="ttname"><a href="namespacexrpl.html#a76c892803711595bd0d3cf6fbedf028a">xrpl::uint256</a></div><div class="ttdeci">base_uint&lt; 256 &gt; uint256</div><div class="ttdef"><b>Definition</b> <a href="base__uint_8h_source.html#l00527">base_uint.h:527</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a7808b36d8f2224062a27cd2a84250604"><div class="ttname"><a href="namespacexrpl.html#a7808b36d8f2224062a27cd2a84250604">xrpl::checkLoanGuards</a></div><div class="ttdeci">TER checkLoanGuards(Asset const &amp;vaultAsset, Number const &amp;principalRequested, bool expectInterest, std::uint32_t paymentTotal, LoanProperties const &amp;properties, beast::Journal j)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l01150">LendingHelpers.cpp:1150</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a7b40d0c44bdb8a14755935bbd7b96eb6"><div class="ttname"><a href="namespacexrpl.html#a7b40d0c44bdb8a14755935bbd7b96eb6">xrpl::asfDefaultRipple</a></div><div class="ttdeci">constexpr std::uint32_t asfDefaultRipple</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00065">TxFlags.h:65</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a843e5f9ce3b55788961db32fffb753d1"><div class="ttname"><a href="namespacexrpl.html#a843e5f9ce3b55788961db32fffb753d1">xrpl::tfMPTCanClawback</a></div><div class="ttdeci">constexpr std::uint32_t const tfMPTCanClawback</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00134">TxFlags.h:134</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a84537bb967d8021b730576d249e1a321"><div class="ttname"><a href="namespacexrpl.html#a84537bb967d8021b730576d249e1a321">xrpl::tfClearFreeze</a></div><div class="ttdeci">constexpr std::uint32_t tfClearFreeze</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00100">TxFlags.h:100</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a91fd197c1aed397d38e1ed3bde3a2d33"><div class="ttname"><a href="namespacexrpl.html#a91fd197c1aed397d38e1ed3bde3a2d33">xrpl::tfMPTLock</a></div><div class="ttdeci">constexpr std::uint32_t const tfMPTLock</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00157">TxFlags.h:157</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a9370d7dde26c231399f9eac32fdfdc32"><div class="ttname"><a href="namespacexrpl.html#a9370d7dde26c231399f9eac32fdfdc32">xrpl::tfFullyCanonicalSig</a></div><div class="ttdeci">constexpr std::uint32_t tfFullyCanonicalSig</div><div class="ttdoc">Transaction flags.</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00041">TxFlags.h:41</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a93d915cc3f2d1c8d8c014f1402ce1645"><div class="ttname"><a href="namespacexrpl.html#a93d915cc3f2d1c8d8c014f1402ce1645">xrpl::tfClearDeepFreeze</a></div><div class="ttdeci">constexpr std::uint32_t tfClearDeepFreeze</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00102">TxFlags.h:102</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a9d55a156c8ac4a2a61cb2e8a38daacfd"><div class="ttname"><a href="namespacexrpl.html#a9d55a156c8ac4a2a61cb2e8a38daacfd">xrpl::after</a></div><div class="ttdeci">bool after(NetClock::time_point now, std::uint32_t mark)</div><div class="ttdoc">Has the specified time passed?</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l03436">View.cpp:3436</a></div></div>
<div class="ttc" id="anamespacexrpl_html_a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb"><div class="ttname"><a href="namespacexrpl.html#a9f8ae0078d6c6999355160984cb10414ae4894ca167b08880bfc35862f18575eb">xrpl::PublisherStatus::available</a></div><div class="ttdeci">@ available</div></div>
<div class="ttc" id="anamespacexrpl_html_a9f9ee3523ab53fb96dbb6e80d6ca2992"><div class="ttname"><a href="namespacexrpl.html#a9f9ee3523ab53fb96dbb6e80d6ca2992">xrpl::tfSetDeepFreeze</a></div><div class="ttdeci">constexpr std::uint32_t tfSetDeepFreeze</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00101">TxFlags.h:101</a></div></div>
<div class="ttc" id="anamespacexrpl_html_aa0fea82c3b688dc71571c78fe73d657a"><div class="ttname"><a href="namespacexrpl.html#aa0fea82c3b688dc71571c78fe73d657a">xrpl::requireAuth</a></div><div class="ttdeci">TER requireAuth(ReadView const &amp;view, Issue const &amp;issue, AccountID const &amp;account, AuthType authType=AuthType::Legacy)</div><div class="ttdoc">Check if the account lacks required authorization.</div><div class="ttdef"><b>Definition</b> <a href="View_8cpp_source.html#l02710">View.cpp:2710</a></div></div>
<div class="ttc" id="anamespacexrpl_html_aa9486edaa86874b243fecc344f959e7c"><div class="ttname"><a href="namespacexrpl.html#aa9486edaa86874b243fecc344f959e7c">xrpl::tfLoanSetMask</a></div><div class="ttdeci">constexpr std::uint32_t const tfLoanSetMask</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00284">TxFlags.h:284</a></div></div>
<div class="ttc" id="anamespacexrpl_html_aab568b67ea83d0cf07657b50bf486fbf"><div class="ttname"><a href="namespacexrpl.html#aab568b67ea83d0cf07657b50bf486fbf">xrpl::DROPS_PER_XRP</a></div><div class="ttdeci">constexpr XRPAmount DROPS_PER_XRP</div><div class="ttdoc">Number of drops per 1 XRP.</div><div class="ttdef"><b>Definition</b> <a href="XRPAmount_8h_source.html#l00238">XRPAmount.h:238</a></div></div>
<div class="ttc" id="anamespacexrpl_html_aae07b590d51f8a8c8d93dfb4b05b1032"><div class="ttname"><a href="namespacexrpl.html#aae07b590d51f8a8c8d93dfb4b05b1032">xrpl::tfMPTUnauthorize</a></div><div class="ttdeci">constexpr std::uint32_t const tfMPTUnauthorize</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00153">TxFlags.h:153</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51"><div class="ttname"><a href="namespacexrpl.html#ab2fee6d98c0fcdead09c04e35ab453a6aa181a603769c1f98ad927e7367c7aa51">xrpl::TxSearched::all</a></div><div class="ttdeci">@ all</div></div>
<div class="ttc" id="anamespacexrpl_html_ab37df14edb5505c053e5756f280ac70f"><div class="ttname"><a href="namespacexrpl.html#ab37df14edb5505c053e5756f280ac70f">xrpl::tenthBipsPerUnity</a></div><div class="ttdeci">TenthBips32 constexpr tenthBipsPerUnity(bipsPerUnity.value() *10)</div></div>
<div class="ttc" id="anamespacexrpl_html_ab4e2ea97ca45fbc00ae6e25a9a056cc7"><div class="ttname"><a href="namespacexrpl.html#ab4e2ea97ca45fbc00ae6e25a9a056cc7">xrpl::tfLoanDefault</a></div><div class="ttdeci">constexpr std::uint32_t const tfLoanDefault</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00290">TxFlags.h:290</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ab8c3ab80a860de11f3803c7da500418a"><div class="ttname"><a href="namespacexrpl.html#ab8c3ab80a860de11f3803c7da500418a">xrpl::abs</a></div><div class="ttdeci">constexpr Number abs(Number x) noexcept</div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00707">Number.h:707</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ab9c28132bb4810e879a13903d8784a33"><div class="ttname"><a href="namespacexrpl.html#ab9c28132bb4810e879a13903d8784a33">xrpl::tfSetfAuth</a></div><div class="ttdeci">constexpr std::uint32_t tfSetfAuth</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00096">TxFlags.h:96</a></div></div>
<div class="ttc" id="anamespacexrpl_html_abb5eaa2827981084acce180d255881b1"><div class="ttname"><a href="namespacexrpl.html#abb5eaa2827981084acce180d255881b1">xrpl::roundToAsset</a></div><div class="ttdeci">void roundToAsset(A const &amp;asset, Number &amp;value)</div><div class="ttdoc">Round an arbitrary precision Number IN PLACE to the precision of a given Asset.</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8h_source.html#l00675">STAmount.h:675</a></div></div>
<div class="ttc" id="anamespacexrpl_html_abd6a0d13118fcad34069500c471c3ec6"><div class="ttname"><a href="namespacexrpl.html#abd6a0d13118fcad34069500c471c3ec6">xrpl::TenthBips16</a></div><div class="ttdeci">TenthBips&lt; std::uint16_t &gt; TenthBips16</div><div class="ttdef"><b>Definition</b> <a href="Units_8h_source.html#l00429">Units.h:429</a></div></div>
<div class="ttc" id="anamespacexrpl_html_abdca9eb1553420888d7e85a209713841"><div class="ttname"><a href="namespacexrpl.html#abdca9eb1553420888d7e85a209713841">xrpl::asfRequireAuth</a></div><div class="ttdeci">constexpr std::uint32_t asfRequireAuth</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00059">TxFlags.h:59</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac29d2e6cda0723b2ca1f1cdc06fe3965"><div class="ttname"><a href="namespacexrpl.html#ac29d2e6cda0723b2ca1f1cdc06fe3965">xrpl::roundPeriodicPayment</a></div><div class="ttdeci">Number roundPeriodicPayment(Asset const &amp;asset, Number const &amp;periodicPayment, std::int32_t scale)</div><div class="ttdoc">Ensure the periodic payment is always rounded consistently.</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00022">LendingHelpers.h:22</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac4c8f81ffaeaede92aec26c81003c8e5"><div class="ttname"><a href="namespacexrpl.html#ac4c8f81ffaeaede92aec26c81003c8e5">xrpl::tfLoanLatePayment</a></div><div class="ttdeci">constexpr std::uint32_t const tfLoanLatePayment</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00283">TxFlags.h:283</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac599741e6d4066bada11df4c7e8ad30aa2e941487d3c2b2204488c5cf3a9d7a28"><div class="ttname"><a href="namespacexrpl.html#ac599741e6d4066bada11df4c7e8ad30aa2e941487d3c2b2204488c5cf3a9d7a28">xrpl::HashPrefix::txSign</a></div><div class="ttdeci">@ txSign</div><div class="ttdoc">inner transaction to sign</div></div>
<div class="ttc" id="anamespacexrpl_html_ac8b129bcfda287e4cf8286e544af7242"><div class="ttname"><a href="namespacexrpl.html#ac8b129bcfda287e4cf8286e544af7242">xrpl::constructRoundedLoanState</a></div><div class="ttdeci">LoanState constructRoundedLoanState(SLE::const_ref loan)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l01352">LendingHelpers.cpp:1352</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61"><div class="ttname"><a href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a2d9e286ee2cc7d46dba7d5812daada61">xrpl::temINVALID</a></div><div class="ttdeci">@ temINVALID</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00091">TER.h:91</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a"><div class="ttname"><a href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a475a3a6a540bfccef31472adc1a9434a">xrpl::temINVALID_FLAG</a></div><div class="ttdeci">@ temINVALID_FLAG</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00092">TER.h:92</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac8c50610643a4f902b9bb9e42d0b00e6a9f1529f017ea5997b90a13bc159b586f"><div class="ttname"><a href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6a9f1529f017ea5997b90a13bc159b586f">xrpl::temDISABLED</a></div><div class="ttdeci">@ temDISABLED</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00095">TER.h:95</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac8c50610643a4f902b9bb9e42d0b00e6aa9a4c76c9c7d2e1fc83581b9ce4d5152"><div class="ttname"><a href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6aa9a4c76c9c7d2e1fc83581b9ce4d5152">xrpl::temBAD_AMOUNT</a></div><div class="ttdeci">@ temBAD_AMOUNT</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00070">TER.h:70</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac8c50610643a4f902b9bb9e42d0b00e6aad64890ef451b36c07e55751fff805d5"><div class="ttname"><a href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6aad64890ef451b36c07e55751fff805d5">xrpl::temBAD_SIGNATURE</a></div><div class="ttdeci">@ temBAD_SIGNATURE</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00086">TER.h:86</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac8c50610643a4f902b9bb9e42d0b00e6acd12cbd108e996c3a050fe4fdc3e133b"><div class="ttname"><a href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6acd12cbd108e996c3a050fe4fdc3e133b">xrpl::temINVALID_INNER_BATCH</a></div><div class="ttdeci">@ temINVALID_INNER_BATCH</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00124">TER.h:124</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ac8c50610643a4f902b9bb9e42d0b00e6ae6a0e0bf6dadc6ffbf80026872cc5a8e"><div class="ttname"><a href="namespacexrpl.html#ac8c50610643a4f902b9bb9e42d0b00e6ae6a0e0bf6dadc6ffbf80026872cc5a8e">xrpl::temBAD_SIGNER</a></div><div class="ttdeci">@ temBAD_SIGNER</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00096">TER.h:96</a></div></div>
<div class="ttc" id="anamespacexrpl_html_aca8d3524fa9df703978f872ca8bf8c5a"><div class="ttname"><a href="namespacexrpl.html#aca8d3524fa9df703978f872ca8bf8c5a">xrpl::sign</a></div><div class="ttdeci">Buffer sign(PublicKey const &amp;pk, SecretKey const &amp;sk, Slice const &amp;message)</div><div class="ttdoc">Generate a signature for a message.</div><div class="ttdef"><b>Definition</b> <a href="SecretKey_8cpp_source.html#l00228">SecretKey.cpp:228</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad4588a0661e75ea428d88c20f74d102e"><div class="ttname"><a href="namespacexrpl.html#ad4588a0661e75ea428d88c20f74d102e">xrpl::tfLoanUnimpair</a></div><div class="ttdeci">constexpr std::uint32_t const tfLoanUnimpair</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00292">TxFlags.h:292</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556ba1957d1d9fc2b8195c8717cd9b85ce5e3"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba1957d1d9fc2b8195c8717cd9b85ce5e3">xrpl::tecWRONG_ASSET</a></div><div class="ttdeci">@ tecWRONG_ASSET</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00342">TER.h:342</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556ba1bd3879321f2df7d9e918c80dfd5e885"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba1bd3879321f2df7d9e918c80dfd5e885">xrpl::tecLOCKED</a></div><div class="ttdeci">@ tecLOCKED</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00340">TER.h:340</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556ba348afbc4922cc9b29af76316d5d8a277"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba348afbc4922cc9b29af76316d5d8a277">xrpl::tecNO_ENTRY</a></div><div class="ttdeci">@ tecNO_ENTRY</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00288">TER.h:288</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556ba569f106a7939f40810643264335e9786"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba569f106a7939f40810643264335e9786">xrpl::tecNO_AUTH</a></div><div class="ttdeci">@ tecNO_AUTH</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00282">TER.h:282</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556ba7d6f804411ab68ae086c8933e905b96e"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba7d6f804411ab68ae086c8933e905b96e">xrpl::tecTOO_SOON</a></div><div class="ttdeci">@ tecTOO_SOON</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00300">TER.h:300</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556ba8045adcdb81ee941eb2f36fe5f1e4c8c"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8045adcdb81ee941eb2f36fe5f1e4c8c">xrpl::tecFROZEN</a></div><div class="ttdeci">@ tecFROZEN</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00285">TER.h:285</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556ba8479260fa4500bef887fa8e8c9f3c624"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba8479260fa4500bef887fa8e8c9f3c624">xrpl::tecINSUFFICIENT_FUNDS</a></div><div class="ttdeci">@ tecINSUFFICIENT_FUNDS</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00307">TER.h:307</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556ba918da89b83f3c6bee3153574bd6e718a"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556ba918da89b83f3c6bee3153574bd6e718a">xrpl::tecEXPIRED</a></div><div class="ttdeci">@ tecEXPIRED</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00296">TER.h:296</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556bac9a52c5d52a9c9501a3c8c37746fb509"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bac9a52c5d52a9c9501a3c8c37746fb509">xrpl::tecPRECISION_LOSS</a></div><div class="ttdeci">@ tecPRECISION_LOSS</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00345">TER.h:345</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556bace2617c1c99c48dc6fbcd8114a8438cd"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bace2617c1c99c48dc6fbcd8114a8438cd">xrpl::tecINSUFFICIENT_RESERVE</a></div><div class="ttdeci">@ tecINSUFFICIENT_RESERVE</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00289">TER.h:289</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556bad7d421519cd6967c3f800367554f8391"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bad7d421519cd6967c3f800367554f8391">xrpl::tecKILLED</a></div><div class="ttdeci">@ tecKILLED</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00298">TER.h:298</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556bae42e73dd030a94b926594ff177bb6c90"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae42e73dd030a94b926594ff177bb6c90">xrpl::tecLIMIT_EXCEEDED</a></div><div class="ttdeci">@ tecLIMIT_EXCEEDED</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00343">TER.h:343</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556bae97a00fb2d2ce5610fcc7cb1ce1e8155">xrpl::tecNO_PERMISSION</a></div><div class="ttdeci">@ tecNO_PERMISSION</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00287">TER.h:287</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556baf9893323708f9529dce3dd46682f8336"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556baf9893323708f9529dce3dd46682f8336">xrpl::tecHAS_OBLIGATIONS</a></div><div class="ttdeci">@ tecHAS_OBLIGATIONS</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00299">TER.h:299</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ad78c115958eec639754bf9227f58556baffcaa48f78bf349ec4434b2351577362"><div class="ttname"><a href="namespacexrpl.html#ad78c115958eec639754bf9227f58556baffcaa48f78bf349ec4434b2351577362">xrpl::tecINSUFFICIENT_PAYMENT</a></div><div class="ttdeci">@ tecINSUFFICIENT_PAYMENT</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00309">TER.h:309</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ada4805619214865518ed8c0b54a71bc1"><div class="ttname"><a href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1">xrpl::LedgerSpecificFlags</a></div><div class="ttdeci">LedgerSpecificFlags</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00104">LedgerFormats.h:104</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ada4805619214865518ed8c0b54a71bc1a3802c9462407c0d1bbe16fba206fee8b"><div class="ttname"><a href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a3802c9462407c0d1bbe16fba206fee8b">xrpl::lsfLoanImpaired</a></div><div class="ttdeci">@ lsfLoanImpaired</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00192">LedgerFormats.h:192</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ada4805619214865518ed8c0b54a71bc1a445ecc250b4e81d24d1bf9b1ba9c8455"><div class="ttname"><a href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1a445ecc250b4e81d24d1bf9b1ba9c8455">xrpl::lsfLoanOverpayment</a></div><div class="ttdeci">@ lsfLoanOverpayment</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00193">LedgerFormats.h:193</a></div></div>
<div class="ttc" id="anamespacexrpl_html_ada4805619214865518ed8c0b54a71bc1aa2c224929c4bf367cc269b52221cd778"><div class="ttname"><a href="namespacexrpl.html#ada4805619214865518ed8c0b54a71bc1aa2c224929c4bf367cc269b52221cd778">xrpl::lsfLoanDefault</a></div><div class="ttdeci">@ lsfLoanDefault</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00191">LedgerFormats.h:191</a></div></div>
<div class="ttc" id="anamespacexrpl_html_adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a"><div class="ttname"><a href="namespacexrpl.html#adfcfa25ccc459fa509f891e4009ac1e3a5483bf26dec486ec0175e2a3ca816a0a">xrpl::ReleaseStrongRefAction::noop</a></div><div class="ttdeci">@ noop</div></div>
<div class="ttc" id="anamespacexrpl_html_ae974e82cf9dee1293007ca183f0e1ae2"><div class="ttname"><a href="namespacexrpl.html#ae974e82cf9dee1293007ca183f0e1ae2">xrpl::tfSetFreeze</a></div><div class="ttdeci">constexpr std::uint32_t tfSetFreeze</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00099">TxFlags.h:99</a></div></div>
<div class="ttc" id="anamespacexrpl_html_aeb1403000c2c2a5c8fa065d22f7cbcaf"><div class="ttname"><a href="namespacexrpl.html#aeb1403000c2c2a5c8fa065d22f7cbcaf">xrpl::computeLoanProperties</a></div><div class="ttdeci">LoanProperties computeLoanProperties(Asset const &amp;asset, Number const &amp;principalOutstanding, TenthBips32 interestRate, std::uint32_t paymentInterval, std::uint32_t paymentsRemaining, TenthBips32 managementFeeRate, std::int32_t minimumScale)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l01379">LendingHelpers.cpp:1379</a></div></div>
<div class="ttc" id="anamespacexrpl_html_aeb5f98fcbd289260f4848cbf266400a4"><div class="ttname"><a href="namespacexrpl.html#aeb5f98fcbd289260f4848cbf266400a4">xrpl::constructLoanState</a></div><div class="ttdeci">LoanState constructLoanState(Number const &amp;totalValueOutstanding, Number const &amp;principalOutstanding, Number const &amp;managementFeeOutstanding)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l01337">LendingHelpers.cpp:1337</a></div></div>
<div class="ttc" id="anamespacexrpl_html_af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976"><div class="ttname"><a href="namespacexrpl.html#af4adbbe94a1cecf1bd3ad2c76ff1ea3da157dace29a657c58cdeb4f7fa19be976">xrpl::tesSUCCESS</a></div><div class="ttdeci">@ tesSUCCESS</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00227">TER.h:226</a></div></div>
<div class="ttc" id="anamespacexrpl_html_af74cf647690ab5cdb695b5edf8c75a91"><div class="ttname"><a href="namespacexrpl.html#af74cf647690ab5cdb695b5edf8c75a91">xrpl::computeFullPaymentInterest</a></div><div class="ttdeci">Number computeFullPaymentInterest(Number const &amp;theoreticalPrincipalOutstanding, Number const &amp;periodicRate, NetClock::time_point parentCloseTime, std::uint32_t paymentInterval, std::uint32_t prevPaymentDate, std::uint32_t startDate, TenthBips32 closeInterestRate)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l01229">LendingHelpers.cpp:1229</a></div></div>
<div class="ttc" id="anamespacexrpl_html_af80d39e55d81f756bf5af6a960c6a120"><div class="ttname"><a href="namespacexrpl.html#af80d39e55d81f756bf5af6a960c6a120">xrpl::tmfMPTSetCanTransfer</a></div><div class="ttdeci">constexpr std::uint32_t const tmfMPTSetCanTransfer</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00172">TxFlags.h:172</a></div></div>
<div class="ttc" id="anamespacexrpl_html_af8fd3bcc9b244e894c954653a107601c"><div class="ttname"><a href="namespacexrpl.html#af8fd3bcc9b244e894c954653a107601c">xrpl::tfLoanManageMask</a></div><div class="ttdeci">constexpr std::uint32_t const tfLoanManageMask</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00293">TxFlags.h:293</a></div></div>
<div class="ttc" id="anamespacexrpl_html_affa56ad2d5b3ae1fe81c8f090a778915"><div class="ttname"><a href="namespacexrpl.html#affa56ad2d5b3ae1fe81c8f090a778915">xrpl::isRounded</a></div><div class="ttdeci">bool isRounded(Asset const &amp;asset, Number const &amp;value, std::int32_t scale)</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8cpp_source.html#l00061">LendingHelpers.cpp:61</a></div></div>
<div class="ttc" id="aoptional_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional</a></div></div>
<div class="ttc" id="apair_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair</a></div></div>
<div class="ttc" id="aparse_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/parse.html">std::chrono::parse</a></div><div class="ttdeci">T parse(T... args)</div></div>
<div class="ttc" id="aruntime_error_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/error/runtime_error.html">std::runtime_error</a></div></div>
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/map/size.html">std::map::size</a></div><div class="ttdeci">T size(T... args)</div></div>
<div class="ttc" id="asize_t_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a></div></div>
<div class="ttc" id="asteady_clock_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/steady_clock.html">std::chrono::steady_clock</a></div></div>
<div class="ttc" id="astr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/io/basic_stringstream/str.html">std::stringstream::str</a></div><div class="ttdeci">T str(T... args)</div></div>
<div class="ttc" id="astructxrpl_1_1Keylet_html"><div class="ttname"><a href="structxrpl_1_1Keylet.html">xrpl::Keylet</a></div><div class="ttdoc">A pair of SHAMap key and LedgerEntryType.</div><div class="ttdef"><b>Definition</b> <a href="Keylet_8h_source.html#l00019">Keylet.h:20</a></div></div>
<div class="ttc" id="astructxrpl_1_1Keylet_html_a03cc2a78d194c2eb48ae173f0db3b22c"><div class="ttname"><a href="structxrpl_1_1Keylet.html#a03cc2a78d194c2eb48ae173f0db3b22c">xrpl::Keylet::key</a></div><div class="ttdeci">uint256 key</div><div class="ttdef"><b>Definition</b> <a href="Keylet_8h_source.html#l00021">Keylet.h:21</a></div></div>
<div class="ttc" id="astructxrpl_1_1LoanState_html"><div class="ttname"><a href="structxrpl_1_1LoanState.html">xrpl::LoanState</a></div><div class="ttdoc">This structure captures the parts of a loan state.</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00095">LendingHelpers.h:96</a></div></div>
<div class="ttc" id="astructxrpl_1_1LoanState_html_a1f506c760e69ff48dced9856ee212ffd"><div class="ttname"><a href="structxrpl_1_1LoanState.html#a1f506c760e69ff48dced9856ee212ffd">xrpl::LoanState::principalOutstanding</a></div><div class="ttdeci">Number principalOutstanding</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00100">LendingHelpers.h:100</a></div></div>
<div class="ttc" id="astructxrpl_1_1LoanState_html_a5ee505459016c306e674fb26b4f031ac"><div class="ttname"><a href="structxrpl_1_1LoanState.html#a5ee505459016c306e674fb26b4f031ac">xrpl::LoanState::valueOutstanding</a></div><div class="ttdeci">Number valueOutstanding</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00098">LendingHelpers.h:98</a></div></div>
<div class="ttc" id="astructxrpl_1_1LoanState_html_ace2969cf6a9c612aec8512c4312722e3"><div class="ttname"><a href="structxrpl_1_1LoanState.html#ace2969cf6a9c612aec8512c4312722e3">xrpl::LoanState::interestDue</a></div><div class="ttdeci">Number interestDue</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00103">LendingHelpers.h:103</a></div></div>
<div class="ttc" id="astructxrpl_1_1LoanState_html_ae0ba86a40394a2d7ce4474945b724c02"><div class="ttname"><a href="structxrpl_1_1LoanState.html#ae0ba86a40394a2d7ce4474945b724c02">xrpl::LoanState::managementFeeDue</a></div><div class="ttdeci">Number managementFeeDue</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00106">LendingHelpers.h:106</a></div></div>
<div class="ttc" id="astructxrpl_1_1Number_1_1normalized_html"><div class="ttname"><a href="structxrpl_1_1Number_1_1normalized.html">xrpl::Number::normalized</a></div><div class="ttdef"><b>Definition</b> <a href="Number_8h_source.html#l00235">Number.h:236</a></div></div>
<div class="ttc" id="astructxrpl_1_1detail_1_1LoanStateDeltas_html"><div class="ttname"><a href="structxrpl_1_1detail_1_1LoanStateDeltas.html">xrpl::detail::LoanStateDeltas</a></div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00323">LendingHelpers.h:324</a></div></div>
<div class="ttc" id="astructxrpl_1_1detail_1_1LoanStateDeltas_html_a377edf644d144dac8ae69bd4ba930223"><div class="ttname"><a href="structxrpl_1_1detail_1_1LoanStateDeltas.html#a377edf644d144dac8ae69bd4ba930223">xrpl::detail::LoanStateDeltas::principal</a></div><div class="ttdeci">Number principal</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00326">LendingHelpers.h:326</a></div></div>
<div class="ttc" id="astructxrpl_1_1detail_1_1LoanStateDeltas_html_a954f93333195a87448f2672f5c1e4321"><div class="ttname"><a href="structxrpl_1_1detail_1_1LoanStateDeltas.html#a954f93333195a87448f2672f5c1e4321">xrpl::detail::LoanStateDeltas::total</a></div><div class="ttdeci">Number total() const</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00338">LendingHelpers.h:338</a></div></div>
<div class="ttc" id="astructxrpl_1_1detail_1_1LoanStateDeltas_html_aaedef3ae0d90d921b1db94fea7da844a"><div class="ttname"><a href="structxrpl_1_1detail_1_1LoanStateDeltas.html#aaedef3ae0d90d921b1db94fea7da844a">xrpl::detail::LoanStateDeltas::interest</a></div><div class="ttdeci">Number interest</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00329">LendingHelpers.h:329</a></div></div>
<div class="ttc" id="astructxrpl_1_1detail_1_1LoanStateDeltas_html_af2847e11912feb8a9509d2002bc194ba"><div class="ttname"><a href="structxrpl_1_1detail_1_1LoanStateDeltas.html#af2847e11912feb8a9509d2002bc194ba">xrpl::detail::LoanStateDeltas::managementFee</a></div><div class="ttdeci">Number managementFee</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00332">LendingHelpers.h:332</a></div></div>
<div class="ttc" id="astructxrpl_1_1detail_1_1PaymentComponents_html"><div class="ttname"><a href="structxrpl_1_1detail_1_1PaymentComponents.html">xrpl::detail::PaymentComponents</a></div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00230">LendingHelpers.h:231</a></div></div>
<div class="ttc" id="astructxrpl_1_1detail_1_1PaymentComponents_html_aaf147e388219822ba1e3c385e95252c2"><div class="ttname"><a href="structxrpl_1_1detail_1_1PaymentComponents.html#aaf147e388219822ba1e3c385e95252c2">xrpl::detail::PaymentComponents::trackedValueDelta</a></div><div class="ttdeci">Number trackedValueDelta</div><div class="ttdef"><b>Definition</b> <a href="LendingHelpers_8h_source.html#l00236">LendingHelpers.h:236</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerInfo_html"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html">xrpl::test::Loan_test::BrokerInfo</a></div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00107">Loan_test.cpp:108</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerInfo_html_a8c0c0c0e8fb2481108157ce6539f5cff"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#a8c0c0c0e8fb2481108157ce6539f5cff">xrpl::test::Loan_test::BrokerInfo::vaultID</a></div><div class="ttdeci">uint256 vaultID</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00111">Loan_test.cpp:111</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerInfo_html_aa3309fa4c7e6bf156792e77a3ebb76f9"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa3309fa4c7e6bf156792e77a3ebb76f9">xrpl::test::Loan_test::BrokerInfo::params</a></div><div class="ttdeci">BrokerParameters params</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00112">Loan_test.cpp:112</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerInfo_html_aa9703000ec9d3519149be135245c57f2"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#aa9703000ec9d3519149be135245c57f2">xrpl::test::Loan_test::BrokerInfo::vaultScale</a></div><div class="ttdeci">int vaultScale(jtx::Env const &amp;env) const</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00134">Loan_test.cpp:134</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerInfo_html_ac021427b6d129abc619e96dbebaa10e6"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac021427b6d129abc619e96dbebaa10e6">xrpl::test::Loan_test::BrokerInfo::brokerID</a></div><div class="ttdeci">uint256 brokerID</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00110">Loan_test.cpp:110</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerInfo_html_ac1399de1790b8d248a2f03fac1d4bbfc"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac1399de1790b8d248a2f03fac1d4bbfc">xrpl::test::Loan_test::BrokerInfo::vaultKeylet</a></div><div class="ttdeci">Keylet vaultKeylet() const</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00128">Loan_test.cpp:128</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerInfo_html_ac61233b4dda4f94d6dec39c9eda22de4"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ac61233b4dda4f94d6dec39c9eda22de4">xrpl::test::Loan_test::BrokerInfo::BrokerInfo</a></div><div class="ttdeci">BrokerInfo(jtx::PrettyAsset const &amp;asset_, Keylet const &amp;brokerKeylet_, Keylet const &amp;vaultKeylet_, BrokerParameters const &amp;p)</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00113">Loan_test.cpp:113</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerInfo_html_acf89325bb338bb6adecf1a31f436b327"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#acf89325bb338bb6adecf1a31f436b327">xrpl::test::Loan_test::BrokerInfo::asset</a></div><div class="ttdeci">jtx::PrettyAsset asset</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00109">Loan_test.cpp:109</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerInfo_html_ae0a30bbbd93c503dda354456673fb205"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerInfo.html#ae0a30bbbd93c503dda354456673fb205">xrpl::test::Loan_test::BrokerInfo::brokerKeylet</a></div><div class="ttdeci">Keylet brokerKeylet() const</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00123">Loan_test.cpp:123</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html">xrpl::test::Loan_test::BrokerParameters</a></div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00076">Loan_test.cpp:77</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html_a06aa9eec8beeb6eae8477cb0eeb7675c"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a06aa9eec8beeb6eae8477cb0eeb7675c">xrpl::test::Loan_test::BrokerParameters::maxCoveredLoanValue</a></div><div class="ttdeci">Number maxCoveredLoanValue(Number const &amp;currentDebt) const</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00088">Loan_test.cpp:88</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html_a13b6cc2777f0ca3d71642f68e5baa3ee"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a13b6cc2777f0ca3d71642f68e5baa3ee">xrpl::test::Loan_test::BrokerParameters::data</a></div><div class="ttdeci">std::string data</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00084">Loan_test.cpp:84</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html_a25badc9387457857607edbadf6fac63e"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a25badc9387457857607edbadf6fac63e">xrpl::test::Loan_test::BrokerParameters::debtMax</a></div><div class="ttdeci">Number debtMax</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00079">Loan_test.cpp:79</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html_a329bf5a8059bcca800bdca04ca187f6c"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a329bf5a8059bcca800bdca04ca187f6c">xrpl::test::Loan_test::BrokerParameters::coverDeposit</a></div><div class="ttdeci">int coverDeposit</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00081">Loan_test.cpp:81</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html_a5eff62ebb8fc160f1e1ec740c9fd4bb4"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a5eff62ebb8fc160f1e1ec740c9fd4bb4">xrpl::test::Loan_test::BrokerParameters::defaults</a></div><div class="ttdeci">static BrokerParameters const &amp; defaults()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00097">Loan_test.cpp:97</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html_a6df8c6fcb3daf730bbebe4a793b362a4"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a6df8c6fcb3daf730bbebe4a793b362a4">xrpl::test::Loan_test::BrokerParameters::managementFeeRate</a></div><div class="ttdeci">TenthBips16 managementFeeRate</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00082">Loan_test.cpp:82</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html_a864cdf9099cbadba6b525029eedeb41e"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#a864cdf9099cbadba6b525029eedeb41e">xrpl::test::Loan_test::BrokerParameters::coverRateLiquidation</a></div><div class="ttdeci">TenthBips32 coverRateLiquidation</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00083">Loan_test.cpp:83</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html_aa7a7f1c35ff5a6ba7e486484724d0abc"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#aa7a7f1c35ff5a6ba7e486484724d0abc">xrpl::test::Loan_test::BrokerParameters::vaultDeposit</a></div><div class="ttdeci">Number vaultDeposit</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00078">Loan_test.cpp:78</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1BrokerParameters_html_afd23bc194671b792907026345c880e4a"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1BrokerParameters.html#afd23bc194671b792907026345c880e4a">xrpl::test::Loan_test::BrokerParameters::coverRateMin</a></div><div class="ttdeci">TenthBips32 coverRateMin</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00080">Loan_test.cpp:80</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html">xrpl::test::Loan_test::LoanParameters</a></div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00143">Loan_test.cpp:144</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a094ab1fc90968d1093c74855237f137d"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a094ab1fc90968d1093c74855237f137d">xrpl::test::Loan_test::LoanParameters::lateInterest</a></div><div class="ttdeci">std::optional&lt; TenthBips32 &gt; lateInterest</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00160">Loan_test.cpp:160</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a1e44cd94b5a2cfe4667fb2703b53d827"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a1e44cd94b5a2cfe4667fb2703b53d827">xrpl::test::Loan_test::LoanParameters::setFee</a></div><div class="ttdeci">std::optional&lt; STAmount &gt; setFee</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00153">Loan_test.cpp:153</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a253a290b857fa217ec1aa5d613b7d4f3"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a253a290b857fa217ec1aa5d613b7d4f3">xrpl::test::Loan_test::LoanParameters::lateFee</a></div><div class="ttdeci">std::optional&lt; Number &gt; lateFee</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00156">Loan_test.cpp:156</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a3b9865202e45d7a910efde590f699a51"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a3b9865202e45d7a910efde590f699a51">xrpl::test::Loan_test::LoanParameters::payTotal</a></div><div class="ttdeci">std::optional&lt; std::uint32_t &gt; payTotal</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00163">Loan_test.cpp:163</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a5c584f76367cf1be69e69365ee41ad61"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a5c584f76367cf1be69e69365ee41ad61">xrpl::test::Loan_test::LoanParameters::payInterval</a></div><div class="ttdeci">std::optional&lt; std::uint32_t &gt; payInterval</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00164">Loan_test.cpp:164</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a63b7d9ad6ca11bdf6cc995b47c09245d"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a63b7d9ad6ca11bdf6cc995b47c09245d">xrpl::test::Loan_test::LoanParameters::counter</a></div><div class="ttdeci">jtx::Account counter</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00148">Loan_test.cpp:148</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a66077e07d08f1cd804e9b44242a0db69"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a66077e07d08f1cd804e9b44242a0db69">xrpl::test::Loan_test::LoanParameters::interest</a></div><div class="ttdeci">std::optional&lt; TenthBips32 &gt; interest</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00159">Loan_test.cpp:159</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a7b3fae968ed270da3aab4ed742eeee13"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7b3fae968ed270da3aab4ed742eeee13">xrpl::test::Loan_test::LoanParameters::closeFee</a></div><div class="ttdeci">std::optional&lt; Number &gt; closeFee</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00157">Loan_test.cpp:157</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a7da6e1152b9526ddf9ca39fa7fb79322"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7da6e1152b9526ddf9ca39fa7fb79322">xrpl::test::Loan_test::LoanParameters::operator()</a></div><div class="ttdeci">jtx::JTx operator()(jtx::Env &amp;env, BrokerInfo const &amp;broker, FN const &amp;... fN) const</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00170">Loan_test.cpp:170</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a7ef3032e22b6dbb9de64f6358a7877cf"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7ef3032e22b6dbb9de64f6358a7877cf">xrpl::test::Loan_test::LoanParameters::serviceFee</a></div><div class="ttdeci">std::optional&lt; Number &gt; serviceFee</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00155">Loan_test.cpp:155</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a7f8814183ab2f9991a6f724ee82ec971"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a7f8814183ab2f9991a6f724ee82ec971">xrpl::test::Loan_test::LoanParameters::overpaymentInterest</a></div><div class="ttdeci">std::optional&lt; TenthBips32 &gt; overpaymentInterest</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00162">Loan_test.cpp:162</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_a84434db51db07c32a90851b7bf62b1d4"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#a84434db51db07c32a90851b7bf62b1d4">xrpl::test::Loan_test::LoanParameters::counterpartyExplicit</a></div><div class="ttdeci">bool counterpartyExplicit</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00151">Loan_test.cpp:151</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_aaa833bb11ba7b43b54801a1bfb79c300"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#aaa833bb11ba7b43b54801a1bfb79c300">xrpl::test::Loan_test::LoanParameters::gracePd</a></div><div class="ttdeci">std::optional&lt; std::uint32_t &gt; gracePd</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00165">Loan_test.cpp:165</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_ab3d313a175cbd23b95d943878222b0a6"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ab3d313a175cbd23b95d943878222b0a6">xrpl::test::Loan_test::LoanParameters::principalRequest</a></div><div class="ttdeci">Number principalRequest</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00152">Loan_test.cpp:152</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_ad30970052c25bda6b0e9e605b79eee68"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad30970052c25bda6b0e9e605b79eee68">xrpl::test::Loan_test::LoanParameters::overFee</a></div><div class="ttdeci">std::optional&lt; TenthBips32 &gt; overFee</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00158">Loan_test.cpp:158</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_ad3dbdc25c91318eb908350564776fd6e"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#ad3dbdc25c91318eb908350564776fd6e">xrpl::test::Loan_test::LoanParameters::closeInterest</a></div><div class="ttdeci">std::optional&lt; TenthBips32 &gt; closeInterest</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00161">Loan_test.cpp:161</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_af642ba404b1ae69441f5af7b25ad8df8"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af642ba404b1ae69441f5af7b25ad8df8">xrpl::test::Loan_test::LoanParameters::account</a></div><div class="ttdeci">jtx::Account account</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00146">Loan_test.cpp:146</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanParameters_html_af7ceb31d4bf7ebaf7002b4ad61752a44"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanParameters.html#af7ceb31d4bf7ebaf7002b4ad61752a44">xrpl::test::Loan_test::LoanParameters::originationFee</a></div><div class="ttdeci">std::optional&lt; Number &gt; originationFee</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00154">Loan_test.cpp:154</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html">xrpl::test::Loan_test::LoanState</a></div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00228">Loan_test.cpp:229</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_a10434ce558ef08b10dca1743ebc2131c"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a10434ce558ef08b10dca1743ebc2131c">xrpl::test::Loan_test::LoanState::totalValue</a></div><div class="ttdeci">Number totalValue</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00235">Loan_test.cpp:235</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_a3be6a4fbb9a2c37e3a410511ef1a10a4"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a3be6a4fbb9a2c37e3a410511ef1a10a4">xrpl::test::Loan_test::LoanState::previousPaymentDate</a></div><div class="ttdeci">std::uint32_t previousPaymentDate</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00230">Loan_test.cpp:230</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_a47c3ac4e5b3fa0b58bee29b77fd50abd"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a47c3ac4e5b3fa0b58bee29b77fd50abd">xrpl::test::Loan_test::LoanState::interestRate</a></div><div class="ttdeci">TenthBips32 const interestRate</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00241">Loan_test.cpp:241</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_a5954f2c1ac54be9eb3164d90d073cb73"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a5954f2c1ac54be9eb3164d90d073cb73">xrpl::test::Loan_test::LoanState::startDate</a></div><div class="ttdeci">NetClock::time_point startDate</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00231">Loan_test.cpp:231</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_a83e88518c4833ca58126ec8bd410eb73"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a83e88518c4833ca58126ec8bd410eb73">xrpl::test::Loan_test::LoanState::paymentInterval</a></div><div class="ttdeci">std::uint32_t const paymentInterval</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00240">Loan_test.cpp:240</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_a9c452ceb162e85f536d6dc6dcd09375d"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#a9c452ceb162e85f536d6dc6dcd09375d">xrpl::test::Loan_test::LoanState::periodicPayment</a></div><div class="ttdeci">Number periodicPayment</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00238">Loan_test.cpp:238</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_aab539a8a36c1c03aa26a87184535a8c7"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aab539a8a36c1c03aa26a87184535a8c7">xrpl::test::Loan_test::LoanState::paymentRemaining</a></div><div class="ttdeci">std::uint32_t paymentRemaining</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00233">Loan_test.cpp:233</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_ab4ec0a2b13f69bb8fa78756c3f432e1d"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ab4ec0a2b13f69bb8fa78756c3f432e1d">xrpl::test::Loan_test::LoanState::loanScale</a></div><div class="ttdeci">std::int32_t const loanScale</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00234">Loan_test.cpp:234</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_ad5d54ef7384e4f97812089db11977db7"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ad5d54ef7384e4f97812089db11977db7">xrpl::test::Loan_test::LoanState::principalOutstanding</a></div><div class="ttdeci">Number principalOutstanding</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00236">Loan_test.cpp:236</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_ae06eef6a44fb97414a4231aa95c088e4"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#ae06eef6a44fb97414a4231aa95c088e4">xrpl::test::Loan_test::LoanState::flags</a></div><div class="ttdeci">std::uint32_t flags</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00239">Loan_test.cpp:239</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_aeb13f712b02f4c2650243d9001677156"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#aeb13f712b02f4c2650243d9001677156">xrpl::test::Loan_test::LoanState::nextPaymentDate</a></div><div class="ttdeci">std::uint32_t nextPaymentDate</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00232">Loan_test.cpp:232</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1LoanState_html_af2235821f055ad37320d930c7e1db312"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1LoanState.html#af2235821f055ad37320d930c7e1db312">xrpl::test::Loan_test::LoanState::managementFeeOutstanding</a></div><div class="ttdeci">Number managementFeeOutstanding</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00237">Loan_test.cpp:237</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1PaymentParameters_html"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html">xrpl::test::Loan_test::PaymentParameters</a></div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00212">Loan_test.cpp:213</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1PaymentParameters_html_a274c0ee8eb7aca8d36062e71c2c1690d"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a274c0ee8eb7aca8d36062e71c2c1690d">xrpl::test::Loan_test::PaymentParameters::validateBalances</a></div><div class="ttdeci">bool validateBalances</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00218">Loan_test.cpp:218</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1PaymentParameters_html_a2e1370b56dd94df466792546475b023f"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a2e1370b56dd94df466792546475b023f">xrpl::test::Loan_test::PaymentParameters::overpaymentExtra</a></div><div class="ttdeci">std::optional&lt; Number &gt; overpaymentExtra</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00215">Loan_test.cpp:215</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1PaymentParameters_html_a7eaf224726ca4af5e44253fea38bc339"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#a7eaf224726ca4af5e44253fea38bc339">xrpl::test::Loan_test::PaymentParameters::defaults</a></div><div class="ttdeci">static PaymentParameters const &amp; defaults()</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00221">Loan_test.cpp:221</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1PaymentParameters_html_ab14ea2a642db7b3ebbf93c1b49caebb4"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ab14ea2a642db7b3ebbf93c1b49caebb4">xrpl::test::Loan_test::PaymentParameters::showStepBalances</a></div><div class="ttdeci">bool showStepBalances</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00217">Loan_test.cpp:217</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1PaymentParameters_html_ac10f0f39b2cef8126b07a7aa13baf988"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1PaymentParameters.html#ac10f0f39b2cef8126b07a7aa13baf988">xrpl::test::Loan_test::PaymentParameters::overpaymentFactor</a></div><div class="ttdeci">Number overpaymentFactor</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00214">Loan_test.cpp:214</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html">xrpl::test::Loan_test::VerifyLoanStatus</a></div><div class="ttdoc">Helper class to compare the expected state of a loan and loan broker against the data in the ledger.</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00247">Loan_test.cpp:248</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html_a0d041cff7dc2574c747765a4a53f413f"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a0d041cff7dc2574c747765a4a53f413f">xrpl::test::Loan_test::VerifyLoanStatus::VerifyLoanStatus</a></div><div class="ttdeci">VerifyLoanStatus(jtx::Env const &amp;env_, BrokerInfo const &amp;broker_, jtx::Account const &amp;pseudo_, Keylet const &amp;keylet_)</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00255">Loan_test.cpp:255</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html_a64ccae9327f8d43f2b430b825129f5fa"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a64ccae9327f8d43f2b430b825129f5fa">xrpl::test::Loan_test::VerifyLoanStatus::checkPayment</a></div><div class="ttdeci">void checkPayment(std::int32_t loanScale, jtx::Account const &amp;account, jtx::PrettyAmount const &amp;balanceBefore, STAmount const &amp;expectedPayment, jtx::PrettyAmount const &amp;adjustment) const</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00310">Loan_test.cpp:310</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html_a79f1360ea24d102199a36d5d41b46d1b"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#a79f1360ea24d102199a36d5d41b46d1b">xrpl::test::Loan_test::VerifyLoanStatus::checkBroker</a></div><div class="ttdeci">void checkBroker(Number const &amp;principalOutstanding, Number const &amp;interestOwed, TenthBips32 interestRate, std::uint32_t paymentInterval, std::uint32_t paymentsRemaining, std::uint32_t ownerCount) const</div><div class="ttdoc">Checks the expected broker state against the ledger.</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00267">Loan_test.cpp:267</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html_aa03ffc87b2c6e8aa2935b5f100ffbb3e"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa03ffc87b2c6e8aa2935b5f100ffbb3e">xrpl::test::Loan_test::VerifyLoanStatus::broker</a></div><div class="ttdeci">BrokerInfo const &amp; broker</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00251">Loan_test.cpp:251</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html_aa5de9ddecb90e00e73e81fe94261ca35"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aa5de9ddecb90e00e73e81fe94261ca35">xrpl::test::Loan_test::VerifyLoanStatus::pseudoAccount</a></div><div class="ttdeci">jtx::Account const &amp; pseudoAccount</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00252">Loan_test.cpp:252</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html_aadc6576a9a13ac6d3f171d26881abef2"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#aadc6576a9a13ac6d3f171d26881abef2">xrpl::test::Loan_test::VerifyLoanStatus::env</a></div><div class="ttdeci">jtx::Env const &amp; env</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00250">Loan_test.cpp:250</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html_ac47ad51b90a621abef35d31dbd63ea2b"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#ac47ad51b90a621abef35d31dbd63ea2b">xrpl::test::Loan_test::VerifyLoanStatus::loanKeylet</a></div><div class="ttdeci">Keylet const &amp; loanKeylet</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00253">Loan_test.cpp:253</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html_ae88259ad90deec2946018688a6681167"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#ae88259ad90deec2946018688a6681167">xrpl::test::Loan_test::VerifyLoanStatus::operator()</a></div><div class="ttdeci">void operator()(std::uint32_t previousPaymentDate, std::uint32_t nextPaymentDate, std::uint32_t paymentRemaining, Number const &amp;loanScale, Number const &amp;totalValue, Number const &amp;principalOutstanding, Number const &amp;managementFeeOutstanding, Number const &amp;periodicPayment, std::uint32_t flags) const</div><div class="ttdoc">Checks both the loan and broker expect states against the ledger.</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00336">Loan_test.cpp:336</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus_html_af6e6e95e55e1d2858e0242f71d0318eb"><div class="ttname"><a href="structxrpl_1_1test_1_1Loan__test_1_1VerifyLoanStatus.html#af6e6e95e55e1d2858e0242f71d0318eb">xrpl::test::Loan_test::VerifyLoanStatus::operator()</a></div><div class="ttdeci">void operator()(LoanState const &amp;state) const</div><div class="ttdoc">Checks both the loan and broker expect states against the ledger.</div><div class="ttdef"><b>Definition</b> <a href="Loan__test_8cpp_source.html#l00387">Loan_test.cpp:387</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1JTx_html"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1JTx.html">xrpl::test::jtx::JTx</a></div><div class="ttdoc">Execution context for applying a JSON transaction.</div><div class="ttdef"><b>Definition</b> <a href="JTx_8h_source.html#l00025">JTx.h:26</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1JTx_html_a942329955b249b1d4df75e92247f221c"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1JTx.html#a942329955b249b1d4df75e92247f221c">xrpl::test::jtx::JTx::stx</a></div><div class="ttdeci">std::shared_ptr&lt; STTx const &gt; stx</div><div class="ttdef"><b>Definition</b> <a href="JTx_8h_source.html#l00036">JTx.h:36</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1MPTInit_html_a08696ed27a22a208272f4bd1883752e5"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1MPTInit.html#a08696ed27a22a208272f4bd1883752e5">xrpl::test::jtx::MPTInit::create</a></div><div class="ttdeci">std::optional&lt; MPTCreate &gt; create</div><div class="ttdef"><b>Definition</b> <a href="mpt_8h_source.html#l00102">mpt.h:102</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1PrettyAmount_html"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html">xrpl::test::jtx::PrettyAmount</a></div><div class="ttdoc">Represents an XRP or IOU quantity This customizes the string conversion and supports XRP conversions ...</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00064">src/test/jtx/amount.h:65</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1PrettyAmount_html_a742750c3ad4996faa68c66664d3921db"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a742750c3ad4996faa68c66664d3921db">xrpl::test::jtx::PrettyAmount::value</a></div><div class="ttdeci">STAmount const &amp; value() const</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00108">src/test/jtx/amount.h:108</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1PrettyAmount_html_a844148a5010081aacd11657cddd4b028"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1PrettyAmount.html#a844148a5010081aacd11657cddd4b028">xrpl::test::jtx::PrettyAmount::number</a></div><div class="ttdeci">Number number() const</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00114">src/test/jtx/amount.h:114</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1PrettyAsset_html"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html">xrpl::test::jtx::PrettyAsset</a></div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00153">src/test/jtx/amount.h:154</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1PrettyAsset_html_a034940b6d0d19b44f0c46c53d315f099"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a034940b6d0d19b44f0c46c53d315f099">xrpl::test::jtx::PrettyAsset::native</a></div><div class="ttdeci">bool native() const</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00214">src/test/jtx/amount.h:214</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1PrettyAsset_html_a4d74996b3b3f23322e00b032c8c35baa"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#a4d74996b3b3f23322e00b032c8c35baa">xrpl::test::jtx::PrettyAsset::integral</a></div><div class="ttdeci">bool integral() const</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00208">src/test/jtx/amount.h:208</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1PrettyAsset_html_ac5538be33495f6fdd3cd03177b25decf"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac5538be33495f6fdd3cd03177b25decf">xrpl::test::jtx::PrettyAsset::raw</a></div><div class="ttdeci">Asset const &amp; raw() const</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00171">src/test/jtx/amount.h:171</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1PrettyAsset_html_ac74806960f3bff9148f4e830963062f7"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1PrettyAsset.html#ac74806960f3bff9148f4e830963062f7">xrpl::test::jtx::PrettyAsset::holds</a></div><div class="ttdeci">bool holds() const</div><div class="ttdef"><b>Definition</b> <a href="src_2test_2jtx_2amount_8h_source.html#l00221">src/test/jtx/amount.h:221</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1Vault_html"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1Vault.html">xrpl::test::jtx::Vault</a></div><div class="ttdef"><b>Definition</b> <a href="vault_8h_source.html#l00021">vault.h:22</a></div></div>
<div class="ttc" id="astructxrpl_1_1test_1_1jtx_1_1seq_html"><div class="ttname"><a href="structxrpl_1_1test_1_1jtx_1_1seq.html">xrpl::test::jtx::seq</a></div><div class="ttdoc">Set the sequence number on a JTx.</div><div class="ttdef"><b>Definition</b> <a href="seq_8h_source.html#l00014">seq.h:15</a></div></div>
<div class="ttc" id="atime_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/c/time.html">std::time</a></div><div class="ttdeci">T time(T... args)</div></div>
<div class="ttc" id="atime_point_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/time_point.html">std::chrono::time_point</a></div></div>
<div class="ttc" id="atime_since_epoch_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/chrono/time_point/time_since_epoch.html">std::chrono::time_point::time_since_epoch</a></div><div class="ttdeci">T time_since_epoch(T... args)</div></div>
<div class="ttc" id="ato_string_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a></div><div class="ttdeci">T to_string(T... args)</div></div>
<div class="ttc" id="atuple_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/tuple.html">std::tuple</a></div></div>
<div class="ttc" id="auniform_int_distribution_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/random/uniform_int_distribution.html">std::uniform_int_distribution</a></div></div>
<div class="ttc" id="avalue_or_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/utility/optional/value_or.html">std::optional::value_or</a></div><div class="ttdeci">T value_or(T... args)</div></div>
<div class="ttc" id="avector_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector</a></div></div>
</div><!-- fragment --></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by&#160;<a href="https://www.doxygen.org/index.html"><img class="footer" src="doxygen.svg" width="104" height="31" alt="doxygen"/></a> 1.9.8
</small></address>
</body>
</html>