This commit is contained in:
bthomee
2025-06-02 13:56:46 +00:00
parent ebe6bc13ab
commit 473f896133
887 changed files with 36630 additions and 32082 deletions

View File

@@ -593,14 +593,14 @@ $(function() {
<div class="line"><a id="l00515" name="l00515"></a><span class="lineno"> 515</span> [amountWithdrawActual, amount2WithdrawActual, lpTokensWithdrawActual] =</div>
<div class="line"><a id="l00516" name="l00516"></a><span class="lineno"> 516</span> [&amp;]() -&gt; <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/tuple.html">std::tuple</a>&lt;<a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>, <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/optional.html">std::optional&lt;STAmount&gt;</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>&gt; {</div>
<div class="line"><a id="l00517" name="l00517"></a><span class="lineno"> 517</span> <span class="keywordflow">if</span> (withdrawAll == <a class="code hl_enumvalue" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63abafd7322c6e97d25b6299b5d6fe8920b">WithdrawAll::No</a>)</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a5f936a9395ee6781feff5c6a13adacf1">adjustAmountsByLPTokens</a>(</div>
<div class="line"><a id="l00518" name="l00518"></a><span class="lineno"> 518</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a812051b3eb90012879722503bc9c422a">adjustAmountsByLPTokens</a>(</div>
<div class="line"><a id="l00519" name="l00519"></a><span class="lineno"> 519</span> amountBalance,</div>
<div class="line"><a id="l00520" name="l00520"></a><span class="lineno"> 520</span> amountWithdraw,</div>
<div class="line"><a id="l00521" name="l00521"></a><span class="lineno"> 521</span> amount2Withdraw,</div>
<div class="line"><a id="l00522" name="l00522"></a><span class="lineno"> 522</span> lpTokensAMMBalance,</div>
<div class="line"><a id="l00523" name="l00523"></a><span class="lineno"> 523</span> lpTokensWithdraw,</div>
<div class="line"><a id="l00524" name="l00524"></a><span class="lineno"> 524</span> tfee,</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <span class="keyword">false</span>);</div>
<div class="line"><a id="l00525" name="l00525"></a><span class="lineno"> 525</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00526" name="l00526"></a><span class="lineno"> 526</span> <span class="keywordflow">return</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/tuple/make_tuple.html">std::make_tuple</a>(</div>
<div class="line"><a id="l00527" name="l00527"></a><span class="lineno"> 527</span> amountWithdraw, amount2Withdraw, lpTokensWithdraw);</div>
<div class="line"><a id="l00528" name="l00528"></a><span class="lineno"> 528</span> }();</div>
@@ -761,315 +761,392 @@ $(function() {
<div class="line"><a id="l00683" name="l00683"></a><span class="lineno"> 683</span> amount2WithdrawActual);</div>
<div class="line"><a id="l00684" name="l00684"></a><span class="lineno"> 684</span>}</div>
<div class="line"><a id="l00685" name="l00685"></a><span class="lineno"> 685</span> </div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a144e555a784eb6d256c056c6973af287"> 687</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0">AMMWithdraw::equalWithdrawTokens</a>(</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount2Balance,</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokens,</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokensWithdraw,</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span>{</div>
<div class="line"><a id="l00698" name="l00698"></a><span class="lineno"> 698</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a> ter;</div>
<div class="line"><a id="l00699" name="l00699"></a><span class="lineno"> 699</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> newLPTokenBalance;</div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/tuple/tie.html">std::tie</a>(ter, newLPTokenBalance, std::ignore, std::ignore) =</div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"> 701</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0">equalWithdrawTokens</a>(</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> ammSle,</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>,</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> ammAccount,</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> amountBalance,</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> amount2Balance,</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> lptAMMBalance,</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> lpTokens,</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> lpTokensWithdraw,</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span> tfee,</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> <a class="code hl_enumvalue" href="namespaceripple.html#a17a9a9b903b66e49f5413d82ce79f085a852cabbbe21a9b4d63aff777eceab2fd">FreezeHandling::fhZERO_IF_FROZEN</a>,</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b">isWithdrawAll</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>),</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#abb2f6f5d7fd8c663c5df76b6fcba2c49">mPriorBalance</a>,</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a7b78c8e924babce4d14359970f55ba02">journal</a>);</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> <span class="keywordflow">return</span> {ter, newLPTokenBalance};</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span>}</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> </div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, bool&gt;</a></div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#ab62952f0d0ed8f24c7a5dddcbbc5c9ae"> 720</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ab62952f0d0ed8f24c7a5dddcbbc5c9ae">AMMWithdraw::deleteAMMAccountIfEmpty</a>(</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; sb,</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE&gt;</a> <span class="keyword">const</span> ammSle,</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokenBalance,</div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> <a class="code hl_class" href="classripple_1_1Issue.html">Issue</a> <span class="keyword">const</span>&amp; issue1,</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> <a class="code hl_class" href="classripple_1_1Issue.html">Issue</a> <span class="keyword">const</span>&amp; issue2,</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> <span class="keyword">const</span>&amp; journal)</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span>{</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a> ter;</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> <span class="keywordtype">bool</span> updateBalance = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">if</span> (lpTokenBalance == beast::zero)</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span> {</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> ter = <a class="code hl_function" href="namespaceripple.html#a39496f811d81eeceaec4ab1fe9f877ac">deleteAMMAccount</a>(sb, issue1, issue2, journal);</div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span> <span class="keywordflow">if</span> (ter != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a> &amp;&amp; ter != <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">tecINCOMPLETE</a>)</div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"> 734</span> <span class="keywordflow">return</span> {ter, <span class="keyword">false</span>}; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> updateBalance = (ter == <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">tecINCOMPLETE</a>);</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> }</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> </div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> <span class="keywordflow">if</span> (updateBalance)</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> {</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span> ammSle-&gt;setFieldAmount(sfLPTokenBalance, lpTokenBalance);</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#a4f12513f46ee2c194d6fb0e4d28e5543">update</a>(ammSle);</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> }</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> </div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> <span class="keywordflow">return</span> {ter, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span>}</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> </div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/tuple.html">std::tuple&lt;TER, STAmount, STAmount, std::optional&lt;STAmount&gt;</a>&gt;</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0"> 751</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0">AMMWithdraw::equalWithdrawTokens</a>(</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span> account,</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount2Balance,</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokens,</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokensWithdraw,</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee,</div>
<div class="line"><a id="l00762" name="l00762"></a><span class="lineno"> 762</span> <a class="code hl_enumeration" href="namespaceripple.html#a17a9a9b903b66e49f5413d82ce79f085">FreezeHandling</a> freezeHanding,</div>
<div class="line"><a id="l00763" name="l00763"></a><span class="lineno"> 763</span> <a class="code hl_enumeration" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63">WithdrawAll</a> withdrawAll,</div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a> <span class="keyword">const</span>&amp; priorBalance,</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"> 765</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> <span class="keyword">const</span>&amp; journal)</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span>{</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> {</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <span class="comment">// Withdrawing all tokens in the pool</span></div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> <span class="keywordflow">if</span> (lpTokensWithdraw == lptAMMBalance)</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> {</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> ammSle,</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> ammAccount,</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> account,</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> amountBalance,</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> amountBalance,</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> amount2Balance,</div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span> lptAMMBalance,</div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> lpTokensWithdraw,</div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> tfee,</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> freezeHanding,</div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <a class="code hl_enumvalue" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63a93cba07454f06a4a960172bbd6e2a435">WithdrawAll::Yes</a>,</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> priorBalance,</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> journal);</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> }</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> </div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> <span class="keyword">auto</span> <span class="keyword">const</span> frac = <a class="code hl_function" href="namespaceripple.html#a0ad557cc32ca87dcea19af8e30c63c6a">divide</a>(lpTokensWithdraw, lptAMMBalance, <a class="code hl_function" href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">noIssue</a>());</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> <span class="keyword">auto</span> <span class="keyword">const</span> withdrawAmount =</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(amountBalance, frac, amountBalance.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>());</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> <span class="keyword">auto</span> <span class="keyword">const</span> withdraw2Amount =</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> <a class="code hl_function" href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">multiply</a>(amount2Balance, frac, amount2Balance.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>());</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> <span class="comment">// LP is making equal withdrawal by tokens but the requested amount</span></div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> <span class="comment">// of LP tokens is likely too small and results in one-sided pool</span></div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> <span class="comment">// withdrawal due to round off. Fail so the user withdraws</span></div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> <span class="comment">// more tokens.</span></div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <span class="keywordflow">if</span> (withdrawAmount == beast::zero || withdraw2Amount == beast::zero)</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> </div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> ammSle,</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> ammAccount,</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> account,</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> amountBalance,</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> withdrawAmount,</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> withdraw2Amount,</div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> lptAMMBalance,</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> lpTokensWithdraw,</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> tfee,</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> freezeHanding,</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> withdrawAll,</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> priorBalance,</div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> journal);</div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> }</div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> {</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> JLOG(journal.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> &lt;&lt; <span class="stringliteral">&quot;AMMWithdraw::equalWithdrawTokens exception &quot;</span> &lt;&lt; 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="l00822" name="l00822"></a><span class="lineno"> 822</span> }</div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span>}</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> </div>
<div class="line"><a id="l00852" name="l00852"></a><span class="lineno"> 852</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l00853" name="l00853"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a5236e8a4e14c231694b6952abfc3b423"> 853</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a5236e8a4e14c231694b6952abfc3b423">AMMWithdraw::equalWithdrawLimit</a>(</div>
<div class="line"><a id="l00854" name="l00854"></a><span class="lineno"> 854</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00855" name="l00855"></a><span class="lineno"> 855</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00856" name="l00856"></a><span class="lineno"> 856</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00857" name="l00857"></a><span class="lineno"> 857</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00858" name="l00858"></a><span class="lineno"> 858</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount2Balance,</div>
<div class="line"><a id="l00859" name="l00859"></a><span class="lineno"> 859</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00860" name="l00860"></a><span class="lineno"> 860</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount,</div>
<div class="line"><a id="l00861" name="l00861"></a><span class="lineno"> 861</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount2,</div>
<div class="line"><a id="l00862" name="l00862"></a><span class="lineno"> 862</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l00863" name="l00863"></a><span class="lineno"> 863</span>{</div>
<div class="line"><a id="l00864" name="l00864"></a><span class="lineno"> 864</span> <span class="keyword">auto</span> frac = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{amount} / amountBalance;</div>
<div class="line"><a id="l00865" name="l00865"></a><span class="lineno"> 865</span> <span class="keyword">auto</span> <span class="keyword">const</span> amount2Withdraw = amount2Balance * frac;</div>
<div class="line"><a id="l00866" name="l00866"></a><span class="lineno"> 866</span> <span class="keywordflow">if</span> (amount2Withdraw &lt;= amount2)</div>
<div class="line"><a id="l00867" name="l00867"></a><span class="lineno"> 867</span> {</div>
<div class="line"><a id="l00868" name="l00868"></a><span class="lineno"> 868</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00869" name="l00869"></a><span class="lineno"> 869</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00870" name="l00870"></a><span class="lineno"> 870</span> ammSle,</div>
<div class="line"><a id="l00871" name="l00871"></a><span class="lineno"> 871</span> ammAccount,</div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span> amountBalance,</div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"> 873</span> amount,</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> <a class="code hl_function" href="namespaceripple.html#a4ad5ac9da897292a28eea43d041c15a1">toSTAmount</a>(amount2.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), amount2Withdraw),</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> lptAMMBalance,</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <a class="code hl_function" href="namespaceripple.html#a4ad5ac9da897292a28eea43d041c15a1">toSTAmount</a>(lptAMMBalance.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), lptAMMBalance * frac),</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> tfee);</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> }</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> </div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> frac = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{amount2} / amount2Balance;</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> <span class="keyword">auto</span> <span class="keyword">const</span> amountWithdraw = amountBalance * frac;</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span> amountWithdraw &lt;= amount,</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> <span class="stringliteral">&quot;ripple::AMMWithdraw::equalWithdrawLimit : maximum amountWithdraw&quot;</span>);</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> ammSle,</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> ammAccount,</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> amountBalance,</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> <a class="code hl_function" href="namespaceripple.html#a4ad5ac9da897292a28eea43d041c15a1">toSTAmount</a>(amount.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), amountWithdraw),</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> amount2,</div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> lptAMMBalance,</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> <a class="code hl_function" href="namespaceripple.html#a4ad5ac9da897292a28eea43d041c15a1">toSTAmount</a>(lptAMMBalance.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), lptAMMBalance * frac),</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> tfee);</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span>}</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> </div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a6f66fea4d10c565cbc522980f248eee2"> 903</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a6f66fea4d10c565cbc522980f248eee2">AMMWithdraw::singleWithdraw</a>(</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount,</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span>{</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> <span class="keyword">auto</span> <span class="keyword">const</span> tokens = <a class="code hl_function" href="namespaceripple.html#a4c964d1f7629a28f9b916e2d25b39bcd">lpTokensOut</a>(amountBalance, amount, lptAMMBalance, tfee);</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> <span class="keywordflow">if</span> (tokens == beast::zero)</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> </div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> ammSle,</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> ammAccount,</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> amountBalance,</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> amount,</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> std::nullopt,</div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> lptAMMBalance,</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> tokens,</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> tfee);</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span>}</div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> </div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#af550daae2d35615ebb72a32cdc09c158"> 939</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#af550daae2d35615ebb72a32cdc09c158">AMMWithdraw::singleWithdrawTokens</a>(</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00942" name="l00942"></a><span class="lineno"> 942</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00943" name="l00943"></a><span class="lineno"> 943</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00944" name="l00944"></a><span class="lineno"> 944</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00945" name="l00945"></a><span class="lineno"> 945</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount,</div>
<div class="line"><a id="l00946" name="l00946"></a><span class="lineno"> 946</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokensWithdraw,</div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"> 948</span>{</div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> <span class="keyword">auto</span> <span class="keyword">const</span> amountWithdraw =</div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> <a class="code hl_function" href="namespaceripple.html#aea4620f7a5356019edee3be624729c6d">withdrawByTokens</a>(amountBalance, lptAMMBalance, lpTokensWithdraw, tfee);</div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> <span class="keywordflow">if</span> (amount == beast::zero || amountWithdraw &gt;= amount)</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> {</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> ammSle,</div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span> ammAccount,</div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> amountBalance,</div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> amountWithdraw,</div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> std::nullopt,</div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> lptAMMBalance,</div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> lpTokensWithdraw,</div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> tfee);</div>
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> }</div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> </div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span>}</div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> </div>
<div class="line"><a id="l00987" name="l00987"></a><span class="lineno"> 987</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l00988" name="l00988"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a4318b71ceedb46714e2d93a6db8e93c9"> 988</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a4318b71ceedb46714e2d93a6db8e93c9">AMMWithdraw::singleWithdrawEPrice</a>(</div>
<div class="line"><a id="l00989" name="l00989"></a><span class="lineno"> 989</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00990" name="l00990"></a><span class="lineno"> 990</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00991" name="l00991"></a><span class="lineno"> 991</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00992" name="l00992"></a><span class="lineno"> 992</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00993" name="l00993"></a><span class="lineno"> 993</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00994" name="l00994"></a><span class="lineno"> 994</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount,</div>
<div class="line"><a id="l00995" name="l00995"></a><span class="lineno"> 995</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; ePrice,</div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"> 997</span>{</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> <span class="comment">// LPTokens is asset in =&gt; E = t / a and formula (8) is:</span></div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> <span class="comment">// a = A*(t1**2 + t1*(f - 2))/(t1*f - 1)</span></div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> <span class="comment">// substitute a as t/E =&gt;</span></div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> <span class="comment">// t/E = A*(t1**2 + t1*(f - 2))/(t1*f - 1), t1=t/T =&gt; t = t1*T</span></div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> <span class="comment">// t1*T/E = A*((t/T)**2 + t*(f - 2)/T)/(t*f/T - 1) =&gt;</span></div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> <span class="comment">// T/E = A*(t1 + f-2)/(t1*f - 1) =&gt;</span></div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> <span class="comment">// T*(t1*f - 1) = A*E*(t1 + f - 2) =&gt;</span></div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> <span class="comment">// t1*T*f - T = t1*A*E + A*E*(f - 2) =&gt;</span></div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span> <span class="comment">// t1*(T*f - A*E) = T + A*E*(f - 2) =&gt;</span></div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> <span class="comment">// t = T*(T + A*E*(f - 2))/(T*f - A*E)</span></div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span> ae = amountBalance * ePrice;</div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> <span class="keyword">auto</span> <span class="keyword">const</span> f = <a class="code hl_function" href="namespaceripple.html#aa8871e2f35cee24497183274c0bab5fd">getFee</a>(tfee);</div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> <span class="keyword">auto</span> <span class="keyword">const</span> tokens = lptAMMBalance * (lptAMMBalance + ae * (f - 2)) /</div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> (lptAMMBalance * f - ae);</div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> <span class="keywordflow">if</span> (tokens &lt;= 0)</div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> <span class="keyword">auto</span> <span class="keyword">const</span> amountWithdraw = <a class="code hl_function" href="namespaceripple.html#a4ad5ac9da897292a28eea43d041c15a1">toSTAmount</a>(amount.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), tokens / ePrice);</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> <span class="keywordflow">if</span> (amount == beast::zero || amountWithdraw &gt;= amount)</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> {</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> ammSle,</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> ammAccount,</div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> amountBalance,</div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> amountWithdraw,</div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> std::nullopt,</div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> lptAMMBalance,</div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> <a class="code hl_function" href="namespaceripple.html#a4ad5ac9da897292a28eea43d041c15a1">toSTAmount</a>(lptAMMBalance.<a class="code hl_function" href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">issue</a>(), tokens),</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> tfee);</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> }</div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> </div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span>}</div>
<div class="line"><a id="l01031" name="l01031"></a><span class="lineno"> 1031</span> </div>
<div class="line"><a id="l01032" name="l01032"></a><span class="lineno"> 1032</span><a class="code hl_enumeration" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63">WithdrawAll</a></div>
<div class="line"><a id="l01033" name="l01033"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b"> 1033</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b">AMMWithdraw::isWithdrawAll</a>(<a class="code hl_class" href="classripple_1_1STTx.html">STTx</a> <span class="keyword">const</span>&amp; tx)</div>
<div class="line"><a id="l01034" name="l01034"></a><span class="lineno"> 1034</span>{</div>
<div class="line"><a id="l01035" name="l01035"></a><span class="lineno"> 1035</span> <span class="keywordflow">if</span> (tx[sfFlags] &amp; (<a class="code hl_variable" href="namespaceripple.html#a8383eb169324b23c0b4b49d6c2d2c877">tfWithdrawAll</a> | <a class="code hl_variable" href="namespaceripple.html#a0cebcc733182bb6794d2d4067a29fb2a">tfOneAssetWithdrawAll</a>))</div>
<div class="line"><a id="l01036" name="l01036"></a><span class="lineno"> 1036</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63a93cba07454f06a4a960172bbd6e2a435">WithdrawAll::Yes</a>;</div>
<div class="line"><a id="l01037" name="l01037"></a><span class="lineno"> 1037</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63abafd7322c6e97d25b6299b5d6fe8920b">WithdrawAll::No</a>;</div>
<div class="line"><a id="l01038" name="l01038"></a><span class="lineno"> 1038</span>}</div>
<div class="line"><a id="l01039" name="l01039"></a><span class="lineno"> 1039</span>} <span class="comment">// namespace ripple</span></div>
<div class="line"><a id="l00686" name="l00686"></a><span class="lineno"> 686</span><span class="keyword">static</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a></div>
<div class="line"><a id="l00687" name="l00687"></a><span class="lineno"><a class="line" href="namespaceripple.html#a8e4b418d6da8b9f8a72bd4bdb3cf84e1"> 687</a></span><a class="code hl_function" href="namespaceripple.html#a8e4b418d6da8b9f8a72bd4bdb3cf84e1">adjustLPTokensIn</a>(</div>
<div class="line"><a id="l00688" name="l00688"></a><span class="lineno"> 688</span> <a class="code hl_class" href="classripple_1_1Rules.html">Rules</a> <span class="keyword">const</span>&amp; rules,</div>
<div class="line"><a id="l00689" name="l00689"></a><span class="lineno"> 689</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00690" name="l00690"></a><span class="lineno"> 690</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokensWithdraw,</div>
<div class="line"><a id="l00691" name="l00691"></a><span class="lineno"> 691</span> <a class="code hl_enumeration" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63">WithdrawAll</a> withdrawAll)</div>
<div class="line"><a id="l00692" name="l00692"></a><span class="lineno"> 692</span>{</div>
<div class="line"><a id="l00693" name="l00693"></a><span class="lineno"> 693</span> <span class="keywordflow">if</span> (!rules.<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixAMMv1_3) || withdrawAll == <a class="code hl_enumvalue" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63a93cba07454f06a4a960172bbd6e2a435">WithdrawAll::Yes</a>)</div>
<div class="line"><a id="l00694" name="l00694"></a><span class="lineno"> 694</span> <span class="keywordflow">return</span> lpTokensWithdraw;</div>
<div class="line"><a id="l00695" name="l00695"></a><span class="lineno"> 695</span> <span class="keywordflow">return</span> <a class="code hl_function" href="namespaceripple.html#a745b96ab219de6f62807ab5f6f484534">adjustLPTokens</a>(lptAMMBalance, lpTokensWithdraw, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00696" name="l00696"></a><span class="lineno"> 696</span>}</div>
<div class="line"><a id="l00697" name="l00697"></a><span class="lineno"> 697</span> </div>
<div class="line"><a id="l00700" name="l00700"></a><span class="lineno"> 700</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l00701" name="l00701"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a144e555a784eb6d256c056c6973af287"> 701</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0">AMMWithdraw::equalWithdrawTokens</a>(</div>
<div class="line"><a id="l00702" name="l00702"></a><span class="lineno"> 702</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00703" name="l00703"></a><span class="lineno"> 703</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00704" name="l00704"></a><span class="lineno"> 704</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00705" name="l00705"></a><span class="lineno"> 705</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00706" name="l00706"></a><span class="lineno"> 706</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount2Balance,</div>
<div class="line"><a id="l00707" name="l00707"></a><span class="lineno"> 707</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00708" name="l00708"></a><span class="lineno"> 708</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokens,</div>
<div class="line"><a id="l00709" name="l00709"></a><span class="lineno"> 709</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokensWithdraw,</div>
<div class="line"><a id="l00710" name="l00710"></a><span class="lineno"> 710</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l00711" name="l00711"></a><span class="lineno"> 711</span>{</div>
<div class="line"><a id="l00712" name="l00712"></a><span class="lineno"> 712</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a> ter;</div>
<div class="line"><a id="l00713" name="l00713"></a><span class="lineno"> 713</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> newLPTokenBalance;</div>
<div class="line"><a id="l00714" name="l00714"></a><span class="lineno"> 714</span> <a class="code hl_functionRef" href="http://en.cppreference.com/w/cpp/utility/tuple/tie.html">std::tie</a>(ter, newLPTokenBalance, std::ignore, std::ignore) =</div>
<div class="line"><a id="l00715" name="l00715"></a><span class="lineno"> 715</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0">equalWithdrawTokens</a>(</div>
<div class="line"><a id="l00716" name="l00716"></a><span class="lineno"> 716</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00717" name="l00717"></a><span class="lineno"> 717</span> ammSle,</div>
<div class="line"><a id="l00718" name="l00718"></a><span class="lineno"> 718</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#a803c6fba463ed92ee24e4c056467f20a">account_</a>,</div>
<div class="line"><a id="l00719" name="l00719"></a><span class="lineno"> 719</span> ammAccount,</div>
<div class="line"><a id="l00720" name="l00720"></a><span class="lineno"> 720</span> amountBalance,</div>
<div class="line"><a id="l00721" name="l00721"></a><span class="lineno"> 721</span> amount2Balance,</div>
<div class="line"><a id="l00722" name="l00722"></a><span class="lineno"> 722</span> lptAMMBalance,</div>
<div class="line"><a id="l00723" name="l00723"></a><span class="lineno"> 723</span> lpTokens,</div>
<div class="line"><a id="l00724" name="l00724"></a><span class="lineno"> 724</span> lpTokensWithdraw,</div>
<div class="line"><a id="l00725" name="l00725"></a><span class="lineno"> 725</span> tfee,</div>
<div class="line"><a id="l00726" name="l00726"></a><span class="lineno"> 726</span> <a class="code hl_enumvalue" href="namespaceripple.html#a17a9a9b903b66e49f5413d82ce79f085a852cabbbe21a9b4d63aff777eceab2fd">FreezeHandling::fhZERO_IF_FROZEN</a>,</div>
<div class="line"><a id="l00727" name="l00727"></a><span class="lineno"> 727</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b">isWithdrawAll</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>),</div>
<div class="line"><a id="l00728" name="l00728"></a><span class="lineno"> 728</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#abb2f6f5d7fd8c663c5df76b6fcba2c49">mPriorBalance</a>,</div>
<div class="line"><a id="l00729" name="l00729"></a><span class="lineno"> 729</span> <a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a7b78c8e924babce4d14359970f55ba02">journal</a>);</div>
<div class="line"><a id="l00730" name="l00730"></a><span class="lineno"> 730</span> <span class="keywordflow">return</span> {ter, newLPTokenBalance};</div>
<div class="line"><a id="l00731" name="l00731"></a><span class="lineno"> 731</span>}</div>
<div class="line"><a id="l00732" name="l00732"></a><span class="lineno"> 732</span> </div>
<div class="line"><a id="l00733" name="l00733"></a><span class="lineno"> 733</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, bool&gt;</a></div>
<div class="line"><a id="l00734" name="l00734"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#ab62952f0d0ed8f24c7a5dddcbbc5c9ae"> 734</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ab62952f0d0ed8f24c7a5dddcbbc5c9ae">AMMWithdraw::deleteAMMAccountIfEmpty</a>(</div>
<div class="line"><a id="l00735" name="l00735"></a><span class="lineno"> 735</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; sb,</div>
<div class="line"><a id="l00736" name="l00736"></a><span class="lineno"> 736</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/memory/shared_ptr.html">std::shared_ptr&lt;SLE&gt;</a> <span class="keyword">const</span> ammSle,</div>
<div class="line"><a id="l00737" name="l00737"></a><span class="lineno"> 737</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokenBalance,</div>
<div class="line"><a id="l00738" name="l00738"></a><span class="lineno"> 738</span> <a class="code hl_class" href="classripple_1_1Issue.html">Issue</a> <span class="keyword">const</span>&amp; issue1,</div>
<div class="line"><a id="l00739" name="l00739"></a><span class="lineno"> 739</span> <a class="code hl_class" href="classripple_1_1Issue.html">Issue</a> <span class="keyword">const</span>&amp; issue2,</div>
<div class="line"><a id="l00740" name="l00740"></a><span class="lineno"> 740</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> <span class="keyword">const</span>&amp; journal)</div>
<div class="line"><a id="l00741" name="l00741"></a><span class="lineno"> 741</span>{</div>
<div class="line"><a id="l00742" name="l00742"></a><span class="lineno"> 742</span> <a class="code hl_class" href="classripple_1_1TERSubset.html">TER</a> ter;</div>
<div class="line"><a id="l00743" name="l00743"></a><span class="lineno"> 743</span> <span class="keywordtype">bool</span> updateBalance = <span class="keyword">true</span>;</div>
<div class="line"><a id="l00744" name="l00744"></a><span class="lineno"> 744</span> <span class="keywordflow">if</span> (lpTokenBalance == beast::zero)</div>
<div class="line"><a id="l00745" name="l00745"></a><span class="lineno"> 745</span> {</div>
<div class="line"><a id="l00746" name="l00746"></a><span class="lineno"> 746</span> ter = <a class="code hl_function" href="namespaceripple.html#a39496f811d81eeceaec4ab1fe9f877ac">deleteAMMAccount</a>(sb, issue1, issue2, journal);</div>
<div class="line"><a id="l00747" name="l00747"></a><span class="lineno"> 747</span> <span class="keywordflow">if</span> (ter != <a class="code hl_enumvalue" href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">tesSUCCESS</a> &amp;&amp; ter != <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">tecINCOMPLETE</a>)</div>
<div class="line"><a id="l00748" name="l00748"></a><span class="lineno"> 748</span> <span class="keywordflow">return</span> {ter, <span class="keyword">false</span>}; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00749" name="l00749"></a><span class="lineno"> 749</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00750" name="l00750"></a><span class="lineno"> 750</span> updateBalance = (ter == <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">tecINCOMPLETE</a>);</div>
<div class="line"><a id="l00751" name="l00751"></a><span class="lineno"> 751</span> }</div>
<div class="line"><a id="l00752" name="l00752"></a><span class="lineno"> 752</span> </div>
<div class="line"><a id="l00753" name="l00753"></a><span class="lineno"> 753</span> <span class="keywordflow">if</span> (updateBalance)</div>
<div class="line"><a id="l00754" name="l00754"></a><span class="lineno"> 754</span> {</div>
<div class="line"><a id="l00755" name="l00755"></a><span class="lineno"> 755</span> ammSle-&gt;setFieldAmount(sfLPTokenBalance, lpTokenBalance);</div>
<div class="line"><a id="l00756" name="l00756"></a><span class="lineno"> 756</span> sb.<a class="code hl_function" href="classripple_1_1detail_1_1ApplyViewBase.html#a4f12513f46ee2c194d6fb0e4d28e5543">update</a>(ammSle);</div>
<div class="line"><a id="l00757" name="l00757"></a><span class="lineno"> 757</span> }</div>
<div class="line"><a id="l00758" name="l00758"></a><span class="lineno"> 758</span> </div>
<div class="line"><a id="l00759" name="l00759"></a><span class="lineno"> 759</span> <span class="keywordflow">return</span> {ter, <span class="keyword">true</span>};</div>
<div class="line"><a id="l00760" name="l00760"></a><span class="lineno"> 760</span>}</div>
<div class="line"><a id="l00761" name="l00761"></a><span class="lineno"> 761</span> </div>
<div class="line"><a id="l00764" name="l00764"></a><span class="lineno"> 764</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/tuple.html">std::tuple&lt;TER, STAmount, STAmount, std::optional&lt;STAmount&gt;</a>&gt;</div>
<div class="line"><a id="l00765" name="l00765"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0"> 765</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0">AMMWithdraw::equalWithdrawTokens</a>(</div>
<div class="line"><a id="l00766" name="l00766"></a><span class="lineno"> 766</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00767" name="l00767"></a><span class="lineno"> 767</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00768" name="l00768"></a><span class="lineno"> 768</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span> account,</div>
<div class="line"><a id="l00769" name="l00769"></a><span class="lineno"> 769</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00770" name="l00770"></a><span class="lineno"> 770</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00771" name="l00771"></a><span class="lineno"> 771</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount2Balance,</div>
<div class="line"><a id="l00772" name="l00772"></a><span class="lineno"> 772</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00773" name="l00773"></a><span class="lineno"> 773</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokens,</div>
<div class="line"><a id="l00774" name="l00774"></a><span class="lineno"> 774</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokensWithdraw,</div>
<div class="line"><a id="l00775" name="l00775"></a><span class="lineno"> 775</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee,</div>
<div class="line"><a id="l00776" name="l00776"></a><span class="lineno"> 776</span> <a class="code hl_enumeration" href="namespaceripple.html#a17a9a9b903b66e49f5413d82ce79f085">FreezeHandling</a> freezeHanding,</div>
<div class="line"><a id="l00777" name="l00777"></a><span class="lineno"> 777</span> <a class="code hl_enumeration" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63">WithdrawAll</a> withdrawAll,</div>
<div class="line"><a id="l00778" name="l00778"></a><span class="lineno"> 778</span> <a class="code hl_class" href="classripple_1_1XRPAmount.html">XRPAmount</a> <span class="keyword">const</span>&amp; priorBalance,</div>
<div class="line"><a id="l00779" name="l00779"></a><span class="lineno"> 779</span> <a class="code hl_class" href="classbeast_1_1Journal.html">beast::Journal</a> <span class="keyword">const</span>&amp; journal)</div>
<div class="line"><a id="l00780" name="l00780"></a><span class="lineno"> 780</span>{</div>
<div class="line"><a id="l00781" name="l00781"></a><span class="lineno"> 781</span> <span class="keywordflow">try</span></div>
<div class="line"><a id="l00782" name="l00782"></a><span class="lineno"> 782</span> {</div>
<div class="line"><a id="l00783" name="l00783"></a><span class="lineno"> 783</span> <span class="comment">// Withdrawing all tokens in the pool</span></div>
<div class="line"><a id="l00784" name="l00784"></a><span class="lineno"> 784</span> <span class="keywordflow">if</span> (lpTokensWithdraw == lptAMMBalance)</div>
<div class="line"><a id="l00785" name="l00785"></a><span class="lineno"> 785</span> {</div>
<div class="line"><a id="l00786" name="l00786"></a><span class="lineno"> 786</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00787" name="l00787"></a><span class="lineno"> 787</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00788" name="l00788"></a><span class="lineno"> 788</span> ammSle,</div>
<div class="line"><a id="l00789" name="l00789"></a><span class="lineno"> 789</span> ammAccount,</div>
<div class="line"><a id="l00790" name="l00790"></a><span class="lineno"> 790</span> account,</div>
<div class="line"><a id="l00791" name="l00791"></a><span class="lineno"> 791</span> amountBalance,</div>
<div class="line"><a id="l00792" name="l00792"></a><span class="lineno"> 792</span> amountBalance,</div>
<div class="line"><a id="l00793" name="l00793"></a><span class="lineno"> 793</span> amount2Balance,</div>
<div class="line"><a id="l00794" name="l00794"></a><span class="lineno"> 794</span> lptAMMBalance,</div>
<div class="line"><a id="l00795" name="l00795"></a><span class="lineno"> 795</span> lpTokensWithdraw,</div>
<div class="line"><a id="l00796" name="l00796"></a><span class="lineno"> 796</span> tfee,</div>
<div class="line"><a id="l00797" name="l00797"></a><span class="lineno"> 797</span> freezeHanding,</div>
<div class="line"><a id="l00798" name="l00798"></a><span class="lineno"> 798</span> <a class="code hl_enumvalue" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63a93cba07454f06a4a960172bbd6e2a435">WithdrawAll::Yes</a>,</div>
<div class="line"><a id="l00799" name="l00799"></a><span class="lineno"> 799</span> priorBalance,</div>
<div class="line"><a id="l00800" name="l00800"></a><span class="lineno"> 800</span> journal);</div>
<div class="line"><a id="l00801" name="l00801"></a><span class="lineno"> 801</span> }</div>
<div class="line"><a id="l00802" name="l00802"></a><span class="lineno"> 802</span> </div>
<div class="line"><a id="l00803" name="l00803"></a><span class="lineno"> 803</span> <span class="keyword">auto</span> <span class="keyword">const</span> tokensAdj = <a class="code hl_function" href="namespaceripple.html#a8e4b418d6da8b9f8a72bd4bdb3cf84e1">adjustLPTokensIn</a>(</div>
<div class="line"><a id="l00804" name="l00804"></a><span class="lineno"> 804</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), lptAMMBalance, lpTokensWithdraw, withdrawAll);</div>
<div class="line"><a id="l00805" name="l00805"></a><span class="lineno"> 805</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixAMMv1_3) &amp;&amp; tokensAdj == beast::zero)</div>
<div class="line"><a id="l00806" name="l00806"></a><span class="lineno"> 806</span> <span class="keywordflow">return</span> {</div>
<div class="line"><a id="l00807" name="l00807"></a><span class="lineno"> 807</span> <a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cae04fb0979694245c81c59f9cb35181e9">tecAMM_INVALID_TOKENS</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, std::nullopt};</div>
<div class="line"><a id="l00808" name="l00808"></a><span class="lineno"> 808</span> <span class="comment">// the adjusted tokens are factored in</span></div>
<div class="line"><a id="l00809" name="l00809"></a><span class="lineno"> 809</span> <span class="keyword">auto</span> <span class="keyword">const</span> frac = <a class="code hl_function" href="namespaceripple.html#a0ad557cc32ca87dcea19af8e30c63c6a">divide</a>(tokensAdj, lptAMMBalance, <a class="code hl_function" href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">noIssue</a>());</div>
<div class="line"><a id="l00810" name="l00810"></a><span class="lineno"> 810</span> <span class="keyword">auto</span> <span class="keyword">const</span> amountWithdraw =</div>
<div class="line"><a id="l00811" name="l00811"></a><span class="lineno"> 811</span> <a class="code hl_function" href="namespaceripple.html#ae72b56b6709fd192e009123c40d47af6">getRoundedAsset</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), amountBalance, frac, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00812" name="l00812"></a><span class="lineno"> 812</span> <span class="keyword">auto</span> <span class="keyword">const</span> amount2Withdraw =</div>
<div class="line"><a id="l00813" name="l00813"></a><span class="lineno"> 813</span> <a class="code hl_function" href="namespaceripple.html#ae72b56b6709fd192e009123c40d47af6">getRoundedAsset</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), amount2Balance, frac, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00814" name="l00814"></a><span class="lineno"> 814</span> <span class="comment">// LP is making equal withdrawal by tokens but the requested amount</span></div>
<div class="line"><a id="l00815" name="l00815"></a><span class="lineno"> 815</span> <span class="comment">// of LP tokens is likely too small and results in one-sided pool</span></div>
<div class="line"><a id="l00816" name="l00816"></a><span class="lineno"> 816</span> <span class="comment">// withdrawal due to round off. Fail so the user withdraws</span></div>
<div class="line"><a id="l00817" name="l00817"></a><span class="lineno"> 817</span> <span class="comment">// more tokens.</span></div>
<div class="line"><a id="l00818" name="l00818"></a><span class="lineno"> 818</span> <span class="keywordflow">if</span> (amountWithdraw == beast::zero || amount2Withdraw == beast::zero)</div>
<div class="line"><a id="l00819" name="l00819"></a><span class="lineno"> 819</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l00820" name="l00820"></a><span class="lineno"> 820</span> </div>
<div class="line"><a id="l00821" name="l00821"></a><span class="lineno"> 821</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00822" name="l00822"></a><span class="lineno"> 822</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00823" name="l00823"></a><span class="lineno"> 823</span> ammSle,</div>
<div class="line"><a id="l00824" name="l00824"></a><span class="lineno"> 824</span> ammAccount,</div>
<div class="line"><a id="l00825" name="l00825"></a><span class="lineno"> 825</span> account,</div>
<div class="line"><a id="l00826" name="l00826"></a><span class="lineno"> 826</span> amountBalance,</div>
<div class="line"><a id="l00827" name="l00827"></a><span class="lineno"> 827</span> amountWithdraw,</div>
<div class="line"><a id="l00828" name="l00828"></a><span class="lineno"> 828</span> amount2Withdraw,</div>
<div class="line"><a id="l00829" name="l00829"></a><span class="lineno"> 829</span> lptAMMBalance,</div>
<div class="line"><a id="l00830" name="l00830"></a><span class="lineno"> 830</span> tokensAdj,</div>
<div class="line"><a id="l00831" name="l00831"></a><span class="lineno"> 831</span> tfee,</div>
<div class="line"><a id="l00832" name="l00832"></a><span class="lineno"> 832</span> freezeHanding,</div>
<div class="line"><a id="l00833" name="l00833"></a><span class="lineno"> 833</span> withdrawAll,</div>
<div class="line"><a id="l00834" name="l00834"></a><span class="lineno"> 834</span> priorBalance,</div>
<div class="line"><a id="l00835" name="l00835"></a><span class="lineno"> 835</span> journal);</div>
<div class="line"><a id="l00836" name="l00836"></a><span class="lineno"> 836</span> }</div>
<div class="line"><a id="l00837" name="l00837"></a><span class="lineno"> 837</span> <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l00838" name="l00838"></a><span class="lineno"> 838</span> <span class="keywordflow">catch</span> (<a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/error/exception.html">std::exception</a> <span class="keyword">const</span>&amp; e)</div>
<div class="line"><a id="l00839" name="l00839"></a><span class="lineno"> 839</span> {</div>
<div class="line"><a id="l00840" name="l00840"></a><span class="lineno"> 840</span> JLOG(journal.<a class="code hl_function" href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">error</a>())</div>
<div class="line"><a id="l00841" name="l00841"></a><span class="lineno"> 841</span> &lt;&lt; <span class="stringliteral">&quot;AMMWithdraw::equalWithdrawTokens exception &quot;</span> &lt;&lt; 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="l00842" name="l00842"></a><span class="lineno"> 842</span> }</div>
<div class="line"><a id="l00843" name="l00843"></a><span class="lineno"> 843</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca93e4e159f8759ea0948423c699e7cf77">tecINTERNAL</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l00844" name="l00844"></a><span class="lineno"> 844</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l00845" name="l00845"></a><span class="lineno"> 845</span>}</div>
<div class="line"><a id="l00846" name="l00846"></a><span class="lineno"> 846</span> </div>
<div class="line"><a id="l00872" name="l00872"></a><span class="lineno"> 872</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l00873" name="l00873"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a5236e8a4e14c231694b6952abfc3b423"> 873</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a5236e8a4e14c231694b6952abfc3b423">AMMWithdraw::equalWithdrawLimit</a>(</div>
<div class="line"><a id="l00874" name="l00874"></a><span class="lineno"> 874</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00875" name="l00875"></a><span class="lineno"> 875</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00876" name="l00876"></a><span class="lineno"> 876</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00877" name="l00877"></a><span class="lineno"> 877</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00878" name="l00878"></a><span class="lineno"> 878</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount2Balance,</div>
<div class="line"><a id="l00879" name="l00879"></a><span class="lineno"> 879</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00880" name="l00880"></a><span class="lineno"> 880</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount,</div>
<div class="line"><a id="l00881" name="l00881"></a><span class="lineno"> 881</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount2,</div>
<div class="line"><a id="l00882" name="l00882"></a><span class="lineno"> 882</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l00883" name="l00883"></a><span class="lineno"> 883</span>{</div>
<div class="line"><a id="l00884" name="l00884"></a><span class="lineno"> 884</span> <span class="keyword">auto</span> frac = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{amount} / amountBalance;</div>
<div class="line"><a id="l00885" name="l00885"></a><span class="lineno"> 885</span> <span class="keyword">auto</span> amount2Withdraw =</div>
<div class="line"><a id="l00886" name="l00886"></a><span class="lineno"> 886</span> <a class="code hl_function" href="namespaceripple.html#ae72b56b6709fd192e009123c40d47af6">getRoundedAsset</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), amount2Balance, frac, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00887" name="l00887"></a><span class="lineno"> 887</span> <span class="keyword">auto</span> tokensAdj =</div>
<div class="line"><a id="l00888" name="l00888"></a><span class="lineno"> 888</span> <a class="code hl_function" href="namespaceripple.html#a690142eb812877fb21cc817912b4488e">getRoundedLPTokens</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), lptAMMBalance, frac, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00889" name="l00889"></a><span class="lineno"> 889</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixAMMv1_3) &amp;&amp; tokensAdj == beast::zero)</div>
<div class="line"><a id="l00890" name="l00890"></a><span class="lineno"> 890</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cae04fb0979694245c81c59f9cb35181e9">tecAMM_INVALID_TOKENS</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l00891" name="l00891"></a><span class="lineno"> 891</span> <span class="comment">// factor in the adjusted tokens</span></div>
<div class="line"><a id="l00892" name="l00892"></a><span class="lineno"> 892</span> frac = <a class="code hl_function" href="namespaceripple.html#aefc2d6a8a1a2e3a721848b3ccb011fcd">adjustFracByTokens</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), lptAMMBalance, tokensAdj, frac);</div>
<div class="line"><a id="l00893" name="l00893"></a><span class="lineno"> 893</span> amount2Withdraw =</div>
<div class="line"><a id="l00894" name="l00894"></a><span class="lineno"> 894</span> <a class="code hl_function" href="namespaceripple.html#ae72b56b6709fd192e009123c40d47af6">getRoundedAsset</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), amount2Balance, frac, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00895" name="l00895"></a><span class="lineno"> 895</span> <span class="keywordflow">if</span> (amount2Withdraw &lt;= amount2)</div>
<div class="line"><a id="l00896" name="l00896"></a><span class="lineno"> 896</span> {</div>
<div class="line"><a id="l00897" name="l00897"></a><span class="lineno"> 897</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00898" name="l00898"></a><span class="lineno"> 898</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00899" name="l00899"></a><span class="lineno"> 899</span> ammSle,</div>
<div class="line"><a id="l00900" name="l00900"></a><span class="lineno"> 900</span> ammAccount,</div>
<div class="line"><a id="l00901" name="l00901"></a><span class="lineno"> 901</span> amountBalance,</div>
<div class="line"><a id="l00902" name="l00902"></a><span class="lineno"> 902</span> amount,</div>
<div class="line"><a id="l00903" name="l00903"></a><span class="lineno"> 903</span> amount2Withdraw,</div>
<div class="line"><a id="l00904" name="l00904"></a><span class="lineno"> 904</span> lptAMMBalance,</div>
<div class="line"><a id="l00905" name="l00905"></a><span class="lineno"> 905</span> tokensAdj,</div>
<div class="line"><a id="l00906" name="l00906"></a><span class="lineno"> 906</span> tfee);</div>
<div class="line"><a id="l00907" name="l00907"></a><span class="lineno"> 907</span> }</div>
<div class="line"><a id="l00908" name="l00908"></a><span class="lineno"> 908</span> </div>
<div class="line"><a id="l00909" name="l00909"></a><span class="lineno"> 909</span> frac = <a class="code hl_class" href="classripple_1_1Number.html">Number</a>{amount2} / amount2Balance;</div>
<div class="line"><a id="l00910" name="l00910"></a><span class="lineno"> 910</span> <span class="keyword">auto</span> amountWithdraw =</div>
<div class="line"><a id="l00911" name="l00911"></a><span class="lineno"> 911</span> <a class="code hl_function" href="namespaceripple.html#ae72b56b6709fd192e009123c40d47af6">getRoundedAsset</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), amountBalance, frac, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00912" name="l00912"></a><span class="lineno"> 912</span> tokensAdj =</div>
<div class="line"><a id="l00913" name="l00913"></a><span class="lineno"> 913</span> <a class="code hl_function" href="namespaceripple.html#a690142eb812877fb21cc817912b4488e">getRoundedLPTokens</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), lptAMMBalance, frac, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00914" name="l00914"></a><span class="lineno"> 914</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixAMMv1_3) &amp;&amp; tokensAdj == beast::zero)</div>
<div class="line"><a id="l00915" name="l00915"></a><span class="lineno"> 915</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cae04fb0979694245c81c59f9cb35181e9">tecAMM_INVALID_TOKENS</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}}; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00916" name="l00916"></a><span class="lineno"> 916</span> <span class="comment">// factor in the adjusted tokens</span></div>
<div class="line"><a id="l00917" name="l00917"></a><span class="lineno"> 917</span> frac = <a class="code hl_function" href="namespaceripple.html#aefc2d6a8a1a2e3a721848b3ccb011fcd">adjustFracByTokens</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), lptAMMBalance, tokensAdj, frac);</div>
<div class="line"><a id="l00918" name="l00918"></a><span class="lineno"> 918</span> amountWithdraw =</div>
<div class="line"><a id="l00919" name="l00919"></a><span class="lineno"> 919</span> <a class="code hl_function" href="namespaceripple.html#ae72b56b6709fd192e009123c40d47af6">getRoundedAsset</a>(<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), amountBalance, frac, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l00920" name="l00920"></a><span class="lineno"> 920</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixAMMv1_3))</div>
<div class="line"><a id="l00921" name="l00921"></a><span class="lineno"> 921</span> {</div>
<div class="line"><a id="l00922" name="l00922"></a><span class="lineno"> 922</span> <span class="comment">// LCOV_EXCL_START</span></div>
<div class="line"><a id="l00923" name="l00923"></a><span class="lineno"> 923</span> XRPL_ASSERT(</div>
<div class="line"><a id="l00924" name="l00924"></a><span class="lineno"> 924</span> amountWithdraw &lt;= amount,</div>
<div class="line"><a id="l00925" name="l00925"></a><span class="lineno"> 925</span> <span class="stringliteral">&quot;ripple::AMMWithdraw::equalWithdrawLimit : maximum amountWithdraw&quot;</span>);</div>
<div class="line"><a id="l00926" name="l00926"></a><span class="lineno"> 926</span> <span class="comment">// LCOV_EXCL_STOP</span></div>
<div class="line"><a id="l00927" name="l00927"></a><span class="lineno"> 927</span> }</div>
<div class="line"><a id="l00928" name="l00928"></a><span class="lineno"> 928</span> <span class="keywordflow">else</span> <span class="keywordflow">if</span> (amountWithdraw &gt; amount)</div>
<div class="line"><a id="l00929" name="l00929"></a><span class="lineno"> 929</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}}; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00930" name="l00930"></a><span class="lineno"> 930</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00931" name="l00931"></a><span class="lineno"> 931</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00932" name="l00932"></a><span class="lineno"> 932</span> ammSle,</div>
<div class="line"><a id="l00933" name="l00933"></a><span class="lineno"> 933</span> ammAccount,</div>
<div class="line"><a id="l00934" name="l00934"></a><span class="lineno"> 934</span> amountBalance,</div>
<div class="line"><a id="l00935" name="l00935"></a><span class="lineno"> 935</span> amountWithdraw,</div>
<div class="line"><a id="l00936" name="l00936"></a><span class="lineno"> 936</span> amount2,</div>
<div class="line"><a id="l00937" name="l00937"></a><span class="lineno"> 937</span> lptAMMBalance,</div>
<div class="line"><a id="l00938" name="l00938"></a><span class="lineno"> 938</span> tokensAdj,</div>
<div class="line"><a id="l00939" name="l00939"></a><span class="lineno"> 939</span> tfee);</div>
<div class="line"><a id="l00940" name="l00940"></a><span class="lineno"> 940</span>}</div>
<div class="line"><a id="l00941" name="l00941"></a><span class="lineno"> 941</span> </div>
<div class="line"><a id="l00947" name="l00947"></a><span class="lineno"> 947</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l00948" name="l00948"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a6f66fea4d10c565cbc522980f248eee2"> 948</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a6f66fea4d10c565cbc522980f248eee2">AMMWithdraw::singleWithdraw</a>(</div>
<div class="line"><a id="l00949" name="l00949"></a><span class="lineno"> 949</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00950" name="l00950"></a><span class="lineno"> 950</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l00951" name="l00951"></a><span class="lineno"> 951</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l00952" name="l00952"></a><span class="lineno"> 952</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l00953" name="l00953"></a><span class="lineno"> 953</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l00954" name="l00954"></a><span class="lineno"> 954</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount,</div>
<div class="line"><a id="l00955" name="l00955"></a><span class="lineno"> 955</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l00956" name="l00956"></a><span class="lineno"> 956</span>{</div>
<div class="line"><a id="l00957" name="l00957"></a><span class="lineno"> 957</span> <span class="keyword">auto</span> <span class="keyword">const</span> tokens = <a class="code hl_function" href="namespaceripple.html#a8e4b418d6da8b9f8a72bd4bdb3cf84e1">adjustLPTokensIn</a>(</div>
<div class="line"><a id="l00958" name="l00958"></a><span class="lineno"> 958</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(),</div>
<div class="line"><a id="l00959" name="l00959"></a><span class="lineno"> 959</span> lptAMMBalance,</div>
<div class="line"><a id="l00960" name="l00960"></a><span class="lineno"> 960</span> <a class="code hl_function" href="namespaceripple.html#ac6b80065bed621a7322e3cc6a4f3833f">lpTokensIn</a>(amountBalance, amount, lptAMMBalance, tfee),</div>
<div class="line"><a id="l00961" name="l00961"></a><span class="lineno"> 961</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b">isWithdrawAll</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>));</div>
<div class="line"><a id="l00962" name="l00962"></a><span class="lineno"> 962</span> <span class="keywordflow">if</span> (tokens == beast::zero)</div>
<div class="line"><a id="l00963" name="l00963"></a><span class="lineno"> 963</span> {</div>
<div class="line"><a id="l00964" name="l00964"></a><span class="lineno"> 964</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixAMMv1_3))</div>
<div class="line"><a id="l00965" name="l00965"></a><span class="lineno"> 965</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}}; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00966" name="l00966"></a><span class="lineno"> 966</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l00967" name="l00967"></a><span class="lineno"> 967</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cae04fb0979694245c81c59f9cb35181e9">tecAMM_INVALID_TOKENS</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l00968" name="l00968"></a><span class="lineno"> 968</span> }</div>
<div class="line"><a id="l00969" name="l00969"></a><span class="lineno"> 969</span> <span class="comment">// factor in the adjusted tokens</span></div>
<div class="line"><a id="l00970" name="l00970"></a><span class="lineno"> 970</span> <span class="keyword">auto</span> <span class="keyword">const</span> [tokensAdj, amountWithdrawAdj] = <a class="code hl_function" href="namespaceripple.html#a44a6e2e9f8bd45de4296958e17a781a4">adjustAssetOutByTokens</a>(</div>
<div class="line"><a id="l00971" name="l00971"></a><span class="lineno"> 971</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), amountBalance, amount, lptAMMBalance, tokens, tfee);</div>
<div class="line"><a id="l00972" name="l00972"></a><span class="lineno"> 972</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixAMMv1_3) &amp;&amp; tokensAdj == beast::zero)</div>
<div class="line"><a id="l00973" name="l00973"></a><span class="lineno"> 973</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cae04fb0979694245c81c59f9cb35181e9">tecAMM_INVALID_TOKENS</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}}; <span class="comment">// LCOV_EXCL_LINE</span></div>
<div class="line"><a id="l00974" name="l00974"></a><span class="lineno"> 974</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l00975" name="l00975"></a><span class="lineno"> 975</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l00976" name="l00976"></a><span class="lineno"> 976</span> ammSle,</div>
<div class="line"><a id="l00977" name="l00977"></a><span class="lineno"> 977</span> ammAccount,</div>
<div class="line"><a id="l00978" name="l00978"></a><span class="lineno"> 978</span> amountBalance,</div>
<div class="line"><a id="l00979" name="l00979"></a><span class="lineno"> 979</span> amountWithdrawAdj,</div>
<div class="line"><a id="l00980" name="l00980"></a><span class="lineno"> 980</span> std::nullopt,</div>
<div class="line"><a id="l00981" name="l00981"></a><span class="lineno"> 981</span> lptAMMBalance,</div>
<div class="line"><a id="l00982" name="l00982"></a><span class="lineno"> 982</span> tokensAdj,</div>
<div class="line"><a id="l00983" name="l00983"></a><span class="lineno"> 983</span> tfee);</div>
<div class="line"><a id="l00984" name="l00984"></a><span class="lineno"> 984</span>}</div>
<div class="line"><a id="l00985" name="l00985"></a><span class="lineno"> 985</span> </div>
<div class="line"><a id="l00996" name="l00996"></a><span class="lineno"> 996</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l00997" name="l00997"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#af550daae2d35615ebb72a32cdc09c158"> 997</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#af550daae2d35615ebb72a32cdc09c158">AMMWithdraw::singleWithdrawTokens</a>(</div>
<div class="line"><a id="l00998" name="l00998"></a><span class="lineno"> 998</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l00999" name="l00999"></a><span class="lineno"> 999</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l01000" name="l01000"></a><span class="lineno"> 1000</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l01001" name="l01001"></a><span class="lineno"> 1001</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l01002" name="l01002"></a><span class="lineno"> 1002</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l01003" name="l01003"></a><span class="lineno"> 1003</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount,</div>
<div class="line"><a id="l01004" name="l01004"></a><span class="lineno"> 1004</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lpTokensWithdraw,</div>
<div class="line"><a id="l01005" name="l01005"></a><span class="lineno"> 1005</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l01006" name="l01006"></a><span class="lineno"> 1006</span>{</div>
<div class="line"><a id="l01007" name="l01007"></a><span class="lineno"> 1007</span> <span class="keyword">auto</span> <span class="keyword">const</span> tokensAdj = <a class="code hl_function" href="namespaceripple.html#a8e4b418d6da8b9f8a72bd4bdb3cf84e1">adjustLPTokensIn</a>(</div>
<div class="line"><a id="l01008" name="l01008"></a><span class="lineno"> 1008</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), lptAMMBalance, lpTokensWithdraw, <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b">isWithdrawAll</a>(<a class="code hl_variable" href="classripple_1_1Transactor.html#aef4ef0a89b5595b2a688b89e4ecef833">ctx_</a>.<a class="code hl_variable" href="classripple_1_1ApplyContext.html#a8c8757b3b1f88baef47b31ed4e9682d0">tx</a>));</div>
<div class="line"><a id="l01009" name="l01009"></a><span class="lineno"> 1009</span> <span class="keywordflow">if</span> (<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixAMMv1_3) &amp;&amp; tokensAdj == beast::zero)</div>
<div class="line"><a id="l01010" name="l01010"></a><span class="lineno"> 1010</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cae04fb0979694245c81c59f9cb35181e9">tecAMM_INVALID_TOKENS</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l01011" name="l01011"></a><span class="lineno"> 1011</span> <span class="comment">// the adjusted tokens are factored in</span></div>
<div class="line"><a id="l01012" name="l01012"></a><span class="lineno"> 1012</span> <span class="keyword">auto</span> <span class="keyword">const</span> amountWithdraw =</div>
<div class="line"><a id="l01013" name="l01013"></a><span class="lineno"> 1013</span> <a class="code hl_function" href="namespaceripple.html#a9d783bf776923f332c06e9d85a3fd4db">ammAssetOut</a>(amountBalance, lptAMMBalance, tokensAdj, tfee);</div>
<div class="line"><a id="l01014" name="l01014"></a><span class="lineno"> 1014</span> <span class="keywordflow">if</span> (amount == beast::zero || amountWithdraw &gt;= amount)</div>
<div class="line"><a id="l01015" name="l01015"></a><span class="lineno"> 1015</span> {</div>
<div class="line"><a id="l01016" name="l01016"></a><span class="lineno"> 1016</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l01017" name="l01017"></a><span class="lineno"> 1017</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l01018" name="l01018"></a><span class="lineno"> 1018</span> ammSle,</div>
<div class="line"><a id="l01019" name="l01019"></a><span class="lineno"> 1019</span> ammAccount,</div>
<div class="line"><a id="l01020" name="l01020"></a><span class="lineno"> 1020</span> amountBalance,</div>
<div class="line"><a id="l01021" name="l01021"></a><span class="lineno"> 1021</span> amountWithdraw,</div>
<div class="line"><a id="l01022" name="l01022"></a><span class="lineno"> 1022</span> std::nullopt,</div>
<div class="line"><a id="l01023" name="l01023"></a><span class="lineno"> 1023</span> lptAMMBalance,</div>
<div class="line"><a id="l01024" name="l01024"></a><span class="lineno"> 1024</span> tokensAdj,</div>
<div class="line"><a id="l01025" name="l01025"></a><span class="lineno"> 1025</span> tfee);</div>
<div class="line"><a id="l01026" name="l01026"></a><span class="lineno"> 1026</span> }</div>
<div class="line"><a id="l01027" name="l01027"></a><span class="lineno"> 1027</span> </div>
<div class="line"><a id="l01028" name="l01028"></a><span class="lineno"> 1028</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l01029" name="l01029"></a><span class="lineno"> 1029</span>}</div>
<div class="line"><a id="l01030" name="l01030"></a><span class="lineno"> 1030</span> </div>
<div class="line"><a id="l01050" name="l01050"></a><span class="lineno"> 1050</span><a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/utility/pair.html">std::pair&lt;TER, STAmount&gt;</a></div>
<div class="line"><a id="l01051" name="l01051"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a4318b71ceedb46714e2d93a6db8e93c9"> 1051</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a4318b71ceedb46714e2d93a6db8e93c9">AMMWithdraw::singleWithdrawEPrice</a>(</div>
<div class="line"><a id="l01052" name="l01052"></a><span class="lineno"> 1052</span> <a class="code hl_class" href="classripple_1_1Sandbox.html">Sandbox</a>&amp; view,</div>
<div class="line"><a id="l01053" name="l01053"></a><span class="lineno"> 1053</span> <a class="code hl_class" href="classripple_1_1STLedgerEntry.html">SLE</a> <span class="keyword">const</span>&amp; ammSle,</div>
<div class="line"><a id="l01054" name="l01054"></a><span class="lineno"> 1054</span> <a class="code hl_class" href="classripple_1_1base__uint.html">AccountID</a> <span class="keyword">const</span>&amp; ammAccount,</div>
<div class="line"><a id="l01055" name="l01055"></a><span class="lineno"> 1055</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amountBalance,</div>
<div class="line"><a id="l01056" name="l01056"></a><span class="lineno"> 1056</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; lptAMMBalance,</div>
<div class="line"><a id="l01057" name="l01057"></a><span class="lineno"> 1057</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; amount,</div>
<div class="line"><a id="l01058" name="l01058"></a><span class="lineno"> 1058</span> <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a> <span class="keyword">const</span>&amp; ePrice,</div>
<div class="line"><a id="l01059" name="l01059"></a><span class="lineno"> 1059</span> <a class="code hl_classRef" href="http://en.cppreference.com/w/cpp/types/integer.html">std::uint16_t</a> tfee)</div>
<div class="line"><a id="l01060" name="l01060"></a><span class="lineno"> 1060</span>{</div>
<div class="line"><a id="l01061" name="l01061"></a><span class="lineno"> 1061</span> <span class="comment">// LPTokens is asset in =&gt; E = t / a and formula (8) is:</span></div>
<div class="line"><a id="l01062" name="l01062"></a><span class="lineno"> 1062</span> <span class="comment">// a = A*(t1**2 + t1*(f - 2))/(t1*f - 1)</span></div>
<div class="line"><a id="l01063" name="l01063"></a><span class="lineno"> 1063</span> <span class="comment">// substitute a as t/E =&gt;</span></div>
<div class="line"><a id="l01064" name="l01064"></a><span class="lineno"> 1064</span> <span class="comment">// t/E = A*(t1**2 + t1*(f - 2))/(t1*f - 1), t1=t/T =&gt; t = t1*T</span></div>
<div class="line"><a id="l01065" name="l01065"></a><span class="lineno"> 1065</span> <span class="comment">// t1*T/E = A*((t/T)**2 + t*(f - 2)/T)/(t*f/T - 1) =&gt;</span></div>
<div class="line"><a id="l01066" name="l01066"></a><span class="lineno"> 1066</span> <span class="comment">// T/E = A*(t1 + f-2)/(t1*f - 1) =&gt;</span></div>
<div class="line"><a id="l01067" name="l01067"></a><span class="lineno"> 1067</span> <span class="comment">// T*(t1*f - 1) = A*E*(t1 + f - 2) =&gt;</span></div>
<div class="line"><a id="l01068" name="l01068"></a><span class="lineno"> 1068</span> <span class="comment">// t1*T*f - T = t1*A*E + A*E*(f - 2) =&gt;</span></div>
<div class="line"><a id="l01069" name="l01069"></a><span class="lineno"> 1069</span> <span class="comment">// t1*(T*f - A*E) = T + A*E*(f - 2) =&gt;</span></div>
<div class="line"><a id="l01070" name="l01070"></a><span class="lineno"> 1070</span> <span class="comment">// t = T*(T + A*E*(f - 2))/(T*f - A*E)</span></div>
<div class="line"><a id="l01071" name="l01071"></a><span class="lineno"> 1071</span> <a class="code hl_class" href="classripple_1_1Number.html">Number</a> <span class="keyword">const</span> ae = amountBalance * ePrice;</div>
<div class="line"><a id="l01072" name="l01072"></a><span class="lineno"> 1072</span> <span class="keyword">auto</span> <span class="keyword">const</span> f = <a class="code hl_function" href="namespaceripple.html#aa8871e2f35cee24497183274c0bab5fd">getFee</a>(tfee);</div>
<div class="line"><a id="l01073" name="l01073"></a><span class="lineno"> 1073</span> <span class="keyword">auto</span> tokNoRoundCb = [&amp;] {</div>
<div class="line"><a id="l01074" name="l01074"></a><span class="lineno"> 1074</span> <span class="keywordflow">return</span> lptAMMBalance * (lptAMMBalance + ae * (f - 2)) /</div>
<div class="line"><a id="l01075" name="l01075"></a><span class="lineno"> 1075</span> (lptAMMBalance * f - ae);</div>
<div class="line"><a id="l01076" name="l01076"></a><span class="lineno"> 1076</span> };</div>
<div class="line"><a id="l01077" name="l01077"></a><span class="lineno"> 1077</span> <span class="keyword">auto</span> tokProdCb = [&amp;] {</div>
<div class="line"><a id="l01078" name="l01078"></a><span class="lineno"> 1078</span> <span class="keywordflow">return</span> (lptAMMBalance + ae * (f - 2)) / (lptAMMBalance * f - ae);</div>
<div class="line"><a id="l01079" name="l01079"></a><span class="lineno"> 1079</span> };</div>
<div class="line"><a id="l01080" name="l01080"></a><span class="lineno"> 1080</span> <span class="keyword">auto</span> <span class="keyword">const</span> tokensAdj = <a class="code hl_function" href="namespaceripple.html#a690142eb812877fb21cc817912b4488e">getRoundedLPTokens</a>(</div>
<div class="line"><a id="l01081" name="l01081"></a><span class="lineno"> 1081</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), tokNoRoundCb, lptAMMBalance, tokProdCb, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l01082" name="l01082"></a><span class="lineno"> 1082</span> <span class="keywordflow">if</span> (tokensAdj &lt;= beast::zero)</div>
<div class="line"><a id="l01083" name="l01083"></a><span class="lineno"> 1083</span> {</div>
<div class="line"><a id="l01084" name="l01084"></a><span class="lineno"> 1084</span> <span class="keywordflow">if</span> (!<a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>().<a class="code hl_function" href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">enabled</a>(fixAMMv1_3))</div>
<div class="line"><a id="l01085" name="l01085"></a><span class="lineno"> 1085</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l01086" name="l01086"></a><span class="lineno"> 1086</span> <span class="keywordflow">else</span></div>
<div class="line"><a id="l01087" name="l01087"></a><span class="lineno"> 1087</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cae04fb0979694245c81c59f9cb35181e9">tecAMM_INVALID_TOKENS</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l01088" name="l01088"></a><span class="lineno"> 1088</span> }</div>
<div class="line"><a id="l01089" name="l01089"></a><span class="lineno"> 1089</span> <span class="keyword">auto</span> amtNoRoundCb = [&amp;] { <span class="keywordflow">return</span> tokensAdj / ePrice; };</div>
<div class="line"><a id="l01090" name="l01090"></a><span class="lineno"> 1090</span> <span class="keyword">auto</span> amtProdCb = [&amp;] { <span class="keywordflow">return</span> tokensAdj / ePrice; };</div>
<div class="line"><a id="l01091" name="l01091"></a><span class="lineno"> 1091</span> <span class="comment">// the adjusted tokens are factored in</span></div>
<div class="line"><a id="l01092" name="l01092"></a><span class="lineno"> 1092</span> <span class="keyword">auto</span> <span class="keyword">const</span> amountWithdraw = <a class="code hl_function" href="namespaceripple.html#ae72b56b6709fd192e009123c40d47af6">getRoundedAsset</a>(</div>
<div class="line"><a id="l01093" name="l01093"></a><span class="lineno"> 1093</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>.<a class="code hl_function" href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">rules</a>(), amtNoRoundCb, amount, amtProdCb, <a class="code hl_enumvalue" href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">IsDeposit::No</a>);</div>
<div class="line"><a id="l01094" name="l01094"></a><span class="lineno"> 1094</span> <span class="keywordflow">if</span> (amount == beast::zero || amountWithdraw &gt;= amount)</div>
<div class="line"><a id="l01095" name="l01095"></a><span class="lineno"> 1095</span> {</div>
<div class="line"><a id="l01096" name="l01096"></a><span class="lineno"> 1096</span> <span class="keywordflow">return</span> <a class="code hl_function" href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">withdraw</a>(</div>
<div class="line"><a id="l01097" name="l01097"></a><span class="lineno"> 1097</span> <a class="code hl_function" href="classripple_1_1Transactor.html#a9acc4edc9b8f2a11a27fbcf5e93e2fe2">view</a>,</div>
<div class="line"><a id="l01098" name="l01098"></a><span class="lineno"> 1098</span> ammSle,</div>
<div class="line"><a id="l01099" name="l01099"></a><span class="lineno"> 1099</span> ammAccount,</div>
<div class="line"><a id="l01100" name="l01100"></a><span class="lineno"> 1100</span> amountBalance,</div>
<div class="line"><a id="l01101" name="l01101"></a><span class="lineno"> 1101</span> amountWithdraw,</div>
<div class="line"><a id="l01102" name="l01102"></a><span class="lineno"> 1102</span> std::nullopt,</div>
<div class="line"><a id="l01103" name="l01103"></a><span class="lineno"> 1103</span> lptAMMBalance,</div>
<div class="line"><a id="l01104" name="l01104"></a><span class="lineno"> 1104</span> tokensAdj,</div>
<div class="line"><a id="l01105" name="l01105"></a><span class="lineno"> 1105</span> tfee);</div>
<div class="line"><a id="l01106" name="l01106"></a><span class="lineno"> 1106</span> }</div>
<div class="line"><a id="l01107" name="l01107"></a><span class="lineno"> 1107</span> </div>
<div class="line"><a id="l01108" name="l01108"></a><span class="lineno"> 1108</span> <span class="keywordflow">return</span> {<a class="code hl_enumvalue" href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cac35fc8d7149d3ed399143b88c48409f6">tecAMM_FAILED</a>, <a class="code hl_class" href="classripple_1_1STAmount.html">STAmount</a>{}};</div>
<div class="line"><a id="l01109" name="l01109"></a><span class="lineno"> 1109</span>}</div>
<div class="line"><a id="l01110" name="l01110"></a><span class="lineno"> 1110</span> </div>
<div class="line"><a id="l01111" name="l01111"></a><span class="lineno"> 1111</span><a class="code hl_enumeration" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63">WithdrawAll</a></div>
<div class="line"><a id="l01112" name="l01112"></a><span class="lineno"><a class="line" href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b"> 1112</a></span><a class="code hl_function" href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b">AMMWithdraw::isWithdrawAll</a>(<a class="code hl_class" href="classripple_1_1STTx.html">STTx</a> <span class="keyword">const</span>&amp; tx)</div>
<div class="line"><a id="l01113" name="l01113"></a><span class="lineno"> 1113</span>{</div>
<div class="line"><a id="l01114" name="l01114"></a><span class="lineno"> 1114</span> <span class="keywordflow">if</span> (tx[sfFlags] &amp; (<a class="code hl_variable" href="namespaceripple.html#a8383eb169324b23c0b4b49d6c2d2c877">tfWithdrawAll</a> | <a class="code hl_variable" href="namespaceripple.html#a0cebcc733182bb6794d2d4067a29fb2a">tfOneAssetWithdrawAll</a>))</div>
<div class="line"><a id="l01115" name="l01115"></a><span class="lineno"> 1115</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63a93cba07454f06a4a960172bbd6e2a435">WithdrawAll::Yes</a>;</div>
<div class="line"><a id="l01116" name="l01116"></a><span class="lineno"> 1116</span> <span class="keywordflow">return</span> <a class="code hl_enumvalue" href="namespaceripple.html#a0ef1f7396e14a26a1d23238d68149a63abafd7322c6e97d25b6299b5d6fe8920b">WithdrawAll::No</a>;</div>
<div class="line"><a id="l01117" name="l01117"></a><span class="lineno"> 1117</span>}</div>
<div class="line"><a id="l01118" name="l01118"></a><span class="lineno"> 1118</span>} <span class="comment">// namespace ripple</span></div>
<div class="ttc" id="aclassbeast_1_1Journal_html"><div class="ttname"><a href="classbeast_1_1Journal.html">beast::Journal</a></div><div class="ttdoc">A generic endpoint for log messages.</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00059">Journal.h:60</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a49b0713e65bb8e2c51b76fbf16252afe"><div class="ttname"><a href="classbeast_1_1Journal.html#a49b0713e65bb8e2c51b76fbf16252afe">beast::Journal::error</a></div><div class="ttdeci">Stream error() const</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00346">Journal.h:346</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_a556228cb60bcf405c225d3f64b7b01ae"><div class="ttname"><a href="classbeast_1_1Journal.html#a556228cb60bcf405c225d3f64b7b01ae">beast::Journal::debug</a></div><div class="ttdeci">Stream debug() const</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00328">Journal.h:328</a></div></div>
<div class="ttc" id="aclassbeast_1_1Journal_html_abbe082bd27ca0f1d1365af2824e4f85b"><div class="ttname"><a href="classbeast_1_1Journal.html#abbe082bd27ca0f1d1365af2824e4f85b">beast::Journal::trace</a></div><div class="ttdeci">Stream trace() const</div><div class="ttdoc">Severity stream access functions.</div><div class="ttdef"><b>Definition:</b> <a href="Journal_8h_source.html#l00322">Journal.h:322</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a0b14d4c7e7868ef1bd417b63cd42063b"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b">ripple::AMMWithdraw::isWithdrawAll</a></div><div class="ttdeci">WithdrawAll isWithdrawAll(STTx const &amp;tx)</div><div class="ttdoc">Check from the flags if it's withdraw all.</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l01033">AMMWithdraw.cpp:1033</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a4318b71ceedb46714e2d93a6db8e93c9"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a4318b71ceedb46714e2d93a6db8e93c9">ripple::AMMWithdraw::singleWithdrawEPrice</a></div><div class="ttdeci">std::pair&lt; TER, STAmount &gt; singleWithdrawEPrice(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;lptAMMBalance, STAmount const &amp;amount, STAmount const &amp;ePrice, std::uint16_t tfee)</div><div class="ttdoc">Withdraw single asset (Asset1Out, EPrice) with two constraints.</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00988">AMMWithdraw.cpp:988</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a5236e8a4e14c231694b6952abfc3b423"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a5236e8a4e14c231694b6952abfc3b423">ripple::AMMWithdraw::equalWithdrawLimit</a></div><div class="ttdeci">std::pair&lt; TER, STAmount &gt; equalWithdrawLimit(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;amount2Balance, STAmount const &amp;lptAMMBalance, STAmount const &amp;amount, STAmount const &amp;amount2, std::uint16_t tfee)</div><div class="ttdoc">Withdraw both assets (Asset1Out, Asset2Out) with the constraints on the maximum amount of each asset ...</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00853">AMMWithdraw.cpp:853</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a64842cf86a14dfe5dcc9019eb55511d0"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0">ripple::AMMWithdraw::equalWithdrawTokens</a></div><div class="ttdeci">static std::tuple&lt; TER, STAmount, STAmount, std::optional&lt; STAmount &gt; &gt; equalWithdrawTokens(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const account, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;amount2Balance, STAmount const &amp;lptAMMBalance, STAmount const &amp;lpTokens, STAmount const &amp;lpTokensWithdraw, std::uint16_t tfee, FreezeHandling freezeHanding, WithdrawAll withdrawAll, XRPAmount const &amp;priorBalance, beast::Journal const &amp;journal)</div><div class="ttdoc">Equal-asset withdrawal (LPTokens) of some AMM instance pools shares represented by the number of LPTo...</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00751">AMMWithdraw.cpp:751</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a0b14d4c7e7868ef1bd417b63cd42063b"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a0b14d4c7e7868ef1bd417b63cd42063b">ripple::AMMWithdraw::isWithdrawAll</a></div><div class="ttdeci">static WithdrawAll isWithdrawAll(STTx const &amp;tx)</div><div class="ttdoc">Check from the flags if it's withdraw all.</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l01112">AMMWithdraw.cpp:1112</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a4318b71ceedb46714e2d93a6db8e93c9"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a4318b71ceedb46714e2d93a6db8e93c9">ripple::AMMWithdraw::singleWithdrawEPrice</a></div><div class="ttdeci">std::pair&lt; TER, STAmount &gt; singleWithdrawEPrice(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;lptAMMBalance, STAmount const &amp;amount, STAmount const &amp;ePrice, std::uint16_t tfee)</div><div class="ttdoc">Withdraw single asset (Asset1Out, EPrice) with two constraints.</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l01051">AMMWithdraw.cpp:1051</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a5236e8a4e14c231694b6952abfc3b423"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a5236e8a4e14c231694b6952abfc3b423">ripple::AMMWithdraw::equalWithdrawLimit</a></div><div class="ttdeci">std::pair&lt; TER, STAmount &gt; equalWithdrawLimit(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;amount2Balance, STAmount const &amp;lptAMMBalance, STAmount const &amp;amount, STAmount const &amp;amount2, std::uint16_t tfee)</div><div class="ttdoc">Withdraw both assets (Asset1Out, Asset2Out) with the constraints on the maximum amount of each asset ...</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00873">AMMWithdraw.cpp:873</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a64842cf86a14dfe5dcc9019eb55511d0"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a64842cf86a14dfe5dcc9019eb55511d0">ripple::AMMWithdraw::equalWithdrawTokens</a></div><div class="ttdeci">static std::tuple&lt; TER, STAmount, STAmount, std::optional&lt; STAmount &gt; &gt; equalWithdrawTokens(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const account, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;amount2Balance, STAmount const &amp;lptAMMBalance, STAmount const &amp;lpTokens, STAmount const &amp;lpTokensWithdraw, std::uint16_t tfee, FreezeHandling freezeHanding, WithdrawAll withdrawAll, XRPAmount const &amp;priorBalance, beast::Journal const &amp;journal)</div><div class="ttdoc">Equal-asset withdrawal (LPTokens) of some AMM instance pools shares represented by the number of LPTo...</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00765">AMMWithdraw.cpp:765</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a690f2bdea8fffee52a5d12db0733b28b"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a690f2bdea8fffee52a5d12db0733b28b">ripple::AMMWithdraw::applyGuts</a></div><div class="ttdeci">std::pair&lt; TER, bool &gt; applyGuts(Sandbox &amp;view)</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00292">AMMWithdraw.cpp:292</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a6f66fea4d10c565cbc522980f248eee2"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a6f66fea4d10c565cbc522980f248eee2">ripple::AMMWithdraw::singleWithdraw</a></div><div class="ttdeci">std::pair&lt; TER, STAmount &gt; singleWithdraw(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;lptAMMBalance, STAmount const &amp;amount, std::uint16_t tfee)</div><div class="ttdoc">Single asset withdrawal (Asset1Out) equivalent to the amount specified in Asset1Out.</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00903">AMMWithdraw.cpp:903</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_ab62952f0d0ed8f24c7a5dddcbbc5c9ae"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#ab62952f0d0ed8f24c7a5dddcbbc5c9ae">ripple::AMMWithdraw::deleteAMMAccountIfEmpty</a></div><div class="ttdeci">static std::pair&lt; TER, bool &gt; deleteAMMAccountIfEmpty(Sandbox &amp;sb, std::shared_ptr&lt; SLE &gt; const ammSle, STAmount const &amp;lpTokenBalance, Issue const &amp;issue1, Issue const &amp;issue2, beast::Journal const &amp;journal)</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00720">AMMWithdraw.cpp:720</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_a6f66fea4d10c565cbc522980f248eee2"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#a6f66fea4d10c565cbc522980f248eee2">ripple::AMMWithdraw::singleWithdraw</a></div><div class="ttdeci">std::pair&lt; TER, STAmount &gt; singleWithdraw(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;lptAMMBalance, STAmount const &amp;amount, std::uint16_t tfee)</div><div class="ttdoc">Single asset withdrawal (Asset1Out) equivalent to the amount specified in Asset1Out.</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00948">AMMWithdraw.cpp:948</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_ab62952f0d0ed8f24c7a5dddcbbc5c9ae"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#ab62952f0d0ed8f24c7a5dddcbbc5c9ae">ripple::AMMWithdraw::deleteAMMAccountIfEmpty</a></div><div class="ttdeci">static std::pair&lt; TER, bool &gt; deleteAMMAccountIfEmpty(Sandbox &amp;sb, std::shared_ptr&lt; SLE &gt; const ammSle, STAmount const &amp;lpTokenBalance, Issue const &amp;issue1, Issue const &amp;issue2, beast::Journal const &amp;journal)</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00734">AMMWithdraw.cpp:734</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_ac65c94e120bdb3957a6951fab2af6c29"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#ac65c94e120bdb3957a6951fab2af6c29">ripple::AMMWithdraw::preclaim</a></div><div class="ttdeci">static TER preclaim(PreclaimContext const &amp;ctx)</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00168">AMMWithdraw.cpp:168</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_acf1048871867fae517d6e38c09f9ffd8"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#acf1048871867fae517d6e38c09f9ffd8">ripple::AMMWithdraw::preflight</a></div><div class="ttdeci">static NotTEC preflight(PreflightContext const &amp;ctx)</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00032">AMMWithdraw.cpp:32</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_ad1c31e18b3be405513e9e68004e72f09"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#ad1c31e18b3be405513e9e68004e72f09">ripple::AMMWithdraw::withdraw</a></div><div class="ttdeci">static std::tuple&lt; TER, STAmount, STAmount, std::optional&lt; STAmount &gt; &gt; withdraw(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const &amp;ammAccount, AccountID const &amp;account, STAmount const &amp;amountBalance, STAmount const &amp;amountWithdraw, std::optional&lt; STAmount &gt; const &amp;amount2Withdraw, STAmount const &amp;lpTokensAMMBalance, STAmount const &amp;lpTokensWithdraw, std::uint16_t tfee, FreezeHandling freezeHandling, WithdrawAll withdrawAll, XRPAmount const &amp;priorBalance, beast::Journal const &amp;journal)</div><div class="ttdoc">Withdraw requested assets and token from AMM into LP account.</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00483">AMMWithdraw.cpp:483</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_ad366e7ecc17ab21d3fb406c334df6b0e"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#ad366e7ecc17ab21d3fb406c334df6b0e">ripple::AMMWithdraw::doApply</a></div><div class="ttdeci">TER doApply() override</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00437">AMMWithdraw.cpp:437</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_af550daae2d35615ebb72a32cdc09c158"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#af550daae2d35615ebb72a32cdc09c158">ripple::AMMWithdraw::singleWithdrawTokens</a></div><div class="ttdeci">std::pair&lt; TER, STAmount &gt; singleWithdrawTokens(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;lptAMMBalance, STAmount const &amp;amount, STAmount const &amp;lpTokensWithdraw, std::uint16_t tfee)</div><div class="ttdoc">Single asset withdrawal (Asset1Out, LPTokens) proportional to the share specified by tokens.</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00939">AMMWithdraw.cpp:939</a></div></div>
<div class="ttc" id="aclassripple_1_1AMMWithdraw_html_af550daae2d35615ebb72a32cdc09c158"><div class="ttname"><a href="classripple_1_1AMMWithdraw.html#af550daae2d35615ebb72a32cdc09c158">ripple::AMMWithdraw::singleWithdrawTokens</a></div><div class="ttdeci">std::pair&lt; TER, STAmount &gt; singleWithdrawTokens(Sandbox &amp;view, SLE const &amp;ammSle, AccountID const &amp;ammAccount, STAmount const &amp;amountBalance, STAmount const &amp;lptAMMBalance, STAmount const &amp;amount, STAmount const &amp;lpTokensWithdraw, std::uint16_t tfee)</div><div class="ttdoc">Single asset withdrawal (Asset1Out, LPTokens) proportional to the share specified by tokens.</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00997">AMMWithdraw.cpp:997</a></div></div>
<div class="ttc" id="aclassripple_1_1ApplyContext_html_a1e569090b00ae5425ebb48c1befe794f"><div class="ttname"><a href="classripple_1_1ApplyContext.html#a1e569090b00ae5425ebb48c1befe794f">ripple::ApplyContext::rawView</a></div><div class="ttdeci">RawView &amp; rawView()</div><div class="ttdef"><b>Definition:</b> <a href="ApplyContext_8h_source.html#l00091">ApplyContext.h:91</a></div></div>
<div class="ttc" id="aclassripple_1_1ApplyContext_html_a44c249b16b2cedb1224a96592407558d"><div class="ttname"><a href="classripple_1_1ApplyContext.html#a44c249b16b2cedb1224a96592407558d">ripple::ApplyContext::view</a></div><div class="ttdeci">ApplyView &amp; view()</div><div class="ttdef"><b>Definition:</b> <a href="ApplyContext_8h_source.html#l00078">ApplyContext.h:78</a></div></div>
<div class="ttc" id="aclassripple_1_1ApplyContext_html_a7b78c8e924babce4d14359970f55ba02"><div class="ttname"><a href="classripple_1_1ApplyContext.html#a7b78c8e924babce4d14359970f55ba02">ripple::ApplyContext::journal</a></div><div class="ttdeci">beast::Journal const journal</div><div class="ttdef"><b>Definition:</b> <a href="ApplyContext_8h_source.html#l00075">ApplyContext.h:75</a></div></div>
@@ -1080,6 +1157,7 @@ $(function() {
<div class="ttc" id="aclassripple_1_1ReadView_html_a9944284a00f671a4a9d9e00f9b28b258"><div class="ttname"><a href="classripple_1_1ReadView.html#a9944284a00f671a4a9d9e00f9b28b258">ripple::ReadView::fees</a></div><div class="ttdeci">virtual Fees const &amp; fees() const =0</div><div class="ttdoc">Returns the fees for the base ledger.</div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html_ac1d377c35a8332d069b09be8f4008dec"><div class="ttname"><a href="classripple_1_1ReadView.html#ac1d377c35a8332d069b09be8f4008dec">ripple::ReadView::exists</a></div><div class="ttdeci">virtual bool exists(Keylet const &amp;k) const =0</div><div class="ttdoc">Determine if a state item exists.</div></div>
<div class="ttc" id="aclassripple_1_1ReadView_html_aceb3d74acaae18b238022337e5f250ce"><div class="ttname"><a href="classripple_1_1ReadView.html#aceb3d74acaae18b238022337e5f250ce">ripple::ReadView::rules</a></div><div class="ttdeci">virtual Rules const &amp; rules() const =0</div><div class="ttdoc">Returns the tx processing rules.</div></div>
<div class="ttc" id="aclassripple_1_1Rules_html"><div class="ttname"><a href="classripple_1_1Rules.html">ripple::Rules</a></div><div class="ttdoc">Rules controlling protocol behavior.</div><div class="ttdef"><b>Definition:</b> <a href="Rules_8h_source.html#l00037">Rules.h:38</a></div></div>
<div class="ttc" id="aclassripple_1_1Rules_html_a1a8388a2b9588aa9446ece92a88e0dd2"><div class="ttname"><a href="classripple_1_1Rules.html#a1a8388a2b9588aa9446ece92a88e0dd2">ripple::Rules::enabled</a></div><div class="ttdeci">bool enabled(uint256 const &amp;feature) const</div><div class="ttdoc">Returns true if a feature is enabled.</div><div class="ttdef"><b>Definition:</b> <a href="Rules_8cpp_source.html#l00130">Rules.cpp:130</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html"><div class="ttname"><a href="classripple_1_1STAmount.html">ripple::STAmount</a></div><div class="ttdef"><b>Definition:</b> <a href="STAmount_8h_source.html#l00049">STAmount.h:50</a></div></div>
<div class="ttc" id="aclassripple_1_1STAmount_html_acab76380a95d902071fd26ab3425bbe5"><div class="ttname"><a href="classripple_1_1STAmount.html#acab76380a95d902071fd26ab3425bbe5">ripple::STAmount::issue</a></div><div class="ttdeci">Issue const &amp; issue() const</div><div class="ttdef"><b>Definition:</b> <a href="STAmount_8h_source.html#l00496">STAmount.h:496</a></div></div>
@@ -1126,23 +1204,25 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_a3786d0f9f6dacfad8bf3ba300acafaad"><div class="ttname"><a href="namespaceripple.html#a3786d0f9f6dacfad8bf3ba300acafaad">ripple::tfWithdrawMask</a></div><div class="ttdeci">constexpr std::uint32_t tfWithdrawMask</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00228">TxFlags.h:228</a></div></div>
<div class="ttc" id="anamespaceripple_html_a39496f811d81eeceaec4ab1fe9f877ac"><div class="ttname"><a href="namespaceripple.html#a39496f811d81eeceaec4ab1fe9f877ac">ripple::deleteAMMAccount</a></div><div class="ttdeci">TER deleteAMMAccount(Sandbox &amp;view, Issue const &amp;asset, Issue const &amp;asset2, beast::Journal j)</div><div class="ttdoc">Delete trustlines to AMM.</div><div class="ttdef"><b>Definition:</b> <a href="AMMUtils_8cpp_source.html#l00282">AMMUtils.cpp:282</a></div></div>
<div class="ttc" id="anamespaceripple_html_a3e046f4b7ab06562107485513edb7098"><div class="ttname"><a href="namespaceripple.html#a3e046f4b7ab06562107485513edb7098">ripple::requireAuth</a></div><div class="ttdeci">TER requireAuth(ReadView const &amp;view, Issue const &amp;issue, AccountID const &amp;account)</div><div class="ttdoc">Check if the account lacks required authorization.</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02288">View.cpp:2288</a></div></div>
<div class="ttc" id="anamespaceripple_html_a44a6e2e9f8bd45de4296958e17a781a4"><div class="ttname"><a href="namespaceripple.html#a44a6e2e9f8bd45de4296958e17a781a4">ripple::adjustAssetOutByTokens</a></div><div class="ttdeci">std::pair&lt; STAmount, STAmount &gt; adjustAssetOutByTokens(Rules const &amp;rules, STAmount const &amp;balance, STAmount const &amp;amount, STAmount const &amp;lptAMMBalance, STAmount const &amp;tokens, std::uint16_t tfee)</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00375">AMMHelpers.cpp:375</a></div></div>
<div class="ttc" id="anamespaceripple_html_a48d07c0de207fab49cfc61ff0de202f1"><div class="ttname"><a href="namespaceripple.html#a48d07c0de207fab49cfc61ff0de202f1">ripple::redeemIOU</a></div><div class="ttdeci">TER redeemIOU(ApplyView &amp;view, AccountID const &amp;account, STAmount const &amp;amount, Issue const &amp;issue, beast::Journal j)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l02172">View.cpp:2172</a></div></div>
<div class="ttc" id="anamespaceripple_html_a4ad5ac9da897292a28eea43d041c15a1"><div class="ttname"><a href="namespaceripple.html#a4ad5ac9da897292a28eea43d041c15a1">ripple::toSTAmount</a></div><div class="ttdeci">STAmount toSTAmount(IOUAmount const &amp;iou, Issue const &amp;iss)</div><div class="ttdef"><b>Definition:</b> <a href="AmountConversions_8h_source.html#l00032">AmountConversions.h:32</a></div></div>
<div class="ttc" id="anamespaceripple_html_a4c964d1f7629a28f9b916e2d25b39bcd"><div class="ttname"><a href="namespaceripple.html#a4c964d1f7629a28f9b916e2d25b39bcd">ripple::lpTokensOut</a></div><div class="ttdeci">STAmount lpTokensOut(STAmount const &amp;asset1Balance, STAmount const &amp;asset1Withdraw, STAmount const &amp;lptAMMBalance, std::uint16_t tfee)</div><div class="ttdoc">Calculate LP Tokens given asset's withdraw amount.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00090">AMMHelpers.cpp:90</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5401fd4c42f637dc456a79af094a960d"><div class="ttname"><a href="namespaceripple.html#a5401fd4c42f637dc456a79af094a960d">ripple::tfLimitLPToken</a></div><div class="ttdeci">constexpr std::uint32_t tfLimitLPToken</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00220">TxFlags.h:220</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5adb540ae694e45bca2ad089fff15128"><div class="ttname"><a href="namespaceripple.html#a5adb540ae694e45bca2ad089fff15128">ripple::multiply</a></div><div class="ttdeci">STAmount multiply(STAmount const &amp;amount, Rate const &amp;rate)</div><div class="ttdef"><b>Definition:</b> <a href="Rate2_8cpp_source.html#l00053">Rate2.cpp:53</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5c4fa33b0b13deab58e07744afe0f7ed"><div class="ttname"><a href="namespaceripple.html#a5c4fa33b0b13deab58e07744afe0f7ed">ripple::ammEnabled</a></div><div class="ttdeci">bool ammEnabled(Rules const &amp;)</div><div class="ttdoc">Return true if required AMM amendments are enabled.</div><div class="ttdef"><b>Definition:</b> <a href="AMMCore_8cpp_source.html#l00129">AMMCore.cpp:129</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5dfb437ade69624474bbe4125ceb791a"><div class="ttname"><a href="namespaceripple.html#a5dfb437ade69624474bbe4125ceb791a">ripple::preflight1</a></div><div class="ttdeci">NotTEC preflight1(PreflightContext const &amp;ctx)</div><div class="ttdoc">Performs early sanity checks on the account and fee fields.</div><div class="ttdef"><b>Definition:</b> <a href="Transactor_8cpp_source.html#l00091">Transactor.cpp:91</a></div></div>
<div class="ttc" id="anamespaceripple_html_a5f936a9395ee6781feff5c6a13adacf1"><div class="ttname"><a href="namespaceripple.html#a5f936a9395ee6781feff5c6a13adacf1">ripple::adjustAmountsByLPTokens</a></div><div class="ttdeci">std::tuple&lt; STAmount, std::optional&lt; STAmount &gt;, STAmount &gt; adjustAmountsByLPTokens(STAmount const &amp;amountBalance, STAmount const &amp;amount, std::optional&lt; STAmount &gt; const &amp;amount2, STAmount const &amp;lptAMMBalance, STAmount const &amp;lpTokens, std::uint16_t tfee, bool isDeposit)</div><div class="ttdoc">Calls adjustLPTokens() and adjusts deposit or withdraw amounts if the adjusted LP tokens are less tha...</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00147">AMMHelpers.cpp:147</a></div></div>
<div class="ttc" id="anamespaceripple_html_a620f1516447f54ef50ac790f5f0720a3"><div class="ttname"><a href="namespaceripple.html#a620f1516447f54ef50ac790f5f0720a3">ripple::tfOneAssetLPToken</a></div><div class="ttdeci">constexpr std::uint32_t tfOneAssetLPToken</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00219">TxFlags.h:219</a></div></div>
<div class="ttc" id="anamespaceripple_html_a62e9ba0cf1379cc7c73007cafd91b972"><div class="ttname"><a href="namespaceripple.html#a62e9ba0cf1379cc7c73007cafd91b972">ripple::isOnlyLiquidityProvider</a></div><div class="ttdeci">Expected&lt; bool, TER &gt; isOnlyLiquidityProvider(ReadView const &amp;view, Issue const &amp;ammIssue, AccountID const &amp;lpAccount)</div><div class="ttdoc">Return true if the Liquidity Provider is the only AMM provider, false otherwise.</div><div class="ttdef"><b>Definition:</b> <a href="AMMUtils_8cpp_source.html#l00386">AMMUtils.cpp:386</a></div></div>
<div class="ttc" id="anamespaceripple_html_a690142eb812877fb21cc817912b4488e"><div class="ttname"><a href="namespaceripple.html#a690142eb812877fb21cc817912b4488e">ripple::getRoundedLPTokens</a></div><div class="ttdeci">STAmount getRoundedLPTokens(Rules const &amp;rules, STAmount const &amp;balance, Number const &amp;frac, IsDeposit isDeposit)</div><div class="ttdoc">Round AMM deposit/withdrawal LPToken amount.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00311">AMMHelpers.cpp:311</a></div></div>
<div class="ttc" id="anamespaceripple_html_a6bdc23ab696afbce2568a4c9563e9ec2"><div class="ttname"><a href="namespaceripple.html#a6bdc23ab696afbce2568a4c9563e9ec2">ripple::tokensWithdraw</a></div><div class="ttdeci">static std::optional&lt; STAmount &gt; tokensWithdraw(STAmount const &amp;lpTokens, std::optional&lt; STAmount &gt; const &amp;tokensIn, std::uint32_t flags)</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00157">AMMWithdraw.cpp:157</a></div></div>
<div class="ttc" id="anamespaceripple_html_a6cb89b79bc073abda42953c323d36cda"><div class="ttname"><a href="namespaceripple.html#a6cb89b79bc073abda42953c323d36cda">ripple::isFrozen</a></div><div class="ttdeci">bool isFrozen(ReadView const &amp;view, AccountID const &amp;account, Currency const &amp;currency, AccountID const &amp;issuer)</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l00249">View.cpp:249</a></div></div>
<div class="ttc" id="anamespaceripple_html_a745b96ab219de6f62807ab5f6f484534"><div class="ttname"><a href="namespaceripple.html#a745b96ab219de6f62807ab5f6f484534">ripple::adjustLPTokens</a></div><div class="ttdeci">STAmount adjustLPTokens(STAmount const &amp;lptAMMBalance, STAmount const &amp;lpTokens, IsDeposit isDeposit)</div><div class="ttdoc">Adjust LP tokens to deposit/withdraw.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00173">AMMHelpers.cpp:173</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7ac113783ec3f596fe69ab6d1daabbac"><div class="ttname"><a href="namespaceripple.html#a7ac113783ec3f596fe69ab6d1daabbac">ripple::tfTwoAsset</a></div><div class="ttdeci">constexpr std::uint32_t tfTwoAsset</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00218">TxFlags.h:218</a></div></div>
<div class="ttc" id="anamespaceripple_html_a7c5d3108f4942ebc53a3fa4f83c2d577"><div class="ttname"><a href="namespaceripple.html#a7c5d3108f4942ebc53a3fa4f83c2d577">ripple::ammLPHolds</a></div><div class="ttdeci">STAmount ammLPHolds(ReadView const &amp;view, Currency const &amp;cur1, Currency const &amp;cur2, AccountID const &amp;ammAccount, AccountID const &amp;lpAccount, beast::Journal const j)</div><div class="ttdoc">Get the balance of LP tokens.</div><div class="ttdef"><b>Definition:</b> <a href="AMMUtils_8cpp_source.html#l00112">AMMUtils.cpp:112</a></div></div>
<div class="ttc" id="anamespaceripple_html_a812051b3eb90012879722503bc9c422a"><div class="ttname"><a href="namespaceripple.html#a812051b3eb90012879722503bc9c422a">ripple::adjustAmountsByLPTokens</a></div><div class="ttdeci">std::tuple&lt; STAmount, std::optional&lt; STAmount &gt;, STAmount &gt; adjustAmountsByLPTokens(STAmount const &amp;amountBalance, STAmount const &amp;amount, std::optional&lt; STAmount &gt; const &amp;amount2, STAmount const &amp;lptAMMBalance, STAmount const &amp;lpTokens, std::uint16_t tfee, IsDeposit isDeposit)</div><div class="ttdoc">Calls adjustLPTokens() and adjusts deposit or withdraw amounts if the adjusted LP tokens are less tha...</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00187">AMMHelpers.cpp:187</a></div></div>
<div class="ttc" id="anamespaceripple_html_a8383eb169324b23c0b4b49d6c2d2c877"><div class="ttname"><a href="namespaceripple.html#a8383eb169324b23c0b4b49d6c2d2c877">ripple::tfWithdrawAll</a></div><div class="ttdeci">constexpr std::uint32_t tfWithdrawAll</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00215">TxFlags.h:215</a></div></div>
<div class="ttc" id="anamespaceripple_html_a8b257ff89d14ac75ce240946f32d3773"><div class="ttname"><a href="namespaceripple.html#a8b257ff89d14ac75ce240946f32d3773">ripple::preflight2</a></div><div class="ttdeci">NotTEC preflight2(PreflightContext const &amp;ctx)</div><div class="ttdoc">Checks whether the signature appears valid.</div><div class="ttdef"><b>Definition:</b> <a href="Transactor_8cpp_source.html#l00160">Transactor.cpp:160</a></div></div>
<div class="ttc" id="anamespaceripple_html_a8e4b418d6da8b9f8a72bd4bdb3cf84e1"><div class="ttname"><a href="namespaceripple.html#a8e4b418d6da8b9f8a72bd4bdb3cf84e1">ripple::adjustLPTokensIn</a></div><div class="ttdeci">static STAmount adjustLPTokensIn(Rules const &amp;rules, STAmount const &amp;lptAMMBalance, STAmount const &amp;lpTokensWithdraw, WithdrawAll withdrawAll)</div><div class="ttdef"><b>Definition:</b> <a href="AMMWithdraw_8cpp_source.html#l00687">AMMWithdraw.cpp:687</a></div></div>
<div class="ttc" id="anamespaceripple_html_a9d22f4d38ac33f4258a0205f8e11d27ea93cba07454f06a4a960172bbd6e2a435"><div class="ttname"><a href="namespaceripple.html#a9d22f4d38ac33f4258a0205f8e11d27ea93cba07454f06a4a960172bbd6e2a435">ripple::WaiveTransferFee::Yes</a></div><div class="ttdeci">@ Yes</div></div>
<div class="ttc" id="anamespaceripple_html_a9d783bf776923f332c06e9d85a3fd4db"><div class="ttname"><a href="namespaceripple.html#a9d783bf776923f332c06e9d85a3fd4db">ripple::ammAssetOut</a></div><div class="ttdeci">STAmount ammAssetOut(STAmount const &amp;assetBalance, STAmount const &amp;lptAMMBalance, STAmount const &amp;lpTokens, std::uint16_t tfee)</div><div class="ttdoc">Calculate asset withdrawal by tokens.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00145">AMMHelpers.cpp:145</a></div></div>
<div class="ttc" id="anamespaceripple_html_a9e3dc59bb58c33f14b3c0d3070b94d98"><div class="ttname"><a href="namespaceripple.html#a9e3dc59bb58c33f14b3c0d3070b94d98">ripple::noIssue</a></div><div class="ttdeci">Issue const &amp; noIssue()</div><div class="ttdoc">Returns an asset specifier that represents no account and currency.</div><div class="ttdef"><b>Definition:</b> <a href="Issue_8h_source.html#l00126">Issue.h:126</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca576f5411ab4458ec9842480e7ebe7072">ripple::tecINCOMPLETE</a></div><div class="ttdeci">@ tecINCOMPLETE</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00335">TER.h:335</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38ca608da193a4a22ae1c78d76b6e843b7e6"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38ca608da193a4a22ae1c78d76b6e843b7e6">ripple::tecFROZEN</a></div><div class="ttdeci">@ tecFROZEN</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00303">TER.h:303</a></div></div>
@@ -1154,16 +1234,19 @@ $(function() {
<div class="ttc" id="anamespaceripple_html_aa298e929e02f59c2b05a30ee8805b38cae930fb228ae74317976b57b4e87a7f0d"><div class="ttname"><a href="namespaceripple.html#aa298e929e02f59c2b05a30ee8805b38cae930fb228ae74317976b57b4e87a7f0d">ripple::tecINSUFFICIENT_RESERVE</a></div><div class="ttdeci">@ tecINSUFFICIENT_RESERVE</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00307">TER.h:307</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa3f065b75d23f712be19a1a953fe5b4a"><div class="ttname"><a href="namespaceripple.html#aa3f065b75d23f712be19a1a953fe5b4a">ripple::tfLPToken</a></div><div class="ttdeci">constexpr std::uint32_t tfLPToken</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00214">TxFlags.h:214</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa8871e2f35cee24497183274c0bab5fd"><div class="ttname"><a href="namespaceripple.html#aa8871e2f35cee24497183274c0bab5fd">ripple::getFee</a></div><div class="ttdeci">Number getFee(std::uint16_t tfee)</div><div class="ttdoc">Convert to the fee from the basis points.</div><div class="ttdef"><b>Definition:</b> <a href="AMMCore_8h_source.html#l00101">AMMCore.h:101</a></div></div>
<div class="ttc" id="anamespaceripple_html_aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b"><div class="ttname"><a href="namespaceripple.html#aa9819bf6e2ef44707a0144da6c874890abafd7322c6e97d25b6299b5d6fe8920b">ripple::IsDeposit::No</a></div><div class="ttdeci">@ No</div></div>
<div class="ttc" id="anamespaceripple_html_aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151"><div class="ttname"><a href="namespaceripple.html#aabc7f150d5082c73116a1cd5962b434da28c7d8b3ed759d363503a05fcd59f151">ripple::tesSUCCESS</a></div><div class="ttdeci">@ tesSUCCESS</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00245">TER.h:244</a></div></div>
<div class="ttc" id="anamespaceripple_html_aac3db9cd7b81ce8bd1ebf45435f0909b"><div class="ttname"><a href="namespaceripple.html#aac3db9cd7b81ce8bd1ebf45435f0909b">ripple::invalidAMMAssetPair</a></div><div class="ttdeci">NotTEC invalidAMMAssetPair(Issue const &amp;issue1, Issue const &amp;issue2, std::optional&lt; std::pair&lt; Issue, Issue &gt; &gt; const &amp;pair=std::nullopt)</div><div class="ttdef"><b>Definition:</b> <a href="AMMCore_8cpp_source.html#l00080">AMMCore.cpp:80</a></div></div>
<div class="ttc" id="anamespaceripple_html_ab48d5d1c4e2695c12f705e9d85fa560d"><div class="ttname"><a href="namespaceripple.html#ab48d5d1c4e2695c12f705e9d85fa560d">ripple::isTesSuccess</a></div><div class="ttdeci">bool isTesSuccess(TER x) noexcept</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00672">TER.h:672</a></div></div>
<div class="ttc" id="anamespaceripple_html_ab656cc4e3a94b007e52a53420c2d2460"><div class="ttname"><a href="namespaceripple.html#ab656cc4e3a94b007e52a53420c2d2460">ripple::ammHolds</a></div><div class="ttdeci">Expected&lt; std::tuple&lt; STAmount, STAmount, STAmount &gt;, TER &gt; ammHolds(ReadView const &amp;view, SLE const &amp;ammSle, std::optional&lt; Issue &gt; const &amp;optIssue1, std::optional&lt; Issue &gt; const &amp;optIssue2, FreezeHandling freezeHandling, beast::Journal const j)</div><div class="ttdoc">Get AMM pool and LP token balances.</div><div class="ttdef"><b>Definition:</b> <a href="AMMUtils_8cpp_source.html#l00046">AMMUtils.cpp:46</a></div></div>
<div class="ttc" id="anamespaceripple_html_aba96948641b5ee7f466ab43080c672d8"><div class="ttname"><a href="namespaceripple.html#aba96948641b5ee7f466ab43080c672d8">ripple::tfWithdrawSubTx</a></div><div class="ttdeci">constexpr std::uint32_t tfWithdrawSubTx</div><div class="ttdef"><b>Definition:</b> <a href="TxFlags_8h_source.html#l00222">TxFlags.h:222</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac124fe6744b7fe887dec949b56b16d50"><div class="ttname"><a href="namespaceripple.html#ac124fe6744b7fe887dec949b56b16d50">ripple::to_string</a></div><div class="ttdeci">std::string to_string(base_uint&lt; Bits, Tag &gt; const &amp;a)</div><div class="ttdef"><b>Definition:</b> <a href="base__uint_8h_source.html#l00630">base_uint.h:630</a></div></div>
<div class="ttc" id="anamespaceripple_html_ac6b80065bed621a7322e3cc6a4f3833f"><div class="ttname"><a href="namespaceripple.html#ac6b80065bed621a7322e3cc6a4f3833f">ripple::lpTokensIn</a></div><div class="ttdeci">STAmount lpTokensIn(STAmount const &amp;asset1Balance, STAmount const &amp;asset1Withdraw, STAmount const &amp;lptAMMBalance, std::uint16_t tfee)</div><div class="ttdoc">Calculate LP Tokens given asset's withdraw amount.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00112">AMMHelpers.cpp:112</a></div></div>
<div class="ttc" id="anamespaceripple_html_adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178"><div class="ttname"><a href="namespaceripple.html#adebe4d783be9c979e67fdbb2bc27162fac110e4ea19a46f9ce263c5d746b34178">ripple::terNO_AMM</a></div><div class="ttdeci">@ terNO_AMM</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00227">TER.h:227</a></div></div>
<div class="ttc" id="anamespaceripple_html_adfb760bc3e4ccb79d5d4f6ecff2f1817"><div class="ttname"><a href="namespaceripple.html#adfb760bc3e4ccb79d5d4f6ecff2f1817">ripple::TER</a></div><div class="ttdeci">TERSubset&lt; CanCvtToTER &gt; TER</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00643">TER.h:643</a></div></div>
<div class="ttc" id="anamespaceripple_html_aea4620f7a5356019edee3be624729c6d"><div class="ttname"><a href="namespaceripple.html#aea4620f7a5356019edee3be624729c6d">ripple::withdrawByTokens</a></div><div class="ttdeci">STAmount withdrawByTokens(STAmount const &amp;assetBalance, STAmount const &amp;lptAMMBalance, STAmount const &amp;lpTokens, std::uint16_t tfee)</div><div class="ttdoc">Calculate asset withdrawal by tokens.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00114">AMMHelpers.cpp:114</a></div></div>
<div class="ttc" id="anamespaceripple_html_aea954383230f579cb080646b898088a5"><div class="ttname"><a href="namespaceripple.html#aea954383230f579cb080646b898088a5">ripple::withinRelativeDistance</a></div><div class="ttdeci">bool withinRelativeDistance(Quality const &amp;calcQuality, Quality const &amp;reqQuality, Number const &amp;dist)</div><div class="ttdoc">Check if the relative distance between the qualities is within the requested distance.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8h_source.html#l00127">AMMHelpers.h:127</a></div></div>
<div class="ttc" id="anamespaceripple_html_ae72b56b6709fd192e009123c40d47af6"><div class="ttname"><a href="namespaceripple.html#ae72b56b6709fd192e009123c40d47af6">ripple::getRoundedAsset</a></div><div class="ttdeci">STAmount getRoundedAsset(Rules const &amp;rules, STAmount const &amp;balance, A const &amp;frac, IsDeposit isDeposit)</div><div class="ttdoc">Round AMM equal deposit/withdrawal amount.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8h_source.html#l00678">AMMHelpers.h:678</a></div></div>
<div class="ttc" id="anamespaceripple_html_aea954383230f579cb080646b898088a5"><div class="ttname"><a href="namespaceripple.html#aea954383230f579cb080646b898088a5">ripple::withinRelativeDistance</a></div><div class="ttdeci">bool withinRelativeDistance(Quality const &amp;calcQuality, Quality const &amp;reqQuality, Number const &amp;dist)</div><div class="ttdoc">Check if the relative distance between the qualities is within the requested distance.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8h_source.html#l00129">AMMHelpers.h:129</a></div></div>
<div class="ttc" id="anamespaceripple_html_aefc2d6a8a1a2e3a721848b3ccb011fcd"><div class="ttname"><a href="namespaceripple.html#aefc2d6a8a1a2e3a721848b3ccb011fcd">ripple::adjustFracByTokens</a></div><div class="ttdeci">Number adjustFracByTokens(Rules const &amp;rules, STAmount const &amp;lptAMMBalance, STAmount const &amp;tokens, Number const &amp;frac)</div><div class="ttdoc">Find a fraction of tokens after the tokens are adjusted.</div><div class="ttdef"><b>Definition:</b> <a href="AMMHelpers_8cpp_source.html#l00401">AMMHelpers.cpp:401</a></div></div>
<div class="ttc" id="anamespaceripple_html_af2e2ee9b2b3499ff23ebbc249e188764"><div class="ttname"><a href="namespaceripple.html#af2e2ee9b2b3499ff23ebbc249e188764">ripple::accountSend</a></div><div class="ttdeci">TER accountSend(ApplyView &amp;view, AccountID const &amp;uSenderID, AccountID const &amp;uReceiverID, STAmount const &amp;saAmount, beast::Journal j, WaiveTransferFee waiveFee)</div><div class="ttdoc">Calls static accountSendIOU if saAmount represents Issue.</div><div class="ttdef"><b>Definition:</b> <a href="View_8cpp_source.html#l01998">View.cpp:1998</a></div></div>
<div class="ttc" id="anamespaceripple_html_af99ba2263d2a1e29207c40a35fc9f6b3"><div class="ttname"><a href="namespaceripple.html#af99ba2263d2a1e29207c40a35fc9f6b3">ripple::NotTEC</a></div><div class="ttdeci">TERSubset&lt; CanCvtToNotTEC &gt; NotTEC</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00603">TER.h:603</a></div></div>
<div class="ttc" id="anamespaceripple_html_afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328"><div class="ttname"><a href="namespaceripple.html#afe21c8454670d46fb93751a5edffed46a6c750a245b6efb84fdc4ab34dc010328">ripple::temMALFORMED</a></div><div class="ttdeci">@ temMALFORMED</div><div class="ttdef"><b>Definition:</b> <a href="TER_8h_source.html#l00087">TER.h:87</a></div></div>