This commit is contained in:
bthomee
2025-03-25 14:35:36 +00:00
parent ee5d13fdbb
commit 7c375d8973
101 changed files with 47027 additions and 46587 deletions

View File

@@ -1942,464 +1942,466 @@ $(function() {
<div class="line"><a id="l01864" name="l01864"></a><span class="lineno"> 1864</span> </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_1Account.html">Account</a> <span class="keyword">const</span> alice{<span class="stringliteral">&quot;alice&quot;</span>};</div>
<div class="line"><a id="l01866" name="l01866"></a><span class="lineno"> 1866</span> </div>
<div class="line"><a id="l01867" name="l01867"></a><span class="lineno"> 1867</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="l01868" name="l01868"></a><span class="lineno"> 1868</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice);</div>
<div class="line"><a id="l01869" name="l01869"></a><span class="lineno"> 1869</span> </div>
<div class="line"><a id="l01870" name="l01870"></a><span class="lineno"> 1870</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>();</div>
<div class="line"><a id="l01867" name="l01867"></a><span class="lineno"> 1867</span> <span class="keyword">auto</span> cfg = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a7a4caa0465c555c5c59ce7c0d0d48d78">envconfig</a>();</div>
<div class="line"><a id="l01868" name="l01868"></a><span class="lineno"> 1868</span> cfg-&gt;FEES.reference_fee = 10;</div>
<div class="line"><a id="l01869" name="l01869"></a><span class="lineno"> 1869</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env{*<span class="keyword">this</span>, std::move(cfg), features};</div>
<div class="line"><a id="l01870" name="l01870"></a><span class="lineno"> 1870</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice);</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> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span> txHash{</div>
<div class="line"><a id="l01873" name="l01873"></a><span class="lineno"> 1873</span> env.tx()-&gt;getJson(<a class="code hl_enumvalue" href="structripple_1_1JsonOptions.html#ab85e43ec84df987200d3355c3ba89f0aa1917451e3686dfe8d5016670eb87ab33">JsonOptions::none</a>)[jss::hash].asString()};</div>
<div class="line"><a id="l01874" name="l01874"></a><span class="lineno"> 1874</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l01875" name="l01875"></a><span class="lineno"> 1875</span> txHash ==</div>
<div class="line"><a id="l01876" name="l01876"></a><span class="lineno"> 1876</span> <span class="stringliteral">&quot;E11F0E0CA14219922B7881F060B9CEE67CFBC87E4049A441ED2AE348FF8FAC&quot;</span></div>
<div class="line"><a id="l01877" name="l01877"></a><span class="lineno"> 1877</span> <span class="stringliteral">&quot;0E&quot;</span>,</div>
<div class="line"><a id="l01878" name="l01878"></a><span class="lineno"> 1878</span> txHash);</div>
<div class="line"><a id="l01879" name="l01879"></a><span class="lineno"> 1879</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> <span class="keyword">const</span> meta = env.rpc(<span class="stringliteral">&quot;tx&quot;</span>, txHash)[jss::result][jss::meta];</div>
<div class="line"><a id="l01880" name="l01880"></a><span class="lineno"> 1880</span> <span class="keyword">auto</span> <span class="keyword">const</span> <span class="keywordtype">id</span> = meta[jss::mpt_issuance_id].<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>();</div>
<div class="line"><a id="l01881" name="l01881"></a><span class="lineno"> 1881</span> <span class="comment">// Expect mpt_issuance_id field</span></div>
<div class="line"><a id="l01882" name="l01882"></a><span class="lineno"> 1882</span> BEAST_EXPECT(meta.<a class="code hl_function" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::mpt_issuance_id));</div>
<div class="line"><a id="l01883" name="l01883"></a><span class="lineno"> 1883</span> BEAST_EXPECT(<span class="keywordtype">id</span> == <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#a586bbd5c54a459cb7f473bbb2c032673">issuanceID</a>()));</div>
<div class="line"><a id="l01884" name="l01884"></a><span class="lineno"> 1884</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l01885" name="l01885"></a><span class="lineno"> 1885</span> <span class="keywordtype">id</span> == <span class="stringliteral">&quot;00000004AE123A8556F3CF91154711376AFB0F894F832B3D&quot;</span>, <span class="keywordtype">id</span>);</div>
<div class="line"><a id="l01886" name="l01886"></a><span class="lineno"> 1886</span> }</div>
<div class="line"><a id="l01887" name="l01887"></a><span class="lineno"> 1887</span> </div>
<div class="line"><a id="l01888" name="l01888"></a><span class="lineno"> 1888</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l01889" name="l01889"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a690da94ce5d0abe22dbb88543fe721a7"> 1889</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a690da94ce5d0abe22dbb88543fe721a7">testClawbackValidation</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</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> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;MPT clawback validations&quot;</span>);</div>
<div class="line"><a id="l01892" name="l01892"></a><span class="lineno"> 1892</span> <span class="keyword">using namespace </span>test::jtx;</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="comment">// Make sure clawback cannot work when featureMPTokensV1 is disabled</span></div>
<div class="line"><a id="l01895" name="l01895"></a><span class="lineno"> 1895</span> {</div>
<div class="line"><a id="l01896" name="l01896"></a><span class="lineno"> 1896</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, features - featureMPTokensV1);</div>
<div class="line"><a id="l01897" name="l01897"></a><span class="lineno"> 1897</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="l01898" name="l01898"></a><span class="lineno"> 1898</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="l01899" name="l01899"></a><span class="lineno"> 1899</span> </div>
<div class="line"><a id="l01900" name="l01900"></a><span class="lineno"> 1900</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>(1000), alice, bob);</div>
<div class="line"><a id="l01901" name="l01901"></a><span class="lineno"> 1901</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="l01902" name="l01902"></a><span class="lineno"> 1902</span> </div>
<div class="line"><a id="l01903" name="l01903"></a><span class="lineno"> 1903</span> <span class="keyword">auto</span> <span class="keyword">const</span> USD = alice[<span class="stringliteral">&quot;USD&quot;</span>];</div>
<div class="line"><a id="l01904" name="l01904"></a><span class="lineno"> 1904</span> <span class="keyword">auto</span> <span class="keyword">const</span> mpt = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPT.html">ripple::test::jtx::MPT</a>(</div>
<div class="line"><a id="l01905" name="l01905"></a><span class="lineno"> 1905</span> alice.name(), <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice), alice));</div>
<div class="line"><a id="l01906" name="l01906"></a><span class="lineno"> 1906</span> </div>
<div class="line"><a id="l01907" name="l01907"></a><span class="lineno"> 1907</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, bob[<span class="stringliteral">&quot;USD&quot;</span>](5), bob), <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="l01908" name="l01908"></a><span class="lineno"> 1908</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="l01909" name="l01909"></a><span class="lineno"> 1909</span> </div>
<div class="line"><a id="l01910" name="l01910"></a><span class="lineno"> 1910</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(5)), <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="l01911" name="l01911"></a><span class="lineno"> 1911</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="l01912" name="l01912"></a><span class="lineno"> 1912</span> </div>
<div class="line"><a id="l01913" name="l01913"></a><span class="lineno"> 1913</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(5), bob), <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="l01914" name="l01914"></a><span class="lineno"> 1914</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="l01915" name="l01915"></a><span class="lineno"> 1915</span> }</div>
<div class="line"><a id="l01916" name="l01916"></a><span class="lineno"> 1916</span> </div>
<div class="line"><a id="l01917" name="l01917"></a><span class="lineno"> 1917</span> <span class="comment">// Test preflight</span></div>
<div class="line"><a id="l01918" name="l01918"></a><span class="lineno"> 1918</span> {</div>
<div class="line"><a id="l01919" name="l01919"></a><span class="lineno"> 1919</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="l01920" name="l01920"></a><span class="lineno"> 1920</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="l01921" name="l01921"></a><span class="lineno"> 1921</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="l01922" name="l01922"></a><span class="lineno"> 1922</span> </div>
<div class="line"><a id="l01923" name="l01923"></a><span class="lineno"> 1923</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>(1000), alice, bob);</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> </div>
<div class="line"><a id="l01926" name="l01926"></a><span class="lineno"> 1926</span> <span class="keyword">auto</span> <span class="keyword">const</span> USD = alice[<span class="stringliteral">&quot;USD&quot;</span>];</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> mpt = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPT.html">ripple::test::jtx::MPT</a>(</div>
<div class="line"><a id="l01928" name="l01928"></a><span class="lineno"> 1928</span> alice.name(), <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice), alice));</div>
<div class="line"><a id="l01929" name="l01929"></a><span class="lineno"> 1929</span> </div>
<div class="line"><a id="l01930" name="l01930"></a><span class="lineno"> 1930</span> <span class="comment">// clawing back IOU from a MPT holder fails</span></div>
<div class="line"><a id="l01931" name="l01931"></a><span class="lineno"> 1931</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, bob[<span class="stringliteral">&quot;USD&quot;</span>](5), bob), <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="l01932" name="l01932"></a><span class="lineno"> 1932</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="l01933" name="l01933"></a><span class="lineno"> 1933</span> </div>
<div class="line"><a id="l01934" name="l01934"></a><span class="lineno"> 1934</span> <span class="comment">// clawing back MPT without specifying a holder fails</span></div>
<div class="line"><a id="l01935" name="l01935"></a><span class="lineno"> 1935</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(5)), <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="l01936" name="l01936"></a><span class="lineno"> 1936</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="l01937" name="l01937"></a><span class="lineno"> 1937</span> </div>
<div class="line"><a id="l01938" name="l01938"></a><span class="lineno"> 1938</span> <span class="comment">// clawing back zero amount fails</span></div>
<div class="line"><a id="l01939" name="l01939"></a><span class="lineno"> 1939</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(0), bob), <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="l01940" name="l01940"></a><span class="lineno"> 1940</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="l01941" name="l01941"></a><span class="lineno"> 1941</span> </div>
<div class="line"><a id="l01942" name="l01942"></a><span class="lineno"> 1942</span> <span class="comment">// alice can&#39;t claw back from herself</span></div>
<div class="line"><a id="l01943" name="l01943"></a><span class="lineno"> 1943</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(5), alice), <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="l01944" name="l01944"></a><span class="lineno"> 1944</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="l01945" name="l01945"></a><span class="lineno"> 1945</span> </div>
<div class="line"><a id="l01946" name="l01946"></a><span class="lineno"> 1946</span> <span class="comment">// can&#39;t clawback negative amount</span></div>
<div class="line"><a id="l01947" name="l01947"></a><span class="lineno"> 1947</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(-1), bob), <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="l01948" name="l01948"></a><span class="lineno"> 1948</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="l01949" name="l01949"></a><span class="lineno"> 1949</span> }</div>
<div class="line"><a id="l01950" name="l01950"></a><span class="lineno"> 1950</span> </div>
<div class="line"><a id="l01951" name="l01951"></a><span class="lineno"> 1951</span> <span class="comment">// Preclaim - clawback fails when MPTCanClawback is disabled on issuance</span></div>
<div class="line"><a id="l01952" name="l01952"></a><span class="lineno"> 1952</span> {</div>
<div class="line"><a id="l01953" name="l01953"></a><span class="lineno"> 1953</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="l01954" name="l01954"></a><span class="lineno"> 1954</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="l01955" name="l01955"></a><span class="lineno"> 1955</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="l01956" name="l01956"></a><span class="lineno"> 1956</span> </div>
<div class="line"><a id="l01957" name="l01957"></a><span class="lineno"> 1957</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l01872" name="l01872"></a><span class="lineno"> 1872</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>();</div>
<div class="line"><a id="l01873" name="l01873"></a><span class="lineno"> 1873</span> </div>
<div class="line"><a id="l01874" name="l01874"></a><span class="lineno"> 1874</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/string/basic_string.html">std::string</a> <span class="keyword">const</span> txHash{</div>
<div class="line"><a id="l01875" name="l01875"></a><span class="lineno"> 1875</span> env.tx()-&gt;getJson(<a class="code hl_enumvalue" href="structripple_1_1JsonOptions.html#ab85e43ec84df987200d3355c3ba89f0aa1917451e3686dfe8d5016670eb87ab33">JsonOptions::none</a>)[jss::hash].asString()};</div>
<div class="line"><a id="l01876" name="l01876"></a><span class="lineno"> 1876</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l01877" name="l01877"></a><span class="lineno"> 1877</span> txHash ==</div>
<div class="line"><a id="l01878" name="l01878"></a><span class="lineno"> 1878</span> <span class="stringliteral">&quot;E11F0E0CA14219922B7881F060B9CEE67CFBC87E4049A441ED2AE348FF8FAC&quot;</span></div>
<div class="line"><a id="l01879" name="l01879"></a><span class="lineno"> 1879</span> <span class="stringliteral">&quot;0E&quot;</span>,</div>
<div class="line"><a id="l01880" name="l01880"></a><span class="lineno"> 1880</span> txHash);</div>
<div class="line"><a id="l01881" name="l01881"></a><span class="lineno"> 1881</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> <span class="keyword">const</span> meta = env.rpc(<span class="stringliteral">&quot;tx&quot;</span>, txHash)[jss::result][jss::meta];</div>
<div class="line"><a id="l01882" name="l01882"></a><span class="lineno"> 1882</span> <span class="keyword">auto</span> <span class="keyword">const</span> <span class="keywordtype">id</span> = meta[jss::mpt_issuance_id].<a class="code hl_function" href="classJson_1_1Value.html#ab0d86bf425efefd03513e8dbfaca317b">asString</a>();</div>
<div class="line"><a id="l01883" name="l01883"></a><span class="lineno"> 1883</span> <span class="comment">// Expect mpt_issuance_id field</span></div>
<div class="line"><a id="l01884" name="l01884"></a><span class="lineno"> 1884</span> BEAST_EXPECT(meta.<a class="code hl_function" href="classJson_1_1Value.html#ad6d4df2227321bab05e86667609a7fad">isMember</a>(jss::mpt_issuance_id));</div>
<div class="line"><a id="l01885" name="l01885"></a><span class="lineno"> 1885</span> BEAST_EXPECT(<span class="keywordtype">id</span> == <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#a586bbd5c54a459cb7f473bbb2c032673">issuanceID</a>()));</div>
<div class="line"><a id="l01886" name="l01886"></a><span class="lineno"> 1886</span> BEAST_EXPECTS(</div>
<div class="line"><a id="l01887" name="l01887"></a><span class="lineno"> 1887</span> <span class="keywordtype">id</span> == <span class="stringliteral">&quot;00000004AE123A8556F3CF91154711376AFB0F894F832B3D&quot;</span>, <span class="keywordtype">id</span>);</div>
<div class="line"><a id="l01888" name="l01888"></a><span class="lineno"> 1888</span> }</div>
<div class="line"><a id="l01889" name="l01889"></a><span class="lineno"> 1889</span> </div>
<div class="line"><a id="l01890" name="l01890"></a><span class="lineno"> 1890</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l01891" name="l01891"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a690da94ce5d0abe22dbb88543fe721a7"> 1891</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a690da94ce5d0abe22dbb88543fe721a7">testClawbackValidation</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l01892" name="l01892"></a><span class="lineno"> 1892</span> {</div>
<div class="line"><a id="l01893" name="l01893"></a><span class="lineno"> 1893</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;MPT clawback validations&quot;</span>);</div>
<div class="line"><a id="l01894" name="l01894"></a><span class="lineno"> 1894</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l01895" name="l01895"></a><span class="lineno"> 1895</span> </div>
<div class="line"><a id="l01896" name="l01896"></a><span class="lineno"> 1896</span> <span class="comment">// Make sure clawback cannot work when featureMPTokensV1 is disabled</span></div>
<div class="line"><a id="l01897" name="l01897"></a><span class="lineno"> 1897</span> {</div>
<div class="line"><a id="l01898" name="l01898"></a><span class="lineno"> 1898</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Env.html">Env</a> env(*<span class="keyword">this</span>, features - featureMPTokensV1);</div>
<div class="line"><a id="l01899" name="l01899"></a><span class="lineno"> 1899</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="l01900" name="l01900"></a><span class="lineno"> 1900</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="l01901" name="l01901"></a><span class="lineno"> 1901</span> </div>
<div class="line"><a id="l01902" name="l01902"></a><span class="lineno"> 1902</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>(1000), alice, bob);</div>
<div class="line"><a id="l01903" name="l01903"></a><span class="lineno"> 1903</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="l01904" name="l01904"></a><span class="lineno"> 1904</span> </div>
<div class="line"><a id="l01905" name="l01905"></a><span class="lineno"> 1905</span> <span class="keyword">auto</span> <span class="keyword">const</span> USD = alice[<span class="stringliteral">&quot;USD&quot;</span>];</div>
<div class="line"><a id="l01906" name="l01906"></a><span class="lineno"> 1906</span> <span class="keyword">auto</span> <span class="keyword">const</span> mpt = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPT.html">ripple::test::jtx::MPT</a>(</div>
<div class="line"><a id="l01907" name="l01907"></a><span class="lineno"> 1907</span> alice.name(), <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice), alice));</div>
<div class="line"><a id="l01908" name="l01908"></a><span class="lineno"> 1908</span> </div>
<div class="line"><a id="l01909" name="l01909"></a><span class="lineno"> 1909</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, bob[<span class="stringliteral">&quot;USD&quot;</span>](5), bob), <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="l01910" name="l01910"></a><span class="lineno"> 1910</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="l01911" name="l01911"></a><span class="lineno"> 1911</span> </div>
<div class="line"><a id="l01912" name="l01912"></a><span class="lineno"> 1912</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(5)), <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="l01913" name="l01913"></a><span class="lineno"> 1913</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="l01914" name="l01914"></a><span class="lineno"> 1914</span> </div>
<div class="line"><a id="l01915" name="l01915"></a><span class="lineno"> 1915</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(5), bob), <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="l01916" name="l01916"></a><span class="lineno"> 1916</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="l01917" name="l01917"></a><span class="lineno"> 1917</span> }</div>
<div class="line"><a id="l01918" name="l01918"></a><span class="lineno"> 1918</span> </div>
<div class="line"><a id="l01919" name="l01919"></a><span class="lineno"> 1919</span> <span class="comment">// Test preflight</span></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> <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="l01922" name="l01922"></a><span class="lineno"> 1922</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="l01923" name="l01923"></a><span class="lineno"> 1923</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="l01924" name="l01924"></a><span class="lineno"> 1924</span> </div>
<div class="line"><a id="l01925" name="l01925"></a><span class="lineno"> 1925</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>(1000), alice, bob);</div>
<div class="line"><a id="l01926" name="l01926"></a><span class="lineno"> 1926</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="l01927" name="l01927"></a><span class="lineno"> 1927</span> </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> USD = alice[<span class="stringliteral">&quot;USD&quot;</span>];</div>
<div class="line"><a id="l01929" name="l01929"></a><span class="lineno"> 1929</span> <span class="keyword">auto</span> <span class="keyword">const</span> mpt = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPT.html">ripple::test::jtx::MPT</a>(</div>
<div class="line"><a id="l01930" name="l01930"></a><span class="lineno"> 1930</span> alice.name(), <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice), alice));</div>
<div class="line"><a id="l01931" name="l01931"></a><span class="lineno"> 1931</span> </div>
<div class="line"><a id="l01932" name="l01932"></a><span class="lineno"> 1932</span> <span class="comment">// clawing back IOU from a MPT holder fails</span></div>
<div class="line"><a id="l01933" name="l01933"></a><span class="lineno"> 1933</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, bob[<span class="stringliteral">&quot;USD&quot;</span>](5), bob), <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="l01934" name="l01934"></a><span class="lineno"> 1934</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="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="comment">// clawing back MPT without specifying a holder fails</span></div>
<div class="line"><a id="l01937" name="l01937"></a><span class="lineno"> 1937</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(5)), <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="l01938" name="l01938"></a><span class="lineno"> 1938</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="l01939" name="l01939"></a><span class="lineno"> 1939</span> </div>
<div class="line"><a id="l01940" name="l01940"></a><span class="lineno"> 1940</span> <span class="comment">// clawing back zero amount fails</span></div>
<div class="line"><a id="l01941" name="l01941"></a><span class="lineno"> 1941</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(0), bob), <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="l01942" name="l01942"></a><span class="lineno"> 1942</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="l01943" name="l01943"></a><span class="lineno"> 1943</span> </div>
<div class="line"><a id="l01944" name="l01944"></a><span class="lineno"> 1944</span> <span class="comment">// alice can&#39;t claw back from herself</span></div>
<div class="line"><a id="l01945" name="l01945"></a><span class="lineno"> 1945</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(5), alice), <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="l01946" name="l01946"></a><span class="lineno"> 1946</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="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">// can&#39;t clawback negative amount</span></div>
<div class="line"><a id="l01949" name="l01949"></a><span class="lineno"> 1949</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(-1), bob), <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="l01950" name="l01950"></a><span class="lineno"> 1950</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="l01951" name="l01951"></a><span class="lineno"> 1951</span> }</div>
<div class="line"><a id="l01952" name="l01952"></a><span class="lineno"> 1952</span> </div>
<div class="line"><a id="l01953" name="l01953"></a><span class="lineno"> 1953</span> <span class="comment">// Preclaim - clawback fails when MPTCanClawback is disabled on issuance</span></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_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="l01956" name="l01956"></a><span class="lineno"> 1956</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="l01957" name="l01957"></a><span class="lineno"> 1957</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="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="comment">// enable asfAllowTrustLineClawback for alice</span></div>
<div class="line"><a id="l01960" name="l01960"></a><span class="lineno"> 1960</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#acedcd08c62e1bb941e2f6c9e289c6582">asfAllowTrustLineClawback</a>));</div>
<div class="line"><a id="l01961" name="l01961"></a><span class="lineno"> 1961</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="l01962" name="l01962"></a><span class="lineno"> 1962</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a34c9d58eaca6b7238258eadaf94b4a46">require</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1flags.html">flags</a>(alice, <a class="code hl_variable" href="namespaceripple.html#acedcd08c62e1bb941e2f6c9e289c6582">asfAllowTrustLineClawback</a>));</div>
<div class="line"><a id="l01963" name="l01963"></a><span class="lineno"> 1963</span> </div>
<div class="line"><a id="l01964" name="l01964"></a><span class="lineno"> 1964</span> <span class="comment">// Create issuance without enabling clawback</span></div>
<div class="line"><a id="l01965" name="l01965"></a><span class="lineno"> 1965</span> mptAlice.create({.ownerCount = 1, .holderCount = 0});</div>
<div class="line"><a id="l01966" name="l01966"></a><span class="lineno"> 1966</span> </div>
<div class="line"><a id="l01967" name="l01967"></a><span class="lineno"> 1967</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l01959" name="l01959"></a><span class="lineno"> 1959</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l01960" name="l01960"></a><span class="lineno"> 1960</span> </div>
<div class="line"><a id="l01961" name="l01961"></a><span class="lineno"> 1961</span> <span class="comment">// enable asfAllowTrustLineClawback for alice</span></div>
<div class="line"><a id="l01962" name="l01962"></a><span class="lineno"> 1962</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#acedcd08c62e1bb941e2f6c9e289c6582">asfAllowTrustLineClawback</a>));</div>
<div class="line"><a id="l01963" name="l01963"></a><span class="lineno"> 1963</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="l01964" name="l01964"></a><span class="lineno"> 1964</span> env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a34c9d58eaca6b7238258eadaf94b4a46">require</a>(<a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1flags.html">flags</a>(alice, <a class="code hl_variable" href="namespaceripple.html#acedcd08c62e1bb941e2f6c9e289c6582">asfAllowTrustLineClawback</a>));</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> <span class="comment">// Create issuance without enabling clawback</span></div>
<div class="line"><a id="l01967" name="l01967"></a><span class="lineno"> 1967</span> mptAlice.create({.ownerCount = 1, .holderCount = 0});</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> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l01969" name="l01969"></a><span class="lineno"> 1969</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l01970" name="l01970"></a><span class="lineno"> 1970</span> </div>
<div class="line"><a id="l01971" name="l01971"></a><span class="lineno"> 1971</span> <span class="comment">// alice cannot clawback before she didn&#39;t enable MPTCanClawback</span></div>
<div class="line"><a id="l01972" name="l01972"></a><span class="lineno"> 1972</span> <span class="comment">// asfAllowTrustLineClawback has no effect</span></div>
<div class="line"><a id="l01973" name="l01973"></a><span class="lineno"> 1973</span> mptAlice.claw(alice, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>);</div>
<div class="line"><a id="l01974" name="l01974"></a><span class="lineno"> 1974</span> }</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> <span class="comment">// Preclaim - test various scenarios</span></div>
<div class="line"><a id="l01977" name="l01977"></a><span class="lineno"> 1977</span> {</div>
<div class="line"><a id="l01978" name="l01978"></a><span class="lineno"> 1978</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="l01979" name="l01979"></a><span class="lineno"> 1979</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="l01980" name="l01980"></a><span class="lineno"> 1980</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="l01981" name="l01981"></a><span class="lineno"> 1981</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="l01982" name="l01982"></a><span class="lineno"> 1982</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>(1000), carol);</div>
<div class="line"><a id="l01983" name="l01983"></a><span class="lineno"> 1983</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="l01984" name="l01984"></a><span class="lineno"> 1984</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l01985" name="l01985"></a><span class="lineno"> 1985</span> </div>
<div class="line"><a id="l01986" name="l01986"></a><span class="lineno"> 1986</span> <span class="keyword">auto</span> <span class="keyword">const</span> fakeMpt = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPT.html">ripple::test::jtx::MPT</a>(</div>
<div class="line"><a id="l01987" name="l01987"></a><span class="lineno"> 1987</span> alice.name(), <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice), alice));</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">// issuer tries to clawback MPT where issuance doesn&#39;t exist</span></div>
<div class="line"><a id="l01990" name="l01990"></a><span class="lineno"> 1990</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, fakeMpt(5), bob), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>));</div>
<div class="line"><a id="l01991" name="l01991"></a><span class="lineno"> 1991</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="l01992" name="l01992"></a><span class="lineno"> 1992</span> </div>
<div class="line"><a id="l01993" name="l01993"></a><span class="lineno"> 1993</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l01994" name="l01994"></a><span class="lineno"> 1994</span> mptAlice.create(</div>
<div class="line"><a id="l01995" name="l01995"></a><span class="lineno"> 1995</span> {.ownerCount = 1, .holderCount = 0, .flags = <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</a>});</div>
<div class="line"><a id="l01996" name="l01996"></a><span class="lineno"> 1996</span> </div>
<div class="line"><a id="l01997" name="l01997"></a><span class="lineno"> 1997</span> <span class="comment">// alice tries to clawback from someone who doesn&#39;t have MPToken</span></div>
<div class="line"><a id="l01998" name="l01998"></a><span class="lineno"> 1998</span> mptAlice.claw(alice, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>);</div>
<div class="line"><a id="l01999" name="l01999"></a><span class="lineno"> 1999</span> </div>
<div class="line"><a id="l02000" name="l02000"></a><span class="lineno"> 2000</span> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02001" name="l02001"></a><span class="lineno"> 2001</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l02002" name="l02002"></a><span class="lineno"> 2002</span> </div>
<div class="line"><a id="l02003" name="l02003"></a><span class="lineno"> 2003</span> <span class="comment">// clawback fails because bob currently has a balance of zero</span></div>
<div class="line"><a id="l02004" name="l02004"></a><span class="lineno"> 2004</span> mptAlice.claw(alice, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca89957bfc4da8257ff0b1c914c10a41ec">tecINSUFFICIENT_FUNDS</a>);</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> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02007" name="l02007"></a><span class="lineno"> 2007</span> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l02008" name="l02008"></a><span class="lineno"> 2008</span> </div>
<div class="line"><a id="l02009" name="l02009"></a><span class="lineno"> 2009</span> <span class="comment">// carol fails tries to clawback from bob because he is not the</span></div>
<div class="line"><a id="l02010" name="l02010"></a><span class="lineno"> 2010</span> <span class="comment">// issuer</span></div>
<div class="line"><a id="l02011" name="l02011"></a><span class="lineno"> 2011</span> mptAlice.claw(carol, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>);</div>
<div class="line"><a id="l02012" name="l02012"></a><span class="lineno"> 2012</span> }</div>
<div class="line"><a id="l02013" name="l02013"></a><span class="lineno"> 2013</span> </div>
<div class="line"><a id="l02014" name="l02014"></a><span class="lineno"> 2014</span> <span class="comment">// clawback more than max amount</span></div>
<div class="line"><a id="l02015" name="l02015"></a><span class="lineno"> 2015</span> <span class="comment">// fails in the json parser before</span></div>
<div class="line"><a id="l02016" name="l02016"></a><span class="lineno"> 2016</span> <span class="comment">// transactor is called</span></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> <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="l02019" name="l02019"></a><span class="lineno"> 2019</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="l02020" name="l02020"></a><span class="lineno"> 2020</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="l02021" name="l02021"></a><span class="lineno"> 2021</span> </div>
<div class="line"><a id="l02022" name="l02022"></a><span class="lineno"> 2022</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>(1000), alice, bob);</div>
<div class="line"><a id="l02023" name="l02023"></a><span class="lineno"> 2023</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="l02024" name="l02024"></a><span class="lineno"> 2024</span> </div>
<div class="line"><a id="l02025" name="l02025"></a><span class="lineno"> 2025</span> <span class="keyword">auto</span> <span class="keyword">const</span> mpt = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPT.html">ripple::test::jtx::MPT</a>(</div>
<div class="line"><a id="l02026" name="l02026"></a><span class="lineno"> 2026</span> alice.name(), <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice), alice));</div>
<div class="line"><a id="l02027" name="l02027"></a><span class="lineno"> 2027</span> </div>
<div class="line"><a id="l02028" name="l02028"></a><span class="lineno"> 2028</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jv = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(1), bob);</div>
<div class="line"><a id="l02029" name="l02029"></a><span class="lineno"> 2029</span> jv[jss::Amount][jss::value] = <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_variable" href="namespaceripple.html#a47fbaf29602fea01a79eb987cc21371c">maxMPTokenAmount</a> + 1);</div>
<div class="line"><a id="l02030" name="l02030"></a><span class="lineno"> 2030</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jv1;</div>
<div class="line"><a id="l02031" name="l02031"></a><span class="lineno"> 2031</span> jv1[jss::secret] = alice.name();</div>
<div class="line"><a id="l02032" name="l02032"></a><span class="lineno"> 2032</span> jv1[jss::tx_json] = jv;</div>
<div class="line"><a id="l02033" name="l02033"></a><span class="lineno"> 2033</span> <span class="keyword">auto</span> <span class="keyword">const</span> jrr = env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ad69855b4b26fc3c83922c5783487592c">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;submit&quot;</span>, <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(jv1));</div>
<div class="line"><a id="l02034" name="l02034"></a><span class="lineno"> 2034</span> BEAST_EXPECT(jrr[jss::result][jss::error] == <span class="stringliteral">&quot;invalidParams&quot;</span>);</div>
<div class="line"><a id="l02035" name="l02035"></a><span class="lineno"> 2035</span> }</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> </div>
<div class="line"><a id="l02038" name="l02038"></a><span class="lineno"> 2038</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l02039" name="l02039"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a3390bf7a3d0374c898f6c1e33a390f1c"> 2039</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a3390bf7a3d0374c898f6c1e33a390f1c">testClawback</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</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> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;MPT Clawback&quot;</span>);</div>
<div class="line"><a id="l02042" name="l02042"></a><span class="lineno"> 2042</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l02043" name="l02043"></a><span class="lineno"> 2043</span> </div>
<div class="line"><a id="l02044" name="l02044"></a><span class="lineno"> 2044</span> {</div>
<div class="line"><a id="l02045" name="l02045"></a><span class="lineno"> 2045</span> <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="l02046" name="l02046"></a><span class="lineno"> 2046</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="l02047" name="l02047"></a><span class="lineno"> 2047</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="l02048" name="l02048"></a><span class="lineno"> 2048</span> </div>
<div class="line"><a id="l02049" name="l02049"></a><span class="lineno"> 2049</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l01971" name="l01971"></a><span class="lineno"> 1971</span> mptAlice.pay(alice, bob, 100);</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="comment">// alice cannot clawback before she didn&#39;t enable MPTCanClawback</span></div>
<div class="line"><a id="l01974" name="l01974"></a><span class="lineno"> 1974</span> <span class="comment">// asfAllowTrustLineClawback has no effect</span></div>
<div class="line"><a id="l01975" name="l01975"></a><span class="lineno"> 1975</span> mptAlice.claw(alice, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>);</div>
<div class="line"><a id="l01976" name="l01976"></a><span class="lineno"> 1976</span> }</div>
<div class="line"><a id="l01977" name="l01977"></a><span class="lineno"> 1977</span> </div>
<div class="line"><a id="l01978" name="l01978"></a><span class="lineno"> 1978</span> <span class="comment">// Preclaim - test various scenarios</span></div>
<div class="line"><a id="l01979" name="l01979"></a><span class="lineno"> 1979</span> {</div>
<div class="line"><a id="l01980" name="l01980"></a><span class="lineno"> 1980</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="l01981" name="l01981"></a><span class="lineno"> 1981</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="l01982" name="l01982"></a><span class="lineno"> 1982</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="l01983" name="l01983"></a><span class="lineno"> 1983</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="l01984" name="l01984"></a><span class="lineno"> 1984</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>(1000), carol);</div>
<div class="line"><a id="l01985" name="l01985"></a><span class="lineno"> 1985</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="l01986" name="l01986"></a><span class="lineno"> 1986</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</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> <span class="keyword">auto</span> <span class="keyword">const</span> fakeMpt = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPT.html">ripple::test::jtx::MPT</a>(</div>
<div class="line"><a id="l01989" name="l01989"></a><span class="lineno"> 1989</span> alice.name(), <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice), alice));</div>
<div class="line"><a id="l01990" name="l01990"></a><span class="lineno"> 1990</span> </div>
<div class="line"><a id="l01991" name="l01991"></a><span class="lineno"> 1991</span> <span class="comment">// issuer tries to clawback MPT where issuance doesn&#39;t exist</span></div>
<div class="line"><a id="l01992" name="l01992"></a><span class="lineno"> 1992</span> env(<a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, fakeMpt(5), bob), <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1ter.html">ter</a>(<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>));</div>
<div class="line"><a id="l01993" name="l01993"></a><span class="lineno"> 1993</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="l01994" name="l01994"></a><span class="lineno"> 1994</span> </div>
<div class="line"><a id="l01995" name="l01995"></a><span class="lineno"> 1995</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l01996" name="l01996"></a><span class="lineno"> 1996</span> mptAlice.create(</div>
<div class="line"><a id="l01997" name="l01997"></a><span class="lineno"> 1997</span> {.ownerCount = 1, .holderCount = 0, .flags = <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</a>});</div>
<div class="line"><a id="l01998" name="l01998"></a><span class="lineno"> 1998</span> </div>
<div class="line"><a id="l01999" name="l01999"></a><span class="lineno"> 1999</span> <span class="comment">// alice tries to clawback from someone who doesn&#39;t have MPToken</span></div>
<div class="line"><a id="l02000" name="l02000"></a><span class="lineno"> 2000</span> mptAlice.claw(alice, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca2f3fdd22dc22973eca4c97cb3f9e65fc">tecOBJECT_NOT_FOUND</a>);</div>
<div class="line"><a id="l02001" name="l02001"></a><span class="lineno"> 2001</span> </div>
<div class="line"><a id="l02002" name="l02002"></a><span class="lineno"> 2002</span> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02003" name="l02003"></a><span class="lineno"> 2003</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l02004" name="l02004"></a><span class="lineno"> 2004</span> </div>
<div class="line"><a id="l02005" name="l02005"></a><span class="lineno"> 2005</span> <span class="comment">// clawback fails because bob currently has a balance of zero</span></div>
<div class="line"><a id="l02006" name="l02006"></a><span class="lineno"> 2006</span> mptAlice.claw(alice, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca89957bfc4da8257ff0b1c914c10a41ec">tecINSUFFICIENT_FUNDS</a>);</div>
<div class="line"><a id="l02007" name="l02007"></a><span class="lineno"> 2007</span> </div>
<div class="line"><a id="l02008" name="l02008"></a><span class="lineno"> 2008</span> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02009" name="l02009"></a><span class="lineno"> 2009</span> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l02010" name="l02010"></a><span class="lineno"> 2010</span> </div>
<div class="line"><a id="l02011" name="l02011"></a><span class="lineno"> 2011</span> <span class="comment">// carol fails tries to clawback from bob because he is not the</span></div>
<div class="line"><a id="l02012" name="l02012"></a><span class="lineno"> 2012</span> <span class="comment">// issuer</span></div>
<div class="line"><a id="l02013" name="l02013"></a><span class="lineno"> 2013</span> mptAlice.claw(carol, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca9af7057961bc54674f4a6c2dd8ed6ab9">tecNO_PERMISSION</a>);</div>
<div class="line"><a id="l02014" name="l02014"></a><span class="lineno"> 2014</span> }</div>
<div class="line"><a id="l02015" name="l02015"></a><span class="lineno"> 2015</span> </div>
<div class="line"><a id="l02016" name="l02016"></a><span class="lineno"> 2016</span> <span class="comment">// clawback more than max amount</span></div>
<div class="line"><a id="l02017" name="l02017"></a><span class="lineno"> 2017</span> <span class="comment">// fails in the json parser before</span></div>
<div class="line"><a id="l02018" name="l02018"></a><span class="lineno"> 2018</span> <span class="comment">// transactor is called</span></div>
<div class="line"><a id="l02019" name="l02019"></a><span class="lineno"> 2019</span> {</div>
<div class="line"><a id="l02020" name="l02020"></a><span class="lineno"> 2020</span> <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="l02021" name="l02021"></a><span class="lineno"> 2021</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="l02022" name="l02022"></a><span class="lineno"> 2022</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="l02023" name="l02023"></a><span class="lineno"> 2023</span> </div>
<div class="line"><a id="l02024" name="l02024"></a><span class="lineno"> 2024</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>(1000), alice, bob);</div>
<div class="line"><a id="l02025" name="l02025"></a><span class="lineno"> 2025</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="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="keyword">auto</span> <span class="keyword">const</span> mpt = <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPT.html">ripple::test::jtx::MPT</a>(</div>
<div class="line"><a id="l02028" name="l02028"></a><span class="lineno"> 2028</span> alice.name(), <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#a2ef09f6f41b7d8a2dc89175e3b108f87">seq</a>(alice), alice));</div>
<div class="line"><a id="l02029" name="l02029"></a><span class="lineno"> 2029</span> </div>
<div class="line"><a id="l02030" name="l02030"></a><span class="lineno"> 2030</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jv = <a class="code hl_function" href="namespaceripple_1_1test_1_1jtx.html#a409a496cdd309c9df5729450ebb52611">claw</a>(alice, mpt(1), bob);</div>
<div class="line"><a id="l02031" name="l02031"></a><span class="lineno"> 2031</span> jv[jss::Amount][jss::value] = <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(<a class="code hl_variable" href="namespaceripple.html#a47fbaf29602fea01a79eb987cc21371c">maxMPTokenAmount</a> + 1);</div>
<div class="line"><a id="l02032" name="l02032"></a><span class="lineno"> 2032</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> jv1;</div>
<div class="line"><a id="l02033" name="l02033"></a><span class="lineno"> 2033</span> jv1[jss::secret] = alice.name();</div>
<div class="line"><a id="l02034" name="l02034"></a><span class="lineno"> 2034</span> jv1[jss::tx_json] = jv;</div>
<div class="line"><a id="l02035" name="l02035"></a><span class="lineno"> 2035</span> <span class="keyword">auto</span> <span class="keyword">const</span> jrr = env.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1Env.html#ad69855b4b26fc3c83922c5783487592c">rpc</a>(<span class="stringliteral">&quot;json&quot;</span>, <span class="stringliteral">&quot;submit&quot;</span>, <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(jv1));</div>
<div class="line"><a id="l02036" name="l02036"></a><span class="lineno"> 2036</span> BEAST_EXPECT(jrr[jss::result][jss::error] == <span class="stringliteral">&quot;invalidParams&quot;</span>);</div>
<div class="line"><a id="l02037" name="l02037"></a><span class="lineno"> 2037</span> }</div>
<div class="line"><a id="l02038" name="l02038"></a><span class="lineno"> 2038</span> }</div>
<div class="line"><a id="l02039" name="l02039"></a><span class="lineno"> 2039</span> </div>
<div class="line"><a id="l02040" name="l02040"></a><span class="lineno"> 2040</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l02041" name="l02041"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a3390bf7a3d0374c898f6c1e33a390f1c"> 2041</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a3390bf7a3d0374c898f6c1e33a390f1c">testClawback</a>(<a class="code hl_class" href="classripple_1_1FeatureBitset.html">FeatureBitset</a> features)</div>
<div class="line"><a id="l02042" name="l02042"></a><span class="lineno"> 2042</span> {</div>
<div class="line"><a id="l02043" name="l02043"></a><span class="lineno"> 2043</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;MPT Clawback&quot;</span>);</div>
<div class="line"><a id="l02044" name="l02044"></a><span class="lineno"> 2044</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l02045" name="l02045"></a><span class="lineno"> 2045</span> </div>
<div class="line"><a id="l02046" name="l02046"></a><span class="lineno"> 2046</span> {</div>
<div class="line"><a id="l02047" name="l02047"></a><span class="lineno"> 2047</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="l02048" name="l02048"></a><span class="lineno"> 2048</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="l02049" name="l02049"></a><span class="lineno"> 2049</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="l02050" name="l02050"></a><span class="lineno"> 2050</span> </div>
<div class="line"><a id="l02051" name="l02051"></a><span class="lineno"> 2051</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l02052" name="l02052"></a><span class="lineno"> 2052</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>(</div>
<div class="line"><a id="l02053" name="l02053"></a><span class="lineno"> 2053</span> {.ownerCount = 1, .holderCount = 0, .flags = <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</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> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02056" name="l02056"></a><span class="lineno"> 2056</span> mptAlice.authorize({.account = bob});</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> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02059" name="l02059"></a><span class="lineno"> 2059</span> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l02060" name="l02060"></a><span class="lineno"> 2060</span> </div>
<div class="line"><a id="l02061" name="l02061"></a><span class="lineno"> 2061</span> mptAlice.claw(alice, bob, 1);</div>
<div class="line"><a id="l02051" name="l02051"></a><span class="lineno"> 2051</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l02052" name="l02052"></a><span class="lineno"> 2052</span> </div>
<div class="line"><a id="l02053" name="l02053"></a><span class="lineno"> 2053</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l02054" name="l02054"></a><span class="lineno"> 2054</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>(</div>
<div class="line"><a id="l02055" name="l02055"></a><span class="lineno"> 2055</span> {.ownerCount = 1, .holderCount = 0, .flags = <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</a>});</div>
<div class="line"><a id="l02056" name="l02056"></a><span class="lineno"> 2056</span> </div>
<div class="line"><a id="l02057" name="l02057"></a><span class="lineno"> 2057</span> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02058" name="l02058"></a><span class="lineno"> 2058</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l02059" name="l02059"></a><span class="lineno"> 2059</span> </div>
<div class="line"><a id="l02060" name="l02060"></a><span class="lineno"> 2060</span> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02061" name="l02061"></a><span class="lineno"> 2061</span> mptAlice.pay(alice, bob, 100);</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> mptAlice.claw(alice, bob, 1000);</div>
<div class="line"><a id="l02063" name="l02063"></a><span class="lineno"> 2063</span> mptAlice.claw(alice, bob, 1);</div>
<div class="line"><a id="l02064" name="l02064"></a><span class="lineno"> 2064</span> </div>
<div class="line"><a id="l02065" name="l02065"></a><span class="lineno"> 2065</span> <span class="comment">// clawback fails because bob currently has a balance of zero</span></div>
<div class="line"><a id="l02066" name="l02066"></a><span class="lineno"> 2066</span> mptAlice.claw(alice, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca89957bfc4da8257ff0b1c914c10a41ec">tecINSUFFICIENT_FUNDS</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> </div>
<div class="line"><a id="l02069" name="l02069"></a><span class="lineno"> 2069</span> <span class="comment">// Test that globally locked funds can be clawed</span></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> <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="l02072" name="l02072"></a><span class="lineno"> 2072</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="l02073" name="l02073"></a><span class="lineno"> 2073</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="l02074" name="l02074"></a><span class="lineno"> 2074</span> </div>
<div class="line"><a id="l02075" name="l02075"></a><span class="lineno"> 2075</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l02065" name="l02065"></a><span class="lineno"> 2065</span> mptAlice.claw(alice, bob, 1000);</div>
<div class="line"><a id="l02066" name="l02066"></a><span class="lineno"> 2066</span> </div>
<div class="line"><a id="l02067" name="l02067"></a><span class="lineno"> 2067</span> <span class="comment">// clawback fails because bob currently has a balance of zero</span></div>
<div class="line"><a id="l02068" name="l02068"></a><span class="lineno"> 2068</span> mptAlice.claw(alice, bob, 1, <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca89957bfc4da8257ff0b1c914c10a41ec">tecINSUFFICIENT_FUNDS</a>);</div>
<div class="line"><a id="l02069" name="l02069"></a><span class="lineno"> 2069</span> }</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> <span class="comment">// Test that globally locked funds can be clawed</span></div>
<div class="line"><a id="l02072" name="l02072"></a><span class="lineno"> 2072</span> {</div>
<div class="line"><a id="l02073" name="l02073"></a><span class="lineno"> 2073</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="l02074" name="l02074"></a><span class="lineno"> 2074</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="l02075" name="l02075"></a><span class="lineno"> 2075</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="l02076" name="l02076"></a><span class="lineno"> 2076</span> </div>
<div class="line"><a id="l02077" name="l02077"></a><span class="lineno"> 2077</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l02078" name="l02078"></a><span class="lineno"> 2078</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>(</div>
<div class="line"><a id="l02079" name="l02079"></a><span class="lineno"> 2079</span> {.ownerCount = 1,</div>
<div class="line"><a id="l02080" name="l02080"></a><span class="lineno"> 2080</span> .holderCount = 0,</div>
<div class="line"><a id="l02081" name="l02081"></a><span class="lineno"> 2081</span> .flags = <a class="code hl_variable" href="namespaceripple.html#ae9c5556c775f5086df7a1be0c7353971">tfMPTCanLock</a> | <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</a>});</div>
<div class="line"><a id="l02082" name="l02082"></a><span class="lineno"> 2082</span> </div>
<div class="line"><a id="l02083" name="l02083"></a><span class="lineno"> 2083</span> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02084" name="l02084"></a><span class="lineno"> 2084</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l02085" name="l02085"></a><span class="lineno"> 2085</span> </div>
<div class="line"><a id="l02086" name="l02086"></a><span class="lineno"> 2086</span> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02087" name="l02087"></a><span class="lineno"> 2087</span> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l02088" name="l02088"></a><span class="lineno"> 2088</span> </div>
<div class="line"><a id="l02089" name="l02089"></a><span class="lineno"> 2089</span> mptAlice.set({.account = alice, .flags = <a class="code hl_variable" href="namespaceripple.html#aa361223d1f07f3e0838be875704f25c2">tfMPTLock</a>});</div>
<div class="line"><a id="l02077" name="l02077"></a><span class="lineno"> 2077</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l02078" name="l02078"></a><span class="lineno"> 2078</span> </div>
<div class="line"><a id="l02079" name="l02079"></a><span class="lineno"> 2079</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l02080" name="l02080"></a><span class="lineno"> 2080</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>(</div>
<div class="line"><a id="l02081" name="l02081"></a><span class="lineno"> 2081</span> {.ownerCount = 1,</div>
<div class="line"><a id="l02082" name="l02082"></a><span class="lineno"> 2082</span> .holderCount = 0,</div>
<div class="line"><a id="l02083" name="l02083"></a><span class="lineno"> 2083</span> .flags = <a class="code hl_variable" href="namespaceripple.html#ae9c5556c775f5086df7a1be0c7353971">tfMPTCanLock</a> | <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</a>});</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> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02086" name="l02086"></a><span class="lineno"> 2086</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l02087" name="l02087"></a><span class="lineno"> 2087</span> </div>
<div class="line"><a id="l02088" name="l02088"></a><span class="lineno"> 2088</span> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02089" name="l02089"></a><span class="lineno"> 2089</span> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l02090" name="l02090"></a><span class="lineno"> 2090</span> </div>
<div class="line"><a id="l02091" name="l02091"></a><span class="lineno"> 2091</span> mptAlice.claw(alice, bob, 100);</div>
<div class="line"><a id="l02092" name="l02092"></a><span class="lineno"> 2092</span> }</div>
<div class="line"><a id="l02093" name="l02093"></a><span class="lineno"> 2093</span> </div>
<div class="line"><a id="l02094" name="l02094"></a><span class="lineno"> 2094</span> <span class="comment">// Test that individually locked funds can be clawed</span></div>
<div class="line"><a id="l02095" name="l02095"></a><span class="lineno"> 2095</span> {</div>
<div class="line"><a id="l02096" name="l02096"></a><span class="lineno"> 2096</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="l02097" name="l02097"></a><span class="lineno"> 2097</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="l02098" name="l02098"></a><span class="lineno"> 2098</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="l02099" name="l02099"></a><span class="lineno"> 2099</span> </div>
<div class="line"><a id="l02100" name="l02100"></a><span class="lineno"> 2100</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l02091" name="l02091"></a><span class="lineno"> 2091</span> mptAlice.set({.account = alice, .flags = <a class="code hl_variable" href="namespaceripple.html#aa361223d1f07f3e0838be875704f25c2">tfMPTLock</a>});</div>
<div class="line"><a id="l02092" name="l02092"></a><span class="lineno"> 2092</span> </div>
<div class="line"><a id="l02093" name="l02093"></a><span class="lineno"> 2093</span> mptAlice.claw(alice, bob, 100);</div>
<div class="line"><a id="l02094" name="l02094"></a><span class="lineno"> 2094</span> }</div>
<div class="line"><a id="l02095" name="l02095"></a><span class="lineno"> 2095</span> </div>
<div class="line"><a id="l02096" name="l02096"></a><span class="lineno"> 2096</span> <span class="comment">// Test that individually locked funds can be clawed</span></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> <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="l02099" name="l02099"></a><span class="lineno"> 2099</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="l02100" name="l02100"></a><span class="lineno"> 2100</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="l02101" name="l02101"></a><span class="lineno"> 2101</span> </div>
<div class="line"><a id="l02102" name="l02102"></a><span class="lineno"> 2102</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l02103" name="l02103"></a><span class="lineno"> 2103</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>(</div>
<div class="line"><a id="l02104" name="l02104"></a><span class="lineno"> 2104</span> {.ownerCount = 1,</div>
<div class="line"><a id="l02105" name="l02105"></a><span class="lineno"> 2105</span> .holderCount = 0,</div>
<div class="line"><a id="l02106" name="l02106"></a><span class="lineno"> 2106</span> .flags = <a class="code hl_variable" href="namespaceripple.html#ae9c5556c775f5086df7a1be0c7353971">tfMPTCanLock</a> | <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</a>});</div>
<div class="line"><a id="l02107" name="l02107"></a><span class="lineno"> 2107</span> </div>
<div class="line"><a id="l02108" name="l02108"></a><span class="lineno"> 2108</span> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02109" name="l02109"></a><span class="lineno"> 2109</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l02110" name="l02110"></a><span class="lineno"> 2110</span> </div>
<div class="line"><a id="l02111" name="l02111"></a><span class="lineno"> 2111</span> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02112" name="l02112"></a><span class="lineno"> 2112</span> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l02113" name="l02113"></a><span class="lineno"> 2113</span> </div>
<div class="line"><a id="l02114" name="l02114"></a><span class="lineno"> 2114</span> mptAlice.set({.account = alice, .holder = bob, .flags = <a class="code hl_variable" href="namespaceripple.html#aa361223d1f07f3e0838be875704f25c2">tfMPTLock</a>});</div>
<div class="line"><a id="l02102" name="l02102"></a><span class="lineno"> 2102</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l02103" name="l02103"></a><span class="lineno"> 2103</span> </div>
<div class="line"><a id="l02104" name="l02104"></a><span class="lineno"> 2104</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l02105" name="l02105"></a><span class="lineno"> 2105</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>(</div>
<div class="line"><a id="l02106" name="l02106"></a><span class="lineno"> 2106</span> {.ownerCount = 1,</div>
<div class="line"><a id="l02107" name="l02107"></a><span class="lineno"> 2107</span> .holderCount = 0,</div>
<div class="line"><a id="l02108" name="l02108"></a><span class="lineno"> 2108</span> .flags = <a class="code hl_variable" href="namespaceripple.html#ae9c5556c775f5086df7a1be0c7353971">tfMPTCanLock</a> | <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</a>});</div>
<div class="line"><a id="l02109" name="l02109"></a><span class="lineno"> 2109</span> </div>
<div class="line"><a id="l02110" name="l02110"></a><span class="lineno"> 2110</span> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02111" name="l02111"></a><span class="lineno"> 2111</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l02112" name="l02112"></a><span class="lineno"> 2112</span> </div>
<div class="line"><a id="l02113" name="l02113"></a><span class="lineno"> 2113</span> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02114" name="l02114"></a><span class="lineno"> 2114</span> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l02115" name="l02115"></a><span class="lineno"> 2115</span> </div>
<div class="line"><a id="l02116" name="l02116"></a><span class="lineno"> 2116</span> mptAlice.claw(alice, bob, 100);</div>
<div class="line"><a id="l02117" name="l02117"></a><span class="lineno"> 2117</span> }</div>
<div class="line"><a id="l02118" name="l02118"></a><span class="lineno"> 2118</span> </div>
<div class="line"><a id="l02119" name="l02119"></a><span class="lineno"> 2119</span> <span class="comment">// Test that unauthorized funds can be clawed back</span></div>
<div class="line"><a id="l02120" name="l02120"></a><span class="lineno"> 2120</span> {</div>
<div class="line"><a id="l02121" name="l02121"></a><span class="lineno"> 2121</span> <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="l02122" name="l02122"></a><span class="lineno"> 2122</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="l02123" name="l02123"></a><span class="lineno"> 2123</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="l02124" name="l02124"></a><span class="lineno"> 2124</span> </div>
<div class="line"><a id="l02125" name="l02125"></a><span class="lineno"> 2125</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l02116" name="l02116"></a><span class="lineno"> 2116</span> mptAlice.set({.account = alice, .holder = bob, .flags = <a class="code hl_variable" href="namespaceripple.html#aa361223d1f07f3e0838be875704f25c2">tfMPTLock</a>});</div>
<div class="line"><a id="l02117" name="l02117"></a><span class="lineno"> 2117</span> </div>
<div class="line"><a id="l02118" name="l02118"></a><span class="lineno"> 2118</span> mptAlice.claw(alice, bob, 100);</div>
<div class="line"><a id="l02119" name="l02119"></a><span class="lineno"> 2119</span> }</div>
<div class="line"><a id="l02120" name="l02120"></a><span class="lineno"> 2120</span> </div>
<div class="line"><a id="l02121" name="l02121"></a><span class="lineno"> 2121</span> <span class="comment">// Test that unauthorized funds can be clawed back</span></div>
<div class="line"><a id="l02122" name="l02122"></a><span class="lineno"> 2122</span> {</div>
<div class="line"><a id="l02123" name="l02123"></a><span class="lineno"> 2123</span> <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="l02124" name="l02124"></a><span class="lineno"> 2124</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="l02125" name="l02125"></a><span class="lineno"> 2125</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="l02126" name="l02126"></a><span class="lineno"> 2126</span> </div>
<div class="line"><a id="l02127" name="l02127"></a><span class="lineno"> 2127</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l02128" name="l02128"></a><span class="lineno"> 2128</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>(</div>
<div class="line"><a id="l02129" name="l02129"></a><span class="lineno"> 2129</span> {.ownerCount = 1,</div>
<div class="line"><a id="l02130" name="l02130"></a><span class="lineno"> 2130</span> .holderCount = 0,</div>
<div class="line"><a id="l02131" name="l02131"></a><span class="lineno"> 2131</span> .flags = <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</a> | <a class="code hl_variable" href="namespaceripple.html#ae04eebbb7e9cffb009d2f2251c0263a2">tfMPTRequireAuth</a>});</div>
<div class="line"><a id="l02132" name="l02132"></a><span class="lineno"> 2132</span> </div>
<div class="line"><a id="l02133" name="l02133"></a><span class="lineno"> 2133</span> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02134" name="l02134"></a><span class="lineno"> 2134</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l02135" name="l02135"></a><span class="lineno"> 2135</span> </div>
<div class="line"><a id="l02136" name="l02136"></a><span class="lineno"> 2136</span> <span class="comment">// alice authorizes bob</span></div>
<div class="line"><a id="l02137" name="l02137"></a><span class="lineno"> 2137</span> mptAlice.authorize({.account = alice, .holder = bob});</div>
<div class="line"><a id="l02138" name="l02138"></a><span class="lineno"> 2138</span> </div>
<div class="line"><a id="l02139" name="l02139"></a><span class="lineno"> 2139</span> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02140" name="l02140"></a><span class="lineno"> 2140</span> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l02141" name="l02141"></a><span class="lineno"> 2141</span> </div>
<div class="line"><a id="l02142" name="l02142"></a><span class="lineno"> 2142</span> <span class="comment">// alice unauthorizes bob</span></div>
<div class="line"><a id="l02143" name="l02143"></a><span class="lineno"> 2143</span> mptAlice.authorize(</div>
<div class="line"><a id="l02144" name="l02144"></a><span class="lineno"> 2144</span> {.account = alice, .holder = bob, .flags = <a class="code hl_variable" href="namespaceripple.html#a879ff786afc09842952c6cbca93d46a8">tfMPTUnauthorize</a>});</div>
<div class="line"><a id="l02145" name="l02145"></a><span class="lineno"> 2145</span> </div>
<div class="line"><a id="l02146" name="l02146"></a><span class="lineno"> 2146</span> mptAlice.claw(alice, bob, 100);</div>
<div class="line"><a id="l02147" name="l02147"></a><span class="lineno"> 2147</span> }</div>
<div class="line"><a id="l02148" name="l02148"></a><span class="lineno"> 2148</span> }</div>
<div class="line"><a id="l02149" name="l02149"></a><span class="lineno"> 2149</span> </div>
<div class="line"><a id="l02150" name="l02150"></a><span class="lineno"> 2150</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l02151" name="l02151"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a6338179a7b9ae6729306434870ff6a07"> 2151</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a6338179a7b9ae6729306434870ff6a07">testTokensEquality</a>()</div>
<div class="line"><a id="l02152" name="l02152"></a><span class="lineno"> 2152</span> {</div>
<div class="line"><a id="l02153" name="l02153"></a><span class="lineno"> 2153</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l02154" name="l02154"></a><span class="lineno"> 2154</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Tokens Equality&quot;</span>);</div>
<div class="line"><a id="l02155" name="l02155"></a><span class="lineno"> 2155</span> <a class="code hl_class" href="classripple_1_1base__uint.html">Currency</a> <span class="keyword">const</span> cur1{<a class="code hl_function" href="namespaceripple.html#afca83ec321d40b83929b54d5faf9433b">to_currency</a>(<span class="stringliteral">&quot;CU1&quot;</span>)};</div>
<div class="line"><a id="l02156" name="l02156"></a><span class="lineno"> 2156</span> <a class="code hl_class" href="classripple_1_1base__uint.html">Currency</a> <span class="keyword">const</span> cur2{<a class="code hl_function" href="namespaceripple.html#afca83ec321d40b83929b54d5faf9433b">to_currency</a>(<span class="stringliteral">&quot;CU2&quot;</span>)};</div>
<div class="line"><a id="l02157" name="l02157"></a><span class="lineno"> 2157</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> gw1{<span class="stringliteral">&quot;gw1&quot;</span>};</div>
<div class="line"><a id="l02158" name="l02158"></a><span class="lineno"> 2158</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> gw2{<span class="stringliteral">&quot;gw2&quot;</span>};</div>
<div class="line"><a id="l02159" name="l02159"></a><span class="lineno"> 2159</span> <a class="code hl_class" href="classripple_1_1base__uint.html">MPTID</a> <span class="keyword">const</span> mpt1 = <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(1, gw1);</div>
<div class="line"><a id="l02160" name="l02160"></a><span class="lineno"> 2160</span> <a class="code hl_class" href="classripple_1_1base__uint.html">MPTID</a> <span class="keyword">const</span> mpt1a = <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(1, gw1);</div>
<div class="line"><a id="l02161" name="l02161"></a><span class="lineno"> 2161</span> <a class="code hl_class" href="classripple_1_1base__uint.html">MPTID</a> <span class="keyword">const</span> mpt2 = <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(1, gw2);</div>
<div class="line"><a id="l02162" name="l02162"></a><span class="lineno"> 2162</span> <a class="code hl_class" href="classripple_1_1base__uint.html">MPTID</a> <span class="keyword">const</span> mpt3 = <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(2, gw2);</div>
<div class="line"><a id="l02163" name="l02163"></a><span class="lineno"> 2163</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetCur1Gw1{<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>{cur1, gw1}};</div>
<div class="line"><a id="l02164" name="l02164"></a><span class="lineno"> 2164</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetCur1Gw1a{<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>{cur1, gw1}};</div>
<div class="line"><a id="l02165" name="l02165"></a><span class="lineno"> 2165</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetCur2Gw1{<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>{cur2, gw1}};</div>
<div class="line"><a id="l02166" name="l02166"></a><span class="lineno"> 2166</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetCur2Gw2{<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>{cur2, gw2}};</div>
<div class="line"><a id="l02167" name="l02167"></a><span class="lineno"> 2167</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetMpt1Gw1{mpt1};</div>
<div class="line"><a id="l02168" name="l02168"></a><span class="lineno"> 2168</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetMpt1Gw1a{mpt1a};</div>
<div class="line"><a id="l02169" name="l02169"></a><span class="lineno"> 2169</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetMpt1Gw2{mpt2};</div>
<div class="line"><a id="l02170" name="l02170"></a><span class="lineno"> 2170</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetMpt2Gw2{mpt3};</div>
<div class="line"><a id="l02171" name="l02171"></a><span class="lineno"> 2171</span> </div>
<div class="line"><a id="l02172" name="l02172"></a><span class="lineno"> 2172</span> <span class="comment">// Assets holding Issue</span></div>
<div class="line"><a id="l02173" name="l02173"></a><span class="lineno"> 2173</span> <span class="comment">// Currencies are equal regardless of the issuer</span></div>
<div class="line"><a id="l02174" name="l02174"></a><span class="lineno"> 2174</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur1Gw1, assetCur1Gw1a));</div>
<div class="line"><a id="l02175" name="l02175"></a><span class="lineno"> 2175</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur2Gw1, assetCur2Gw2));</div>
<div class="line"><a id="l02176" name="l02176"></a><span class="lineno"> 2176</span> <span class="comment">// Currencies are different regardless of whether the issuers</span></div>
<div class="line"><a id="l02177" name="l02177"></a><span class="lineno"> 2177</span> <span class="comment">// are the same or not</span></div>
<div class="line"><a id="l02178" name="l02178"></a><span class="lineno"> 2178</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur1Gw1, assetCur2Gw1));</div>
<div class="line"><a id="l02179" name="l02179"></a><span class="lineno"> 2179</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur1Gw1, assetCur2Gw2));</div>
<div class="line"><a id="l02180" name="l02180"></a><span class="lineno"> 2180</span> </div>
<div class="line"><a id="l02181" name="l02181"></a><span class="lineno"> 2181</span> <span class="comment">// Assets holding MPTIssue</span></div>
<div class="line"><a id="l02182" name="l02182"></a><span class="lineno"> 2182</span> <span class="comment">// MPTIDs are the same if the sequence and the issuer are the same</span></div>
<div class="line"><a id="l02183" name="l02183"></a><span class="lineno"> 2183</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetMpt1Gw1, assetMpt1Gw1a));</div>
<div class="line"><a id="l02184" name="l02184"></a><span class="lineno"> 2184</span> <span class="comment">// MPTIDs are different if sequence and the issuer don&#39;t match</span></div>
<div class="line"><a id="l02185" name="l02185"></a><span class="lineno"> 2185</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetMpt1Gw1, assetMpt1Gw2));</div>
<div class="line"><a id="l02186" name="l02186"></a><span class="lineno"> 2186</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetMpt1Gw2, assetMpt2Gw2));</div>
<div class="line"><a id="l02187" name="l02187"></a><span class="lineno"> 2187</span> </div>
<div class="line"><a id="l02188" name="l02188"></a><span class="lineno"> 2188</span> <span class="comment">// Assets holding Issue and MPTIssue</span></div>
<div class="line"><a id="l02189" name="l02189"></a><span class="lineno"> 2189</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur1Gw1, assetMpt1Gw1));</div>
<div class="line"><a id="l02190" name="l02190"></a><span class="lineno"> 2190</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetMpt2Gw2, assetCur2Gw2));</div>
<div class="line"><a id="l02191" name="l02191"></a><span class="lineno"> 2191</span> }</div>
<div class="line"><a id="l02192" name="l02192"></a><span class="lineno"> 2192</span> </div>
<div class="line"><a id="l02193" name="l02193"></a><span class="lineno"> 2193</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l02194" name="l02194"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a8d919bd57086e2aabc1e6323f01c990b"> 2194</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a8d919bd57086e2aabc1e6323f01c990b">testHelperFunctions</a>()</div>
<div class="line"><a id="l02195" name="l02195"></a><span class="lineno"> 2195</span> {</div>
<div class="line"><a id="l02196" name="l02196"></a><span class="lineno"> 2196</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l02197" name="l02197"></a><span class="lineno"> 2197</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> gw{<span class="stringliteral">&quot;gw&quot;</span>};</div>
<div class="line"><a id="l02198" name="l02198"></a><span class="lineno"> 2198</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> asset1{<a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(1, gw)};</div>
<div class="line"><a id="l02199" name="l02199"></a><span class="lineno"> 2199</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> asset2{<a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(2, gw)};</div>
<div class="line"><a id="l02200" name="l02200"></a><span class="lineno"> 2200</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> asset3{<a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(3, gw)};</div>
<div class="line"><a id="l02201" name="l02201"></a><span class="lineno"> 2201</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> amt1{asset1, 100};</div>
<div class="line"><a id="l02202" name="l02202"></a><span class="lineno"> 2202</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> amt2{asset2, 100};</div>
<div class="line"><a id="l02203" name="l02203"></a><span class="lineno"> 2203</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> amt3{asset3, 10&#39;000};</div>
<div class="line"><a id="l02204" name="l02204"></a><span class="lineno"> 2204</span> </div>
<div class="line"><a id="l02205" name="l02205"></a><span class="lineno"> 2205</span> {</div>
<div class="line"><a id="l02206" name="l02206"></a><span class="lineno"> 2206</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Test STAmount MPT arithmetics&quot;</span>);</div>
<div class="line"><a id="l02207" name="l02207"></a><span class="lineno"> 2207</span> <span class="keyword">using namespace </span>std::string_literals;</div>
<div class="line"><a id="l02208" name="l02208"></a><span class="lineno"> 2208</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> res = <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(amt1, amt2, asset3);</div>
<div class="line"><a id="l02209" name="l02209"></a><span class="lineno"> 2209</span> BEAST_EXPECT(res == amt3);</div>
<div class="line"><a id="l02210" name="l02210"></a><span class="lineno"> 2210</span> </div>
<div class="line"><a id="l02211" name="l02211"></a><span class="lineno"> 2211</span> res = <a class="code hl_function" href="namespaceripple.html#ac96824de7714986a7122e5551a2ba470">mulRound</a>(amt1, amt2, asset3, <span class="keyword">true</span>);</div>
<div class="line"><a id="l02212" name="l02212"></a><span class="lineno"> 2212</span> BEAST_EXPECT(res == amt3);</div>
<div class="line"><a id="l02213" name="l02213"></a><span class="lineno"> 2213</span> </div>
<div class="line"><a id="l02214" name="l02214"></a><span class="lineno"> 2214</span> res = <a class="code hl_function" href="namespaceripple.html#aded0fdc385035a62141ea25eab21d077">mulRoundStrict</a>(amt1, amt2, asset3, <span class="keyword">true</span>);</div>
<div class="line"><a id="l02215" name="l02215"></a><span class="lineno"> 2215</span> BEAST_EXPECT(res == amt3);</div>
<div class="line"><a id="l02216" name="l02216"></a><span class="lineno"> 2216</span> </div>
<div class="line"><a id="l02217" name="l02217"></a><span class="lineno"> 2217</span> <span class="comment">// overflow, any value &gt; 3037000499ull</span></div>
<div class="line"><a id="l02218" name="l02218"></a><span class="lineno"> 2218</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> mptOverflow{asset2, UINT64_C(3037000500)};</div>
<div class="line"><a id="l02219" name="l02219"></a><span class="lineno"> 2219</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l02220" name="l02220"></a><span class="lineno"> 2220</span> {</div>
<div class="line"><a id="l02221" name="l02221"></a><span class="lineno"> 2221</span> res = <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(mptOverflow, mptOverflow, asset3);</div>
<div class="line"><a id="l02222" name="l02222"></a><span class="lineno"> 2222</span> <a class="code hl_function" href="classbeast_1_1unit__test_1_1suite.html#af5ea30f883ad3a2a841af60a9a82c29c">fail</a>(<span class="stringliteral">&quot;should throw runtime exception 1&quot;</span>);</div>
<div class="line"><a id="l02223" name="l02223"></a><span class="lineno"> 2223</span> }</div>
<div class="line"><a id="l02224" name="l02224"></a><span class="lineno"> 2224</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/runtime_error.html">std::runtime_error</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a id="l02225" name="l02225"></a><span class="lineno"> 2225</span> {</div>
<div class="line"><a id="l02226" name="l02226"></a><span class="lineno"> 2226</span> BEAST_EXPECTS(e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>() == <span class="stringliteral">&quot;MPT value overflow&quot;</span>s, e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
<div class="line"><a id="l02227" name="l02227"></a><span class="lineno"> 2227</span> }</div>
<div class="line"><a id="l02228" name="l02228"></a><span class="lineno"> 2228</span> <span class="comment">// overflow, (v1 &gt;&gt; 32) * v2 &gt; 2147483648ull</span></div>
<div class="line"><a id="l02229" name="l02229"></a><span class="lineno"> 2229</span> mptOverflow = <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{asset2, UINT64_C(2147483648)};</div>
<div class="line"><a id="l02230" name="l02230"></a><span class="lineno"> 2230</span> uint64_t <span class="keyword">const</span> mantissa = (2ull &lt;&lt; 32) + 2;</div>
<div class="line"><a id="l02231" name="l02231"></a><span class="lineno"> 2231</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l02232" name="l02232"></a><span class="lineno"> 2232</span> {</div>
<div class="line"><a id="l02233" name="l02233"></a><span class="lineno"> 2233</span> res = <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{asset1, mantissa}, mptOverflow, asset3);</div>
<div class="line"><a id="l02234" name="l02234"></a><span class="lineno"> 2234</span> <a class="code hl_function" href="classbeast_1_1unit__test_1_1suite.html#af5ea30f883ad3a2a841af60a9a82c29c">fail</a>(<span class="stringliteral">&quot;should throw runtime exception 2&quot;</span>);</div>
<div class="line"><a id="l02235" name="l02235"></a><span class="lineno"> 2235</span> }</div>
<div class="line"><a id="l02236" name="l02236"></a><span class="lineno"> 2236</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/runtime_error.html">std::runtime_error</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a id="l02237" name="l02237"></a><span class="lineno"> 2237</span> {</div>
<div class="line"><a id="l02238" name="l02238"></a><span class="lineno"> 2238</span> BEAST_EXPECTS(e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>() == <span class="stringliteral">&quot;MPT value overflow&quot;</span>s, e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
<div class="line"><a id="l02239" name="l02239"></a><span class="lineno"> 2239</span> }</div>
<div class="line"><a id="l02240" name="l02240"></a><span class="lineno"> 2240</span> }</div>
<div class="line"><a id="l02241" name="l02241"></a><span class="lineno"> 2241</span> </div>
<div class="line"><a id="l02242" name="l02242"></a><span class="lineno"> 2242</span> {</div>
<div class="line"><a id="l02243" name="l02243"></a><span class="lineno"> 2243</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Test MPTAmount arithmetics&quot;</span>);</div>
<div class="line"><a id="l02244" name="l02244"></a><span class="lineno"> 2244</span> <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a> mptAmt1{100};</div>
<div class="line"><a id="l02245" name="l02245"></a><span class="lineno"> 2245</span> <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a> <span class="keyword">const</span> mptAmt2{100};</div>
<div class="line"><a id="l02246" name="l02246"></a><span class="lineno"> 2246</span> BEAST_EXPECT((mptAmt1 += mptAmt2) == <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{200});</div>
<div class="line"><a id="l02247" name="l02247"></a><span class="lineno"> 2247</span> BEAST_EXPECT(mptAmt1 == 200);</div>
<div class="line"><a id="l02248" name="l02248"></a><span class="lineno"> 2248</span> BEAST_EXPECT((mptAmt1 -= mptAmt2) == mptAmt1);</div>
<div class="line"><a id="l02249" name="l02249"></a><span class="lineno"> 2249</span> BEAST_EXPECT(mptAmt1 == mptAmt2);</div>
<div class="line"><a id="l02250" name="l02250"></a><span class="lineno"> 2250</span> BEAST_EXPECT(mptAmt1 == 100);</div>
<div class="line"><a id="l02251" name="l02251"></a><span class="lineno"> 2251</span> BEAST_EXPECT(<a class="code hl_function" href="classripple_1_1MPTAmount.html#af7abf5c7ffc4996b5af3c43fff3e1954">MPTAmount::minPositiveAmount</a>() == <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{1});</div>
<div class="line"><a id="l02252" name="l02252"></a><span class="lineno"> 2252</span> }</div>
<div class="line"><a id="l02253" name="l02253"></a><span class="lineno"> 2253</span> </div>
<div class="line"><a id="l02254" name="l02254"></a><span class="lineno"> 2254</span> {</div>
<div class="line"><a id="l02255" name="l02255"></a><span class="lineno"> 2255</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Test MPTIssue from/to Json&quot;</span>);</div>
<div class="line"><a id="l02256" name="l02256"></a><span class="lineno"> 2256</span> <a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a> <span class="keyword">const</span> issue1{asset1.get&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;()};</div>
<div class="line"><a id="l02257" name="l02257"></a><span class="lineno"> 2257</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> <span class="keyword">const</span> jv = <a class="code hl_function" href="namespaceripple.html#a7e44e3c53d8e9548450d127c188685d9">to_json</a>(issue1);</div>
<div class="line"><a id="l02258" name="l02258"></a><span class="lineno"> 2258</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02259" name="l02259"></a><span class="lineno"> 2259</span> jv[jss::mpt_issuance_id] == <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(asset1.get&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;()));</div>
<div class="line"><a id="l02260" name="l02260"></a><span class="lineno"> 2260</span> BEAST_EXPECT(issue1 == <a class="code hl_function" href="namespaceripple.html#a67b379da3ac3a243d4fc05e4c79ea9bc">mptIssueFromJson</a>(jv));</div>
<div class="line"><a id="l02261" name="l02261"></a><span class="lineno"> 2261</span> }</div>
<div class="line"><a id="l02262" name="l02262"></a><span class="lineno"> 2262</span> </div>
<div class="line"><a id="l02263" name="l02263"></a><span class="lineno"> 2263</span> {</div>
<div class="line"><a id="l02264" name="l02264"></a><span class="lineno"> 2264</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Test Asset from/to Json&quot;</span>);</div>
<div class="line"><a id="l02265" name="l02265"></a><span class="lineno"> 2265</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> <span class="keyword">const</span> jv = <a class="code hl_function" href="namespaceripple.html#a7e44e3c53d8e9548450d127c188685d9">to_json</a>(asset1);</div>
<div class="line"><a id="l02266" name="l02266"></a><span class="lineno"> 2266</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02267" name="l02267"></a><span class="lineno"> 2267</span> jv[jss::mpt_issuance_id] == <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(asset1.get&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;()));</div>
<div class="line"><a id="l02127" name="l02127"></a><span class="lineno"> 2127</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1MPTTester.html">MPTTester</a> mptAlice(env, alice, {.holders = {bob}});</div>
<div class="line"><a id="l02128" name="l02128"></a><span class="lineno"> 2128</span> </div>
<div class="line"><a id="l02129" name="l02129"></a><span class="lineno"> 2129</span> <span class="comment">// alice creates issuance</span></div>
<div class="line"><a id="l02130" name="l02130"></a><span class="lineno"> 2130</span> mptAlice.<a class="code hl_function" href="classripple_1_1test_1_1jtx_1_1MPTTester.html#af75129fd6435fe6fa20c810c291cda4c">create</a>(</div>
<div class="line"><a id="l02131" name="l02131"></a><span class="lineno"> 2131</span> {.ownerCount = 1,</div>
<div class="line"><a id="l02132" name="l02132"></a><span class="lineno"> 2132</span> .holderCount = 0,</div>
<div class="line"><a id="l02133" name="l02133"></a><span class="lineno"> 2133</span> .flags = <a class="code hl_variable" href="namespaceripple.html#af034d4499b815c6e3ae25cf6d03ae2f9">tfMPTCanClawback</a> | <a class="code hl_variable" href="namespaceripple.html#ae04eebbb7e9cffb009d2f2251c0263a2">tfMPTRequireAuth</a>});</div>
<div class="line"><a id="l02134" name="l02134"></a><span class="lineno"> 2134</span> </div>
<div class="line"><a id="l02135" name="l02135"></a><span class="lineno"> 2135</span> <span class="comment">// bob creates a MPToken</span></div>
<div class="line"><a id="l02136" name="l02136"></a><span class="lineno"> 2136</span> mptAlice.authorize({.account = bob});</div>
<div class="line"><a id="l02137" name="l02137"></a><span class="lineno"> 2137</span> </div>
<div class="line"><a id="l02138" name="l02138"></a><span class="lineno"> 2138</span> <span class="comment">// alice authorizes bob</span></div>
<div class="line"><a id="l02139" name="l02139"></a><span class="lineno"> 2139</span> mptAlice.authorize({.account = alice, .holder = bob});</div>
<div class="line"><a id="l02140" name="l02140"></a><span class="lineno"> 2140</span> </div>
<div class="line"><a id="l02141" name="l02141"></a><span class="lineno"> 2141</span> <span class="comment">// alice pays bob 100 tokens</span></div>
<div class="line"><a id="l02142" name="l02142"></a><span class="lineno"> 2142</span> mptAlice.pay(alice, bob, 100);</div>
<div class="line"><a id="l02143" name="l02143"></a><span class="lineno"> 2143</span> </div>
<div class="line"><a id="l02144" name="l02144"></a><span class="lineno"> 2144</span> <span class="comment">// alice unauthorizes bob</span></div>
<div class="line"><a id="l02145" name="l02145"></a><span class="lineno"> 2145</span> mptAlice.authorize(</div>
<div class="line"><a id="l02146" name="l02146"></a><span class="lineno"> 2146</span> {.account = alice, .holder = bob, .flags = <a class="code hl_variable" href="namespaceripple.html#a879ff786afc09842952c6cbca93d46a8">tfMPTUnauthorize</a>});</div>
<div class="line"><a id="l02147" name="l02147"></a><span class="lineno"> 2147</span> </div>
<div class="line"><a id="l02148" name="l02148"></a><span class="lineno"> 2148</span> mptAlice.claw(alice, bob, 100);</div>
<div class="line"><a id="l02149" name="l02149"></a><span class="lineno"> 2149</span> }</div>
<div class="line"><a id="l02150" name="l02150"></a><span class="lineno"> 2150</span> }</div>
<div class="line"><a id="l02151" name="l02151"></a><span class="lineno"> 2151</span> </div>
<div class="line"><a id="l02152" name="l02152"></a><span class="lineno"> 2152</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l02153" name="l02153"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a6338179a7b9ae6729306434870ff6a07"> 2153</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a6338179a7b9ae6729306434870ff6a07">testTokensEquality</a>()</div>
<div class="line"><a id="l02154" name="l02154"></a><span class="lineno"> 2154</span> {</div>
<div class="line"><a id="l02155" name="l02155"></a><span class="lineno"> 2155</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l02156" name="l02156"></a><span class="lineno"> 2156</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Tokens Equality&quot;</span>);</div>
<div class="line"><a id="l02157" name="l02157"></a><span class="lineno"> 2157</span> <a class="code hl_class" href="classripple_1_1base__uint.html">Currency</a> <span class="keyword">const</span> cur1{<a class="code hl_function" href="namespaceripple.html#afca83ec321d40b83929b54d5faf9433b">to_currency</a>(<span class="stringliteral">&quot;CU1&quot;</span>)};</div>
<div class="line"><a id="l02158" name="l02158"></a><span class="lineno"> 2158</span> <a class="code hl_class" href="classripple_1_1base__uint.html">Currency</a> <span class="keyword">const</span> cur2{<a class="code hl_function" href="namespaceripple.html#afca83ec321d40b83929b54d5faf9433b">to_currency</a>(<span class="stringliteral">&quot;CU2&quot;</span>)};</div>
<div class="line"><a id="l02159" name="l02159"></a><span class="lineno"> 2159</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> gw1{<span class="stringliteral">&quot;gw1&quot;</span>};</div>
<div class="line"><a id="l02160" name="l02160"></a><span class="lineno"> 2160</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> gw2{<span class="stringliteral">&quot;gw2&quot;</span>};</div>
<div class="line"><a id="l02161" name="l02161"></a><span class="lineno"> 2161</span> <a class="code hl_class" href="classripple_1_1base__uint.html">MPTID</a> <span class="keyword">const</span> mpt1 = <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(1, gw1);</div>
<div class="line"><a id="l02162" name="l02162"></a><span class="lineno"> 2162</span> <a class="code hl_class" href="classripple_1_1base__uint.html">MPTID</a> <span class="keyword">const</span> mpt1a = <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(1, gw1);</div>
<div class="line"><a id="l02163" name="l02163"></a><span class="lineno"> 2163</span> <a class="code hl_class" href="classripple_1_1base__uint.html">MPTID</a> <span class="keyword">const</span> mpt2 = <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(1, gw2);</div>
<div class="line"><a id="l02164" name="l02164"></a><span class="lineno"> 2164</span> <a class="code hl_class" href="classripple_1_1base__uint.html">MPTID</a> <span class="keyword">const</span> mpt3 = <a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(2, gw2);</div>
<div class="line"><a id="l02165" name="l02165"></a><span class="lineno"> 2165</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetCur1Gw1{<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>{cur1, gw1}};</div>
<div class="line"><a id="l02166" name="l02166"></a><span class="lineno"> 2166</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetCur1Gw1a{<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>{cur1, gw1}};</div>
<div class="line"><a id="l02167" name="l02167"></a><span class="lineno"> 2167</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetCur2Gw1{<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>{cur2, gw1}};</div>
<div class="line"><a id="l02168" name="l02168"></a><span class="lineno"> 2168</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetCur2Gw2{<a class="code hl_class" href="classripple_1_1Issue.html">Issue</a>{cur2, gw2}};</div>
<div class="line"><a id="l02169" name="l02169"></a><span class="lineno"> 2169</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetMpt1Gw1{mpt1};</div>
<div class="line"><a id="l02170" name="l02170"></a><span class="lineno"> 2170</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetMpt1Gw1a{mpt1a};</div>
<div class="line"><a id="l02171" name="l02171"></a><span class="lineno"> 2171</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetMpt1Gw2{mpt2};</div>
<div class="line"><a id="l02172" name="l02172"></a><span class="lineno"> 2172</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> assetMpt2Gw2{mpt3};</div>
<div class="line"><a id="l02173" name="l02173"></a><span class="lineno"> 2173</span> </div>
<div class="line"><a id="l02174" name="l02174"></a><span class="lineno"> 2174</span> <span class="comment">// Assets holding Issue</span></div>
<div class="line"><a id="l02175" name="l02175"></a><span class="lineno"> 2175</span> <span class="comment">// Currencies are equal regardless of the issuer</span></div>
<div class="line"><a id="l02176" name="l02176"></a><span class="lineno"> 2176</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur1Gw1, assetCur1Gw1a));</div>
<div class="line"><a id="l02177" name="l02177"></a><span class="lineno"> 2177</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur2Gw1, assetCur2Gw2));</div>
<div class="line"><a id="l02178" name="l02178"></a><span class="lineno"> 2178</span> <span class="comment">// Currencies are different regardless of whether the issuers</span></div>
<div class="line"><a id="l02179" name="l02179"></a><span class="lineno"> 2179</span> <span class="comment">// are the same or not</span></div>
<div class="line"><a id="l02180" name="l02180"></a><span class="lineno"> 2180</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur1Gw1, assetCur2Gw1));</div>
<div class="line"><a id="l02181" name="l02181"></a><span class="lineno"> 2181</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur1Gw1, assetCur2Gw2));</div>
<div class="line"><a id="l02182" name="l02182"></a><span class="lineno"> 2182</span> </div>
<div class="line"><a id="l02183" name="l02183"></a><span class="lineno"> 2183</span> <span class="comment">// Assets holding MPTIssue</span></div>
<div class="line"><a id="l02184" name="l02184"></a><span class="lineno"> 2184</span> <span class="comment">// MPTIDs are the same if the sequence and the issuer are the same</span></div>
<div class="line"><a id="l02185" name="l02185"></a><span class="lineno"> 2185</span> BEAST_EXPECT(<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetMpt1Gw1, assetMpt1Gw1a));</div>
<div class="line"><a id="l02186" name="l02186"></a><span class="lineno"> 2186</span> <span class="comment">// MPTIDs are different if sequence and the issuer don&#39;t match</span></div>
<div class="line"><a id="l02187" name="l02187"></a><span class="lineno"> 2187</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetMpt1Gw1, assetMpt1Gw2));</div>
<div class="line"><a id="l02188" name="l02188"></a><span class="lineno"> 2188</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetMpt1Gw2, assetMpt2Gw2));</div>
<div class="line"><a id="l02189" name="l02189"></a><span class="lineno"> 2189</span> </div>
<div class="line"><a id="l02190" name="l02190"></a><span class="lineno"> 2190</span> <span class="comment">// Assets holding Issue and MPTIssue</span></div>
<div class="line"><a id="l02191" name="l02191"></a><span class="lineno"> 2191</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetCur1Gw1, assetMpt1Gw1));</div>
<div class="line"><a id="l02192" name="l02192"></a><span class="lineno"> 2192</span> BEAST_EXPECT(!<a class="code hl_function" href="namespaceripple.html#a128ca09dcebbb1b245e4bb297faea9db">equalTokens</a>(assetMpt2Gw2, assetCur2Gw2));</div>
<div class="line"><a id="l02193" name="l02193"></a><span class="lineno"> 2193</span> }</div>
<div class="line"><a id="l02194" name="l02194"></a><span class="lineno"> 2194</span> </div>
<div class="line"><a id="l02195" name="l02195"></a><span class="lineno"> 2195</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l02196" name="l02196"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a8d919bd57086e2aabc1e6323f01c990b"> 2196</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a8d919bd57086e2aabc1e6323f01c990b">testHelperFunctions</a>()</div>
<div class="line"><a id="l02197" name="l02197"></a><span class="lineno"> 2197</span> {</div>
<div class="line"><a id="l02198" name="l02198"></a><span class="lineno"> 2198</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l02199" name="l02199"></a><span class="lineno"> 2199</span> <a class="code hl_class" href="classripple_1_1test_1_1jtx_1_1Account.html">Account</a> <span class="keyword">const</span> gw{<span class="stringliteral">&quot;gw&quot;</span>};</div>
<div class="line"><a id="l02200" name="l02200"></a><span class="lineno"> 2200</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> asset1{<a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(1, gw)};</div>
<div class="line"><a id="l02201" name="l02201"></a><span class="lineno"> 2201</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> asset2{<a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(2, gw)};</div>
<div class="line"><a id="l02202" name="l02202"></a><span class="lineno"> 2202</span> <a class="code hl_class" href="classripple_1_1Asset.html">Asset</a> <span class="keyword">const</span> asset3{<a class="code hl_function" href="namespaceripple.html#ada7386b27acb89f86fc5ac2826eef5f4">makeMptID</a>(3, gw)};</div>
<div class="line"><a id="l02203" name="l02203"></a><span class="lineno"> 2203</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> amt1{asset1, 100};</div>
<div class="line"><a id="l02204" name="l02204"></a><span class="lineno"> 2204</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> amt2{asset2, 100};</div>
<div class="line"><a id="l02205" name="l02205"></a><span class="lineno"> 2205</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span> amt3{asset3, 10&#39;000};</div>
<div class="line"><a id="l02206" name="l02206"></a><span class="lineno"> 2206</span> </div>
<div class="line"><a id="l02207" name="l02207"></a><span class="lineno"> 2207</span> {</div>
<div class="line"><a id="l02208" name="l02208"></a><span class="lineno"> 2208</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Test STAmount MPT arithmetics&quot;</span>);</div>
<div class="line"><a id="l02209" name="l02209"></a><span class="lineno"> 2209</span> <span class="keyword">using namespace </span>std::string_literals;</div>
<div class="line"><a id="l02210" name="l02210"></a><span class="lineno"> 2210</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> res = <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(amt1, amt2, asset3);</div>
<div class="line"><a id="l02211" name="l02211"></a><span class="lineno"> 2211</span> BEAST_EXPECT(res == amt3);</div>
<div class="line"><a id="l02212" name="l02212"></a><span class="lineno"> 2212</span> </div>
<div class="line"><a id="l02213" name="l02213"></a><span class="lineno"> 2213</span> res = <a class="code hl_function" href="namespaceripple.html#ac96824de7714986a7122e5551a2ba470">mulRound</a>(amt1, amt2, asset3, <span class="keyword">true</span>);</div>
<div class="line"><a id="l02214" name="l02214"></a><span class="lineno"> 2214</span> BEAST_EXPECT(res == amt3);</div>
<div class="line"><a id="l02215" name="l02215"></a><span class="lineno"> 2215</span> </div>
<div class="line"><a id="l02216" name="l02216"></a><span class="lineno"> 2216</span> res = <a class="code hl_function" href="namespaceripple.html#aded0fdc385035a62141ea25eab21d077">mulRoundStrict</a>(amt1, amt2, asset3, <span class="keyword">true</span>);</div>
<div class="line"><a id="l02217" name="l02217"></a><span class="lineno"> 2217</span> BEAST_EXPECT(res == amt3);</div>
<div class="line"><a id="l02218" name="l02218"></a><span class="lineno"> 2218</span> </div>
<div class="line"><a id="l02219" name="l02219"></a><span class="lineno"> 2219</span> <span class="comment">// overflow, any value &gt; 3037000499ull</span></div>
<div class="line"><a id="l02220" name="l02220"></a><span class="lineno"> 2220</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> mptOverflow{asset2, UINT64_C(3037000500)};</div>
<div class="line"><a id="l02221" name="l02221"></a><span class="lineno"> 2221</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l02222" name="l02222"></a><span class="lineno"> 2222</span> {</div>
<div class="line"><a id="l02223" name="l02223"></a><span class="lineno"> 2223</span> res = <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(mptOverflow, mptOverflow, asset3);</div>
<div class="line"><a id="l02224" name="l02224"></a><span class="lineno"> 2224</span> <a class="code hl_function" href="classbeast_1_1unit__test_1_1suite.html#af5ea30f883ad3a2a841af60a9a82c29c">fail</a>(<span class="stringliteral">&quot;should throw runtime exception 1&quot;</span>);</div>
<div class="line"><a id="l02225" name="l02225"></a><span class="lineno"> 2225</span> }</div>
<div class="line"><a id="l02226" name="l02226"></a><span class="lineno"> 2226</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/runtime_error.html">std::runtime_error</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a id="l02227" name="l02227"></a><span class="lineno"> 2227</span> {</div>
<div class="line"><a id="l02228" name="l02228"></a><span class="lineno"> 2228</span> BEAST_EXPECTS(e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>() == <span class="stringliteral">&quot;MPT value overflow&quot;</span>s, e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
<div class="line"><a id="l02229" name="l02229"></a><span class="lineno"> 2229</span> }</div>
<div class="line"><a id="l02230" name="l02230"></a><span class="lineno"> 2230</span> <span class="comment">// overflow, (v1 &gt;&gt; 32) * v2 &gt; 2147483648ull</span></div>
<div class="line"><a id="l02231" name="l02231"></a><span class="lineno"> 2231</span> mptOverflow = <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{asset2, UINT64_C(2147483648)};</div>
<div class="line"><a id="l02232" name="l02232"></a><span class="lineno"> 2232</span> uint64_t <span class="keyword">const</span> mantissa = (2ull &lt;&lt; 32) + 2;</div>
<div class="line"><a id="l02233" name="l02233"></a><span class="lineno"> 2233</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l02234" name="l02234"></a><span class="lineno"> 2234</span> {</div>
<div class="line"><a id="l02235" name="l02235"></a><span class="lineno"> 2235</span> res = <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{asset1, mantissa}, mptOverflow, asset3);</div>
<div class="line"><a id="l02236" name="l02236"></a><span class="lineno"> 2236</span> <a class="code hl_function" href="classbeast_1_1unit__test_1_1suite.html#af5ea30f883ad3a2a841af60a9a82c29c">fail</a>(<span class="stringliteral">&quot;should throw runtime exception 2&quot;</span>);</div>
<div class="line"><a id="l02237" name="l02237"></a><span class="lineno"> 2237</span> }</div>
<div class="line"><a id="l02238" name="l02238"></a><span class="lineno"> 2238</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/runtime_error.html">std::runtime_error</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a id="l02239" name="l02239"></a><span class="lineno"> 2239</span> {</div>
<div class="line"><a id="l02240" name="l02240"></a><span class="lineno"> 2240</span> BEAST_EXPECTS(e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>() == <span class="stringliteral">&quot;MPT value overflow&quot;</span>s, e.<a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/error/exception/what.html">what</a>());</div>
<div class="line"><a id="l02241" name="l02241"></a><span class="lineno"> 2241</span> }</div>
<div class="line"><a id="l02242" name="l02242"></a><span class="lineno"> 2242</span> }</div>
<div class="line"><a id="l02243" name="l02243"></a><span class="lineno"> 2243</span> </div>
<div class="line"><a id="l02244" name="l02244"></a><span class="lineno"> 2244</span> {</div>
<div class="line"><a id="l02245" name="l02245"></a><span class="lineno"> 2245</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Test MPTAmount arithmetics&quot;</span>);</div>
<div class="line"><a id="l02246" name="l02246"></a><span class="lineno"> 2246</span> <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a> mptAmt1{100};</div>
<div class="line"><a id="l02247" name="l02247"></a><span class="lineno"> 2247</span> <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a> <span class="keyword">const</span> mptAmt2{100};</div>
<div class="line"><a id="l02248" name="l02248"></a><span class="lineno"> 2248</span> BEAST_EXPECT((mptAmt1 += mptAmt2) == <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{200});</div>
<div class="line"><a id="l02249" name="l02249"></a><span class="lineno"> 2249</span> BEAST_EXPECT(mptAmt1 == 200);</div>
<div class="line"><a id="l02250" name="l02250"></a><span class="lineno"> 2250</span> BEAST_EXPECT((mptAmt1 -= mptAmt2) == mptAmt1);</div>
<div class="line"><a id="l02251" name="l02251"></a><span class="lineno"> 2251</span> BEAST_EXPECT(mptAmt1 == mptAmt2);</div>
<div class="line"><a id="l02252" name="l02252"></a><span class="lineno"> 2252</span> BEAST_EXPECT(mptAmt1 == 100);</div>
<div class="line"><a id="l02253" name="l02253"></a><span class="lineno"> 2253</span> BEAST_EXPECT(<a class="code hl_function" href="classripple_1_1MPTAmount.html#af7abf5c7ffc4996b5af3c43fff3e1954">MPTAmount::minPositiveAmount</a>() == <a class="code hl_class" href="classripple_1_1MPTAmount.html">MPTAmount</a>{1});</div>
<div class="line"><a id="l02254" name="l02254"></a><span class="lineno"> 2254</span> }</div>
<div class="line"><a id="l02255" name="l02255"></a><span class="lineno"> 2255</span> </div>
<div class="line"><a id="l02256" name="l02256"></a><span class="lineno"> 2256</span> {</div>
<div class="line"><a id="l02257" name="l02257"></a><span class="lineno"> 2257</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Test MPTIssue from/to Json&quot;</span>);</div>
<div class="line"><a id="l02258" name="l02258"></a><span class="lineno"> 2258</span> <a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a> <span class="keyword">const</span> issue1{asset1.get&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;()};</div>
<div class="line"><a id="l02259" name="l02259"></a><span class="lineno"> 2259</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> <span class="keyword">const</span> jv = <a class="code hl_function" href="namespaceripple.html#a7e44e3c53d8e9548450d127c188685d9">to_json</a>(issue1);</div>
<div class="line"><a id="l02260" name="l02260"></a><span class="lineno"> 2260</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02261" name="l02261"></a><span class="lineno"> 2261</span> jv[jss::mpt_issuance_id] == <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(asset1.get&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;()));</div>
<div class="line"><a id="l02262" name="l02262"></a><span class="lineno"> 2262</span> BEAST_EXPECT(issue1 == <a class="code hl_function" href="namespaceripple.html#a67b379da3ac3a243d4fc05e4c79ea9bc">mptIssueFromJson</a>(jv));</div>
<div class="line"><a id="l02263" name="l02263"></a><span class="lineno"> 2263</span> }</div>
<div class="line"><a id="l02264" name="l02264"></a><span class="lineno"> 2264</span> </div>
<div class="line"><a id="l02265" name="l02265"></a><span class="lineno"> 2265</span> {</div>
<div class="line"><a id="l02266" name="l02266"></a><span class="lineno"> 2266</span> <a class="code hl_variable" href="classbeast_1_1unit__test_1_1suite.html#aaa1237d9b85c69d35fe86645cee094b5">testcase</a>(<span class="stringliteral">&quot;Test Asset from/to Json&quot;</span>);</div>
<div class="line"><a id="l02267" name="l02267"></a><span class="lineno"> 2267</span> <a class="code hl_class" href="classJson_1_1Value.html">Json::Value</a> <span class="keyword">const</span> jv = <a class="code hl_function" href="namespaceripple.html#a7e44e3c53d8e9548450d127c188685d9">to_json</a>(asset1);</div>
<div class="line"><a id="l02268" name="l02268"></a><span class="lineno"> 2268</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02269" name="l02269"></a><span class="lineno"> 2269</span> <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(jv) ==</div>
<div class="line"><a id="l02270" name="l02270"></a><span class="lineno"> 2270</span> <span class="stringliteral">&quot;{\&quot;mpt_issuance_id\&quot;:&quot;</span></div>
<div class="line"><a id="l02271" name="l02271"></a><span class="lineno"> 2271</span> <span class="stringliteral">&quot;\&quot;00000001A407AF5856CCF3C42619DAA925813FC955C72983\&quot;}&quot;</span>);</div>
<div class="line"><a id="l02272" name="l02272"></a><span class="lineno"> 2272</span> BEAST_EXPECT(asset1 == <a class="code hl_function" href="namespaceripple.html#a37a92296262930fe981b89057fe99258">assetFromJson</a>(jv));</div>
<div class="line"><a id="l02273" name="l02273"></a><span class="lineno"> 2273</span> }</div>
<div class="line"><a id="l02274" name="l02274"></a><span class="lineno"> 2274</span> }</div>
<div class="line"><a id="l02275" name="l02275"></a><span class="lineno"> 2275</span> </div>
<div class="line"><a id="l02276" name="l02276"></a><span class="lineno"> 2276</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l02277" name="l02277"></a><span class="lineno"> 2277</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l02278" name="l02278"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a02b37e5e71435988ebabb38f28661a33"> 2278</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a02b37e5e71435988ebabb38f28661a33">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a id="l02279" name="l02279"></a><span class="lineno"> 2279</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l02280" name="l02280"></a><span class="lineno"> 2280</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l02281" name="l02281"></a><span class="lineno"> 2281</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#af5441d84d5977d52246c5226313560d4">supported_amendments</a>()};</div>
<div class="line"><a id="l02282" name="l02282"></a><span class="lineno"> 2282</span> </div>
<div class="line"><a id="l02283" name="l02283"></a><span class="lineno"> 2283</span> <span class="comment">// MPTokenIssuanceCreate</span></div>
<div class="line"><a id="l02284" name="l02284"></a><span class="lineno"> 2284</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a06d43707169192a028cede4845423fa3">testCreateValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02285" name="l02285"></a><span class="lineno"> 2285</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a7a30578b790935b2b3db65a13768b6bf">testCreateEnabled</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02286" name="l02286"></a><span class="lineno"> 2286</span> </div>
<div class="line"><a id="l02287" name="l02287"></a><span class="lineno"> 2287</span> <span class="comment">// MPTokenIssuanceDestroy</span></div>
<div class="line"><a id="l02288" name="l02288"></a><span class="lineno"> 2288</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#acd3d1880e15b88d565fd5f066e671d7d">testDestroyValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02289" name="l02289"></a><span class="lineno"> 2289</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a7c1eda386aca9e1d93cd1c6dfedf4bff">testDestroyEnabled</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02290" name="l02290"></a><span class="lineno"> 2290</span> </div>
<div class="line"><a id="l02291" name="l02291"></a><span class="lineno"> 2291</span> <span class="comment">// MPTokenAuthorize</span></div>
<div class="line"><a id="l02292" name="l02292"></a><span class="lineno"> 2292</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a648a57a2ce1b1e930c10eee0580165bf">testAuthorizeValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02293" name="l02293"></a><span class="lineno"> 2293</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a99acb92a810042912aeec336ce55ea0b">testAuthorizeEnabled</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02294" name="l02294"></a><span class="lineno"> 2294</span> </div>
<div class="line"><a id="l02295" name="l02295"></a><span class="lineno"> 2295</span> <span class="comment">// MPTokenIssuanceSet</span></div>
<div class="line"><a id="l02296" name="l02296"></a><span class="lineno"> 2296</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a67e77f6f69f3552077d8a873d86e589d">testSetValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02297" name="l02297"></a><span class="lineno"> 2297</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#afa8c0cf6dd6c1d37ff8bc97e4d60feb3">testSetEnabled</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02298" name="l02298"></a><span class="lineno"> 2298</span> </div>
<div class="line"><a id="l02299" name="l02299"></a><span class="lineno"> 2299</span> <span class="comment">// MPT clawback</span></div>
<div class="line"><a id="l02300" name="l02300"></a><span class="lineno"> 2300</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a690da94ce5d0abe22dbb88543fe721a7">testClawbackValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02301" name="l02301"></a><span class="lineno"> 2301</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a3390bf7a3d0374c898f6c1e33a390f1c">testClawback</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02302" name="l02302"></a><span class="lineno"> 2302</span> </div>
<div class="line"><a id="l02303" name="l02303"></a><span class="lineno"> 2303</span> <span class="comment">// Test Direct Payment</span></div>
<div class="line"><a id="l02304" name="l02304"></a><span class="lineno"> 2304</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a896b9bad21dcdea525f989c0518175b7">testPayment</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02305" name="l02305"></a><span class="lineno"> 2305</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a79b677b08b7bbc33cbea3bb7e474e851">testDepositPreauth</a>();</div>
<div class="line"><a id="l02306" name="l02306"></a><span class="lineno"> 2306</span> </div>
<div class="line"><a id="l02307" name="l02307"></a><span class="lineno"> 2307</span> <span class="comment">// Test MPT Amount is invalid in Tx, which don&#39;t support MPT</span></div>
<div class="line"><a id="l02308" name="l02308"></a><span class="lineno"> 2308</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a8dabd3012e9b8a6245baa5ac80c4c3b9">testMPTInvalidInTx</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02309" name="l02309"></a><span class="lineno"> 2309</span> </div>
<div class="line"><a id="l02310" name="l02310"></a><span class="lineno"> 2310</span> <span class="comment">// Test parsed MPTokenIssuanceID in API response metadata</span></div>
<div class="line"><a id="l02311" name="l02311"></a><span class="lineno"> 2311</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#afe7f73c77ff69c3b23f9a70e6dfa7993">testTxJsonMetaFields</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02312" name="l02312"></a><span class="lineno"> 2312</span> </div>
<div class="line"><a id="l02313" name="l02313"></a><span class="lineno"> 2313</span> <span class="comment">// Test tokens equality</span></div>
<div class="line"><a id="l02314" name="l02314"></a><span class="lineno"> 2314</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a6338179a7b9ae6729306434870ff6a07">testTokensEquality</a>();</div>
<div class="line"><a id="l02315" name="l02315"></a><span class="lineno"> 2315</span> </div>
<div class="line"><a id="l02316" name="l02316"></a><span class="lineno"> 2316</span> <span class="comment">// Test helpers</span></div>
<div class="line"><a id="l02317" name="l02317"></a><span class="lineno"> 2317</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a8d919bd57086e2aabc1e6323f01c990b">testHelperFunctions</a>();</div>
<div class="line"><a id="l02318" name="l02318"></a><span class="lineno"> 2318</span> }</div>
<div class="line"><a id="l02319" name="l02319"></a><span class="lineno"> 2319</span>};</div>
<div class="line"><a id="l02320" name="l02320"></a><span class="lineno"> 2320</span> </div>
<div class="line"><a id="l02321" name="l02321"></a><span class="lineno"><a class="line" href="namespaceripple_1_1test.html#a8352d52a1c64f384099aab342a9a2248"> 2321</a></span>BEAST_DEFINE_TESTSUITE_PRIO(MPToken, tx, <a class="code hl_namespace" href="namespaceripple.html">ripple</a>, 2);</div>
<div class="line"><a id="l02269" name="l02269"></a><span class="lineno"> 2269</span> jv[jss::mpt_issuance_id] == <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(asset1.get&lt;<a class="code hl_class" href="classripple_1_1MPTIssue.html">MPTIssue</a>&gt;()));</div>
<div class="line"><a id="l02270" name="l02270"></a><span class="lineno"> 2270</span> BEAST_EXPECT(</div>
<div class="line"><a id="l02271" name="l02271"></a><span class="lineno"> 2271</span> <a class="code hl_function" href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">to_string</a>(jv) ==</div>
<div class="line"><a id="l02272" name="l02272"></a><span class="lineno"> 2272</span> <span class="stringliteral">&quot;{\&quot;mpt_issuance_id\&quot;:&quot;</span></div>
<div class="line"><a id="l02273" name="l02273"></a><span class="lineno"> 2273</span> <span class="stringliteral">&quot;\&quot;00000001A407AF5856CCF3C42619DAA925813FC955C72983\&quot;}&quot;</span>);</div>
<div class="line"><a id="l02274" name="l02274"></a><span class="lineno"> 2274</span> BEAST_EXPECT(asset1 == <a class="code hl_function" href="namespaceripple.html#a37a92296262930fe981b89057fe99258">assetFromJson</a>(jv));</div>
<div class="line"><a id="l02275" name="l02275"></a><span class="lineno"> 2275</span> }</div>
<div class="line"><a id="l02276" name="l02276"></a><span class="lineno"> 2276</span> }</div>
<div class="line"><a id="l02277" name="l02277"></a><span class="lineno"> 2277</span> </div>
<div class="line"><a id="l02278" name="l02278"></a><span class="lineno"> 2278</span><span class="keyword">public</span>:</div>
<div class="line"><a id="l02279" name="l02279"></a><span class="lineno"> 2279</span> <span class="keywordtype">void</span></div>
<div class="line"><a id="l02280" name="l02280"></a><span class="lineno"><a class="line" href="classripple_1_1test_1_1MPToken__test.html#a02b37e5e71435988ebabb38f28661a33"> 2280</a></span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a02b37e5e71435988ebabb38f28661a33">run</a>()<span class="keyword"> override</span></div>
<div class="line"><a id="l02281" name="l02281"></a><span class="lineno"> 2281</span><span class="keyword"> </span>{</div>
<div class="line"><a id="l02282" name="l02282"></a><span class="lineno"> 2282</span> <span class="keyword">using namespace </span>test::jtx;</div>
<div class="line"><a id="l02283" name="l02283"></a><span class="lineno"> 2283</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#af5441d84d5977d52246c5226313560d4">supported_amendments</a>()};</div>
<div class="line"><a id="l02284" name="l02284"></a><span class="lineno"> 2284</span> </div>
<div class="line"><a id="l02285" name="l02285"></a><span class="lineno"> 2285</span> <span class="comment">// MPTokenIssuanceCreate</span></div>
<div class="line"><a id="l02286" name="l02286"></a><span class="lineno"> 2286</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a06d43707169192a028cede4845423fa3">testCreateValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02287" name="l02287"></a><span class="lineno"> 2287</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a7a30578b790935b2b3db65a13768b6bf">testCreateEnabled</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02288" name="l02288"></a><span class="lineno"> 2288</span> </div>
<div class="line"><a id="l02289" name="l02289"></a><span class="lineno"> 2289</span> <span class="comment">// MPTokenIssuanceDestroy</span></div>
<div class="line"><a id="l02290" name="l02290"></a><span class="lineno"> 2290</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#acd3d1880e15b88d565fd5f066e671d7d">testDestroyValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02291" name="l02291"></a><span class="lineno"> 2291</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a7c1eda386aca9e1d93cd1c6dfedf4bff">testDestroyEnabled</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02292" name="l02292"></a><span class="lineno"> 2292</span> </div>
<div class="line"><a id="l02293" name="l02293"></a><span class="lineno"> 2293</span> <span class="comment">// MPTokenAuthorize</span></div>
<div class="line"><a id="l02294" name="l02294"></a><span class="lineno"> 2294</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a648a57a2ce1b1e930c10eee0580165bf">testAuthorizeValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02295" name="l02295"></a><span class="lineno"> 2295</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a99acb92a810042912aeec336ce55ea0b">testAuthorizeEnabled</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02296" name="l02296"></a><span class="lineno"> 2296</span> </div>
<div class="line"><a id="l02297" name="l02297"></a><span class="lineno"> 2297</span> <span class="comment">// MPTokenIssuanceSet</span></div>
<div class="line"><a id="l02298" name="l02298"></a><span class="lineno"> 2298</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a67e77f6f69f3552077d8a873d86e589d">testSetValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02299" name="l02299"></a><span class="lineno"> 2299</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#afa8c0cf6dd6c1d37ff8bc97e4d60feb3">testSetEnabled</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02300" name="l02300"></a><span class="lineno"> 2300</span> </div>
<div class="line"><a id="l02301" name="l02301"></a><span class="lineno"> 2301</span> <span class="comment">// MPT clawback</span></div>
<div class="line"><a id="l02302" name="l02302"></a><span class="lineno"> 2302</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a690da94ce5d0abe22dbb88543fe721a7">testClawbackValidation</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02303" name="l02303"></a><span class="lineno"> 2303</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a3390bf7a3d0374c898f6c1e33a390f1c">testClawback</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02304" name="l02304"></a><span class="lineno"> 2304</span> </div>
<div class="line"><a id="l02305" name="l02305"></a><span class="lineno"> 2305</span> <span class="comment">// Test Direct Payment</span></div>
<div class="line"><a id="l02306" name="l02306"></a><span class="lineno"> 2306</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a896b9bad21dcdea525f989c0518175b7">testPayment</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02307" name="l02307"></a><span class="lineno"> 2307</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a79b677b08b7bbc33cbea3bb7e474e851">testDepositPreauth</a>();</div>
<div class="line"><a id="l02308" name="l02308"></a><span class="lineno"> 2308</span> </div>
<div class="line"><a id="l02309" name="l02309"></a><span class="lineno"> 2309</span> <span class="comment">// Test MPT Amount is invalid in Tx, which don&#39;t support MPT</span></div>
<div class="line"><a id="l02310" name="l02310"></a><span class="lineno"> 2310</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a8dabd3012e9b8a6245baa5ac80c4c3b9">testMPTInvalidInTx</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02311" name="l02311"></a><span class="lineno"> 2311</span> </div>
<div class="line"><a id="l02312" name="l02312"></a><span class="lineno"> 2312</span> <span class="comment">// Test parsed MPTokenIssuanceID in API response metadata</span></div>
<div class="line"><a id="l02313" name="l02313"></a><span class="lineno"> 2313</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#afe7f73c77ff69c3b23f9a70e6dfa7993">testTxJsonMetaFields</a>(<a class="code hl_enumvalue" href="namespaceripple.html#a7ffb3f54d739bb8f967d695f08fb66ccaa181a603769c1f98ad927e7367c7aa51">all</a>);</div>
<div class="line"><a id="l02314" name="l02314"></a><span class="lineno"> 2314</span> </div>
<div class="line"><a id="l02315" name="l02315"></a><span class="lineno"> 2315</span> <span class="comment">// Test tokens equality</span></div>
<div class="line"><a id="l02316" name="l02316"></a><span class="lineno"> 2316</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a6338179a7b9ae6729306434870ff6a07">testTokensEquality</a>();</div>
<div class="line"><a id="l02317" name="l02317"></a><span class="lineno"> 2317</span> </div>
<div class="line"><a id="l02318" name="l02318"></a><span class="lineno"> 2318</span> <span class="comment">// Test helpers</span></div>
<div class="line"><a id="l02319" name="l02319"></a><span class="lineno"> 2319</span> <a class="code hl_function" href="classripple_1_1test_1_1MPToken__test.html#a8d919bd57086e2aabc1e6323f01c990b">testHelperFunctions</a>();</div>
<div class="line"><a id="l02320" name="l02320"></a><span class="lineno"> 2320</span> }</div>
<div class="line"><a id="l02321" name="l02321"></a><span class="lineno"> 2321</span>};</div>
<div class="line"><a id="l02322" name="l02322"></a><span class="lineno"> 2322</span> </div>
<div class="line"><a id="l02323" name="l02323"></a><span class="lineno"> 2323</span>} <span class="comment">// namespace test</span></div>
<div class="line"><a id="l02324" name="l02324"></a><span class="lineno"> 2324</span>} <span class="comment">// namespace ripple</span></div>
<div class="line"><a id="l02323" name="l02323"></a><span class="lineno"><a class="line" href="namespaceripple_1_1test.html#a8352d52a1c64f384099aab342a9a2248"> 2323</a></span>BEAST_DEFINE_TESTSUITE_PRIO(MPToken, tx, <a class="code hl_namespace" href="namespaceripple.html">ripple</a>, 2);</div>
<div class="line"><a id="l02324" name="l02324"></a><span class="lineno"> 2324</span> </div>
<div class="line"><a id="l02325" name="l02325"></a><span class="lineno"> 2325</span>} <span class="comment">// namespace test</span></div>
<div class="line"><a id="l02326" name="l02326"></a><span class="lineno"> 2326</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_1StaticString_html"><div class="ttname"><a href="classJson_1_1StaticString.html">Json::StaticString</a></div><div class="ttdoc">Lightweight wrapper to tag static string.</div><div class="ttdef"><b>Definition:</b> <a href="json__value_8h_source.html#l00061">json_value.h:62</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#l00147">json_value.h:148</a></div></div>
@@ -2423,18 +2425,18 @@ $(function() {
<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#l00039">XRPAmount.h:43</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; 192 &gt;</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html">ripple::test::MPToken_test</a></div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l00030">MPToken_test.cpp:31</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a02b37e5e71435988ebabb38f28661a33"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a02b37e5e71435988ebabb38f28661a33">ripple::test::MPToken_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="MPToken__test_8cpp_source.html#l02278">MPToken_test.cpp:2278</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a02b37e5e71435988ebabb38f28661a33"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a02b37e5e71435988ebabb38f28661a33">ripple::test::MPToken_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="MPToken__test_8cpp_source.html#l02280">MPToken_test.cpp:2280</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a06d43707169192a028cede4845423fa3"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a06d43707169192a028cede4845423fa3">ripple::test::MPToken_test::testCreateValidation</a></div><div class="ttdeci">void testCreateValidation(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l00033">MPToken_test.cpp:33</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a3390bf7a3d0374c898f6c1e33a390f1c"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a3390bf7a3d0374c898f6c1e33a390f1c">ripple::test::MPToken_test::testClawback</a></div><div class="ttdeci">void testClawback(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l02039">MPToken_test.cpp:2039</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a6338179a7b9ae6729306434870ff6a07"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a6338179a7b9ae6729306434870ff6a07">ripple::test::MPToken_test::testTokensEquality</a></div><div class="ttdeci">void testTokensEquality()</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l02151">MPToken_test.cpp:2151</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a3390bf7a3d0374c898f6c1e33a390f1c"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a3390bf7a3d0374c898f6c1e33a390f1c">ripple::test::MPToken_test::testClawback</a></div><div class="ttdeci">void testClawback(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l02041">MPToken_test.cpp:2041</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a6338179a7b9ae6729306434870ff6a07"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a6338179a7b9ae6729306434870ff6a07">ripple::test::MPToken_test::testTokensEquality</a></div><div class="ttdeci">void testTokensEquality()</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l02153">MPToken_test.cpp:2153</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a648a57a2ce1b1e930c10eee0580165bf"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a648a57a2ce1b1e930c10eee0580165bf">ripple::test::MPToken_test::testAuthorizeValidation</a></div><div class="ttdeci">void testAuthorizeValidation(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l00214">MPToken_test.cpp:214</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a67e77f6f69f3552077d8a873d86e589d"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a67e77f6f69f3552077d8a873d86e589d">ripple::test::MPToken_test::testSetValidation</a></div><div class="ttdeci">void testSetValidation(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l00468">MPToken_test.cpp:468</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a690da94ce5d0abe22dbb88543fe721a7"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a690da94ce5d0abe22dbb88543fe721a7">ripple::test::MPToken_test::testClawbackValidation</a></div><div class="ttdeci">void testClawbackValidation(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l01889">MPToken_test.cpp:1889</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a690da94ce5d0abe22dbb88543fe721a7"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a690da94ce5d0abe22dbb88543fe721a7">ripple::test::MPToken_test::testClawbackValidation</a></div><div class="ttdeci">void testClawbackValidation(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l01891">MPToken_test.cpp:1891</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a79b677b08b7bbc33cbea3bb7e474e851"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a79b677b08b7bbc33cbea3bb7e474e851">ripple::test::MPToken_test::testDepositPreauth</a></div><div class="ttdeci">void testDepositPreauth()</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l01321">MPToken_test.cpp:1321</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a7a30578b790935b2b3db65a13768b6bf"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a7a30578b790935b2b3db65a13768b6bf">ripple::test::MPToken_test::testCreateEnabled</a></div><div class="ttdeci">void testCreateEnabled(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l00114">MPToken_test.cpp:114</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a7c1eda386aca9e1d93cd1c6dfedf4bff"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a7c1eda386aca9e1d93cd1c6dfedf4bff">ripple::test::MPToken_test::testDestroyEnabled</a></div><div class="ttdeci">void testDestroyEnabled(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l00196">MPToken_test.cpp:196</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a896b9bad21dcdea525f989c0518175b7"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a896b9bad21dcdea525f989c0518175b7">ripple::test::MPToken_test::testPayment</a></div><div class="ttdeci">void testPayment(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l00639">MPToken_test.cpp:639</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a8d919bd57086e2aabc1e6323f01c990b"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a8d919bd57086e2aabc1e6323f01c990b">ripple::test::MPToken_test::testHelperFunctions</a></div><div class="ttdeci">void testHelperFunctions()</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l02194">MPToken_test.cpp:2194</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a8d919bd57086e2aabc1e6323f01c990b"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a8d919bd57086e2aabc1e6323f01c990b">ripple::test::MPToken_test::testHelperFunctions</a></div><div class="ttdeci">void testHelperFunctions()</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l02196">MPToken_test.cpp:2196</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a8dabd3012e9b8a6245baa5ac80c4c3b9"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a8dabd3012e9b8a6245baa5ac80c4c3b9">ripple::test::MPToken_test::testMPTInvalidInTx</a></div><div class="ttdeci">void testMPTInvalidInTx(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l01472">MPToken_test.cpp:1472</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_a99acb92a810042912aeec336ce55ea0b"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#a99acb92a810042912aeec336ce55ea0b">ripple::test::MPToken_test::testAuthorizeEnabled</a></div><div class="ttdeci">void testAuthorizeEnabled(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l00396">MPToken_test.cpp:396</a></div></div>
<div class="ttc" id="aclassripple_1_1test_1_1MPToken__test_html_acd3d1880e15b88d565fd5f066e671d7d"><div class="ttname"><a href="classripple_1_1test_1_1MPToken__test.html#acd3d1880e15b88d565fd5f066e671d7d">ripple::test::MPToken_test::testDestroyValidation</a></div><div class="ttdeci">void testDestroyValidation(FeatureBitset features)</div><div class="ttdef"><b>Definition:</b> <a href="MPToken__test_8cpp_source.html#l00146">MPToken_test.cpp:146</a></div></div>
@@ -2482,6 +2484,7 @@ $(function() {
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a58da4eb28cfb86cc1fb1212cec9b1687"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a58da4eb28cfb86cc1fb1212cec9b1687">ripple::test::jtx::sidechain_xchain_account_create</a></div><div class="ttdeci">Json::Value sidechain_xchain_account_create(Account const &amp;acc, Json::Value const &amp;bridge, Account const &amp;dst, AnyAmount const &amp;amt, AnyAmount const &amp;reward)</div><div class="ttdef"><b>Definition:</b> <a href="xchain__bridge_8cpp_source.html#l00177">xchain_bridge.cpp:177</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a5a095e0f7eea1ab0f33920fd893feb2e"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a5a095e0f7eea1ab0f33920fd893feb2e">ripple::test::jtx::xchain_claim</a></div><div class="ttdeci">Json::Value xchain_claim(Account const &amp;acc, Json::Value const &amp;bridge, std::uint32_t claimID, AnyAmount const &amp;amt, Account const &amp;dst)</div><div class="ttdef"><b>Definition:</b> <a href="xchain__bridge_8cpp_source.html#l00156">xchain_bridge.cpp:156</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a66b99468a4160bccaa9959a444b40d40"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a66b99468a4160bccaa9959a444b40d40">ripple::test::jtx::pay</a></div><div class="ttdeci">Json::Value pay(AccountID const &amp;account, AccountID const &amp;to, AnyAmount amount)</div><div class="ttdoc">Create a payment.</div><div class="ttdef"><b>Definition:</b> <a href="pay_8cpp_source.html#l00030">pay.cpp:30</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a7a4caa0465c555c5c59ce7c0d0d48d78"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a7a4caa0465c555c5c59ce7c0d0d48d78">ripple::test::jtx::envconfig</a></div><div class="ttdeci">std::unique_ptr&lt; Config &gt; envconfig()</div><div class="ttdoc">creates and initializes a default configuration for jtx::Env</div><div class="ttdef"><b>Definition:</b> <a href="envconfig_8h_source.html#l00054">envconfig.h:54</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_a9298c16368e46c025f1e0563285a6c33"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#a9298c16368e46c025f1e0563285a6c33">ripple::test::jtx::xchain_create_claim_id</a></div><div class="ttdeci">Json::Value xchain_create_claim_id(Account const &amp;acc, Json::Value const &amp;bridge, STAmount const &amp;reward, Account const &amp;otherChainSource)</div><div class="ttdef"><b>Definition:</b> <a href="xchain__bridge_8cpp_source.html#l00115">xchain_bridge.cpp:115</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_ac423e2aa3fd7a14ae651849b430994f1"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#ac423e2aa3fd7a14ae651849b430994f1">ripple::test::jtx::offer</a></div><div class="ttdeci">Json::Value offer(Account const &amp;account, STAmount const &amp;takerPays, STAmount const &amp;takerGets, std::uint32_t flags)</div><div class="ttdoc">Create an offer.</div><div class="ttdef"><b>Definition:</b> <a href="offer_8cpp_source.html#l00029">offer.cpp:29</a></div></div>
<div class="ttc" id="anamespaceripple_1_1test_1_1jtx_html_adb16b0b90c444073e9d4b85351349cd0"><div class="ttname"><a href="namespaceripple_1_1test_1_1jtx.html#adb16b0b90c444073e9d4b85351349cd0">ripple::test::jtx::xchain_commit</a></div><div class="ttdeci">Json::Value xchain_commit(Account const &amp;acc, Json::Value const &amp;bridge, std::uint32_t claimID, AnyAmount const &amp;amt, std::optional&lt; Account &gt; const &amp;dst)</div><div class="ttdef"><b>Definition:</b> <a href="xchain__bridge_8cpp_source.html#l00134">xchain_bridge.cpp:134</a></div></div>