Files
rippled/PayChan__test_8cpp_source.html
2025-11-14 05:36:35 -08:00

2435 lines
496 KiB
HTML
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: PayChan_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">PayChan_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;test/jtx.h&gt;</span></div>
<div class="line"><a id="l00002" name="l00002"></a><span class="lineno"> 2</span> </div>
<div class="line"><a id="l00003" name="l00003"></a><span class="lineno"> 3</span><span class="preprocessor">#include &lt;xrpl/basics/chrono.h&gt;</span></div>
<div class="line"><a id="l00004" name="l00004"></a><span class="lineno"> 4</span><span class="preprocessor">#include &lt;xrpl/ledger/Dir.h&gt;</span></div>
<div class="line"><a id="l00005" name="l00005"></a><span class="lineno"> 5</span><span class="preprocessor">#include &lt;xrpl/protocol/Feature.h&gt;</span></div>
<div class="line"><a id="l00006" name="l00006"></a><span class="lineno"> 6</span><span class="preprocessor">#include &lt;xrpl/protocol/Indexes.h&gt;</span></div>
<div class="line"><a id="l00007" name="l00007"></a><span class="lineno"> 7</span><span class="preprocessor">#include &lt;xrpl/protocol/PayChan.h&gt;</span></div>
<div class="line"><a id="l00008" name="l00008"></a><span class="lineno"> 8</span><span class="preprocessor">#include &lt;xrpl/protocol/TxFlags.h&gt;</span></div>
<div class="line"><a id="l00009" name="l00009"></a><span class="lineno"> 9</span><span class="preprocessor">#include &lt;xrpl/protocol/jss.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="keyword">namespace </span><a class="code hl_namespace" href="namespaceripple.html">ripple</a> {</div>
<div class="line"><a id="l00012" name="l00012"></a><span class="lineno"> 12</span><span class="keyword">namespace </span>test {</div>
<div class="line"><a id="l00013" name="l00013"></a><span class="lineno"> 13</span><span class="keyword">using namespace </span>jtx::paychan;</div>
<div class="line"><a id="l00014" name="l00014"></a><span class="lineno"> 14</span> </div>
<div class="foldopen" id="foldopen00015" data-start="{" data-end="};">
<div class="line"><a id="l00015" name="l00015"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html"> 15</a></span><span class="keyword">struct </span><a class="code hl_struct" href="structripple_1_1test_1_1PayChan__test.html">PayChan_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="l00016" name="l00016"></a><span class="lineno"> 16</span>{</div>
<div class="line"><a id="l00017" name="l00017"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a2224b4d0b89e8ab2a54d66a392ebb82c"> 17</a></span> <a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> <span class="keyword">const</span> <a class="code hl_variable" href="structripple_1_1test_1_1PayChan__test.html#a2224b4d0b89e8ab2a54d66a392ebb82c">disallowIncoming</a>{featureDisallowIncoming};</div>
<div class="line"><a id="l00018" name="l00018"></a><span class="lineno"> 18</span> </div>
<div class="line"><a id="l00019" name="l00019"></a><span class="lineno"> 19</span> <span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;uint256, std::shared_ptr&lt;SLE const&gt;</a>&gt;</div>
<div class="foldopen" id="foldopen00020" data-start="{" data-end="}">
<div class="line"><a id="l00020" name="l00020"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a11451c0e44c2b6cb8b761613d47427b5"> 20</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a11451c0e44c2b6cb8b761613d47427b5">channelKeyAndSle</a>(</div>
<div class="line"><a id="l00021" name="l00021"></a><span class="lineno"> 21</span> <a class="code hl_class" href="classripple_1_1ReadView.html">ReadView</a> <span class="keyword">const</span>&amp; view,</div>
<div class="line"><a id="l00022" name="l00022"></a><span class="lineno"> 22</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; account,</div>
<div class="line"><a id="l00023" name="l00023"></a><span class="lineno"> 23</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">jtx::Account</a> <span class="keyword">const</span>&amp; dst)</div>
<div class="line"><a id="l00024" name="l00024"></a><span class="lineno"> 24</span> {</div>
<div class="line"><a id="l00025" name="l00025"></a><span class="lineno"> 25</span> <span class="keyword">auto</span> <span class="keyword">const</span> sle = view.<a class="code hl_function" href="classripple_1_1ReadView.html#a0583a050ea7799ba331f6222a905f304">read</a>(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(account));</div>
<div class="line"><a id="l00026" name="l00026"></a><span class="lineno"> 26</span> <span class="keywordflow">if</span> (!sle)</div>
<div class="line"><a id="l00027" name="l00027"></a><span class="lineno"> 27</span> <span class="keywordflow">return</span> {};</div>
<div class="line"><a id="l00028" name="l00028"></a><span class="lineno"> 28</span> <span class="keyword">auto</span> <span class="keyword">const</span> k = <a class="code hl_function" href="namespaceripple_1_1keylet.html#afde577cc367684fb4beceb0100da6195">keylet::payChan</a>(account, dst, (*sle)[sfSequence] - 1);</div>
<div class="line"><a id="l00029" name="l00029"></a><span class="lineno"> 29</span> <span class="keywordflow">return</span> {k.key, view.<a class="code hl_function" href="classripple_1_1ReadView.html#a0583a050ea7799ba331f6222a905f304">read</a>(k)};</div>
<div class="line"><a id="l00030" name="l00030"></a><span class="lineno"> 30</span> }</div>
</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> <span class="keyword">static</span> <a class="code hl_class" href="classripple_1_1Buffer.html">Buffer</a></div>
<div class="foldopen" id="foldopen00033" data-start="{" data-end="}">
<div class="line"><a id="l00033" name="l00033"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8"> 33</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(</div>
<div class="line"><a id="l00034" name="l00034"></a><span class="lineno"> 34</span> <a class="code hl_class" href="classripple_1_1PublicKey.html">PublicKey</a> <span class="keyword">const</span>&amp; pk,</div>
<div class="line"><a id="l00035" name="l00035"></a><span class="lineno"> 35</span> <a class="code hl_class" href="classripple_1_1SecretKey.html">SecretKey</a> <span class="keyword">const</span>&amp; sk,</div>
<div class="line"><a id="l00036" name="l00036"></a><span class="lineno"> 36</span> <a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>,</div>
<div class="line"><a id="l00037" name="l00037"></a><span class="lineno"> 37</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; authAmt)</div>
<div class="line"><a id="l00038" name="l00038"></a><span class="lineno"> 38</span> {</div>
<div class="line"><a id="l00039" name="l00039"></a><span class="lineno"> 39</span> <a class="code hl_class" href="classripple_1_1Serializer.html">Serializer</a> msg;</div>
<div class="line"><a id="l00040" name="l00040"></a><span class="lineno"> 40</span> <a class="code hl_function" href="namespaceripple.html#a70465c94c8c462001ec31e94c8e92183">serializePayChanAuthorization</a>(msg, <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>, authAmt.<a class="code hl_function" href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf">xrp</a>());</div>
<div class="line"><a id="l00041" name="l00041"></a><span class="lineno"> 41</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#abae1db0ba3c2846aede94e2879fc6a29">sign</a>(pk, sk, msg.<a class="code hl_function" href="classripple_1_1Serializer.html#a394c3299f6cfcebdaa4bc98ec0c602d6">slice</a>());</div>
<div class="line"><a id="l00042" name="l00042"></a><span class="lineno"> 42</span> }</div>
</div>
<div class="line"><a id="l00043" name="l00043"></a><span class="lineno"> 43</span> </div>
<div class="line"><a id="l00044" name="l00044"></a><span class="lineno"> 44</span> <span class="keyword">static</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a></div>
<div class="foldopen" id="foldopen00045" data-start="{" data-end="}">
<div class="line"><a id="l00045" name="l00045"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb"> 45</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(<a class="code hl_class" href="classripple_1_1ReadView.html">ReadView</a> <span class="keyword">const</span>&amp; view, <a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; chan)</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">auto</span> <span class="keyword">const</span> slep = view.<a class="code hl_function" href="classripple_1_1ReadView.html#a0583a050ea7799ba331f6222a905f304">read</a>({ltPAYCHAN, chan});</div>
<div class="line"><a id="l00048" name="l00048"></a><span class="lineno"> 48</span> <span class="keywordflow">if</span> (!slep)</div>
<div class="line"><a id="l00049" name="l00049"></a><span class="lineno"> 49</span> <span class="keywordflow">return</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a>{-1};</div>
<div class="line"><a id="l00050" name="l00050"></a><span class="lineno"> 50</span> <span class="keywordflow">return</span> (*slep)[sfAmount];</div>
<div class="line"><a id="l00051" name="l00051"></a><span class="lineno"> 51</span> }</div>
</div>
<div class="line"><a id="l00052" name="l00052"></a><span class="lineno"> 52</span> </div>
<div class="line"><a id="l00053" name="l00053"></a><span class="lineno"> 53</span> <span class="keyword">static</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;std::int64_t&gt;</a></div>
<div class="foldopen" id="foldopen00054" data-start="{" data-end="}">
<div class="line"><a id="l00054" name="l00054"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142"> 54</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">channelExpiration</a>(<a class="code hl_class" href="classripple_1_1ReadView.html">ReadView</a> <span class="keyword">const</span>&amp; view, <a class="code hl_class" href="classripple_1_1base__uint.html">uint256</a> <span class="keyword">const</span>&amp; chan)</div>
<div class="line"><a id="l00055" name="l00055"></a><span class="lineno"> 55</span> {</div>
<div class="line"><a id="l00056" name="l00056"></a><span class="lineno"> 56</span> <span class="keyword">auto</span> <span class="keyword">const</span> slep = view.<a class="code hl_function" href="classripple_1_1ReadView.html#a0583a050ea7799ba331f6222a905f304">read</a>({ltPAYCHAN, chan});</div>
<div class="line"><a id="l00057" name="l00057"></a><span class="lineno"> 57</span> <span class="keywordflow">if</span> (!slep)</div>
<div class="line"><a id="l00058" name="l00058"></a><span class="lineno"> 58</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="l00059" name="l00059"></a><span class="lineno"> 59</span> <span class="keywordflow">if</span> (<span class="keyword">auto</span> <span class="keyword">const</span> r = (*slep)[~sfExpiration])</div>
<div class="line"><a id="l00060" name="l00060"></a><span class="lineno"> 60</span> <span class="keywordflow">return</span> r.value();</div>
<div class="line"><a id="l00061" name="l00061"></a><span class="lineno"> 61</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="l00062" name="l00062"></a><span class="lineno"> 62</span> }</div>
</div>
<div class="line"><a id="l00063" name="l00063"></a><span class="lineno"> 63</span> </div>
<div class="line"><a id="l00064" name="l00064"></a><span class="lineno"> 64</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00065" data-start="{" data-end="}">
<div class="line"><a id="l00065" name="l00065"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a1678fa451d8a3acb397efdfddf8d7a71"> 65</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a1678fa451d8a3acb397efdfddf8d7a71">testSimple</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l00066" name="l00066"></a><span class="lineno"> 66</span> {</div>
<div class="line"><a id="l00067" name="l00067"></a><span class="lineno"> 67</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;simple&quot;</span>);</div>
<div class="line"><a id="l00068" name="l00068"></a><span class="lineno"> 68</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00069" name="l00069"></a><span class="lineno"> 69</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00070" name="l00070"></a><span class="lineno"> 70</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00071" name="l00071"></a><span class="lineno"> 71</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00072" name="l00072"></a><span class="lineno"> 72</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00073" name="l00073"></a><span class="lineno"> 73</span> <span class="keyword">auto</span> USDA = alice[<span class="stringliteral">&quot;USD&quot;</span>];</div>
<div class="line"><a id="l00074" name="l00074"></a><span class="lineno"> 74</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00075" name="l00075"></a><span class="lineno"> 75</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00076" name="l00076"></a><span class="lineno"> 76</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l00077" name="l00077"></a><span class="lineno"> 77</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00078" name="l00078"></a><span class="lineno"> 78</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk));</div>
<div class="line"><a id="l00079" name="l00079"></a><span class="lineno"> 79</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(0));</div>
<div class="line"><a id="l00080" name="l00080"></a><span class="lineno"> 80</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000));</div>
<div class="line"><a id="l00081" name="l00081"></a><span class="lineno"> 81</span> </div>
<div class="line"><a id="l00082" name="l00082"></a><span class="lineno"> 82</span> {</div>
<div class="line"><a id="l00083" name="l00083"></a><span class="lineno"> 83</span> <span class="keyword">auto</span> <span class="keyword">const</span> preAlice = env.balance(alice);</div>
<div class="line"><a id="l00084" name="l00084"></a><span class="lineno"> 84</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)));</div>
<div class="line"><a id="l00085" name="l00085"></a><span class="lineno"> 85</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00086" name="l00086"></a><span class="lineno"> 86</span> BEAST_EXPECT(env.balance(alice) == preAlice - <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000) - feeDrops);</div>
<div class="line"><a id="l00087" name="l00087"></a><span class="lineno"> 87</span> }</div>
<div class="line"><a id="l00088" name="l00088"></a><span class="lineno"> 88</span> </div>
<div class="line"><a id="l00089" name="l00089"></a><span class="lineno"> 89</span> <span class="keyword">auto</span> chanBal = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan);</div>
<div class="line"><a id="l00090" name="l00090"></a><span class="lineno"> 90</span> <span class="keyword">auto</span> chanAmt = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan);</div>
<div class="line"><a id="l00091" name="l00091"></a><span class="lineno"> 91</span> BEAST_EXPECT(chanBal == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(0));</div>
<div class="line"><a id="l00092" name="l00092"></a><span class="lineno"> 92</span> BEAST_EXPECT(chanAmt == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(2000));</div>
<div class="line"><a id="l00093" name="l00093"></a><span class="lineno"> 93</span> </div>
<div class="line"><a id="l00094" name="l00094"></a><span class="lineno"> 94</span> {</div>
<div class="line"><a id="l00095" name="l00095"></a><span class="lineno"> 95</span> <span class="comment">// bad amounts (non-xrp, negative amounts)</span></div>
<div class="line"><a id="l00096" name="l00096"></a><span class="lineno"> 96</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, USDA(1000), settleDelay, pk),</div>
<div class="line"><a id="l00097" name="l00097"></a><span class="lineno"> 97</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00098" name="l00098"></a><span class="lineno"> 98</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, USDA(1000)), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00099" name="l00099"></a><span class="lineno"> 99</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(-1000), settleDelay, pk),</div>
<div class="line"><a id="l00100" name="l00100"></a><span class="lineno"> 100</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00101" name="l00101"></a><span class="lineno"> 101</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(-1000)), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</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> </div>
<div class="line"><a id="l00104" name="l00104"></a><span class="lineno"> 104</span> <span class="comment">// invalid account</span></div>
<div class="line"><a id="l00105" name="l00105"></a><span class="lineno"> 105</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, <span class="stringliteral">&quot;noAccount&quot;</span>, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk),</div>
<div class="line"><a id="l00106" name="l00106"></a><span class="lineno"> 106</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca1207baad8c378dc23cd2fa4c4276844d">tecNO_DST</a>));</div>
<div class="line"><a id="l00107" name="l00107"></a><span class="lineno"> 107</span> <span class="comment">// can&#39;t create channel to the same account</span></div>
<div class="line"><a id="l00108" name="l00108"></a><span class="lineno"> 108</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, alice, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk),</div>
<div class="line"><a id="l00109" name="l00109"></a><span class="lineno"> 109</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46acf9cc7bb9b19628c6a89a21611972242">temDST_IS_SRC</a>));</div>
<div class="line"><a id="l00110" name="l00110"></a><span class="lineno"> 110</span> <span class="comment">// invalid channel</span></div>
<div class="line"><a id="l00111" name="l00111"></a><span class="lineno"> 111</span> </div>
<div class="line"><a id="l00112" name="l00112"></a><span class="lineno"> 112</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(</div>
<div class="line"><a id="l00113" name="l00113"></a><span class="lineno"> 113</span> alice,</div>
<div class="line"><a id="l00114" name="l00114"></a><span class="lineno"> 114</span> <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, <span class="stringliteral">&quot;noAccount&quot;</span>, env.seq(alice) - 1),</div>
<div class="line"><a id="l00115" name="l00115"></a><span class="lineno"> 115</span> <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)),</div>
<div class="line"><a id="l00116" name="l00116"></a><span class="lineno"> 116</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca02ea20c787300a40fe375ba3d6405258">tecNO_ENTRY</a>));</div>
<div class="line"><a id="l00117" name="l00117"></a><span class="lineno"> 117</span> <span class="comment">// not enough funds</span></div>
<div class="line"><a id="l00118" name="l00118"></a><span class="lineno"> 118</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), settleDelay, pk), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca3577fa7a8b4da9a377d45f373d80de05">tecUNFUNDED</a>));</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 class="line"><a id="l00121" name="l00121"></a><span class="lineno"> 121</span> <span class="comment">// No signature claim with bad amounts (negative and non-xrp)</span></div>
<div class="line"><a id="l00122" name="l00122"></a><span class="lineno"> 122</span> <span class="keyword">auto</span> <span class="keyword">const</span> iou = USDA(100).value();</div>
<div class="line"><a id="l00123" name="l00123"></a><span class="lineno"> 123</span> <span class="keyword">auto</span> <span class="keyword">const</span> negXRP = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(-100).value();</div>
<div class="line"><a id="l00124" name="l00124"></a><span class="lineno"> 124</span> <span class="keyword">auto</span> <span class="keyword">const</span> posXRP = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100).value();</div>
<div class="line"><a id="l00125" name="l00125"></a><span class="lineno"> 125</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, iou, iou), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00126" name="l00126"></a><span class="lineno"> 126</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, posXRP, iou), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00127" name="l00127"></a><span class="lineno"> 127</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, iou, posXRP), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00128" name="l00128"></a><span class="lineno"> 128</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, negXRP, negXRP), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00129" name="l00129"></a><span class="lineno"> 129</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, posXRP, negXRP), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00130" name="l00130"></a><span class="lineno"> 130</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, negXRP, posXRP), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00131" name="l00131"></a><span class="lineno"> 131</span> }</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="comment">// No signature claim more than authorized</span></div>
<div class="line"><a id="l00134" name="l00134"></a><span class="lineno"> 134</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l00135" name="l00135"></a><span class="lineno"> 135</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l00136" name="l00136"></a><span class="lineno"> 136</span> <span class="keyword">auto</span> <span class="keyword">const</span> authAmt = reqBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(-100);</div>
<div class="line"><a id="l00137" name="l00137"></a><span class="lineno"> 137</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l00138" name="l00138"></a><span class="lineno"> 138</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, reqBal, authAmt), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00139" name="l00139"></a><span class="lineno"> 139</span> }</div>
<div class="line"><a id="l00140" name="l00140"></a><span class="lineno"> 140</span> {</div>
<div class="line"><a id="l00141" name="l00141"></a><span class="lineno"> 141</span> <span class="comment">// No signature needed since the owner is claiming</span></div>
<div class="line"><a id="l00142" name="l00142"></a><span class="lineno"> 142</span> <span class="keyword">auto</span> <span class="keyword">const</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00143" name="l00143"></a><span class="lineno"> 143</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l00144" name="l00144"></a><span class="lineno"> 144</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l00145" name="l00145"></a><span class="lineno"> 145</span> <span class="keyword">auto</span> <span class="keyword">const</span> authAmt = reqBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100);</div>
<div class="line"><a id="l00146" name="l00146"></a><span class="lineno"> 146</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l00147" name="l00147"></a><span class="lineno"> 147</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, reqBal, authAmt));</div>
<div class="line"><a id="l00148" name="l00148"></a><span class="lineno"> 148</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == reqBal);</div>
<div class="line"><a id="l00149" name="l00149"></a><span class="lineno"> 149</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l00150" name="l00150"></a><span class="lineno"> 150</span> BEAST_EXPECT(env.balance(bob) == preBob + delta);</div>
<div class="line"><a id="l00151" name="l00151"></a><span class="lineno"> 151</span> chanBal = reqBal;</div>
<div class="line"><a id="l00152" name="l00152"></a><span class="lineno"> 152</span> }</div>
<div class="line"><a id="l00153" name="l00153"></a><span class="lineno"> 153</span> {</div>
<div class="line"><a id="l00154" name="l00154"></a><span class="lineno"> 154</span> <span class="comment">// Claim with signature</span></div>
<div class="line"><a id="l00155" name="l00155"></a><span class="lineno"> 155</span> <span class="keyword">auto</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00156" name="l00156"></a><span class="lineno"> 156</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l00157" name="l00157"></a><span class="lineno"> 157</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l00158" name="l00158"></a><span class="lineno"> 158</span> <span class="keyword">auto</span> <span class="keyword">const</span> authAmt = reqBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100);</div>
<div class="line"><a id="l00159" name="l00159"></a><span class="lineno"> 159</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l00160" name="l00160"></a><span class="lineno"> 160</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> =</div>
<div class="line"><a id="l00161" name="l00161"></a><span class="lineno"> 161</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, authAmt);</div>
<div class="line"><a id="l00162" name="l00162"></a><span class="lineno"> 162</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqBal, authAmt, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()));</div>
<div class="line"><a id="l00163" name="l00163"></a><span class="lineno"> 163</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == reqBal);</div>
<div class="line"><a id="l00164" name="l00164"></a><span class="lineno"> 164</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l00165" name="l00165"></a><span class="lineno"> 165</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00166" name="l00166"></a><span class="lineno"> 166</span> BEAST_EXPECT(env.balance(bob) == preBob + delta - feeDrops);</div>
<div class="line"><a id="l00167" name="l00167"></a><span class="lineno"> 167</span> chanBal = reqBal;</div>
<div class="line"><a id="l00168" name="l00168"></a><span class="lineno"> 168</span> </div>
<div class="line"><a id="l00169" name="l00169"></a><span class="lineno"> 169</span> <span class="comment">// claim again</span></div>
<div class="line"><a id="l00170" name="l00170"></a><span class="lineno"> 170</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00171" name="l00171"></a><span class="lineno"> 171</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqBal, authAmt, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()),</div>
<div class="line"><a id="l00172" name="l00172"></a><span class="lineno"> 172</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cad6e984aac9838459128d97b668ec1e4f">tecUNFUNDED_PAYMENT</a>));</div>
<div class="line"><a id="l00173" name="l00173"></a><span class="lineno"> 173</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == chanBal);</div>
<div class="line"><a id="l00174" name="l00174"></a><span class="lineno"> 174</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l00175" name="l00175"></a><span class="lineno"> 175</span> BEAST_EXPECT(env.balance(bob) == preBob - feeDrops);</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> {</div>
<div class="line"><a id="l00178" name="l00178"></a><span class="lineno"> 178</span> <span class="comment">// Try to claim more than authorized</span></div>
<div class="line"><a id="l00179" name="l00179"></a><span class="lineno"> 179</span> <span class="keyword">auto</span> <span class="keyword">const</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00180" name="l00180"></a><span class="lineno"> 180</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> authAmt = chanBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l00181" name="l00181"></a><span class="lineno"> 181</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> reqAmt = authAmt + <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{1};</div>
<div class="line"><a id="l00182" name="l00182"></a><span class="lineno"> 182</span> assert(reqAmt &lt;= chanAmt);</div>
<div class="line"><a id="l00183" name="l00183"></a><span class="lineno"> 183</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> =</div>
<div class="line"><a id="l00184" name="l00184"></a><span class="lineno"> 184</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, authAmt);</div>
<div class="line"><a id="l00185" name="l00185"></a><span class="lineno"> 185</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqAmt, authAmt, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()),</div>
<div class="line"><a id="l00186" name="l00186"></a><span class="lineno"> 186</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l00187" name="l00187"></a><span class="lineno"> 187</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == chanBal);</div>
<div class="line"><a id="l00188" name="l00188"></a><span class="lineno"> 188</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l00189" name="l00189"></a><span class="lineno"> 189</span> BEAST_EXPECT(env.balance(bob) == preBob);</div>
<div class="line"><a id="l00190" name="l00190"></a><span class="lineno"> 190</span> }</div>
<div class="line"><a id="l00191" name="l00191"></a><span class="lineno"> 191</span> </div>
<div class="line"><a id="l00192" name="l00192"></a><span class="lineno"> 192</span> <span class="comment">// Dst tries to fund the channel</span></div>
<div class="line"><a id="l00193" name="l00193"></a><span class="lineno"> 193</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(bob, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00194" name="l00194"></a><span class="lineno"> 194</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == chanBal);</div>
<div class="line"><a id="l00195" name="l00195"></a><span class="lineno"> 195</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l00196" name="l00196"></a><span class="lineno"> 196</span> </div>
<div class="line"><a id="l00197" name="l00197"></a><span class="lineno"> 197</span> {</div>
<div class="line"><a id="l00198" name="l00198"></a><span class="lineno"> 198</span> <span class="comment">// Wrong signing key</span></div>
<div class="line"><a id="l00199" name="l00199"></a><span class="lineno"> 199</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(bob.pk(), bob.sk(), chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1500));</div>
<div class="line"><a id="l00200" name="l00200"></a><span class="lineno"> 200</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(</div>
<div class="line"><a id="l00201" name="l00201"></a><span class="lineno"> 201</span> bob,</div>
<div class="line"><a id="l00202" name="l00202"></a><span class="lineno"> 202</span> chan,</div>
<div class="line"><a id="l00203" name="l00203"></a><span class="lineno"> 203</span> <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1500).value(),</div>
<div class="line"><a id="l00204" name="l00204"></a><span class="lineno"> 204</span> <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1500).value(),</div>
<div class="line"><a id="l00205" name="l00205"></a><span class="lineno"> 205</span> <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>),</div>
<div class="line"><a id="l00206" name="l00206"></a><span class="lineno"> 206</span> bob.pk()),</div>
<div class="line"><a id="l00207" name="l00207"></a><span class="lineno"> 207</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a33c7f00dec90dddffd0318dce2a4bf51">temBAD_SIGNER</a>));</div>
<div class="line"><a id="l00208" name="l00208"></a><span class="lineno"> 208</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == chanBal);</div>
<div class="line"><a id="l00209" name="l00209"></a><span class="lineno"> 209</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l00210" name="l00210"></a><span class="lineno"> 210</span> }</div>
<div class="line"><a id="l00211" name="l00211"></a><span class="lineno"> 211</span> {</div>
<div class="line"><a id="l00212" name="l00212"></a><span class="lineno"> 212</span> <span class="comment">// Bad signature</span></div>
<div class="line"><a id="l00213" name="l00213"></a><span class="lineno"> 213</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(bob.pk(), bob.sk(), chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1500));</div>
<div class="line"><a id="l00214" name="l00214"></a><span class="lineno"> 214</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(</div>
<div class="line"><a id="l00215" name="l00215"></a><span class="lineno"> 215</span> bob,</div>
<div class="line"><a id="l00216" name="l00216"></a><span class="lineno"> 216</span> chan,</div>
<div class="line"><a id="l00217" name="l00217"></a><span class="lineno"> 217</span> <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1500).value(),</div>
<div class="line"><a id="l00218" name="l00218"></a><span class="lineno"> 218</span> <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1500).value(),</div>
<div class="line"><a id="l00219" name="l00219"></a><span class="lineno"> 219</span> <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>),</div>
<div class="line"><a id="l00220" name="l00220"></a><span class="lineno"> 220</span> alice.pk()),</div>
<div class="line"><a id="l00221" name="l00221"></a><span class="lineno"> 221</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46aecc18d207c14edd554462f82555e9d92">temBAD_SIGNATURE</a>));</div>
<div class="line"><a id="l00222" name="l00222"></a><span class="lineno"> 222</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == chanBal);</div>
<div class="line"><a id="l00223" name="l00223"></a><span class="lineno"> 223</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l00224" name="l00224"></a><span class="lineno"> 224</span> }</div>
<div class="line"><a id="l00225" name="l00225"></a><span class="lineno"> 225</span> {</div>
<div class="line"><a id="l00226" name="l00226"></a><span class="lineno"> 226</span> <span class="comment">// Dst closes channel</span></div>
<div class="line"><a id="l00227" name="l00227"></a><span class="lineno"> 227</span> <span class="keyword">auto</span> <span class="keyword">const</span> preAlice = env.balance(alice);</div>
<div class="line"><a id="l00228" name="l00228"></a><span class="lineno"> 228</span> <span class="keyword">auto</span> <span class="keyword">const</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00229" name="l00229"></a><span class="lineno"> 229</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l00230" name="l00230"></a><span class="lineno"> 230</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00231" name="l00231"></a><span class="lineno"> 231</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00232" name="l00232"></a><span class="lineno"> 232</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = chanAmt - chanBal;</div>
<div class="line"><a id="l00233" name="l00233"></a><span class="lineno"> 233</span> assert(delta &gt; beast::zero);</div>
<div class="line"><a id="l00234" name="l00234"></a><span class="lineno"> 234</span> BEAST_EXPECT(env.balance(alice) == preAlice + delta);</div>
<div class="line"><a id="l00235" name="l00235"></a><span class="lineno"> 235</span> BEAST_EXPECT(env.balance(bob) == preBob - feeDrops);</div>
<div class="line"><a id="l00236" name="l00236"></a><span class="lineno"> 236</span> }</div>
<div class="line"><a id="l00237" name="l00237"></a><span class="lineno"> 237</span> }</div>
</div>
<div class="line"><a id="l00238" name="l00238"></a><span class="lineno"> 238</span> </div>
<div class="line"><a id="l00239" name="l00239"></a><span class="lineno"> 239</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00240" data-start="{" data-end="}">
<div class="line"><a id="l00240" name="l00240"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#aad9d28395b753c6f7b99422aa9b9d5e1"> 240</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#aad9d28395b753c6f7b99422aa9b9d5e1">testDisallowIncoming</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l00241" name="l00241"></a><span class="lineno"> 241</span> {</div>
<div class="line"><a id="l00242" name="l00242"></a><span class="lineno"> 242</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Disallow Incoming Flag&quot;</span>);</div>
<div class="line"><a id="l00243" name="l00243"></a><span class="lineno"> 243</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00244" name="l00244"></a><span class="lineno"> 244</span> </div>
<div class="line"><a id="l00245" name="l00245"></a><span class="lineno"> 245</span> <span class="comment">// test flag doesn&#39;t set unless amendment enabled</span></div>
<div class="line"><a id="l00246" name="l00246"></a><span class="lineno"> 246</span> {</div>
<div class="line"><a id="l00247" name="l00247"></a><span class="lineno"> 247</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features - <a class="code hl_variable" href="structripple_1_1test_1_1PayChan__test.html#a2224b4d0b89e8ab2a54d66a392ebb82c">disallowIncoming</a>};</div>
<div class="line"><a id="l00248" name="l00248"></a><span class="lineno"> 248</span> <a class="code hl_class" href="classripple_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="l00249" name="l00249"></a><span class="lineno"> 249</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice);</div>
<div class="line"><a id="l00250" name="l00250"></a><span class="lineno"> 250</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(alice, <a class="code hl_variable" href="namespaceripple.html#ac12fbb1864b09bfd3fb4ead410449edd">asfDisallowIncomingPayChan</a>));</div>
<div class="line"><a id="l00251" name="l00251"></a><span class="lineno"> 251</span> env.close();</div>
<div class="line"><a id="l00252" name="l00252"></a><span class="lineno"> 252</span> <span class="keyword">auto</span> <span class="keyword">const</span> sle = env.le(alice);</div>
<div class="line"><a id="l00253" name="l00253"></a><span class="lineno"> 253</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">uint32_t</a> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1flags.html">flags</a> = sle-&gt;getFlags();</div>
<div class="line"><a id="l00254" name="l00254"></a><span class="lineno"> 254</span> BEAST_EXPECT(!(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1flags.html">flags</a> &amp; <a class="code hl_enumvalue" href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a91c443238e7e5acef466bfb2fe9f1211">lsfDisallowIncomingPayChan</a>));</div>
<div class="line"><a id="l00255" name="l00255"></a><span class="lineno"> 255</span> }</div>
<div class="line"><a id="l00256" name="l00256"></a><span class="lineno"> 256</span> </div>
<div class="line"><a id="l00257" name="l00257"></a><span class="lineno"> 257</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00258" name="l00258"></a><span class="lineno"> 258</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features | <a class="code hl_variable" href="structripple_1_1test_1_1PayChan__test.html#a2224b4d0b89e8ab2a54d66a392ebb82c">disallowIncoming</a>};</div>
<div class="line"><a id="l00259" name="l00259"></a><span class="lineno"> 259</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00260" name="l00260"></a><span class="lineno"> 260</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00261" name="l00261"></a><span class="lineno"> 261</span> <span class="keyword">auto</span> <span class="keyword">const</span> cho = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;cho&quot;</span>);</div>
<div class="line"><a id="l00262" name="l00262"></a><span class="lineno"> 262</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, cho);</div>
<div class="line"><a id="l00263" name="l00263"></a><span class="lineno"> 263</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00264" name="l00264"></a><span class="lineno"> 264</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l00265" name="l00265"></a><span class="lineno"> 265</span> </div>
<div class="line"><a id="l00266" name="l00266"></a><span class="lineno"> 266</span> <span class="comment">// set flag on bob only</span></div>
<div class="line"><a id="l00267" name="l00267"></a><span class="lineno"> 267</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(bob, <a class="code hl_variable" href="namespaceripple.html#ac12fbb1864b09bfd3fb4ead410449edd">asfDisallowIncomingPayChan</a>));</div>
<div class="line"><a id="l00268" name="l00268"></a><span class="lineno"> 268</span> env.close();</div>
<div class="line"><a id="l00269" name="l00269"></a><span class="lineno"> 269</span> </div>
<div class="line"><a id="l00270" name="l00270"></a><span class="lineno"> 270</span> <span class="comment">// channel creation from alice to bob is disallowed</span></div>
<div class="line"><a id="l00271" name="l00271"></a><span class="lineno"> 271</span> {</div>
<div class="line"><a id="l00272" name="l00272"></a><span class="lineno"> 272</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00273" name="l00273"></a><span class="lineno"> 273</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk),</div>
<div class="line"><a id="l00274" name="l00274"></a><span class="lineno"> 274</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00275" name="l00275"></a><span class="lineno"> 275</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00276" name="l00276"></a><span class="lineno"> 276</span> }</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> <span class="comment">// set flag on alice also</span></div>
<div class="line"><a id="l00279" name="l00279"></a><span class="lineno"> 279</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(alice, <a class="code hl_variable" href="namespaceripple.html#ac12fbb1864b09bfd3fb4ead410449edd">asfDisallowIncomingPayChan</a>));</div>
<div class="line"><a id="l00280" name="l00280"></a><span class="lineno"> 280</span> env.close();</div>
<div class="line"><a id="l00281" name="l00281"></a><span class="lineno"> 281</span> </div>
<div class="line"><a id="l00282" name="l00282"></a><span class="lineno"> 282</span> <span class="comment">// channel creation from bob to alice is now disallowed</span></div>
<div class="line"><a id="l00283" name="l00283"></a><span class="lineno"> 283</span> {</div>
<div class="line"><a id="l00284" name="l00284"></a><span class="lineno"> 284</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(bob, alice, env.seq(bob));</div>
<div class="line"><a id="l00285" name="l00285"></a><span class="lineno"> 285</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(bob, alice, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk),</div>
<div class="line"><a id="l00286" name="l00286"></a><span class="lineno"> 286</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00287" name="l00287"></a><span class="lineno"> 287</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00288" name="l00288"></a><span class="lineno"> 288</span> }</div>
<div class="line"><a id="l00289" name="l00289"></a><span class="lineno"> 289</span> </div>
<div class="line"><a id="l00290" name="l00290"></a><span class="lineno"> 290</span> <span class="comment">// remove flag from bob</span></div>
<div class="line"><a id="l00291" name="l00291"></a><span class="lineno"> 291</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a18cde110bb3ad7dce97ac11a4b251d0e">fclear</a>(bob, <a class="code hl_variable" href="namespaceripple.html#ac12fbb1864b09bfd3fb4ead410449edd">asfDisallowIncomingPayChan</a>));</div>
<div class="line"><a id="l00292" name="l00292"></a><span class="lineno"> 292</span> env.close();</div>
<div class="line"><a id="l00293" name="l00293"></a><span class="lineno"> 293</span> </div>
<div class="line"><a id="l00294" name="l00294"></a><span class="lineno"> 294</span> <span class="comment">// now the channel between alice and bob can exist</span></div>
<div class="line"><a id="l00295" name="l00295"></a><span class="lineno"> 295</span> {</div>
<div class="line"><a id="l00296" name="l00296"></a><span class="lineno"> 296</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00297" name="l00297"></a><span class="lineno"> 297</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk),</div>
<div class="line"><a id="l00298" name="l00298"></a><span class="lineno"> 298</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>));</div>
<div class="line"><a id="l00299" name="l00299"></a><span class="lineno"> 299</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00300" name="l00300"></a><span class="lineno"> 300</span> }</div>
<div class="line"><a id="l00301" name="l00301"></a><span class="lineno"> 301</span> </div>
<div class="line"><a id="l00302" name="l00302"></a><span class="lineno"> 302</span> <span class="comment">// a channel from cho to alice isn&#39;t allowed</span></div>
<div class="line"><a id="l00303" name="l00303"></a><span class="lineno"> 303</span> {</div>
<div class="line"><a id="l00304" name="l00304"></a><span class="lineno"> 304</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(cho, alice, env.seq(cho));</div>
<div class="line"><a id="l00305" name="l00305"></a><span class="lineno"> 305</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(cho, alice, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk),</div>
<div class="line"><a id="l00306" name="l00306"></a><span class="lineno"> 306</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00307" name="l00307"></a><span class="lineno"> 307</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</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> </div>
<div class="line"><a id="l00310" name="l00310"></a><span class="lineno"> 310</span> <span class="comment">// remove flag from alice</span></div>
<div class="line"><a id="l00311" name="l00311"></a><span class="lineno"> 311</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a18cde110bb3ad7dce97ac11a4b251d0e">fclear</a>(alice, <a class="code hl_variable" href="namespaceripple.html#ac12fbb1864b09bfd3fb4ead410449edd">asfDisallowIncomingPayChan</a>));</div>
<div class="line"><a id="l00312" name="l00312"></a><span class="lineno"> 312</span> env.close();</div>
<div class="line"><a id="l00313" name="l00313"></a><span class="lineno"> 313</span> </div>
<div class="line"><a id="l00314" name="l00314"></a><span class="lineno"> 314</span> <span class="comment">// now a channel from cho to alice is allowed</span></div>
<div class="line"><a id="l00315" name="l00315"></a><span class="lineno"> 315</span> {</div>
<div class="line"><a id="l00316" name="l00316"></a><span class="lineno"> 316</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(cho, alice, env.seq(cho));</div>
<div class="line"><a id="l00317" name="l00317"></a><span class="lineno"> 317</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(cho, alice, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk),</div>
<div class="line"><a id="l00318" name="l00318"></a><span class="lineno"> 318</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>));</div>
<div class="line"><a id="l00319" name="l00319"></a><span class="lineno"> 319</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00320" name="l00320"></a><span class="lineno"> 320</span> }</div>
<div class="line"><a id="l00321" name="l00321"></a><span class="lineno"> 321</span> }</div>
</div>
<div class="line"><a id="l00322" name="l00322"></a><span class="lineno"> 322</span> </div>
<div class="line"><a id="l00323" name="l00323"></a><span class="lineno"> 323</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00324" data-start="{" data-end="}">
<div class="line"><a id="l00324" name="l00324"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#aa76f753ded65f80ee5de6c264d7c767b"> 324</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#aa76f753ded65f80ee5de6c264d7c767b">testCancelAfter</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l00325" name="l00325"></a><span class="lineno"> 325</span> {</div>
<div class="line"><a id="l00326" name="l00326"></a><span class="lineno"> 326</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;cancel after&quot;</span>);</div>
<div class="line"><a id="l00327" name="l00327"></a><span class="lineno"> 327</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00328" name="l00328"></a><span class="lineno"> 328</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00329" name="l00329"></a><span class="lineno"> 329</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00330" name="l00330"></a><span class="lineno"> 330</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00331" name="l00331"></a><span class="lineno"> 331</span> <span class="keyword">auto</span> <span class="keyword">const</span> carol = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;carol&quot;</span>);</div>
<div class="line"><a id="l00332" name="l00332"></a><span class="lineno"> 332</span> {</div>
<div class="line"><a id="l00333" name="l00333"></a><span class="lineno"> 333</span> <span class="comment">// If dst claims after cancel after, channel closes</span></div>
<div class="line"><a id="l00334" name="l00334"></a><span class="lineno"> 334</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00335" name="l00335"></a><span class="lineno"> 335</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00336" name="l00336"></a><span class="lineno"> 336</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00337" name="l00337"></a><span class="lineno"> 337</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</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/chrono/time_point.html">NetClock::time_point</a> <span class="keyword">const</span> cancelAfter =</div>
<div class="line"><a id="l00339" name="l00339"></a><span class="lineno"> 339</span> env.current()-&gt;info().parentCloseTime + 3600s;</div>
<div class="line"><a id="l00340" name="l00340"></a><span class="lineno"> 340</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l00341" name="l00341"></a><span class="lineno"> 341</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00342" name="l00342"></a><span class="lineno"> 342</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk, cancelAfter));</div>
<div class="line"><a id="l00343" name="l00343"></a><span class="lineno"> 343</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00344" name="l00344"></a><span class="lineno"> 344</span> env.close(cancelAfter);</div>
<div class="line"><a id="l00345" name="l00345"></a><span class="lineno"> 345</span> {</div>
<div class="line"><a id="l00346" name="l00346"></a><span class="lineno"> 346</span> <span class="comment">// dst cannot claim after cancelAfter</span></div>
<div class="line"><a id="l00347" name="l00347"></a><span class="lineno"> 347</span> <span class="keyword">auto</span> <span class="keyword">const</span> chanBal = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan);</div>
<div class="line"><a id="l00348" name="l00348"></a><span class="lineno"> 348</span> <span class="keyword">auto</span> <span class="keyword">const</span> chanAmt = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan);</div>
<div class="line"><a id="l00349" name="l00349"></a><span class="lineno"> 349</span> <span class="keyword">auto</span> preAlice = env.balance(alice);</div>
<div class="line"><a id="l00350" name="l00350"></a><span class="lineno"> 350</span> <span class="keyword">auto</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00351" name="l00351"></a><span class="lineno"> 351</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l00352" name="l00352"></a><span class="lineno"> 352</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l00353" name="l00353"></a><span class="lineno"> 353</span> <span class="keyword">auto</span> <span class="keyword">const</span> authAmt = reqBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100);</div>
<div class="line"><a id="l00354" name="l00354"></a><span class="lineno"> 354</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l00355" name="l00355"></a><span class="lineno"> 355</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> =</div>
<div class="line"><a id="l00356" name="l00356"></a><span class="lineno"> 356</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, authAmt);</div>
<div class="line"><a id="l00357" name="l00357"></a><span class="lineno"> 357</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqBal, authAmt, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()));</div>
<div class="line"><a id="l00358" name="l00358"></a><span class="lineno"> 358</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00359" name="l00359"></a><span class="lineno"> 359</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00360" name="l00360"></a><span class="lineno"> 360</span> BEAST_EXPECT(env.balance(bob) == preBob - feeDrops);</div>
<div class="line"><a id="l00361" name="l00361"></a><span class="lineno"> 361</span> BEAST_EXPECT(env.balance(alice) == preAlice + channelFunds);</div>
<div class="line"><a id="l00362" name="l00362"></a><span class="lineno"> 362</span> }</div>
<div class="line"><a id="l00363" name="l00363"></a><span class="lineno"> 363</span> }</div>
<div class="line"><a id="l00364" name="l00364"></a><span class="lineno"> 364</span> {</div>
<div class="line"><a id="l00365" name="l00365"></a><span class="lineno"> 365</span> <span class="comment">// Third party can close after cancel after</span></div>
<div class="line"><a id="l00366" name="l00366"></a><span class="lineno"> 366</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00367" name="l00367"></a><span class="lineno"> 367</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, carol);</div>
<div class="line"><a id="l00368" name="l00368"></a><span class="lineno"> 368</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00369" name="l00369"></a><span class="lineno"> 369</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l00370" name="l00370"></a><span class="lineno"> 370</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a> <span class="keyword">const</span> cancelAfter =</div>
<div class="line"><a id="l00371" name="l00371"></a><span class="lineno"> 371</span> env.current()-&gt;info().parentCloseTime + 3600s;</div>
<div class="line"><a id="l00372" name="l00372"></a><span class="lineno"> 372</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l00373" name="l00373"></a><span class="lineno"> 373</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00374" name="l00374"></a><span class="lineno"> 374</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk, cancelAfter));</div>
<div class="line"><a id="l00375" name="l00375"></a><span class="lineno"> 375</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00376" name="l00376"></a><span class="lineno"> 376</span> <span class="comment">// third party close before cancelAfter</span></div>
<div class="line"><a id="l00377" name="l00377"></a><span class="lineno"> 377</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(carol, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00378" name="l00378"></a><span class="lineno"> 378</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00379" name="l00379"></a><span class="lineno"> 379</span> env.close(cancelAfter);</div>
<div class="line"><a id="l00380" name="l00380"></a><span class="lineno"> 380</span> <span class="comment">// third party close after cancelAfter</span></div>
<div class="line"><a id="l00381" name="l00381"></a><span class="lineno"> 381</span> <span class="keyword">auto</span> <span class="keyword">const</span> preAlice = env.balance(alice);</div>
<div class="line"><a id="l00382" name="l00382"></a><span class="lineno"> 382</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(carol, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l00383" name="l00383"></a><span class="lineno"> 383</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00384" name="l00384"></a><span class="lineno"> 384</span> BEAST_EXPECT(env.balance(alice) == preAlice + channelFunds);</div>
<div class="line"><a id="l00385" name="l00385"></a><span class="lineno"> 385</span> }</div>
<div class="line"><a id="l00386" name="l00386"></a><span class="lineno"> 386</span> <span class="comment">// fixPayChanCancelAfter</span></div>
<div class="line"><a id="l00387" name="l00387"></a><span class="lineno"> 387</span> <span class="comment">// CancelAfter should be greater than close time</span></div>
<div class="line"><a id="l00388" name="l00388"></a><span class="lineno"> 388</span> {</div>
<div class="line"><a id="l00389" name="l00389"></a><span class="lineno"> 389</span> <span class="keywordflow">for</span> (<span class="keywordtype">bool</span> <span class="keyword">const</span> withFixPayChan : {<span class="keyword">true</span>, <span class="keyword">false</span>})</div>
<div class="line"><a id="l00390" name="l00390"></a><span class="lineno"> 390</span> {</div>
<div class="line"><a id="l00391" name="l00391"></a><span class="lineno"> 391</span> <span class="keyword">auto</span> <span class="keyword">const</span> amend = withFixPayChan</div>
<div class="line"><a id="l00392" name="l00392"></a><span class="lineno"> 392</span> ? features</div>
<div class="line"><a id="l00393" name="l00393"></a><span class="lineno"> 393</span> : features - fixPayChanCancelAfter;</div>
<div class="line"><a id="l00394" name="l00394"></a><span class="lineno"> 394</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, amend};</div>
<div class="line"><a id="l00395" name="l00395"></a><span class="lineno"> 395</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">fund</a>(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00396" name="l00396"></a><span class="lineno"> 396</span> env.close();</div>
<div class="line"><a id="l00397" name="l00397"></a><span class="lineno"> 397</span> </div>
<div class="line"><a id="l00398" name="l00398"></a><span class="lineno"> 398</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00399" name="l00399"></a><span class="lineno"> 399</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l00400" name="l00400"></a><span class="lineno"> 400</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l00401" name="l00401"></a><span class="lineno"> 401</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a> <span class="keyword">const</span> cancelAfter =</div>
<div class="line"><a id="l00402" name="l00402"></a><span class="lineno"> 402</span> env.current()-&gt;info().parentCloseTime - 1s;</div>
<div class="line"><a id="l00403" name="l00403"></a><span class="lineno"> 403</span> <span class="keyword">auto</span> <span class="keyword">const</span> txResult =</div>
<div class="line"><a id="l00404" name="l00404"></a><span class="lineno"> 404</span> withFixPayChan ? <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc">tecEXPIRED</a>) : <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>);</div>
<div class="line"><a id="l00405" name="l00405"></a><span class="lineno"> 405</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(</div>
<div class="line"><a id="l00406" name="l00406"></a><span class="lineno"> 406</span> alice, bob, channelFunds, settleDelay, pk, cancelAfter),</div>
<div class="line"><a id="l00407" name="l00407"></a><span class="lineno"> 407</span> txResult);</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> }</div>
<div class="line"><a id="l00410" name="l00410"></a><span class="lineno"> 410</span> <span class="comment">// fixPayChanCancelAfter</span></div>
<div class="line"><a id="l00411" name="l00411"></a><span class="lineno"> 411</span> <span class="comment">// CancelAfter can be equal to the close time</span></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="keywordflow">for</span> (<span class="keywordtype">bool</span> <span class="keyword">const</span> withFixPayChan : {<span class="keyword">true</span>, <span class="keyword">false</span>})</div>
<div class="line"><a id="l00414" name="l00414"></a><span class="lineno"> 414</span> {</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> amend = withFixPayChan</div>
<div class="line"><a id="l00416" name="l00416"></a><span class="lineno"> 416</span> ? features</div>
<div class="line"><a id="l00417" name="l00417"></a><span class="lineno"> 417</span> : features - fixPayChanCancelAfter;</div>
<div class="line"><a id="l00418" name="l00418"></a><span class="lineno"> 418</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, amend};</div>
<div class="line"><a id="l00419" name="l00419"></a><span class="lineno"> 419</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">fund</a>(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00420" name="l00420"></a><span class="lineno"> 420</span> env.close();</div>
<div class="line"><a id="l00421" name="l00421"></a><span class="lineno"> 421</span> </div>
<div class="line"><a id="l00422" name="l00422"></a><span class="lineno"> 422</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00423" name="l00423"></a><span class="lineno"> 423</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l00424" name="l00424"></a><span class="lineno"> 424</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l00425" name="l00425"></a><span class="lineno"> 425</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a> <span class="keyword">const</span> cancelAfter =</div>
<div class="line"><a id="l00426" name="l00426"></a><span class="lineno"> 426</span> env.current()-&gt;info().parentCloseTime;</div>
<div class="line"><a id="l00427" name="l00427"></a><span class="lineno"> 427</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(</div>
<div class="line"><a id="l00428" name="l00428"></a><span class="lineno"> 428</span> alice, bob, channelFunds, settleDelay, pk, cancelAfter),</div>
<div class="line"><a id="l00429" name="l00429"></a><span class="lineno"> 429</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>));</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> }</div>
<div class="line"><a id="l00432" name="l00432"></a><span class="lineno"> 432</span> }</div>
</div>
<div class="line"><a id="l00433" name="l00433"></a><span class="lineno"> 433</span> </div>
<div class="line"><a id="l00434" name="l00434"></a><span class="lineno"> 434</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00435" data-start="{" data-end="}">
<div class="line"><a id="l00435" name="l00435"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a843c2ff4e53987579c7a3512b50f31c6"> 435</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a843c2ff4e53987579c7a3512b50f31c6">testExpiration</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l00436" name="l00436"></a><span class="lineno"> 436</span> {</div>
<div class="line"><a id="l00437" name="l00437"></a><span class="lineno"> 437</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;expiration&quot;</span>);</div>
<div class="line"><a id="l00438" name="l00438"></a><span class="lineno"> 438</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00439" name="l00439"></a><span class="lineno"> 439</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00440" name="l00440"></a><span class="lineno"> 440</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00441" name="l00441"></a><span class="lineno"> 441</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00442" name="l00442"></a><span class="lineno"> 442</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00443" name="l00443"></a><span class="lineno"> 443</span> <span class="keyword">auto</span> <span class="keyword">const</span> carol = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;carol&quot;</span>);</div>
<div class="line"><a id="l00444" name="l00444"></a><span class="lineno"> 444</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, carol);</div>
<div class="line"><a id="l00445" name="l00445"></a><span class="lineno"> 445</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00446" name="l00446"></a><span class="lineno"> 446</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l00447" name="l00447"></a><span class="lineno"> 447</span> <span class="keyword">auto</span> <span class="keyword">const</span> closeTime = env.current()-&gt;info().parentCloseTime;</div>
<div class="line"><a id="l00448" name="l00448"></a><span class="lineno"> 448</span> <span class="keyword">auto</span> <span class="keyword">const</span> minExpiration = closeTime + settleDelay;</div>
<div class="line"><a id="l00449" name="l00449"></a><span class="lineno"> 449</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a> <span class="keyword">const</span> cancelAfter = closeTime + 7200s;</div>
<div class="line"><a id="l00450" name="l00450"></a><span class="lineno"> 450</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l00451" name="l00451"></a><span class="lineno"> 451</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00452" name="l00452"></a><span class="lineno"> 452</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk, cancelAfter));</div>
<div class="line"><a id="l00453" name="l00453"></a><span class="lineno"> 453</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00454" name="l00454"></a><span class="lineno"> 454</span> BEAST_EXPECT(!<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">channelExpiration</a>(*env.current(), chan));</div>
<div class="line"><a id="l00455" name="l00455"></a><span class="lineno"> 455</span> <span class="comment">// Owner closes, will close after settleDelay</span></div>
<div class="line"><a id="l00456" name="l00456"></a><span class="lineno"> 456</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l00457" name="l00457"></a><span class="lineno"> 457</span> <span class="keyword">auto</span> counts = [](<span class="keyword">auto</span> <span class="keyword">const</span>&amp; t) {</div>
<div class="line"><a id="l00458" name="l00458"></a><span class="lineno"> 458</span> <span class="keywordflow">return</span> t.time_since_epoch().count();</div>
<div class="line"><a id="l00459" name="l00459"></a><span class="lineno"> 459</span> };</div>
<div class="line"><a id="l00460" name="l00460"></a><span class="lineno"> 460</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00461" name="l00461"></a><span class="lineno"> 461</span> *<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">channelExpiration</a>(*env.current(), chan) == counts(minExpiration));</div>
<div class="line"><a id="l00462" name="l00462"></a><span class="lineno"> 462</span> <span class="comment">// increase the expiration time</span></div>
<div class="line"><a id="l00463" name="l00463"></a><span class="lineno"> 463</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(</div>
<div class="line"><a id="l00464" name="l00464"></a><span class="lineno"> 464</span> alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1), <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a>{minExpiration + 100s}));</div>
<div class="line"><a id="l00465" name="l00465"></a><span class="lineno"> 465</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00466" name="l00466"></a><span class="lineno"> 466</span> *<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">channelExpiration</a>(*env.current(), chan) ==</div>
<div class="line"><a id="l00467" name="l00467"></a><span class="lineno"> 467</span> counts(minExpiration) + 100);</div>
<div class="line"><a id="l00468" name="l00468"></a><span class="lineno"> 468</span> <span class="comment">// decrease the expiration, but still above minExpiration</span></div>
<div class="line"><a id="l00469" name="l00469"></a><span class="lineno"> 469</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(</div>
<div class="line"><a id="l00470" name="l00470"></a><span class="lineno"> 470</span> alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1), <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a>{minExpiration + 50s}));</div>
<div class="line"><a id="l00471" name="l00471"></a><span class="lineno"> 471</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00472" name="l00472"></a><span class="lineno"> 472</span> *<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">channelExpiration</a>(*env.current(), chan) ==</div>
<div class="line"><a id="l00473" name="l00473"></a><span class="lineno"> 473</span> counts(minExpiration) + 50);</div>
<div class="line"><a id="l00474" name="l00474"></a><span class="lineno"> 474</span> <span class="comment">// decrease the expiration below minExpiration</span></div>
<div class="line"><a id="l00475" name="l00475"></a><span class="lineno"> 475</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(</div>
<div class="line"><a id="l00476" name="l00476"></a><span class="lineno"> 476</span> alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1), <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a>{minExpiration - 50s}),</div>
<div class="line"><a id="l00477" name="l00477"></a><span class="lineno"> 477</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a8845e05d481141ea5e8e5274796f45a7">temBAD_EXPIRATION</a>));</div>
<div class="line"><a id="l00478" name="l00478"></a><span class="lineno"> 478</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00479" name="l00479"></a><span class="lineno"> 479</span> *<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">channelExpiration</a>(*env.current(), chan) ==</div>
<div class="line"><a id="l00480" name="l00480"></a><span class="lineno"> 480</span> counts(minExpiration) + 50);</div>
<div class="line"><a id="l00481" name="l00481"></a><span class="lineno"> 481</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#a31fd00b390dff8213a5cfe14d00e4045">tfRenew</a>), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00482" name="l00482"></a><span class="lineno"> 482</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00483" name="l00483"></a><span class="lineno"> 483</span> *<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">channelExpiration</a>(*env.current(), chan) ==</div>
<div class="line"><a id="l00484" name="l00484"></a><span class="lineno"> 484</span> counts(minExpiration) + 50);</div>
<div class="line"><a id="l00485" name="l00485"></a><span class="lineno"> 485</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#a31fd00b390dff8213a5cfe14d00e4045">tfRenew</a>));</div>
<div class="line"><a id="l00486" name="l00486"></a><span class="lineno"> 486</span> BEAST_EXPECT(!<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">channelExpiration</a>(*env.current(), chan));</div>
<div class="line"><a id="l00487" name="l00487"></a><span class="lineno"> 487</span> <span class="comment">// decrease the expiration below minExpiration</span></div>
<div class="line"><a id="l00488" name="l00488"></a><span class="lineno"> 488</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(</div>
<div class="line"><a id="l00489" name="l00489"></a><span class="lineno"> 489</span> alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1), <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a>{minExpiration - 50s}),</div>
<div class="line"><a id="l00490" name="l00490"></a><span class="lineno"> 490</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a8845e05d481141ea5e8e5274796f45a7">temBAD_EXPIRATION</a>));</div>
<div class="line"><a id="l00491" name="l00491"></a><span class="lineno"> 491</span> BEAST_EXPECT(!<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">channelExpiration</a>(*env.current(), chan));</div>
<div class="line"><a id="l00492" name="l00492"></a><span class="lineno"> 492</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1), <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a>{minExpiration}));</div>
<div class="line"><a id="l00493" name="l00493"></a><span class="lineno"> 493</span> env.close(minExpiration);</div>
<div class="line"><a id="l00494" name="l00494"></a><span class="lineno"> 494</span> <span class="comment">// Try to extend the expiration after the expiration has already passed</span></div>
<div class="line"><a id="l00495" name="l00495"></a><span class="lineno"> 495</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(</div>
<div class="line"><a id="l00496" name="l00496"></a><span class="lineno"> 496</span> alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1), <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a>{minExpiration + 1000s}));</div>
<div class="line"><a id="l00497" name="l00497"></a><span class="lineno"> 497</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00498" name="l00498"></a><span class="lineno"> 498</span> }</div>
</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> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00501" data-start="{" data-end="}">
<div class="line"><a id="l00501" name="l00501"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a49fef34665b30b3240648aeb41f0f790"> 501</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a49fef34665b30b3240648aeb41f0f790">testSettleDelay</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l00502" name="l00502"></a><span class="lineno"> 502</span> {</div>
<div class="line"><a id="l00503" name="l00503"></a><span class="lineno"> 503</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;settle delay&quot;</span>);</div>
<div class="line"><a id="l00504" name="l00504"></a><span class="lineno"> 504</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00505" name="l00505"></a><span class="lineno"> 505</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00506" name="l00506"></a><span class="lineno"> 506</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00507" name="l00507"></a><span class="lineno"> 507</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00508" name="l00508"></a><span class="lineno"> 508</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00509" name="l00509"></a><span class="lineno"> 509</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00510" name="l00510"></a><span class="lineno"> 510</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00511" name="l00511"></a><span class="lineno"> 511</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l00512" name="l00512"></a><span class="lineno"> 512</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/chrono/time_point.html">NetClock::time_point</a> <span class="keyword">const</span> settleTimepoint =</div>
<div class="line"><a id="l00513" name="l00513"></a><span class="lineno"> 513</span> env.current()-&gt;info().parentCloseTime + settleDelay;</div>
<div class="line"><a id="l00514" name="l00514"></a><span class="lineno"> 514</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="comment">// Owner closes, will close after settleDelay</span></div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> env.close(settleTimepoint - settleDelay / 2);</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="comment">// receiver can still claim</span></div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> <span class="keyword">auto</span> <span class="keyword">const</span> chanBal = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan);</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <span class="keyword">auto</span> <span class="keyword">const</span> chanAmt = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan);</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keyword">auto</span> preBob = env.balance(bob);</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> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l00529" name="l00529"></a><span class="lineno"> 529</span> <span class="keyword">auto</span> <span class="keyword">const</span> authAmt = reqBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100);</div>
<div class="line"><a id="l00530" name="l00530"></a><span class="lineno"> 530</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l00531" name="l00531"></a><span class="lineno"> 531</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> =</div>
<div class="line"><a id="l00532" name="l00532"></a><span class="lineno"> 532</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, authAmt);</div>
<div class="line"><a id="l00533" name="l00533"></a><span class="lineno"> 533</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqBal, authAmt, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()));</div>
<div class="line"><a id="l00534" name="l00534"></a><span class="lineno"> 534</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == reqBal);</div>
<div class="line"><a id="l00535" name="l00535"></a><span class="lineno"> 535</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l00536" name="l00536"></a><span class="lineno"> 536</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00537" name="l00537"></a><span class="lineno"> 537</span> BEAST_EXPECT(env.balance(bob) == preBob + delta - feeDrops);</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"> 539</span> env.close(settleTimepoint);</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">// past settleTime, channel will close</span></div>
<div class="line"><a id="l00542" name="l00542"></a><span class="lineno"> 542</span> <span class="keyword">auto</span> <span class="keyword">const</span> chanBal = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan);</div>
<div class="line"><a id="l00543" name="l00543"></a><span class="lineno"> 543</span> <span class="keyword">auto</span> <span class="keyword">const</span> chanAmt = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan);</div>
<div class="line"><a id="l00544" name="l00544"></a><span class="lineno"> 544</span> <span class="keyword">auto</span> <span class="keyword">const</span> preAlice = env.balance(alice);</div>
<div class="line"><a id="l00545" name="l00545"></a><span class="lineno"> 545</span> <span class="keyword">auto</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00546" name="l00546"></a><span class="lineno"> 546</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l00547" name="l00547"></a><span class="lineno"> 547</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l00548" name="l00548"></a><span class="lineno"> 548</span> <span class="keyword">auto</span> <span class="keyword">const</span> authAmt = reqBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100);</div>
<div class="line"><a id="l00549" name="l00549"></a><span class="lineno"> 549</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l00550" name="l00550"></a><span class="lineno"> 550</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> =</div>
<div class="line"><a id="l00551" name="l00551"></a><span class="lineno"> 551</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, authAmt);</div>
<div class="line"><a id="l00552" name="l00552"></a><span class="lineno"> 552</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqBal, authAmt, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()));</div>
<div class="line"><a id="l00553" name="l00553"></a><span class="lineno"> 553</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00554" name="l00554"></a><span class="lineno"> 554</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00555" name="l00555"></a><span class="lineno"> 555</span> BEAST_EXPECT(env.balance(alice) == preAlice + chanAmt - chanBal);</div>
<div class="line"><a id="l00556" name="l00556"></a><span class="lineno"> 556</span> BEAST_EXPECT(env.balance(bob) == preBob - feeDrops);</div>
<div class="line"><a id="l00557" name="l00557"></a><span class="lineno"> 557</span> }</div>
<div class="line"><a id="l00558" name="l00558"></a><span class="lineno"> 558</span> }</div>
</div>
<div class="line"><a id="l00559" name="l00559"></a><span class="lineno"> 559</span> </div>
<div class="line"><a id="l00560" name="l00560"></a><span class="lineno"> 560</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00561" data-start="{" data-end="}">
<div class="line"><a id="l00561" name="l00561"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a77a54509f9b7fc3d1183684d4372231e"> 561</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a77a54509f9b7fc3d1183684d4372231e">testCloseDry</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l00562" name="l00562"></a><span class="lineno"> 562</span> {</div>
<div class="line"><a id="l00563" name="l00563"></a><span class="lineno"> 563</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;close dry&quot;</span>);</div>
<div class="line"><a id="l00564" name="l00564"></a><span class="lineno"> 564</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00565" name="l00565"></a><span class="lineno"> 565</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00566" name="l00566"></a><span class="lineno"> 566</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00567" name="l00567"></a><span class="lineno"> 567</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00568" name="l00568"></a><span class="lineno"> 568</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00569" name="l00569"></a><span class="lineno"> 569</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00570" name="l00570"></a><span class="lineno"> 570</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00571" name="l00571"></a><span class="lineno"> 571</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l00572" name="l00572"></a><span class="lineno"> 572</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l00573" name="l00573"></a><span class="lineno"> 573</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00574" name="l00574"></a><span class="lineno"> 574</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l00575" name="l00575"></a><span class="lineno"> 575</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00576" name="l00576"></a><span class="lineno"> 576</span> <span class="comment">// Owner tries to close channel, but it will remain open (settle delay)</span></div>
<div class="line"><a id="l00577" name="l00577"></a><span class="lineno"> 577</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l00578" name="l00578"></a><span class="lineno"> 578</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</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> <span class="comment">// claim the entire amount</span></div>
<div class="line"><a id="l00581" name="l00581"></a><span class="lineno"> 581</span> <span class="keyword">auto</span> <span class="keyword">const</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00582" name="l00582"></a><span class="lineno"> 582</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, channelFunds.value(), channelFunds.value()));</div>
<div class="line"><a id="l00583" name="l00583"></a><span class="lineno"> 583</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == channelFunds);</div>
<div class="line"><a id="l00584" name="l00584"></a><span class="lineno"> 584</span> BEAST_EXPECT(env.balance(bob) == preBob + channelFunds);</div>
<div class="line"><a id="l00585" name="l00585"></a><span class="lineno"> 585</span> }</div>
<div class="line"><a id="l00586" name="l00586"></a><span class="lineno"> 586</span> <span class="keyword">auto</span> <span class="keyword">const</span> preAlice = env.balance(alice);</div>
<div class="line"><a id="l00587" name="l00587"></a><span class="lineno"> 587</span> <span class="comment">// Channel is now dry, can close before expiration date</span></div>
<div class="line"><a id="l00588" name="l00588"></a><span class="lineno"> 588</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l00589" name="l00589"></a><span class="lineno"> 589</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00590" name="l00590"></a><span class="lineno"> 590</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00591" name="l00591"></a><span class="lineno"> 591</span> BEAST_EXPECT(env.balance(alice) == preAlice - feeDrops);</div>
<div class="line"><a id="l00592" name="l00592"></a><span class="lineno"> 592</span> }</div>
</div>
<div class="line"><a id="l00593" name="l00593"></a><span class="lineno"> 593</span> </div>
<div class="line"><a id="l00594" name="l00594"></a><span class="lineno"> 594</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00595" data-start="{" data-end="}">
<div class="line"><a id="l00595" name="l00595"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a8cb2af1277398d162b9c793a0946af29"> 595</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a8cb2af1277398d162b9c793a0946af29">testDefaultAmount</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l00596" name="l00596"></a><span class="lineno"> 596</span> {</div>
<div class="line"><a id="l00597" name="l00597"></a><span class="lineno"> 597</span> <span class="comment">// auth amount defaults to balance if not present</span></div>
<div class="line"><a id="l00598" name="l00598"></a><span class="lineno"> 598</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;default amount&quot;</span>);</div>
<div class="line"><a id="l00599" name="l00599"></a><span class="lineno"> 599</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00600" name="l00600"></a><span class="lineno"> 600</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00601" name="l00601"></a><span class="lineno"> 601</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00602" name="l00602"></a><span class="lineno"> 602</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00603" name="l00603"></a><span class="lineno"> 603</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00604" name="l00604"></a><span class="lineno"> 604</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00605" name="l00605"></a><span class="lineno"> 605</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l00606" name="l00606"></a><span class="lineno"> 606</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l00607" name="l00607"></a><span class="lineno"> 607</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l00608" name="l00608"></a><span class="lineno"> 608</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00609" name="l00609"></a><span class="lineno"> 609</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l00610" name="l00610"></a><span class="lineno"> 610</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00611" name="l00611"></a><span class="lineno"> 611</span> <span class="comment">// Owner tries to close channel, but it will remain open (settle delay)</span></div>
<div class="line"><a id="l00612" name="l00612"></a><span class="lineno"> 612</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l00613" name="l00613"></a><span class="lineno"> 613</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00614" name="l00614"></a><span class="lineno"> 614</span> {</div>
<div class="line"><a id="l00615" name="l00615"></a><span class="lineno"> 615</span> <span class="keyword">auto</span> chanBal = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan);</div>
<div class="line"><a id="l00616" name="l00616"></a><span class="lineno"> 616</span> <span class="keyword">auto</span> chanAmt = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan);</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> preBob = env.balance(bob);</div>
<div class="line"><a id="l00618" name="l00618"></a><span class="lineno"> 618</span> </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> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l00620" name="l00620"></a><span class="lineno"> 620</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l00621" name="l00621"></a><span class="lineno"> 621</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l00622" name="l00622"></a><span class="lineno"> 622</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> =</div>
<div class="line"><a id="l00623" name="l00623"></a><span class="lineno"> 623</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, reqBal);</div>
<div class="line"><a id="l00624" name="l00624"></a><span class="lineno"> 624</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqBal, <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()));</div>
<div class="line"><a id="l00625" name="l00625"></a><span class="lineno"> 625</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == reqBal);</div>
<div class="line"><a id="l00626" name="l00626"></a><span class="lineno"> 626</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00627" name="l00627"></a><span class="lineno"> 627</span> BEAST_EXPECT(env.balance(bob) == preBob + delta - feeDrops);</div>
<div class="line"><a id="l00628" name="l00628"></a><span class="lineno"> 628</span> chanBal = reqBal;</div>
<div class="line"><a id="l00629" name="l00629"></a><span class="lineno"> 629</span> }</div>
<div class="line"><a id="l00630" name="l00630"></a><span class="lineno"> 630</span> {</div>
<div class="line"><a id="l00631" name="l00631"></a><span class="lineno"> 631</span> <span class="comment">// Claim again</span></div>
<div class="line"><a id="l00632" name="l00632"></a><span class="lineno"> 632</span> <span class="keyword">auto</span> chanBal = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan);</div>
<div class="line"><a id="l00633" name="l00633"></a><span class="lineno"> 633</span> <span class="keyword">auto</span> chanAmt = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan);</div>
<div class="line"><a id="l00634" name="l00634"></a><span class="lineno"> 634</span> <span class="keyword">auto</span> <span class="keyword">const</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00635" name="l00635"></a><span class="lineno"> 635</span> </div>
<div class="line"><a id="l00636" name="l00636"></a><span class="lineno"> 636</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l00637" name="l00637"></a><span class="lineno"> 637</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l00638" name="l00638"></a><span class="lineno"> 638</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l00639" name="l00639"></a><span class="lineno"> 639</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> =</div>
<div class="line"><a id="l00640" name="l00640"></a><span class="lineno"> 640</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, reqBal);</div>
<div class="line"><a id="l00641" name="l00641"></a><span class="lineno"> 641</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqBal, <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()));</div>
<div class="line"><a id="l00642" name="l00642"></a><span class="lineno"> 642</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == reqBal);</div>
<div class="line"><a id="l00643" name="l00643"></a><span class="lineno"> 643</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00644" name="l00644"></a><span class="lineno"> 644</span> BEAST_EXPECT(env.balance(bob) == preBob + delta - feeDrops);</div>
<div class="line"><a id="l00645" name="l00645"></a><span class="lineno"> 645</span> chanBal = reqBal;</div>
<div class="line"><a id="l00646" name="l00646"></a><span class="lineno"> 646</span> }</div>
<div class="line"><a id="l00647" name="l00647"></a><span class="lineno"> 647</span> }</div>
</div>
<div class="line"><a id="l00648" name="l00648"></a><span class="lineno"> 648</span> </div>
<div class="line"><a id="l00649" name="l00649"></a><span class="lineno"> 649</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00650" data-start="{" data-end="}">
<div class="line"><a id="l00650" name="l00650"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a4e1c070df9e0c7a9f1b302c21c1443df"> 650</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a4e1c070df9e0c7a9f1b302c21c1443df">testDisallowXRP</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l00651" name="l00651"></a><span class="lineno"> 651</span> {</div>
<div class="line"><a id="l00652" name="l00652"></a><span class="lineno"> 652</span> <span class="comment">// auth amount defaults to balance if not present</span></div>
<div class="line"><a id="l00653" name="l00653"></a><span class="lineno"> 653</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Disallow XRP&quot;</span>);</div>
<div class="line"><a id="l00654" name="l00654"></a><span class="lineno"> 654</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00655" name="l00655"></a><span class="lineno"> 655</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00656" name="l00656"></a><span class="lineno"> 656</span> </div>
<div class="line"><a id="l00657" name="l00657"></a><span class="lineno"> 657</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00658" name="l00658"></a><span class="lineno"> 658</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00659" name="l00659"></a><span class="lineno"> 659</span> {</div>
<div class="line"><a id="l00660" name="l00660"></a><span class="lineno"> 660</span> <span class="comment">// Create a channel where dst disallows XRP. Ignore that flag,</span></div>
<div class="line"><a id="l00661" name="l00661"></a><span class="lineno"> 661</span> <span class="comment">// since it&#39;s just advisory.</span></div>
<div class="line"><a id="l00662" name="l00662"></a><span class="lineno"> 662</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00663" name="l00663"></a><span class="lineno"> 663</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00664" name="l00664"></a><span class="lineno"> 664</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(bob, <a class="code hl_variable" href="namespaceripple.html#af9cd2b389ce115ba9d17fbd557aca94d">asfDisallowXRP</a>));</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> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00666" name="l00666"></a><span class="lineno"> 666</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), 3600s, alice.pk()));</div>
<div class="line"><a id="l00667" name="l00667"></a><span class="lineno"> 667</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00668" name="l00668"></a><span class="lineno"> 668</span> }</div>
<div class="line"><a id="l00669" name="l00669"></a><span class="lineno"> 669</span> </div>
<div class="line"><a id="l00670" name="l00670"></a><span class="lineno"> 670</span> {</div>
<div class="line"><a id="l00671" name="l00671"></a><span class="lineno"> 671</span> <span class="comment">// Claim to a channel where dst disallows XRP (channel is</span></div>
<div class="line"><a id="l00672" name="l00672"></a><span class="lineno"> 672</span> <span class="comment">// created before disallow xrp is set). Ignore that flag</span></div>
<div class="line"><a id="l00673" name="l00673"></a><span class="lineno"> 673</span> <span class="comment">// since it is just advisory.</span></div>
<div class="line"><a id="l00674" name="l00674"></a><span class="lineno"> 674</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00675" name="l00675"></a><span class="lineno"> 675</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00676" name="l00676"></a><span class="lineno"> 676</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00677" name="l00677"></a><span class="lineno"> 677</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), 3600s, alice.pk()));</div>
<div class="line"><a id="l00678" name="l00678"></a><span class="lineno"> 678</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00679" name="l00679"></a><span class="lineno"> 679</span> </div>
<div class="line"><a id="l00680" name="l00680"></a><span class="lineno"> 680</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(bob, <a class="code hl_variable" href="namespaceripple.html#af9cd2b389ce115ba9d17fbd557aca94d">asfDisallowXRP</a>));</div>
<div class="line"><a id="l00681" name="l00681"></a><span class="lineno"> 681</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500).value();</div>
<div class="line"><a id="l00682" name="l00682"></a><span class="lineno"> 682</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, reqBal, reqBal));</div>
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> }</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span> }</div>
</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> </div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00687" data-start="{" data-end="}">
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#add9ad0ee74cb4cb8ab99868001968467"> 687</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#add9ad0ee74cb4cb8ab99868001968467">testDstTag</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</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="comment">// auth amount defaults to balance if not present</span></div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Dst Tag&quot;</span>);</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <span class="comment">// Create a channel where dst disallows XRP</span></div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(bob, <a class="code hl_variable" href="namespaceripple.html#a2e3220cb8c660141f5300a9e38841295">asfRequireDest</a>));</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> pk = alice.pk();</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> {</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk),</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caa3ac7c997274040539a497cadc280b22">tecDST_TAG_NEEDED</a>));</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</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> {</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> alice, bob, channelFunds, settleDelay, pk, <a class="code hl_variableRef" href="http://en.cppreference.com/w/cpp/types/is_same.html">std::nullopt</a>, 1));</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> }</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> }</div>
</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> </div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00717" data-start="{" data-end="}">
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a6a54d5d43c8b45e426af8ed678db55a7"> 717</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6a54d5d43c8b45e426af8ed678db55a7">testDepositAuth</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> {</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Deposit Authorization&quot;</span>);</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> </div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> <span class="keyword">auto</span> <span class="keyword">const</span> carol = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;carol&quot;</span>);</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <span class="keyword">auto</span> USDA = alice[<span class="stringliteral">&quot;USD&quot;</span>];</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> {</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, carol);</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> </div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(bob, <a class="code hl_variable" href="namespaceripple.html#a1d8ec9af2fd805d04e032c52f6968211">asfDepositAuth</a>));</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> env.close();</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</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> pk = alice.pk();</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk));</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> env.close();</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> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(0));</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000));</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> </div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="comment">// alice can add more funds to the channel even though bob has</span></div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> <span class="comment">// asfDepositAuth set.</span></div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)));</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> env.close();</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> </div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <span class="comment">// alice claims. Fails because bob&#39;s lsfDepositAuth flag is set.</span></div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500).value(), <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500).value()),</div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> env.close();</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> </div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="comment">// Claim with signature</span></div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <span class="keyword">auto</span> <span class="keyword">const</span> baseFee = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <span class="keyword">auto</span> <span class="keyword">const</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> {</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500).value();</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(pk, alice.sk(), chan, delta);</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> </div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <span class="comment">// alice claims with signature. Fails since bob has</span></div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> <span class="comment">// lsfDepositAuth flag set.</span></div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), pk),</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> env.close();</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> BEAST_EXPECT(env.balance(bob) == preBob);</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> </div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> <span class="comment">// bob claims but omits the signature. Fails because only</span></div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <span class="comment">// alice can claim without a signature.</span></div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, delta, delta), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46aecc18d207c14edd554462f82555e9d92">temBAD_SIGNATURE</a>));</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> env.close();</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> </div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <span class="comment">// bob claims with signature. Succeeds even though bob&#39;s</span></div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> <span class="comment">// lsfDepositAuth flag is set since bob submitted the</span></div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <span class="comment">// transaction.</span></div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, delta, delta, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), pk));</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> env.close();</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> BEAST_EXPECT(env.balance(bob) == preBob + delta - baseFee);</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> {</div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> <span class="comment">// Explore the limits of deposit preauthorization.</span></div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(600).value();</div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(pk, alice.sk(), chan, delta);</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> </div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="comment">// carol claims and fails. Only channel participants (bob or</span></div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> <span class="comment">// alice) may claim.</span></div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(carol, chan, delta, delta, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), pk),</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> env.close();</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> </div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> <span class="comment">// bob preauthorizes carol for deposit. But after that carol</span></div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <span class="comment">// still can&#39;t claim since only channel participants may claim.</span></div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1deposit.html#a662867f42cb3f468f2e8830fbd7e0d8a">deposit::auth</a>(bob, carol));</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> env.close();</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> </div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(carol, chan, delta, delta, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), pk),</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> </div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <span class="comment">// Since alice is not preauthorized she also may not claim</span></div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> <span class="comment">// for bob.</span></div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), pk),</div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> env.close();</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> </div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <span class="comment">// However if bob preauthorizes alice for deposit then she can</span></div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> <span class="comment">// successfully submit a claim.</span></div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1deposit.html#a662867f42cb3f468f2e8830fbd7e0d8a">deposit::auth</a>(bob, alice));</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> env.close();</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> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), pk));</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> env.close();</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> </div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> env.balance(bob) == preBob + delta - (3 * baseFee));</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> }</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> {</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> <span class="comment">// bob removes preauthorization of alice. Once again she</span></div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> <span class="comment">// cannot submit a claim.</span></div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(800).value();</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> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1deposit.html#a5e20a724bec47934d88c328af26c2541">deposit::unauth</a>(bob, alice));</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> env.close();</div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> </div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="comment">// alice claims and fails since she is no longer preauthorized.</span></div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> env.close();</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">// bob clears lsfDepositAuth. Now alice can claim.</span></div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a18cde110bb3ad7dce97ac11a4b251d0e">fclear</a>(bob, <a class="code hl_variable" href="namespaceripple.html#a1d8ec9af2fd805d04e032c52f6968211">asfDepositAuth</a>));</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> env.close();</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> </div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> <span class="comment">// alice claims successfully.</span></div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta));</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> env.close();</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> BEAST_EXPECT(</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> env.balance(bob) == preBob + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(800) - (5 * baseFee));</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> }</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> }</div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> }</div>
</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> </div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen00841" data-start="{" data-end="}">
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#ae170b51c47b860f66914e6a232974032"> 841</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae170b51c47b860f66914e6a232974032">testDepositAuthCreds</a>()</div>
<div class="line"><a id="l00842" name="l00842"></a><span class="lineno"> 842</span> {</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Deposit Authorization with Credentials&quot;</span>);</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</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="keywordtype">char</span> <span class="keyword">const</span> credType[] = <span class="stringliteral">&quot;abcde&quot;</span>;</div>
<div class="line"><a id="l00848" name="l00848"></a><span class="lineno"> 848</span> </div>
<div class="line"><a id="l00849" name="l00849"></a><span class="lineno"> 849</span> <a class="code hl_class" href="classripple_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="l00850" name="l00850"></a><span class="lineno"> 850</span> <a class="code hl_class" href="classripple_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="l00851" name="l00851"></a><span class="lineno"> 851</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> carol(<span class="stringliteral">&quot;carol&quot;</span>);</div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> dillon(<span class="stringliteral">&quot;dillon&quot;</span>);</div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"> 853</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> zelda(<span class="stringliteral">&quot;zelda&quot;</span>);</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> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>};</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">fund</a>(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, carol, dillon, zelda);</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> </div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Account.html#a079e39aea7b349047759b9dfc1df7a13">pk</a>();</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</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> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk));</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span> env.close();</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> </div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <span class="comment">// alice add funds to the channel</span></div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)));</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> env.close();</div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> </div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</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> credBadIdx =</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> <span class="stringliteral">&quot;D007AE4B6E1274B4AF872588267B810C2F82716726351D1C7D38D3E5499FC6&quot;</span></div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> <span class="stringliteral">&quot;E1&quot;</span>;</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> </div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500).value();</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> </div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> { <span class="comment">// create credentials</span></div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <span class="keyword">auto</span> jv = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#a0529a6b1613da8aa0c2a8964b1820ac9">credentials::create</a>(alice, carol, credType);</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">uint32_t</a> <span class="keyword">const</span> t = env.current()</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> -&gt;info()</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> .parentCloseTime.time_since_epoch()</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> .count() +</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> 100;</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> jv[sfExpiration.jsonName] = t;</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> env(jv);</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> env.close();</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> }</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> </div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> <span class="keyword">auto</span> <span class="keyword">const</span> jv =</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#ade27ecac76c7d1262720bd7f112cf28e">credentials::ledgerEntry</a>(env, alice, carol, credType);</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</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> credIdx = jv[jss::result][jss::index].asString();</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> </div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> <span class="comment">// Bob require preauthorization</span></div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(bob, <a class="code hl_variable" href="namespaceripple.html#a1d8ec9af2fd805d04e032c52f6968211">asfDepositAuth</a>));</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> env.close();</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> </div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> <span class="comment">// Fail, credentials not accepted</span></div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta),</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">credentials::ids</a>({credIdx}),</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca949bc4765f151a8866814dafbd8ea558">tecBAD_CREDENTIALS</a>));</div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> env.close();</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> </div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#a3c554c809a810395ee98a696ca447fb5">credentials::accept</a>(alice, carol, credType));</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> env.close();</div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> </div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> <span class="comment">// Fail, no depositPreauth object</span></div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta),</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">credentials::ids</a>({credIdx}),</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> env.close();</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> </div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> <span class="comment">// Setup deposit authorization</span></div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1deposit.html#ac0c24df5082c3715d3be7a4a7617b9d5">deposit::authCredentials</a>(bob, {{carol, credType}}));</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> env.close();</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> </div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <span class="comment">// Fail, credentials doesnt belong to root account</span></div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(dillon, chan, delta, delta),</div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">credentials::ids</a>({credIdx}),</div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca949bc4765f151a8866814dafbd8ea558">tecBAD_CREDENTIALS</a>));</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> </div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> <span class="comment">// Fails because bob&#39;s lsfDepositAuth flag is set.</span></div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> </div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> <span class="comment">// Fail, bad credentials index.</span></div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta),</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">credentials::ids</a>({credBadIdx}),</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca949bc4765f151a8866814dafbd8ea558">tecBAD_CREDENTIALS</a>));</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> </div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> <span class="comment">// Fail, empty credentials</span></div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta),</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">credentials::ids</a>({}),</div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">temMALFORMED</a>));</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> </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> <span class="comment">// claim fails cause of expired credentials</span></div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> </div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> <span class="comment">// Every cycle +10sec.</span></div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 10; ++i)</div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> env.close();</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="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta),</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">credentials::ids</a>({credIdx}),</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc">tecEXPIRED</a>));</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> env.close();</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> }</div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> </div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> { <span class="comment">// create credentials once more</span></div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#a0529a6b1613da8aa0c2a8964b1820ac9">credentials::create</a>(alice, carol, credType));</div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> env.close();</div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#a3c554c809a810395ee98a696ca447fb5">credentials::accept</a>(alice, carol, credType));</div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> env.close();</div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> </div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> <span class="keyword">auto</span> <span class="keyword">const</span> jv =</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#ade27ecac76c7d1262720bd7f112cf28e">credentials::ledgerEntry</a>(env, alice, carol, credType);</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</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> credIdx =</div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> jv[jss::result][jss::index].asString();</div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> </div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> <span class="comment">// Success</span></div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta),</div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">credentials::ids</a>({credIdx}));</div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> }</div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> }</div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> </div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> {</div>
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>};</div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">fund</a>(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, carol, dillon, zelda);</div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> </div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Account.html#a079e39aea7b349047759b9dfc1df7a13">pk</a>();</div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk));</div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> env.close();</div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> </div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> <span class="comment">// alice add funds to the channel</span></div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)));</div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> env.close();</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> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500).value();</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> { <span class="comment">// create credentials</span></div>
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#a0529a6b1613da8aa0c2a8964b1820ac9">credentials::create</a>(alice, carol, credType));</div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span> env.close();</div>
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#a3c554c809a810395ee98a696ca447fb5">credentials::accept</a>(alice, carol, credType));</div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> env.close();</div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> }</div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span> </div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> <span class="keyword">auto</span> <span class="keyword">const</span> jv =</div>
<div class="line"><a id="l00986" name="l00986"></a><span class="lineno"> 986</span> <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#ade27ecac76c7d1262720bd7f112cf28e">credentials::ledgerEntry</a>(env, alice, carol, credType);</div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</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> credIdx = jv[jss::result][jss::index].asString();</div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"> 988</span> </div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> <span class="comment">// Succeed, lsfDepositAuth is not set</span></div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, delta, delta), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">credentials::ids</a>({credIdx}));</div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> env.close();</div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> }</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> {</div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> <span class="comment">// Credentials amendment not enabled</span></div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a8e5379a68ca5b5ae718e77312c2f1f94">testable_amendments</a>() - featureCredentials);</div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">fund</a>(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(5000), <span class="stringliteral">&quot;alice&quot;</span>, <span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> </div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Account.html#a079e39aea7b349047759b9dfc1df7a13">pk</a>();</div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice));</div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk));</div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</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> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)));</div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</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> credIdx =</div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> <span class="stringliteral">&quot;48004829F915654A81B11C4AB8218D96FED67F209B58328A72314FB6EA288B&quot;</span></div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> <span class="stringliteral">&quot;E4&quot;</span>;</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="comment">// can&#39;t claim with old DepositPreauth because rule is not enabled.</span></div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">fset</a>(bob, <a class="code hl_variable" href="namespaceripple.html#a1d8ec9af2fd805d04e032c52f6968211">asfDepositAuth</a>));</div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1deposit.html#a662867f42cb3f468f2e8830fbd7e0d8a">deposit::auth</a>(bob, alice));</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> </div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500).value(), <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500).value()),</div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">credentials::ids</a>({credIdx}),</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46ac3482079467d517ea82aa9c8fa693d21">temDISABLED</a>));</div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> }</div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> }</div>
</div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> </div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01025" data-start="{" data-end="}">
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a238b7050b2283700eeed055b47e46076"> 1025</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a238b7050b2283700eeed055b47e46076">testMultiple</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> {</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> <span class="comment">// auth amount defaults to balance if not present</span></div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Multiple channels to the same account&quot;</span>);</div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"> 1033</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan1 = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l01040" name="l01040"></a><span class="lineno"> 1040</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan1));</div>
<div class="line"><a id="l01041" name="l01041"></a><span class="lineno"> 1041</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan2 = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l01042" name="l01042"></a><span class="lineno"> 1042</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l01043" name="l01043"></a><span class="lineno"> 1043</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan2));</div>
<div class="line"><a id="l01044" name="l01044"></a><span class="lineno"> 1044</span> BEAST_EXPECT(chan1 != chan2);</div>
<div class="line"><a id="l01045" name="l01045"></a><span class="lineno"> 1045</span> }</div>
</div>
<div class="line"><a id="l01046" name="l01046"></a><span class="lineno"> 1046</span> </div>
<div class="line"><a id="l01047" name="l01047"></a><span class="lineno"> 1047</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01048" data-start="{" data-end="}">
<div class="line"><a id="l01048" name="l01048"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a24d29e6a3e8a58acb1fd26200d392af9"> 1048</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a24d29e6a3e8a58acb1fd26200d392af9">testAccountChannelsRPC</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01049" name="l01049"></a><span class="lineno"> 1049</span> {</div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;AccountChannels RPC&quot;</span>);</div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"> 1051</span> </div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> <span class="keyword">auto</span> <span class="keyword">const</span> charlie = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;charlie&quot;</span>, <a class="code hl_enumvalue" href="namespaceripple.html#a9de744cfdefe1132969eb982e57e4ddea8183aa2c95dc1385c8f58bf1917fcb0b">KeyType::ed25519</a>);</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, charlie);</div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan1Str = <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice)));</div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> env.close();</div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> {</div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> <span class="comment">// test account non-string</span></div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> <span class="keyword">auto</span> testInvalidAccountParam = [&amp;](<span class="keyword">auto</span> <span class="keyword">const</span>&amp; param) {</div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> params;</div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> params[jss::account] = param;</div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> <span class="keyword">auto</span> jrr = env.rpc(</div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> <span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;account_channels&quot;</span>, <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(params))[jss::result];</div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> BEAST_EXPECT(jrr[jss::error] == <span class="stringliteral">&quot;invalidParams&quot;</span>);</div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> jrr[jss::error_message] == <span class="stringliteral">&quot;Invalid field &#39;account&#39;.&quot;</span>);</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> };</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> </div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> testInvalidAccountParam(1);</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> testInvalidAccountParam(1.1);</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> testInvalidAccountParam(<span class="keyword">true</span>);</div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> testInvalidAccountParam(<a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4ea7d9899633b4409bd3fc107e6737f8391">Json::nullValue</a>));</div>
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> testInvalidAccountParam(<a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>));</div>
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> testInvalidAccountParam(<a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a>(<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eadc8f264f36b55b063c78126b335415f4">Json::arrayValue</a>));</div>
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> }</div>
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> {</div>
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> <span class="keyword">auto</span> <span class="keyword">const</span> r =</div>
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, alice.human(), bob.human());</div>
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 1);</div>
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> r[jss::result][jss::channels][0u][jss::channel_id] == chan1Str);</div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> BEAST_EXPECT(r[jss::result][jss::validated]);</div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span> }</div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span> {</div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> <span class="keyword">auto</span> <span class="keyword">const</span> r = env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, alice.human());</div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 1);</div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> r[jss::result][jss::channels][0u][jss::channel_id] == chan1Str);</div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> BEAST_EXPECT(r[jss::result][jss::validated]);</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> }</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> {</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> <span class="keyword">auto</span> <span class="keyword">const</span> r =</div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, bob.human(), alice.human());</div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 0);</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> BEAST_EXPECT(r[jss::result][jss::validated]);</div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> }</div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan2Str = <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice)));</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> env.close();</div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> {</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> r =</div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, alice.human(), bob.human());</div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 2);</div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"> 1112</span> BEAST_EXPECT(r[jss::result][jss::validated]);</div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span> BEAST_EXPECT(chan1Str != chan2Str);</div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; c : {chan1Str, chan2Str})</div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> r[jss::result][jss::channels][0u][jss::channel_id] == c ||</div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span> r[jss::result][jss::channels][1u][jss::channel_id] == c);</div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span> }</div>
<div class="line"><a id="l01119" name="l01119"></a><span class="lineno"> 1119</span> }</div>
</div>
<div class="line"><a id="l01120" name="l01120"></a><span class="lineno"> 1120</span> </div>
<div class="line"><a id="l01121" name="l01121"></a><span class="lineno"> 1121</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01122" data-start="{" data-end="}">
<div class="line"><a id="l01122" name="l01122"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#ab1bfc03ce0a3e30847aebff34089d61c"> 1122</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ab1bfc03ce0a3e30847aebff34089d61c">testAccountChannelsRPCMarkers</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01123" name="l01123"></a><span class="lineno"> 1123</span> {</div>
<div class="line"><a id="l01124" name="l01124"></a><span class="lineno"> 1124</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Account channels RPC markers&quot;</span>);</div>
<div class="line"><a id="l01125" name="l01125"></a><span class="lineno"> 1125</span> </div>
<div class="line"><a id="l01126" name="l01126"></a><span class="lineno"> 1126</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l01127" name="l01127"></a><span class="lineno"> 1127</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals.html">std::literals</a>;</div>
<div class="line"><a id="l01128" name="l01128"></a><span class="lineno"> 1128</span> </div>
<div class="line"><a id="l01129" name="l01129"></a><span class="lineno"> 1129</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01130" name="l01130"></a><span class="lineno"> 1130</span> <span class="keyword">auto</span> <span class="keyword">const</span> bobs = []() -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;Account&gt;</a> {</div>
<div class="line"><a id="l01131" name="l01131"></a><span class="lineno"> 1131</span> <span class="keywordtype">int</span> <span class="keyword">const</span> n = 10;</div>
<div class="line"><a id="l01132" name="l01132"></a><span class="lineno"> 1132</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/vector.html">std::vector&lt;Account&gt;</a> r;</div>
<div class="line"><a id="l01133" name="l01133"></a><span class="lineno"> 1133</span> r.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">reserve</a>(n);</div>
<div class="line"><a id="l01134" name="l01134"></a><span class="lineno"> 1134</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; n; ++i)</div>
<div class="line"><a id="l01135" name="l01135"></a><span class="lineno"> 1135</span> {</div>
<div class="line"><a id="l01136" name="l01136"></a><span class="lineno"> 1136</span> r.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/vector/emplace_back.html">emplace_back</a>(<span class="stringliteral">&quot;bob&quot;</span>s + <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(i));</div>
<div class="line"><a id="l01137" name="l01137"></a><span class="lineno"> 1137</span> }</div>
<div class="line"><a id="l01138" name="l01138"></a><span class="lineno"> 1138</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l01139" name="l01139"></a><span class="lineno"> 1139</span> }();</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> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01142" name="l01142"></a><span class="lineno"> 1142</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice);</div>
<div class="line"><a id="l01143" name="l01143"></a><span class="lineno"> 1143</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; a : bobs)</div>
<div class="line"><a id="l01144" name="l01144"></a><span class="lineno"> 1144</span> {</div>
<div class="line"><a id="l01145" name="l01145"></a><span class="lineno"> 1145</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), a);</div>
<div class="line"><a id="l01146" name="l01146"></a><span class="lineno"> 1146</span> env.close();</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> </div>
<div class="line"><a id="l01149" name="l01149"></a><span class="lineno"> 1149</span> {</div>
<div class="line"><a id="l01150" name="l01150"></a><span class="lineno"> 1150</span> <span class="comment">// create a channel from alice to every bob account</span></div>
<div class="line"><a id="l01151" name="l01151"></a><span class="lineno"> 1151</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l01152" name="l01152"></a><span class="lineno"> 1152</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1);</div>
<div class="line"><a id="l01153" name="l01153"></a><span class="lineno"> 1153</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; b : bobs)</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> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, b, channelFunds, settleDelay, alice.pk()));</div>
<div class="line"><a id="l01156" name="l01156"></a><span class="lineno"> 1156</span> }</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> </div>
<div class="line"><a id="l01159" name="l01159"></a><span class="lineno"> 1159</span> <span class="keyword">auto</span> testLimit = [](<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">test::jtx::Env</a>&amp; env,</div>
<div class="line"><a id="l01160" name="l01160"></a><span class="lineno"> 1160</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">test::jtx::Account</a> <span class="keyword">const</span>&amp; src,</div>
<div class="line"><a id="l01161" name="l01161"></a><span class="lineno"> 1161</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;int&gt;</a> limit = <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="l01162" name="l01162"></a><span class="lineno"> 1162</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> <span class="keyword">const</span>&amp; marker = <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4ea7d9899633b4409bd3fc107e6737f8391">Json::nullValue</a>,</div>
<div class="line"><a id="l01163" name="l01163"></a><span class="lineno"> 1163</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;test::jtx::Account&gt;</a> <span class="keyword">const</span>&amp; dst =</div>
<div class="line"><a id="l01164" name="l01164"></a><span class="lineno"> 1164</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="l01165" name="l01165"></a><span class="lineno"> 1165</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jvc;</div>
<div class="line"><a id="l01166" name="l01166"></a><span class="lineno"> 1166</span> jvc[jss::account] = src.human();</div>
<div class="line"><a id="l01167" name="l01167"></a><span class="lineno"> 1167</span> <span class="keywordflow">if</span> (dst)</div>
<div class="line"><a id="l01168" name="l01168"></a><span class="lineno"> 1168</span> jvc[jss::destination_account] = dst-&gt;human();</div>
<div class="line"><a id="l01169" name="l01169"></a><span class="lineno"> 1169</span> <span class="keywordflow">if</span> (limit)</div>
<div class="line"><a id="l01170" name="l01170"></a><span class="lineno"> 1170</span> jvc[jss::limit] = *limit;</div>
<div class="line"><a id="l01171" name="l01171"></a><span class="lineno"> 1171</span> <span class="keywordflow">if</span> (marker)</div>
<div class="line"><a id="l01172" name="l01172"></a><span class="lineno"> 1172</span> jvc[jss::marker] = marker;</div>
<div class="line"><a id="l01173" name="l01173"></a><span class="lineno"> 1173</span> </div>
<div class="line"><a id="l01174" name="l01174"></a><span class="lineno"> 1174</span> <span class="keywordflow">return</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ad69855b4b26fc3c83922c5783487592c">rpc</a>(</div>
<div class="line"><a id="l01175" name="l01175"></a><span class="lineno"> 1175</span> <span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;account_channels&quot;</span>, <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(jvc))[jss::result];</div>
<div class="line"><a id="l01176" name="l01176"></a><span class="lineno"> 1176</span> };</div>
<div class="line"><a id="l01177" name="l01177"></a><span class="lineno"> 1177</span> </div>
<div class="line"><a id="l01178" name="l01178"></a><span class="lineno"> 1178</span> {</div>
<div class="line"><a id="l01179" name="l01179"></a><span class="lineno"> 1179</span> <span class="comment">// No marker</span></div>
<div class="line"><a id="l01180" name="l01180"></a><span class="lineno"> 1180</span> <span class="keyword">auto</span> <span class="keyword">const</span> r = testLimit(env, alice);</div>
<div class="line"><a id="l01181" name="l01181"></a><span class="lineno"> 1181</span> BEAST_EXPECT(r.isMember(jss::channels));</div>
<div class="line"><a id="l01182" name="l01182"></a><span class="lineno"> 1182</span> BEAST_EXPECT(r[jss::channels].size() == bobs.size());</div>
<div class="line"><a id="l01183" name="l01183"></a><span class="lineno"> 1183</span> }</div>
<div class="line"><a id="l01184" name="l01184"></a><span class="lineno"> 1184</span> </div>
<div class="line"><a id="l01185" name="l01185"></a><span class="lineno"> 1185</span> <span class="keyword">auto</span> <span class="keyword">const</span> bobsB58 = [&amp;bobs]() -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">std::set&lt;std::string&gt;</a> {</div>
<div class="line"><a id="l01186" name="l01186"></a><span class="lineno"> 1186</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/container/set.html">std::set&lt;std::string&gt;</a> r;</div>
<div class="line"><a id="l01187" name="l01187"></a><span class="lineno"> 1187</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; a : bobs)</div>
<div class="line"><a id="l01188" name="l01188"></a><span class="lineno"> 1188</span> r.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/set/insert.html">insert</a>(a.human());</div>
<div class="line"><a id="l01189" name="l01189"></a><span class="lineno"> 1189</span> <span class="keywordflow">return</span> r;</div>
<div class="line"><a id="l01190" name="l01190"></a><span class="lineno"> 1190</span> }();</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> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> limit = 1; limit &lt; bobs.size() + 1; ++limit)</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> leftToFind = bobsB58;</div>
<div class="line"><a id="l01195" name="l01195"></a><span class="lineno"> 1195</span> <span class="keyword">auto</span> <span class="keyword">const</span> numFull = bobs.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/container/set/size.html">size</a>() / limit;</div>
<div class="line"><a id="l01196" name="l01196"></a><span class="lineno"> 1196</span> <span class="keyword">auto</span> <span class="keyword">const</span> numNonFull = bobs.size() % limit ? 1 : 0;</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> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> marker = <a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4ea7d9899633b4409bd3fc107e6737f8391">Json::nullValue</a>;</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> <span class="keyword">auto</span> <span class="keyword">const</span> testIt = [&amp;](<span class="keywordtype">bool</span> expectMarker, <span class="keywordtype">int</span> expectedBatchSize) {</div>
<div class="line"><a id="l01201" name="l01201"></a><span class="lineno"> 1201</span> <span class="keyword">auto</span> <span class="keyword">const</span> r = testLimit(env, alice, limit, marker);</div>
<div class="line"><a id="l01202" name="l01202"></a><span class="lineno"> 1202</span> BEAST_EXPECT(!expectMarker || r.isMember(jss::marker));</div>
<div class="line"><a id="l01203" name="l01203"></a><span class="lineno"> 1203</span> <span class="keywordflow">if</span> (r.isMember(jss::marker))</div>
<div class="line"><a id="l01204" name="l01204"></a><span class="lineno"> 1204</span> marker = r[jss::marker];</div>
<div class="line"><a id="l01205" name="l01205"></a><span class="lineno"> 1205</span> BEAST_EXPECT(r[jss::channels].size() == expectedBatchSize);</div>
<div class="line"><a id="l01206" name="l01206"></a><span class="lineno"> 1206</span> <span class="keyword">auto</span> <span class="keyword">const</span> c = r[jss::channels];</div>
<div class="line"><a id="l01207" name="l01207"></a><span class="lineno"> 1207</span> <span class="keyword">auto</span> <span class="keyword">const</span> s = r[jss::channels].size();</div>
<div class="line"><a id="l01208" name="l01208"></a><span class="lineno"> 1208</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> j = 0; j &lt; s; ++j)</div>
<div class="line"><a id="l01209" name="l01209"></a><span class="lineno"> 1209</span> {</div>
<div class="line"><a id="l01210" name="l01210"></a><span class="lineno"> 1210</span> <span class="keyword">auto</span> <span class="keyword">const</span> dstAcc =</div>
<div class="line"><a id="l01211" name="l01211"></a><span class="lineno"> 1211</span> c[j][jss::destination_account].asString();</div>
<div class="line"><a id="l01212" name="l01212"></a><span class="lineno"> 1212</span> BEAST_EXPECT(leftToFind.count(dstAcc));</div>
<div class="line"><a id="l01213" name="l01213"></a><span class="lineno"> 1213</span> leftToFind.erase(dstAcc);</div>
<div class="line"><a id="l01214" name="l01214"></a><span class="lineno"> 1214</span> }</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> </div>
<div class="line"><a id="l01217" name="l01217"></a><span class="lineno"> 1217</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; numFull; ++i)</div>
<div class="line"><a id="l01218" name="l01218"></a><span class="lineno"> 1218</span> {</div>
<div class="line"><a id="l01219" name="l01219"></a><span class="lineno"> 1219</span> <span class="keywordtype">bool</span> <span class="keyword">const</span> expectMarker = (numNonFull != 0 || i &lt; numFull - 1);</div>
<div class="line"><a id="l01220" name="l01220"></a><span class="lineno"> 1220</span> testIt(expectMarker, limit);</div>
<div class="line"><a id="l01221" name="l01221"></a><span class="lineno"> 1221</span> }</div>
<div class="line"><a id="l01222" name="l01222"></a><span class="lineno"> 1222</span> </div>
<div class="line"><a id="l01223" name="l01223"></a><span class="lineno"> 1223</span> <span class="keywordflow">if</span> (numNonFull)</div>
<div class="line"><a id="l01224" name="l01224"></a><span class="lineno"> 1224</span> {</div>
<div class="line"><a id="l01225" name="l01225"></a><span class="lineno"> 1225</span> testIt(<span class="keyword">false</span>, bobs.size() % limit);</div>
<div class="line"><a id="l01226" name="l01226"></a><span class="lineno"> 1226</span> }</div>
<div class="line"><a id="l01227" name="l01227"></a><span class="lineno"> 1227</span> BEAST_EXPECT(leftToFind.empty());</div>
<div class="line"><a id="l01228" name="l01228"></a><span class="lineno"> 1228</span> }</div>
<div class="line"><a id="l01229" name="l01229"></a><span class="lineno"> 1229</span> </div>
<div class="line"><a id="l01230" name="l01230"></a><span class="lineno"> 1230</span> {</div>
<div class="line"><a id="l01231" name="l01231"></a><span class="lineno"> 1231</span> <span class="comment">// degenerate case</span></div>
<div class="line"><a id="l01232" name="l01232"></a><span class="lineno"> 1232</span> <span class="keyword">auto</span> <span class="keyword">const</span> r = testLimit(env, alice, 0);</div>
<div class="line"><a id="l01233" name="l01233"></a><span class="lineno"> 1233</span> BEAST_EXPECT(r.isMember(jss::error_message));</div>
<div class="line"><a id="l01234" name="l01234"></a><span class="lineno"> 1234</span> }</div>
<div class="line"><a id="l01235" name="l01235"></a><span class="lineno"> 1235</span> }</div>
</div>
<div class="line"><a id="l01236" name="l01236"></a><span class="lineno"> 1236</span> </div>
<div class="line"><a id="l01237" name="l01237"></a><span class="lineno"> 1237</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01238" data-start="{" data-end="}">
<div class="line"><a id="l01238" name="l01238"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#ac769d1d8f85fe681cbfdfeb65ffbbcaf"> 1238</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ac769d1d8f85fe681cbfdfeb65ffbbcaf">testAccountChannelsRPCSenderOnly</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01239" name="l01239"></a><span class="lineno"> 1239</span> {</div>
<div class="line"><a id="l01240" name="l01240"></a><span class="lineno"> 1240</span> <span class="comment">// Check that the account_channels command only returns channels owned</span></div>
<div class="line"><a id="l01241" name="l01241"></a><span class="lineno"> 1241</span> <span class="comment">// by the account</span></div>
<div class="line"><a id="l01242" name="l01242"></a><span class="lineno"> 1242</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Account channels RPC owner only&quot;</span>);</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> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l01245" name="l01245"></a><span class="lineno"> 1245</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals.html">std::literals</a>;</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> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01248" name="l01248"></a><span class="lineno"> 1248</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01249" name="l01249"></a><span class="lineno"> 1249</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01250" name="l01250"></a><span class="lineno"> 1250</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l01251" name="l01251"></a><span class="lineno"> 1251</span> </div>
<div class="line"><a id="l01252" name="l01252"></a><span class="lineno"> 1252</span> <span class="comment">// Create a channel from alice to bob and from bob to alice</span></div>
<div class="line"><a id="l01253" name="l01253"></a><span class="lineno"> 1253</span> <span class="comment">// When retrieving alice&#39;s channels, it should only retrieve the</span></div>
<div class="line"><a id="l01254" name="l01254"></a><span class="lineno"> 1254</span> <span class="comment">// channels where alice is the source, not the destination</span></div>
<div class="line"><a id="l01255" name="l01255"></a><span class="lineno"> 1255</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l01256" name="l01256"></a><span class="lineno"> 1256</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l01257" name="l01257"></a><span class="lineno"> 1257</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, alice.pk()));</div>
<div class="line"><a id="l01258" name="l01258"></a><span class="lineno"> 1258</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(bob, alice, channelFunds, settleDelay, bob.pk()));</div>
<div class="line"><a id="l01259" name="l01259"></a><span class="lineno"> 1259</span> </div>
<div class="line"><a id="l01260" name="l01260"></a><span class="lineno"> 1260</span> <span class="keyword">auto</span> <span class="keyword">const</span> r = [&amp;] {</div>
<div class="line"><a id="l01261" name="l01261"></a><span class="lineno"> 1261</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jvc;</div>
<div class="line"><a id="l01262" name="l01262"></a><span class="lineno"> 1262</span> jvc[jss::account] = alice.human();</div>
<div class="line"><a id="l01263" name="l01263"></a><span class="lineno"> 1263</span> </div>
<div class="line"><a id="l01264" name="l01264"></a><span class="lineno"> 1264</span> <span class="keywordflow">return</span> env.rpc(</div>
<div class="line"><a id="l01265" name="l01265"></a><span class="lineno"> 1265</span> <span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;account_channels&quot;</span>, <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(jvc))[jss::result];</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> BEAST_EXPECT(r.isMember(jss::channels));</div>
<div class="line"><a id="l01268" name="l01268"></a><span class="lineno"> 1268</span> BEAST_EXPECT(r[jss::channels].size() == 1);</div>
<div class="line"><a id="l01269" name="l01269"></a><span class="lineno"> 1269</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01270" name="l01270"></a><span class="lineno"> 1270</span> r[jss::channels][0u][jss::destination_account].asString() ==</div>
<div class="line"><a id="l01271" name="l01271"></a><span class="lineno"> 1271</span> bob.human());</div>
<div class="line"><a id="l01272" name="l01272"></a><span class="lineno"> 1272</span> }</div>
</div>
<div class="line"><a id="l01273" name="l01273"></a><span class="lineno"> 1273</span> </div>
<div class="line"><a id="l01274" name="l01274"></a><span class="lineno"> 1274</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01275" data-start="{" data-end="}">
<div class="line"><a id="l01275" name="l01275"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#ab2c84f1b37a1c091518dac7379941857"> 1275</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ab2c84f1b37a1c091518dac7379941857">testAccountChannelAuthorize</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01276" name="l01276"></a><span class="lineno"> 1276</span> {</div>
<div class="line"><a id="l01277" name="l01277"></a><span class="lineno"> 1277</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01278" name="l01278"></a><span class="lineno"> 1278</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l01279" name="l01279"></a><span class="lineno"> 1279</span> </div>
<div class="line"><a id="l01280" name="l01280"></a><span class="lineno"> 1280</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01281" name="l01281"></a><span class="lineno"> 1281</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01282" name="l01282"></a><span class="lineno"> 1282</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01283" name="l01283"></a><span class="lineno"> 1283</span> <span class="keyword">auto</span> <span class="keyword">const</span> charlie = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;charlie&quot;</span>, <a class="code hl_enumvalue" href="namespaceripple.html#a9de744cfdefe1132969eb982e57e4ddea8183aa2c95dc1385c8f58bf1917fcb0b">KeyType::ed25519</a>);</div>
<div class="line"><a id="l01284" name="l01284"></a><span class="lineno"> 1284</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, charlie);</div>
<div class="line"><a id="l01285" name="l01285"></a><span class="lineno"> 1285</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l01286" name="l01286"></a><span class="lineno"> 1286</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l01287" name="l01287"></a><span class="lineno"> 1287</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l01288" name="l01288"></a><span class="lineno"> 1288</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan1Str = <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice)));</div>
<div class="line"><a id="l01289" name="l01289"></a><span class="lineno"> 1289</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l01290" name="l01290"></a><span class="lineno"> 1290</span> env.close();</div>
<div class="line"><a id="l01291" name="l01291"></a><span class="lineno"> 1291</span> </div>
<div class="line"><a id="l01292" name="l01292"></a><span class="lineno"> 1292</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> args{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l01293" name="l01293"></a><span class="lineno"> 1293</span> args[jss::channel_id] = chan1Str;</div>
<div class="line"><a id="l01294" name="l01294"></a><span class="lineno"> 1294</span> args[jss::key_type] = <span class="stringliteral">&quot;ed255191&quot;</span>;</div>
<div class="line"><a id="l01295" name="l01295"></a><span class="lineno"> 1295</span> args[jss::seed] = <span class="stringliteral">&quot;snHq1rzQoN2qiUkC3XF5RyxBzUtN&quot;</span>;</div>
<div class="line"><a id="l01296" name="l01296"></a><span class="lineno"> 1296</span> args[jss::amount] = 51110000;</div>
<div class="line"><a id="l01297" name="l01297"></a><span class="lineno"> 1297</span> </div>
<div class="line"><a id="l01298" name="l01298"></a><span class="lineno"> 1298</span> <span class="comment">// test for all api versions</span></div>
<div class="line"><a id="l01299" name="l01299"></a><span class="lineno"> 1299</span> <a class="code hl_function" href="namespaceripple.html#a9f8b4ebe6b42066b9e39967ed80daf79">forAllApiVersions</a>([&amp;, <span class="keyword">this</span>](<span class="keywordtype">unsigned</span> apiVersion) {</div>
<div class="line"><a id="l01300" name="l01300"></a><span class="lineno"> 1300</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(</div>
<div class="line"><a id="l01301" name="l01301"></a><span class="lineno"> 1301</span> <span class="stringliteral">&quot;PayChan Channel_Auth RPC Api &quot;</span> + <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/to_string.html">std::to_string</a>(apiVersion));</div>
<div class="line"><a id="l01302" name="l01302"></a><span class="lineno"> 1302</span> args[jss::api_version] = apiVersion;</div>
<div class="line"><a id="l01303" name="l01303"></a><span class="lineno"> 1303</span> <span class="keyword">auto</span> <span class="keyword">const</span> rs = env.rpc(</div>
<div class="line"><a id="l01304" name="l01304"></a><span class="lineno"> 1304</span> <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a id="l01305" name="l01305"></a><span class="lineno"> 1305</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>,</div>
<div class="line"><a id="l01306" name="l01306"></a><span class="lineno"> 1306</span> args.toStyledString())[jss::result];</div>
<div class="line"><a id="l01307" name="l01307"></a><span class="lineno"> 1307</span> <span class="keyword">auto</span> <span class="keyword">const</span> error = apiVersion &lt; 2u ? <span class="stringliteral">&quot;invalidParams&quot;</span> : <span class="stringliteral">&quot;badKeyType&quot;</span>;</div>
<div class="line"><a id="l01308" name="l01308"></a><span class="lineno"> 1308</span> BEAST_EXPECT(rs[jss::error] == error);</div>
<div class="line"><a id="l01309" name="l01309"></a><span class="lineno"> 1309</span> });</div>
<div class="line"><a id="l01310" name="l01310"></a><span class="lineno"> 1310</span> }</div>
</div>
<div class="line"><a id="l01311" name="l01311"></a><span class="lineno"> 1311</span> </div>
<div class="line"><a id="l01312" name="l01312"></a><span class="lineno"> 1312</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01313" data-start="{" data-end="}">
<div class="line"><a id="l01313" name="l01313"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a8fc9fa8eea423030f3d64e0e2ad4d52c"> 1313</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a8fc9fa8eea423030f3d64e0e2ad4d52c">testAuthVerifyRPC</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</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> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;PayChan Auth/Verify RPC&quot;</span>);</div>
<div class="line"><a id="l01316" name="l01316"></a><span class="lineno"> 1316</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01317" name="l01317"></a><span class="lineno"> 1317</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l01318" name="l01318"></a><span class="lineno"> 1318</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01319" name="l01319"></a><span class="lineno"> 1319</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01320" name="l01320"></a><span class="lineno"> 1320</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01321" name="l01321"></a><span class="lineno"> 1321</span> <span class="keyword">auto</span> <span class="keyword">const</span> charlie = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;charlie&quot;</span>, <a class="code hl_enumvalue" href="namespaceripple.html#a9de744cfdefe1132969eb982e57e4ddea8183aa2c95dc1385c8f58bf1917fcb0b">KeyType::ed25519</a>);</div>
<div class="line"><a id="l01322" name="l01322"></a><span class="lineno"> 1322</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, charlie);</div>
<div class="line"><a id="l01323" name="l01323"></a><span class="lineno"> 1323</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l01324" name="l01324"></a><span class="lineno"> 1324</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l01325" name="l01325"></a><span class="lineno"> 1325</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l01326" name="l01326"></a><span class="lineno"> 1326</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan1Str = <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice)));</div>
<div class="line"><a id="l01327" name="l01327"></a><span class="lineno"> 1327</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l01328" name="l01328"></a><span class="lineno"> 1328</span> env.close();</div>
<div class="line"><a id="l01329" name="l01329"></a><span class="lineno"> 1329</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> chan1PkStr;</div>
<div class="line"><a id="l01330" name="l01330"></a><span class="lineno"> 1330</span> {</div>
<div class="line"><a id="l01331" name="l01331"></a><span class="lineno"> 1331</span> <span class="keyword">auto</span> <span class="keyword">const</span> r =</div>
<div class="line"><a id="l01332" name="l01332"></a><span class="lineno"> 1332</span> env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, alice.human(), bob.human());</div>
<div class="line"><a id="l01333" name="l01333"></a><span class="lineno"> 1333</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 1);</div>
<div class="line"><a id="l01334" name="l01334"></a><span class="lineno"> 1334</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01335" name="l01335"></a><span class="lineno"> 1335</span> r[jss::result][jss::channels][0u][jss::channel_id] == chan1Str);</div>
<div class="line"><a id="l01336" name="l01336"></a><span class="lineno"> 1336</span> BEAST_EXPECT(r[jss::result][jss::validated]);</div>
<div class="line"><a id="l01337" name="l01337"></a><span class="lineno"> 1337</span> chan1PkStr =</div>
<div class="line"><a id="l01338" name="l01338"></a><span class="lineno"> 1338</span> r[jss::result][jss::channels][0u][jss::public_key].asString();</div>
<div class="line"><a id="l01339" name="l01339"></a><span class="lineno"> 1339</span> }</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="keyword">auto</span> <span class="keyword">const</span> r = env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, alice.human());</div>
<div class="line"><a id="l01342" name="l01342"></a><span class="lineno"> 1342</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 1);</div>
<div class="line"><a id="l01343" name="l01343"></a><span class="lineno"> 1343</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01344" name="l01344"></a><span class="lineno"> 1344</span> r[jss::result][jss::channels][0u][jss::channel_id] == chan1Str);</div>
<div class="line"><a id="l01345" name="l01345"></a><span class="lineno"> 1345</span> BEAST_EXPECT(r[jss::result][jss::validated]);</div>
<div class="line"><a id="l01346" name="l01346"></a><span class="lineno"> 1346</span> chan1PkStr =</div>
<div class="line"><a id="l01347" name="l01347"></a><span class="lineno"> 1347</span> r[jss::result][jss::channels][0u][jss::public_key].asString();</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> {</div>
<div class="line"><a id="l01350" name="l01350"></a><span class="lineno"> 1350</span> <span class="keyword">auto</span> <span class="keyword">const</span> r =</div>
<div class="line"><a id="l01351" name="l01351"></a><span class="lineno"> 1351</span> env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, bob.human(), alice.human());</div>
<div class="line"><a id="l01352" name="l01352"></a><span class="lineno"> 1352</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 0);</div>
<div class="line"><a id="l01353" name="l01353"></a><span class="lineno"> 1353</span> BEAST_EXPECT(r[jss::result][jss::validated]);</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> <span class="keyword">auto</span> <span class="keyword">const</span> chan2Str = <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice)));</div>
<div class="line"><a id="l01356" name="l01356"></a><span class="lineno"> 1356</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l01357" name="l01357"></a><span class="lineno"> 1357</span> env.close();</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="keyword">auto</span> <span class="keyword">const</span> r =</div>
<div class="line"><a id="l01360" name="l01360"></a><span class="lineno"> 1360</span> env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, alice.human(), bob.human());</div>
<div class="line"><a id="l01361" name="l01361"></a><span class="lineno"> 1361</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 2);</div>
<div class="line"><a id="l01362" name="l01362"></a><span class="lineno"> 1362</span> BEAST_EXPECT(r[jss::result][jss::validated]);</div>
<div class="line"><a id="l01363" name="l01363"></a><span class="lineno"> 1363</span> BEAST_EXPECT(chan1Str != chan2Str);</div>
<div class="line"><a id="l01364" name="l01364"></a><span class="lineno"> 1364</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> <span class="keyword">const</span>&amp; c : {chan1Str, chan2Str})</div>
<div class="line"><a id="l01365" name="l01365"></a><span class="lineno"> 1365</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01366" name="l01366"></a><span class="lineno"> 1366</span> r[jss::result][jss::channels][0u][jss::channel_id] == c ||</div>
<div class="line"><a id="l01367" name="l01367"></a><span class="lineno"> 1367</span> r[jss::result][jss::channels][1u][jss::channel_id] == c);</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 class="line"><a id="l01370" name="l01370"></a><span class="lineno"> 1370</span> <span class="keyword">auto</span> <a class="code hl_function" href="namespaceripple.html#a3da1781bb9795989b8fcee62bbad358a">sliceToHex</a> = [](<a class="code hl_class" href="classripple_1_1Slice.html">Slice</a> <span class="keyword">const</span>&amp; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/valarray/slice.html">slice</a>) {</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> s;</div>
<div class="line"><a id="l01372" name="l01372"></a><span class="lineno"> 1372</span> s.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/reserve.html">reserve</a>(2 * <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/valarray/slice.html">slice</a>.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/numeric/valarray/slice.html">size</a>());</div>
<div class="line"><a id="l01373" name="l01373"></a><span class="lineno"> 1373</span> <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/valarray/slice.html">slice</a>.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/numeric/valarray/slice.html">size</a>(); ++i)</div>
<div class="line"><a id="l01374" name="l01374"></a><span class="lineno"> 1374</span> {</div>
<div class="line"><a id="l01375" name="l01375"></a><span class="lineno"> 1375</span> s += <span class="stringliteral">&quot;0123456789ABCDEF&quot;</span>[((<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/valarray/slice.html">slice</a>[i] &amp; 0xf0) &gt;&gt; 4)];</div>
<div class="line"><a id="l01376" name="l01376"></a><span class="lineno"> 1376</span> s += <span class="stringliteral">&quot;0123456789ABCDEF&quot;</span>[((<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/numeric/valarray/slice.html">slice</a>[i] &amp; 0x0f) &gt;&gt; 0)];</div>
<div class="line"><a id="l01377" name="l01377"></a><span class="lineno"> 1377</span> }</div>
<div class="line"><a id="l01378" name="l01378"></a><span class="lineno"> 1378</span> <span class="keywordflow">return</span> s;</div>
<div class="line"><a id="l01379" name="l01379"></a><span class="lineno"> 1379</span> };</div>
<div class="line"><a id="l01380" name="l01380"></a><span class="lineno"> 1380</span> </div>
<div class="line"><a id="l01381" name="l01381"></a><span class="lineno"> 1381</span> {</div>
<div class="line"><a id="l01382" name="l01382"></a><span class="lineno"> 1382</span> <span class="comment">// Verify chan1 auth</span></div>
<div class="line"><a id="l01383" name="l01383"></a><span class="lineno"> 1383</span> <span class="keyword">auto</span> <span class="keyword">const</span> rs =</div>
<div class="line"><a id="l01384" name="l01384"></a><span class="lineno"> 1384</span> env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;alice&quot;</span>, chan1Str, <span class="stringliteral">&quot;1000&quot;</span>);</div>
<div class="line"><a id="l01385" name="l01385"></a><span class="lineno"> 1385</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> = rs[jss::result][jss::signature].asString();</div>
<div class="line"><a id="l01386" name="l01386"></a><span class="lineno"> 1386</span> BEAST_EXPECT(!<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>.empty());</div>
<div class="line"><a id="l01387" name="l01387"></a><span class="lineno"> 1387</span> {</div>
<div class="line"><a id="l01388" name="l01388"></a><span class="lineno"> 1388</span> <span class="keyword">auto</span> <span class="keyword">const</span> rv = env.rpc(</div>
<div class="line"><a id="l01389" name="l01389"></a><span class="lineno"> 1389</span> <span class="stringliteral">&quot;channel_verify&quot;</span>, chan1PkStr, chan1Str, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01390" name="l01390"></a><span class="lineno"> 1390</span> BEAST_EXPECT(rv[jss::result][jss::signature_verified].asBool());</div>
<div class="line"><a id="l01391" name="l01391"></a><span class="lineno"> 1391</span> }</div>
<div class="line"><a id="l01392" name="l01392"></a><span class="lineno"> 1392</span> </div>
<div class="line"><a id="l01393" name="l01393"></a><span class="lineno"> 1393</span> {</div>
<div class="line"><a id="l01394" name="l01394"></a><span class="lineno"> 1394</span> <span class="comment">// use pk hex to verify</span></div>
<div class="line"><a id="l01395" name="l01395"></a><span class="lineno"> 1395</span> <span class="keyword">auto</span> <span class="keyword">const</span> pkAsHex = <a class="code hl_function" href="namespaceripple.html#a3da1781bb9795989b8fcee62bbad358a">sliceToHex</a>(pk.slice());</div>
<div class="line"><a id="l01396" name="l01396"></a><span class="lineno"> 1396</span> <span class="keyword">auto</span> <span class="keyword">const</span> rv =</div>
<div class="line"><a id="l01397" name="l01397"></a><span class="lineno"> 1397</span> env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01398" name="l01398"></a><span class="lineno"> 1398</span> BEAST_EXPECT(rv[jss::result][jss::signature_verified].asBool());</div>
<div class="line"><a id="l01399" name="l01399"></a><span class="lineno"> 1399</span> }</div>
<div class="line"><a id="l01400" name="l01400"></a><span class="lineno"> 1400</span> {</div>
<div class="line"><a id="l01401" name="l01401"></a><span class="lineno"> 1401</span> <span class="comment">// malformed amount</span></div>
<div class="line"><a id="l01402" name="l01402"></a><span class="lineno"> 1402</span> <span class="keyword">auto</span> <span class="keyword">const</span> pkAsHex = <a class="code hl_function" href="namespaceripple.html#a3da1781bb9795989b8fcee62bbad358a">sliceToHex</a>(pk.slice());</div>
<div class="line"><a id="l01403" name="l01403"></a><span class="lineno"> 1403</span> <span class="keyword">auto</span> rv =</div>
<div class="line"><a id="l01404" name="l01404"></a><span class="lineno"> 1404</span> env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot;1000x&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01405" name="l01405"></a><span class="lineno"> 1405</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01406" name="l01406"></a><span class="lineno"> 1406</span> rv = env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot;1000 &quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01407" name="l01407"></a><span class="lineno"> 1407</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01408" name="l01408"></a><span class="lineno"> 1408</span> rv = env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot;x1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01409" name="l01409"></a><span class="lineno"> 1409</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01410" name="l01410"></a><span class="lineno"> 1410</span> rv = env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot;x&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01411" name="l01411"></a><span class="lineno"> 1411</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01412" name="l01412"></a><span class="lineno"> 1412</span> rv = env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot; &quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01413" name="l01413"></a><span class="lineno"> 1413</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01414" name="l01414"></a><span class="lineno"> 1414</span> rv = env.rpc(</div>
<div class="line"><a id="l01415" name="l01415"></a><span class="lineno"> 1415</span> <span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot;1000 1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01416" name="l01416"></a><span class="lineno"> 1416</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01417" name="l01417"></a><span class="lineno"> 1417</span> rv = env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot;1,000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01418" name="l01418"></a><span class="lineno"> 1418</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01419" name="l01419"></a><span class="lineno"> 1419</span> rv = env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot; 1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01420" name="l01420"></a><span class="lineno"> 1420</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01421" name="l01421"></a><span class="lineno"> 1421</span> rv = env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot;&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01422" name="l01422"></a><span class="lineno"> 1422</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&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> {</div>
<div class="line"><a id="l01425" name="l01425"></a><span class="lineno"> 1425</span> <span class="comment">// malformed channel</span></div>
<div class="line"><a id="l01426" name="l01426"></a><span class="lineno"> 1426</span> <span class="keyword">auto</span> <span class="keyword">const</span> pkAsHex = <a class="code hl_function" href="namespaceripple.html#a3da1781bb9795989b8fcee62bbad358a">sliceToHex</a>(pk.slice());</div>
<div class="line"><a id="l01427" name="l01427"></a><span class="lineno"> 1427</span> <span class="keyword">auto</span> chan1StrBad = chan1Str;</div>
<div class="line"><a id="l01428" name="l01428"></a><span class="lineno"> 1428</span> chan1StrBad.pop_back();</div>
<div class="line"><a id="l01429" name="l01429"></a><span class="lineno"> 1429</span> <span class="keyword">auto</span> rv = env.rpc(</div>
<div class="line"><a id="l01430" name="l01430"></a><span class="lineno"> 1430</span> <span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1StrBad, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01431" name="l01431"></a><span class="lineno"> 1431</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelMalformed&quot;</span>);</div>
<div class="line"><a id="l01432" name="l01432"></a><span class="lineno"> 1432</span> rv = env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;alice&quot;</span>, chan1StrBad, <span class="stringliteral">&quot;1000&quot;</span>);</div>
<div class="line"><a id="l01433" name="l01433"></a><span class="lineno"> 1433</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelMalformed&quot;</span>);</div>
<div class="line"><a id="l01434" name="l01434"></a><span class="lineno"> 1434</span> </div>
<div class="line"><a id="l01435" name="l01435"></a><span class="lineno"> 1435</span> chan1StrBad = chan1Str;</div>
<div class="line"><a id="l01436" name="l01436"></a><span class="lineno"> 1436</span> chan1StrBad.push_back(<span class="charliteral">&#39;0&#39;</span>);</div>
<div class="line"><a id="l01437" name="l01437"></a><span class="lineno"> 1437</span> rv = env.rpc(</div>
<div class="line"><a id="l01438" name="l01438"></a><span class="lineno"> 1438</span> <span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1StrBad, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01439" name="l01439"></a><span class="lineno"> 1439</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelMalformed&quot;</span>);</div>
<div class="line"><a id="l01440" name="l01440"></a><span class="lineno"> 1440</span> rv = env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;alice&quot;</span>, chan1StrBad, <span class="stringliteral">&quot;1000&quot;</span>);</div>
<div class="line"><a id="l01441" name="l01441"></a><span class="lineno"> 1441</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelMalformed&quot;</span>);</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> chan1StrBad = chan1Str;</div>
<div class="line"><a id="l01444" name="l01444"></a><span class="lineno"> 1444</span> chan1StrBad.back() = <span class="charliteral">&#39;x&#39;</span>;</div>
<div class="line"><a id="l01445" name="l01445"></a><span class="lineno"> 1445</span> rv = env.rpc(</div>
<div class="line"><a id="l01446" name="l01446"></a><span class="lineno"> 1446</span> <span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1StrBad, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01447" name="l01447"></a><span class="lineno"> 1447</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelMalformed&quot;</span>);</div>
<div class="line"><a id="l01448" name="l01448"></a><span class="lineno"> 1448</span> rv = env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;alice&quot;</span>, chan1StrBad, <span class="stringliteral">&quot;1000&quot;</span>);</div>
<div class="line"><a id="l01449" name="l01449"></a><span class="lineno"> 1449</span> BEAST_EXPECT(rv[jss::error] == <span class="stringliteral">&quot;channelMalformed&quot;</span>);</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> {</div>
<div class="line"><a id="l01452" name="l01452"></a><span class="lineno"> 1452</span> <span class="comment">// give an ill formed base 58 public key</span></div>
<div class="line"><a id="l01453" name="l01453"></a><span class="lineno"> 1453</span> <span class="keyword">auto</span> illFormedPk = chan1PkStr.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/substr.html">substr</a>(0, chan1PkStr.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">size</a>() - 1);</div>
<div class="line"><a id="l01454" name="l01454"></a><span class="lineno"> 1454</span> <span class="keyword">auto</span> <span class="keyword">const</span> rv = env.rpc(</div>
<div class="line"><a id="l01455" name="l01455"></a><span class="lineno"> 1455</span> <span class="stringliteral">&quot;channel_verify&quot;</span>, illFormedPk, chan1Str, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01456" name="l01456"></a><span class="lineno"> 1456</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01457" name="l01457"></a><span class="lineno"> 1457</span> !rv[jss::result][jss::signature_verified].asBool());</div>
<div class="line"><a id="l01458" name="l01458"></a><span class="lineno"> 1458</span> }</div>
<div class="line"><a id="l01459" name="l01459"></a><span class="lineno"> 1459</span> {</div>
<div class="line"><a id="l01460" name="l01460"></a><span class="lineno"> 1460</span> <span class="comment">// give an ill formed hex public key</span></div>
<div class="line"><a id="l01461" name="l01461"></a><span class="lineno"> 1461</span> <span class="keyword">auto</span> <span class="keyword">const</span> pkAsHex = <a class="code hl_function" href="namespaceripple.html#a3da1781bb9795989b8fcee62bbad358a">sliceToHex</a>(pk.slice());</div>
<div class="line"><a id="l01462" name="l01462"></a><span class="lineno"> 1462</span> <span class="keyword">auto</span> illFormedPk = pkAsHex.substr(0, chan1PkStr.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/string/basic_string/size.html">size</a>() - 1);</div>
<div class="line"><a id="l01463" name="l01463"></a><span class="lineno"> 1463</span> <span class="keyword">auto</span> <span class="keyword">const</span> rv = env.rpc(</div>
<div class="line"><a id="l01464" name="l01464"></a><span class="lineno"> 1464</span> <span class="stringliteral">&quot;channel_verify&quot;</span>, illFormedPk, chan1Str, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01465" name="l01465"></a><span class="lineno"> 1465</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01466" name="l01466"></a><span class="lineno"> 1466</span> !rv[jss::result][jss::signature_verified].asBool());</div>
<div class="line"><a id="l01467" name="l01467"></a><span class="lineno"> 1467</span> }</div>
<div class="line"><a id="l01468" name="l01468"></a><span class="lineno"> 1468</span> }</div>
<div class="line"><a id="l01469" name="l01469"></a><span class="lineno"> 1469</span> {</div>
<div class="line"><a id="l01470" name="l01470"></a><span class="lineno"> 1470</span> <span class="comment">// Try to verify chan2 auth with chan1 key</span></div>
<div class="line"><a id="l01471" name="l01471"></a><span class="lineno"> 1471</span> <span class="keyword">auto</span> <span class="keyword">const</span> rs =</div>
<div class="line"><a id="l01472" name="l01472"></a><span class="lineno"> 1472</span> env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;alice&quot;</span>, chan2Str, <span class="stringliteral">&quot;1000&quot;</span>);</div>
<div class="line"><a id="l01473" name="l01473"></a><span class="lineno"> 1473</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> = rs[jss::result][jss::signature].asString();</div>
<div class="line"><a id="l01474" name="l01474"></a><span class="lineno"> 1474</span> BEAST_EXPECT(!<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>.empty());</div>
<div class="line"><a id="l01475" name="l01475"></a><span class="lineno"> 1475</span> {</div>
<div class="line"><a id="l01476" name="l01476"></a><span class="lineno"> 1476</span> <span class="keyword">auto</span> <span class="keyword">const</span> rv = env.rpc(</div>
<div class="line"><a id="l01477" name="l01477"></a><span class="lineno"> 1477</span> <span class="stringliteral">&quot;channel_verify&quot;</span>, chan1PkStr, chan1Str, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01478" name="l01478"></a><span class="lineno"> 1478</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01479" name="l01479"></a><span class="lineno"> 1479</span> !rv[jss::result][jss::signature_verified].asBool());</div>
<div class="line"><a id="l01480" name="l01480"></a><span class="lineno"> 1480</span> }</div>
<div class="line"><a id="l01481" name="l01481"></a><span class="lineno"> 1481</span> {</div>
<div class="line"><a id="l01482" name="l01482"></a><span class="lineno"> 1482</span> <span class="comment">// use pk hex to verify</span></div>
<div class="line"><a id="l01483" name="l01483"></a><span class="lineno"> 1483</span> <span class="keyword">auto</span> <span class="keyword">const</span> pkAsHex = <a class="code hl_function" href="namespaceripple.html#a3da1781bb9795989b8fcee62bbad358a">sliceToHex</a>(pk.slice());</div>
<div class="line"><a id="l01484" name="l01484"></a><span class="lineno"> 1484</span> <span class="keyword">auto</span> <span class="keyword">const</span> rv =</div>
<div class="line"><a id="l01485" name="l01485"></a><span class="lineno"> 1485</span> env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, pkAsHex, chan1Str, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01486" name="l01486"></a><span class="lineno"> 1486</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01487" name="l01487"></a><span class="lineno"> 1487</span> !rv[jss::result][jss::signature_verified].asBool());</div>
<div class="line"><a id="l01488" name="l01488"></a><span class="lineno"> 1488</span> }</div>
<div class="line"><a id="l01489" name="l01489"></a><span class="lineno"> 1489</span> }</div>
<div class="line"><a id="l01490" name="l01490"></a><span class="lineno"> 1490</span> {</div>
<div class="line"><a id="l01491" name="l01491"></a><span class="lineno"> 1491</span> <span class="comment">// Try to explicitly specify secp256k1 and Ed25519 keys:</span></div>
<div class="line"><a id="l01492" name="l01492"></a><span class="lineno"> 1492</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan =</div>
<div class="line"><a id="l01493" name="l01493"></a><span class="lineno"> 1493</span> <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(charlie, alice, env.seq(charlie)));</div>
<div class="line"><a id="l01494" name="l01494"></a><span class="lineno"> 1494</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(</div>
<div class="line"><a id="l01495" name="l01495"></a><span class="lineno"> 1495</span> charlie, alice, channelFunds, settleDelay, charlie.pk()));</div>
<div class="line"><a id="l01496" name="l01496"></a><span class="lineno"> 1496</span> env.close();</div>
<div class="line"><a id="l01497" name="l01497"></a><span class="lineno"> 1497</span> </div>
<div class="line"><a id="l01498" name="l01498"></a><span class="lineno"> 1498</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> cpk;</div>
<div class="line"><a id="l01499" name="l01499"></a><span class="lineno"> 1499</span> {</div>
<div class="line"><a id="l01500" name="l01500"></a><span class="lineno"> 1500</span> <span class="keyword">auto</span> <span class="keyword">const</span> r =</div>
<div class="line"><a id="l01501" name="l01501"></a><span class="lineno"> 1501</span> env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, charlie.human(), alice.human());</div>
<div class="line"><a id="l01502" name="l01502"></a><span class="lineno"> 1502</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 1);</div>
<div class="line"><a id="l01503" name="l01503"></a><span class="lineno"> 1503</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01504" name="l01504"></a><span class="lineno"> 1504</span> r[jss::result][jss::channels][0u][jss::channel_id] == chan);</div>
<div class="line"><a id="l01505" name="l01505"></a><span class="lineno"> 1505</span> BEAST_EXPECT(r[jss::result][jss::validated]);</div>
<div class="line"><a id="l01506" name="l01506"></a><span class="lineno"> 1506</span> cpk = r[jss::result][jss::channels][0u][jss::public_key]</div>
<div class="line"><a id="l01507" name="l01507"></a><span class="lineno"> 1507</span> .asString();</div>
<div class="line"><a id="l01508" name="l01508"></a><span class="lineno"> 1508</span> }</div>
<div class="line"><a id="l01509" name="l01509"></a><span class="lineno"> 1509</span> </div>
<div class="line"><a id="l01510" name="l01510"></a><span class="lineno"> 1510</span> <span class="comment">// Try to authorize without specifying a key type, expect an error:</span></div>
<div class="line"><a id="l01511" name="l01511"></a><span class="lineno"> 1511</span> <span class="keyword">auto</span> <span class="keyword">const</span> rs =</div>
<div class="line"><a id="l01512" name="l01512"></a><span class="lineno"> 1512</span> env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;charlie&quot;</span>, chan, <span class="stringliteral">&quot;1000&quot;</span>);</div>
<div class="line"><a id="l01513" name="l01513"></a><span class="lineno"> 1513</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> = rs[jss::result][jss::signature].asString();</div>
<div class="line"><a id="l01514" name="l01514"></a><span class="lineno"> 1514</span> BEAST_EXPECT(!<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>.empty());</div>
<div class="line"><a id="l01515" name="l01515"></a><span class="lineno"> 1515</span> {</div>
<div class="line"><a id="l01516" name="l01516"></a><span class="lineno"> 1516</span> <span class="keyword">auto</span> <span class="keyword">const</span> rv =</div>
<div class="line"><a id="l01517" name="l01517"></a><span class="lineno"> 1517</span> env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, cpk, chan, <span class="stringliteral">&quot;1000&quot;</span>, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>);</div>
<div class="line"><a id="l01518" name="l01518"></a><span class="lineno"> 1518</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01519" name="l01519"></a><span class="lineno"> 1519</span> !rv[jss::result][jss::signature_verified].asBool());</div>
<div class="line"><a id="l01520" name="l01520"></a><span class="lineno"> 1520</span> }</div>
<div class="line"><a id="l01521" name="l01521"></a><span class="lineno"> 1521</span> </div>
<div class="line"><a id="l01522" name="l01522"></a><span class="lineno"> 1522</span> <span class="comment">// Try to authorize using an unknown key type, except an error:</span></div>
<div class="line"><a id="l01523" name="l01523"></a><span class="lineno"> 1523</span> <span class="keyword">auto</span> <span class="keyword">const</span> rs1 =</div>
<div class="line"><a id="l01524" name="l01524"></a><span class="lineno"> 1524</span> env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;charlie&quot;</span>, <span class="stringliteral">&quot;nyx&quot;</span>, chan, <span class="stringliteral">&quot;1000&quot;</span>);</div>
<div class="line"><a id="l01525" name="l01525"></a><span class="lineno"> 1525</span> BEAST_EXPECT(rs1[jss::error] == <span class="stringliteral">&quot;badKeyType&quot;</span>);</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">// Try to authorize using secp256k1; the authorization _should_</span></div>
<div class="line"><a id="l01528" name="l01528"></a><span class="lineno"> 1528</span> <span class="comment">// succeed but the verification should fail:</span></div>
<div class="line"><a id="l01529" name="l01529"></a><span class="lineno"> 1529</span> <span class="keyword">auto</span> <span class="keyword">const</span> rs2 = env.rpc(</div>
<div class="line"><a id="l01530" name="l01530"></a><span class="lineno"> 1530</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;charlie&quot;</span>, <span class="stringliteral">&quot;secp256k1&quot;</span>, chan, <span class="stringliteral">&quot;1000&quot;</span>);</div>
<div class="line"><a id="l01531" name="l01531"></a><span class="lineno"> 1531</span> <span class="keyword">auto</span> <span class="keyword">const</span> sig2 = rs2[jss::result][jss::signature].asString();</div>
<div class="line"><a id="l01532" name="l01532"></a><span class="lineno"> 1532</span> BEAST_EXPECT(!sig2.empty());</div>
<div class="line"><a id="l01533" name="l01533"></a><span class="lineno"> 1533</span> {</div>
<div class="line"><a id="l01534" name="l01534"></a><span class="lineno"> 1534</span> <span class="keyword">auto</span> <span class="keyword">const</span> rv =</div>
<div class="line"><a id="l01535" name="l01535"></a><span class="lineno"> 1535</span> env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, cpk, chan, <span class="stringliteral">&quot;1000&quot;</span>, sig2);</div>
<div class="line"><a id="l01536" name="l01536"></a><span class="lineno"> 1536</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01537" name="l01537"></a><span class="lineno"> 1537</span> !rv[jss::result][jss::signature_verified].asBool());</div>
<div class="line"><a id="l01538" name="l01538"></a><span class="lineno"> 1538</span> }</div>
<div class="line"><a id="l01539" name="l01539"></a><span class="lineno"> 1539</span> </div>
<div class="line"><a id="l01540" name="l01540"></a><span class="lineno"> 1540</span> <span class="comment">// Try to authorize using Ed25519; expect success:</span></div>
<div class="line"><a id="l01541" name="l01541"></a><span class="lineno"> 1541</span> <span class="keyword">auto</span> <span class="keyword">const</span> rs3 = env.rpc(</div>
<div class="line"><a id="l01542" name="l01542"></a><span class="lineno"> 1542</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;charlie&quot;</span>, <span class="stringliteral">&quot;ed25519&quot;</span>, chan, <span class="stringliteral">&quot;1000&quot;</span>);</div>
<div class="line"><a id="l01543" name="l01543"></a><span class="lineno"> 1543</span> <span class="keyword">auto</span> <span class="keyword">const</span> sig3 = rs3[jss::result][jss::signature].asString();</div>
<div class="line"><a id="l01544" name="l01544"></a><span class="lineno"> 1544</span> BEAST_EXPECT(!sig3.empty());</div>
<div class="line"><a id="l01545" name="l01545"></a><span class="lineno"> 1545</span> {</div>
<div class="line"><a id="l01546" name="l01546"></a><span class="lineno"> 1546</span> <span class="keyword">auto</span> <span class="keyword">const</span> rv =</div>
<div class="line"><a id="l01547" name="l01547"></a><span class="lineno"> 1547</span> env.rpc(<span class="stringliteral">&quot;channel_verify&quot;</span>, cpk, chan, <span class="stringliteral">&quot;1000&quot;</span>, sig3);</div>
<div class="line"><a id="l01548" name="l01548"></a><span class="lineno"> 1548</span> BEAST_EXPECT(rv[jss::result][jss::signature_verified].asBool());</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> }</div>
<div class="line"><a id="l01551" name="l01551"></a><span class="lineno"> 1551</span> </div>
<div class="line"><a id="l01552" name="l01552"></a><span class="lineno"> 1552</span> {</div>
<div class="line"><a id="l01553" name="l01553"></a><span class="lineno"> 1553</span> <span class="comment">// send malformed amounts rpc requests</span></div>
<div class="line"><a id="l01554" name="l01554"></a><span class="lineno"> 1554</span> <span class="keyword">auto</span> rs = env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;alice&quot;</span>, chan1Str, <span class="stringliteral">&quot;1000x&quot;</span>);</div>
<div class="line"><a id="l01555" name="l01555"></a><span class="lineno"> 1555</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01556" name="l01556"></a><span class="lineno"> 1556</span> rs = env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;alice&quot;</span>, chan1Str, <span class="stringliteral">&quot;x1000&quot;</span>);</div>
<div class="line"><a id="l01557" name="l01557"></a><span class="lineno"> 1557</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01558" name="l01558"></a><span class="lineno"> 1558</span> rs = env.rpc(<span class="stringliteral">&quot;channel_authorize&quot;</span>, <span class="stringliteral">&quot;alice&quot;</span>, chan1Str, <span class="stringliteral">&quot;x&quot;</span>);</div>
<div class="line"><a id="l01559" name="l01559"></a><span class="lineno"> 1559</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01560" name="l01560"></a><span class="lineno"> 1560</span> {</div>
<div class="line"><a id="l01561" name="l01561"></a><span class="lineno"> 1561</span> <span class="comment">// Missing channel_id</span></div>
<div class="line"><a id="l01562" name="l01562"></a><span class="lineno"> 1562</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> args{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l01563" name="l01563"></a><span class="lineno"> 1563</span> args[jss::amount] = <span class="stringliteral">&quot;2000&quot;</span>;</div>
<div class="line"><a id="l01564" name="l01564"></a><span class="lineno"> 1564</span> args[jss::key_type] = <span class="stringliteral">&quot;secp256k1&quot;</span>;</div>
<div class="line"><a id="l01565" name="l01565"></a><span class="lineno"> 1565</span> args[jss::passphrase] = <span class="stringliteral">&quot;passphrase_can_be_anything&quot;</span>;</div>
<div class="line"><a id="l01566" name="l01566"></a><span class="lineno"> 1566</span> rs = env.rpc(</div>
<div class="line"><a id="l01567" name="l01567"></a><span class="lineno"> 1567</span> <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a id="l01568" name="l01568"></a><span class="lineno"> 1568</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>,</div>
<div class="line"><a id="l01569" name="l01569"></a><span class="lineno"> 1569</span> args.toStyledString())[jss::result];</div>
<div class="line"><a id="l01570" name="l01570"></a><span class="lineno"> 1570</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;invalidParams&quot;</span>);</div>
<div class="line"><a id="l01571" name="l01571"></a><span class="lineno"> 1571</span> }</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">// Missing amount</span></div>
<div class="line"><a id="l01574" name="l01574"></a><span class="lineno"> 1574</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> args{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l01575" name="l01575"></a><span class="lineno"> 1575</span> args[jss::channel_id] = chan1Str;</div>
<div class="line"><a id="l01576" name="l01576"></a><span class="lineno"> 1576</span> args[jss::key_type] = <span class="stringliteral">&quot;secp256k1&quot;</span>;</div>
<div class="line"><a id="l01577" name="l01577"></a><span class="lineno"> 1577</span> args[jss::passphrase] = <span class="stringliteral">&quot;passphrase_can_be_anything&quot;</span>;</div>
<div class="line"><a id="l01578" name="l01578"></a><span class="lineno"> 1578</span> rs = env.rpc(</div>
<div class="line"><a id="l01579" name="l01579"></a><span class="lineno"> 1579</span> <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a id="l01580" name="l01580"></a><span class="lineno"> 1580</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>,</div>
<div class="line"><a id="l01581" name="l01581"></a><span class="lineno"> 1581</span> args.toStyledString())[jss::result];</div>
<div class="line"><a id="l01582" name="l01582"></a><span class="lineno"> 1582</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;invalidParams&quot;</span>);</div>
<div class="line"><a id="l01583" name="l01583"></a><span class="lineno"> 1583</span> }</div>
<div class="line"><a id="l01584" name="l01584"></a><span class="lineno"> 1584</span> {</div>
<div class="line"><a id="l01585" name="l01585"></a><span class="lineno"> 1585</span> <span class="comment">// Missing key_type and no secret.</span></div>
<div class="line"><a id="l01586" name="l01586"></a><span class="lineno"> 1586</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> args{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l01587" name="l01587"></a><span class="lineno"> 1587</span> args[jss::amount] = <span class="stringliteral">&quot;2000&quot;</span>;</div>
<div class="line"><a id="l01588" name="l01588"></a><span class="lineno"> 1588</span> args[jss::channel_id] = chan1Str;</div>
<div class="line"><a id="l01589" name="l01589"></a><span class="lineno"> 1589</span> args[jss::passphrase] = <span class="stringliteral">&quot;passphrase_can_be_anything&quot;</span>;</div>
<div class="line"><a id="l01590" name="l01590"></a><span class="lineno"> 1590</span> rs = env.rpc(</div>
<div class="line"><a id="l01591" name="l01591"></a><span class="lineno"> 1591</span> <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a id="l01592" name="l01592"></a><span class="lineno"> 1592</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>,</div>
<div class="line"><a id="l01593" name="l01593"></a><span class="lineno"> 1593</span> args.toStyledString())[jss::result];</div>
<div class="line"><a id="l01594" name="l01594"></a><span class="lineno"> 1594</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;invalidParams&quot;</span>);</div>
<div class="line"><a id="l01595" name="l01595"></a><span class="lineno"> 1595</span> }</div>
<div class="line"><a id="l01596" name="l01596"></a><span class="lineno"> 1596</span> {</div>
<div class="line"><a id="l01597" name="l01597"></a><span class="lineno"> 1597</span> <span class="comment">// Both passphrase and seed specified.</span></div>
<div class="line"><a id="l01598" name="l01598"></a><span class="lineno"> 1598</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> args{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l01599" name="l01599"></a><span class="lineno"> 1599</span> args[jss::amount] = <span class="stringliteral">&quot;2000&quot;</span>;</div>
<div class="line"><a id="l01600" name="l01600"></a><span class="lineno"> 1600</span> args[jss::channel_id] = chan1Str;</div>
<div class="line"><a id="l01601" name="l01601"></a><span class="lineno"> 1601</span> args[jss::key_type] = <span class="stringliteral">&quot;secp256k1&quot;</span>;</div>
<div class="line"><a id="l01602" name="l01602"></a><span class="lineno"> 1602</span> args[jss::passphrase] = <span class="stringliteral">&quot;passphrase_can_be_anything&quot;</span>;</div>
<div class="line"><a id="l01603" name="l01603"></a><span class="lineno"> 1603</span> args[jss::seed] = <span class="stringliteral">&quot;seed can be anything&quot;</span>;</div>
<div class="line"><a id="l01604" name="l01604"></a><span class="lineno"> 1604</span> rs = env.rpc(</div>
<div class="line"><a id="l01605" name="l01605"></a><span class="lineno"> 1605</span> <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a id="l01606" name="l01606"></a><span class="lineno"> 1606</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>,</div>
<div class="line"><a id="l01607" name="l01607"></a><span class="lineno"> 1607</span> args.toStyledString())[jss::result];</div>
<div class="line"><a id="l01608" name="l01608"></a><span class="lineno"> 1608</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;invalidParams&quot;</span>);</div>
<div class="line"><a id="l01609" name="l01609"></a><span class="lineno"> 1609</span> }</div>
<div class="line"><a id="l01610" name="l01610"></a><span class="lineno"> 1610</span> {</div>
<div class="line"><a id="l01611" name="l01611"></a><span class="lineno"> 1611</span> <span class="comment">// channel_id is not exact hex.</span></div>
<div class="line"><a id="l01612" name="l01612"></a><span class="lineno"> 1612</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> args{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l01613" name="l01613"></a><span class="lineno"> 1613</span> args[jss::amount] = <span class="stringliteral">&quot;2000&quot;</span>;</div>
<div class="line"><a id="l01614" name="l01614"></a><span class="lineno"> 1614</span> args[jss::channel_id] = chan1Str + <span class="stringliteral">&quot;1&quot;</span>;</div>
<div class="line"><a id="l01615" name="l01615"></a><span class="lineno"> 1615</span> args[jss::key_type] = <span class="stringliteral">&quot;secp256k1&quot;</span>;</div>
<div class="line"><a id="l01616" name="l01616"></a><span class="lineno"> 1616</span> args[jss::passphrase] = <span class="stringliteral">&quot;passphrase_can_be_anything&quot;</span>;</div>
<div class="line"><a id="l01617" name="l01617"></a><span class="lineno"> 1617</span> rs = env.rpc(</div>
<div class="line"><a id="l01618" name="l01618"></a><span class="lineno"> 1618</span> <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a id="l01619" name="l01619"></a><span class="lineno"> 1619</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>,</div>
<div class="line"><a id="l01620" name="l01620"></a><span class="lineno"> 1620</span> args.toStyledString())[jss::result];</div>
<div class="line"><a id="l01621" name="l01621"></a><span class="lineno"> 1621</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;channelMalformed&quot;</span>);</div>
<div class="line"><a id="l01622" name="l01622"></a><span class="lineno"> 1622</span> }</div>
<div class="line"><a id="l01623" name="l01623"></a><span class="lineno"> 1623</span> {</div>
<div class="line"><a id="l01624" name="l01624"></a><span class="lineno"> 1624</span> <span class="comment">// amount is not a string</span></div>
<div class="line"><a id="l01625" name="l01625"></a><span class="lineno"> 1625</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> args{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l01626" name="l01626"></a><span class="lineno"> 1626</span> args[jss::amount] = 2000;</div>
<div class="line"><a id="l01627" name="l01627"></a><span class="lineno"> 1627</span> args[jss::channel_id] = chan1Str;</div>
<div class="line"><a id="l01628" name="l01628"></a><span class="lineno"> 1628</span> args[jss::key_type] = <span class="stringliteral">&quot;secp256k1&quot;</span>;</div>
<div class="line"><a id="l01629" name="l01629"></a><span class="lineno"> 1629</span> args[jss::passphrase] = <span class="stringliteral">&quot;passphrase_can_be_anything&quot;</span>;</div>
<div class="line"><a id="l01630" name="l01630"></a><span class="lineno"> 1630</span> rs = env.rpc(</div>
<div class="line"><a id="l01631" name="l01631"></a><span class="lineno"> 1631</span> <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a id="l01632" name="l01632"></a><span class="lineno"> 1632</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>,</div>
<div class="line"><a id="l01633" name="l01633"></a><span class="lineno"> 1633</span> args.toStyledString())[jss::result];</div>
<div class="line"><a id="l01634" name="l01634"></a><span class="lineno"> 1634</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01635" name="l01635"></a><span class="lineno"> 1635</span> }</div>
<div class="line"><a id="l01636" name="l01636"></a><span class="lineno"> 1636</span> {</div>
<div class="line"><a id="l01637" name="l01637"></a><span class="lineno"> 1637</span> <span class="comment">// Amount is not a decimal string.</span></div>
<div class="line"><a id="l01638" name="l01638"></a><span class="lineno"> 1638</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> args{<a class="code hl_enumvalue" href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eae8386dcfc36d1ae897745f7b4f77a1f6">Json::objectValue</a>};</div>
<div class="line"><a id="l01639" name="l01639"></a><span class="lineno"> 1639</span> args[jss::amount] = <span class="stringliteral">&quot;TwoThousand&quot;</span>;</div>
<div class="line"><a id="l01640" name="l01640"></a><span class="lineno"> 1640</span> args[jss::channel_id] = chan1Str;</div>
<div class="line"><a id="l01641" name="l01641"></a><span class="lineno"> 1641</span> args[jss::key_type] = <span class="stringliteral">&quot;secp256k1&quot;</span>;</div>
<div class="line"><a id="l01642" name="l01642"></a><span class="lineno"> 1642</span> args[jss::passphrase] = <span class="stringliteral">&quot;passphrase_can_be_anything&quot;</span>;</div>
<div class="line"><a id="l01643" name="l01643"></a><span class="lineno"> 1643</span> rs = env.rpc(</div>
<div class="line"><a id="l01644" name="l01644"></a><span class="lineno"> 1644</span> <span class="stringliteral">&quot;json&quot;</span>,</div>
<div class="line"><a id="l01645" name="l01645"></a><span class="lineno"> 1645</span> <span class="stringliteral">&quot;channel_authorize&quot;</span>,</div>
<div class="line"><a id="l01646" name="l01646"></a><span class="lineno"> 1646</span> args.toStyledString())[jss::result];</div>
<div class="line"><a id="l01647" name="l01647"></a><span class="lineno"> 1647</span> BEAST_EXPECT(rs[jss::error] == <span class="stringliteral">&quot;channelAmtMalformed&quot;</span>);</div>
<div class="line"><a id="l01648" name="l01648"></a><span class="lineno"> 1648</span> }</div>
<div class="line"><a id="l01649" name="l01649"></a><span class="lineno"> 1649</span> }</div>
<div class="line"><a id="l01650" name="l01650"></a><span class="lineno"> 1650</span> }</div>
</div>
<div class="line"><a id="l01651" name="l01651"></a><span class="lineno"> 1651</span> </div>
<div class="line"><a id="l01652" name="l01652"></a><span class="lineno"> 1652</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01653" data-start="{" data-end="}">
<div class="line"><a id="l01653" name="l01653"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#afffed40d484241b375229e26513d75a1"> 1653</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afffed40d484241b375229e26513d75a1">testOptionalFields</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01654" name="l01654"></a><span class="lineno"> 1654</span> {</div>
<div class="line"><a id="l01655" name="l01655"></a><span class="lineno"> 1655</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Optional Fields&quot;</span>);</div>
<div class="line"><a id="l01656" name="l01656"></a><span class="lineno"> 1656</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01657" name="l01657"></a><span class="lineno"> 1657</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l01658" name="l01658"></a><span class="lineno"> 1658</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01659" name="l01659"></a><span class="lineno"> 1659</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01660" name="l01660"></a><span class="lineno"> 1660</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01661" name="l01661"></a><span class="lineno"> 1661</span> <span class="keyword">auto</span> <span class="keyword">const</span> carol = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;carol&quot;</span>);</div>
<div class="line"><a id="l01662" name="l01662"></a><span class="lineno"> 1662</span> <span class="keyword">auto</span> <span class="keyword">const</span> dan = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;dan&quot;</span>);</div>
<div class="line"><a id="l01663" name="l01663"></a><span class="lineno"> 1663</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, carol, dan);</div>
<div class="line"><a id="l01664" name="l01664"></a><span class="lineno"> 1664</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l01665" name="l01665"></a><span class="lineno"> 1665</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 3600s;</div>
<div class="line"><a id="l01666" name="l01666"></a><span class="lineno"> 1666</span> <span class="keyword">auto</span> <span class="keyword">const</span> channelFunds = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</div>
<div class="line"><a id="l01667" name="l01667"></a><span class="lineno"> 1667</span> </div>
<div class="line"><a id="l01668" name="l01668"></a><span class="lineno"> 1668</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;NetClock::time_point&gt;</a> cancelAfter;</div>
<div class="line"><a id="l01669" name="l01669"></a><span class="lineno"> 1669</span> </div>
<div class="line"><a id="l01670" name="l01670"></a><span class="lineno"> 1670</span> {</div>
<div class="line"><a id="l01671" name="l01671"></a><span class="lineno"> 1671</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice)));</div>
<div class="line"><a id="l01672" name="l01672"></a><span class="lineno"> 1672</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, channelFunds, settleDelay, pk));</div>
<div class="line"><a id="l01673" name="l01673"></a><span class="lineno"> 1673</span> <span class="keyword">auto</span> <span class="keyword">const</span> r =</div>
<div class="line"><a id="l01674" name="l01674"></a><span class="lineno"> 1674</span> env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, alice.human(), bob.human());</div>
<div class="line"><a id="l01675" name="l01675"></a><span class="lineno"> 1675</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 1);</div>
<div class="line"><a id="l01676" name="l01676"></a><span class="lineno"> 1676</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01677" name="l01677"></a><span class="lineno"> 1677</span> r[jss::result][jss::channels][0u][jss::channel_id] == chan);</div>
<div class="line"><a id="l01678" name="l01678"></a><span class="lineno"> 1678</span> BEAST_EXPECT(!r[jss::result][jss::channels][0u].isMember(</div>
<div class="line"><a id="l01679" name="l01679"></a><span class="lineno"> 1679</span> jss::destination_tag));</div>
<div class="line"><a id="l01680" name="l01680"></a><span class="lineno"> 1680</span> }</div>
<div class="line"><a id="l01681" name="l01681"></a><span class="lineno"> 1681</span> {</div>
<div class="line"><a id="l01682" name="l01682"></a><span class="lineno"> 1682</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> dstTag = 42;</div>
<div class="line"><a id="l01683" name="l01683"></a><span class="lineno"> 1683</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, carol, env.seq(alice)));</div>
<div class="line"><a id="l01684" name="l01684"></a><span class="lineno"> 1684</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(</div>
<div class="line"><a id="l01685" name="l01685"></a><span class="lineno"> 1685</span> alice,</div>
<div class="line"><a id="l01686" name="l01686"></a><span class="lineno"> 1686</span> carol,</div>
<div class="line"><a id="l01687" name="l01687"></a><span class="lineno"> 1687</span> channelFunds,</div>
<div class="line"><a id="l01688" name="l01688"></a><span class="lineno"> 1688</span> settleDelay,</div>
<div class="line"><a id="l01689" name="l01689"></a><span class="lineno"> 1689</span> pk,</div>
<div class="line"><a id="l01690" name="l01690"></a><span class="lineno"> 1690</span> cancelAfter,</div>
<div class="line"><a id="l01691" name="l01691"></a><span class="lineno"> 1691</span> dstTag));</div>
<div class="line"><a id="l01692" name="l01692"></a><span class="lineno"> 1692</span> <span class="keyword">auto</span> <span class="keyword">const</span> r =</div>
<div class="line"><a id="l01693" name="l01693"></a><span class="lineno"> 1693</span> env.rpc(<span class="stringliteral">&quot;account_channels&quot;</span>, alice.human(), carol.human());</div>
<div class="line"><a id="l01694" name="l01694"></a><span class="lineno"> 1694</span> BEAST_EXPECT(r[jss::result][jss::channels].size() == 1);</div>
<div class="line"><a id="l01695" name="l01695"></a><span class="lineno"> 1695</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01696" name="l01696"></a><span class="lineno"> 1696</span> r[jss::result][jss::channels][0u][jss::channel_id] == chan);</div>
<div class="line"><a id="l01697" name="l01697"></a><span class="lineno"> 1697</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01698" name="l01698"></a><span class="lineno"> 1698</span> r[jss::result][jss::channels][0u][jss::destination_tag] ==</div>
<div class="line"><a id="l01699" name="l01699"></a><span class="lineno"> 1699</span> dstTag);</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> }</div>
</div>
<div class="line"><a id="l01702" name="l01702"></a><span class="lineno"> 1702</span> </div>
<div class="line"><a id="l01703" name="l01703"></a><span class="lineno"> 1703</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01704" data-start="{" data-end="}">
<div class="line"><a id="l01704" name="l01704"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a9b774e4f432bf7999d9b116c81315d51"> 1704</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a9b774e4f432bf7999d9b116c81315d51">testMalformedPK</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01705" name="l01705"></a><span class="lineno"> 1705</span> {</div>
<div class="line"><a id="l01706" name="l01706"></a><span class="lineno"> 1706</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;malformed pk&quot;</span>);</div>
<div class="line"><a id="l01707" name="l01707"></a><span class="lineno"> 1707</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01708" name="l01708"></a><span class="lineno"> 1708</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l01709" name="l01709"></a><span class="lineno"> 1709</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</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> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01711" name="l01711"></a><span class="lineno"> 1711</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01712" name="l01712"></a><span class="lineno"> 1712</span> <span class="keyword">auto</span> USDA = alice[<span class="stringliteral">&quot;USD&quot;</span>];</div>
<div class="line"><a id="l01713" name="l01713"></a><span class="lineno"> 1713</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l01714" name="l01714"></a><span class="lineno"> 1714</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l01715" name="l01715"></a><span class="lineno"> 1715</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l01716" name="l01716"></a><span class="lineno"> 1716</span> </div>
<div class="line"><a id="l01717" name="l01717"></a><span class="lineno"> 1717</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.seq(alice));</div>
<div class="line"><a id="l01718" name="l01718"></a><span class="lineno"> 1718</span> <span class="keyword">auto</span> jv = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk);</div>
<div class="line"><a id="l01719" name="l01719"></a><span class="lineno"> 1719</span> <span class="keyword">auto</span> <span class="keyword">const</span> pkHex = <a class="code hl_function" href="namespaceripple.html#a86e358ce3f06ff049af13c2342791cf8">strHex</a>(pk.slice());</div>
<div class="line"><a id="l01720" name="l01720"></a><span class="lineno"> 1720</span> jv[<span class="stringliteral">&quot;PublicKey&quot;</span>] = pkHex.substr(2, pkHex.size() - 2);</div>
<div class="line"><a id="l01721" name="l01721"></a><span class="lineno"> 1721</span> env(jv, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">temMALFORMED</a>));</div>
<div class="line"><a id="l01722" name="l01722"></a><span class="lineno"> 1722</span> jv[<span class="stringliteral">&quot;PublicKey&quot;</span>] = pkHex.substr(0, pkHex.size() - 2);</div>
<div class="line"><a id="l01723" name="l01723"></a><span class="lineno"> 1723</span> env(jv, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">temMALFORMED</a>));</div>
<div class="line"><a id="l01724" name="l01724"></a><span class="lineno"> 1724</span> <span class="keyword">auto</span> badPrefix = pkHex;</div>
<div class="line"><a id="l01725" name="l01725"></a><span class="lineno"> 1725</span> badPrefix[0] = <span class="charliteral">&#39;f&#39;</span>;</div>
<div class="line"><a id="l01726" name="l01726"></a><span class="lineno"> 1726</span> badPrefix[1] = <span class="charliteral">&#39;f&#39;</span>;</div>
<div class="line"><a id="l01727" name="l01727"></a><span class="lineno"> 1727</span> jv[<span class="stringliteral">&quot;PublicKey&quot;</span>] = badPrefix;</div>
<div class="line"><a id="l01728" name="l01728"></a><span class="lineno"> 1728</span> env(jv, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">temMALFORMED</a>));</div>
<div class="line"><a id="l01729" name="l01729"></a><span class="lineno"> 1729</span> </div>
<div class="line"><a id="l01730" name="l01730"></a><span class="lineno"> 1730</span> jv[<span class="stringliteral">&quot;PublicKey&quot;</span>] = pkHex;</div>
<div class="line"><a id="l01731" name="l01731"></a><span class="lineno"> 1731</span> env(jv);</div>
<div class="line"><a id="l01732" name="l01732"></a><span class="lineno"> 1732</span> </div>
<div class="line"><a id="l01733" name="l01733"></a><span class="lineno"> 1733</span> <span class="keyword">auto</span> <span class="keyword">const</span> authAmt = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100);</div>
<div class="line"><a id="l01734" name="l01734"></a><span class="lineno"> 1734</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, authAmt);</div>
<div class="line"><a id="l01735" name="l01735"></a><span class="lineno"> 1735</span> jv = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(</div>
<div class="line"><a id="l01736" name="l01736"></a><span class="lineno"> 1736</span> bob,</div>
<div class="line"><a id="l01737" name="l01737"></a><span class="lineno"> 1737</span> chan,</div>
<div class="line"><a id="l01738" name="l01738"></a><span class="lineno"> 1738</span> authAmt.value(),</div>
<div class="line"><a id="l01739" name="l01739"></a><span class="lineno"> 1739</span> authAmt.value(),</div>
<div class="line"><a id="l01740" name="l01740"></a><span class="lineno"> 1740</span> <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>),</div>
<div class="line"><a id="l01741" name="l01741"></a><span class="lineno"> 1741</span> alice.pk());</div>
<div class="line"><a id="l01742" name="l01742"></a><span class="lineno"> 1742</span> jv[<span class="stringliteral">&quot;PublicKey&quot;</span>] = pkHex.substr(2, pkHex.size() - 2);</div>
<div class="line"><a id="l01743" name="l01743"></a><span class="lineno"> 1743</span> env(jv, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">temMALFORMED</a>));</div>
<div class="line"><a id="l01744" name="l01744"></a><span class="lineno"> 1744</span> jv[<span class="stringliteral">&quot;PublicKey&quot;</span>] = pkHex.substr(0, pkHex.size() - 2);</div>
<div class="line"><a id="l01745" name="l01745"></a><span class="lineno"> 1745</span> env(jv, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">temMALFORMED</a>));</div>
<div class="line"><a id="l01746" name="l01746"></a><span class="lineno"> 1746</span> badPrefix = pkHex;</div>
<div class="line"><a id="l01747" name="l01747"></a><span class="lineno"> 1747</span> badPrefix[0] = <span class="charliteral">&#39;f&#39;</span>;</div>
<div class="line"><a id="l01748" name="l01748"></a><span class="lineno"> 1748</span> badPrefix[1] = <span class="charliteral">&#39;f&#39;</span>;</div>
<div class="line"><a id="l01749" name="l01749"></a><span class="lineno"> 1749</span> jv[<span class="stringliteral">&quot;PublicKey&quot;</span>] = badPrefix;</div>
<div class="line"><a id="l01750" name="l01750"></a><span class="lineno"> 1750</span> env(jv, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">temMALFORMED</a>));</div>
<div class="line"><a id="l01751" name="l01751"></a><span class="lineno"> 1751</span> </div>
<div class="line"><a id="l01752" name="l01752"></a><span class="lineno"> 1752</span> <span class="comment">// missing public key</span></div>
<div class="line"><a id="l01753" name="l01753"></a><span class="lineno"> 1753</span> jv.removeMember(<span class="stringliteral">&quot;PublicKey&quot;</span>);</div>
<div class="line"><a id="l01754" name="l01754"></a><span class="lineno"> 1754</span> env(jv, <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">temMALFORMED</a>));</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> {</div>
<div class="line"><a id="l01757" name="l01757"></a><span class="lineno"> 1757</span> <span class="keyword">auto</span> <span class="keyword">const</span> txn = R<span class="stringliteral">&quot;*(</span></div>
<div class="line"><a id="l01758" name="l01758"></a><span class="lineno"> 1758</span><span class="stringliteral"> {</span></div>
<div class="line"><a id="l01759" name="l01759"></a><span class="lineno"> 1759</span><span class="stringliteral"></span> </div>
<div class="line"><a id="l01760" name="l01760"></a><span class="lineno"> 1760</span><span class="stringliteral"> &quot;channel_id&quot;:&quot;5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3&quot;,</span></div>
<div class="line"><a id="l01761" name="l01761"></a><span class="lineno"> 1761</span><span class="stringliteral"> &quot;signature&quot;:</span></div>
<div class="line"><a id="l01762" name="l01762"></a><span class="lineno"> 1762</span><span class="stringliteral"> &quot;304402204EF0AFB78AC23ED1C472E74F4299C0C21F1B21D07EFC0A3838A420F76D783A400220154FB11B6F54320666E4C36CA7F686C16A3A0456800BBC43746F34AF50290064&quot;,</span></div>
<div class="line"><a id="l01763" name="l01763"></a><span class="lineno"> 1763</span><span class="stringliteral"> &quot;public_key&quot;:</span></div>
<div class="line"><a id="l01764" name="l01764"></a><span class="lineno"> 1764</span><span class="stringliteral"> &quot;aKijDDiC2q2gXjMpM7i4BUS6cmixgsEe18e7CjsUxwihKfuoFgS5&quot;,</span></div>
<div class="line"><a id="l01765" name="l01765"></a><span class="lineno"> 1765</span><span class="stringliteral"> &quot;amount&quot;: &quot;1000000&quot;</span></div>
<div class="line"><a id="l01766" name="l01766"></a><span class="lineno"> 1766</span><span class="stringliteral"> }</span></div>
<div class="line"><a id="l01767" name="l01767"></a><span class="lineno"> 1767</span><span class="stringliteral"> )*&quot;;</span></div>
<div class="line"><a id="l01768" name="l01768"></a><span class="lineno"> 1768</span><span class="stringliteral"> </span><span class="keyword">auto</span> <span class="keyword">const</span> r = env.rpc(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;channel_verify&quot;</span>, txn);</div>
<div class="line"><a id="l01769" name="l01769"></a><span class="lineno"> 1769</span> BEAST_EXPECT(r[<span class="stringliteral">&quot;result&quot;</span>][<span class="stringliteral">&quot;error&quot;</span>] == <span class="stringliteral">&quot;publicMalformed&quot;</span>);</div>
<div class="line"><a id="l01770" name="l01770"></a><span class="lineno"> 1770</span> }</div>
<div class="line"><a id="l01771" name="l01771"></a><span class="lineno"> 1771</span> }</div>
</div>
<div class="line"><a id="l01772" name="l01772"></a><span class="lineno"> 1772</span> </div>
<div class="line"><a id="l01773" name="l01773"></a><span class="lineno"> 1773</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01774" data-start="{" data-end="}">
<div class="line"><a id="l01774" name="l01774"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a8c1e8dff93e990d8252c641e91b11be4"> 1774</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a8c1e8dff93e990d8252c641e91b11be4">testMetaAndOwnership</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</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> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Metadata &amp; Ownership&quot;</span>);</div>
<div class="line"><a id="l01777" name="l01777"></a><span class="lineno"> 1777</span> </div>
<div class="line"><a id="l01778" name="l01778"></a><span class="lineno"> 1778</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01779" name="l01779"></a><span class="lineno"> 1779</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l01780" name="l01780"></a><span class="lineno"> 1780</span> </div>
<div class="line"><a id="l01781" name="l01781"></a><span class="lineno"> 1781</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01782" name="l01782"></a><span class="lineno"> 1782</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01783" name="l01783"></a><span class="lineno"> 1783</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l01784" name="l01784"></a><span class="lineno"> 1784</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</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="keyword">auto</span> inOwnerDir = [](<a class="code hl_class" href="classripple_1_1ReadView.html">ReadView</a> <span class="keyword">const</span>&amp; view,</div>
<div class="line"><a id="l01787" name="l01787"></a><span class="lineno"> 1787</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; acc,</div>
<div class="line"><a id="l01788" name="l01788"></a><span class="lineno"> 1788</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE const&gt;</a> <span class="keyword">const</span>&amp; chan) -&gt; <span class="keywordtype">bool</span> {</div>
<div class="line"><a id="l01789" name="l01789"></a><span class="lineno"> 1789</span> <a class="code hl_class" href="classripple_1_1Dir.html">ripple::Dir</a> <span class="keyword">const</span> ownerDir(view, <a class="code hl_function" href="namespaceripple_1_1keylet.html#acd4d51d467fc6e75745baf179a7965ef">keylet::ownerDir</a>(acc.id()));</div>
<div class="line"><a id="l01790" name="l01790"></a><span class="lineno"> 1790</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find</a>(ownerDir.begin(), ownerDir.end(), chan) !=</div>
<div class="line"><a id="l01791" name="l01791"></a><span class="lineno"> 1791</span> ownerDir.end();</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> </div>
<div class="line"><a id="l01794" name="l01794"></a><span class="lineno"> 1794</span> <span class="keyword">auto</span> ownerDirCount = [](<a class="code hl_class" href="classripple_1_1ReadView.html">ReadView</a> <span class="keyword">const</span>&amp; view,</div>
<div class="line"><a id="l01795" name="l01795"></a><span class="lineno"> 1795</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; acc) -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/size_t.html">std::size_t</a> {</div>
<div class="line"><a id="l01796" name="l01796"></a><span class="lineno"> 1796</span> <a class="code hl_class" href="classripple_1_1Dir.html">ripple::Dir</a> <span class="keyword">const</span> ownerDir(view, <a class="code hl_function" href="namespaceripple_1_1keylet.html#acd4d51d467fc6e75745baf179a7965ef">keylet::ownerDir</a>(acc.id()));</div>
<div class="line"><a id="l01797" name="l01797"></a><span class="lineno"> 1797</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/iterator/distance.html">std::distance</a>(ownerDir.begin(), ownerDir.end());</div>
<div class="line"><a id="l01798" name="l01798"></a><span class="lineno"> 1798</span> };</div>
<div class="line"><a id="l01799" name="l01799"></a><span class="lineno"> 1799</span> </div>
<div class="line"><a id="l01800" name="l01800"></a><span class="lineno"> 1800</span> {</div>
<div class="line"><a id="l01801" name="l01801"></a><span class="lineno"> 1801</span> <span class="comment">// Test with adding the paychan to the recipient&#39;s owner directory</span></div>
<div class="line"><a id="l01802" name="l01802"></a><span class="lineno"> 1802</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01803" name="l01803"></a><span class="lineno"> 1803</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l01804" name="l01804"></a><span class="lineno"> 1804</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk));</div>
<div class="line"><a id="l01805" name="l01805"></a><span class="lineno"> 1805</span> env.close();</div>
<div class="line"><a id="l01806" name="l01806"></a><span class="lineno"> 1806</span> <span class="keyword">auto</span> <span class="keyword">const</span> [chan, chanSle] =</div>
<div class="line"><a id="l01807" name="l01807"></a><span class="lineno"> 1807</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a11451c0e44c2b6cb8b761613d47427b5">channelKeyAndSle</a>(*env.current(), alice, bob);</div>
<div class="line"><a id="l01808" name="l01808"></a><span class="lineno"> 1808</span> BEAST_EXPECT(inOwnerDir(*env.current(), alice, chanSle));</div>
<div class="line"><a id="l01809" name="l01809"></a><span class="lineno"> 1809</span> BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 1);</div>
<div class="line"><a id="l01810" name="l01810"></a><span class="lineno"> 1810</span> BEAST_EXPECT(inOwnerDir(*env.current(), bob, chanSle));</div>
<div class="line"><a id="l01811" name="l01811"></a><span class="lineno"> 1811</span> BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 1);</div>
<div class="line"><a id="l01812" name="l01812"></a><span class="lineno"> 1812</span> <span class="comment">// close the channel</span></div>
<div class="line"><a id="l01813" name="l01813"></a><span class="lineno"> 1813</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l01814" name="l01814"></a><span class="lineno"> 1814</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l01815" name="l01815"></a><span class="lineno"> 1815</span> BEAST_EXPECT(!inOwnerDir(*env.current(), alice, chanSle));</div>
<div class="line"><a id="l01816" name="l01816"></a><span class="lineno"> 1816</span> BEAST_EXPECT(ownerDirCount(*env.current(), alice) == 0);</div>
<div class="line"><a id="l01817" name="l01817"></a><span class="lineno"> 1817</span> BEAST_EXPECT(!inOwnerDir(*env.current(), bob, chanSle));</div>
<div class="line"><a id="l01818" name="l01818"></a><span class="lineno"> 1818</span> BEAST_EXPECT(ownerDirCount(*env.current(), bob) == 0);</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> </div>
<div class="line"><a id="l01821" name="l01821"></a><span class="lineno"> 1821</span> {</div>
<div class="line"><a id="l01822" name="l01822"></a><span class="lineno"> 1822</span> <span class="comment">// Test removing paychans created before adding to the recipient&#39;s</span></div>
<div class="line"><a id="l01823" name="l01823"></a><span class="lineno"> 1823</span> <span class="comment">// owner directory</span></div>
<div class="line"><a id="l01824" name="l01824"></a><span class="lineno"> 1824</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, features);</div>
<div class="line"><a id="l01825" name="l01825"></a><span class="lineno"> 1825</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">fund</a>(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</div>
<div class="line"><a id="l01826" name="l01826"></a><span class="lineno"> 1826</span> <span class="comment">// create the channel before the amendment activates</span></div>
<div class="line"><a id="l01827" name="l01827"></a><span class="lineno"> 1827</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk));</div>
<div class="line"><a id="l01828" name="l01828"></a><span class="lineno"> 1828</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l01829" name="l01829"></a><span class="lineno"> 1829</span> <span class="keyword">auto</span> <span class="keyword">const</span> [chan, chanSle] =</div>
<div class="line"><a id="l01830" name="l01830"></a><span class="lineno"> 1830</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a11451c0e44c2b6cb8b761613d47427b5">channelKeyAndSle</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), alice, bob);</div>
<div class="line"><a id="l01831" name="l01831"></a><span class="lineno"> 1831</span> BEAST_EXPECT(inOwnerDir(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), alice, chanSle));</div>
<div class="line"><a id="l01832" name="l01832"></a><span class="lineno"> 1832</span> BEAST_EXPECT(ownerDirCount(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), alice) == 1);</div>
<div class="line"><a id="l01833" name="l01833"></a><span class="lineno"> 1833</span> BEAST_EXPECT(inOwnerDir(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), bob, chanSle));</div>
<div class="line"><a id="l01834" name="l01834"></a><span class="lineno"> 1834</span> BEAST_EXPECT(ownerDirCount(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), bob) == 1);</div>
<div class="line"><a id="l01835" name="l01835"></a><span class="lineno"> 1835</span> </div>
<div class="line"><a id="l01836" name="l01836"></a><span class="lineno"> 1836</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l01837" name="l01837"></a><span class="lineno"> 1837</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan));</div>
<div class="line"><a id="l01838" name="l01838"></a><span class="lineno"> 1838</span> BEAST_EXPECT(!inOwnerDir(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), alice, chanSle));</div>
<div class="line"><a id="l01839" name="l01839"></a><span class="lineno"> 1839</span> BEAST_EXPECT(ownerDirCount(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), alice) == 0);</div>
<div class="line"><a id="l01840" name="l01840"></a><span class="lineno"> 1840</span> BEAST_EXPECT(!inOwnerDir(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), bob, chanSle));</div>
<div class="line"><a id="l01841" name="l01841"></a><span class="lineno"> 1841</span> BEAST_EXPECT(ownerDirCount(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), bob) == 0);</div>
<div class="line"><a id="l01842" name="l01842"></a><span class="lineno"> 1842</span> }</div>
<div class="line"><a id="l01843" name="l01843"></a><span class="lineno"> 1843</span> }</div>
</div>
<div class="line"><a id="l01844" name="l01844"></a><span class="lineno"> 1844</span> </div>
<div class="line"><a id="l01845" name="l01845"></a><span class="lineno"> 1845</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01846" data-start="{" data-end="}">
<div class="line"><a id="l01846" name="l01846"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a723a3d54ce62a8d06787a17a932fbf9d"> 1846</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a723a3d54ce62a8d06787a17a932fbf9d">testAccountDelete</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01847" name="l01847"></a><span class="lineno"> 1847</span> {</div>
<div class="line"><a id="l01848" name="l01848"></a><span class="lineno"> 1848</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Account Delete&quot;</span>);</div>
<div class="line"><a id="l01849" name="l01849"></a><span class="lineno"> 1849</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l01850" name="l01850"></a><span class="lineno"> 1850</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l01851" name="l01851"></a><span class="lineno"> 1851</span> <span class="keyword">auto</span> rmAccount = [<span class="keyword">this</span>](</div>
<div class="line"><a id="l01852" name="l01852"></a><span class="lineno"> 1852</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a>&amp; env,</div>
<div class="line"><a id="l01853" name="l01853"></a><span class="lineno"> 1853</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; toRm,</div>
<div class="line"><a id="l01854" name="l01854"></a><span class="lineno"> 1854</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span>&amp; dst,</div>
<div class="line"><a id="l01855" name="l01855"></a><span class="lineno"> 1855</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a> expectedTer = <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a>) {</div>
<div class="line"><a id="l01856" name="l01856"></a><span class="lineno"> 1856</span> <span class="comment">// only allow an account to be deleted if the account&#39;s sequence</span></div>
<div class="line"><a id="l01857" name="l01857"></a><span class="lineno"> 1857</span> <span class="comment">// number is at least 256 less than the current ledger sequence</span></div>
<div class="line"><a id="l01858" name="l01858"></a><span class="lineno"> 1858</span> <span class="keywordflow">for</span> (<span class="keyword">auto</span> minRmSeq = env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(toRm) + 257;</div>
<div class="line"><a id="l01859" name="l01859"></a><span class="lineno"> 1859</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>()-&gt;seq() &lt; minRmSeq;</div>
<div class="line"><a id="l01860" name="l01860"></a><span class="lineno"> 1860</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>())</div>
<div class="line"><a id="l01861" name="l01861"></a><span class="lineno"> 1861</span> {</div>
<div class="line"><a id="l01862" name="l01862"></a><span class="lineno"> 1862</span> }</div>
<div class="line"><a id="l01863" name="l01863"></a><span class="lineno"> 1863</span> </div>
<div class="line"><a id="l01864" name="l01864"></a><span class="lineno"> 1864</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#ada147bbc773967de4235fc8ed1c89562">acctdelete</a>(toRm, dst),</div>
<div class="line"><a id="l01865" name="l01865"></a><span class="lineno"> 1865</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1fee.html">fee</a>(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a47271eb5e7eb9b5aada383ccfaf9c0cf">drops</a>(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>()-&gt;fees().increment)),</div>
<div class="line"><a id="l01866" name="l01866"></a><span class="lineno"> 1866</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(expectedTer));</div>
<div class="line"><a id="l01867" name="l01867"></a><span class="lineno"> 1867</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l01868" name="l01868"></a><span class="lineno"> 1868</span> this-&gt;BEAST_EXPECT(</div>
<div class="line"><a id="l01869" name="l01869"></a><span class="lineno"> 1869</span> <a class="code hl_function" href="namespaceripple.html#ab48d5d1c4e2695c12f705e9d85fa560d">isTesSuccess</a>(expectedTer) ==</div>
<div class="line"><a id="l01870" name="l01870"></a><span class="lineno"> 1870</span> !env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a14cbba5f53c931d433ce2e403bf692f4">closed</a>()-&gt;exists(<a class="code hl_function" href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">keylet::account</a>(toRm.id())));</div>
<div class="line"><a id="l01871" name="l01871"></a><span class="lineno"> 1871</span> };</div>
<div class="line"><a id="l01872" name="l01872"></a><span class="lineno"> 1872</span> </div>
<div class="line"><a id="l01873" name="l01873"></a><span class="lineno"> 1873</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01874" name="l01874"></a><span class="lineno"> 1874</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01875" name="l01875"></a><span class="lineno"> 1875</span> <span class="keyword">auto</span> <span class="keyword">const</span> carol = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;carol&quot;</span>);</div>
<div class="line"><a id="l01876" name="l01876"></a><span class="lineno"> 1876</span> </div>
<div class="line"><a id="l01877" name="l01877"></a><span class="lineno"> 1877</span> {</div>
<div class="line"><a id="l01878" name="l01878"></a><span class="lineno"> 1878</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01879" name="l01879"></a><span class="lineno"> 1879</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">fund</a>(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob, carol);</div>
<div class="line"><a id="l01880" name="l01880"></a><span class="lineno"> 1880</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</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="comment">// Create a channel from alice to bob</span></div>
<div class="line"><a id="l01883" name="l01883"></a><span class="lineno"> 1883</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l01884" name="l01884"></a><span class="lineno"> 1884</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l01885" name="l01885"></a><span class="lineno"> 1885</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice));</div>
<div class="line"><a id="l01886" name="l01886"></a><span class="lineno"> 1886</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk));</div>
<div class="line"><a id="l01887" name="l01887"></a><span class="lineno"> 1887</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l01888" name="l01888"></a><span class="lineno"> 1888</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan) == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(0));</div>
<div class="line"><a id="l01889" name="l01889"></a><span class="lineno"> 1889</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan) == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000));</div>
<div class="line"><a id="l01890" name="l01890"></a><span class="lineno"> 1890</span> </div>
<div class="line"><a id="l01891" name="l01891"></a><span class="lineno"> 1891</span> rmAccount(env, alice, carol, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caa7460a5fac26c1d8abef55b8c1129150">tecHAS_OBLIGATIONS</a>);</div>
<div class="line"><a id="l01892" name="l01892"></a><span class="lineno"> 1892</span> rmAccount(env, bob, carol, <a class="code hl_typedef" href="namespaceripple.html#adfb760bc3e4ccb79d5d4f6ecff2f1817">TER</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caa7460a5fac26c1d8abef55b8c1129150">tecHAS_OBLIGATIONS</a>));</div>
<div class="line"><a id="l01893" name="l01893"></a><span class="lineno"> 1893</span> </div>
<div class="line"><a id="l01894" name="l01894"></a><span class="lineno"> 1894</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>()-&gt;fees().base;</div>
<div class="line"><a id="l01895" name="l01895"></a><span class="lineno"> 1895</span> <span class="keyword">auto</span> chanBal = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan);</div>
<div class="line"><a id="l01896" name="l01896"></a><span class="lineno"> 1896</span> <span class="keyword">auto</span> chanAmt = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan);</div>
<div class="line"><a id="l01897" name="l01897"></a><span class="lineno"> 1897</span> BEAST_EXPECT(chanBal == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(0));</div>
<div class="line"><a id="l01898" name="l01898"></a><span class="lineno"> 1898</span> BEAST_EXPECT(chanAmt == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000));</div>
<div class="line"><a id="l01899" name="l01899"></a><span class="lineno"> 1899</span> </div>
<div class="line"><a id="l01900" name="l01900"></a><span class="lineno"> 1900</span> <span class="keyword">auto</span> preBob = env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#af09170466fd01f912527c64d7a34dc1e">balance</a>(bob);</div>
<div class="line"><a id="l01901" name="l01901"></a><span class="lineno"> 1901</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(50);</div>
<div class="line"><a id="l01902" name="l01902"></a><span class="lineno"> 1902</span> <span class="keyword">auto</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l01903" name="l01903"></a><span class="lineno"> 1903</span> <span class="keyword">auto</span> authAmt = reqBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100);</div>
<div class="line"><a id="l01904" name="l01904"></a><span class="lineno"> 1904</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l01905" name="l01905"></a><span class="lineno"> 1905</span> </div>
<div class="line"><a id="l01906" name="l01906"></a><span class="lineno"> 1906</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, reqBal, authAmt));</div>
<div class="line"><a id="l01907" name="l01907"></a><span class="lineno"> 1907</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l01908" name="l01908"></a><span class="lineno"> 1908</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan) == reqBal);</div>
<div class="line"><a id="l01909" name="l01909"></a><span class="lineno"> 1909</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan) == chanAmt);</div>
<div class="line"><a id="l01910" name="l01910"></a><span class="lineno"> 1910</span> BEAST_EXPECT(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#af09170466fd01f912527c64d7a34dc1e">balance</a>(bob) == preBob + delta);</div>
<div class="line"><a id="l01911" name="l01911"></a><span class="lineno"> 1911</span> chanBal = reqBal;</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> <span class="keyword">auto</span> <span class="keyword">const</span> preAlice = env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#af09170466fd01f912527c64d7a34dc1e">balance</a>(alice);</div>
<div class="line"><a id="l01914" name="l01914"></a><span class="lineno"> 1914</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)));</div>
<div class="line"><a id="l01915" name="l01915"></a><span class="lineno"> 1915</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l01916" name="l01916"></a><span class="lineno"> 1916</span> BEAST_EXPECT(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#af09170466fd01f912527c64d7a34dc1e">balance</a>(alice) == preAlice - <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000) - feeDrops);</div>
<div class="line"><a id="l01917" name="l01917"></a><span class="lineno"> 1917</span> BEAST_EXPECT(</div>
<div class="line"><a id="l01918" name="l01918"></a><span class="lineno"> 1918</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan) == chanAmt + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000));</div>
<div class="line"><a id="l01919" name="l01919"></a><span class="lineno"> 1919</span> chanAmt = chanAmt + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000);</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> {</div>
<div class="line"><a id="l01922" name="l01922"></a><span class="lineno"> 1922</span> <span class="comment">// Owner closes, will close after settleDelay</span></div>
<div class="line"><a id="l01923" name="l01923"></a><span class="lineno"> 1923</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l01924" name="l01924"></a><span class="lineno"> 1924</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>();</div>
<div class="line"><a id="l01925" name="l01925"></a><span class="lineno"> 1925</span> <span class="comment">// settle delay hasn&#39;t elapsed. Channels should exist.</span></div>
<div class="line"><a id="l01926" name="l01926"></a><span class="lineno"> 1926</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan));</div>
<div class="line"><a id="l01927" name="l01927"></a><span class="lineno"> 1927</span> <span class="keyword">auto</span> <span class="keyword">const</span> closeTime = env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>()-&gt;info().parentCloseTime;</div>
<div class="line"><a id="l01928" name="l01928"></a><span class="lineno"> 1928</span> <span class="keyword">auto</span> <span class="keyword">const</span> minExpiration = closeTime + settleDelay;</div>
<div class="line"><a id="l01929" name="l01929"></a><span class="lineno"> 1929</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">close</a>(minExpiration);</div>
<div class="line"><a id="l01930" name="l01930"></a><span class="lineno"> 1930</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>));</div>
<div class="line"><a id="l01931" name="l01931"></a><span class="lineno"> 1931</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">current</a>(), chan));</div>
<div class="line"><a id="l01932" name="l01932"></a><span class="lineno"> 1932</span> }</div>
<div class="line"><a id="l01933" name="l01933"></a><span class="lineno"> 1933</span> }</div>
<div class="line"><a id="l01934" name="l01934"></a><span class="lineno"> 1934</span> }</div>
</div>
<div class="line"><a id="l01935" name="l01935"></a><span class="lineno"> 1935</span> </div>
<div class="line"><a id="l01936" name="l01936"></a><span class="lineno"> 1936</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen01937" data-start="{" data-end="}">
<div class="line"><a id="l01937" name="l01937"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a2c018c1543e1cf3620b153118eb9dbf4"> 1937</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a2c018c1543e1cf3620b153118eb9dbf4">testUsingTickets</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01938" name="l01938"></a><span class="lineno"> 1938</span> {</div>
<div class="line"><a id="l01939" name="l01939"></a><span class="lineno"> 1939</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;using tickets&quot;</span>);</div>
<div class="line"><a id="l01940" name="l01940"></a><span class="lineno"> 1940</span> <span class="keyword">using namespace </span>jtx;</div>
<div class="line"><a id="l01941" name="l01941"></a><span class="lineno"> 1941</span> <span class="keyword">using namespace </span><a class="code hl_namespaceRef" href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a>;</div>
<div class="line"><a id="l01942" name="l01942"></a><span class="lineno"> 1942</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, features};</div>
<div class="line"><a id="l01943" name="l01943"></a><span class="lineno"> 1943</span> <span class="keyword">auto</span> <span class="keyword">const</span> alice = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;alice&quot;</span>);</div>
<div class="line"><a id="l01944" name="l01944"></a><span class="lineno"> 1944</span> <span class="keyword">auto</span> <span class="keyword">const</span> bob = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a>(<span class="stringliteral">&quot;bob&quot;</span>);</div>
<div class="line"><a id="l01945" name="l01945"></a><span class="lineno"> 1945</span> <span class="keyword">auto</span> USDA = alice[<span class="stringliteral">&quot;USD&quot;</span>];</div>
<div class="line"><a id="l01946" name="l01946"></a><span class="lineno"> 1946</span> env.fund(<a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(10000), alice, bob);</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">// alice and bob grab enough tickets for all of the following</span></div>
<div class="line"><a id="l01949" name="l01949"></a><span class="lineno"> 1949</span> <span class="comment">// transactions. Note that once the tickets are acquired alice&#39;s</span></div>
<div class="line"><a id="l01950" name="l01950"></a><span class="lineno"> 1950</span> <span class="comment">// and bob&#39;s account sequence numbers should not advance.</span></div>
<div class="line"><a id="l01951" name="l01951"></a><span class="lineno"> 1951</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> aliceTicketSeq{env.seq(alice) + 1};</div>
<div class="line"><a id="l01952" name="l01952"></a><span class="lineno"> 1952</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1ticket.html#a1e24650b39bab99fc665d9f80365cc27">ticket::create</a>(alice, 10));</div>
<div class="line"><a id="l01953" name="l01953"></a><span class="lineno"> 1953</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> aliceSeq{env.seq(alice)};</div>
<div class="line"><a id="l01954" name="l01954"></a><span class="lineno"> 1954</span> </div>
<div class="line"><a id="l01955" name="l01955"></a><span class="lineno"> 1955</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint32_t</a> bobTicketSeq{env.seq(bob) + 1};</div>
<div class="line"><a id="l01956" name="l01956"></a><span class="lineno"> 1956</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1ticket.html#a1e24650b39bab99fc665d9f80365cc27">ticket::create</a>(bob, 10));</div>
<div class="line"><a id="l01957" name="l01957"></a><span class="lineno"> 1957</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> bobSeq{env.seq(bob)};</div>
<div class="line"><a id="l01958" name="l01958"></a><span class="lineno"> 1958</span> </div>
<div class="line"><a id="l01959" name="l01959"></a><span class="lineno"> 1959</span> <span class="keyword">auto</span> <span class="keyword">const</span> pk = alice.pk();</div>
<div class="line"><a id="l01960" name="l01960"></a><span class="lineno"> 1960</span> <span class="keyword">auto</span> <span class="keyword">const</span> settleDelay = 100s;</div>
<div class="line"><a id="l01961" name="l01961"></a><span class="lineno"> 1961</span> <span class="keyword">auto</span> <span class="keyword">const</span> chan = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">channel</a>(alice, bob, aliceTicketSeq);</div>
<div class="line"><a id="l01962" name="l01962"></a><span class="lineno"> 1962</span> </div>
<div class="line"><a id="l01963" name="l01963"></a><span class="lineno"> 1963</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">create</a>(alice, bob, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000), settleDelay, pk),</div>
<div class="line"><a id="l01964" name="l01964"></a><span class="lineno"> 1964</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ticket_1_1use.html">ticket::use</a>(aliceTicketSeq++));</div>
<div class="line"><a id="l01965" name="l01965"></a><span class="lineno"> 1965</span> </div>
<div class="line"><a id="l01966" name="l01966"></a><span class="lineno"> 1966</span> env.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(alice, env.seq(alice) - aliceTicketSeq));</div>
<div class="line"><a id="l01967" name="l01967"></a><span class="lineno"> 1967</span> BEAST_EXPECT(env.seq(alice) == aliceSeq);</div>
<div class="line"><a id="l01968" name="l01968"></a><span class="lineno"> 1968</span> </div>
<div class="line"><a id="l01969" name="l01969"></a><span class="lineno"> 1969</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(0));</div>
<div class="line"><a id="l01970" name="l01970"></a><span class="lineno"> 1970</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000));</div>
<div class="line"><a id="l01971" name="l01971"></a><span class="lineno"> 1971</span> </div>
<div class="line"><a id="l01972" name="l01972"></a><span class="lineno"> 1972</span> {</div>
<div class="line"><a id="l01973" name="l01973"></a><span class="lineno"> 1973</span> <span class="keyword">auto</span> <span class="keyword">const</span> preAlice = env.balance(alice);</div>
<div class="line"><a id="l01974" name="l01974"></a><span class="lineno"> 1974</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(alice, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ticket_1_1use.html">ticket::use</a>(aliceTicketSeq++));</div>
<div class="line"><a id="l01975" name="l01975"></a><span class="lineno"> 1975</span> </div>
<div class="line"><a id="l01976" name="l01976"></a><span class="lineno"> 1976</span> env.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(alice, env.seq(alice) - aliceTicketSeq));</div>
<div class="line"><a id="l01977" name="l01977"></a><span class="lineno"> 1977</span> BEAST_EXPECT(env.seq(alice) == aliceSeq);</div>
<div class="line"><a id="l01978" name="l01978"></a><span class="lineno"> 1978</span> </div>
<div class="line"><a id="l01979" name="l01979"></a><span class="lineno"> 1979</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l01980" name="l01980"></a><span class="lineno"> 1980</span> BEAST_EXPECT(env.balance(alice) == preAlice - <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000) - feeDrops);</div>
<div class="line"><a id="l01981" name="l01981"></a><span class="lineno"> 1981</span> }</div>
<div class="line"><a id="l01982" name="l01982"></a><span class="lineno"> 1982</span> </div>
<div class="line"><a id="l01983" name="l01983"></a><span class="lineno"> 1983</span> <span class="keyword">auto</span> chanBal = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan);</div>
<div class="line"><a id="l01984" name="l01984"></a><span class="lineno"> 1984</span> <span class="keyword">auto</span> chanAmt = <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan);</div>
<div class="line"><a id="l01985" name="l01985"></a><span class="lineno"> 1985</span> BEAST_EXPECT(chanBal == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(0));</div>
<div class="line"><a id="l01986" name="l01986"></a><span class="lineno"> 1986</span> BEAST_EXPECT(chanAmt == <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(2000));</div>
<div class="line"><a id="l01987" name="l01987"></a><span class="lineno"> 1987</span> </div>
<div class="line"><a id="l01988" name="l01988"></a><span class="lineno"> 1988</span> {</div>
<div class="line"><a id="l01989" name="l01989"></a><span class="lineno"> 1989</span> <span class="comment">// No signature needed since the owner is claiming</span></div>
<div class="line"><a id="l01990" name="l01990"></a><span class="lineno"> 1990</span> <span class="keyword">auto</span> <span class="keyword">const</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l01991" name="l01991"></a><span class="lineno"> 1991</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l01992" name="l01992"></a><span class="lineno"> 1992</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l01993" name="l01993"></a><span class="lineno"> 1993</span> <span class="keyword">auto</span> <span class="keyword">const</span> authAmt = reqBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100);</div>
<div class="line"><a id="l01994" name="l01994"></a><span class="lineno"> 1994</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l01995" name="l01995"></a><span class="lineno"> 1995</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(alice, chan, reqBal, authAmt),</div>
<div class="line"><a id="l01996" name="l01996"></a><span class="lineno"> 1996</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ticket_1_1use.html">ticket::use</a>(aliceTicketSeq++));</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> env.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(alice, env.seq(alice) - aliceTicketSeq));</div>
<div class="line"><a id="l01999" name="l01999"></a><span class="lineno"> 1999</span> BEAST_EXPECT(env.seq(alice) == aliceSeq);</div>
<div class="line"><a id="l02000" name="l02000"></a><span class="lineno"> 2000</span> </div>
<div class="line"><a id="l02001" name="l02001"></a><span class="lineno"> 2001</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == reqBal);</div>
<div class="line"><a id="l02002" name="l02002"></a><span class="lineno"> 2002</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l02003" name="l02003"></a><span class="lineno"> 2003</span> BEAST_EXPECT(env.balance(bob) == preBob + delta);</div>
<div class="line"><a id="l02004" name="l02004"></a><span class="lineno"> 2004</span> chanBal = reqBal;</div>
<div class="line"><a id="l02005" name="l02005"></a><span class="lineno"> 2005</span> }</div>
<div class="line"><a id="l02006" name="l02006"></a><span class="lineno"> 2006</span> {</div>
<div class="line"><a id="l02007" name="l02007"></a><span class="lineno"> 2007</span> <span class="comment">// Claim with signature</span></div>
<div class="line"><a id="l02008" name="l02008"></a><span class="lineno"> 2008</span> <span class="keyword">auto</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l02009" name="l02009"></a><span class="lineno"> 2009</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l02010" name="l02010"></a><span class="lineno"> 2010</span> <span class="keyword">auto</span> <span class="keyword">const</span> reqBal = chanBal + delta;</div>
<div class="line"><a id="l02011" name="l02011"></a><span class="lineno"> 2011</span> <span class="keyword">auto</span> <span class="keyword">const</span> authAmt = reqBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(100);</div>
<div class="line"><a id="l02012" name="l02012"></a><span class="lineno"> 2012</span> assert(reqBal &lt;= chanAmt);</div>
<div class="line"><a id="l02013" name="l02013"></a><span class="lineno"> 2013</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> =</div>
<div class="line"><a id="l02014" name="l02014"></a><span class="lineno"> 2014</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, authAmt);</div>
<div class="line"><a id="l02015" name="l02015"></a><span class="lineno"> 2015</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqBal, authAmt, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()),</div>
<div class="line"><a id="l02016" name="l02016"></a><span class="lineno"> 2016</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ticket_1_1use.html">ticket::use</a>(bobTicketSeq++));</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.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(bob, env.seq(bob) - bobTicketSeq));</div>
<div class="line"><a id="l02019" name="l02019"></a><span class="lineno"> 2019</span> BEAST_EXPECT(env.seq(bob) == bobSeq);</div>
<div class="line"><a id="l02020" name="l02020"></a><span class="lineno"> 2020</span> </div>
<div class="line"><a id="l02021" name="l02021"></a><span class="lineno"> 2021</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == reqBal);</div>
<div class="line"><a id="l02022" name="l02022"></a><span class="lineno"> 2022</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l02023" name="l02023"></a><span class="lineno"> 2023</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l02024" name="l02024"></a><span class="lineno"> 2024</span> BEAST_EXPECT(env.balance(bob) == preBob + delta - feeDrops);</div>
<div class="line"><a id="l02025" name="l02025"></a><span class="lineno"> 2025</span> chanBal = reqBal;</div>
<div class="line"><a id="l02026" name="l02026"></a><span class="lineno"> 2026</span> </div>
<div class="line"><a id="l02027" name="l02027"></a><span class="lineno"> 2027</span> <span class="comment">// claim again</span></div>
<div class="line"><a id="l02028" name="l02028"></a><span class="lineno"> 2028</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l02029" name="l02029"></a><span class="lineno"> 2029</span> <span class="comment">// A transaction that generates a tec still consumes its ticket.</span></div>
<div class="line"><a id="l02030" name="l02030"></a><span class="lineno"> 2030</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqBal, authAmt, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()),</div>
<div class="line"><a id="l02031" name="l02031"></a><span class="lineno"> 2031</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ticket_1_1use.html">ticket::use</a>(bobTicketSeq++),</div>
<div class="line"><a id="l02032" name="l02032"></a><span class="lineno"> 2032</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cad6e984aac9838459128d97b668ec1e4f">tecUNFUNDED_PAYMENT</a>));</div>
<div class="line"><a id="l02033" name="l02033"></a><span class="lineno"> 2033</span> </div>
<div class="line"><a id="l02034" name="l02034"></a><span class="lineno"> 2034</span> env.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(bob, env.seq(bob) - bobTicketSeq));</div>
<div class="line"><a id="l02035" name="l02035"></a><span class="lineno"> 2035</span> BEAST_EXPECT(env.seq(bob) == bobSeq);</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> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == chanBal);</div>
<div class="line"><a id="l02038" name="l02038"></a><span class="lineno"> 2038</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l02039" name="l02039"></a><span class="lineno"> 2039</span> BEAST_EXPECT(env.balance(bob) == preBob - feeDrops);</div>
<div class="line"><a id="l02040" name="l02040"></a><span class="lineno"> 2040</span> }</div>
<div class="line"><a id="l02041" name="l02041"></a><span class="lineno"> 2041</span> {</div>
<div class="line"><a id="l02042" name="l02042"></a><span class="lineno"> 2042</span> <span class="comment">// Try to claim more than authorized</span></div>
<div class="line"><a id="l02043" name="l02043"></a><span class="lineno"> 2043</span> <span class="keyword">auto</span> <span class="keyword">const</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l02044" name="l02044"></a><span class="lineno"> 2044</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> authAmt = chanBal + <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(500);</div>
<div class="line"><a id="l02045" name="l02045"></a><span class="lineno"> 2045</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> reqAmt = authAmt + <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a47271eb5e7eb9b5aada383ccfaf9c0cf">drops</a>(1);</div>
<div class="line"><a id="l02046" name="l02046"></a><span class="lineno"> 2046</span> assert(reqAmt &lt;= chanAmt);</div>
<div class="line"><a id="l02047" name="l02047"></a><span class="lineno"> 2047</span> <span class="comment">// Note that since claim() returns a tem (neither tec nor tes),</span></div>
<div class="line"><a id="l02048" name="l02048"></a><span class="lineno"> 2048</span> <span class="comment">// the ticket is not consumed. So we don&#39;t increment bobTicket.</span></div>
<div class="line"><a id="l02049" name="l02049"></a><span class="lineno"> 2049</span> <span class="keyword">auto</span> <span class="keyword">const</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a> =</div>
<div class="line"><a id="l02050" name="l02050"></a><span class="lineno"> 2050</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">signClaimAuth</a>(alice.pk(), alice.sk(), chan, authAmt);</div>
<div class="line"><a id="l02051" name="l02051"></a><span class="lineno"> 2051</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan, reqAmt, authAmt, <a class="code hl_class" href="classripple_1_1Slice.html">Slice</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1sig.html">sig</a>), alice.pk()),</div>
<div class="line"><a id="l02052" name="l02052"></a><span class="lineno"> 2052</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ticket_1_1use.html">ticket::use</a>(bobTicketSeq),</div>
<div class="line"><a id="l02053" name="l02053"></a><span class="lineno"> 2053</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">temBAD_AMOUNT</a>));</div>
<div class="line"><a id="l02054" name="l02054"></a><span class="lineno"> 2054</span> </div>
<div class="line"><a id="l02055" name="l02055"></a><span class="lineno"> 2055</span> env.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(bob, env.seq(bob) - bobTicketSeq));</div>
<div class="line"><a id="l02056" name="l02056"></a><span class="lineno"> 2056</span> BEAST_EXPECT(env.seq(bob) == bobSeq);</div>
<div class="line"><a id="l02057" name="l02057"></a><span class="lineno"> 2057</span> </div>
<div class="line"><a id="l02058" name="l02058"></a><span class="lineno"> 2058</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == chanBal);</div>
<div class="line"><a id="l02059" name="l02059"></a><span class="lineno"> 2059</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l02060" name="l02060"></a><span class="lineno"> 2060</span> BEAST_EXPECT(env.balance(bob) == preBob);</div>
<div class="line"><a id="l02061" name="l02061"></a><span class="lineno"> 2061</span> }</div>
<div class="line"><a id="l02062" name="l02062"></a><span class="lineno"> 2062</span> </div>
<div class="line"><a id="l02063" name="l02063"></a><span class="lineno"> 2063</span> <span class="comment">// Dst tries to fund the channel</span></div>
<div class="line"><a id="l02064" name="l02064"></a><span class="lineno"> 2064</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">fund</a>(bob, chan, <a class="code hl_variable" href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">XRP</a>(1000)),</div>
<div class="line"><a id="l02065" name="l02065"></a><span class="lineno"> 2065</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ticket_1_1use.html">ticket::use</a>(bobTicketSeq++),</div>
<div class="line"><a id="l02066" name="l02066"></a><span class="lineno"> 2066</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>));</div>
<div class="line"><a id="l02067" name="l02067"></a><span class="lineno"> 2067</span> </div>
<div class="line"><a id="l02068" name="l02068"></a><span class="lineno"> 2068</span> env.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(bob, env.seq(bob) - bobTicketSeq));</div>
<div class="line"><a id="l02069" name="l02069"></a><span class="lineno"> 2069</span> BEAST_EXPECT(env.seq(bob) == bobSeq);</div>
<div class="line"><a id="l02070" name="l02070"></a><span class="lineno"> 2070</span> </div>
<div class="line"><a id="l02071" name="l02071"></a><span class="lineno"> 2071</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">channelBalance</a>(*env.current(), chan) == chanBal);</div>
<div class="line"><a id="l02072" name="l02072"></a><span class="lineno"> 2072</span> BEAST_EXPECT(<a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">channelAmount</a>(*env.current(), chan) == chanAmt);</div>
<div class="line"><a id="l02073" name="l02073"></a><span class="lineno"> 2073</span> </div>
<div class="line"><a id="l02074" name="l02074"></a><span class="lineno"> 2074</span> {</div>
<div class="line"><a id="l02075" name="l02075"></a><span class="lineno"> 2075</span> <span class="comment">// Dst closes channel</span></div>
<div class="line"><a id="l02076" name="l02076"></a><span class="lineno"> 2076</span> <span class="keyword">auto</span> <span class="keyword">const</span> preAlice = env.balance(alice);</div>
<div class="line"><a id="l02077" name="l02077"></a><span class="lineno"> 2077</span> <span class="keyword">auto</span> <span class="keyword">const</span> preBob = env.balance(bob);</div>
<div class="line"><a id="l02078" name="l02078"></a><span class="lineno"> 2078</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">claim</a>(bob, chan),</div>
<div class="line"><a id="l02079" name="l02079"></a><span class="lineno"> 2079</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1txflags.html">txflags</a>(<a class="code hl_variable" href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">tfClose</a>),</div>
<div class="line"><a id="l02080" name="l02080"></a><span class="lineno"> 2080</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ticket_1_1use.html">ticket::use</a>(bobTicketSeq++));</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> env.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(bob, env.seq(bob) - bobTicketSeq));</div>
<div class="line"><a id="l02083" name="l02083"></a><span class="lineno"> 2083</span> BEAST_EXPECT(env.seq(bob) == bobSeq);</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> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">channelExists</a>(*env.current(), chan));</div>
<div class="line"><a id="l02086" name="l02086"></a><span class="lineno"> 2086</span> <span class="keyword">auto</span> <span class="keyword">const</span> feeDrops = env.current()-&gt;fees().base;</div>
<div class="line"><a id="l02087" name="l02087"></a><span class="lineno"> 2087</span> <span class="keyword">auto</span> <span class="keyword">const</span> delta = chanAmt - chanBal;</div>
<div class="line"><a id="l02088" name="l02088"></a><span class="lineno"> 2088</span> assert(delta &gt; beast::zero);</div>
<div class="line"><a id="l02089" name="l02089"></a><span class="lineno"> 2089</span> BEAST_EXPECT(env.balance(alice) == preAlice + delta);</div>
<div class="line"><a id="l02090" name="l02090"></a><span class="lineno"> 2090</span> BEAST_EXPECT(env.balance(bob) == preBob - feeDrops);</div>
<div class="line"><a id="l02091" name="l02091"></a><span class="lineno"> 2091</span> }</div>
<div class="line"><a id="l02092" name="l02092"></a><span class="lineno"> 2092</span> env.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(alice, env.seq(alice) - aliceTicketSeq));</div>
<div class="line"><a id="l02093" name="l02093"></a><span class="lineno"> 2093</span> BEAST_EXPECT(env.seq(alice) == aliceSeq);</div>
<div class="line"><a id="l02094" name="l02094"></a><span class="lineno"> 2094</span> env.require(<a class="code hl_typedef" href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">tickets</a>(bob, env.seq(bob) - bobTicketSeq));</div>
<div class="line"><a id="l02095" name="l02095"></a><span class="lineno"> 2095</span> BEAST_EXPECT(env.seq(bob) == bobSeq);</div>
<div class="line"><a id="l02096" name="l02096"></a><span class="lineno"> 2096</span> }</div>
</div>
<div class="line"><a id="l02097" name="l02097"></a><span class="lineno"> 2097</span> </div>
<div class="line"><a id="l02098" name="l02098"></a><span class="lineno"> 2098</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen02099" data-start="{" data-end="}">
<div class="line"><a id="l02099" name="l02099"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#aacab6355f4954eaebd11b354ab3222fd"> 2099</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#aacab6355f4954eaebd11b354ab3222fd">testWithFeats</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l02100" name="l02100"></a><span class="lineno"> 2100</span> {</div>
<div class="line"><a id="l02101" name="l02101"></a><span class="lineno"> 2101</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a1678fa451d8a3acb397efdfddf8d7a71">testSimple</a>(features);</div>
<div class="line"><a id="l02102" name="l02102"></a><span class="lineno"> 2102</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#aad9d28395b753c6f7b99422aa9b9d5e1">testDisallowIncoming</a>(features);</div>
<div class="line"><a id="l02103" name="l02103"></a><span class="lineno"> 2103</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#aa76f753ded65f80ee5de6c264d7c767b">testCancelAfter</a>(features);</div>
<div class="line"><a id="l02104" name="l02104"></a><span class="lineno"> 2104</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a49fef34665b30b3240648aeb41f0f790">testSettleDelay</a>(features);</div>
<div class="line"><a id="l02105" name="l02105"></a><span class="lineno"> 2105</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a843c2ff4e53987579c7a3512b50f31c6">testExpiration</a>(features);</div>
<div class="line"><a id="l02106" name="l02106"></a><span class="lineno"> 2106</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a77a54509f9b7fc3d1183684d4372231e">testCloseDry</a>(features);</div>
<div class="line"><a id="l02107" name="l02107"></a><span class="lineno"> 2107</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a8cb2af1277398d162b9c793a0946af29">testDefaultAmount</a>(features);</div>
<div class="line"><a id="l02108" name="l02108"></a><span class="lineno"> 2108</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a4e1c070df9e0c7a9f1b302c21c1443df">testDisallowXRP</a>(features);</div>
<div class="line"><a id="l02109" name="l02109"></a><span class="lineno"> 2109</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#add9ad0ee74cb4cb8ab99868001968467">testDstTag</a>(features);</div>
<div class="line"><a id="l02110" name="l02110"></a><span class="lineno"> 2110</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a6a54d5d43c8b45e426af8ed678db55a7">testDepositAuth</a>(features);</div>
<div class="line"><a id="l02111" name="l02111"></a><span class="lineno"> 2111</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a238b7050b2283700eeed055b47e46076">testMultiple</a>(features);</div>
<div class="line"><a id="l02112" name="l02112"></a><span class="lineno"> 2112</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a24d29e6a3e8a58acb1fd26200d392af9">testAccountChannelsRPC</a>(features);</div>
<div class="line"><a id="l02113" name="l02113"></a><span class="lineno"> 2113</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ab1bfc03ce0a3e30847aebff34089d61c">testAccountChannelsRPCMarkers</a>(features);</div>
<div class="line"><a id="l02114" name="l02114"></a><span class="lineno"> 2114</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ac769d1d8f85fe681cbfdfeb65ffbbcaf">testAccountChannelsRPCSenderOnly</a>(features);</div>
<div class="line"><a id="l02115" name="l02115"></a><span class="lineno"> 2115</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ab2c84f1b37a1c091518dac7379941857">testAccountChannelAuthorize</a>(features);</div>
<div class="line"><a id="l02116" name="l02116"></a><span class="lineno"> 2116</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a8fc9fa8eea423030f3d64e0e2ad4d52c">testAuthVerifyRPC</a>(features);</div>
<div class="line"><a id="l02117" name="l02117"></a><span class="lineno"> 2117</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#afffed40d484241b375229e26513d75a1">testOptionalFields</a>(features);</div>
<div class="line"><a id="l02118" name="l02118"></a><span class="lineno"> 2118</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a9b774e4f432bf7999d9b116c81315d51">testMalformedPK</a>(features);</div>
<div class="line"><a id="l02119" name="l02119"></a><span class="lineno"> 2119</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a8c1e8dff93e990d8252c641e91b11be4">testMetaAndOwnership</a>(features);</div>
<div class="line"><a id="l02120" name="l02120"></a><span class="lineno"> 2120</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a723a3d54ce62a8d06787a17a932fbf9d">testAccountDelete</a>(features);</div>
<div class="line"><a id="l02121" name="l02121"></a><span class="lineno"> 2121</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a2c018c1543e1cf3620b153118eb9dbf4">testUsingTickets</a>(features);</div>
<div class="line"><a id="l02122" name="l02122"></a><span class="lineno"> 2122</span> }</div>
</div>
<div class="line"><a id="l02123" name="l02123"></a><span class="lineno"> 2123</span> </div>
<div class="line"><a id="l02124" name="l02124"></a><span class="lineno"> 2124</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l02125" name="l02125"></a><span class="lineno"> 2125</span> <span class="keywordtype">void</span></div>
<div class="foldopen" id="foldopen02126" data-start="{" data-end="}">
<div class="line"><a id="l02126" name="l02126"></a><span class="lineno"><a class="line" href="structripple_1_1test_1_1PayChan__test.html#a2d95313d8dade19b4b1b87985b2bf6c0"> 2126</a></span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a2d95313d8dade19b4b1b87985b2bf6c0">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a id="l02127" name="l02127"></a><span class="lineno"> 2127</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l02128" name="l02128"></a><span class="lineno"> 2128</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l02129" name="l02129"></a><span class="lineno"> 2129</span> <a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> <span class="keyword">const</span> <a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>{<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a8e5379a68ca5b5ae718e77312c2f1f94">testable_amendments</a>()};</div>
<div class="line"><a id="l02130" name="l02130"></a><span class="lineno"> 2130</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#aacab6355f4954eaebd11b354ab3222fd">testWithFeats</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a> - <a class="code hl_variable" href="structripple_1_1test_1_1PayChan__test.html#a2224b4d0b89e8ab2a54d66a392ebb82c">disallowIncoming</a>);</div>
<div class="line"><a id="l02131" name="l02131"></a><span class="lineno"> 2131</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#aacab6355f4954eaebd11b354ab3222fd">testWithFeats</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02132" name="l02132"></a><span class="lineno"> 2132</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#ae170b51c47b860f66914e6a232974032">testDepositAuthCreds</a>();</div>
<div class="line"><a id="l02133" name="l02133"></a><span class="lineno"> 2133</span> <a class="code hl_function" href="structripple_1_1test_1_1PayChan__test.html#a8c1e8dff93e990d8252c641e91b11be4">testMetaAndOwnership</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a> - fixIncludeKeyletFields);</div>
<div class="line"><a id="l02134" name="l02134"></a><span class="lineno"> 2134</span> }</div>
</div>
<div class="line"><a id="l02135" name="l02135"></a><span class="lineno"> 2135</span>};</div>
</div>
<div class="line"><a id="l02136" name="l02136"></a><span class="lineno"> 2136</span> </div>
<div class="line"><a id="l02137" name="l02137"></a><span class="lineno"><a class="line" href="namespaceripple_1_1test.html#a1c88c75a2fca71481dcd0700871f56a0"> 2137</a></span>BEAST_DEFINE_TESTSUITE(PayChan, app, <a class="code hl_namespace" href="namespaceripple.html">ripple</a>);</div>
<div class="line"><a id="l02138" name="l02138"></a><span class="lineno"> 2138</span>} <span class="comment">// namespace test</span></div>
<div class="line"><a id="l02139" name="l02139"></a><span class="lineno"> 2139</span>} <span class="comment">// namespace ripple</span></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="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="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_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#l00152">suite.h:152</a></div></div>
<div class="ttc" id="aclassripple_1_1Buffer_html"><div class="ttname"><a href="classripple_1_1Buffer.html">ripple::Buffer</a></div><div class="ttdoc">Like std::vector&lt;char&gt; but better.</div><div class="ttdef"><b>Definition</b> <a href="Buffer_8h_source.html#l00016">Buffer.h:17</a></div></div>
<div class="ttc" id="aclassripple_1_1Dir_html"><div class="ttname"><a href="classripple_1_1Dir.html">ripple::Dir</a></div><div class="ttdoc">A class that simplifies iterating ledger directory pages.</div><div class="ttdef"><b>Definition</b> <a href="Dir_8h_source.html#l00021">Dir.h:22</a></div></div>
<div class="ttc" id="aclassripple_1_1FeatureBitset_html"><div class="ttname"><a href="classripple_1_1FeatureBitset.html">ripple::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="aclassripple_1_1PublicKey_html"><div class="ttname"><a href="classripple_1_1PublicKey.html">ripple::PublicKey</a></div><div class="ttdoc">A public key.</div><div class="ttdef"><b>Definition</b> <a href="PublicKey_8h_source.html#l00042">PublicKey.h:43</a></div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html"><div class="ttname"><a href="classripple_1_1ReadView.html">ripple::ReadView</a></div><div class="ttdoc">A view into a ledger.</div><div class="ttdef"><b>Definition</b> <a href="ReadView_8h_source.html#l00031">ReadView.h:32</a></div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html_a0583a050ea7799ba331f6222a905f304"><div class="ttname"><a href="classripple_1_1ReadView.html#a0583a050ea7799ba331f6222a905f304">ripple::ReadView::read</a></div><div class="ttdeci">virtual std::shared_ptr&lt; SLE const &gt; read(Keylet const &amp;k) const =0</div><div class="ttdoc">Return the state item associated with a key.</div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html"><div class="ttname"><a href="classripple_1_1STAmount.html">ripple::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="aclassripple_1_1STAmount_html_a6c2ca92e9c91e2a34493d61e02d79ebf"><div class="ttname"><a href="classripple_1_1STAmount.html#a6c2ca92e9c91e2a34493d61e02d79ebf">ripple::STAmount::xrp</a></div><div class="ttdeci">XRPAmount xrp() const</div><div class="ttdef"><b>Definition</b> <a href="STAmount_8cpp_source.html#l00264">STAmount.cpp:264</a></div></div>
<div class="ttc" id="aclassripple_1_1SecretKey_html"><div class="ttname"><a href="classripple_1_1SecretKey.html">ripple::SecretKey</a></div><div class="ttdoc">A secret key.</div><div class="ttdef"><b>Definition</b> <a href="SecretKey_8h_source.html#l00018">SecretKey.h:19</a></div></div>
<div class="ttc" id="aclassripple_1_1Serializer_html"><div class="ttname"><a href="classripple_1_1Serializer.html">ripple::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="aclassripple_1_1Serializer_html_a394c3299f6cfcebdaa4bc98ec0c602d6"><div class="ttname"><a href="classripple_1_1Serializer.html#a394c3299f6cfcebdaa4bc98ec0c602d6">ripple::Serializer::slice</a></div><div class="ttdeci">Slice slice() const noexcept</div><div class="ttdef"><b>Definition</b> <a href="Serializer_8h_source.html#l00047">Serializer.h:47</a></div></div>
<div class="ttc" id="aclassripple_1_1Slice_html"><div class="ttname"><a href="classripple_1_1Slice.html">ripple::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="aclassripple_1_1TERSubset_html"><div class="ttname"><a href="classripple_1_1TERSubset.html">ripple::TERSubset&lt; CanCvtToTER &gt;</a></div></div>
<div class="ttc" id="aclassripple_1_1XRPAmount_html"><div class="ttname"><a href="classripple_1_1XRPAmount.html">ripple::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="aclassripple_1_1base__uint_html"><div class="ttname"><a href="classripple_1_1base__uint.html">ripple::base_uint&lt; 256 &gt;</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Account_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Account.html">ripple::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="aclassripple_1_1test_1_1jtx_1_1Account_html_a079e39aea7b349047759b9dfc1df7a13"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Account.html#a079e39aea7b349047759b9dfc1df7a13">ripple::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#l00075">Account.h:75</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html">ripple::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#l00101">Env.h:102</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_a14cbba5f53c931d433ce2e403bf692f4"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#a14cbba5f53c931d433ce2e403bf692f4">ripple::test::jtx::Env::closed</a></div><div class="ttdeci">std::shared_ptr&lt; ReadView const &gt; closed()</div><div class="ttdoc">Returns the last closed 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="aclassripple_1_1test_1_1jtx_1_1Env_html_a2ef09f6f41b7d8a2dc89175e3b108f87"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">ripple::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#l00250">Env.cpp:250</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_a65bedb2e0babbd55343f721de9008a37"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#a65bedb2e0babbd55343f721de9008a37">ripple::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#l00312">Env.h:312</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_a69095691c9bcfab1f3d69c645f2dbe33"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#a69095691c9bcfab1f3d69c645f2dbe33">ripple::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#l00103">Env.cpp:103</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_ad69855b4b26fc3c83922c5783487592c"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#ad69855b4b26fc3c83922c5783487592c">ripple::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#l00772">Env.h:772</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_ae2349266cb09d1f1c3de06606ebdf9e2"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#ae2349266cb09d1f1c3de06606ebdf9e2">ripple::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#l00271">Env.cpp:271</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1Env_html_af09170466fd01f912527c64d7a34dc1e"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1Env.html#af09170466fd01f912527c64d7a34dc1e">ripple::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#l00165">Env.cpp:165</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1credentials_1_1ids_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1credentials_1_1ids.html">ripple::test::jtx::credentials::ids</a></div><div class="ttdef"><b>Definition</b> <a href="credentials_8h_source.html#l00043">credentials.h:44</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1fee_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1fee.html">ripple::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="aclassripple_1_1test_1_1jtx_1_1flags_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1flags.html">ripple::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="aclassripple_1_1test_1_1jtx_1_1sig_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1sig.html">ripple::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="aclassripple_1_1test_1_1jtx_1_1ter_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1ter.html">ripple::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="aclassripple_1_1test_1_1jtx_1_1ticket_1_1use_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1ticket_1_1use.html">ripple::test::jtx::ticket::use</a></div><div class="ttdoc">Set a ticket sequence on a JTx.</div><div class="ttdef"><b>Definition</b> <a href="ticket_8h_source.html#l00028">ticket.h:29</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1jtx_1_1txflags_html"><div class="ttname"><a href="classripple_1_1test_1_1jtx_1_1txflags.html">ripple::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="adistance_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/iterator/distance.html">std::distance</a></div><div class="ttdeci">T distance(T... args)</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="afind_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/algorithm/find.html">std::find</a></div><div class="ttdeci">T find(T... args)</div></div>
<div class="ttc" id="ainsert_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/set/insert.html">std::set::insert</a></div><div class="ttdeci">T insert(T... args)</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="anamespaceJson_html_a7d654b75c16a57007925868e38212b4ea7d9899633b4409bd3fc107e6737f8391"><div class="ttname"><a href="namespaceJson.html#a7d654b75c16a57007925868e38212b4ea7d9899633b4409bd3fc107e6737f8391">Json::nullValue</a></div><div class="ttdeci">@ nullValue</div><div class="ttdoc">'null' value</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00020">json_value.h:20</a></div></div>
<div class="ttc" id="anamespaceJson_html_a7d654b75c16a57007925868e38212b4eadc8f264f36b55b063c78126b335415f4"><div class="ttname"><a href="namespaceJson.html#a7d654b75c16a57007925868e38212b4eadc8f264f36b55b063c78126b335415f4">Json::arrayValue</a></div><div class="ttdeci">@ arrayValue</div><div class="ttdoc">array value (ordered list)</div><div class="ttdef"><b>Definition</b> <a href="json__value_8h_source.html#l00026">json_value.h:26</a></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="anamespaceripple_1_1keylet_html_aa756e0f59b26042ed00a4d0ba6e96951"><div class="ttname"><a href="namespaceripple_1_1keylet.html#aa756e0f59b26042ed00a4d0ba6e96951">ripple::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#l00165">Indexes.cpp:165</a></div></div>
<div class="ttc" id="anamespaceripple_1_1keylet_html_acd4d51d467fc6e75745baf179a7965ef"><div class="ttname"><a href="namespaceripple_1_1keylet.html#acd4d51d467fc6e75745baf179a7965ef">ripple::keylet::ownerDir</a></div><div class="ttdeci">Keylet ownerDir(AccountID const &amp;id) noexcept</div><div class="ttdoc">The root page of an account's directory.</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00355">Indexes.cpp:355</a></div></div>
<div class="ttc" id="anamespaceripple_1_1keylet_html_afde577cc367684fb4beceb0100da6195"><div class="ttname"><a href="namespaceripple_1_1keylet.html#afde577cc367684fb4beceb0100da6195">ripple::keylet::payChan</a></div><div class="ttdeci">Keylet payChan(AccountID const &amp;src, AccountID const &amp;dst, std::uint32_t seq) noexcept</div><div class="ttdoc">A PaymentChannel.</div><div class="ttdef"><b>Definition</b> <a href="Indexes_8cpp_source.html#l00376">Indexes.cpp:376</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1credentials_html_a0529a6b1613da8aa0c2a8964b1820ac9"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#a0529a6b1613da8aa0c2a8964b1820ac9">ripple::test::jtx::credentials::create</a></div><div class="ttdeci">Json::Value create(jtx::Account const &amp;subject, jtx::Account const &amp;issuer, std::string_view credType)</div><div class="ttdef"><b>Definition</b> <a href="creds_8cpp_source.html#l00013">creds.cpp:13</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1credentials_html_a3c554c809a810395ee98a696ca447fb5"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#a3c554c809a810395ee98a696ca447fb5">ripple::test::jtx::credentials::accept</a></div><div class="ttdeci">Json::Value accept(jtx::Account const &amp;subject, jtx::Account const &amp;issuer, std::string_view credType)</div><div class="ttdef"><b>Definition</b> <a href="creds_8cpp_source.html#l00029">creds.cpp:29</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1credentials_html_ade27ecac76c7d1262720bd7f112cf28e"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1credentials.html#ade27ecac76c7d1262720bd7f112cf28e">ripple::test::jtx::credentials::ledgerEntry</a></div><div class="ttdeci">Json::Value ledgerEntry(jtx::Env &amp;env, jtx::Account const &amp;subject, jtx::Account const &amp;issuer, std::string_view credType)</div><div class="ttdef"><b>Definition</b> <a href="creds_8cpp_source.html#l00059">creds.cpp:59</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1deposit_html_a5e20a724bec47934d88c328af26c2541"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1deposit.html#a5e20a724bec47934d88c328af26c2541">ripple::test::jtx::deposit::unauth</a></div><div class="ttdeci">Json::Value unauth(Account const &amp;account, Account const &amp;unauth)</div><div class="ttdoc">Remove preauthorization for deposit.</div><div class="ttdef"><b>Definition</b> <a href="deposit_8cpp_source.html#l00024">deposit.cpp:24</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1deposit_html_a662867f42cb3f468f2e8830fbd7e0d8a"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1deposit.html#a662867f42cb3f468f2e8830fbd7e0d8a">ripple::test::jtx::deposit::auth</a></div><div class="ttdeci">Json::Value auth(Account const &amp;account, Account const &amp;auth)</div><div class="ttdoc">Preauthorize for deposit.</div><div class="ttdef"><b>Definition</b> <a href="deposit_8cpp_source.html#l00013">deposit.cpp:13</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1deposit_html_ac0c24df5082c3715d3be7a4a7617b9d5"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1deposit.html#ac0c24df5082c3715d3be7a4a7617b9d5">ripple::test::jtx::deposit::authCredentials</a></div><div class="ttdeci">Json::Value authCredentials(jtx::Account const &amp;account, std::vector&lt; AuthorizeCredentials &gt; const &amp;auth)</div><div class="ttdef"><b>Definition</b> <a href="deposit_8cpp_source.html#l00035">deposit.cpp:35</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1paychan_html_a06f27c7124c8e76c4068af61623b06ec"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a06f27c7124c8e76c4068af61623b06ec">ripple::test::jtx::paychan::channelExists</a></div><div class="ttdeci">bool channelExists(ReadView const &amp;view, uint256 const &amp;chan)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00308">TestHelpers.cpp:308</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1paychan_html_a1b554f2b86e22f6748ad3a638fd4ae86"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a1b554f2b86e22f6748ad3a638fd4ae86">ripple::test::jtx::paychan::create</a></div><div class="ttdeci">Json::Value create(AccountID const &amp;account, AccountID const &amp;to, STAmount const &amp;amount, NetClock::duration const &amp;settleDelay, PublicKey const &amp;pk, std::optional&lt; NetClock::time_point &gt; const &amp;cancelAfter, std::optional&lt; std::uint32_t &gt; const &amp;dstTag)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00224">TestHelpers.cpp:224</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1paychan_html_a497dd410303dcc3593e829d000dd7073"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a497dd410303dcc3593e829d000dd7073">ripple::test::jtx::paychan::channel</a></div><div class="ttdeci">uint256 channel(AccountID const &amp;account, AccountID const &amp;dst, std::uint32_t seqProxyValue)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00289">TestHelpers.cpp:289</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1paychan_html_a89cce4a1494cae4734479d88975dbd2c"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#a89cce4a1494cae4734479d88975dbd2c">ripple::test::jtx::paychan::claim</a></div><div class="ttdeci">Json::Value claim(AccountID const &amp;account, uint256 const &amp;channel, std::optional&lt; STAmount &gt; const &amp;balance, std::optional&lt; STAmount &gt; const &amp;amount, std::optional&lt; Slice &gt; const &amp;signature, std::optional&lt; PublicKey &gt; const &amp;pk)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00265">TestHelpers.cpp:265</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1paychan_html_aad855eb2e20ebbee9feb9637eb68c9a4"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1paychan.html#aad855eb2e20ebbee9feb9637eb68c9a4">ripple::test::jtx::paychan::channelBalance</a></div><div class="ttdeci">STAmount channelBalance(ReadView const &amp;view, uint256 const &amp;chan)</div><div class="ttdef"><b>Definition</b> <a href="TestHelpers_8cpp_source.html#l00299">TestHelpers.cpp:299</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_1_1ticket_html_a1e24650b39bab99fc665d9f80365cc27"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx_1_1ticket.html#a1e24650b39bab99fc665d9f80365cc27">ripple::test::jtx::ticket::create</a></div><div class="ttdeci">Json::Value create(Account const &amp;account, std::uint32_t count)</div><div class="ttdoc">Create one of more tickets.</div><div class="ttdef"><b>Definition</b> <a href="ticket_8cpp_source.html#l00012">ticket.cpp:12</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a18cde110bb3ad7dce97ac11a4b251d0e"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a18cde110bb3ad7dce97ac11a4b251d0e">ripple::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="anamespaceripple_1_1test_1_1jtx_html_a47271eb5e7eb9b5aada383ccfaf9c0cf"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a47271eb5e7eb9b5aada383ccfaf9c0cf">ripple::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#l00307">src/test/jtx/amount.h:307</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a50cacef3867fc01273aa9c29231f9a7c"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a50cacef3867fc01273aa9c29231f9a7c">ripple::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="anamespaceripple_1_1test_1_1jtx_html_a7465bcfa8bde2f58f93cee57934f7df8"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a7465bcfa8bde2f58f93cee57934f7df8">ripple::test::jtx::fund</a></div><div class="ttdeci">void fund(jtx::Env &amp;env, jtx::Account const &amp;gw, std::vector&lt; jtx::Account &gt; const &amp;accounts, std::vector&lt; STAmount &gt; const &amp;amts, Fund how)</div><div class="ttdef"><b>Definition</b> <a href="AMMTest_8cpp_source.html#l00018">AMMTest.cpp:18</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a8e5379a68ca5b5ae718e77312c2f1f94"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a8e5379a68ca5b5ae718e77312c2f1f94">ripple::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="anamespaceripple_1_1test_1_1jtx_html_abae1db0ba3c2846aede94e2879fc6a29"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#abae1db0ba3c2846aede94e2879fc6a29">ripple::test::jtx::sign</a></div><div class="ttdeci">void sign(Json::Value &amp;jv, Account const &amp;account, Json::Value &amp;sigObject)</div><div class="ttdoc">Sign automatically into a specific Json field of the jv object.</div><div class="ttdef"><b>Definition</b> <a href="utility_8cpp_source.html#l00028">utility.cpp:28</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_ada147bbc773967de4235fc8ed1c89562"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#ada147bbc773967de4235fc8ed1c89562">ripple::test::jtx::acctdelete</a></div><div class="ttdeci">Json::Value acctdelete(Account const &amp;account, Account const &amp;dest)</div><div class="ttdoc">Delete account.</div><div class="ttdef"><b>Definition</b> <a href="acctdelete_8cpp_source.html#l00012">acctdelete.cpp:12</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_ae64f812b5cb3805c184e07d6b1b643de"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#ae64f812b5cb3805c184e07d6b1b643de">ripple::test::jtx::tickets</a></div><div class="ttdeci">owner_count&lt; ltTICKET &gt; tickets</div><div class="ttdoc">Match the number of tickets on the account.</div><div class="ttdef"><b>Definition</b> <a href="ticket_8h_source.html#l00045">ticket.h:45</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_aea9cd3d4e6b5df2e62d53b34b605957e"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#aea9cd3d4e6b5df2e62d53b34b605957e">ripple::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#l00092">amount.cpp:92</a></div></div>
<div class="ttc" id="anamespaceripple_html"><div class="ttname"><a href="namespaceripple.html">ripple</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="anamespaceripple_html_a1d8ec9af2fd805d04e032c52f6968211"><div class="ttname"><a href="namespaceripple.html#a1d8ec9af2fd805d04e032c52f6968211">ripple::asfDepositAuth</a></div><div class="ttdeci">constexpr std::uint32_t asfDepositAuth</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00066">TxFlags.h:66</a></div></div>
<div class="ttc" id="anamespaceripple_html_a2e3220cb8c660141f5300a9e38841295"><div class="ttname"><a href="namespaceripple.html#a2e3220cb8c660141f5300a9e38841295">ripple::asfRequireDest</a></div><div class="ttdeci">constexpr std::uint32_t asfRequireDest</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00058">TxFlags.h:58</a></div></div>
<div class="ttc" id="anamespaceripple_html_a31fd00b390dff8213a5cfe14d00e4045"><div class="ttname"><a href="namespaceripple.html#a31fd00b390dff8213a5cfe14d00e4045">ripple::tfRenew</a></div><div class="ttdeci">constexpr std::uint32_t tfRenew</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00115">TxFlags.h:115</a></div></div>
<div class="ttc" id="anamespaceripple_html_a3da1781bb9795989b8fcee62bbad358a"><div class="ttname"><a href="namespaceripple.html#a3da1781bb9795989b8fcee62bbad358a">ripple::sliceToHex</a></div><div class="ttdeci">static std::string sliceToHex(Slice const &amp;slice)</div><div class="ttdef"><b>Definition</b> <a href="PublicKey_8cpp_source.html#l00076">PublicKey.cpp:76</a></div></div>
<div class="ttc" id="anamespaceripple_html_a4a9c7b33fef9015d6406302ef80b63c5a91c443238e7e5acef466bfb2fe9f1211"><div class="ttname"><a href="namespaceripple.html#a4a9c7b33fef9015d6406302ef80b63c5a91c443238e7e5acef466bfb2fe9f1211">ripple::lsfDisallowIncomingPayChan</a></div><div class="ttdeci">@ lsfDisallowIncomingPayChan</div><div class="ttdef"><b>Definition</b> <a href="LedgerFormats_8h_source.html#l00126">LedgerFormats.h:125</a></div></div>
<div class="ttc" id="anamespaceripple_html_a70465c94c8c462001ec31e94c8e92183"><div class="ttname"><a href="namespaceripple.html#a70465c94c8c462001ec31e94c8e92183">ripple::serializePayChanAuthorization</a></div><div class="ttdeci">void serializePayChanAuthorization(Serializer &amp;msg, uint256 const &amp;key, XRPAmount const &amp;amt)</div><div class="ttdef"><b>Definition</b> <a href="include_2xrpl_2protocol_2PayChan_8h_source.html#l00012">include/xrpl/protocol/PayChan.h:12</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51"><div class="ttname"><a href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">ripple::TxSearched::all</a></div><div class="ttdeci">@ all</div></div>
<div class="ttc" id="anamespaceripple_html_a86e358ce3f06ff049af13c2342791cf8"><div class="ttname"><a href="namespaceripple.html#a86e358ce3f06ff049af13c2342791cf8">ripple::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="anamespaceripple_html_a9de744cfdefe1132969eb982e57e4ddea8183aa2c95dc1385c8f58bf1917fcb0b"><div class="ttname"><a href="namespaceripple.html#a9de744cfdefe1132969eb982e57e4ddea8183aa2c95dc1385c8f58bf1917fcb0b">ripple::KeyType::ed25519</a></div><div class="ttdeci">@ ed25519</div></div>
<div class="ttc" id="anamespaceripple_html_a9f8b4ebe6b42066b9e39967ed80daf79"><div class="ttname"><a href="namespaceripple.html#a9f8b4ebe6b42066b9e39967ed80daf79">ripple::forAllApiVersions</a></div><div class="ttdeci">void forAllApiVersions(Fn const &amp;fn, Args &amp;&amp;... args)</div><div class="ttdef"><b>Definition</b> <a href="ApiVersion_8h_source.html#l00158">ApiVersion.h:158</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38ca02ea20c787300a40fe375ba3d6405258"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca02ea20c787300a40fe375ba3d6405258">ripple::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="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38ca1207baad8c378dc23cd2fa4c4276844d"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca1207baad8c378dc23cd2fa4c4276844d">ripple::tecNO_DST</a></div><div class="ttdeci">@ tecNO_DST</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00272">TER.h:272</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38ca3577fa7a8b4da9a377d45f373d80de05"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca3577fa7a8b4da9a377d45f373d80de05">ripple::tecUNFUNDED</a></div><div class="ttdeci">@ tecUNFUNDED</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00277">TER.h:277</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38ca949bc4765f151a8866814dafbd8ea558"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca949bc4765f151a8866814dafbd8ea558">ripple::tecBAD_CREDENTIALS</a></div><div class="ttdeci">@ tecBAD_CREDENTIALS</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00341">TER.h:341</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">ripple::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="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38caa3ac7c997274040539a497cadc280b22"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caa3ac7c997274040539a497cadc280b22">ripple::tecDST_TAG_NEEDED</a></div><div class="ttdeci">@ tecDST_TAG_NEEDED</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00291">TER.h:291</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38caa7460a5fac26c1d8abef55b8c1129150"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caa7460a5fac26c1d8abef55b8c1129150">ripple::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="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38cad6e984aac9838459128d97b668ec1e4f"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cad6e984aac9838459128d97b668ec1e4f">ripple::tecUNFUNDED_PAYMENT</a></div><div class="ttdeci">@ tecUNFUNDED_PAYMENT</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00267">TER.h:267</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38caede598f88bbd44e4df1c4e0d418c4cdc">ripple::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="anamespaceripple_html_aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151"><div class="ttname"><a href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">ripple::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="anamespaceripple_html_ab48d5d1c4e2695c12f705e9d85fa560d"><div class="ttname"><a href="namespaceripple.html#ab48d5d1c4e2695c12f705e9d85fa560d">ripple::isTesSuccess</a></div><div class="ttdeci">bool isTesSuccess(TER x) noexcept</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00659">TER.h:659</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac124fe6744b7fe887dec949b56b16d50"><div class="ttname"><a href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">ripple::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#l00611">base_uint.h:611</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac12fbb1864b09bfd3fb4ead410449edd"><div class="ttname"><a href="namespaceripple.html#ac12fbb1864b09bfd3fb4ead410449edd">ripple::asfDisallowIncomingPayChan</a></div><div class="ttdeci">constexpr std::uint32_t asfDisallowIncomingPayChan</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00073">TxFlags.h:73</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac1c00e26dbebe035301fefc29b02f82b"><div class="ttname"><a href="namespaceripple.html#ac1c00e26dbebe035301fefc29b02f82b">ripple::tfClose</a></div><div class="ttdeci">constexpr std::uint32_t tfClose</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00116">TxFlags.h:116</a></div></div>
<div class="ttc" id="anamespaceripple_html_adfb760bc3e4ccb79d5d4f6ecff2f1817"><div class="ttname"><a href="namespaceripple.html#adfb760bc3e4ccb79d5d4f6ecff2f1817">ripple::TER</a></div><div class="ttdeci">TERSubset&lt; CanCvtToTER &gt; TER</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00630">TER.h:630</a></div></div>
<div class="ttc" id="anamespaceripple_html_af9cd2b389ce115ba9d17fbd557aca94d"><div class="ttname"><a href="namespaceripple.html#af9cd2b389ce115ba9d17fbd557aca94d">ripple::asfDisallowXRP</a></div><div class="ttdeci">constexpr std::uint32_t asfDisallowXRP</div><div class="ttdef"><b>Definition</b> <a href="TxFlags_8h_source.html#l00060">TxFlags.h:60</a></div></div>
<div class="ttc" id="anamespaceripple_html_afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea"><div class="ttname"><a href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a07dedb576e47ed9570e5acc5b4b1d3ea">ripple::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="anamespaceripple_html_afe21c8454670d46fb93751a5edffed46a33c7f00dec90dddffd0318dce2a4bf51"><div class="ttname"><a href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a33c7f00dec90dddffd0318dce2a4bf51">ripple::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="anamespaceripple_html_afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328"><div class="ttname"><a href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">ripple::temMALFORMED</a></div><div class="ttdeci">@ temMALFORMED</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00068">TER.h:68</a></div></div>
<div class="ttc" id="anamespaceripple_html_afe21c8454670d46fb93751a5edffed46a8845e05d481141ea5e8e5274796f45a7"><div class="ttname"><a href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a8845e05d481141ea5e8e5274796f45a7">ripple::temBAD_EXPIRATION</a></div><div class="ttdeci">@ temBAD_EXPIRATION</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00072">TER.h:72</a></div></div>
<div class="ttc" id="anamespaceripple_html_afe21c8454670d46fb93751a5edffed46ac3482079467d517ea82aa9c8fa693d21"><div class="ttname"><a href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46ac3482079467d517ea82aa9c8fa693d21">ripple::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="anamespaceripple_html_afe21c8454670d46fb93751a5edffed46acf9cc7bb9b19628c6a89a21611972242"><div class="ttname"><a href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46acf9cc7bb9b19628c6a89a21611972242">ripple::temDST_IS_SRC</a></div><div class="ttdeci">@ temDST_IS_SRC</div><div class="ttdef"><b>Definition</b> <a href="TER_8h_source.html#l00089">TER.h:89</a></div></div>
<div class="ttc" id="anamespaceripple_html_afe21c8454670d46fb93751a5edffed46aecc18d207c14edd554462f82555e9d92"><div class="ttname"><a href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46aecc18d207c14edd554462f82555e9d92">ripple::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="anamespacestd_1_1literals_1_1chrono__literals_html"><div class="ttname"><a href="http://en.cppreference.com/w/namespacestd_1_1literals_1_1chrono__literals.html">std::literals::chrono_literals</a></div></div>
<div class="ttc" id="anamespacestd_1_1literals_html"><div class="ttname"><a href="http://en.cppreference.com/w/namespacestd_1_1literals.html">std::literals</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="areserve_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/vector/reserve.html">std::vector::reserve</a></div><div class="ttdeci">T reserve(T... args)</div></div>
<div class="ttc" id="aset_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/set.html">std::set</a></div></div>
<div class="ttc" id="ashared_ptr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr</a></div></div>
<div class="ttc" id="asize_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/container/set/size.html">std::set::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="aslice_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/numeric/valarray/slice.html">std::slice</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html">ripple::test::PayChan_test</a></div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00015">PayChan_test.cpp:16</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a11451c0e44c2b6cb8b761613d47427b5"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a11451c0e44c2b6cb8b761613d47427b5">ripple::test::PayChan_test::channelKeyAndSle</a></div><div class="ttdeci">static std::pair&lt; uint256, std::shared_ptr&lt; SLE const &gt; &gt; channelKeyAndSle(ReadView const &amp;view, jtx::Account const &amp;account, jtx::Account const &amp;dst)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00020">PayChan_test.cpp:20</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a1678fa451d8a3acb397efdfddf8d7a71"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a1678fa451d8a3acb397efdfddf8d7a71">ripple::test::PayChan_test::testSimple</a></div><div class="ttdeci">void testSimple(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00065">PayChan_test.cpp:65</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a2224b4d0b89e8ab2a54d66a392ebb82c"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a2224b4d0b89e8ab2a54d66a392ebb82c">ripple::test::PayChan_test::disallowIncoming</a></div><div class="ttdeci">FeatureBitset const disallowIncoming</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00017">PayChan_test.cpp:17</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a238b7050b2283700eeed055b47e46076"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a238b7050b2283700eeed055b47e46076">ripple::test::PayChan_test::testMultiple</a></div><div class="ttdeci">void testMultiple(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01025">PayChan_test.cpp:1025</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a24d29e6a3e8a58acb1fd26200d392af9"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a24d29e6a3e8a58acb1fd26200d392af9">ripple::test::PayChan_test::testAccountChannelsRPC</a></div><div class="ttdeci">void testAccountChannelsRPC(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01048">PayChan_test.cpp:1048</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a2c018c1543e1cf3620b153118eb9dbf4"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a2c018c1543e1cf3620b153118eb9dbf4">ripple::test::PayChan_test::testUsingTickets</a></div><div class="ttdeci">void testUsingTickets(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01937">PayChan_test.cpp:1937</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a2d95313d8dade19b4b1b87985b2bf6c0"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a2d95313d8dade19b4b1b87985b2bf6c0">ripple::test::PayChan_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="PayChan__test_8cpp_source.html#l02126">PayChan_test.cpp:2126</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a49fef34665b30b3240648aeb41f0f790"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a49fef34665b30b3240648aeb41f0f790">ripple::test::PayChan_test::testSettleDelay</a></div><div class="ttdeci">void testSettleDelay(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00501">PayChan_test.cpp:501</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a4e1c070df9e0c7a9f1b302c21c1443df"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a4e1c070df9e0c7a9f1b302c21c1443df">ripple::test::PayChan_test::testDisallowXRP</a></div><div class="ttdeci">void testDisallowXRP(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00650">PayChan_test.cpp:650</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a6a54d5d43c8b45e426af8ed678db55a7"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a6a54d5d43c8b45e426af8ed678db55a7">ripple::test::PayChan_test::testDepositAuth</a></div><div class="ttdeci">void testDepositAuth(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00717">PayChan_test.cpp:717</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a6af279e8b2173e382782dabe858d9142"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a6af279e8b2173e382782dabe858d9142">ripple::test::PayChan_test::channelExpiration</a></div><div class="ttdeci">static std::optional&lt; std::int64_t &gt; channelExpiration(ReadView const &amp;view, uint256 const &amp;chan)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00054">PayChan_test.cpp:54</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a723a3d54ce62a8d06787a17a932fbf9d"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a723a3d54ce62a8d06787a17a932fbf9d">ripple::test::PayChan_test::testAccountDelete</a></div><div class="ttdeci">void testAccountDelete(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01846">PayChan_test.cpp:1846</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a77a54509f9b7fc3d1183684d4372231e"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a77a54509f9b7fc3d1183684d4372231e">ripple::test::PayChan_test::testCloseDry</a></div><div class="ttdeci">void testCloseDry(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00561">PayChan_test.cpp:561</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a843c2ff4e53987579c7a3512b50f31c6"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a843c2ff4e53987579c7a3512b50f31c6">ripple::test::PayChan_test::testExpiration</a></div><div class="ttdeci">void testExpiration(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00435">PayChan_test.cpp:435</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a8c1e8dff93e990d8252c641e91b11be4"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a8c1e8dff93e990d8252c641e91b11be4">ripple::test::PayChan_test::testMetaAndOwnership</a></div><div class="ttdeci">void testMetaAndOwnership(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01774">PayChan_test.cpp:1774</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a8cb2af1277398d162b9c793a0946af29"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a8cb2af1277398d162b9c793a0946af29">ripple::test::PayChan_test::testDefaultAmount</a></div><div class="ttdeci">void testDefaultAmount(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00595">PayChan_test.cpp:595</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a8fc9fa8eea423030f3d64e0e2ad4d52c"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a8fc9fa8eea423030f3d64e0e2ad4d52c">ripple::test::PayChan_test::testAuthVerifyRPC</a></div><div class="ttdeci">void testAuthVerifyRPC(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01313">PayChan_test.cpp:1313</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_a9b774e4f432bf7999d9b116c81315d51"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#a9b774e4f432bf7999d9b116c81315d51">ripple::test::PayChan_test::testMalformedPK</a></div><div class="ttdeci">void testMalformedPK(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01704">PayChan_test.cpp:1704</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_aa76f753ded65f80ee5de6c264d7c767b"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#aa76f753ded65f80ee5de6c264d7c767b">ripple::test::PayChan_test::testCancelAfter</a></div><div class="ttdeci">void testCancelAfter(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00324">PayChan_test.cpp:324</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_aacab6355f4954eaebd11b354ab3222fd"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#aacab6355f4954eaebd11b354ab3222fd">ripple::test::PayChan_test::testWithFeats</a></div><div class="ttdeci">void testWithFeats(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l02099">PayChan_test.cpp:2099</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_aad9d28395b753c6f7b99422aa9b9d5e1"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#aad9d28395b753c6f7b99422aa9b9d5e1">ripple::test::PayChan_test::testDisallowIncoming</a></div><div class="ttdeci">void testDisallowIncoming(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00240">PayChan_test.cpp:240</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_ab1bfc03ce0a3e30847aebff34089d61c"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#ab1bfc03ce0a3e30847aebff34089d61c">ripple::test::PayChan_test::testAccountChannelsRPCMarkers</a></div><div class="ttdeci">void testAccountChannelsRPCMarkers(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01122">PayChan_test.cpp:1122</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_ab2c84f1b37a1c091518dac7379941857"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#ab2c84f1b37a1c091518dac7379941857">ripple::test::PayChan_test::testAccountChannelAuthorize</a></div><div class="ttdeci">void testAccountChannelAuthorize(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01275">PayChan_test.cpp:1275</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_ac769d1d8f85fe681cbfdfeb65ffbbcaf"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#ac769d1d8f85fe681cbfdfeb65ffbbcaf">ripple::test::PayChan_test::testAccountChannelsRPCSenderOnly</a></div><div class="ttdeci">void testAccountChannelsRPCSenderOnly(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01238">PayChan_test.cpp:1238</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_add9ad0ee74cb4cb8ab99868001968467"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#add9ad0ee74cb4cb8ab99868001968467">ripple::test::PayChan_test::testDstTag</a></div><div class="ttdeci">void testDstTag(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00687">PayChan_test.cpp:687</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_ae05b84ca1fdac1d85b38698c1c7832cb"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#ae05b84ca1fdac1d85b38698c1c7832cb">ripple::test::PayChan_test::channelAmount</a></div><div class="ttdeci">static STAmount channelAmount(ReadView const &amp;view, uint256 const &amp;chan)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00045">PayChan_test.cpp:45</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_ae170b51c47b860f66914e6a232974032"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#ae170b51c47b860f66914e6a232974032">ripple::test::PayChan_test::testDepositAuthCreds</a></div><div class="ttdeci">void testDepositAuthCreds()</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00841">PayChan_test.cpp:841</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_afe97c13985ceaed6e61f950cd19ea6d8"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#afe97c13985ceaed6e61f950cd19ea6d8">ripple::test::PayChan_test::signClaimAuth</a></div><div class="ttdeci">static Buffer signClaimAuth(PublicKey const &amp;pk, SecretKey const &amp;sk, uint256 const &amp;channel, STAmount const &amp;authAmt)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l00033">PayChan_test.cpp:33</a></div></div>
<div class="ttc" id="astructripple_1_1test_1_1PayChan__test_html_afffed40d484241b375229e26513d75a1"><div class="ttname"><a href="structripple_1_1test_1_1PayChan__test.html#afffed40d484241b375229e26513d75a1">ripple::test::PayChan_test::testOptionalFields</a></div><div class="ttdeci">void testOptionalFields(FeatureBitset features)</div><div class="ttdef"><b>Definition</b> <a href="PayChan__test_8cpp_source.html#l01653">PayChan_test.cpp:1653</a></div></div>
<div class="ttc" id="asubstr_html"><div class="ttname"><a href="http://en.cppreference.com/w/cpp/string/basic_string/substr.html">std::string::substr</a></div><div class="ttdeci">T substr(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="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="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>